automated avatar building & fix avatar import

This commit is contained in:
minjaesong
2024-09-26 00:44:41 +09:00
parent b344b3b161
commit f89c2618fd
16 changed files with 358 additions and 62 deletions

View File

@@ -1,7 +1,7 @@
<component name="ArtifactManager">
<artifact type="jar" name="SpriteAssemblerApp">
<output-path>$PROJECT_DIR$/out</output-path>
<root id="archive" name="terrarum.terrarum.jar">
<root id="archive" name="SpriteAssemblerApp.jar">
<element id="directory" name="META-INF">
<element id="file-copy" path="$PROJECT_DIR$/src/net/torvald/terrarum/spriteassembler/META-INF/MANIFEST.MF" />
</element>
@@ -31,56 +31,58 @@
<element id="extracted-dir" path="$PROJECT_DIR$/lib/js-scriptengine-22.3.1.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/regex-22.3.1-edit.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/truffle-api-22.3.1.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/gdx-1.12.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/gdx-backend-lwjgl3-1.12.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-3.3.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-3.3.2-natives-linux.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-3.3.2-natives-linux-arm32.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-3.3.2-natives-linux-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-3.3.2-natives-macos.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-3.3.2-natives-macos-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-3.3.2-natives-windows.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-3.3.2-natives-windows-x86.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-glfw-3.3.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-glfw-3.3.2-natives-linux.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-glfw-3.3.2-natives-linux-arm32.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-glfw-3.3.2-natives-linux-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-glfw-3.3.2-natives-macos.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-glfw-3.3.2-natives-macos-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-glfw-3.3.2-natives-windows.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-glfw-3.3.2-natives-windows-x86.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-jemalloc-3.3.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-jemalloc-3.3.2-natives-linux.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-jemalloc-3.3.2-natives-linux-arm32.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-jemalloc-3.3.2-natives-linux-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-jemalloc-3.3.2-natives-macos.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-jemalloc-3.3.2-natives-macos-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-jemalloc-3.3.2-natives-windows.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-jemalloc-3.3.2-natives-windows-x86.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-openal-3.3.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-openal-3.3.2-natives-linux.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-openal-3.3.2-natives-linux-arm32.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-openal-3.3.2-natives-linux-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-openal-3.3.2-natives-macos.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-openal-3.3.2-natives-macos-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-openal-3.3.2-natives-windows.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-openal-3.3.2-natives-windows-x86.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-opengl-3.3.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-opengl-3.3.2-natives-linux.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-opengl-3.3.2-natives-linux-arm32.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-opengl-3.3.2-natives-linux-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-opengl-3.3.2-natives-macos.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-opengl-3.3.2-natives-macos-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-opengl-3.3.2-natives-windows.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-opengl-3.3.2-natives-windows-x86.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-stb-3.3.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-stb-3.3.2-natives-linux.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-stb-3.3.2-natives-linux-arm32.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-stb-3.3.2-natives-linux-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-stb-3.3.2-natives-macos.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-stb-3.3.2-natives-macos-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-stb-3.3.2-natives-windows.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-stb-3.3.2-natives-windows-x86.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/gdx-1.12.1.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/gdx-backend-lwjgl3-1.12.1.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-3.3.3.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-3.3.3-natives-linux.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-3.3.3-natives-linux-arm32.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-3.3.3-natives-linux-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-3.3.3-natives-macos.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-3.3.3-natives-macos-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-3.3.3-natives-windows.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-3.3.3-natives-windows-x86.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-glfw-3.3.3.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-glfw-3.3.3-natives-linux.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-glfw-3.3.3-natives-linux-arm32.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-glfw-3.3.3-natives-linux-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-glfw-3.3.3-natives-macos.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-glfw-3.3.3-natives-macos-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-glfw-3.3.3-natives-windows.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-glfw-3.3.3-natives-windows-x86.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-jemalloc-3.3.3.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-jemalloc-3.3.3-natives-linux.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-jemalloc-3.3.3-natives-linux-arm32.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-jemalloc-3.3.3-natives-linux-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-jemalloc-3.3.3-natives-macos.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-jemalloc-3.3.3-natives-macos-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-jemalloc-3.3.3-natives-windows.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-jemalloc-3.3.3-natives-windows-x86.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-openal-3.3.3.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-openal-3.3.3-natives-linux.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-openal-3.3.3-natives-linux-arm32.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-openal-3.3.3-natives-linux-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-openal-3.3.3-natives-macos.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-openal-3.3.3-natives-macos-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-openal-3.3.3-natives-windows.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-openal-3.3.3-natives-windows-x86.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-opengl-3.3.3.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-opengl-3.3.3-natives-linux.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-opengl-3.3.3-natives-linux-arm32.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-opengl-3.3.3-natives-linux-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-opengl-3.3.3-natives-macos.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-opengl-3.3.3-natives-macos-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-opengl-3.3.3-natives-windows.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-opengl-3.3.3-natives-windows-x86.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-stb-3.3.3.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-stb-3.3.3-natives-linux.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-stb-3.3.3-natives-linux-arm32.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-stb-3.3.3-natives-linux-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-stb-3.3.3-natives-macos.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-stb-3.3.3-natives-macos-arm64.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-stb-3.3.3-natives-windows.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/lwjgl-stb-3.3.3-natives-windows-x86.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/jlayer-1.0.1-gdx.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PROJECT_DIR$/lib/jorbis-0.0.17.jar" path-in-jar="/" />
</root>
</artifact>
</component>

