diff --git a/.gitignore b/.gitignore index 61f6368094..f408c80f71 100644 --- a/.gitignore +++ b/.gitignore @@ -27,4 +27,8 @@ settings.mk /msg /sprite +# Star Rod +/sprite/SpriteTable.xml +/mod.cfg + tools/Yay0compress diff --git a/.gitmodules b/.gitmodules index ea18e6107a..97a5208789 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "tools/n64splat"] path = tools/n64splat - url = https://github.com/ethteck/n64splat.git \ No newline at end of file + url = https://github.com/ethteck/n64splat.git +[submodule "tools/star-rod"] + path = tools/star-rod + url = https://github.com/nanaian/star-rod-for-decomp.git diff --git a/Makefile b/Makefile index 2c55403d01..da7cc3140a 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,7 @@ TARGET = papermario COMPARE = 1 NON_MATCHING = 0 WATCH_INCLUDES = 1 +WSL_ELEVATE_GUI = 1 -include settings.mk @@ -68,6 +69,15 @@ ifeq ($(UNAME_S),Darwin) ICONV := tools/iconv.py UTF-8 SHIFT-JIS endif +WSL := 0 +JAVA := java +ifeq ($(findstring microsoft,$(shell cat /proc/sys/kernel/osrelease)),microsoft) + WSL := 1 + ifeq ($(WSL_ELEVATE_GUI),1) + JAVA := powershell.exe -command java + endif +endif + OLD_AS=tools/$(OS)/mips-nintendo-nu64-as CC=tools/$(OS)/cc1 @@ -115,14 +125,16 @@ tools: setup: clean submodules tools split $(LD_SCRIPT) +# tools/star-rod submodule intentionally omitted submodules: + git submodule init tools/n64splat git submodule update --init --recursive split: $(SPLAT) --modes ld bin Yay0 PaperMarioMapFS PaperMarioMessages img PaperMarioNpcSprites --new split-%: - $(SPLAT) --modes ld $* --verbose --new + $(SPLAT) --modes ld $* --verbose split-all: $(SPLAT) --modes all @@ -269,9 +281,25 @@ $(BUILD_DIR)/$(TARGET).bin: $(BUILD_DIR)/$(TARGET).elf include/ld_addrs.h: $(BUILD_DIR)/$(LD_SCRIPT) grep -E "[^\. ]+ =" $< -o | sed 's/^/extern void* /; s/ =/;/' > $@ + +### Star Rod (optional) ### + +STAR_ROD := cd tools/star-rod && $(JAVA) -jar StarRod.jar + +# lazily initialise the submodule +tools/star-rod: + git submodule init tools/star-rod + +sprite/SpriteTable.xml: tools/star-rod sources.mk + $(PYTHON) tools/star-rod/spritetable.xml.py $(NPC_SPRITES) > $@ + +editor: tools/star-rod sprite/SpriteTable.xml + $(STAR_ROD) + + ### Make Settings ### -.PHONY: clean tools test setup submodules split $(ROM) include/sprite +.PHONY: clean tools test setup submodules split editor $(ROM) include/sprite .DELETE_ON_ERROR: .SECONDARY: .PRECIOUS: $(ROM) %.Yay0 diff --git a/README.md b/README.md index 67b6c4f8ff..c0437eacfe 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,10 @@ $ make If you get `OK`, you're all set! Otherwise, please feel free to reach out to us in [our Discord channel](https://discord.gg/urUm3VG). +## Star Rod GUI + +You can open [our modified version of Star Rod](https://github.com/nanaian/star-rod-for-decomp) with `make editor`. + ## Contributing ### Dependencies @@ -136,4 +140,4 @@ make: *** [verify] Error 1 ``` > 💡 Solution -> Run `git checkout checksum.sha1` and retry building. Windows has different line endings than Linux, causing some of our tools to break. +> Run `git checkout checksum.sha1` and retry building. Windows has different line endings than Linux, causing some of our tools to break. diff --git a/sources.mk b/sources.mk index b60510fd72..20170f1f79 100644 --- a/sources.mk +++ b/sources.mk @@ -58,7 +58,7 @@ ASSETS := \ MESSAGES := $(shell find msg -type f -name "*.msg" 2> /dev/null) -NPC_SPRITES := world_goombario world_kooper world_bombette world_parakarry world_bow world_watt world_sushi world_lakilester battle_goombario battle_kooper battle_bombette battle_parakarry battle_bow battle_watt battle_sushi battle_lakilester kooper_without_shell world_eldstar world_mamar world_skolar world_muskular world_misstar world_klevar world_kalmar battle_eldstar battle_mamar battle_skolar battle_muskular battle_misstar battle_klevar battle_kalmar twink jr_troopa spiked_jr_troopa spiked_para_jr_troopa mage_jr_troopa para_jr_troopa goomba spiked_goomba paragoomba koopa_troopa para_troopa fuzzy bob_omb bullet_bill bill_blaster monty_mole cleft pokey battle_bandit buzzy_beetle swooper stone_chomp putrid_piranha piranha_plant sentinel world_clubba battle_clubba shy_guy groove_guy sky_guy pyro_guy spy_guy medi_guy fuzzipede jungle_guy heart_plant hurt_plant m_bush bubble kent_c_koopa dayzee lakitu spiny bzzap ruff_puff spike_top duplighost albino_dino blooper baby_blooper gulpit dry_bones thrown_bone bony_beetle magikoopa flying_magikoopa world_koopatrol koopatrol hammer_bros bush_basic bush_blocky bush_dry bush_leafy bush_matted world_kammy battle_kammy goomba_bros goomba_king spiky_goomnut dark_toad koopa_bros buzzar tutankoopa chain_chomp world_tubba battle_tubba tubbas_heart big_lantern_ghost shy_squad_guy marshal_guy stilt_guy stilt_guy_unfold shy_stack_guy shy_stack_unfold shy_stack_damage shy_stack_rock general_guy general_guy_bomb tank_guy lava_piranha_head petit_piranha lava_bud huff_n_puff tuff_puff monstar crystal_king world_bowser battle_bowser luigi toad three_sisters vanna_t toad_kid toad_guard harry_t toad_minister postmaster conductor_toad train_station_toad fishmael artist_toad koopa koopa_without_shell world_bob_omb whacka dryite mouser boo yoshi yoshi_kid raven bubulb penguin shiver_toad world_bandit goompapa goombaria goomama goompa goomma the_master chan lee merlon chet_rippo rowf minh_t russ_t tayce_t fice_t bartender chanterelle rip_cheato chuck_quizmo merluvlee merlar merlow star_kid kolorado_wife koopa_koot kolorado battle_kolorado archeologist nomadimouse world_merlee battle_merlee disguised_moustafa moustafa oaklie bootler yakkey gourmet_guy village_leader leaders_friend rafael_raven tolielup gate_flower petunia posie lily rosie sun lakilulu ninji mayor_penguin mayor_penguin_wife penguin_patrol herringway merle star_rod fire coin parade_peach parade_koopas parade_burnt_bowser parade_luigi parade_partners parade_yoshis parada_kolorados parade_chicks parade_ice_show parade_toads parade_batons parade_drums parade_flags parade_horns parade_tubba_balloon parade_wizards parade_mario parade_shy_guys parade_twink leaf +NPC_SPRITES := world_goombario world_kooper world_bombette world_parakarry world_bow world_watt world_sushi world_lakilester battle_goombario battle_kooper battle_bombette battle_parakarry battle_bow battle_watt battle_sushi battle_lakilester kooper_without_shell world_eldstar world_mamar world_skolar world_muskular world_misstar world_klevar world_kalmar battle_eldstar battle_mamar battle_skolar battle_muskular battle_misstar battle_klevar battle_kalmar twink jr_troopa spiked_jr_troopa spiked_para_jr_troopa mage_jr_troopa para_jr_troopa goomba spiked_goomba paragoomba koopa_troopa para_troopa fuzzy bob_omb bullet_bill bill_blaster monty_mole cleft pokey battle_bandit buzzy_beetle swooper stone_chomp putrid_piranha piranha_plant sentinel world_clubba battle_clubba shy_guy groove_guy sky_guy pyro_guy spy_guy medi_guy fuzzipede jungle_guy heart_plant hurt_plant m_bush bubble kent_c_koopa dayzee lakitu spiny bzzap ruff_puff spike_top duplighost albino_dino blooper baby_blooper gulpit dry_bones thrown_bone bony_beetle magikoopa flying_magikoopa world_koopatrol koopatrol hammer_bros bush_basic bush_blocky bush_dry bush_leafy bush_matted world_kammy battle_kammy goomba_bros goomba_king spiky_goomnut dark_toad koopa_bros buzzar tutankoopa chain_chomp world_tubba battle_tubba tubbas_heart big_lantern_ghost shy_squad_guy marshal_guy stilt_guy stilt_guy_unfold shy_stack_guy shy_stack_unfold shy_stack_damage shy_stack_rock general_guy general_guy_bomb tank_guy lava_piranha_head petit_piranha lava_bud huff_n_puff tuff_puff monstar crystal_king world_bowser battle_bowser luigi toad three_sisters vanna_t toad_kid toad_guard harry_t toad_minister postmaster conductor_toad train_station_toad fishmael artist_toad koopa koopa_without_shell world_bob_omb whacka dryite mouser boo yoshi yoshi_kid raven bubulb penguin shiver_toad world_bandit goompapa goombaria goomama goompa goomma the_master chan lee merlon chet_rippo rowf minh_t russ_t tayce_t fice_t bartender chanterelle rip_cheato chuck_quizmo merluvlee merlar merlow star_kid kolorado_wife koopa_koot kolorado battle_kolorado archeologist nomadimouse world_merlee battle_merlee disguised_moustafa moustafa oaklie bootler yakkey gourmet_guy village_leader leaders_friend rafael_raven tolielup gate_flower petunia posie lily rosie sun lakilulu ninji mayor_penguin mayor_penguin_wife penguin_patrol herringway merle star_rod fire coin parade_peach parade_koopas parade_burnt_bowser parade_luigi parade_partners parade_yoshis parade_kolorados parade_chicks parade_ice_show parade_toads parade_batons parade_drums parade_flags parade_horns parade_tubba_balloon parade_wizards parade_mario parade_shy_guys parade_twink leaf # Image settings $(BUILD_DIR)/img/battle/text_action_command_ratings.ia4.png: IMG_FLAGS = --flip-y diff --git a/tools/compile_npc_sprite.py b/tools/compile_npc_sprite.py index 6a8f8d42f2..39a7d96005 100755 --- a/tools/compile_npc_sprite.py +++ b/tools/compile_npc_sprite.py @@ -46,9 +46,9 @@ if __name__ == "__main__": f.write(offset.to_bytes(4, byteorder="big")) f.write((len(comp.commands) * 2).to_bytes(2, byteorder="big")) - f.write(comp.x.to_bytes(2, byteorder="big")) - f.write(comp.y.to_bytes(2, byteorder="big")) - f.write(comp.z.to_bytes(2, byteorder="big")) + f.write(comp.x.to_bytes(2, byteorder="big", signed=True)) + f.write(comp.y.to_bytes(2, byteorder="big", signed=True)) + f.write(comp.z.to_bytes(2, byteorder="big", signed=True)) next_anim = f.tell() diff --git a/tools/splat.yaml b/tools/splat.yaml index 583634680c..83fa42f220 100644 --- a/tools/splat.yaml +++ b/tools/splat.yaml @@ -7348,7 +7348,7 @@ segments: - parade_luigi - parade_partners - parade_yoshis - - parada_kolorados + - parade_kolorados - parade_chicks - parade_ice_show - parade_toads diff --git a/tools/splat_ext/PaperMarioNpcSprites.py b/tools/splat_ext/PaperMarioNpcSprites.py index 5242e84213..cd7be31575 100644 --- a/tools/splat_ext/PaperMarioNpcSprites.py +++ b/tools/splat_ext/PaperMarioNpcSprites.py @@ -241,9 +241,9 @@ class Component: commands_data = sprite_data[commands_offset : commands_offset + commands_size] self.commands = [int.from_bytes(d[0:2], byteorder="big") for d in iter_in_groups(commands_data, 2)] - self.x = int.from_bytes(data[6:8], byteorder="big") - self.y = int.from_bytes(data[8:10], byteorder="big") - self.z = int.from_bytes(data[10:12], byteorder="big") + self.x = int.from_bytes(data[6:8], byteorder="big", signed=True) + self.y = int.from_bytes(data[8:10], byteorder="big", signed=True) + self.z = int.from_bytes(data[10:12], byteorder="big", signed=True) return self diff --git a/tools/star-rod b/tools/star-rod new file mode 160000 index 0000000000..aec5d4c037 --- /dev/null +++ b/tools/star-rod @@ -0,0 +1 @@ +Subproject commit aec5d4c037e95227fb5f118075564031636697fe