From 5ce19327dbd64b0dab2afd41aed260a297ce9a2a Mon Sep 17 00:00:00 2001 From: jdflyer Date: Wed, 15 Feb 2023 07:02:56 -0700 Subject: [PATCH] Fix REL Spelling + Tool Improvements (#285) * AST conversion library * Improved Shifted lcf * copydate and frameworkF.str * Fix REL Capitalization * Fix Packaging --- include_link.mk | 16 +- obj_files.mk | 16 +- rel/d/a/{d_a_cstaf => d_a_cstaF}/Makefile | 12 +- .../a/{d_a_cstaf => d_a_cstaF}/d_a_cstaF.cpp | 0 .../Makefile | 16 +- .../d_a_door_bossL1.cpp | 0 .../unknown_translation_unit_bss.cpp | 0 .../Makefile | 12 +- .../d_a_obj_gpTaru.cpp | 0 .../Makefile | 12 +- .../d_a_obj_ktOnFire.cpp | 0 .../Makefile | 12 +- .../d_a_obj_lv2Candle.cpp | 0 .../Makefile | 12 +- .../d_a_obj_sWallShutter.cpp | 0 .../Makefile | 12 +- .../d_a_obj_stoneMark.cpp | 0 .../Makefile | 12 +- .../d_a_tag_CstaSw.cpp | 0 sha1sums.json | 16 +- tools/lcf.py | 213 +++++++-- tools/libast/__init__.py | 1 + tools/libast/libast.py | 417 ++++++++++++++++++ tools/makerel.py | 2 +- tools/package_game_assets.py | 32 +- 25 files changed, 688 insertions(+), 125 deletions(-) rename rel/d/a/{d_a_cstaf => d_a_cstaF}/Makefile (76%) rename rel/d/a/{d_a_cstaf => d_a_cstaF}/d_a_cstaF.cpp (100%) rename rel/d/a/door/{d_a_door_bossl1 => d_a_door_bossL1}/Makefile (65%) rename rel/d/a/door/{d_a_door_bossl1 => d_a_door_bossL1}/d_a_door_bossL1.cpp (100%) rename rel/d/a/door/{d_a_door_bossl1 => d_a_door_bossL1}/unknown_translation_unit_bss.cpp (100%) rename rel/d/a/obj/{d_a_obj_gptaru => d_a_obj_gpTaru}/Makefile (73%) rename rel/d/a/obj/{d_a_obj_gptaru => d_a_obj_gpTaru}/d_a_obj_gpTaru.cpp (100%) rename rel/d/a/obj/{d_a_obj_ktonfire => d_a_obj_ktOnFire}/Makefile (72%) rename rel/d/a/obj/{d_a_obj_ktonfire => d_a_obj_ktOnFire}/d_a_obj_ktOnFire.cpp (100%) rename rel/d/a/obj/{d_a_obj_lv2candle => d_a_obj_lv2Candle}/Makefile (72%) rename rel/d/a/obj/{d_a_obj_lv2candle => d_a_obj_lv2Candle}/d_a_obj_lv2Candle.cpp (100%) rename rel/d/a/obj/{d_a_obj_swallshutter => d_a_obj_sWallShutter}/Makefile (71%) rename rel/d/a/obj/{d_a_obj_swallshutter => d_a_obj_sWallShutter}/d_a_obj_sWallShutter.cpp (100%) rename rel/d/a/obj/{d_a_obj_stonemark => d_a_obj_stoneMark}/Makefile (71%) rename rel/d/a/obj/{d_a_obj_stonemark => d_a_obj_stoneMark}/d_a_obj_stoneMark.cpp (100%) rename rel/d/a/tag/{d_a_tag_cstasw => d_a_tag_CstaSw}/Makefile (73%) rename rel/d/a/tag/{d_a_tag_cstasw => d_a_tag_CstaSw}/d_a_tag_CstaSw.cpp (100%) create mode 100644 tools/libast/__init__.py create mode 100644 tools/libast/libast.py diff --git a/include_link.mk b/include_link.mk index c0df6258c0d..20e79874659 100644 --- a/include_link.mk +++ b/include_link.mk @@ -110,9 +110,9 @@ -include rel/d/a/d_a_andsw2/Makefile -include rel/d/a/d_a_bd/Makefile -include rel/d/a/d_a_canoe/Makefile --include rel/d/a/d_a_cstaf/Makefile +-include rel/d/a/d_a_cstaF/Makefile -include rel/d/a/d_a_demo_item/Makefile --include rel/d/a/door/d_a_door_bossl1/Makefile +-include rel/d/a/door/d_a_door_bossL1/Makefile -include rel/d/a/e/d_a_e_dn/Makefile -include rel/d/a/e/d_a_e_fm/Makefile -include rel/d/a/e/d_a_e_ga/Makefile @@ -144,24 +144,24 @@ -include rel/d/a/obj/d_a_obj_digplace/Makefile -include rel/d/a/obj/d_a_obj_eff/Makefile -include rel/d/a/obj/d_a_obj_fmobj/Makefile --include rel/d/a/obj/d_a_obj_gptaru/Makefile +-include rel/d/a/obj/d_a_obj_gpTaru/Makefile -include rel/d/a/obj/d_a_obj_hhashi/Makefile -include rel/d/a/obj/d_a_obj_kanban2/Makefile -include rel/d/a/obj/d_a_obj_kbacket/Makefile -include rel/d/a/obj/d_a_obj_kgate/Makefile -include rel/d/a/obj/d_a_obj_klift00/Makefile --include rel/d/a/obj/d_a_obj_ktonfire/Makefile +-include rel/d/a/obj/d_a_obj_ktOnFire/Makefile -include rel/d/a/obj/d_a_obj_ladder/Makefile --include rel/d/a/obj/d_a_obj_lv2candle/Makefile +-include rel/d/a/obj/d_a_obj_lv2Candle/Makefile -include rel/d/a/obj/d_a_obj_magne_arm/Makefile -include rel/d/a/obj/d_a_obj_metalbox/Makefile -include rel/d/a/obj/d_a_obj_mgate/Makefile -include rel/d/a/obj/d_a_obj_nameplate/Makefile -include rel/d/a/obj/d_a_obj_ornament_cloth/Makefile -include rel/d/a/obj/d_a_obj_rope_bridge/Makefile --include rel/d/a/obj/d_a_obj_swallshutter/Makefile +-include rel/d/a/obj/d_a_obj_sWallShutter/Makefile -include rel/d/a/obj/d_a_obj_stick/Makefile --include rel/d/a/obj/d_a_obj_stonemark/Makefile +-include rel/d/a/obj/d_a_obj_stoneMark/Makefile -include rel/d/a/obj/d_a_obj_swpropeller/Makefile -include rel/d/a/obj/d_a_obj_swpush5/Makefile -include rel/d/a/obj/d_a_obj_yobikusa/Makefile @@ -169,7 +169,7 @@ -include rel/d/a/d_a_shop_item/Makefile -include rel/d/a/d_a_sq/Makefile -include rel/d/a/d_a_swc00/Makefile --include rel/d/a/tag/d_a_tag_cstasw/Makefile +-include rel/d/a/tag/d_a_tag_CstaSw/Makefile -include rel/d/a/tag/d_a_tag_ajnot/Makefile -include rel/d/a/tag/d_a_tag_attack_item/Makefile -include rel/d/a/tag/d_a_tag_gstart/Makefile diff --git a/obj_files.mk b/obj_files.mk index 646c3401da3..06a435819ab 100644 --- a/obj_files.mk +++ b/obj_files.mk @@ -349,9 +349,9 @@ RELS := \ $(BUILD_DIR)/rel/d/a/d_a_andsw2.plf \ $(BUILD_DIR)/rel/d/a/d_a_bd.plf \ $(BUILD_DIR)/rel/d/a/d_a_canoe.plf \ - $(BUILD_DIR)/rel/d/a/d_a_cstaf.plf \ + $(BUILD_DIR)/rel/d/a/d_a_cstaF.plf \ $(BUILD_DIR)/rel/d/a/d_a_demo_item.plf \ - $(BUILD_DIR)/rel/d/a/door/d_a_door_bossl1.plf \ + $(BUILD_DIR)/rel/d/a/door/d_a_door_bossL1.plf \ $(BUILD_DIR)/rel/d/a/e/d_a_e_dn.plf \ $(BUILD_DIR)/rel/d/a/e/d_a_e_fm.plf \ $(BUILD_DIR)/rel/d/a/e/d_a_e_ga.plf \ @@ -383,24 +383,24 @@ RELS := \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_digplace.plf \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_eff.plf \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_fmobj.plf \ - $(BUILD_DIR)/rel/d/a/obj/d_a_obj_gptaru.plf \ + $(BUILD_DIR)/rel/d/a/obj/d_a_obj_gpTaru.plf \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_hhashi.plf \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_kanban2.plf \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_kbacket.plf \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_kgate.plf \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_klift00.plf \ - $(BUILD_DIR)/rel/d/a/obj/d_a_obj_ktonfire.plf \ + $(BUILD_DIR)/rel/d/a/obj/d_a_obj_ktOnFire.plf \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_ladder.plf \ - $(BUILD_DIR)/rel/d/a/obj/d_a_obj_lv2candle.plf \ + $(BUILD_DIR)/rel/d/a/obj/d_a_obj_lv2Candle.plf \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_magne_arm.plf \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_metalbox.plf \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_mgate.plf \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_nameplate.plf \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_ornament_cloth.plf \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_rope_bridge.plf \ - $(BUILD_DIR)/rel/d/a/obj/d_a_obj_swallshutter.plf \ + $(BUILD_DIR)/rel/d/a/obj/d_a_obj_sWallShutter.plf \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_stick.plf \ - $(BUILD_DIR)/rel/d/a/obj/d_a_obj_stonemark.plf \ + $(BUILD_DIR)/rel/d/a/obj/d_a_obj_stoneMark.plf \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_swpropeller.plf \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_swpush5.plf \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_yobikusa.plf \ @@ -408,7 +408,7 @@ RELS := \ $(BUILD_DIR)/rel/d/a/d_a_shop_item.plf \ $(BUILD_DIR)/rel/d/a/d_a_sq.plf \ $(BUILD_DIR)/rel/d/a/d_a_swc00.plf \ - $(BUILD_DIR)/rel/d/a/tag/d_a_tag_cstasw.plf \ + $(BUILD_DIR)/rel/d/a/tag/d_a_tag_CstaSw.plf \ $(BUILD_DIR)/rel/d/a/tag/d_a_tag_ajnot.plf \ $(BUILD_DIR)/rel/d/a/tag/d_a_tag_attack_item.plf \ $(BUILD_DIR)/rel/d/a/tag/d_a_tag_gstart.plf \ diff --git a/rel/d/a/d_a_cstaf/Makefile b/rel/d/a/d_a_cstaF/Makefile similarity index 76% rename from rel/d/a/d_a_cstaf/Makefile rename to rel/d/a/d_a_cstaF/Makefile index b1641974bc9..a1d9c731f0b 100644 --- a/rel/d/a/d_a_cstaf/Makefile +++ b/rel/d/a/d_a_cstaF/Makefile @@ -2,17 +2,17 @@ # Generated By: dol2asm # -M62_TARGET := $(BUILD_DIR)/rel/d/a/d_a_cstaf.plf -M62_LDSCRIPT := $(BUILD_DIR)/rel/d/a/d_a_cstaf.lcf -M62_MAP := $(BUILD_DIR)/rel/d/a/d_a_cstaf.map +M62_TARGET := $(BUILD_DIR)/rel/d/a/d_a_cstaF.plf +M62_LDSCRIPT := $(BUILD_DIR)/rel/d/a/d_a_cstaF.lcf +M62_MAP := $(BUILD_DIR)/rel/d/a/d_a_cstaF.map M62_CPP_FILES := \ rel/executor.cpp \ - rel/d/a/d_a_cstaf/d_a_cstaF.cpp \ + rel/d/a/d_a_cstaF/d_a_cstaF.cpp \ M62_O_FILES := \ $(BUILD_DIR)/rel/executor.o \ - $(BUILD_DIR)/rel/d/a/d_a_cstaf/d_a_cstaF.o \ + $(BUILD_DIR)/rel/d/a/d_a_cstaF/d_a_cstaF.o \ M62_LIBS := \ @@ -38,7 +38,7 @@ $(M62_TARGET): $(M62_O_FILES) $(M62_LIBS) @python3 tools/lcf.py rel 62 --output $(M62_LDSCRIPT) @$(LD) -opt_partial -strip_partial $(M62_LDFLAGS) -o $(M62_TARGET) @build/M62_ofiles -$(BUILD_DIR)/rel/d/a/d_a_cstaf/%.o: rel/d/a/d_a_cstaf/%.cpp $(BUILD_DIR)/rel/d/a/d_a_cstaf/%.d +$(BUILD_DIR)/rel/d/a/d_a_cstaF/%.o: rel/d/a/d_a_cstaF/%.cpp $(BUILD_DIR)/rel/d/a/d_a_cstaF/%.d @echo [ 62] building $@ @mkdir -p $(@D) @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).cpp diff --git a/rel/d/a/d_a_cstaf/d_a_cstaF.cpp b/rel/d/a/d_a_cstaF/d_a_cstaF.cpp similarity index 100% rename from rel/d/a/d_a_cstaf/d_a_cstaF.cpp rename to rel/d/a/d_a_cstaF/d_a_cstaF.cpp diff --git a/rel/d/a/door/d_a_door_bossl1/Makefile b/rel/d/a/door/d_a_door_bossL1/Makefile similarity index 65% rename from rel/d/a/door/d_a_door_bossl1/Makefile rename to rel/d/a/door/d_a_door_bossL1/Makefile index 33fc5a261c6..af64d12772b 100644 --- a/rel/d/a/door/d_a_door_bossl1/Makefile +++ b/rel/d/a/door/d_a_door_bossL1/Makefile @@ -2,19 +2,19 @@ # Generated By: dol2asm # -M64_TARGET := $(BUILD_DIR)/rel/d/a/door/d_a_door_bossl1.plf -M64_LDSCRIPT := $(BUILD_DIR)/rel/d/a/door/d_a_door_bossl1.lcf -M64_MAP := $(BUILD_DIR)/rel/d/a/door/d_a_door_bossl1.map +M64_TARGET := $(BUILD_DIR)/rel/d/a/door/d_a_door_bossL1.plf +M64_LDSCRIPT := $(BUILD_DIR)/rel/d/a/door/d_a_door_bossL1.lcf +M64_MAP := $(BUILD_DIR)/rel/d/a/door/d_a_door_bossL1.map M64_CPP_FILES := \ rel/executor.cpp \ - rel/d/a/door/d_a_door_bossl1/unknown_translation_unit_bss.cpp \ - rel/d/a/door/d_a_door_bossl1/d_a_door_bossL1.cpp \ + rel/d/a/door/d_a_door_bossL1/unknown_translation_unit_bss.cpp \ + rel/d/a/door/d_a_door_bossL1/d_a_door_bossL1.cpp \ M64_O_FILES := \ $(BUILD_DIR)/rel/executor.o \ - $(BUILD_DIR)/rel/d/a/door/d_a_door_bossl1/unknown_translation_unit_bss.o \ - $(BUILD_DIR)/rel/d/a/door/d_a_door_bossl1/d_a_door_bossL1.o \ + $(BUILD_DIR)/rel/d/a/door/d_a_door_bossL1/unknown_translation_unit_bss.o \ + $(BUILD_DIR)/rel/d/a/door/d_a_door_bossL1/d_a_door_bossL1.o \ M64_LIBS := \ @@ -40,7 +40,7 @@ $(M64_TARGET): $(M64_O_FILES) $(M64_LIBS) @python3 tools/lcf.py rel 64 --output $(M64_LDSCRIPT) @$(LD) -opt_partial -strip_partial $(M64_LDFLAGS) -o $(M64_TARGET) @build/M64_ofiles -$(BUILD_DIR)/rel/d/a/door/d_a_door_bossl1/%.o: rel/d/a/door/d_a_door_bossl1/%.cpp $(BUILD_DIR)/rel/d/a/door/d_a_door_bossl1/%.d +$(BUILD_DIR)/rel/d/a/door/d_a_door_bossL1/%.o: rel/d/a/door/d_a_door_bossL1/%.cpp $(BUILD_DIR)/rel/d/a/door/d_a_door_bossL1/%.d @echo [ 64] building $@ @mkdir -p $(@D) @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).cpp diff --git a/rel/d/a/door/d_a_door_bossl1/d_a_door_bossL1.cpp b/rel/d/a/door/d_a_door_bossL1/d_a_door_bossL1.cpp similarity index 100% rename from rel/d/a/door/d_a_door_bossl1/d_a_door_bossL1.cpp rename to rel/d/a/door/d_a_door_bossL1/d_a_door_bossL1.cpp diff --git a/rel/d/a/door/d_a_door_bossl1/unknown_translation_unit_bss.cpp b/rel/d/a/door/d_a_door_bossL1/unknown_translation_unit_bss.cpp similarity index 100% rename from rel/d/a/door/d_a_door_bossl1/unknown_translation_unit_bss.cpp rename to rel/d/a/door/d_a_door_bossL1/unknown_translation_unit_bss.cpp diff --git a/rel/d/a/obj/d_a_obj_gptaru/Makefile b/rel/d/a/obj/d_a_obj_gpTaru/Makefile similarity index 73% rename from rel/d/a/obj/d_a_obj_gptaru/Makefile rename to rel/d/a/obj/d_a_obj_gpTaru/Makefile index f54eff5324b..aadf2c14345 100644 --- a/rel/d/a/obj/d_a_obj_gptaru/Makefile +++ b/rel/d/a/obj/d_a_obj_gpTaru/Makefile @@ -2,19 +2,19 @@ # Generated By: dol2asm # -M96_TARGET := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_gptaru.plf -M96_LDSCRIPT := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_gptaru.lcf -M96_MAP := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_gptaru.map +M96_TARGET := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_gpTaru.plf +M96_LDSCRIPT := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_gpTaru.lcf +M96_MAP := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_gpTaru.map M96_CPP_FILES := \ rel/executor.cpp \ rel/global_destructor_chain.cpp \ - rel/d/a/obj/d_a_obj_gptaru/d_a_obj_gpTaru.cpp \ + rel/d/a/obj/d_a_obj_gpTaru/d_a_obj_gpTaru.cpp \ M96_O_FILES := \ $(BUILD_DIR)/rel/executor.o \ $(BUILD_DIR)/rel/global_destructor_chain.o \ - $(BUILD_DIR)/rel/d/a/obj/d_a_obj_gptaru/d_a_obj_gpTaru.o \ + $(BUILD_DIR)/rel/d/a/obj/d_a_obj_gpTaru/d_a_obj_gpTaru.o \ M96_LIBS := \ @@ -40,7 +40,7 @@ $(M96_TARGET): $(M96_O_FILES) $(M96_LIBS) @python3 tools/lcf.py rel 96 --output $(M96_LDSCRIPT) @$(LD) -opt_partial -strip_partial $(M96_LDFLAGS) -o $(M96_TARGET) @build/M96_ofiles -$(BUILD_DIR)/rel/d/a/obj/d_a_obj_gptaru/%.o: rel/d/a/obj/d_a_obj_gptaru/%.cpp $(BUILD_DIR)/rel/d/a/obj/d_a_obj_gptaru/%.d +$(BUILD_DIR)/rel/d/a/obj/d_a_obj_gpTaru/%.o: rel/d/a/obj/d_a_obj_gpTaru/%.cpp $(BUILD_DIR)/rel/d/a/obj/d_a_obj_gpTaru/%.d @echo [ 96] building $@ @mkdir -p $(@D) @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).cpp diff --git a/rel/d/a/obj/d_a_obj_gptaru/d_a_obj_gpTaru.cpp b/rel/d/a/obj/d_a_obj_gpTaru/d_a_obj_gpTaru.cpp similarity index 100% rename from rel/d/a/obj/d_a_obj_gptaru/d_a_obj_gpTaru.cpp rename to rel/d/a/obj/d_a_obj_gpTaru/d_a_obj_gpTaru.cpp diff --git a/rel/d/a/obj/d_a_obj_ktonfire/Makefile b/rel/d/a/obj/d_a_obj_ktOnFire/Makefile similarity index 72% rename from rel/d/a/obj/d_a_obj_ktonfire/Makefile rename to rel/d/a/obj/d_a_obj_ktOnFire/Makefile index 2b70431496c..6350e3d1777 100644 --- a/rel/d/a/obj/d_a_obj_ktonfire/Makefile +++ b/rel/d/a/obj/d_a_obj_ktOnFire/Makefile @@ -2,19 +2,19 @@ # Generated By: dol2asm # -M102_TARGET := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_ktonfire.plf -M102_LDSCRIPT := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_ktonfire.lcf -M102_MAP := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_ktonfire.map +M102_TARGET := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_ktOnFire.plf +M102_LDSCRIPT := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_ktOnFire.lcf +M102_MAP := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_ktOnFire.map M102_CPP_FILES := \ rel/executor.cpp \ rel/global_destructor_chain.cpp \ - rel/d/a/obj/d_a_obj_ktonfire/d_a_obj_ktOnFire.cpp \ + rel/d/a/obj/d_a_obj_ktOnFire/d_a_obj_ktOnFire.cpp \ M102_O_FILES := \ $(BUILD_DIR)/rel/executor.o \ $(BUILD_DIR)/rel/global_destructor_chain.o \ - $(BUILD_DIR)/rel/d/a/obj/d_a_obj_ktonfire/d_a_obj_ktOnFire.o \ + $(BUILD_DIR)/rel/d/a/obj/d_a_obj_ktOnFire/d_a_obj_ktOnFire.o \ M102_LIBS := \ @@ -40,7 +40,7 @@ $(M102_TARGET): $(M102_O_FILES) $(M102_LIBS) @python3 tools/lcf.py rel 102 --output $(M102_LDSCRIPT) @$(LD) -opt_partial -strip_partial $(M102_LDFLAGS) -o $(M102_TARGET) @build/M102_ofiles -$(BUILD_DIR)/rel/d/a/obj/d_a_obj_ktonfire/%.o: rel/d/a/obj/d_a_obj_ktonfire/%.cpp $(BUILD_DIR)/rel/d/a/obj/d_a_obj_ktonfire/%.d +$(BUILD_DIR)/rel/d/a/obj/d_a_obj_ktOnFire/%.o: rel/d/a/obj/d_a_obj_ktOnFire/%.cpp $(BUILD_DIR)/rel/d/a/obj/d_a_obj_ktOnFire/%.d @echo [102] building $@ @mkdir -p $(@D) @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).cpp diff --git a/rel/d/a/obj/d_a_obj_ktonfire/d_a_obj_ktOnFire.cpp b/rel/d/a/obj/d_a_obj_ktOnFire/d_a_obj_ktOnFire.cpp similarity index 100% rename from rel/d/a/obj/d_a_obj_ktonfire/d_a_obj_ktOnFire.cpp rename to rel/d/a/obj/d_a_obj_ktOnFire/d_a_obj_ktOnFire.cpp diff --git a/rel/d/a/obj/d_a_obj_lv2candle/Makefile b/rel/d/a/obj/d_a_obj_lv2Candle/Makefile similarity index 72% rename from rel/d/a/obj/d_a_obj_lv2candle/Makefile rename to rel/d/a/obj/d_a_obj_lv2Candle/Makefile index e4838d6d4bf..ac826047fe5 100644 --- a/rel/d/a/obj/d_a_obj_lv2candle/Makefile +++ b/rel/d/a/obj/d_a_obj_lv2Candle/Makefile @@ -2,19 +2,19 @@ # Generated By: dol2asm # -M104_TARGET := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_lv2candle.plf -M104_LDSCRIPT := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_lv2candle.lcf -M104_MAP := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_lv2candle.map +M104_TARGET := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_lv2Candle.plf +M104_LDSCRIPT := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_lv2Candle.lcf +M104_MAP := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_lv2Candle.map M104_CPP_FILES := \ rel/executor.cpp \ rel/global_destructor_chain.cpp \ - rel/d/a/obj/d_a_obj_lv2candle/d_a_obj_lv2Candle.cpp \ + rel/d/a/obj/d_a_obj_lv2Candle/d_a_obj_lv2Candle.cpp \ M104_O_FILES := \ $(BUILD_DIR)/rel/executor.o \ $(BUILD_DIR)/rel/global_destructor_chain.o \ - $(BUILD_DIR)/rel/d/a/obj/d_a_obj_lv2candle/d_a_obj_lv2Candle.o \ + $(BUILD_DIR)/rel/d/a/obj/d_a_obj_lv2Candle/d_a_obj_lv2Candle.o \ M104_LIBS := \ @@ -40,7 +40,7 @@ $(M104_TARGET): $(M104_O_FILES) $(M104_LIBS) @python3 tools/lcf.py rel 104 --output $(M104_LDSCRIPT) @$(LD) -opt_partial -strip_partial $(M104_LDFLAGS) -o $(M104_TARGET) @build/M104_ofiles -$(BUILD_DIR)/rel/d/a/obj/d_a_obj_lv2candle/%.o: rel/d/a/obj/d_a_obj_lv2candle/%.cpp $(BUILD_DIR)/rel/d/a/obj/d_a_obj_lv2candle/%.d +$(BUILD_DIR)/rel/d/a/obj/d_a_obj_lv2Candle/%.o: rel/d/a/obj/d_a_obj_lv2Candle/%.cpp $(BUILD_DIR)/rel/d/a/obj/d_a_obj_lv2Candle/%.d @echo [104] building $@ @mkdir -p $(@D) @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).cpp diff --git a/rel/d/a/obj/d_a_obj_lv2candle/d_a_obj_lv2Candle.cpp b/rel/d/a/obj/d_a_obj_lv2Candle/d_a_obj_lv2Candle.cpp similarity index 100% rename from rel/d/a/obj/d_a_obj_lv2candle/d_a_obj_lv2Candle.cpp rename to rel/d/a/obj/d_a_obj_lv2Candle/d_a_obj_lv2Candle.cpp diff --git a/rel/d/a/obj/d_a_obj_swallshutter/Makefile b/rel/d/a/obj/d_a_obj_sWallShutter/Makefile similarity index 71% rename from rel/d/a/obj/d_a_obj_swallshutter/Makefile rename to rel/d/a/obj/d_a_obj_sWallShutter/Makefile index 3159cd7e15d..4ca1135ee9c 100644 --- a/rel/d/a/obj/d_a_obj_swallshutter/Makefile +++ b/rel/d/a/obj/d_a_obj_sWallShutter/Makefile @@ -2,19 +2,19 @@ # Generated By: dol2asm # -M111_TARGET := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_swallshutter.plf -M111_LDSCRIPT := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_swallshutter.lcf -M111_MAP := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_swallshutter.map +M111_TARGET := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_sWallShutter.plf +M111_LDSCRIPT := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_sWallShutter.lcf +M111_MAP := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_sWallShutter.map M111_CPP_FILES := \ rel/executor.cpp \ rel/global_destructor_chain.cpp \ - rel/d/a/obj/d_a_obj_swallshutter/d_a_obj_sWallShutter.cpp \ + rel/d/a/obj/d_a_obj_sWallShutter/d_a_obj_sWallShutter.cpp \ M111_O_FILES := \ $(BUILD_DIR)/rel/executor.o \ $(BUILD_DIR)/rel/global_destructor_chain.o \ - $(BUILD_DIR)/rel/d/a/obj/d_a_obj_swallshutter/d_a_obj_sWallShutter.o \ + $(BUILD_DIR)/rel/d/a/obj/d_a_obj_sWallShutter/d_a_obj_sWallShutter.o \ M111_LIBS := \ @@ -40,7 +40,7 @@ $(M111_TARGET): $(M111_O_FILES) $(M111_LIBS) @python3 tools/lcf.py rel 111 --output $(M111_LDSCRIPT) @$(LD) -opt_partial -strip_partial $(M111_LDFLAGS) -o $(M111_TARGET) @build/M111_ofiles -$(BUILD_DIR)/rel/d/a/obj/d_a_obj_swallshutter/%.o: rel/d/a/obj/d_a_obj_swallshutter/%.cpp $(BUILD_DIR)/rel/d/a/obj/d_a_obj_swallshutter/%.d +$(BUILD_DIR)/rel/d/a/obj/d_a_obj_sWallShutter/%.o: rel/d/a/obj/d_a_obj_sWallShutter/%.cpp $(BUILD_DIR)/rel/d/a/obj/d_a_obj_sWallShutter/%.d @echo [111] building $@ @mkdir -p $(@D) @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).cpp diff --git a/rel/d/a/obj/d_a_obj_swallshutter/d_a_obj_sWallShutter.cpp b/rel/d/a/obj/d_a_obj_sWallShutter/d_a_obj_sWallShutter.cpp similarity index 100% rename from rel/d/a/obj/d_a_obj_swallshutter/d_a_obj_sWallShutter.cpp rename to rel/d/a/obj/d_a_obj_sWallShutter/d_a_obj_sWallShutter.cpp diff --git a/rel/d/a/obj/d_a_obj_stonemark/Makefile b/rel/d/a/obj/d_a_obj_stoneMark/Makefile similarity index 71% rename from rel/d/a/obj/d_a_obj_stonemark/Makefile rename to rel/d/a/obj/d_a_obj_stoneMark/Makefile index 33422212212..e6b80537e72 100644 --- a/rel/d/a/obj/d_a_obj_stonemark/Makefile +++ b/rel/d/a/obj/d_a_obj_stoneMark/Makefile @@ -2,17 +2,17 @@ # Generated By: dol2asm # -M113_TARGET := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_stonemark.plf -M113_LDSCRIPT := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_stonemark.lcf -M113_MAP := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_stonemark.map +M113_TARGET := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_stoneMark.plf +M113_LDSCRIPT := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_stoneMark.lcf +M113_MAP := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_stoneMark.map M113_CPP_FILES := \ rel/executor.cpp \ - rel/d/a/obj/d_a_obj_stonemark/d_a_obj_stoneMark.cpp \ + rel/d/a/obj/d_a_obj_stoneMark/d_a_obj_stoneMark.cpp \ M113_O_FILES := \ $(BUILD_DIR)/rel/executor.o \ - $(BUILD_DIR)/rel/d/a/obj/d_a_obj_stonemark/d_a_obj_stoneMark.o \ + $(BUILD_DIR)/rel/d/a/obj/d_a_obj_stoneMark/d_a_obj_stoneMark.o \ M113_LIBS := \ @@ -38,7 +38,7 @@ $(M113_TARGET): $(M113_O_FILES) $(M113_LIBS) @python3 tools/lcf.py rel 113 --output $(M113_LDSCRIPT) @$(LD) -opt_partial -strip_partial $(M113_LDFLAGS) -o $(M113_TARGET) @build/M113_ofiles -$(BUILD_DIR)/rel/d/a/obj/d_a_obj_stonemark/%.o: rel/d/a/obj/d_a_obj_stonemark/%.cpp $(BUILD_DIR)/rel/d/a/obj/d_a_obj_stonemark/%.d +$(BUILD_DIR)/rel/d/a/obj/d_a_obj_stoneMark/%.o: rel/d/a/obj/d_a_obj_stoneMark/%.cpp $(BUILD_DIR)/rel/d/a/obj/d_a_obj_stoneMark/%.d @echo [113] building $@ @mkdir -p $(@D) @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).cpp diff --git a/rel/d/a/obj/d_a_obj_stonemark/d_a_obj_stoneMark.cpp b/rel/d/a/obj/d_a_obj_stoneMark/d_a_obj_stoneMark.cpp similarity index 100% rename from rel/d/a/obj/d_a_obj_stonemark/d_a_obj_stoneMark.cpp rename to rel/d/a/obj/d_a_obj_stoneMark/d_a_obj_stoneMark.cpp diff --git a/rel/d/a/tag/d_a_tag_cstasw/Makefile b/rel/d/a/tag/d_a_tag_CstaSw/Makefile similarity index 73% rename from rel/d/a/tag/d_a_tag_cstasw/Makefile rename to rel/d/a/tag/d_a_tag_CstaSw/Makefile index d6a17eda60b..e107cb72530 100644 --- a/rel/d/a/tag/d_a_tag_cstasw/Makefile +++ b/rel/d/a/tag/d_a_tag_CstaSw/Makefile @@ -2,19 +2,19 @@ # Generated By: dol2asm # -M121_TARGET := $(BUILD_DIR)/rel/d/a/tag/d_a_tag_cstasw.plf -M121_LDSCRIPT := $(BUILD_DIR)/rel/d/a/tag/d_a_tag_cstasw.lcf -M121_MAP := $(BUILD_DIR)/rel/d/a/tag/d_a_tag_cstasw.map +M121_TARGET := $(BUILD_DIR)/rel/d/a/tag/d_a_tag_CstaSw.plf +M121_LDSCRIPT := $(BUILD_DIR)/rel/d/a/tag/d_a_tag_CstaSw.lcf +M121_MAP := $(BUILD_DIR)/rel/d/a/tag/d_a_tag_CstaSw.map M121_CPP_FILES := \ rel/executor.cpp \ rel/global_destructor_chain.cpp \ - rel/d/a/tag/d_a_tag_cstasw/d_a_tag_CstaSw.cpp \ + rel/d/a/tag/d_a_tag_CstaSw/d_a_tag_CstaSw.cpp \ M121_O_FILES := \ $(BUILD_DIR)/rel/executor.o \ $(BUILD_DIR)/rel/global_destructor_chain.o \ - $(BUILD_DIR)/rel/d/a/tag/d_a_tag_cstasw/d_a_tag_CstaSw.o \ + $(BUILD_DIR)/rel/d/a/tag/d_a_tag_CstaSw/d_a_tag_CstaSw.o \ M121_LIBS := \ @@ -40,7 +40,7 @@ $(M121_TARGET): $(M121_O_FILES) $(M121_LIBS) @python3 tools/lcf.py rel 121 --output $(M121_LDSCRIPT) @$(LD) -opt_partial -strip_partial $(M121_LDFLAGS) -o $(M121_TARGET) @build/M121_ofiles -$(BUILD_DIR)/rel/d/a/tag/d_a_tag_cstasw/%.o: rel/d/a/tag/d_a_tag_cstasw/%.cpp $(BUILD_DIR)/rel/d/a/tag/d_a_tag_cstasw/%.d +$(BUILD_DIR)/rel/d/a/tag/d_a_tag_CstaSw/%.o: rel/d/a/tag/d_a_tag_CstaSw/%.cpp $(BUILD_DIR)/rel/d/a/tag/d_a_tag_CstaSw/%.d @echo [121] building $@ @mkdir -p $(@D) @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).cpp diff --git a/rel/d/a/tag/d_a_tag_cstasw/d_a_tag_CstaSw.cpp b/rel/d/a/tag/d_a_tag_CstaSw/d_a_tag_CstaSw.cpp similarity index 100% rename from rel/d/a/tag/d_a_tag_cstasw/d_a_tag_CstaSw.cpp rename to rel/d/a/tag/d_a_tag_CstaSw/d_a_tag_CstaSw.cpp diff --git a/sha1sums.json b/sha1sums.json index 2f962eba761..0d7eb5bb32f 100644 --- a/sha1sums.json +++ b/sha1sums.json @@ -61,9 +61,9 @@ "d_a_andsw2.rel": "DAE91E481CFC63EDC9EA09D3C19649C34A11B264", "d_a_bd.rel": "B8635FED4E8F43323A5748A59B4F6CB3BBE130E1", "d_a_canoe.rel": "458C9B8EDF64337E1D9A9D6BB51628295F5670DD", - "d_a_cstaf.rel": "09DF9E19D740C46E6ADC2AA43FFE17F04436FD8D", + "d_a_cstaF.rel": "09DF9E19D740C46E6ADC2AA43FFE17F04436FD8D", "d_a_demo_item.rel": "9610ACC386E0545D4F8713F87A1C8D4DFF121801", - "d_a_door_bossl1.rel": "EFA3D31496AC998C68CB801C8E88BB1979C838BF", + "d_a_door_bossL1.rel": "EFA3D31496AC998C68CB801C8E88BB1979C838BF", "d_a_e_dn.rel": "CC9A07C2822FBFC4F3036C79FB9C4C98335AA712", "d_a_e_fm.rel": "64C6573DFCEEF0300214A32AE63B74DA0598A446", "d_a_e_ga.rel": "FA6AFF115B9391732EC2FCE517394C3D51AA941E", @@ -95,24 +95,24 @@ "d_a_obj_digplace.rel": "E2B1BCF7FB992AD7F94A597116E682F399BC63B1", "d_a_obj_eff.rel": "88E38A21E88B4AB3DF62965883F49D2FE5D2ED65", "d_a_obj_fmobj.rel": "8F91C6C115B416B2E64ADC35CC145D413D3108BB", - "d_a_obj_gptaru.rel": "065E7FA31D83D7CD5F9347A90F4B2751AA864DBE", + "d_a_obj_gpTaru.rel": "065E7FA31D83D7CD5F9347A90F4B2751AA864DBE", "d_a_obj_hhashi.rel": "11A34DEF9788A9B89534F973F98EF051A478C972", "d_a_obj_kanban2.rel": "593BF47D59B3D31EC18587160A25E8D19571D7E7", "d_a_obj_kbacket.rel": "9EDC8E1BA461ACDB7D64046D712AD35430AAC480", "d_a_obj_kgate.rel": "1FB4E048CE72776BF7D3522818B94D5FC4F06993", "d_a_obj_klift00.rel": "7CD70757A4DE31C344A1F9B5477CD8DB17A604F4", - "d_a_obj_ktonfire.rel": "1FBB6F67D7CA07509155BC184D95860E5EA9479F", + "d_a_obj_ktOnFire.rel": "1FBB6F67D7CA07509155BC184D95860E5EA9479F", "d_a_obj_ladder.rel": "BD71E2F4546CACF5A3983753342C41C0EA54380D", - "d_a_obj_lv2candle.rel": "F2CC3AAC95DF03EA174A5FAE92C6C0E41958A9A5", + "d_a_obj_lv2Candle.rel": "F2CC3AAC95DF03EA174A5FAE92C6C0E41958A9A5", "d_a_obj_magne_arm.rel": "4B750CF6ECDF82CAE59A0DEC0015D2CD65CA2C3D", "d_a_obj_metalbox.rel": "B6A13D28454114D73A6A0F6C967DEE7F4F410BD3", "d_a_obj_mgate.rel": "95D3A773CA6B9B6D456AFECD256B98D1C10FDC7A", "d_a_obj_nameplate.rel": "6F83A6B66C10A6F4C2FCC91CF1A460563243FF19", "d_a_obj_ornament_cloth.rel": "A94BCA6D5D1BA78B9FA06A1008A4AE7449781B65", "d_a_obj_rope_bridge.rel": "55D5ED00E2BEB08B47BD210E08883F5B588FDD62", - "d_a_obj_swallshutter.rel": "C6846A2BB29A03B84C8204E1DC471C20CB43939C", + "d_a_obj_sWallShutter.rel": "C6846A2BB29A03B84C8204E1DC471C20CB43939C", "d_a_obj_stick.rel": "78F4D1E0850CBF7658F231E8DB030175CF5C1EFA", - "d_a_obj_stonemark.rel": "B8DBC313B384E70435DEB15C98AFBD3BAECB21EB", + "d_a_obj_stoneMark.rel": "B8DBC313B384E70435DEB15C98AFBD3BAECB21EB", "d_a_obj_swpropeller.rel": "1BAE089562CF5031FFCC6EC28F39F41020A1E953", "d_a_obj_swpush5.rel": "672F3D2FE2AED26FEAE32374ABEB563D8CC6573D", "d_a_obj_yobikusa.rel": "C94D70FFB87AED83DF8A49C18F0FF84A61BCB5BA", @@ -120,7 +120,7 @@ "d_a_shop_item.rel": "DAAEA741567E2616811847019843093C97947BF0", "d_a_sq.rel": "24BB6184C18421A11B770E96968889E96531F75A", "d_a_swc00.rel": "D197D44CFA043F3076A715F999CC14C6BD8B68AB", - "d_a_tag_cstasw.rel": "C1FF514BC868C29A719884CFDF2C5248344C2334", + "d_a_tag_CstaSw.rel": "C1FF514BC868C29A719884CFDF2C5248344C2334", "d_a_tag_ajnot.rel": "BEFE98C785FA9547AD21D099CEEE8BBCDACC81D9", "d_a_tag_attack_item.rel": "F04D803169866C738C25A1924B15F157FB88F6D8", "d_a_tag_gstart.rel": "CF8E2C97C71A5DC3B80E5853AA0B8F6DE4850DF9", diff --git a/tools/lcf.py b/tools/lcf.py index c75d96877bc..04856d09ac8 100644 --- a/tools/lcf.py +++ b/tools/lcf.py @@ -32,6 +32,130 @@ VERSION = "1.0" # load the symbol definition file for main.dol sys.path.append("defs") +FUNCITON_SYMBOLS = """func_802A3C3C +func_802E9368 +func_802FAED0 +func_802A2474 +func_80339CB0 +func_802F5DD0 +func_802E9260 +func_8001505C +func_8027EEB0 +func_802A4A80 +func_8007914C +func_802BF660 +func_802A2328 +func_80280588 +func_8027833C +func_802D2DF0 +func_80078B78 +func_802A0A8C +func_802F5E88 +func_802D1F50 +func_80282200 +func_80048970 +func_802C0074 +func_80078B80 +func_802E9488 +func_802F7264 +func_802F6D18 +func_802BF890 +func_80271BA8 +func_802E90C0 +func_802E1D08 +func_80267F80 +func_8028421C +func_80284204 +func_802A9EE8 +func_80273724 +func_80078D5C +func_80278320 +func_80078B70 +func_802E9564 +func_802BD338 +func_8027936C +func_802E1C54 +func_8029F03C +func_80267D54 +func_802C4928 +func_802BDCB0 +func_802FFBC4 +func_803012CC +func_802AABF4 +func_802E90E4 +func_802BBCDC +func_80301FC8 +func_80304EF0 +func_802A2FEC +func_80070018 +func_802BBD18 +func_802A69D8 +func_802D45E4 +func_802A69F8 +func_802BF898 +func_802E4194 +func_802BBD94 +func_802FDF88 +func_802841F8 +func_80279364 +func_80078D54 +func_802807E0 +func_8029F650 +func_80264A5C +func_802D9B44 +func_80015084 +func_80077574 +func_802AB538 +func_8028202C +func_80281E5C +func_802FED84 +func_802E980C +func_802DCCD0 +func_80079154 +func_80281EC8 +func_8027DEBC +func_802C0190 +func_802E9B0C +func_802FB338 +func_802F5D40 +func_80041488 +func_802841EC +func_802D32B0 +func_802A1B48 +func_802FA928 +func_802AAC3C +func_80078D4C +func_802E9BE8 +func_802C5284 +func_802A319C +func_80282094 +func_802D1EFC +func_802585A4 +func_80078B88 +func_80264A54 +func_80264A64 +func_802F5F08 +func_802E987C +func_802A0768 +func_80284234 +func_802CCFF8 +func_80302164 +func_80282118 +func_80264A4C +func_802782B4 +func_80284210 +func_802782EC +func_80284228 +func_80280808 +func_80041480 +func_802A0B64 +func_8007915C +func_802A3104 +func_802FC800 +func_802FAA5C +func_802782D0 +func_80301994 +func_80282284""" def lcf_generate(output_path,shiftable,map_file): """Script for generating .lcf files""" @@ -43,6 +167,8 @@ def lcf_generate(output_path,shiftable,map_file): map_file = open(map_file,'r') map_file = map_file.read() map_file = map_file.splitlines() + else: + print("Generating LCF") # load symbols from compiled files symbols = [] @@ -94,31 +220,32 @@ def lcf_generate(output_path,shiftable,map_file): base_names = set(module0.SYMBOL_NAMES.keys()) main_names = set([sym.name for sym in symbols]) names = base_names - main_names - for name in names: - symbol = module0.SYMBOLS[module0.SYMBOL_NAMES[name]] - if symbol["type"] == "StringBase": # @stringBase0 is handled below - continue - if symbol["type"] == "LinkerGenerated": # linker handles these symbols - continue + if shiftable == False: + for name in names: + symbol = module0.SYMBOLS[module0.SYMBOL_NAMES[name]] + if symbol["type"] == "StringBase": # @stringBase0 is handled below + continue + if symbol["type"] == "LinkerGenerated": # linker handles these symbols + continue - addr = symbol['addr'] - if shiftable==True: - for line in map_file: - literals_found = [] - if type(symbol['name'])==str and line.find(' '+symbol['name']+' ')!=-1 and symbol['name'][0] != "@" or type(symbol['label']) == str and line.find(' '+symbol['label']+' ')!=-1: - linesplit = line.split() - if len(linesplit) > 3 and linesplit[2]!="NOT": - if line.find("lit_")!=-1: - lbl = symbol['label'] - for literal in literals_found: - if literal == lbl: - print("Warning! two literals with the same name found!\n"+lbl) - literals_found.append(symbol['label']) - addr = int(linesplit[2],16) - file.write(f"\t\"{symbol['label']}\" = 0x{addr:08X};\n") - else: + addr = symbol['addr'] file.write(f"\t\"{symbol['label']}\" = 0x{addr:08X};\n") - + elif shiftable == True: + realNames = [] + symInfo = [] + for func in FUNCITON_SYMBOLS.splitlines(): + symbol = module0.SYMBOLS[module0.SYMBOL_NAMES[func]] + realNames.append(symbol['name']) + symInfo.append({'func': func, 'symbol': symbol['name']}) + for line in map_file: + split = line.split() + if len(split) >5 and split[2] != 'NOT': + sym = split[5] + if sym in realNames: + #print(line) + file.write(f"\t\"{symInfo[realNames.index(sym)]['func']}\" = 0x{int(split[2],16):08X};\n") + + file.write("\n") # @stringBase0 is generated by the compiler. The dol2asm is using a trick to @@ -127,20 +254,32 @@ def lcf_generate(output_path,shiftable,map_file): # So all references will be to the new symbol, thus the linker will think # that the @stringBase0 symbol is never used and strip it. file.write("\t/* @stringBase0 */\n") - for x in module0.SYMBOLS: - if x["type"] == "StringBase": - addr = x['addr'] - if shiftable==True: - obj = (module0.TRANSLATION_UNITS[x['tu']].split('/')[-1])+'.o' - #print(obj) - for line in map_file: - if line.find(' '+obj)!=-1 and line.find(' '+x['name']+' ')!=-1 or line.find('\t'+obj)!=-1 and line.find(' '+x['name']+' ')!=-1: - linesplit = line.split() - if len(linesplit) > 3: - addr = int(linesplit[2],16) - file.write("\t\"%s\" = 0x%08X;\n" % (x['label'], addr)) - else: + if shiftable == False: + for x in module0.SYMBOLS: + if x["type"] == "StringBase": + addr = x['addr'] file.write("\t\"%s\" = 0x%08X;\n" % (x['label'], addr)) + elif shiftable == True: + stringBaseObjs = [] + stringBaseSyms = [] + for x in module0.SYMBOLS: + if x['type'] == 'StringBase': + #print(x) + stringBaseObjs.append((module0.TRANSLATION_UNITS[x['tu']].split('/')[-1])+'.o') + stringBaseSyms.append(x['label']) + for line in map_file: + split = line.split() + if len(split) > 6 and split[2] != 'NOT': + sym = split[5] + tu = split[6] + if tu[-2:] == '.a': + tu = split[7] + if sym == '@stringBase0' and tu in stringBaseObjs: + addr = int(split[2],16) + #print(tu) + file.write("\t\"%s\" = 0x%08X;\n" % (stringBaseSyms[stringBaseObjs.index(tu)], addr)) + + file.write("}\n") file.write("\n") @@ -307,7 +446,7 @@ def get_symbols_from_object_file(obj): def load_archive(ar_path): symbols = [] - print(ar_path) + #print(ar_path) archive = libar.read(ar_path) for path, data in archive.files: obj = libelf.load_object_from_file(None, path, io.BytesIO(data)) diff --git a/tools/libast/__init__.py b/tools/libast/__init__.py new file mode 100644 index 00000000000..5f47cb0b32a --- /dev/null +++ b/tools/libast/__init__.py @@ -0,0 +1 @@ +from .libast import * \ No newline at end of file diff --git a/tools/libast/libast.py b/tools/libast/libast.py new file mode 100644 index 00000000000..955f0dfa69c --- /dev/null +++ b/tools/libast/libast.py @@ -0,0 +1,417 @@ +# adpcm encoding currently doesn't work well, so this isn't being integrated into the assets scripts +# however, this can be used to convert all ast files to a wav file and to encode a wav file to a pcm16 ast file +import struct +import os +import sys +import dataclasses +import json + +DSPADPCM_FILTER = [ + [0, 0], + [2048, 0], + [0, 2048], + [1024, 1024], + [4096, -2048], + [3584, -1536], + [3072, -1024], + [4608, -2560], + [4200, -2248], + [4800, -2300], + [5120, -3072], + [2048, -2048], + [1024, -1024], + [-1024, 1024], + [-1024, 0], + [-2048, 0], +] + + +@dataclasses.dataclass +class AST_Header: + identifier: int + fileSize: int + format: int # 0 = ADPCM, 1 = PCM16 + bitDepth: int + numChannels: int + unk_1: int + sampleRate: int + totalSamples: int + loopStartSample: int + loopEndSample: int + blockSize: int + unk_2: int + unk_3: int + + +@dataclasses.dataclass +class AST_Json: + blockSize: int + loopStartSample: int + loopEndSample: int + encodingFormat: int + loops: bool + + +def testWriteFunction(name, data): + open(name, "wb").write(data) + + +def clampSample(sample): + if sample > 32767: + sample = 32767 + elif sample < -32767: + sample = -32767 + return sample + + +def convert_to_wav(name, astData, writeFunction): + header = struct.unpack(">IIHHHHIIIIIII", astData[:44]) + astHeader = AST_Header(*header) + print(astHeader) + if astHeader.bitDepth != 16: + print("Error: libast only supports 16 bit audio!") + return None + nextBlockPosition = 0x40 + audioData = [] + for channel in range(astHeader.numChannels): + audioData.append([]) + while nextBlockPosition < astHeader.fileSize + 0x40: + currentBlockPosition = nextBlockPosition + blockHeader = struct.unpack( + ">II", astData[currentBlockPosition : currentBlockPosition + 8] + ) + if blockHeader[0] != 1112294219: + print("Block not found at position " + hex(currentBlockPosition)) + break + blockSize = blockHeader[1] + + nextBlockPosition = ( + currentBlockPosition + 32 + (blockSize * astHeader.numChannels) + ) + print( + "current is " + + str(currentBlockPosition) + + " next is " + + str(nextBlockPosition) + + " full is " + + str(astHeader.fileSize + 0x40) + + " size is " + + str(blockSize) + ) + for channel in range(astHeader.numChannels): + blockDataIndex = currentBlockPosition + 32 + (blockSize * channel) + if astHeader.format == 0: # adcpm + endIndex = blockDataIndex + ((blockSize // 9) * 9) + for i in range(blockDataIndex, endIndex, 9): + delta = 1 << ((astData[i] >> 4) & 0b1111) + id = astData[i] & 0b1111 + data = [] + for j in range(8): + data.append((astData[i + 1 + j] >> 4) & 0b1111) + data.append((astData[i + 1 + j]) & 0b1111) + for nibble in data: + if nibble >= 8: + nibble = nibble - 16 + hist = 0 + hist2 = 0 + if len(audioData[channel]) == 1: + hist = audioData[channel][-1] + elif len(audioData[channel]) > 1: + hist = audioData[channel][-1] + hist2 = audioData[channel][-2] + sample = (delta * nibble) << 11 + sample = sample + ( + (hist * DSPADPCM_FILTER[id][0]) + + (hist2 * DSPADPCM_FILTER[id][1]) + ) + sample = sample >> 11 + sample = clampSample(sample) + audioData[channel].append(sample) + elif astHeader.format == 1: # pcm16 + for i in range(blockDataIndex, blockDataIndex + blockSize, 2): + audioData[channel].append( + struct.unpack(">h", astData[i : i + 2])[0] + ) + if nextBlockPosition == astHeader.fileSize + 0x40: + break + + # done parsing data + + subChunk2Size = len(audioData[0]) * 2 * astHeader.numChannels + wavHeader = struct.pack( + "> 8) & 0xFF) + + loops = False + if astHeader.unk_1 == 0xFFFF: + loops = True + jsonData = AST_Json( + astHeader.blockSize, + astHeader.loopStartSample, + astHeader.loopEndSample, + astHeader.format, + loops, + ) + jsonDataString = json.dumps(dataclasses.asdict(jsonData)) + + split = os.path.splitext(name) + open(split[0] + ".json", "w").write(jsonDataString) + writeFunction(split[0] + ".wav", wavFile) + + +def wav_to_ast(sourceWav, convertFunction): + wavData = open(sourceWav, "rb").read() + jsonDataString = open(os.path.splitext(sourceWav)[0] + ".json", "r").read() + jsonData = json.loads(jsonDataString) + print(jsonData) + headerData = struct.unpack("> 24) & 0xFF) + astData.append((thisBlockSize >> 16) & 0xFF) + astData.append((thisBlockSize >> 8) & 0xFF) + astData.append((thisBlockSize) & 0xFF) # Write as big endian + print(thisBlockSize) + for i in range(24): + astData.append(0) + sampleNum = sampleNum + (thisBlockSize // 2) + for channel in range(numChannels): + for i in range( + 0, thisBlockSize * numChannels, 2 * numChannels + ): # convert little to big endian + astData.append(wavData[wavDataPos + i + 1 + (channel * 2)]) + astData.append(wavData[wavDataPos + i + (channel * 2)]) + wavDataPos = wavDataPos + (thisBlockSize * numChannels) + elif encodingFormat == 0: # adpcm + exitLoop = False + sampleList = [] + for channel in range(numChannels): + sampleList.append([]) + for i in range( + 0, len(wavData) - wavDataPos, 2 * numChannels + ): # convert little to big endian + sampleList[channel].append( + (wavData[i + 1 + (channel * 2)] << 8) | (wavData[i + (channel * 2)]) + ) + for i in range(16 - (len(sampleList) % 16)): + sampleList[channel].append(0) + + last = 0 + penult = 0 + while exitLoop == False: + thisBlockSize = blockSize + if loopEndSample - sampleNum <= ((blockSize // 9) * 16): + thisBlockSize = ((loopEndSample - sampleNum) // 16) * 9 + exitLoop = True + astData.append(ord("B")) + astData.append(ord("L")) + astData.append(ord("C")) + astData.append(ord("K")) + # doing this is faster than adding two bytearrays together + astData.append((thisBlockSize >> 24) & 0xFF) + astData.append((thisBlockSize >> 16) & 0xFF) + astData.append((thisBlockSize >> 8) & 0xFF) + astData.append((thisBlockSize) & 0xFF) # Write as big endian + print(thisBlockSize) + for i in range(24): + astData.append(0) + sampleNum = sampleNum + ((thisBlockSize // 9) * 16) + print(sampleNum) + for channel in range(numChannels): + for sample in range( + sampleNum, sampleNum + ((thisBlockSize // 9) * 16), 16 + ): + + def getSample(sampleIndex): + if len(sampleList[channel]) > sampleIndex: + return sampleList[channel][sampleIndex] + else: + return 0 + + # code ported from https://github.com/XAYRGA/wsystool/blob/37eb357b11b2e2b80f50784d4e993713e5e00508/wsystool/bananapeel/banan_flaaf.cs#L393 + + isBlank = True + for i in range(16): + if getSample(sample + i) != 0: + isBlank = False + break + if isBlank: + for i in range(9): + astData.append(0) + continue + + coeffIndex = -1 + minerror = 0xFFFFFFFF + for coeff in range(16): + lastCoeff = DSPADPCM_FILTER[coeff][0] + penultCoeff = DSPADPCM_FILTER[coeff][1] + foundScale = -1 + coeff_error = 0 + + for current_scale in range(16): + step = 1 << current_scale + nibbleCoeff = 2048 << current_scale + success = True + coeff_error = 0 + + _last = lastCoeff + _penult = penultCoeff + + for i in range(16): + prediction = clampSample( + ((lastCoeff * _last) + (penultCoeff * _penult)) + >> 11 + ) + difference = -(prediction - getSample(sample + i)) + nibble = difference // step + + if nibble < -8 or nibble > 7: + success = False + break + + nibbleSample = nibble * nibbleCoeff + decoded = clampSample( + ( + (nibbleSample) + + (lastCoeff * _last) + + (penultCoeff * _penult) + ) + >> 11 + ) + + _penult = _last + _last = decoded + + coeff_error = coeff_error + abs(difference) + + if success: + foundScale = current_scale + break + + if foundScale < 0: + continue + + if coeff_error < minerror: + minerror = coeff_error + coeffIndex = coeff + scale = foundScale + + lastCoeff = DSPADPCM_FILTER[coeffIndex][0] + penultCoeff = DSPADPCM_FILTER[coeffIndex][1] + + step = 1 << scale + + nibbles = [int] * 16 + for i in range(16): + prediction = clampSample( + ((lastCoeff * last) + (penultCoeff * penult)) >> 11 + ) + difference = -(prediction - getSample(sample + i)) + nibbles[i] = difference // step + nibbleSample = nibbles[i] * (2048 << scale) + decoded = clampSample( + nibbleSample + (lastCoeff * last) + (penultCoeff * penult) + >> 11 + ) + + penult = last + last = decoded + + astData.append(((scale & 0xF) << 4) | coeffIndex) + for i in range(8): + astData.append( + ((nibbles[i * 2] & 0xF) << 4) + | ((nibbles[(i * 2) + 1] & 0xF)) + ) + + astHeader = struct.pack( + ">IIHHHHIIIIIII", + 1398035021, + len(astData) - 20, + encodingFormat, + 16, + numChannels, + loops, + sampleRate, + loopEndSample, + loopStartSample, + loopEndSample, + blockSize, + 0, + 0x7F000000, + ) + + astFile = astHeader + astData + split = os.path.splitext(sourceWav) + convertFunction(split[0] + ".ast", astFile) + + +if __name__ == "__main__": + if len(sys.argv) >= 2: + split = os.path.splitext(sys.argv[1]) + if split[1] == ".ast": + convert_to_wav( + sys.argv[1], open(sys.argv[1], "rb").read(), testWriteFunction + ) + elif split[1] == ".wav": + wav_to_ast(sys.argv[1], testWriteFunction) diff --git a/tools/makerel.py b/tools/makerel.py index 4ed4fb30508..1a1a41ace1e 100644 --- a/tools/makerel.py +++ b/tools/makerel.py @@ -213,7 +213,7 @@ class StringList: def write(self): if len(self.data) > 0: with open(self.output_path, "w") as file: - file.write(self.data) + file.write(self.data.replace(' ','\0')) @dataclass diff --git a/tools/package_game_assets.py b/tools/package_game_assets.py index d8f186c5f03..c359605a390 100644 --- a/tools/package_game_assets.py +++ b/tools/package_game_assets.py @@ -5,7 +5,7 @@ import extract_game_assets from pathlib import Path import libyaz0 import libarc -import threading +from datetime import datetime def getMaxDateFromDir(path): @@ -99,9 +99,9 @@ aMemRels = """d_a_alldie.rel d_a_andsw2.rel d_a_bd.rel d_a_canoe.rel -d_a_cstaf.rel +d_a_cstaF.rel d_a_demo_item.rel -d_a_door_bossl1.rel +d_a_door_bossL1.rel d_a_econt.rel d_a_e_dn.rel d_a_e_fm.rel @@ -133,15 +133,15 @@ d_a_obj_cboard.rel d_a_obj_digplace.rel d_a_obj_eff.rel d_a_obj_fmobj.rel -d_a_obj_gptaru.rel +d_a_obj_gpTaru.rel d_a_obj_hhashi.rel d_a_obj_kanban2.rel d_a_obj_kbacket.rel d_a_obj_kgate.rel d_a_obj_klift00.rel -d_a_obj_ktonfire.rel +d_a_obj_ktOnFire.rel d_a_obj_ladder.rel -d_a_obj_lv2candle.rel +d_a_obj_lv2Candle.rel d_a_obj_magne_arm.rel d_a_obj_metalbox.rel d_a_obj_mgate.rel @@ -149,8 +149,8 @@ d_a_obj_nameplate.rel d_a_obj_ornament_cloth.rel d_a_obj_rope_bridge.rel d_a_obj_stick.rel -d_a_obj_stonemark.rel -d_a_obj_swallshutter.rel +d_a_obj_stoneMark.rel +d_a_obj_sWallShutter.rel d_a_obj_swpropeller.rel d_a_obj_swpush5.rel d_a_obj_yobikusa.rel @@ -160,7 +160,7 @@ d_a_sq.rel d_a_swc00.rel d_a_tag_ajnot.rel d_a_tag_attack_item.rel -d_a_tag_cstasw.rel +d_a_tag_CstaSw.rel d_a_tag_gstart.rel d_a_tag_hinit.rel d_a_tag_hjump.rel @@ -274,24 +274,24 @@ def copyRelFiles(gamePath, buildPath, aMemList, mMemList): "Folder:rels/amem/\nFolder:rels/mmem/\nFolder:rels/./\nFolder:rels/../\n" ) for i, rel in enumerate(aMemRels.splitlines()): - filesTxtData = filesTxtData + str(i + 4) + ":rels/amem/" + rel + ":0xa500\n" + filesTxtData = filesTxtData + str(i + 4) + ":rels/amem/" + rel.lower() + ":0xa500\n" filesTxtData = filesTxtData + "Folder:rels/amem/./\nFolder:rels/amem/../\n" for i, rel in enumerate(mMemRels.splitlines()): - filesTxtData = filesTxtData + str(i + 83) + ":rels/mmem/" + rel + ":0xa500\n" + filesTxtData = filesTxtData + str(i + 83) + ":rels/mmem/" + rel.lower() + ":0xa500\n" filesTxtData = filesTxtData + "Folder:rels/mmem/./\nFolder:rels/mmem/../\n" open(buildPath / "RELS.arc/_files.txt", "w").write(filesTxtData) for rel in relArcPaths: for rel2 in aMemRels.splitlines(): if str(rel).find(rel2) != -1: sourceRel = open(rel, "rb").read() - open(buildPath / "RELS.arc/rels/amem/" / rel2, "wb").write( + open(buildPath / "RELS.arc/rels/amem/" / rel2.lower(), "wb").write( libyaz0.compress(sourceRel) ) break for rel2 in mMemRels.splitlines(): if str(rel).find(rel2) != -1: sourceRel = open(rel, "rb").read() - open(buildPath / "RELS.arc/rels/mmem/" / rel2, "wb").write( + open(buildPath / "RELS.arc/rels/mmem/" / rel2.lower(), "wb").write( libyaz0.compress(sourceRel) ) break @@ -338,6 +338,12 @@ def main(gamePath, buildPath, copyCode): copyRelFiles(gamePath, buildPath, aMemRels.splitlines(), mMemRels.splitlines()) + shutil.copy(buildPath/"dolzel2/frameworkF.str",buildPath/"dolzel2/game/files/str/Final/Release/frameworkF.str") + + now = datetime.now() + copydate = str(now.year)+"/"+str(now.month).zfill(2)+"/"+str(now.day).zfill(2)+" "+str(now.hour).zfill(2)+":"+str(now.minute).zfill(2)+"\n" + open(buildPath/"dolzel2/game/files/str/Final/Release/COPYDATE","w").write(copydate) + if __name__ == "__main__": pass