View File

@@ -0,0 +1,31 @@
SPRITESHEET=mods/basegame/sprites/fofu/fofu_
EXTENSION=.tga
CONFIG=SIZE 48,56;ORIGINX 29
BODYPARTS=HEADGEAR 11,11;\
HEAD 11,11;\
ARM_REST_RIGHT 4,2;\
ARM_REST_LEFT 4,2;\
LEG_REST_RIGHT 4,7;\
LEG_REST_LEFT 4,7;\
TORSO 10,4;\
TAIL_0 20,1;\
HELD_ITEM 0,0
SKELETON_STAND=HEADGEAR 0,32;HAIR_FORE 0,32;\
ARM_REST_RIGHT -7,23;HELD_ITEM -6,11;\
HAIR 0,32;HEAD 0,32;\
TORSO 0,22;\
LEG_REST_RIGHT -2,7;\
LEG_REST_LEFT 2,7;\
ARM_REST_LEFT 5,24;\
TAIL_0 0,13
ANIM_RUN=DELAY 0.15;ROW 2;SKELETON SKELETON_STAND
ANIM_RUN_1=LEG_REST_RIGHT 1,1;LEG_REST_LEFT -1,0
ANIM_RUN_2=ALL 0,1;LEG_REST_RIGHT 0,-1;LEG_REST_LEFT 0,1
ANIM_RUN_3=LEG_REST_RIGHT -1,0;LEG_REST_LEFT 1,1
ANIM_RUN_4=ALL 0,1;LEG_REST_RIGHT 0,1;LEG_REST_LEFT 0,-1
ANIM_IDLE=DELAY 2;ROW 1;SKELETON SKELETON_STAND
ANIM_IDLE_1=
ANIM_IDLE_2=TORSO 0,-1;HEAD 0,-1;HAIR 0,-1;HELD_ITEM 0,-1;\
ARM_REST_LEFT 0,-1;ARM_REST_RIGHT 0,-1;\
HAIR_FORE 0,-1;HEADGEAR 0,-1

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,31 @@
SPRITESHEET=mods/basegame/sprites/fofu/fofuemsv_
EXTENSION=.tga
CONFIG=SIZE 48,56;ORIGINX 29
BODYPARTS=HEADGEAR 11,11;\
HEAD 11,11;\
ARM_REST_RIGHT 4,2;\
ARM_REST_LEFT 4,2;\
LEG_REST_RIGHT 4,7;\
LEG_REST_LEFT 4,7;\
TORSO 10,4;\
TAIL_0 20,1;\
HELD_ITEM 0,0
SKELETON_STAND=HEADGEAR 0,32;HAIR_FORE 0,32;\
ARM_REST_RIGHT -7,23;HELD_ITEM -6,11;\
HAIR 0,32;HEAD 0,32;\
TORSO 0,22;\
LEG_REST_RIGHT -2,7;\
LEG_REST_LEFT 2,7;\
ARM_REST_LEFT 5,24;\
TAIL_0 0,13
ANIM_RUN=DELAY 0.15;ROW 2;SKELETON SKELETON_STAND
ANIM_RUN_1=LEG_REST_RIGHT 1,1;LEG_REST_LEFT -1,0
ANIM_RUN_2=ALL 0,1;LEG_REST_RIGHT 0,-1;LEG_REST_LEFT 0,1
ANIM_RUN_3=LEG_REST_RIGHT -1,0;LEG_REST_LEFT 1,1
ANIM_RUN_4=ALL 0,1;LEG_REST_RIGHT 0,1;LEG_REST_LEFT 0,-1
ANIM_IDLE=DELAY 2;ROW 1;SKELETON SKELETON_STAND
ANIM_IDLE_1=
ANIM_IDLE_2=TORSO 0,-1;HEAD 0,-1;HAIR 0,-1;HELD_ITEM 0,-1;\
ARM_REST_LEFT 0,-1;ARM_REST_RIGHT 0,-1;\
HAIR_FORE 0,-1;HEADGEAR 0,-1

