diff --git a/.gitignore b/.gitignore index 3301686d06..f408c80f71 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ __pycache__/ venv/ .lark_cache* +.splat_cache # Misc .idea/ @@ -25,3 +26,9 @@ settings.mk /img /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 6720a05394..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 @@ -58,6 +59,28 @@ CPP := cpp LD := $(CROSS)ld OBJCOPY := $(CROSS)objcopy +UNAME_S := $(shell uname -s) +ifeq ($(UNAME_S),Linux) + OS=linux + ICONV := iconv --from UTF-8 --to SHIFT-JIS +endif +ifeq ($(UNAME_S),Darwin) + OS=mac + 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 + CPPFLAGS := -Iinclude -Isrc -D _LANGUAGE_C -ffreestanding -DF3DEX_GBI_2 -D_MIPS_SZLONG=32 -Wundef -Wcomment ASFLAGS := -EB -Iinclude -march=vr4300 -mtune=vr4300 OLDASFLAGS := -EB -Iinclude -G 0 @@ -92,7 +115,7 @@ endif ### Targets ### clean: - rm -rf $(BUILD_DIR) + rm -rf $(BUILD_DIR) bin msg img sprite .splat_cache clean-code: rm -rf $(BUILD_DIR)/src @@ -102,18 +125,18 @@ 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: - rm -rf bin msg img sprite - $(SPLAT) --modes ld bin Yay0 PaperMarioMapFS PaperMarioMessages img PaperMarioNpcSprites + $(SPLAT) --modes ld bin Yay0 PaperMarioMapFS PaperMarioMessages img PaperMarioNpcSprites --new split-%: $(SPLAT) --modes ld $* --verbose split-all: - rm -rf bin msg img sprite $(SPLAT) --modes all test: $(ROM) @@ -140,12 +163,12 @@ $(BUILD_DIR)/%.Yay0.o: $(BUILD_DIR)/%.bin.Yay0 # Compile C files $(BUILD_DIR)/%.c.o: %.c $(MDEPS) | $(GENERATED_HEADERS) @mkdir -p $(shell dirname $@) - $(CPP) $(CPPFLAGS) -o - $(CPPMFLAGS) $< | iconv --from UTF-8 --to SHIFT-JIS | $(CC) $(CFLAGS) -o - | $(OLD_AS) $(OLDASFLAGS) -o $@ - + $(CPP) $(CPPFLAGS) -o - $(CPPMFLAGS) $< | $(ICONV) | $(CC) $(CFLAGS) -o - | $(OLD_AS) $(OLDASFLAGS) -o $@ - # Compile C files (with DSL macros) $(foreach cfile, $(DSL_C_FILES), $(BUILD_DIR)/$(cfile).o): $(BUILD_DIR)/%.c.o: %.c $(MDEPS) tools/compile_dsl_macros.py | $(GENERATED_HEADERS) @mkdir -p $(shell dirname $@) - $(CPP) $(CPPFLAGS) -o - $< $(CPPMFLAGS) | $(PYTHON) tools/compile_dsl_macros.py | iconv --from UTF-8 --to SHIFT-JIS | $(CC) $(CFLAGS) -o - | $(OLD_AS) $(OLDASFLAGS) -o $@ - + $(CPP) $(CPPFLAGS) -o - $< $(CPPMFLAGS) | $(PYTHON) tools/compile_dsl_macros.py | $(ICONV) | $(CC) $(CFLAGS) -o - | $(OLD_AS) $(OLDASFLAGS) -o $@ - # Assemble handwritten ASM $(BUILD_DIR)/%.s.o: %.s @@ -258,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/asm/nonmatchings/code_1A5830/BindIdle.s b/asm/nonmatchings/code_1A5830/BindIdle.s deleted file mode 100644 index 1fc6bd77ed..0000000000 --- a/asm/nonmatchings/code_1A5830/BindIdle.s +++ /dev/null @@ -1,52 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel BindIdle -/* 1A7374 80278A94 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 1A7378 80278A98 AFB10014 */ sw $s1, 0x14($sp) -/* 1A737C 80278A9C 0080882D */ daddu $s1, $a0, $zero -/* 1A7380 80278AA0 AFBF001C */ sw $ra, 0x1c($sp) -/* 1A7384 80278AA4 AFB20018 */ sw $s2, 0x18($sp) -/* 1A7388 80278AA8 AFB00010 */ sw $s0, 0x10($sp) -/* 1A738C 80278AAC 8E30000C */ lw $s0, 0xc($s1) -/* 1A7390 80278AB0 8E050000 */ lw $a1, ($s0) -/* 1A7394 80278AB4 0C0B1EAF */ jal get_variable -/* 1A7398 80278AB8 26100004 */ addiu $s0, $s0, 4 -/* 1A739C 80278ABC 0040902D */ daddu $s2, $v0, $zero -/* 1A73A0 80278AC0 2402FF81 */ addiu $v0, $zero, -0x7f -/* 1A73A4 80278AC4 16420002 */ bne $s2, $v0, .L80278AD0 -/* 1A73A8 80278AC8 00000000 */ nop -/* 1A73AC 80278ACC 8E320148 */ lw $s2, 0x148($s1) -.L80278AD0: -/* 1A73B0 80278AD0 8E050000 */ lw $a1, ($s0) -/* 1A73B4 80278AD4 0C0B1EAF */ jal get_variable -/* 1A73B8 80278AD8 0220202D */ daddu $a0, $s1, $zero -/* 1A73BC 80278ADC 0240202D */ daddu $a0, $s2, $zero -/* 1A73C0 80278AE0 0C09A75B */ jal get_actor -/* 1A73C4 80278AE4 0040882D */ daddu $s1, $v0, $zero -/* 1A73C8 80278AE8 0040802D */ daddu $s0, $v0, $zero -/* 1A73CC 80278AEC 8E0201D0 */ lw $v0, 0x1d0($s0) -/* 1A73D0 80278AF0 10400006 */ beqz $v0, .L80278B0C -/* 1A73D4 80278AF4 0220202D */ daddu $a0, $s1, $zero -/* 1A73D8 80278AF8 8E0401E0 */ lw $a0, 0x1e0($s0) -/* 1A73DC 80278AFC 0C0B102B */ jal kill_script_by_ID -/* 1A73E0 80278B00 00000000 */ nop -/* 1A73E4 80278B04 AE0001D0 */ sw $zero, 0x1d0($s0) -/* 1A73E8 80278B08 0220202D */ daddu $a0, $s1, $zero -.L80278B0C: -/* 1A73EC 80278B0C 2405000A */ addiu $a1, $zero, 0xa -/* 1A73F0 80278B10 0000302D */ daddu $a2, $zero, $zero -/* 1A73F4 80278B14 0C0B0CF8 */ jal start_script -/* 1A73F8 80278B18 AE0401C0 */ sw $a0, 0x1c0($s0) -/* 1A73FC 80278B1C 0040182D */ daddu $v1, $v0, $zero -/* 1A7400 80278B20 AE0301D0 */ sw $v1, 0x1d0($s0) -/* 1A7404 80278B24 8C640144 */ lw $a0, 0x144($v1) -/* 1A7408 80278B28 AE0401E0 */ sw $a0, 0x1e0($s0) -/* 1A740C 80278B2C AC720148 */ sw $s2, 0x148($v1) -/* 1A7410 80278B30 8FBF001C */ lw $ra, 0x1c($sp) -/* 1A7414 80278B34 8FB20018 */ lw $s2, 0x18($sp) -/* 1A7418 80278B38 8FB10014 */ lw $s1, 0x14($sp) -/* 1A741C 80278B3C 8FB00010 */ lw $s0, 0x10($sp) -/* 1A7420 80278B40 24020002 */ addiu $v0, $zero, 2 -/* 1A7424 80278B44 03E00008 */ jr $ra -/* 1A7428 80278B48 27BD0020 */ addiu $sp, $sp, 0x20 diff --git a/asm/nonmatchings/code_1a1f0_len_5390/FadeBackgroundToBlack.s b/asm/nonmatchings/code_1a1f0_len_5390/FadeBackgroundToBlack.s deleted file mode 100644 index 10630d9188..0000000000 --- a/asm/nonmatchings/code_1a1f0_len_5390/FadeBackgroundToBlack.s +++ /dev/null @@ -1,43 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel FadeBackgroundToBlack -/* 1A300 8003EF00 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 1A304 8003EF04 AFB00010 */ sw $s0, 0x10($sp) -/* 1A308 8003EF08 0080802D */ daddu $s0, $a0, $zero -/* 1A30C 8003EF0C 10A0000E */ beqz $a1, .L8003EF48 -/* 1A310 8003EF10 AFBF0014 */ sw $ra, 0x14($sp) -/* 1A314 8003EF14 0C04760B */ jal func_8011D82C -/* 1A318 8003EF18 24040001 */ addiu $a0, $zero, 1 -/* 1A31C 8003EF1C 0000202D */ daddu $a0, $zero, $zero -/* 1A320 8003EF20 0080282D */ daddu $a1, $a0, $zero -/* 1A324 8003EF24 0080302D */ daddu $a2, $a0, $zero -/* 1A328 8003EF28 0080382D */ daddu $a3, $a0, $zero -/* 1A32C 8003EF2C 3C028015 */ lui $v0, %hi(D_801512F0) -/* 1A330 8003EF30 8C4212F0 */ lw $v0, %lo(D_801512F0)($v0) -/* 1A334 8003EF34 24030001 */ addiu $v1, $zero, 1 -/* 1A338 8003EF38 0C046F97 */ jal set_background_color_blend -/* 1A33C 8003EF3C A0430000 */ sb $v1, ($v0) -/* 1A340 8003EF40 24020019 */ addiu $v0, $zero, 0x19 -/* 1A344 8003EF44 AE020070 */ sw $v0, 0x70($s0) -.L8003EF48: -/* 1A348 8003EF48 0000202D */ daddu $a0, $zero, $zero -/* 1A34C 8003EF4C 0080282D */ daddu $a1, $a0, $zero -/* 1A350 8003EF50 0080302D */ daddu $a2, $a0, $zero -/* 1A354 8003EF54 8E030070 */ lw $v1, 0x70($s0) -/* 1A358 8003EF58 24020019 */ addiu $v0, $zero, 0x19 -/* 1A35C 8003EF5C 00431023 */ subu $v0, $v0, $v1 -/* 1A360 8003EF60 00023880 */ sll $a3, $v0, 2 -/* 1A364 8003EF64 00E23821 */ addu $a3, $a3, $v0 -/* 1A368 8003EF68 00073840 */ sll $a3, $a3, 1 -/* 1A36C 8003EF6C 0C046F97 */ jal set_background_color_blend -/* 1A370 8003EF70 30E700FE */ andi $a3, $a3, 0xfe -/* 1A374 8003EF74 8E020070 */ lw $v0, 0x70($s0) -/* 1A378 8003EF78 2442FFFF */ addiu $v0, $v0, -1 -/* 1A37C 8003EF7C AE020070 */ sw $v0, 0x70($s0) -/* 1A380 8003EF80 2C420001 */ sltiu $v0, $v0, 1 -/* 1A384 8003EF84 8FBF0014 */ lw $ra, 0x14($sp) -/* 1A388 8003EF88 8FB00010 */ lw $s0, 0x10($sp) -/* 1A38C 8003EF8C 00021040 */ sll $v0, $v0, 1 -/* 1A390 8003EF90 03E00008 */ jr $ra -/* 1A394 8003EF94 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_1a1f0_len_5390/func_8003F084.s b/asm/nonmatchings/code_1a1f0_len_5390/func_8003F084.s deleted file mode 100644 index 1baa4480b0..0000000000 --- a/asm/nonmatchings/code_1a1f0_len_5390/func_8003F084.s +++ /dev/null @@ -1,21 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_8003F084 -/* 1A484 8003F084 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 1A488 8003F088 AFBF0010 */ sw $ra, 0x10($sp) -/* 1A48C 8003F08C 0C00EABB */ jal get_npc_unsafe -/* 1A490 8003F090 2404FFF6 */ addiu $a0, $zero, -0xa -/* 1A494 8003F094 0040182D */ daddu $v1, $v0, $zero -/* 1A498 8003F098 906200AC */ lbu $v0, 0xac($v1) -/* 1A49C 8003F09C 2442FFEF */ addiu $v0, $v0, -0x11 -/* 1A4A0 8003F0A0 A06200AC */ sb $v0, 0xac($v1) -/* 1A4A4 8003F0A4 304200FF */ andi $v0, $v0, 0xff -/* 1A4A8 8003F0A8 14400003 */ bnez $v0, .L8003F0B8 -/* 1A4AC 8003F0AC 0000102D */ daddu $v0, $zero, $zero -/* 1A4B0 8003F0B0 A06000AC */ sb $zero, 0xac($v1) -/* 1A4B4 8003F0B4 24020001 */ addiu $v0, $zero, 1 -.L8003F0B8: -/* 1A4B8 8003F0B8 8FBF0010 */ lw $ra, 0x10($sp) -/* 1A4BC 8003F0BC 03E00008 */ jr $ra -/* 1A4C0 8003F0C0 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_1a1f0_len_5390/func_8003F384.s b/asm/nonmatchings/code_1a1f0_len_5390/func_8003F384.s deleted file mode 100644 index bb43ec0723..0000000000 --- a/asm/nonmatchings/code_1a1f0_len_5390/func_8003F384.s +++ /dev/null @@ -1,9 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_8003F384 -/* 1A784 8003F384 24020001 */ addiu $v0, $zero, 1 -/* 1A788 8003F388 3C01800A */ lui $at, %hi(D_800A0BB8) -/* 1A78C 8003F38C A4220BB8 */ sh $v0, %lo(D_800A0BB8)($at) -/* 1A790 8003F390 03E00008 */ jr $ra -/* 1A794 8003F394 24020002 */ addiu $v0, $zero, 2 diff --git a/asm/nonmatchings/code_1a1f0_len_5390/func_8003F414.s b/asm/nonmatchings/code_1a1f0_len_5390/func_8003F414.s deleted file mode 100644 index d4d25ab592..0000000000 --- a/asm/nonmatchings/code_1a1f0_len_5390/func_8003F414.s +++ /dev/null @@ -1,50 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_8003F414 -/* 1A814 8003F414 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 1A818 8003F418 AFB1001C */ sw $s1, 0x1c($sp) -/* 1A81C 8003F41C 0080882D */ daddu $s1, $a0, $zero -/* 1A820 8003F420 AFBF0024 */ sw $ra, 0x24($sp) -/* 1A824 8003F424 AFB20020 */ sw $s2, 0x20($sp) -/* 1A828 8003F428 AFB00018 */ sw $s0, 0x18($sp) -/* 1A82C 8003F42C 8E30000C */ lw $s0, 0xc($s1) -/* 1A830 8003F430 8E050000 */ lw $a1, ($s0) -/* 1A834 8003F434 0C0B1EAF */ jal get_variable -/* 1A838 8003F438 26100004 */ addiu $s0, $s0, 4 -/* 1A83C 8003F43C 8E050000 */ lw $a1, ($s0) -/* 1A840 8003F440 26100004 */ addiu $s0, $s0, 4 -/* 1A844 8003F444 0220202D */ daddu $a0, $s1, $zero -/* 1A848 8003F448 0C0B1EAF */ jal get_variable -/* 1A84C 8003F44C 0040902D */ daddu $s2, $v0, $zero -/* 1A850 8003F450 0220202D */ daddu $a0, $s1, $zero -/* 1A854 8003F454 8E050000 */ lw $a1, ($s0) -/* 1A858 8003F458 0C0B1EAF */ jal get_variable -/* 1A85C 8003F45C 0040802D */ daddu $s0, $v0, $zero -/* 1A860 8003F460 24040006 */ addiu $a0, $zero, 6 -/* 1A864 8003F464 44921000 */ mtc1 $s2, $f2 -/* 1A868 8003F468 00000000 */ nop -/* 1A86C 8003F46C 468010A0 */ cvt.s.w $f2, $f2 -/* 1A870 8003F470 44051000 */ mfc1 $a1, $f2 -/* 1A874 8003F474 44901000 */ mtc1 $s0, $f2 -/* 1A878 8003F478 00000000 */ nop -/* 1A87C 8003F47C 468010A0 */ cvt.s.w $f2, $f2 -/* 1A880 8003F480 44061000 */ mfc1 $a2, $f2 -/* 1A884 8003F484 44821000 */ mtc1 $v0, $f2 -/* 1A888 8003F488 00000000 */ nop -/* 1A88C 8003F48C 468010A0 */ cvt.s.w $f2, $f2 -/* 1A890 8003F490 3C013F99 */ lui $at, 0x3f99 -/* 1A894 8003F494 3421999A */ ori $at, $at, 0x999a -/* 1A898 8003F498 44810000 */ mtc1 $at, $f0 -/* 1A89C 8003F49C 44071000 */ mfc1 $a3, $f2 -/* 1A8A0 8003F4A0 2403001E */ addiu $v1, $zero, 0x1e -/* 1A8A4 8003F4A4 AFA30014 */ sw $v1, 0x14($sp) -/* 1A8A8 8003F4A8 0C01C82C */ jal func_800720B0 -/* 1A8AC 8003F4AC E7A00010 */ swc1 $f0, 0x10($sp) -/* 1A8B0 8003F4B0 8FBF0024 */ lw $ra, 0x24($sp) -/* 1A8B4 8003F4B4 8FB20020 */ lw $s2, 0x20($sp) -/* 1A8B8 8003F4B8 8FB1001C */ lw $s1, 0x1c($sp) -/* 1A8BC 8003F4BC 8FB00018 */ lw $s0, 0x18($sp) -/* 1A8C0 8003F4C0 24020002 */ addiu $v0, $zero, 2 -/* 1A8C4 8003F4C4 03E00008 */ jr $ra -/* 1A8C8 8003F4C8 27BD0028 */ addiu $sp, $sp, 0x28 diff --git a/asm/nonmatchings/code_1a1f0_len_5390/func_8003F4CC.s b/asm/nonmatchings/code_1a1f0_len_5390/func_8003F4CC.s deleted file mode 100644 index c350b3e2c3..0000000000 --- a/asm/nonmatchings/code_1a1f0_len_5390/func_8003F4CC.s +++ /dev/null @@ -1,49 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_8003F4CC -/* 1A8CC 8003F4CC 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 1A8D0 8003F4D0 AFB1001C */ sw $s1, 0x1c($sp) -/* 1A8D4 8003F4D4 0080882D */ daddu $s1, $a0, $zero -/* 1A8D8 8003F4D8 AFBF0024 */ sw $ra, 0x24($sp) -/* 1A8DC 8003F4DC AFB20020 */ sw $s2, 0x20($sp) -/* 1A8E0 8003F4E0 AFB00018 */ sw $s0, 0x18($sp) -/* 1A8E4 8003F4E4 8E30000C */ lw $s0, 0xc($s1) -/* 1A8E8 8003F4E8 8E050000 */ lw $a1, ($s0) -/* 1A8EC 8003F4EC 0C0B1EAF */ jal get_variable -/* 1A8F0 8003F4F0 26100004 */ addiu $s0, $s0, 4 -/* 1A8F4 8003F4F4 8E050000 */ lw $a1, ($s0) -/* 1A8F8 8003F4F8 26100004 */ addiu $s0, $s0, 4 -/* 1A8FC 8003F4FC 0220202D */ daddu $a0, $s1, $zero -/* 1A900 8003F500 0C0B1EAF */ jal get_variable -/* 1A904 8003F504 0040902D */ daddu $s2, $v0, $zero -/* 1A908 8003F508 0220202D */ daddu $a0, $s1, $zero -/* 1A90C 8003F50C 8E050000 */ lw $a1, ($s0) -/* 1A910 8003F510 0C0B1EAF */ jal get_variable -/* 1A914 8003F514 0040802D */ daddu $s0, $v0, $zero -/* 1A918 8003F518 24040009 */ addiu $a0, $zero, 9 -/* 1A91C 8003F51C 44921000 */ mtc1 $s2, $f2 -/* 1A920 8003F520 00000000 */ nop -/* 1A924 8003F524 468010A0 */ cvt.s.w $f2, $f2 -/* 1A928 8003F528 44051000 */ mfc1 $a1, $f2 -/* 1A92C 8003F52C 44901000 */ mtc1 $s0, $f2 -/* 1A930 8003F530 00000000 */ nop -/* 1A934 8003F534 468010A0 */ cvt.s.w $f2, $f2 -/* 1A938 8003F538 44061000 */ mfc1 $a2, $f2 -/* 1A93C 8003F53C 44821000 */ mtc1 $v0, $f2 -/* 1A940 8003F540 00000000 */ nop -/* 1A944 8003F544 468010A0 */ cvt.s.w $f2, $f2 -/* 1A948 8003F548 3C0140A0 */ lui $at, 0x40a0 -/* 1A94C 8003F54C 44810000 */ mtc1 $at, $f0 -/* 1A950 8003F550 44071000 */ mfc1 $a3, $f2 -/* 1A954 8003F554 2403000F */ addiu $v1, $zero, 0xf -/* 1A958 8003F558 AFA30014 */ sw $v1, 0x14($sp) -/* 1A95C 8003F55C 0C01C5D4 */ jal func_80071750 -/* 1A960 8003F560 E7A00010 */ swc1 $f0, 0x10($sp) -/* 1A964 8003F564 8FBF0024 */ lw $ra, 0x24($sp) -/* 1A968 8003F568 8FB20020 */ lw $s2, 0x20($sp) -/* 1A96C 8003F56C 8FB1001C */ lw $s1, 0x1c($sp) -/* 1A970 8003F570 8FB00018 */ lw $s0, 0x18($sp) -/* 1A974 8003F574 24020002 */ addiu $v0, $zero, 2 -/* 1A978 8003F578 03E00008 */ jr $ra -/* 1A97C 8003F57C 27BD0028 */ addiu $sp, $sp, 0x28 diff --git a/asm/nonmatchings/code_80850_len_3060/initialize_status_menu.s b/asm/nonmatchings/code_80850_len_3060/initialize_status_menu.s deleted file mode 100644 index b66c5f0cec..0000000000 --- a/asm/nonmatchings/code_80850_len_3060/initialize_status_menu.s +++ /dev/null @@ -1,224 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel initialize_status_menu -/* 80DE4 800E7934 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 80DE8 800E7938 AFB10014 */ sw $s1, 0x14($sp) -/* 80DEC 800E793C 3C118011 */ lui $s1, %hi(gUIStatus) -/* 80DF0 800E7940 2631EF58 */ addiu $s1, $s1, %lo(gUIStatus) -/* 80DF4 800E7944 2402000C */ addiu $v0, $zero, 0xc -/* 80DF8 800E7948 AFBF001C */ sw $ra, 0x1c($sp) -/* 80DFC 800E794C AFB20018 */ sw $s2, 0x18($sp) -/* 80E00 800E7950 AFB00010 */ sw $s0, 0x10($sp) -/* 80E04 800E7954 A6220034 */ sh $v0, 0x34($s1) -/* 80E08 800E7958 2402FF9C */ addiu $v0, $zero, -0x64 -/* 80E0C 800E795C 3C038011 */ lui $v1, %hi(gPlayerData) -/* 80E10 800E7960 2463F290 */ addiu $v1, $v1, %lo(gPlayerData) -/* 80E14 800E7964 3C018011 */ lui $at, %hi(D_8010CD10) -/* 80E18 800E7968 A420CD10 */ sh $zero, %lo(D_8010CD10)($at) -/* 80E1C 800E796C 3C018011 */ lui $at, %hi(D_8010CD12) -/* 80E20 800E7970 A420CD12 */ sh $zero, %lo(D_8010CD12)($at) -/* 80E24 800E7974 A6220036 */ sh $v0, 0x36($s1) -/* 80E28 800E7978 A220003A */ sb $zero, 0x3a($s1) -/* 80E2C 800E797C 90640010 */ lbu $a0, 0x10($v1) -/* 80E30 800E7980 240200D2 */ addiu $v0, $zero, 0xd2 -/* 80E34 800E7984 A6220038 */ sh $v0, 0x38($s1) -/* 80E38 800E7988 A220003B */ sb $zero, 0x3b($s1) -/* 80E3C 800E798C A2200044 */ sb $zero, 0x44($s1) -/* 80E40 800E7990 A2200045 */ sb $zero, 0x45($s1) -/* 80E44 800E7994 A2200046 */ sb $zero, 0x46($s1) -/* 80E48 800E7998 A220004A */ sb $zero, 0x4a($s1) -/* 80E4C 800E799C A220004B */ sb $zero, 0x4b($s1) -/* 80E50 800E79A0 A220004C */ sb $zero, 0x4c($s1) -/* 80E54 800E79A4 A220004D */ sb $zero, 0x4d($s1) -/* 80E58 800E79A8 A220004E */ sb $zero, 0x4e($s1) -/* 80E5C 800E79AC A220004F */ sb $zero, 0x4f($s1) -/* 80E60 800E79B0 A2200050 */ sb $zero, 0x50($s1) -/* 80E64 800E79B4 A2200051 */ sb $zero, 0x51($s1) -/* 80E68 800E79B8 A2200054 */ sb $zero, 0x54($s1) -/* 80E6C 800E79BC A2200055 */ sb $zero, 0x55($s1) -/* 80E70 800E79C0 A2200056 */ sb $zero, 0x56($s1) -/* 80E74 800E79C4 A2200047 */ sb $zero, 0x47($s1) -/* 80E78 800E79C8 A2200052 */ sb $zero, 0x52($s1) -/* 80E7C 800E79CC 90620002 */ lbu $v0, 2($v1) -/* 80E80 800E79D0 90650005 */ lbu $a1, 5($v1) -/* 80E84 800E79D4 9466000C */ lhu $a2, 0xc($v1) -/* 80E88 800E79D8 94630290 */ lhu $v1, 0x290($v1) -/* 80E8C 800E79DC 00042600 */ sll $a0, $a0, 0x18 -/* 80E90 800E79E0 00042603 */ sra $a0, $a0, 0x18 -/* 80E94 800E79E4 A222003D */ sb $v0, 0x3d($s1) -/* 80E98 800E79E8 2402FFFF */ addiu $v0, $zero, -1 -/* 80E9C 800E79EC A225003E */ sb $a1, 0x3e($s1) -/* 80EA0 800E79F0 A6260040 */ sh $a2, 0x40($s1) -/* 80EA4 800E79F4 A6240042 */ sh $a0, 0x42($s1) -/* 80EA8 800E79F8 A6230048 */ sh $v1, 0x48($s1) -/* 80EAC 800E79FC A2200053 */ sb $zero, 0x53($s1) -/* 80EB0 800E7A00 A222006E */ sb $v0, 0x6e($s1) -/* 80EB4 800E7A04 2402FFFF */ addiu $v0, $zero, -1 -/* 80EB8 800E7A08 A220003C */ sb $zero, 0x3c($s1) -/* 80EBC 800E7A0C A2200057 */ sb $zero, 0x57($s1) -/* 80EC0 800E7A10 A2200058 */ sb $zero, 0x58($s1) -/* 80EC4 800E7A14 A2200059 */ sb $zero, 0x59($s1) -/* 80EC8 800E7A18 A220005A */ sb $zero, 0x5a($s1) -/* 80ECC 800E7A1C A220006C */ sb $zero, 0x6c($s1) -/* 80ED0 800E7A20 A220006D */ sb $zero, 0x6d($s1) -/* 80ED4 800E7A24 0C03A5EE */ jal func_800E97B8 -/* 80ED8 800E7A28 AE220064 */ sw $v0, 0x64($s1) -/* 80EDC 800E7A2C 3C048011 */ lui $a0, %hi(D_80108248) -/* 80EE0 800E7A30 24848248 */ addiu $a0, $a0, %lo(D_80108248) -/* 80EE4 800E7A34 0C050529 */ jal create_icon -/* 80EE8 800E7A38 00000000 */ nop -/* 80EEC 800E7A3C 0040802D */ daddu $s0, $v0, $zero -/* 80EF0 800E7A40 0200202D */ daddu $a0, $s0, $zero -/* 80EF4 800E7A44 24050080 */ addiu $a1, $zero, 0x80 -/* 80EF8 800E7A48 0C051280 */ jal set_icon_flags -/* 80EFC 800E7A4C AE300000 */ sw $s0, ($s1) -/* 80F00 800E7A50 0200202D */ daddu $a0, $s0, $zero -/* 80F04 800E7A54 0C05128B */ jal clear_icon_flags -/* 80F08 800E7A58 34058000 */ ori $a1, $zero, 0x8000 -/* 80F0C 800E7A5C 3C048011 */ lui $a0, %hi(D_80108518) -/* 80F10 800E7A60 24848518 */ addiu $a0, $a0, %lo(D_80108518) -/* 80F14 800E7A64 0C050529 */ jal create_icon -/* 80F18 800E7A68 00000000 */ nop -/* 80F1C 800E7A6C 0040802D */ daddu $s0, $v0, $zero -/* 80F20 800E7A70 0200202D */ daddu $a0, $s0, $zero -/* 80F24 800E7A74 24050080 */ addiu $a1, $zero, 0x80 -/* 80F28 800E7A78 0C051280 */ jal set_icon_flags -/* 80F2C 800E7A7C AE300004 */ sw $s0, 4($s1) -/* 80F30 800E7A80 0200202D */ daddu $a0, $s0, $zero -/* 80F34 800E7A84 0C05128B */ jal clear_icon_flags -/* 80F38 800E7A88 34058000 */ ori $a1, $zero, 0x8000 -/* 80F3C 800E7A8C 3C048011 */ lui $a0, %hi(D_80108270) -/* 80F40 800E7A90 24848270 */ addiu $a0, $a0, %lo(D_80108270) -/* 80F44 800E7A94 0C050529 */ jal create_icon -/* 80F48 800E7A98 00000000 */ nop -/* 80F4C 800E7A9C 0040802D */ daddu $s0, $v0, $zero -/* 80F50 800E7AA0 0200202D */ daddu $a0, $s0, $zero -/* 80F54 800E7AA4 24050080 */ addiu $a1, $zero, 0x80 -/* 80F58 800E7AA8 0C051280 */ jal set_icon_flags -/* 80F5C 800E7AAC AE300008 */ sw $s0, 8($s1) -/* 80F60 800E7AB0 0200202D */ daddu $a0, $s0, $zero -/* 80F64 800E7AB4 0C05128B */ jal clear_icon_flags -/* 80F68 800E7AB8 34058000 */ ori $a1, $zero, 0x8000 -/* 80F6C 800E7ABC 3C048011 */ lui $a0, %hi(D_80108538) -/* 80F70 800E7AC0 24848538 */ addiu $a0, $a0, %lo(D_80108538) -/* 80F74 800E7AC4 0C050529 */ jal create_icon -/* 80F78 800E7AC8 00000000 */ nop -/* 80F7C 800E7ACC 0040802D */ daddu $s0, $v0, $zero -/* 80F80 800E7AD0 0200202D */ daddu $a0, $s0, $zero -/* 80F84 800E7AD4 24050080 */ addiu $a1, $zero, 0x80 -/* 80F88 800E7AD8 0C051280 */ jal set_icon_flags -/* 80F8C 800E7ADC AE30000C */ sw $s0, 0xc($s1) -/* 80F90 800E7AE0 0200202D */ daddu $a0, $s0, $zero -/* 80F94 800E7AE4 0C05128B */ jal clear_icon_flags -/* 80F98 800E7AE8 34058000 */ ori $a1, $zero, 0x8000 -/* 80F9C 800E7AEC 3C048011 */ lui $a0, %hi(D_80108558) -/* 80FA0 800E7AF0 24848558 */ addiu $a0, $a0, %lo(D_80108558) -/* 80FA4 800E7AF4 0C050529 */ jal create_icon -/* 80FA8 800E7AF8 00000000 */ nop -/* 80FAC 800E7AFC 0040802D */ daddu $s0, $v0, $zero -/* 80FB0 800E7B00 0200202D */ daddu $a0, $s0, $zero -/* 80FB4 800E7B04 24050080 */ addiu $a1, $zero, 0x80 -/* 80FB8 800E7B08 0C051280 */ jal set_icon_flags -/* 80FBC 800E7B0C AE300010 */ sw $s0, 0x10($s1) -/* 80FC0 800E7B10 0200202D */ daddu $a0, $s0, $zero -/* 80FC4 800E7B14 0C05128B */ jal clear_icon_flags -/* 80FC8 800E7B18 34058000 */ ori $a1, $zero, 0x8000 -/* 80FCC 800E7B1C 3C048008 */ lui $a0, %hi(D_80080FC4) -/* 80FD0 800E7B20 24840FC4 */ addiu $a0, $a0, %lo(D_80080FC4) -/* 80FD4 800E7B24 0C050529 */ jal create_icon -/* 80FD8 800E7B28 00000000 */ nop -/* 80FDC 800E7B2C 0040802D */ daddu $s0, $v0, $zero -/* 80FE0 800E7B30 0200202D */ daddu $a0, $s0, $zero -/* 80FE4 800E7B34 24050080 */ addiu $a1, $zero, 0x80 -/* 80FE8 800E7B38 0C051280 */ jal set_icon_flags -/* 80FEC 800E7B3C AE300014 */ sw $s0, 0x14($s1) -/* 80FF0 800E7B40 0200202D */ daddu $a0, $s0, $zero -/* 80FF4 800E7B44 0C05128B */ jal clear_icon_flags -/* 80FF8 800E7B48 34058000 */ ori $a1, $zero, 0x8000 -/* 80FFC 800E7B4C 3C048011 */ lui $a0, %hi(D_801086AC) -/* 81000 800E7B50 248486AC */ addiu $a0, $a0, %lo(D_801086AC) -/* 81004 800E7B54 0C050529 */ jal create_icon -/* 81008 800E7B58 00000000 */ nop -/* 8100C 800E7B5C 0040802D */ daddu $s0, $v0, $zero -/* 81010 800E7B60 0200202D */ daddu $a0, $s0, $zero -/* 81014 800E7B64 24050080 */ addiu $a1, $zero, 0x80 -/* 81018 800E7B68 0C051280 */ jal set_icon_flags -/* 8101C 800E7B6C AE300018 */ sw $s0, 0x18($s1) -/* 81020 800E7B70 0200202D */ daddu $a0, $s0, $zero -/* 81024 800E7B74 0C05128B */ jal clear_icon_flags -/* 81028 800E7B78 34058000 */ ori $a1, $zero, 0x8000 -/* 8102C 800E7B7C 3C048010 */ lui $a0, %hi(D_80104BEC) -/* 81030 800E7B80 24844BEC */ addiu $a0, $a0, %lo(D_80104BEC) -/* 81034 800E7B84 0C050529 */ jal create_icon -/* 81038 800E7B88 00000000 */ nop -/* 8103C 800E7B8C 0040802D */ daddu $s0, $v0, $zero -/* 81040 800E7B90 0200202D */ daddu $a0, $s0, $zero -/* 81044 800E7B94 24050080 */ addiu $a1, $zero, 0x80 -/* 81048 800E7B98 0C051280 */ jal set_icon_flags -/* 8104C 800E7B9C AE30001C */ sw $s0, 0x1c($s1) -/* 81050 800E7BA0 0200202D */ daddu $a0, $s0, $zero -/* 81054 800E7BA4 0C05128B */ jal clear_icon_flags -/* 81058 800E7BA8 34058000 */ ori $a1, $zero, 0x8000 -/* 8105C 800E7BAC 3C128011 */ lui $s2, %hi(D_80108068) -/* 81060 800E7BB0 26528068 */ addiu $s2, $s2, %lo(D_80108068) -/* 81064 800E7BB4 0C050529 */ jal create_icon -/* 81068 800E7BB8 0240202D */ daddu $a0, $s2, $zero -/* 8106C 800E7BBC 0040802D */ daddu $s0, $v0, $zero -/* 81070 800E7BC0 0200202D */ daddu $a0, $s0, $zero -/* 81074 800E7BC4 24050082 */ addiu $a1, $zero, 0x82 -/* 81078 800E7BC8 0C051280 */ jal set_icon_flags -/* 8107C 800E7BCC AE300020 */ sw $s0, 0x20($s1) -/* 81080 800E7BD0 0200202D */ daddu $a0, $s0, $zero -/* 81084 800E7BD4 0C05128B */ jal clear_icon_flags -/* 81088 800E7BD8 34058000 */ ori $a1, $zero, 0x8000 -/* 8108C 800E7BDC 0C050529 */ jal create_icon -/* 81090 800E7BE0 0240202D */ daddu $a0, $s2, $zero -/* 81094 800E7BE4 0040802D */ daddu $s0, $v0, $zero -/* 81098 800E7BE8 0200202D */ daddu $a0, $s0, $zero -/* 8109C 800E7BEC 24050082 */ addiu $a1, $zero, 0x82 -/* 810A0 800E7BF0 0C051280 */ jal set_icon_flags -/* 810A4 800E7BF4 AE300024 */ sw $s0, 0x24($s1) -/* 810A8 800E7BF8 0200202D */ daddu $a0, $s0, $zero -/* 810AC 800E7BFC 0C05128B */ jal clear_icon_flags -/* 810B0 800E7C00 34058000 */ ori $a1, $zero, 0x8000 -/* 810B4 800E7C04 0C050529 */ jal create_icon -/* 810B8 800E7C08 0240202D */ daddu $a0, $s2, $zero -/* 810BC 800E7C0C 0040802D */ daddu $s0, $v0, $zero -/* 810C0 800E7C10 0200202D */ daddu $a0, $s0, $zero -/* 810C4 800E7C14 24050082 */ addiu $a1, $zero, 0x82 -/* 810C8 800E7C18 0C051280 */ jal set_icon_flags -/* 810CC 800E7C1C AE300028 */ sw $s0, 0x28($s1) -/* 810D0 800E7C20 0200202D */ daddu $a0, $s0, $zero -/* 810D4 800E7C24 0C05128B */ jal clear_icon_flags -/* 810D8 800E7C28 34058000 */ ori $a1, $zero, 0x8000 -/* 810DC 800E7C2C 0C050529 */ jal create_icon -/* 810E0 800E7C30 0240202D */ daddu $a0, $s2, $zero -/* 810E4 800E7C34 0040802D */ daddu $s0, $v0, $zero -/* 810E8 800E7C38 0200202D */ daddu $a0, $s0, $zero -/* 810EC 800E7C3C 24050082 */ addiu $a1, $zero, 0x82 -/* 810F0 800E7C40 0C051280 */ jal set_icon_flags -/* 810F4 800E7C44 AE30002C */ sw $s0, 0x2c($s1) -/* 810F8 800E7C48 0200202D */ daddu $a0, $s0, $zero -/* 810FC 800E7C4C 0C05128B */ jal clear_icon_flags -/* 81100 800E7C50 34058000 */ ori $a1, $zero, 0x8000 -/* 81104 800E7C54 3C048011 */ lui $a0, %hi(D_801083D8) -/* 81108 800E7C58 248483D8 */ addiu $a0, $a0, %lo(D_801083D8) -/* 8110C 800E7C5C 0C050529 */ jal create_icon -/* 81110 800E7C60 00000000 */ nop -/* 81114 800E7C64 0040802D */ daddu $s0, $v0, $zero -/* 81118 800E7C68 0200202D */ daddu $a0, $s0, $zero -/* 8111C 800E7C6C 24050080 */ addiu $a1, $zero, 0x80 -/* 81120 800E7C70 0C051280 */ jal set_icon_flags -/* 81124 800E7C74 AE300030 */ sw $s0, 0x30($s1) -/* 81128 800E7C78 0200202D */ daddu $a0, $s0, $zero -/* 8112C 800E7C7C 0C05128B */ jal clear_icon_flags -/* 81130 800E7C80 34058000 */ ori $a1, $zero, 0x8000 -/* 81134 800E7C84 0C03C357 */ jal func_800F0D5C -/* 81138 800E7C88 00000000 */ nop -/* 8113C 800E7C8C 8FBF001C */ lw $ra, 0x1c($sp) -/* 81140 800E7C90 8FB20018 */ lw $s2, 0x18($sp) -/* 81144 800E7C94 8FB10014 */ lw $s1, 0x14($sp) -/* 81148 800E7C98 8FB00010 */ lw $s0, 0x10($sp) -/* 8114C 800E7C9C 03E00008 */ jr $ra -/* 81150 800E7CA0 27BD0020 */ addiu $sp, $sp, 0x20 diff --git a/include/functions.h b/include/functions.h index e9a3be6e7b..53de5780aa 100644 --- a/include/functions.h +++ b/include/functions.h @@ -38,6 +38,7 @@ void func_80027088(s32); void func_8006FEF0(s32, f32, f32, f32, f32); void func_80071090(s32, f32, f32, f32, s32); void func_80071750(s32, f32, f32, f32, f32, s32); +void func_800720B0(s32, f32, f32, f32, f32, s32); void func_80072950(s32, f32, f32, f32, f32, s32 time); void update_collider_transform(s16 colliderID); @@ -81,8 +82,10 @@ void fx_walk_normal(s32 arg0, f32 arg1, f32 arg2, f32 arg3, s32 arg4, s32 arg5); void fx_emote(s32, Npc*, s32, f32, f32, f32, f32, s32, s32*); f32 func_800E0088(f32, f32); +void func_800E97B8(void); s32 func_800EB168(s32); + PlayerData* get_player_data(void); // Pause diff --git a/include/macros.h b/include/macros.h index 3afdfffa23..3a943a903a 100644 --- a/include/macros.h +++ b/include/macros.h @@ -20,6 +20,7 @@ #define BATTLE_STATUS (&gBattleStatus) #define GAME_STATUS (*gGameStatusPtr) #define PLAYER_STATUS (&gPlayerStatus) +#define UI_STATUS (&gUIStatus) #define PLAYER_DATA (&gPlayerData) #define CAM(id) (&gCameras[id]) #define CURRENT_CAM (&gCameras[gCurrentCameraID]) diff --git a/include/variables.h b/include/variables.h index f8de9a1e1b..99fff620ec 100644 --- a/include/variables.h +++ b/include/variables.h @@ -71,9 +71,11 @@ extern Npc* gPlayerNpcPtr; extern s8 D_800A0900; extern EncounterStatus gCurrentEncounter; +extern s8* D_801512F0; extern s16 D_80151308; extern s32 D_80151310; extern s16* D_80151328; + extern s16 D_8010CD10; extern s16 D_8010CD12; extern s32 D_8010CD20; @@ -118,6 +120,7 @@ extern s16 D_800A095E; extern u8 D_800A095F; extern s32 D_800A0960; extern s32 D_800A0964; +extern s16 D_800A0BB8; extern UIPanel gUIPanels[64]; @@ -192,6 +195,15 @@ extern UNK_TYPE D_80147474; extern UNK_TYPE D_80147574; extern UNK_TYPE D_80109270; extern UNK_TYPE D_80108558; +extern s32 D_80108248; +extern s32 D_80108518; +extern s32 D_80108270; +extern s32 D_80108538; +extern s32 D_80080FC4; +extern s32 D_801086AC; +extern s32 D_801083D8; +extern s32 D_80108068; +extern s32 D_80104BEC; extern UNK_TYPE D_8010F250; // play_sound state struct? extern s8 D_8010EBB0[]; diff --git a/requirements.txt b/requirements.txt index 779222e276..60c34e5e77 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,3 +3,4 @@ PyYAML lark-parser python-ranges pypng +colorama diff --git a/requirements_extra.txt b/requirements_extra.txt index 607b823d62..bed63f8773 100644 --- a/requirements_extra.txt +++ b/requirements_extra.txt @@ -1,5 +1,4 @@ ansiwrap -colorama cxxfilt python-Levenshtein stringcase 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/src/code_1A5830.c b/src/code_1A5830.c index 76e9a13165..64de475aa0 100644 --- a/src/code_1A5830.c +++ b/src/code_1A5830.c @@ -98,7 +98,32 @@ ApiStatus ResumeTakeTurn(ScriptInstance* script, s32 isInitialCall) { return ApiStatus_DONE2; } -INCLUDE_ASM(s32, "code_1A5830", BindIdle); +ApiStatus BindIdle(ScriptInstance* script, s32 isInitialCall) { + Bytecode* args = script->ptrReadPos; + ActorID actorID = get_variable(script, *args++); + Bytecode* idleCode; + Actor* actor; + ScriptInstance* newScriptContext; + + if (actorID == ActorID_SELF) { + actorID = script->owner1.actorID; + } + + idleCode = get_variable(script, *args++); + actor = get_actor(actorID); + + if (actor->idleScript != 0) { + kill_script_by_ID(actor->idleScriptID); + actor->idleScript = 0; + } + + actor->idleCode = idleCode; + newScriptContext = start_script(idleCode, 10, 0); + actor->idleScript = newScriptContext; + actor->idleScriptID = newScriptContext->id; + newScriptContext->owner1.actorID = actorID; + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_1A5830", EnableIdleScript); diff --git a/src/code_1a1f0_len_5390.c b/src/code_1a1f0_len_5390.c index acd8b18e2f..46d60b2265 100644 --- a/src/code_1a1f0_len_5390.c +++ b/src/code_1a1f0_len_5390.c @@ -41,7 +41,19 @@ ApiStatus func_8003EECC(ScriptInstance* script, s32 isInitialCall) { return (func_80045FA4() == 0) * ApiStatus_DONE2; } -INCLUDE_ASM(s32, "code_1a1f0_len_5390", FadeBackgroundToBlack); +ApiStatus FadeBackgroundToBlack(ScriptInstance* script, s32 isInitialCall) { + if (isInitialCall) { + func_8011D82C(1); + *D_801512F0 = 1; + set_background_color_blend(0, 0, 0, 0); + script->functionTemp[0].s = 25; + } + + set_background_color_blend(0, 0, 0, ((25 - script->functionTemp[0].s) * 10) & 254); + script->functionTemp[0].s--; + do {} while (0); + return (script->functionTemp[0].s == 0) * ApiStatus_DONE2; +} ApiStatus UnfadeBackgroundFromBlack(ScriptInstance* script, s32 isInitialCall) { if (isInitialCall) { @@ -76,11 +88,24 @@ ApiStatus func_8003F018(ScriptInstance* script, s32 isInitialCall) { return ApiStatus_BLOCK; } -INCLUDE_ASM(s32, "code_1a1f0_len_5390", func_8003F084); +ApiStatus func_8003F084(ScriptInstance* script, s32 isInitialCall) { + Npc* npc = get_npc_unsafe(-0xA); + + npc->unk_AC -= 17; + if (npc->unk_AC == 0) { + npc->unk_AC = 0; + return ApiStatus_DONE1; + } + + return ApiStatus_BLOCK; +} INCLUDE_ASM(s32, "code_1a1f0_len_5390", func_8003F0C4); -INCLUDE_ASM(s32, "code_1a1f0_len_5390", func_8003F384); +ApiStatus func_8003F384(ScriptInstance* script, s32 isInitialCall) { + D_800A0BB8 = 1; + return ApiStatus_DONE2; +} ApiStatus GetCamLookAtObjVector(ScriptInstance* script, s32 isInitialCall) { script->varTable[0] = CURRENT_CAM->lookAt_obj.x; @@ -99,9 +124,25 @@ ApiStatus HasMerleeCasts(ScriptInstance* script, s32 isInitialCall) { return ApiStatus_DONE2; } -INCLUDE_ASM(s32, "code_1a1f0_len_5390", func_8003F414); +ApiStatus func_8003F414(ScriptInstance* script, s32 isInitialCall) { + Bytecode* args = script->ptrReadPos; + s32 var0 = get_variable(script, *args++); + s32 var1 = get_variable(script, *args++); + s32 var2 = get_variable(script, *args++); -INCLUDE_ASM(s32, "code_1a1f0_len_5390", func_8003F4CC); + func_800720B0(6, var0, var1, var2, 1.2f, 30); + return ApiStatus_DONE2; +} + +ApiStatus func_8003F4CC(ScriptInstance* script, s32 isInitialCall) { + Bytecode* args = script->ptrReadPos; + s32 var0 = get_variable(script, *args++); + s32 var1 = get_variable(script, *args++); + s32 var2 = get_variable(script, *args++); + + func_80071750(9, var0, var1, var2, 5.0f, 15); + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_1a1f0_len_5390", OnDefeatEnemy, ScriptInstance* script, s32 isInitialCall); diff --git a/src/code_80850_len_3060.c b/src/code_80850_len_3060.c index fa0bc1af7f..30a366801a 100644 --- a/src/code_80850_len_3060.c +++ b/src/code_80850_len_3060.c @@ -268,7 +268,121 @@ void enforce_hpfp_limits(void) { } } -INCLUDE_ASM(s32, "code_80850_len_3060", initialize_status_menu); +void initialize_status_menu(void) { + UiStatus* uiStatus = UI_STATUS; + PlayerData* playerData = PLAYER_DATA; + s32 iconIndex; + s32 newVar; + + uiStatus->drawPosX = 12; + D_8010CD10 = 0; + D_8010CD12 = 0; + uiStatus->drawPosY = -100; + uiStatus->hidden = 0; + uiStatus->showTimer = 210; + uiStatus->unk_3B[0] = 0; + uiStatus->ignoreChanges = 0; + uiStatus->unk_45[0] = 0; + uiStatus->unk_45[1] = 0; + uiStatus->hpBlinking = 0; + uiStatus->hpBlinkCounter = 0; + uiStatus->hpBlinkTimer = 0; + uiStatus->fpBlinking = 0; + uiStatus->fpBlinkCounter = 0; + uiStatus->fpBlinkTimer = 0; + uiStatus->spBlinking = 0; + uiStatus->spBlinkCounter = 0; + uiStatus->coinsBlinking = 0; + uiStatus->coinsBlinkCounter = 0; + uiStatus->coinsBlinkTimer = 0; + uiStatus->disabled = 0; + uiStatus->starpointsBlinking = 0; + uiStatus->displayHP = playerData->curHP; + uiStatus->displayFP = playerData->curFP; + uiStatus->displayCoins = playerData->coins; + uiStatus->displayStarpoints = playerData->starPoints; + uiStatus->displaySP = playerData->specialBarsFilled; + uiStatus->starpointsBlinkCounter = 0; + uiStatus->unk_6C[2] = -1; + uiStatus->unk_3B[1] = 0; + uiStatus->unk_57[0] = 0; + uiStatus->unk_57[1] = 0; + uiStatus->unk_57[2] = 0; + uiStatus->unk_57[3] = 0; + uiStatus->unk_6C[0] = 0; + uiStatus->unk_6C[1] = 0; + uiStatus->iconIndex12 = -1; + + func_800E97B8(); + + iconIndex = create_icon(&D_80108248); + uiStatus->hpIconIndexes[0] = iconIndex; + set_icon_flags(iconIndex, 0x80); + clear_icon_flags(iconIndex, 0x8000); + + iconIndex = create_icon(&D_80108518); + uiStatus->hpIconIndexes[1] = iconIndex; + set_icon_flags(iconIndex, 0x80); + clear_icon_flags(iconIndex, 0x8000); + + iconIndex = create_icon(&D_80108270); + uiStatus->fpIconIndexes[0] = iconIndex; + set_icon_flags(iconIndex, 0x80); + clear_icon_flags(iconIndex, 0x8000); + + iconIndex = create_icon(&D_80108538); + uiStatus->fpIconIndexes[1] = iconIndex; + set_icon_flags(iconIndex, 0x80); + clear_icon_flags(iconIndex, 0x8000); + + iconIndex = create_icon(&D_80108558); + uiStatus->coinIconIndex = iconIndex; + set_icon_flags(iconIndex, 0x80); + clear_icon_flags(iconIndex, 0x8000); + + iconIndex = create_icon(&D_80080FC4); + uiStatus->coinIconIndex2 = iconIndex; + set_icon_flags(iconIndex, 0x80); + clear_icon_flags(iconIndex, 0x8000); + + iconIndex = create_icon(&D_801086AC); + uiStatus->starpointsIconIndex = iconIndex; + set_icon_flags(iconIndex, 0x80); + clear_icon_flags(iconIndex, 0x8000); + + iconIndex = create_icon(&D_80104BEC); + uiStatus->starpointsIconIndex2 = iconIndex; + set_icon_flags(iconIndex, 0x80); + clear_icon_flags(iconIndex, 0x8000); + + newVar = create_icon(&D_80108068); + iconIndex = newVar; + uiStatus->iconIndex8 = iconIndex; + set_icon_flags(iconIndex, 0x82); + clear_icon_flags(iconIndex, 0x8000); + + iconIndex = create_icon(&D_80108068); + uiStatus->iconIndex9 = iconIndex; + set_icon_flags(iconIndex, 0x82); + clear_icon_flags(iconIndex, 0x8000); + + iconIndex = create_icon(&D_80108068); + uiStatus->iconIndexA = iconIndex; + set_icon_flags(iconIndex, 0x82); + clear_icon_flags(iconIndex, 0x8000); + + iconIndex = create_icon(&D_80108068); + uiStatus->iconIndexB = iconIndex; + set_icon_flags(iconIndex, 0x82); + clear_icon_flags(iconIndex, 0x8000); + + iconIndex = create_icon(&D_801083D8); + uiStatus->iconIndexC = iconIndex; + set_icon_flags(iconIndex, 0x80); + clear_icon_flags(iconIndex, 0x8000); + + func_800F0D5C(); +} INCLUDE_ASM(s32, "code_80850_len_3060", status_menu_draw_number); diff --git a/src/os/code_4ac90_len_3910.c b/src/os/code_4ac90_len_3910.c index 0d15054caa..0e74612759 100644 --- a/src/os/code_4ac90_len_3910.c +++ b/src/os/code_4ac90_len_3910.c @@ -215,7 +215,7 @@ INCLUDE_ASM(s32, "os/code_4ac90_len_3910", func_80071FF0); INCLUDE_ASM(s32, "os/code_4ac90_len_3910", func_80072050); -INCLUDE_ASM(s32, "os/code_4ac90_len_3910", func_800720B0); +INCLUDE_ASM(void, "os/code_4ac90_len_3910", func_800720B0, s32 a0, f32 a1, f32 a2, f32 a3, f32 a4, s32 a5); INCLUDE_ASM(s32, "os/code_4ac90_len_3910", func_80072110); diff --git a/tools/Yay0compress b/tools/Yay0compress deleted file mode 100755 index 10b3c1c0c6..0000000000 Binary files a/tools/Yay0compress and /dev/null differ 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/iconv.py b/tools/iconv.py new file mode 100755 index 0000000000..9575a57043 --- /dev/null +++ b/tools/iconv.py @@ -0,0 +1,23 @@ +#!/usr/bin/python3 + +import argparse +import sys + +parser = argparse.ArgumentParser(description='Convert a file from one encoding to another') +parser.add_argument("f") +parser.add_argument("t") +parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), default=sys.stdin) +parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'), default=sys.stdout) + +args = parser.parse_args() + + +def main(args): + sys.stdin.reconfigure(encoding=args.f) + in_data = args.infile.read() + sys.stdout.reconfigure(encoding=args.t) + args.outfile.write(in_data) + + +if __name__ == "__main__": + main(parser.parse_args()) diff --git a/tools/cc1 b/tools/linux/cc1 similarity index 100% rename from tools/cc1 rename to tools/linux/cc1 diff --git a/tools/mips-nintendo-nu64-as b/tools/linux/mips-nintendo-nu64-as similarity index 100% rename from tools/mips-nintendo-nu64-as rename to tools/linux/mips-nintendo-nu64-as diff --git a/tools/mac/cc1 b/tools/mac/cc1 new file mode 100755 index 0000000000..1b8038eecc Binary files /dev/null and b/tools/mac/cc1 differ diff --git a/tools/mac/mips-nintendo-nu64-as b/tools/mac/mips-nintendo-nu64-as new file mode 100755 index 0000000000..8955737d84 Binary files /dev/null and b/tools/mac/mips-nintendo-nu64-as differ diff --git a/tools/n64splat b/tools/n64splat index 9eacb4e02c..e0262202ef 160000 --- a/tools/n64splat +++ b/tools/n64splat @@ -1 +1 @@ -Subproject commit 9eacb4e02cefcc7a80f810db1dbb7b9c02692b80 +Subproject commit e0262202ef931e0a0d09a144fcded281d0dc1656 diff --git a/tools/splat.yaml b/tools/splat.yaml index 1d04aff54b..0739d1ba20 100644 --- a/tools/splat.yaml +++ b/tools/splat.yaml @@ -26,6 +26,7 @@ segments: - type: code start: 0x1000 vram: 0x80025C00 + subalign: 8 files: - [0x1000, c, code_1000_len_60] - [0x1060, c, code_1060_len_310] @@ -7396,7 +7397,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