View File

@@ -0,0 +1,31 @@
SPRITESHEET=mods/basegame/sprites/fofu/fofuglow_
EXTENSION=.tga
CONFIG=SIZE 48,56;ORIGINX 29
BODYPARTS=HEADGEAR 11,11;\
HEAD 11,11;\
ARM_REST_RIGHT 4,2;\
ARM_REST_LEFT 4,2;\
LEG_REST_RIGHT 4,7;\
LEG_REST_LEFT 4,7;\
TORSO 10,4;\
TAIL_0 20,1;\
HELD_ITEM 0,0
SKELETON_STAND=HEADGEAR 0,32;HAIR_FORE 0,32;\
ARM_REST_RIGHT -7,23;HELD_ITEM -6,11;\
HAIR 0,32;HEAD 0,32;\
TORSO 0,22;\
LEG_REST_RIGHT -2,7;\
LEG_REST_LEFT 2,7;\
ARM_REST_LEFT 5,24;\
TAIL_0 0,13
ANIM_RUN=DELAY 0.15;ROW 2;SKELETON SKELETON_STAND
ANIM_RUN_1=LEG_REST_RIGHT 1,1;LEG_REST_LEFT -1,0
ANIM_RUN_2=ALL 0,1;LEG_REST_RIGHT 0,-1;LEG_REST_LEFT 0,1
ANIM_RUN_3=LEG_REST_RIGHT -1,0;LEG_REST_LEFT 1,1
ANIM_RUN_4=ALL 0,1;LEG_REST_RIGHT 0,1;LEG_REST_LEFT 0,-1
ANIM_IDLE=DELAY 2;ROW 1;SKELETON SKELETON_STAND
ANIM_IDLE_1=
ANIM_IDLE_2=TORSO 0,-1;HEAD 0,-1;HAIR 0,-1;HELD_ITEM 0,-1;\
ARM_REST_LEFT 0,-1;ARM_REST_RIGHT 0,-1;\
HAIR_FORE 0,-1;HEADGEAR 0,-1

View File

@@ -10,9 +10,9 @@ import net.torvald.terrarum.gameactors.AVKey
object PlayerBuilderTestSubject1 {
operator fun invoke(): IngamePlayer {
val p: IngamePlayer = IngamePlayer(
ModMgr.getGdxFile("basegame", "sprites/test_sprite.properties").path(),
ModMgr.getGdxFile("basegame", "sprites/test_sprite_glow.properties").path(),
ModMgr.getGdxFile("basegame", "sprites/test_sprite_emsv.properties").path(),
ModMgr.getGdxFile("basegame", "sprites/fofu.properties").path(),
ModMgr.getGdxFile("basegame", "sprites/fofu_glow.properties").path(),
ModMgr.getGdxFile("basegame", "sprites/fofu_emsv.properties").path(),
0L // random value thrown
)
InjectCreatureRaw(p.actorValue, "basegame", "CreaturePlayer.json")

View File

@@ -65,8 +65,9 @@ class UIImportAvatar(val remoCon: UIRemoCon) : Advanceable() {
it.clickOnceListener = { _,_ ->
if (filenameInput.getText().isNotBlank()) {
importReturnCode = doImport()
if (importReturnCode == 0) remoCon.openUI(UILoadSavegame(remoCon))
val (importReturnCode, avatarDisk) = doImport()
this.importReturnCode = importReturnCode
if (importReturnCode == 0) remoCon.openUI(UINewWorld(remoCon, avatarDisk!!))
}
}
}
@@ -143,14 +144,16 @@ class UIImportAvatar(val remoCon: UIRemoCon) : Advanceable() {
override fun advanceMode(button: UIItem) {
}
private fun doImport(): Int {
private fun doImport(): Pair<Int, DiskSkimmer?> {
val file = File("${App.importDir}/${filenameInput.getText().trim()}")
// check file's existence
if (!file.exists()) {
return 1
return 1 to null
}
var retDisk: DiskSkimmer? = null
// try to mount the TEVd
try {
val dom = VDUtil.readDiskArchive(file)
@@ -164,7 +167,7 @@ class UIImportAvatar(val remoCon: UIRemoCon) : Advanceable() {
printdbg(this, "Avatar uuid: $uuid")
if (newFile.exists()) return 2
if (newFile.exists()) return 2 to null
// update playerinfo so that:
// totalPlayTime to zero
@@ -212,6 +215,8 @@ class UIImportAvatar(val remoCon: UIRemoCon) : Advanceable() {
App.sortedPlayers.add(0, playerUUID)
App.savegamePlayersName[playerUUID] = it.getDiskName(Common.CHARSET)
}
retDisk = it
}
catch (e: Throwable) {
printdbgerr(this, e.stackTraceToString())
@@ -220,10 +225,10 @@ class UIImportAvatar(val remoCon: UIRemoCon) : Advanceable() {
catch (e: Throwable) {
// format error
e.printStackTrace()
return -1
return -1 to null
}
return 0
return 0 to retDisk
}
}

View File

@@ -313,6 +313,7 @@ object VDFileID {
const val LOADORDER = -4L
const val PLAYER_SCREENSHOT = -5L
const val SPRITEDEF_EMISSIVE = -6L
const val SPRITEDEF_EMSV = -7L
const val BODYPART_TO_ENTRY_MAP = -1025L
const val BODYPARTGLOW_TO_ENTRY_MAP = -1026L
const val BODYPARTEMISSIVE_TO_ENTRY_MAP = -1027L
@@ -333,6 +334,11 @@ fun diskIDtoReadableFilename(id: EntryID, saveKind: Int?): String = when (id) {
"spritedef-glow"
else
"file #$id"
VDFileID.SPRITEDEF_EMSV ->
if (saveKind == PLAYER_DATA)
"spritedef-glow"
else
"file #$id"
VDFileID.PLAYER_SCREENSHOT ->
if (saveKind == PLAYER_DATA)
"screenshot.tga.gz"
@@ -347,7 +353,7 @@ fun diskIDtoReadableFilename(id: EntryID, saveKind: Int?): String = when (id) {
// -1024L -> "apocryphas.json.gz"
VDFileID.BODYPART_TO_ENTRY_MAP -> "bodypart-to-entry.map"
VDFileID.BODYPARTGLOW_TO_ENTRY_MAP -> "bodypartglow-to-entry.map"
VDFileID.BODYPARTEMISSIVE_TO_ENTRY_MAP -> "bodypartemissive-to-entry.map"
VDFileID.BODYPARTEMISSIVE_TO_ENTRY_MAP -> "bodypartemsv-to-entry.map"
in 1..65535 ->
if (saveKind == PLAYER_DATA)
"bodypart #$id.tga.gz"

View File

@@ -0,0 +1,166 @@
package net.torvald.terrarum.spriteassembler
import com.badlogic.gdx.Gdx
import net.torvald.terrarum.App
import net.torvald.terrarum.savegame.*
import net.torvald.terrarum.savegame.VDFileID.BODYPARTEMISSIVE_TO_ENTRY_MAP
import net.torvald.terrarum.savegame.VDFileID.BODYPARTGLOW_TO_ENTRY_MAP
import net.torvald.terrarum.savegame.VDFileID.BODYPART_TO_ENTRY_MAP
import net.torvald.terrarum.savegame.VDFileID.PLAYER_SCREENSHOT
import net.torvald.terrarum.savegame.VDFileID.ROOT
import net.torvald.terrarum.savegame.VDFileID.SAVEGAMEINFO
import net.torvald.terrarum.savegame.VDFileID.SPRITEDEF
import net.torvald.terrarum.savegame.VDFileID.SPRITEDEF_EMSV
import net.torvald.terrarum.savegame.VDFileID.SPRITEDEF_GLOW
import net.torvald.terrarum.serialise.Common
import java.awt.BorderLayout
import java.awt.Dimension
import java.awt.GridLayout
import java.awt.event.MouseAdapter
import java.awt.event.MouseEvent
import java.io.File
import javax.swing.*
/**
* Created by minjaesong on 2024-09-25.
*/
class AvatarBuilder : JFrame() {
private val infilePath = JTextField().also { it.preferredSize = Dimension(400, 24) }
private val outfilePath = JTextField().also { it.preferredSize = Dimension(400, 24) }
private val buttonGo = JButton("Export!")
init {
val panelPlayer = JPanel().also {
it.add(JLabel("Player File"))
it.add(infilePath)
}
val panelOutput = JPanel().also {
it.add(JLabel("Output File"))
it.add(outfilePath)
}
val controlPanel = JPanel().also {
it.add(buttonGo)
}
val panelMain = JPanel().also {
it.layout = GridLayout(2, 1)
it.add(panelPlayer, 0)
it.add(panelOutput, 1)
}
this.layout = BorderLayout()
this.add(panelMain, BorderLayout.CENTER)
this.add(controlPanel, BorderLayout.SOUTH)
this.title = "Terrarum Avatar Generator"
this.isVisible = true
this.setSize(480, 120)
this.defaultCloseOperation = WindowConstants.EXIT_ON_CLOSE
buttonGo.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent?) {
if (infilePath.text.isNotBlank() && outfilePath.text.isNotBlank()) {
try {
invoke(File(infilePath.text), File(outfilePath.text))
popupMessage("Exported successfully!")
}
catch (e: Throwable) {
e.printStackTrace()
popupError(e.message ?: "null")
}
}
}
})
}
private fun popupMessage(message: String, title: String = "") {
JOptionPane.showOptionDialog(
null,
message,
title,
JOptionPane.DEFAULT_OPTION,
JOptionPane.INFORMATION_MESSAGE,
null, null, null
)
}
private fun popupError(message: String, title: String = "Uh oh…") {
JOptionPane.showOptionDialog(
null,
message,
title,
JOptionPane.DEFAULT_OPTION,
JOptionPane.ERROR_MESSAGE,
null, null, null
)
}
private var lastBodypartIndex = 0L
operator fun invoke(playerSavegameFile: File, outFile: File) {
val dom = VDUtil.readDiskArchive(playerSavegameFile)
val playerInfoFile = dom.getEntry(SAVEGAMEINFO)!!
val spritedefFile = dom.getEntry(SPRITEDEF)!!
val spritedefGlowFile = dom.getEntry(SPRITEDEF_GLOW)
val spritedefEmsvFile = dom.getEntry(SPRITEDEF_EMSV)
val screencap = dom.getEntry(PLAYER_SCREENSHOT)
val playerName = dom.diskName.toCanonicalString(Common.CHARSET)
val outDisk = VDUtil.createNewDisk(4294967295L, playerName, Common.CHARSET)
val timeNow = App.getTIME_T()
// initialise outDisk DOM
VDUtil.addFile(outDisk, playerInfoFile)
VDUtil.addFile(outDisk, spritedefFile)
spritedefGlowFile?.let { VDUtil.addFile(outDisk, it) }
spritedefEmsvFile?.let { VDUtil.addFile(outDisk, it) }
screencap?.let {VDUtil.addFile(outDisk, it) }
putBodyparts(timeNow, outDisk, spritedefFile, BODYPART_TO_ENTRY_MAP)
spritedefGlowFile?.let { putBodyparts(timeNow, outDisk, it, BODYPARTGLOW_TO_ENTRY_MAP) }
spritedefEmsvFile?.let { putBodyparts(timeNow, outDisk, it, BODYPARTEMISSIVE_TO_ENTRY_MAP) }
outDisk.saveKind = VDSaveKind.PLAYER_DATA
VDUtil.dumpToRealMachine(outDisk, outFile)
}
// will write: bodypart images, spritedef, to the disk
private fun putBodyparts(timeNow: Long, outDisk: VirtualDisk, spritedefFile: DiskEntry, bodypartsToEntryFileID: Long) {
val bodypartsToEntry = StringBuilder()
val adp = ADProperties(ByteArray64Reader(spritedefFile.contents.getContent() as ByteArray64, Common.CHARSET))
val images = adp.bodyparts.map { // Pair: "HEAD" to "mods/basegame/sprites/***/prefix_HEAD.tga"
it.uppercase() to adp.toFilename(it)
}
images.forEach { (name, path) ->
val bodypartFileNative = File("assets/$path")
if (bodypartFileNative.exists()) {
lastBodypartIndex += 1L
// write to bodypartsToEntry file content
bodypartsToEntry.append("$name=$lastBodypartIndex\n")
// copy image into new disk
val bodypartFile = VDUtil.importFile(bodypartFileNative, lastBodypartIndex, Common.CHARSET)
VDUtil.addFile(outDisk, bodypartFile)
}
}
// write bodypartsToEntry as a file
val bodypartsToEntryFileContent = EntryFile(ByteArray64.fromByteArray(bodypartsToEntry.toString().toByteArray(Common.CHARSET)))
val bodypartsToEntryFile = DiskEntry(bodypartsToEntryFileID, ROOT, timeNow, timeNow, bodypartsToEntryFileContent)
VDUtil.addFile(outDisk, bodypartsToEntryFile)
}
}
fun main(args: Array<String>) {
AvatarBuilder()
}

Binary file not shown.