From 5bc8e56a91065d7342bbbdbed9d23d2c7aa3ff0a Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Thu, 15 Oct 2020 22:05:04 -0400 Subject: [PATCH 01/22] treats --- .../code_1421C0/pause_get_menu_string.s | 4 +- asm/nonmatchings/code_196AA0/func_8026919C.s | 15 ------- asm/nonmatchings/code_196AA0/func_802692EC.s | 15 ------- asm/nonmatchings/code_196AA0/func_80269318.s | 15 ------- asm/nonmatchings/code_196AA0/func_80269524.s | 15 ------- asm/nonmatchings/code_196AA0/func_80269550.s | 15 ------- asm/nonmatchings/code_196AA0/func_802695A8.s | 15 ------- asm/nonmatchings/code_196AA0/func_802695D4.s | 15 ------- asm/nonmatchings/code_196AA0/func_80269600.s | 15 ------- asm/nonmatchings/code_196AA0/func_8026962C.s | 17 ------- .../code_1AF230/LoadStarPowerScript.s | 4 ++ include/common_structs.h | 9 ++-- include/variables.h | 2 +- src/code_196AA0.c | 45 +++++++++++++++---- tools/splat.yaml | 2 +- undefined_syms.txt | 2 + 16 files changed, 52 insertions(+), 153 deletions(-) delete mode 100644 asm/nonmatchings/code_196AA0/func_8026919C.s delete mode 100644 asm/nonmatchings/code_196AA0/func_802692EC.s delete mode 100644 asm/nonmatchings/code_196AA0/func_80269318.s delete mode 100644 asm/nonmatchings/code_196AA0/func_80269524.s delete mode 100644 asm/nonmatchings/code_196AA0/func_80269550.s delete mode 100644 asm/nonmatchings/code_196AA0/func_802695A8.s delete mode 100644 asm/nonmatchings/code_196AA0/func_802695D4.s delete mode 100644 asm/nonmatchings/code_196AA0/func_80269600.s delete mode 100644 asm/nonmatchings/code_196AA0/func_8026962C.s diff --git a/asm/nonmatchings/code_1421C0/pause_get_menu_string.s b/asm/nonmatchings/code_1421C0/pause_get_menu_string.s index 9884612280..3198903870 100644 --- a/asm/nonmatchings/code_1421C0/pause_get_menu_string.s +++ b/asm/nonmatchings/code_1421C0/pause_get_menu_string.s @@ -3,7 +3,7 @@ glabel pause_get_menu_string /* 1421C0 8024EE80 00042080 */ sll $a0, $a0, 2 -/* 1421C4 8024EE84 3C028027 */ lui $v0, 0x8027 +/* 1421C4 8024EE84 3C028027 */ lui $v0, %hi(gPauseMenuStrings) /* 1421C8 8024EE88 00441021 */ addu $v0, $v0, $a0 /* 1421CC 8024EE8C 03E00008 */ jr $ra -/* 1421D0 8024EE90 8C42F778 */ lw $v0, -0x888($v0) +/* 1421D0 8024EE90 8C42F778 */ lw $v0, %lo(gPauseMenuStrings)($v0) diff --git a/asm/nonmatchings/code_196AA0/func_8026919C.s b/asm/nonmatchings/code_196AA0/func_8026919C.s deleted file mode 100644 index 50dc02aa7c..0000000000 --- a/asm/nonmatchings/code_196AA0/func_8026919C.s +++ /dev/null @@ -1,15 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_8026919C -/* 197A7C 8026919C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 197A80 802691A0 AFBF0010 */ sw $ra, 0x10($sp) -/* 197A84 802691A4 8C82000C */ lw $v0, 0xc($a0) -/* 197A88 802691A8 0C0B1EAF */ jal get_variable -/* 197A8C 802691AC 8C450000 */ lw $a1, ($v0) -/* 197A90 802691B0 8FBF0010 */ lw $ra, 0x10($sp) -/* 197A94 802691B4 3C01800E */ lui $at, 0x800e -/* 197A98 802691B8 AC22C4A4 */ sw $v0, -0x3b5c($at) -/* 197A9C 802691BC 24020002 */ addiu $v0, $zero, 2 -/* 197AA0 802691C0 03E00008 */ jr $ra -/* 197AA4 802691C4 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_196AA0/func_802692EC.s b/asm/nonmatchings/code_196AA0/func_802692EC.s deleted file mode 100644 index 489fdd060c..0000000000 --- a/asm/nonmatchings/code_196AA0/func_802692EC.s +++ /dev/null @@ -1,15 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_802692EC -/* 197BCC 802692EC 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 197BD0 802692F0 AFBF0010 */ sw $ra, 0x10($sp) -/* 197BD4 802692F4 8C82000C */ lw $v0, 0xc($a0) -/* 197BD8 802692F8 0C0B1EAF */ jal get_variable -/* 197BDC 802692FC 8C450000 */ lw $a1, ($v0) -/* 197BE0 80269300 8FBF0010 */ lw $ra, 0x10($sp) -/* 197BE4 80269304 3C01800E */ lui $at, 0x800e -/* 197BE8 80269308 A022C0F3 */ sb $v0, -0x3f0d($at) -/* 197BEC 8026930C 24020002 */ addiu $v0, $zero, 2 -/* 197BF0 80269310 03E00008 */ jr $ra -/* 197BF4 80269314 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_196AA0/func_80269318.s b/asm/nonmatchings/code_196AA0/func_80269318.s deleted file mode 100644 index cace4bea35..0000000000 --- a/asm/nonmatchings/code_196AA0/func_80269318.s +++ /dev/null @@ -1,15 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80269318 -/* 197BF8 80269318 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 197BFC 8026931C AFBF0010 */ sw $ra, 0x10($sp) -/* 197C00 80269320 8C82000C */ lw $v0, 0xc($a0) -/* 197C04 80269324 3C06800E */ lui $a2, 0x800e -/* 197C08 80269328 80C6C0F3 */ lb $a2, -0x3f0d($a2) -/* 197C0C 8026932C 0C0B2026 */ jal set_variable -/* 197C10 80269330 8C450000 */ lw $a1, ($v0) -/* 197C14 80269334 8FBF0010 */ lw $ra, 0x10($sp) -/* 197C18 80269338 24020002 */ addiu $v0, $zero, 2 -/* 197C1C 8026933C 03E00008 */ jr $ra -/* 197C20 80269340 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_196AA0/func_80269524.s b/asm/nonmatchings/code_196AA0/func_80269524.s deleted file mode 100644 index 84bd8bcb9e..0000000000 --- a/asm/nonmatchings/code_196AA0/func_80269524.s +++ /dev/null @@ -1,15 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80269524 -/* 197E04 80269524 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 197E08 80269528 AFBF0010 */ sw $ra, 0x10($sp) -/* 197E0C 8026952C 8C82000C */ lw $v0, 0xc($a0) -/* 197E10 80269530 3C06800E */ lui $a2, 0x800e -/* 197E14 80269534 80C6C0F6 */ lb $a2, -0x3f0a($a2) -/* 197E18 80269538 0C0B2026 */ jal set_variable -/* 197E1C 8026953C 8C450000 */ lw $a1, ($v0) -/* 197E20 80269540 8FBF0010 */ lw $ra, 0x10($sp) -/* 197E24 80269544 24020002 */ addiu $v0, $zero, 2 -/* 197E28 80269548 03E00008 */ jr $ra -/* 197E2C 8026954C 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_196AA0/func_80269550.s b/asm/nonmatchings/code_196AA0/func_80269550.s deleted file mode 100644 index 36c98f24ff..0000000000 --- a/asm/nonmatchings/code_196AA0/func_80269550.s +++ /dev/null @@ -1,15 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80269550 -/* 197E30 80269550 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 197E34 80269554 AFBF0010 */ sw $ra, 0x10($sp) -/* 197E38 80269558 8C82000C */ lw $v0, 0xc($a0) -/* 197E3C 8026955C 0C0B1EAF */ jal get_variable -/* 197E40 80269560 8C450000 */ lw $a1, ($v0) -/* 197E44 80269564 8FBF0010 */ lw $ra, 0x10($sp) -/* 197E48 80269568 3C01800E */ lui $at, 0x800e -/* 197E4C 8026956C A022C0F6 */ sb $v0, -0x3f0a($at) -/* 197E50 80269570 24020002 */ addiu $v0, $zero, 2 -/* 197E54 80269574 03E00008 */ jr $ra -/* 197E58 80269578 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_196AA0/func_802695A8.s b/asm/nonmatchings/code_196AA0/func_802695A8.s deleted file mode 100644 index 2a95bed735..0000000000 --- a/asm/nonmatchings/code_196AA0/func_802695A8.s +++ /dev/null @@ -1,15 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_802695A8 -/* 197E88 802695A8 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 197E8C 802695AC AFBF0010 */ sw $ra, 0x10($sp) -/* 197E90 802695B0 8C82000C */ lw $v0, 0xc($a0) -/* 197E94 802695B4 3C06800E */ lui $a2, 0x800e -/* 197E98 802695B8 80C6C0F4 */ lb $a2, -0x3f0c($a2) -/* 197E9C 802695BC 0C0B2026 */ jal set_variable -/* 197EA0 802695C0 8C450000 */ lw $a1, ($v0) -/* 197EA4 802695C4 8FBF0010 */ lw $ra, 0x10($sp) -/* 197EA8 802695C8 24020002 */ addiu $v0, $zero, 2 -/* 197EAC 802695CC 03E00008 */ jr $ra -/* 197EB0 802695D0 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_196AA0/func_802695D4.s b/asm/nonmatchings/code_196AA0/func_802695D4.s deleted file mode 100644 index 1e37b31129..0000000000 --- a/asm/nonmatchings/code_196AA0/func_802695D4.s +++ /dev/null @@ -1,15 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_802695D4 -/* 197EB4 802695D4 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 197EB8 802695D8 AFBF0010 */ sw $ra, 0x10($sp) -/* 197EBC 802695DC 8C82000C */ lw $v0, 0xc($a0) -/* 197EC0 802695E0 0C0B1EAF */ jal get_variable -/* 197EC4 802695E4 8C450000 */ lw $a1, ($v0) -/* 197EC8 802695E8 8FBF0010 */ lw $ra, 0x10($sp) -/* 197ECC 802695EC 3C01800E */ lui $at, 0x800e -/* 197ED0 802695F0 A022C0F4 */ sb $v0, -0x3f0c($at) -/* 197ED4 802695F4 24020002 */ addiu $v0, $zero, 2 -/* 197ED8 802695F8 03E00008 */ jr $ra -/* 197EDC 802695FC 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_196AA0/func_80269600.s b/asm/nonmatchings/code_196AA0/func_80269600.s deleted file mode 100644 index 69154f67de..0000000000 --- a/asm/nonmatchings/code_196AA0/func_80269600.s +++ /dev/null @@ -1,15 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80269600 -/* 197EE0 80269600 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 197EE4 80269604 AFBF0010 */ sw $ra, 0x10($sp) -/* 197EE8 80269608 8C82000C */ lw $v0, 0xc($a0) -/* 197EEC 8026960C 3C06800E */ lui $a2, 0x800e -/* 197EF0 80269610 80C6C0F5 */ lb $a2, -0x3f0b($a2) -/* 197EF4 80269614 0C0B2026 */ jal set_variable -/* 197EF8 80269618 8C450000 */ lw $a1, ($v0) -/* 197EFC 8026961C 8FBF0010 */ lw $ra, 0x10($sp) -/* 197F00 80269620 24020002 */ addiu $v0, $zero, 2 -/* 197F04 80269624 03E00008 */ jr $ra -/* 197F08 80269628 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_196AA0/func_8026962C.s b/asm/nonmatchings/code_196AA0/func_8026962C.s deleted file mode 100644 index a131a5b9bb..0000000000 --- a/asm/nonmatchings/code_196AA0/func_8026962C.s +++ /dev/null @@ -1,17 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_8026962C -/* 197F0C 8026962C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 197F10 80269630 AFBF0010 */ sw $ra, 0x10($sp) -/* 197F14 80269634 8C82000C */ lw $v0, 0xc($a0) -/* 197F18 80269638 0C0B1EAF */ jal get_variable -/* 197F1C 8026963C 8C450000 */ lw $a1, ($v0) -/* 197F20 80269640 8FBF0010 */ lw $ra, 0x10($sp) -/* 197F24 80269644 3C01800E */ lui $at, 0x800e -/* 197F28 80269648 A022C0F5 */ sb $v0, -0x3f0b($at) -/* 197F2C 8026964C 24020002 */ addiu $v0, $zero, 2 -/* 197F30 80269650 03E00008 */ jr $ra -/* 197F34 80269654 27BD0018 */ addiu $sp, $sp, 0x18 -/* 197F38 80269658 00000000 */ nop -/* 197F3C 8026965C 00000000 */ nop diff --git a/asm/nonmatchings/code_1AF230/LoadStarPowerScript.s b/asm/nonmatchings/code_1AF230/LoadStarPowerScript.s index 65e0bba00a..b141c3d864 100644 --- a/asm/nonmatchings/code_1AF230/LoadStarPowerScript.s +++ b/asm/nonmatchings/code_1AF230/LoadStarPowerScript.s @@ -38,3 +38,7 @@ glabel LoadStarPowerScript /* 1AF2B4 802809D4 8FB00010 */ lw $s0, 0x10($sp) /* 1AF2B8 802809D8 24020002 */ addiu $v0, $zero, 2 /* 1AF2BC 802809DC 03E00008 */ jr $ra +/* 1AF2C0 802809E0 27BD0020 */ addiu $sp, $sp, 0x20 +/* 1AF2C4 802809E4 00000000 */ nop +/* 1AF2C8 802809E8 00000000 */ nop +/* 1AF2CC 802809EC 00000000 */ nop diff --git a/include/common_structs.h b/include/common_structs.h index 747fce56fc..bdcfd230f8 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -539,9 +539,11 @@ typedef struct BattleStatus { /* 0x07C */ u8 changePartnerAllowed; /* 0x07D */ char unk_7D[4]; /* 0x081 */ s8 actionSuccess; - /* 0x072 */ char unk_7C[3]; + /* 0x082 */ char unk_82; + /* 0x083 */ s8 unk_83; + /* 0x084 */ s8 unk_84; /* 0x085 */ s8 unk_85; - /* 0x086 */ char unk_86; + /* 0x086 */ s8 unk_86; /* 0x087 */ s8 blockResult; /* 0 = fail, 1 = success, -1 = mashed */ /* 0x088 */ u8 itemUsesLeft; /* set to 2 for doublke dip, 3 for triple */ /* 0x089 */ u8 hpDrainCount; @@ -626,7 +628,8 @@ typedef struct BattleStatus { /* 0x330 */ s32 pushInputBuffer[64]; /* 0x430 */ u8 holdInputBufferPos; /* 0x431 */ u8 inputBufferPos; - /* 0x432 */ char unk_432[6]; + /* 0x432 */ char unk_432[2]; + /* 0x434 */ s32 unk_434; /* 0x438 */ s32* foregroundModelList; /* 0x43C */ UNK_PTR turboChargeCounter; /* 0x440 */ u8 tattleFlags[27]; diff --git a/include/variables.h b/include/variables.h index 851fb587be..9b95a85df1 100644 --- a/include/variables.h +++ b/include/variables.h @@ -106,7 +106,7 @@ extern s32 D_800A0960; extern s32 D_800A0964; // Pause -//extern s32 gPauseMenuStrings[348]; +extern s32 gPauseMenuStrings[348]; extern s32 gGameState; extern s32 D_8009A650[1]; diff --git a/src/code_196AA0.c b/src/code_196AA0.c index 411d9c46c4..cc17c99b2f 100644 --- a/src/code_196AA0.c +++ b/src/code_196AA0.c @@ -34,7 +34,10 @@ INCLUDE_ASM(s32, "code_196AA0", func_80269118); INCLUDE_ASM(s32, "code_196AA0", func_80269160); -INCLUDE_ASM(s32, "code_196AA0", func_8026919C); +ApiStatus func_8026919C(ScriptInstance* script, s32 isInitialCall) { + gBattleStatus.unk_434 = get_variable(script, *script->ptrReadPos); + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_196AA0", func_802691C8); @@ -48,9 +51,15 @@ ApiStatus SetActionSuccess(ScriptInstance* script, s32 isInitialCall) { return ApiStatus_DONE2; } -INCLUDE_ASM(s32, "code_196AA0", func_802692EC); +ApiStatus func_802692EC(ScriptInstance* script, s32 isInitialCall) { + gBattleStatus.unk_83 = get_variable(script, *script->ptrReadPos); + return ApiStatus_DONE2; +} -INCLUDE_ASM(s32, "code_196AA0", func_80269318); +ApiStatus func_80269318(ScriptInstance* script, s32 isInitialCall) { + set_variable(script, *script->ptrReadPos, gBattleStatus.unk_83); + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_196AA0", func_80269344); @@ -74,19 +83,37 @@ ApiStatus GetActionSuccessCopy(ScriptInstance* script, s32 isInitialCall) { return ApiStatus_DONE2; } -INCLUDE_ASM(s32, "code_196AA0", func_80269524); +ApiStatus func_80269524(ScriptInstance* script, s32 isInitialCall) { + set_variable(script, *script->ptrReadPos, gBattleStatus.unk_86); + return ApiStatus_DONE2; +} -INCLUDE_ASM(s32, "code_196AA0", func_80269550); +ApiStatus func_80269550(ScriptInstance* script, s32 isInitialCall) { + gBattleStatus.unk_86 = get_variable(script, *script->ptrReadPos); + return ApiStatus_DONE2; +} ApiStatus GetBlockResult(ScriptInstance* script, s32 isInitialCall) { set_variable(script, *script->ptrReadPos, gBattleStatus.blockResult); return ApiStatus_DONE2; } -INCLUDE_ASM(s32, "code_196AA0", func_802695A8); +ApiStatus func_802695A8(ScriptInstance* script, s32 isInitialCall) { + set_variable(script, *script->ptrReadPos, gBattleStatus.unk_84); + return ApiStatus_DONE2; +} -INCLUDE_ASM(s32, "code_196AA0", func_802695D4); +ApiStatus func_802695D4(ScriptInstance* script, s32 isInitialCall) { + gBattleStatus.unk_84 = get_variable(script, *script->ptrReadPos); + return ApiStatus_DONE2; +} -INCLUDE_ASM(s32, "code_196AA0", func_80269600); +ApiStatus func_80269600(ScriptInstance* script, s32 isInitialCall) { + set_variable(script, *script->ptrReadPos, gBattleStatus.unk_85); + return ApiStatus_DONE2; +} -INCLUDE_ASM(s32, "code_196AA0", func_8026962C); +ApiStatus func_8026962C(ScriptInstance* script, s32 isInitialCall) { + gBattleStatus.unk_85 = get_variable(script, *script->ptrReadPos); + return ApiStatus_DONE2; +} diff --git a/tools/splat.yaml b/tools/splat.yaml index c547041009..8cbeeeac63 100644 --- a/tools/splat.yaml +++ b/tools/splat.yaml @@ -317,7 +317,7 @@ segments: - [0x1AC760, "c"] - [0x1AF120, "c"] - [0x1AF230, "c"] - - [0x1AF2C0, "bin"] + - [0x1AF2D0, "bin"] - [0x1CC310, "bin"] # icon images and palettes, vram unknown - name: code type: code diff --git a/undefined_syms.txt b/undefined_syms.txt index 94f17ab24c..10e0c6b060 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -215,6 +215,8 @@ gMapVars = 0x802DA484; gEffectTable = 0x8007F214; +gPauseMenuStrings = 0x8026F778; + MarioEnterStage = 0x80284A40; PeachEnterStage = 0x80284D04; HandleEvent_Player = 0x802852D4; From 1040a9124c9b4ceb2621404fa90ede1a79185cb3 Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Thu, 15 Oct 2020 23:07:50 -0400 Subject: [PATCH 02/22] hey clover lol wudup --- .../code_18F340/HasMerleeCastsLeft.s | 13 --- .../code_18F340/IncrementPlayerFP.s | 19 ---- .../code_18F340/IncrementPlayerHP.s | 19 ---- asm/nonmatchings/code_18F340/func_80260DB8.s | 12 --- asm/nonmatchings/code_18F340/func_80260DD8.s | 29 ------ asm/nonmatchings/code_18F340/func_80260E38.s | 13 --- asm/nonmatchings/code_18F340/func_80260E5C.s | 17 ---- asm/nonmatchings/code_18F340/func_80261388.s | 13 --- asm/nonmatchings/code_18F340/func_802613A8.s | 9 -- asm/nonmatchings/code_18F340/func_80261D98.s | 19 ---- asm/nonmatchings/code_18F340/func_80261DD4.s | 12 --- include/common_structs.h | 6 +- src/code_18F340.c | 92 ++++++++++++++++--- 13 files changed, 84 insertions(+), 189 deletions(-) delete mode 100644 asm/nonmatchings/code_18F340/HasMerleeCastsLeft.s delete mode 100644 asm/nonmatchings/code_18F340/IncrementPlayerFP.s delete mode 100644 asm/nonmatchings/code_18F340/IncrementPlayerHP.s delete mode 100644 asm/nonmatchings/code_18F340/func_80260DB8.s delete mode 100644 asm/nonmatchings/code_18F340/func_80260DD8.s delete mode 100644 asm/nonmatchings/code_18F340/func_80260E38.s delete mode 100644 asm/nonmatchings/code_18F340/func_80260E5C.s delete mode 100644 asm/nonmatchings/code_18F340/func_80261388.s delete mode 100644 asm/nonmatchings/code_18F340/func_802613A8.s delete mode 100644 asm/nonmatchings/code_18F340/func_80261D98.s delete mode 100644 asm/nonmatchings/code_18F340/func_80261DD4.s diff --git a/asm/nonmatchings/code_18F340/HasMerleeCastsLeft.s b/asm/nonmatchings/code_18F340/HasMerleeCastsLeft.s deleted file mode 100644 index 5cf23f5b13..0000000000 --- a/asm/nonmatchings/code_18F340/HasMerleeCastsLeft.s +++ /dev/null @@ -1,13 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel HasMerleeCastsLeft -/* 1902A8 802619C8 AC800084 */ sw $zero, 0x84($a0) -/* 1902AC 802619CC 3C028011 */ lui $v0, 0x8011 -/* 1902B0 802619D0 8042F51A */ lb $v0, -0xae6($v0) -/* 1902B4 802619D4 18400002 */ blez $v0, .L802619E0 -/* 1902B8 802619D8 24020001 */ addiu $v0, $zero, 1 -/* 1902BC 802619DC AC820084 */ sw $v0, 0x84($a0) -.L802619E0: -/* 1902C0 802619E0 03E00008 */ jr $ra -/* 1902C4 802619E4 24020002 */ addiu $v0, $zero, 2 diff --git a/asm/nonmatchings/code_18F340/IncrementPlayerFP.s b/asm/nonmatchings/code_18F340/IncrementPlayerFP.s deleted file mode 100644 index 833f5a1d7f..0000000000 --- a/asm/nonmatchings/code_18F340/IncrementPlayerFP.s +++ /dev/null @@ -1,19 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel IncrementPlayerFP -/* 190640 80261D60 3C048011 */ lui $a0, %hi(gPlayerData) -/* 190644 80261D64 2484F290 */ addiu $a0, $a0, %lo(gPlayerData) -/* 190648 80261D68 90820005 */ lbu $v0, 5($a0) -/* 19064C 80261D6C 80830006 */ lb $v1, 6($a0) -/* 190650 80261D70 24420001 */ addiu $v0, $v0, 1 -/* 190654 80261D74 A0820005 */ sb $v0, 5($a0) -/* 190658 80261D78 00021600 */ sll $v0, $v0, 0x18 -/* 19065C 80261D7C 00021603 */ sra $v0, $v0, 0x18 -/* 190660 80261D80 0062182A */ slt $v1, $v1, $v0 -/* 190664 80261D84 90820006 */ lbu $v0, 6($a0) -/* 190668 80261D88 54600001 */ bnel $v1, $zero, .L80261D90 -/* 19066C 80261D8C A0820005 */ sb $v0, 5($a0) -.L80261D90: -/* 190670 80261D90 03E00008 */ jr $ra -/* 190674 80261D94 24020002 */ addiu $v0, $zero, 2 diff --git a/asm/nonmatchings/code_18F340/IncrementPlayerHP.s b/asm/nonmatchings/code_18F340/IncrementPlayerHP.s deleted file mode 100644 index b79c4d6097..0000000000 --- a/asm/nonmatchings/code_18F340/IncrementPlayerHP.s +++ /dev/null @@ -1,19 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel IncrementPlayerHP -/* 190608 80261D28 3C048011 */ lui $a0, %hi(gPlayerData) -/* 19060C 80261D2C 2484F290 */ addiu $a0, $a0, %lo(gPlayerData) -/* 190610 80261D30 90820002 */ lbu $v0, 2($a0) -/* 190614 80261D34 80830003 */ lb $v1, 3($a0) -/* 190618 80261D38 24420001 */ addiu $v0, $v0, 1 -/* 19061C 80261D3C A0820002 */ sb $v0, 2($a0) -/* 190620 80261D40 00021600 */ sll $v0, $v0, 0x18 -/* 190624 80261D44 00021603 */ sra $v0, $v0, 0x18 -/* 190628 80261D48 0062182A */ slt $v1, $v1, $v0 -/* 19062C 80261D4C 90820003 */ lbu $v0, 3($a0) -/* 190630 80261D50 54600001 */ bnel $v1, $zero, .L80261D58 -/* 190634 80261D54 A0820002 */ sb $v0, 2($a0) -.L80261D58: -/* 190638 80261D58 03E00008 */ jr $ra -/* 19063C 80261D5C 24020002 */ addiu $v0, $zero, 2 diff --git a/asm/nonmatchings/code_18F340/func_80260DB8.s b/asm/nonmatchings/code_18F340/func_80260DB8.s deleted file mode 100644 index bbf8bb2671..0000000000 --- a/asm/nonmatchings/code_18F340/func_80260DB8.s +++ /dev/null @@ -1,12 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80260DB8 -/* 18F698 80260DB8 3C02800E */ lui $v0, %hi(gBattleStatus) -/* 18F69C 80260DBC 2442C070 */ addiu $v0, $v0, %lo(gBattleStatus) -/* 18F6A0 80260DC0 8C430000 */ lw $v1, ($v0) -/* 18F6A4 80260DC4 3C040004 */ lui $a0, 4 -/* 18F6A8 80260DC8 00641825 */ or $v1, $v1, $a0 -/* 18F6AC 80260DCC AC430000 */ sw $v1, ($v0) -/* 18F6B0 80260DD0 03E00008 */ jr $ra -/* 18F6B4 80260DD4 24020002 */ addiu $v0, $zero, 2 diff --git a/asm/nonmatchings/code_18F340/func_80260DD8.s b/asm/nonmatchings/code_18F340/func_80260DD8.s deleted file mode 100644 index bb06c2a7b9..0000000000 --- a/asm/nonmatchings/code_18F340/func_80260DD8.s +++ /dev/null @@ -1,29 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80260DD8 -/* 18F6B8 80260DD8 3C028011 */ lui $v0, 0x8011 -/* 18F6BC 80260DDC 8042F29A */ lb $v0, -0xd66($v0) -/* 18F6C0 80260DE0 3C03800E */ lui $v1, 0x800e -/* 18F6C4 80260DE4 8C63C148 */ lw $v1, -0x3eb8($v1) -/* 18F6C8 80260DE8 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 18F6CC 80260DEC AFB10014 */ sw $s1, 0x14($sp) -/* 18F6D0 80260DF0 0080882D */ daddu $s1, $a0, $zero -/* 18F6D4 80260DF4 AFBF0018 */ sw $ra, 0x18($sp) -/* 18F6D8 80260DF8 14400009 */ bnez $v0, .L80260E20 -/* 18F6DC 80260DFC AFB00010 */ sw $s0, 0x10($sp) -/* 18F6E0 80260E00 8C700088 */ lw $s0, 0x88($v1) -/* 18F6E4 80260E04 0C00A67F */ jal rand_int -/* 18F6E8 80260E08 24040064 */ addiu $a0, $zero, 0x64 -/* 18F6EC 80260E0C 0202802A */ slt $s0, $s0, $v0 -/* 18F6F0 80260E10 56000003 */ bnel $s0, $zero, .L80260E20 -/* 18F6F4 80260E14 AE200084 */ sw $zero, 0x84($s1) -/* 18F6F8 80260E18 24020001 */ addiu $v0, $zero, 1 -/* 18F6FC 80260E1C AE220084 */ sw $v0, 0x84($s1) -.L80260E20: -/* 18F700 80260E20 24020002 */ addiu $v0, $zero, 2 -/* 18F704 80260E24 8FBF0018 */ lw $ra, 0x18($sp) -/* 18F708 80260E28 8FB10014 */ lw $s1, 0x14($sp) -/* 18F70C 80260E2C 8FB00010 */ lw $s0, 0x10($sp) -/* 18F710 80260E30 03E00008 */ jr $ra -/* 18F714 80260E34 27BD0020 */ addiu $sp, $sp, 0x20 diff --git a/asm/nonmatchings/code_18F340/func_80260E38.s b/asm/nonmatchings/code_18F340/func_80260E38.s deleted file mode 100644 index 5592584fce..0000000000 --- a/asm/nonmatchings/code_18F340/func_80260E38.s +++ /dev/null @@ -1,13 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80260E38 -/* 18F718 80260E38 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 18F71C 80260E3C 24040031 */ addiu $a0, $zero, 0x31 -/* 18F720 80260E40 AFBF0010 */ sw $ra, 0x10($sp) -/* 18F724 80260E44 0C093E58 */ jal show_battle_message -/* 18F728 80260E48 2405003C */ addiu $a1, $zero, 0x3c -/* 18F72C 80260E4C 8FBF0010 */ lw $ra, 0x10($sp) -/* 18F730 80260E50 24020002 */ addiu $v0, $zero, 2 -/* 18F734 80260E54 03E00008 */ jr $ra -/* 18F738 80260E58 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_18F340/func_80260E5C.s b/asm/nonmatchings/code_18F340/func_80260E5C.s deleted file mode 100644 index d614506961..0000000000 --- a/asm/nonmatchings/code_18F340/func_80260E5C.s +++ /dev/null @@ -1,17 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80260E5C -/* 18F73C 80260E5C 3C03FFFF */ lui $v1, 0xffff -/* 18F740 80260E60 3C04800E */ lui $a0, %hi(gBattleStatus) -/* 18F744 80260E64 2484C070 */ addiu $a0, $a0, %lo(gBattleStatus) -/* 18F748 80260E68 8C820000 */ lw $v0, ($a0) -/* 18F74C 80260E6C 34637FFF */ ori $v1, $v1, 0x7fff -/* 18F750 80260E70 00431024 */ and $v0, $v0, $v1 -/* 18F754 80260E74 2403DFFF */ addiu $v1, $zero, -0x2001 -/* 18F758 80260E78 00431024 */ and $v0, $v0, $v1 -/* 18F75C 80260E7C 2403BFFF */ addiu $v1, $zero, -0x4001 -/* 18F760 80260E80 00431024 */ and $v0, $v0, $v1 -/* 18F764 80260E84 AC820000 */ sw $v0, ($a0) -/* 18F768 80260E88 03E00008 */ jr $ra -/* 18F76C 80260E8C 24020002 */ addiu $v0, $zero, 2 diff --git a/asm/nonmatchings/code_18F340/func_80261388.s b/asm/nonmatchings/code_18F340/func_80261388.s deleted file mode 100644 index 2890de26b3..0000000000 --- a/asm/nonmatchings/code_18F340/func_80261388.s +++ /dev/null @@ -1,13 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80261388 -/* 18FC68 80261388 3C02800E */ lui $v0, 0x800e -/* 18FC6C 8026138C 8C42C14C */ lw $v0, -0x3eb4($v0) -/* 18FC70 80261390 10400003 */ beqz $v0, .L802613A0 -/* 18FC74 80261394 AC800084 */ sw $zero, 0x84($a0) -/* 18FC78 80261398 24020001 */ addiu $v0, $zero, 1 -/* 18FC7C 8026139C AC820084 */ sw $v0, 0x84($a0) -.L802613A0: -/* 18FC80 802613A0 03E00008 */ jr $ra -/* 18FC84 802613A4 24020002 */ addiu $v0, $zero, 2 diff --git a/asm/nonmatchings/code_18F340/func_802613A8.s b/asm/nonmatchings/code_18F340/func_802613A8.s deleted file mode 100644 index b39a4a93b9..0000000000 --- a/asm/nonmatchings/code_18F340/func_802613A8.s +++ /dev/null @@ -1,9 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_802613A8 -/* 18FC88 802613A8 24020095 */ addiu $v0, $zero, 0x95 -/* 18FC8C 802613AC 3C01800E */ lui $at, 0x800e -/* 18FC90 802613B0 A422C1EA */ sh $v0, -0x3e16($at) -/* 18FC94 802613B4 03E00008 */ jr $ra -/* 18FC98 802613B8 24020002 */ addiu $v0, $zero, 2 diff --git a/asm/nonmatchings/code_18F340/func_80261D98.s b/asm/nonmatchings/code_18F340/func_80261D98.s deleted file mode 100644 index b31c0ceeda..0000000000 --- a/asm/nonmatchings/code_18F340/func_80261D98.s +++ /dev/null @@ -1,19 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80261D98 -/* 190678 80261D98 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 19067C 80261D9C AFBF0010 */ sw $ra, 0x10($sp) -/* 190680 80261DA0 0C09A75B */ jal get_actor -/* 190684 80261DA4 8C840148 */ lw $a0, 0x148($a0) -/* 190688 80261DA8 0040202D */ daddu $a0, $v0, $zero -/* 19068C 80261DAC 24050004 */ addiu $a1, $zero, 4 -/* 190690 80261DB0 0000302D */ daddu $a2, $zero, $zero -/* 190694 80261DB4 0C099B3C */ jal inflict_status_set_duration -/* 190698 80261DB8 24070001 */ addiu $a3, $zero, 1 -/* 19069C 80261DBC 0C099DDF */ jal func_8026777C -/* 1906A0 80261DC0 00000000 */ nop -/* 1906A4 80261DC4 8FBF0010 */ lw $ra, 0x10($sp) -/* 1906A8 80261DC8 24020002 */ addiu $v0, $zero, 2 -/* 1906AC 80261DCC 03E00008 */ jr $ra -/* 1906B0 80261DD0 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_18F340/func_80261DD4.s b/asm/nonmatchings/code_18F340/func_80261DD4.s deleted file mode 100644 index e9402addba..0000000000 --- a/asm/nonmatchings/code_18F340/func_80261DD4.s +++ /dev/null @@ -1,12 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80261DD4 -/* 1906B4 80261DD4 3C038011 */ lui $v1, %hi(gPlayerData) -/* 1906B8 80261DD8 2463F290 */ addiu $v1, $v1, %lo(gPlayerData) -/* 1906BC 80261DDC 80620000 */ lb $v0, ($v1) -/* 1906C0 80261DE0 AC8200B0 */ sw $v0, 0xb0($a0) -/* 1906C4 80261DE4 80620001 */ lb $v0, 1($v1) -/* 1906C8 80261DE8 AC8200B4 */ sw $v0, 0xb4($a0) -/* 1906CC 80261DEC 03E00008 */ jr $ra -/* 1906D0 80261DF0 24020002 */ addiu $v0, $zero, 2 diff --git a/include/common_structs.h b/include/common_structs.h index bdcfd230f8..ad6649b18a 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -103,7 +103,7 @@ typedef struct Npc { } Npc; // size = 0x340 typedef struct PlayerData { - /* 0x000 */ u8 bootsLevel; + /* 0x000 */ s8 bootsLevel; /* 0x001 */ s8 hammerLevel; /* 0x002 */ s8 curHP; /* 0x003 */ s8 curMaxHP; @@ -113,7 +113,7 @@ typedef struct PlayerData { /* 0x007 */ u8 hardMaxFP; /* 0x008 */ u8 maxBP; /* 0x009 */ u8 level; - /* 0x00A */ u8 hasActionCommands; + /* 0x00A */ s8 hasActionCommands; /* 0x00B */ char unk_0B; /* 0x00C */ s16 coins; /* 0x00E */ s8 fortressKeyCount; @@ -1285,7 +1285,7 @@ typedef struct Actor { /* 0x211 */ u8 debuffDuration; /* 0x212 */ u8 staticStatus; /* 0B = yes */ /* 0x213 */ u8 staticDuration; - /* 0x214 */ u8 stoneStatus; /* 0C = yes */ + /* 0x214 */ s8 stoneStatus; /* 0C = yes */ /* 0x215 */ u8 stoneDuration; /* 0x216 */ u8 koStatus; /* 0D = yes */ /* 0x217 */ u8 koDuration; diff --git a/src/code_18F340.c b/src/code_18F340.c index b49f406471..dc8655c260 100644 --- a/src/code_18F340.c +++ b/src/code_18F340.c @@ -10,13 +10,38 @@ INCLUDE_ASM(s32, "code_18F340", func_80260B70); INCLUDE_ASM(s32, "code_18F340", func_80260BF4); -INCLUDE_ASM(s32, "code_18F340", func_80260DB8); +ApiStatus func_80260DB8(ScriptInstance* script, s32 isInitialCall) { + gBattleStatus.flags1 |= 0x40000; + return ApiStatus_DONE2; +} -INCLUDE_ASM(s32, "code_18F340", func_80260DD8); +ApiStatus func_80260DD8(ScriptInstance* script, s32 isInitialCall) { + Actor* player = gBattleStatus.playerActor; + + if (!gPlayerData.hasActionCommands) { + s32 var = player->varTable[0]; + + if (var >= rand_int(100)) { + script->varTable[0] = 1; + } else { + script->varTable[0] = 0; + } + } + return ApiStatus_DONE2; + do {} while (0); // necessary to match +} -INCLUDE_ASM(s32, "code_18F340", func_80260E38); +ApiStatus func_80260E38(ScriptInstance* script, s32 isInitialCall) { + show_battle_message(0x31, 60); + return ApiStatus_DONE2; +} -INCLUDE_ASM(s32, "code_18F340", func_80260E5C); +ApiStatus func_80260E5C(ScriptInstance* script, s32 isInitialCall) { + gBattleStatus.flags1 &= ~0x8000; + gBattleStatus.flags1 &= ~0x2000; + gBattleStatus.flags1 &= ~0x4000; + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_18F340", func_80260E90); @@ -30,9 +55,20 @@ INCLUDE_ASM(s32, "code_18F340", func_802611E8); INCLUDE_ASM(s32, "code_18F340", func_8026127C); -INCLUDE_ASM(s32, "code_18F340", func_80261388); +ApiStatus func_80261388(ScriptInstance* script, s32 isInitialCall) { + s32 partnerActorExists = gBattleStatus.partnerActor != NULL; + + script->varTable[0] = FALSE; + if (partnerActorExists) { + script->varTable[0] = TRUE; + } + return ApiStatus_DONE2; +} -INCLUDE_ASM(s32, "code_18F340", func_802613A8); +ApiStatus func_802613A8(ScriptInstance* script, s32 isInitialCall) { + gBattleStatus.selectedItemID = ItemId_LIFE_SHROOM; + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_18F340", func_802613BC); @@ -50,7 +86,15 @@ INCLUDE_ASM(s32, "code_18F340", func_802616F4); INCLUDE_ASM(s32, "code_18F340", func_802619B4); -INCLUDE_ASM(s32, "code_18F340", HasMerleeCastsLeft); +ApiStatus HasMerleeCastsLeft(ScriptInstance* script, s32 isInitialCall) { + PlayerData* playerData = &gPlayerData; + + script->varTable[0] = FALSE; + if (playerData->merleeCastsLeft > 0) { + script->varTable[0] = TRUE; + } + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_18F340", func_802619E8); @@ -60,13 +104,39 @@ INCLUDE_ASM(s32, "code_18F340", FXRecoverHP); INCLUDE_ASM(s32, "code_18F340", FXRecoverFP); -INCLUDE_ASM(s32, "code_18F340", IncrementPlayerHP); +ApiStatus IncrementPlayerHP(ScriptInstance* script, s32 isInitialCall) { + PlayerData* playerData = &gPlayerData; -INCLUDE_ASM(s32, "code_18F340", IncrementPlayerFP); + playerData->curHP++; + if (playerData->curHP > playerData->curMaxHP) { + playerData->curHP = playerData->curMaxHP; + } + return ApiStatus_DONE2; +} -INCLUDE_ASM(s32, "code_18F340", func_80261D98); +ApiStatus IncrementPlayerFP(ScriptInstance* script, s32 isInitialCall) { + PlayerData* playerData = &gPlayerData; -INCLUDE_ASM(s32, "code_18F340", func_80261DD4); + playerData->curFP++; + if (playerData->curFP > playerData->curMaxFP) { + playerData->curFP = playerData->curMaxFP; + } + return ApiStatus_DONE2; +} + +ApiStatus func_80261D98(ScriptInstance* script, s32 isInitialCall) { + inflict_status_set_duration(get_actor(script->ownerActorID), 4, 0, 1); + func_8026777C(); + return ApiStatus_DONE2; +} + +ApiStatus func_80261DD4(ScriptInstance* script, s32 isInitialCall) { + PlayerData* playerData = &gPlayerData; + + script->varTable[11] = playerData->bootsLevel; + script->varTable[12] = playerData->hammerLevel; + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_18F340", func_80261DF4); From 369cb32bbcc3ae217f1fac1a1c3d29ac14698e26 Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Fri, 16 Oct 2020 02:09:20 -0400 Subject: [PATCH 03/22] hey rain --- .../code_190B20/enemy_create_target_list.s | 11 ----- .../code_190B20/player_create_target_list.s | 11 ----- .../code_190B20/remove_part_decoration.s | 11 ----- .../code_190B20/remove_part_shadow.s | 21 ---------- asm/nonmatchings/code_190B20/set_actor_yaw.s | 17 -------- asm/nonmatchings/code_190B20/set_part_yaw.s | 23 ----------- asm/nonmatchings/code_1967B0/LoadMoveScript.s | 41 ------------------- include/variables.h | 2 + src/code_190B20.c | 31 ++++++++++---- src/code_1967B0.c | 16 +++++++- tools/symbol_addrs.txt | 1 + undefined_syms.txt | 2 + 12 files changed, 44 insertions(+), 143 deletions(-) delete mode 100644 asm/nonmatchings/code_190B20/enemy_create_target_list.s delete mode 100644 asm/nonmatchings/code_190B20/player_create_target_list.s delete mode 100644 asm/nonmatchings/code_190B20/remove_part_decoration.s delete mode 100644 asm/nonmatchings/code_190B20/remove_part_shadow.s delete mode 100644 asm/nonmatchings/code_190B20/set_actor_yaw.s delete mode 100644 asm/nonmatchings/code_190B20/set_part_yaw.s delete mode 100644 asm/nonmatchings/code_1967B0/LoadMoveScript.s diff --git a/asm/nonmatchings/code_190B20/enemy_create_target_list.s b/asm/nonmatchings/code_190B20/enemy_create_target_list.s deleted file mode 100644 index 4a17d0f1ea..0000000000 --- a/asm/nonmatchings/code_190B20/enemy_create_target_list.s +++ /dev/null @@ -1,11 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel enemy_create_target_list -/* 191928 80263048 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 19192C 8026304C AFBF0010 */ sw $ra, 0x10($sp) -/* 191930 80263050 0C098890 */ jal create_target_list -/* 191934 80263054 24050001 */ addiu $a1, $zero, 1 -/* 191938 80263058 8FBF0010 */ lw $ra, 0x10($sp) -/* 19193C 8026305C 03E00008 */ jr $ra -/* 191940 80263060 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_190B20/player_create_target_list.s b/asm/nonmatchings/code_190B20/player_create_target_list.s deleted file mode 100644 index aeb3ee1ebf..0000000000 --- a/asm/nonmatchings/code_190B20/player_create_target_list.s +++ /dev/null @@ -1,11 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel player_create_target_list -/* 19190C 8026302C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 191910 80263030 AFBF0010 */ sw $ra, 0x10($sp) -/* 191914 80263034 0C098890 */ jal create_target_list -/* 191918 80263038 0000282D */ daddu $a1, $zero, $zero -/* 19191C 8026303C 8FBF0010 */ lw $ra, 0x10($sp) -/* 191920 80263040 03E00008 */ jr $ra -/* 191924 80263044 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_190B20/remove_part_decoration.s b/asm/nonmatchings/code_190B20/remove_part_decoration.s deleted file mode 100644 index 7c7bf6a89c..0000000000 --- a/asm/nonmatchings/code_190B20/remove_part_decoration.s +++ /dev/null @@ -1,11 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel remove_part_decoration -/* 195AF8 80267218 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 195AFC 8026721C AFBF0010 */ sw $ra, 0x10($sp) -/* 195B00 80267220 0C09740F */ jal _remove_part_decoration -/* 195B04 80267224 00000000 */ nop -/* 195B08 80267228 8FBF0010 */ lw $ra, 0x10($sp) -/* 195B0C 8026722C 03E00008 */ jr $ra -/* 195B10 80267230 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_190B20/remove_part_shadow.s b/asm/nonmatchings/code_190B20/remove_part_shadow.s deleted file mode 100644 index 509af2d6a9..0000000000 --- a/asm/nonmatchings/code_190B20/remove_part_shadow.s +++ /dev/null @@ -1,21 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel remove_part_shadow -/* 195C80 802673A0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 195C84 802673A4 AFB00010 */ sw $s0, 0x10($sp) -/* 195C88 802673A8 AFBF0014 */ sw $ra, 0x14($sp) -/* 195C8C 802673AC 0C09A75B */ jal get_actor -/* 195C90 802673B0 00A0802D */ daddu $s0, $a1, $zero -/* 195C94 802673B4 0040202D */ daddu $a0, $v0, $zero -/* 195C98 802673B8 0C099117 */ jal get_actor_part -/* 195C9C 802673BC 0200282D */ daddu $a1, $s0, $zero -/* 195CA0 802673C0 8C430000 */ lw $v1, ($v0) -/* 195CA4 802673C4 8C44009C */ lw $a0, 0x9c($v0) -/* 195CA8 802673C8 34630004 */ ori $v1, $v1, 4 -/* 195CAC 802673CC 0C0448CA */ jal func_80112328 -/* 195CB0 802673D0 AC430000 */ sw $v1, ($v0) -/* 195CB4 802673D4 8FBF0014 */ lw $ra, 0x14($sp) -/* 195CB8 802673D8 8FB00010 */ lw $s0, 0x10($sp) -/* 195CBC 802673DC 03E00008 */ jr $ra -/* 195CC0 802673E0 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_190B20/set_actor_yaw.s b/asm/nonmatchings/code_190B20/set_actor_yaw.s deleted file mode 100644 index 40cbf33b27..0000000000 --- a/asm/nonmatchings/code_190B20/set_actor_yaw.s +++ /dev/null @@ -1,17 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel set_actor_yaw -/* 192848 80263F68 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 19284C 80263F6C AFB00010 */ sw $s0, 0x10($sp) -/* 192850 80263F70 AFBF0014 */ sw $ra, 0x14($sp) -/* 192854 80263F74 0C09A75B */ jal get_actor -/* 192858 80263F78 00A0802D */ daddu $s0, $a1, $zero -/* 19285C 80263F7C 44900000 */ mtc1 $s0, $f0 -/* 192860 80263F80 00000000 */ nop -/* 192864 80263F84 46800020 */ cvt.s.w $f0, $f0 -/* 192868 80263F88 E440018C */ swc1 $f0, 0x18c($v0) -/* 19286C 80263F8C 8FBF0014 */ lw $ra, 0x14($sp) -/* 192870 80263F90 8FB00010 */ lw $s0, 0x10($sp) -/* 192874 80263F94 03E00008 */ jr $ra -/* 192878 80263F98 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_190B20/set_part_yaw.s b/asm/nonmatchings/code_190B20/set_part_yaw.s deleted file mode 100644 index e8f757577a..0000000000 --- a/asm/nonmatchings/code_190B20/set_part_yaw.s +++ /dev/null @@ -1,23 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel set_part_yaw -/* 19287C 80263F9C 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 192880 80263FA0 AFB00010 */ sw $s0, 0x10($sp) -/* 192884 80263FA4 00A0802D */ daddu $s0, $a1, $zero -/* 192888 80263FA8 AFB10014 */ sw $s1, 0x14($sp) -/* 19288C 80263FAC AFBF0018 */ sw $ra, 0x18($sp) -/* 192890 80263FB0 0C09A75B */ jal get_actor -/* 192894 80263FB4 00C0882D */ daddu $s1, $a2, $zero -/* 192898 80263FB8 0040202D */ daddu $a0, $v0, $zero -/* 19289C 80263FBC 0C099117 */ jal get_actor_part -/* 1928A0 80263FC0 0200282D */ daddu $a1, $s0, $zero -/* 1928A4 80263FC4 44910000 */ mtc1 $s1, $f0 -/* 1928A8 80263FC8 00000000 */ nop -/* 1928AC 80263FCC 46800020 */ cvt.s.w $f0, $f0 -/* 1928B0 80263FD0 E4400064 */ swc1 $f0, 0x64($v0) -/* 1928B4 80263FD4 8FBF0018 */ lw $ra, 0x18($sp) -/* 1928B8 80263FD8 8FB10014 */ lw $s1, 0x14($sp) -/* 1928BC 80263FDC 8FB00010 */ lw $s0, 0x10($sp) -/* 1928C0 80263FE0 03E00008 */ jr $ra -/* 1928C4 80263FE4 27BD0020 */ addiu $sp, $sp, 0x20 diff --git a/asm/nonmatchings/code_1967B0/LoadMoveScript.s b/asm/nonmatchings/code_1967B0/LoadMoveScript.s deleted file mode 100644 index 62404e28af..0000000000 --- a/asm/nonmatchings/code_1967B0/LoadMoveScript.s +++ /dev/null @@ -1,41 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel LoadMoveScript -/* 196A10 80268130 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 196A14 80268134 AFB20018 */ sw $s2, 0x18($sp) -/* 196A18 80268138 0080902D */ daddu $s2, $a0, $zero -/* 196A1C 8026813C AFB10014 */ sw $s1, 0x14($sp) -/* 196A20 80268140 3C11800E */ lui $s1, %hi(gBattleStatus) -/* 196A24 80268144 2631C070 */ addiu $s1, $s1, %lo(gBattleStatus) -/* 196A28 80268148 AFBF001C */ sw $ra, 0x1c($sp) -/* 196A2C 8026814C AFB00010 */ sw $s0, 0x10($sp) -/* 196A30 80268150 8630017C */ lh $s0, 0x17c($s1) -/* 196A34 80268154 3C028029 */ lui $v0, 0x8029 -/* 196A38 80268158 24423E80 */ addiu $v0, $v0, 0x3e80 -/* 196A3C 8026815C 00108100 */ sll $s0, $s0, 4 -/* 196A40 80268160 02028021 */ addu $s0, $s0, $v0 -/* 196A44 80268164 8E040000 */ lw $a0, ($s0) -/* 196A48 80268168 8E050004 */ lw $a1, 4($s0) -/* 196A4C 8026816C 0C00A5CF */ jal dma_copy -/* 196A50 80268170 8E060008 */ lw $a2, 8($s0) -/* 196A54 80268174 8E02000C */ lw $v0, 0xc($s0) -/* 196A58 80268178 0C098EF2 */ jal deduct_current_move_fp -/* 196A5C 8026817C AE420084 */ sw $v0, 0x84($s2) -/* 196A60 80268180 8E220004 */ lw $v0, 4($s1) -/* 196A64 80268184 3C030800 */ lui $v1, 0x800 -/* 196A68 80268188 00431024 */ and $v0, $v0, $v1 -/* 196A6C 8026818C 10400003 */ beqz $v0, .L8026819C -/* 196A70 80268190 00000000 */ nop -/* 196A74 80268194 0C0951B5 */ jal enable_player_blur -/* 196A78 80268198 00000000 */ nop -.L8026819C: -/* 196A7C 8026819C 8FBF001C */ lw $ra, 0x1c($sp) -/* 196A80 802681A0 8FB20018 */ lw $s2, 0x18($sp) -/* 196A84 802681A4 8FB10014 */ lw $s1, 0x14($sp) -/* 196A88 802681A8 8FB00010 */ lw $s0, 0x10($sp) -/* 196A8C 802681AC 24020002 */ addiu $v0, $zero, 2 -/* 196A90 802681B0 03E00008 */ jr $ra -/* 196A94 802681B4 27BD0020 */ addiu $sp, $sp, 0x20 -/* 196A98 802681B8 00000000 */ nop -/* 196A9C 802681BC 00000000 */ nop diff --git a/include/variables.h b/include/variables.h index 9b95a85df1..a66f952e04 100644 --- a/include/variables.h +++ b/include/variables.h @@ -34,6 +34,8 @@ extern s32 gScriptListCount; extern s32 gScriptIdList[MAX_SCRIPTS]; extern s32 gScriptIndexList[MAX_SCRIPTS]; +extern s32 gMoveScriptTable[10][4]; // not 10 - how many? + extern Model* gWorldModelList[256]; extern Model* gBattleModelList[256]; extern Model** gCurrentModelListPtr[256]; diff --git a/src/code_190B20.c b/src/code_190B20.c index 9c0995c3df..c13e199d55 100644 --- a/src/code_190B20.c +++ b/src/code_190B20.c @@ -1,10 +1,16 @@ #include "common.h" +ActorPart* get_actor_part(Actor* actor, s32 partIndex); + INCLUDE_ASM(s32, "code_190B20", create_target_list); -INCLUDE_ASM(s32, "code_190B20", player_create_target_list); +void player_create_target_list(Actor* actor) { + create_target_list(actor, 0); +} -INCLUDE_ASM(s32, "code_190B20", enemy_create_target_list); +void enemy_create_target_list(Actor* actor) { + create_target_list(actor, 1); +} INCLUDE_ASM(s32, "code_190B20", func_80263064); @@ -42,9 +48,13 @@ INCLUDE_ASM(s32, "code_190B20", func_80263E08); INCLUDE_ASM(s32, "code_190B20", set_animation_rate); -INCLUDE_ASM(s32, "code_190B20", set_actor_yaw); +void set_actor_yaw(s32 actorId, s32 yaw) { + get_actor(actorId)->yaw = yaw; +} -INCLUDE_ASM(s32, "code_190B20", set_part_yaw); +void set_part_yaw(s32 actorID, s32 partIndex, s32 value) { + get_actor_part(get_actor(actorID), partIndex)->yaw = value; +} INCLUDE_ASM(s32, "code_190B20", func_80263FE8); @@ -58,7 +68,7 @@ INCLUDE_ASM(s32, "code_190B20", add_xz_vec3f_copy2); INCLUDE_ASM(s32, "code_190B20", play_movement_dust_effects); -INCLUDE_ASM(s32, "code_190B20", get_actor_part); +INCLUDE_ASM(ActorPart*, "code_190B20", get_actor_part, Actor* actor, s32 partIndex); INCLUDE_ASM(s32, "code_190B20", load_player_actor); @@ -134,7 +144,9 @@ INCLUDE_ASM(s32, "code_190B20", add_part_decoration); INCLUDE_ASM(s32, "code_190B20", add_actor_decoration); -INCLUDE_ASM(s32, "code_190B20", remove_part_decoration); +void remove_part_decoration(ActorPart* part, s32 decorationIndex) { + _remove_part_decoration(part, decorationIndex); +} INCLUDE_ASM(s32, "code_190B20", remove_actor_decoration); @@ -142,7 +154,12 @@ INCLUDE_ASM(s32, "code_190B20", heroes_is_ability_active); INCLUDE_ASM(s32, "code_190B20", create_part_shadow); -INCLUDE_ASM(s32, "code_190B20", remove_part_shadow); +void remove_part_shadow(s32 actorId, s32 partIndex) { + ActorPart* part = get_actor_part(get_actor(actorId), partIndex); + + part->flags |= 4; + func_80112328(part->shadow); +} INCLUDE_ASM(s32, "code_190B20", func_802673E4); diff --git a/src/code_1967B0.c b/src/code_1967B0.c index b4f2db5f5e..fd61de6500 100644 --- a/src/code_1967B0.c +++ b/src/code_1967B0.c @@ -4,4 +4,18 @@ INCLUDE_ASM(s32, "code_1967B0", LoadItemScript); INCLUDE_ASM(s32, "code_1967B0", LoadFreeItemScript); -INCLUDE_ASM(s32, "code_1967B0", LoadMoveScript); +ApiStatus LoadMoveScript(ScriptInstance* script, s32 isInitialCall) { + BattleStatus* battleStatus = &gBattleStatus; + s32* moveScript = gMoveScriptTable[battleStatus->selectedMoveID]; + + dma_copy(moveScript[0], moveScript[1], moveScript[2]); + script->varTable[0] = moveScript[3]; + + deduct_current_move_fp(); + + if (gBattleStatus.flags2 & 0x8000000) { + enable_player_blur(); + } + + return ApiStatus_DONE2; +} diff --git a/tools/symbol_addrs.txt b/tools/symbol_addrs.txt index 51494df520..cfe9b9120e 100644 --- a/tools/symbol_addrs.txt +++ b/tools/symbol_addrs.txt @@ -1878,3 +1878,4 @@ SetTattleString;0x80045A58 !handle_CPU;0x8006B038 gPauseMenuStrings;0x8026F778 gEffectTable;0x8007F214 +gMoveScriptTable;0x80293E80 diff --git a/undefined_syms.txt b/undefined_syms.txt index 10e0c6b060..838ecab45b 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -197,6 +197,8 @@ gWorldNpcList = 0x800A0990; gBattleNpcList = 0x800A0A90; gCurrentNpcListPtr = 0x800A0B90; +gMoveScriptTable = 0x80293E80; + gMainGameState = 0x80151700; gCurrentUpdateFunction = 0x8015170C; From ddbb46112d13bf64c94b704ecd227880e0b6f125 Mon Sep 17 00:00:00 2001 From: Alex Bates Date: Fri, 16 Oct 2020 17:23:13 +0100 Subject: [PATCH 04/22] match create_part_shadow and heroes_is_ability_active --- .../code_190B20/create_part_shadow.s | 37 ------------------- .../code_190B20/heroes_is_ability_active.s | 34 ----------------- src/code_190B20.c | 30 ++++++++++++--- src/code_190B20.h | 22 +++++++++++ src/code_a5dd0_len_114e0.c | 4 +- src/code_a5dd0_len_114e0.h | 8 ++++ 6 files changed, 57 insertions(+), 78 deletions(-) delete mode 100644 asm/nonmatchings/code_190B20/create_part_shadow.s delete mode 100644 asm/nonmatchings/code_190B20/heroes_is_ability_active.s create mode 100644 src/code_190B20.h create mode 100644 src/code_a5dd0_len_114e0.h diff --git a/asm/nonmatchings/code_190B20/create_part_shadow.s b/asm/nonmatchings/code_190B20/create_part_shadow.s deleted file mode 100644 index 0c8a7d64c2..0000000000 --- a/asm/nonmatchings/code_190B20/create_part_shadow.s +++ /dev/null @@ -1,37 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel create_part_shadow -/* 195BFC 8026731C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 195C00 80267320 AFB00010 */ sw $s0, 0x10($sp) -/* 195C04 80267324 AFBF0014 */ sw $ra, 0x14($sp) -/* 195C08 80267328 0C09A75B */ jal get_actor -/* 195C0C 8026732C 00A0802D */ daddu $s0, $a1, $zero -/* 195C10 80267330 0040202D */ daddu $a0, $v0, $zero -/* 195C14 80267334 0C099117 */ jal get_actor_part -/* 195C18 80267338 0200282D */ daddu $a1, $s0, $zero -/* 195C1C 8026733C 0000202D */ daddu $a0, $zero, $zero -/* 195C20 80267340 0040802D */ daddu $s0, $v0, $zero -/* 195C24 80267344 2403FFFB */ addiu $v1, $zero, -5 -/* 195C28 80267348 8E050058 */ lw $a1, 0x58($s0) -/* 195C2C 8026734C 8E020000 */ lw $v0, ($s0) -/* 195C30 80267350 8E06005C */ lw $a2, 0x5c($s0) -/* 195C34 80267354 8E070060 */ lw $a3, 0x60($s0) -/* 195C38 80267358 00431024 */ and $v0, $v0, $v1 -/* 195C3C 8026735C 0C044898 */ jal create_shadow_type -/* 195C40 80267360 AE020000 */ sw $v0, ($s0) -/* 195C44 80267364 AE02009C */ sw $v0, 0x9c($s0) -/* 195C48 80267368 92020072 */ lbu $v0, 0x72($s0) -/* 195C4C 8026736C 3C014038 */ lui $at, 0x4038 -/* 195C50 80267370 44811800 */ mtc1 $at, $f3 -/* 195C54 80267374 44801000 */ mtc1 $zero, $f2 -/* 195C58 80267378 44820000 */ mtc1 $v0, $f0 -/* 195C5C 8026737C 00000000 */ nop -/* 195C60 80267380 46800021 */ cvt.d.w $f0, $f0 -/* 195C64 80267384 46220003 */ div.d $f0, $f0, $f2 -/* 195C68 80267388 46200020 */ cvt.s.d $f0, $f0 -/* 195C6C 8026738C E60000A0 */ swc1 $f0, 0xa0($s0) -/* 195C70 80267390 8FBF0014 */ lw $ra, 0x14($sp) -/* 195C74 80267394 8FB00010 */ lw $s0, 0x10($sp) -/* 195C78 80267398 03E00008 */ jr $ra -/* 195C7C 8026739C 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_190B20/heroes_is_ability_active.s b/asm/nonmatchings/code_190B20/heroes_is_ability_active.s deleted file mode 100644 index 716d97bff3..0000000000 --- a/asm/nonmatchings/code_190B20/heroes_is_ability_active.s +++ /dev/null @@ -1,34 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel heroes_is_ability_active -/* 195B8C 802672AC 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 195B90 802672B0 AFBF0010 */ sw $ra, 0x10($sp) -/* 195B94 802672B4 94820192 */ lhu $v0, 0x192($a0) -/* 195B98 802672B8 30430700 */ andi $v1, $v0, 0x700 -/* 195B9C 802672BC 24020100 */ addiu $v0, $zero, 0x100 -/* 195BA0 802672C0 1062000F */ beq $v1, $v0, .L80267300 -/* 195BA4 802672C4 0000202D */ daddu $a0, $zero, $zero -/* 195BA8 802672C8 28620101 */ slti $v0, $v1, 0x101 -/* 195BAC 802672CC 1040000F */ beqz $v0, .L8026730C -/* 195BB0 802672D0 00000000 */ nop -/* 195BB4 802672D4 1460000D */ bnez $v1, .L8026730C -/* 195BB8 802672D8 00000000 */ nop -/* 195BBC 802672DC 3C02800E */ lui $v0, 0x800e -/* 195BC0 802672E0 8C42C074 */ lw $v0, -0x3f8c($v0) -/* 195BC4 802672E4 30420040 */ andi $v0, $v0, 0x40 -/* 195BC8 802672E8 14400008 */ bnez $v0, .L8026730C -/* 195BCC 802672EC 00000000 */ nop -/* 195BD0 802672F0 0C03A752 */ jal is_ability_active -/* 195BD4 802672F4 00A0202D */ daddu $a0, $a1, $zero -/* 195BD8 802672F8 08099CC3 */ j .L8026730C -/* 195BDC 802672FC 0040202D */ daddu $a0, $v0, $zero -.L80267300: -/* 195BE0 80267300 0C03A82E */ jal is_partner_ability_active -/* 195BE4 80267304 00A0202D */ daddu $a0, $a1, $zero -/* 195BE8 80267308 0040202D */ daddu $a0, $v0, $zero -.L8026730C: -/* 195BEC 8026730C 8FBF0010 */ lw $ra, 0x10($sp) -/* 195BF0 80267310 0080102D */ daddu $v0, $a0, $zero -/* 195BF4 80267314 03E00008 */ jr $ra -/* 195BF8 80267318 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/src/code_190B20.c b/src/code_190B20.c index c13e199d55..68748bae45 100644 --- a/src/code_190B20.c +++ b/src/code_190B20.c @@ -1,6 +1,4 @@ -#include "common.h" - -ActorPart* get_actor_part(Actor* actor, s32 partIndex); +#include "code_190B20.h" INCLUDE_ASM(s32, "code_190B20", create_target_list); @@ -150,9 +148,31 @@ void remove_part_decoration(ActorPart* part, s32 decorationIndex) { INCLUDE_ASM(s32, "code_190B20", remove_actor_decoration); -INCLUDE_ASM(s32, "code_190B20", heroes_is_ability_active); +s32 heroes_is_ability_active(Actor* actor, Ability ability) { + s32 actorGenus = actor->actorID & 0x700; + s32 hasAbility = FALSE; -INCLUDE_ASM(s32, "code_190B20", create_part_shadow); + if (actorGenus != 0x100) { + // Separate ifs required to match + if (actorGenus <= 0x100) { + if (actorGenus == 0 && (gBattleStatus.flags2 & 0x40) == 0) { + hasAbility = is_ability_active(ability); + } + } + } else { + hasAbility = is_partner_ability_active(ability); + } + + return hasAbility; +} + +void create_part_shadow(s32 actorId, s32 partIndex) { + ActorPart* part = get_actor_part(get_actor(actorId), partIndex); + + part->flags &= ~4; + part->shadow = create_shadow_type(0, part->currentPos.x, part->currentPos.y, part->currentPos.z); + part->shadowScale = part->size[0] / 24.0; +} void remove_part_shadow(s32 actorId, s32 partIndex) { ActorPart* part = get_actor_part(get_actor(actorId), partIndex); diff --git a/src/code_190B20.h b/src/code_190B20.h new file mode 100644 index 0000000000..232873b0a7 --- /dev/null +++ b/src/code_190B20.h @@ -0,0 +1,22 @@ +#ifndef _CODE_190B20_H_ +#define _CODE_190B20_H_ + +#include "common.h" +#include "code_a5dd0_len_114e0.h" + +void player_create_target_list(Actor* actor); +void enemy_create_target_list(Actor* actor); + +void set_actor_yaw(s32 actorId, s32 yaw); +void set_part_yaw(s32 actorID, s32 partIndex, s32 value); + +ActorPart* get_actor_part(Actor* actor, s32 partIndex); + +void remove_part_decoration(ActorPart* part, s32 decorationIndex); + +s32 heroes_is_ability_active(Actor* actor, Ability ability); + +void create_part_shadow(s32 actorId, s32 partIndex); +void remove_part_shadow(s32 actorId, s32 partIndex); + +#endif diff --git a/src/code_a5dd0_len_114e0.c b/src/code_a5dd0_len_114e0.c index 5414c5e1ed..3c67595af5 100644 --- a/src/code_a5dd0_len_114e0.c +++ b/src/code_a5dd0_len_114e0.c @@ -1,4 +1,4 @@ -#include "common.h" +#include "code_a5dd0_len_114e0.h" INCLUDE_ASM(s32, "code_a5dd0_len_114e0", update_entities); @@ -135,7 +135,7 @@ INCLUDE_ASM(s32, "code_a5dd0_len_114e0", AssignCrateFlag, ScriptInstance* script INCLUDE_ASM(s32, "code_a5dd0_len_114e0", create_entity_shadow); -INCLUDE_ASM(s32, "code_a5dd0_len_114e0", create_shadow_type); +INCLUDE_ASM(Shadow*, "code_a5dd0_len_114e0", create_shadow_type, s32 type, f32 x, f32 y, f32 z); INCLUDE_ASM(s32, "code_a5dd0_len_114e0", func_80112328); diff --git a/src/code_a5dd0_len_114e0.h b/src/code_a5dd0_len_114e0.h new file mode 100644 index 0000000000..a60fb77871 --- /dev/null +++ b/src/code_a5dd0_len_114e0.h @@ -0,0 +1,8 @@ +#ifndef _CODE_A5DD0_LEN_114E0_H_ +#define _CODE_A5DD0_LEN_114E0_H_ + +#include "common.h" + +Shadow* create_shadow_type(s32 type, f32 x, f32 y, f32 z); + +#endif From c1fabdfad94f924e9030e265575a0cd93241cc03 Mon Sep 17 00:00:00 2001 From: Alex Bates Date: Fri, 16 Oct 2020 18:15:51 +0100 Subject: [PATCH 05/22] match and name create_part_shadow_by_ptr --- asm/nonmatchings/code_190B20/func_802673E4.s | 32 -------------------- src/code_190B20.c | 6 +++- src/code_190B20.h | 1 + tools/symbol_addrs.txt | 1 + 4 files changed, 7 insertions(+), 33 deletions(-) delete mode 100644 asm/nonmatchings/code_190B20/func_802673E4.s diff --git a/asm/nonmatchings/code_190B20/func_802673E4.s b/asm/nonmatchings/code_190B20/func_802673E4.s deleted file mode 100644 index 3c113f58f4..0000000000 --- a/asm/nonmatchings/code_190B20/func_802673E4.s +++ /dev/null @@ -1,32 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_802673E4 -/* 195CC4 802673E4 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 195CC8 802673E8 AFB00010 */ sw $s0, 0x10($sp) -/* 195CCC 802673EC 00A0802D */ daddu $s0, $a1, $zero -/* 195CD0 802673F0 2403FFFB */ addiu $v1, $zero, -5 -/* 195CD4 802673F4 0000202D */ daddu $a0, $zero, $zero -/* 195CD8 802673F8 AFBF0014 */ sw $ra, 0x14($sp) -/* 195CDC 802673FC 8E020000 */ lw $v0, ($s0) -/* 195CE0 80267400 8E050058 */ lw $a1, 0x58($s0) -/* 195CE4 80267404 8E06005C */ lw $a2, 0x5c($s0) -/* 195CE8 80267408 8E070060 */ lw $a3, 0x60($s0) -/* 195CEC 8026740C 00431024 */ and $v0, $v0, $v1 -/* 195CF0 80267410 0C044898 */ jal create_shadow_type -/* 195CF4 80267414 AE020000 */ sw $v0, ($s0) -/* 195CF8 80267418 AE02009C */ sw $v0, 0x9c($s0) -/* 195CFC 8026741C 92020072 */ lbu $v0, 0x72($s0) -/* 195D00 80267420 3C014038 */ lui $at, 0x4038 -/* 195D04 80267424 44811800 */ mtc1 $at, $f3 -/* 195D08 80267428 44801000 */ mtc1 $zero, $f2 -/* 195D0C 8026742C 44820000 */ mtc1 $v0, $f0 -/* 195D10 80267430 00000000 */ nop -/* 195D14 80267434 46800021 */ cvt.d.w $f0, $f0 -/* 195D18 80267438 46220003 */ div.d $f0, $f0, $f2 -/* 195D1C 8026743C 46200020 */ cvt.s.d $f0, $f0 -/* 195D20 80267440 E60000A0 */ swc1 $f0, 0xa0($s0) -/* 195D24 80267444 8FBF0014 */ lw $ra, 0x14($sp) -/* 195D28 80267448 8FB00010 */ lw $s0, 0x10($sp) -/* 195D2C 8026744C 03E00008 */ jr $ra -/* 195D30 80267450 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/src/code_190B20.c b/src/code_190B20.c index 68748bae45..366b4f4092 100644 --- a/src/code_190B20.c +++ b/src/code_190B20.c @@ -181,7 +181,11 @@ void remove_part_shadow(s32 actorId, s32 partIndex) { func_80112328(part->shadow); } -INCLUDE_ASM(s32, "code_190B20", func_802673E4); +void create_part_shadow_by_ptr(UNK_TYPE unused, ActorPart* part) { + part->flags &= ~4; + part->shadow = create_shadow_type(0, part->currentPos.x, part->currentPos.y, part->currentPos.z); + part->shadowScale = part->size[0] / 24.0; +} INCLUDE_ASM(s32, "code_190B20", remove_player_buffs); diff --git a/src/code_190B20.h b/src/code_190B20.h index 232873b0a7..c295e25345 100644 --- a/src/code_190B20.h +++ b/src/code_190B20.h @@ -18,5 +18,6 @@ s32 heroes_is_ability_active(Actor* actor, Ability ability); void create_part_shadow(s32 actorId, s32 partIndex); void remove_part_shadow(s32 actorId, s32 partIndex); +void create_part_shadow_by_ptr(UNK_TYPE unused, ActorPart* part); #endif diff --git a/tools/symbol_addrs.txt b/tools/symbol_addrs.txt index cfe9b9120e..eb81c3588d 100644 --- a/tools/symbol_addrs.txt +++ b/tools/symbol_addrs.txt @@ -1436,6 +1436,7 @@ remove_item_entity_by_index;0x801339FC remove_item_entity_by_reference;0x80133930 remove_part_decoration;0x80267218 remove_part_shadow;0x802673A0 +create_part_shadow_by_ptr;0x802673E4 remove_player_buffs;0x80267454 render_curtains;0x8002BA80 render_dynamic_entities;0x80123470 From 9e9ce5bb298e141614bd6e531d08d6506b0b33f7 Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Fri, 16 Oct 2020 14:49:18 -0400 Subject: [PATCH 06/22] :eyes: --- asm/nonmatchings/code_197F40/SetBattleInputMask.s | 10 ---------- asm/nonmatchings/code_197F40/func_8026E038.s | 10 ---------- include/common_structs.h | 3 ++- src/code_18F340.c | 6 +++--- src/code_1967B0.c | 2 +- src/code_197F40.c | 10 ++++++++-- tools/asm_sizes.py | 4 ++-- 7 files changed, 16 insertions(+), 29 deletions(-) delete mode 100644 asm/nonmatchings/code_197F40/SetBattleInputMask.s delete mode 100644 asm/nonmatchings/code_197F40/func_8026E038.s diff --git a/asm/nonmatchings/code_197F40/SetBattleInputMask.s b/asm/nonmatchings/code_197F40/SetBattleInputMask.s deleted file mode 100644 index 707c0c9ec1..0000000000 --- a/asm/nonmatchings/code_197F40/SetBattleInputMask.s +++ /dev/null @@ -1,10 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel SetBattleInputMask -/* 19C930 8026E050 8C82000C */ lw $v0, 0xc($a0) -/* 19C934 8026E054 8C420000 */ lw $v0, ($v0) -/* 19C938 8026E058 3C01800E */ lui $at, 0x800e -/* 19C93C 8026E05C AC22C294 */ sw $v0, -0x3d6c($at) -/* 19C940 8026E060 03E00008 */ jr $ra -/* 19C944 8026E064 24020002 */ addiu $v0, $zero, 2 diff --git a/asm/nonmatchings/code_197F40/func_8026E038.s b/asm/nonmatchings/code_197F40/func_8026E038.s deleted file mode 100644 index 42096ca5bf..0000000000 --- a/asm/nonmatchings/code_197F40/func_8026E038.s +++ /dev/null @@ -1,10 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_8026E038 -/* 19C918 8026E038 8C82000C */ lw $v0, 0xc($a0) -/* 19C91C 8026E03C 8C420000 */ lw $v0, ($v0) -/* 19C920 8026E040 3C01800E */ lui $at, 0x800e -/* 19C924 8026E044 AC22C0E4 */ sw $v0, -0x3f1c($at) -/* 19C928 8026E048 03E00008 */ jr $ra -/* 19C92C 8026E04C 24020002 */ addiu $v0, $zero, 2 diff --git a/include/common_structs.h b/include/common_structs.h index ad6649b18a..46ad0bec62 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -531,7 +531,8 @@ typedef struct BattleStatus { /* 0x048 */ u8 currentSubmenu; /* 0x049 */ char unk_49[10]; /* 0x053 */ u8 stratsLastCursorPos; - /* 0x054 */ char unk_54[36]; + /* 0x054 */ char unk_54[32]; + /* 0x074 */ s32 unk_74; /* 0x078 */ u8 totalStarPoints; /* 0x079 */ u8 pendingStarPoints; /* how many to add */ /* 0x07A */ u8 incrementStarPointDelay; /* related to star points, set to 0x28 when they are dropped */ diff --git a/src/code_18F340.c b/src/code_18F340.c index dc8655c260..1b34427f99 100644 --- a/src/code_18F340.c +++ b/src/code_18F340.c @@ -17,10 +17,10 @@ ApiStatus func_80260DB8(ScriptInstance* script, s32 isInitialCall) { ApiStatus func_80260DD8(ScriptInstance* script, s32 isInitialCall) { Actor* player = gBattleStatus.playerActor; - + if (!gPlayerData.hasActionCommands) { s32 var = player->varTable[0]; - + if (var >= rand_int(100)) { script->varTable[0] = 1; } else { @@ -57,7 +57,7 @@ INCLUDE_ASM(s32, "code_18F340", func_8026127C); ApiStatus func_80261388(ScriptInstance* script, s32 isInitialCall) { s32 partnerActorExists = gBattleStatus.partnerActor != NULL; - + script->varTable[0] = FALSE; if (partnerActorExists) { script->varTable[0] = TRUE; diff --git a/src/code_1967B0.c b/src/code_1967B0.c index fd61de6500..28207b3d72 100644 --- a/src/code_1967B0.c +++ b/src/code_1967B0.c @@ -10,7 +10,7 @@ ApiStatus LoadMoveScript(ScriptInstance* script, s32 isInitialCall) { dma_copy(moveScript[0], moveScript[1], moveScript[2]); script->varTable[0] = moveScript[3]; - + deduct_current_move_fp(); if (gBattleStatus.flags2 & 0x8000000) { diff --git a/src/code_197F40.c b/src/code_197F40.c index 214d471a90..c7e6e31d61 100644 --- a/src/code_197F40.c +++ b/src/code_197F40.c @@ -225,9 +225,15 @@ INCLUDE_ASM(s32, "code_197F40", func_8026DF88); INCLUDE_ASM(s32, "code_197F40", func_8026E020); -INCLUDE_ASM(s32, "code_197F40", func_8026E038); +ApiStatus func_8026E038(ScriptInstance* script, s32 isInitialCall) { + gBattleStatus.unk_74 = *script->ptrReadPos; + return ApiStatus_DONE2; +} -INCLUDE_ASM(s32, "code_197F40", SetBattleInputMask); +ApiStatus SetBattleInputMask(ScriptInstance* script, s32 isInitialCall) { + gBattleStatus.inputBitmask = *script->ptrReadPos; + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_197F40", SetBattleInputButtons); diff --git a/tools/asm_sizes.py b/tools/asm_sizes.py index 3031a99835..c2c0995586 100755 --- a/tools/asm_sizes.py +++ b/tools/asm_sizes.py @@ -43,5 +43,5 @@ for root, dirs, files in os.walk(asm_dir): if "/os" not in root: do_dir(root, asm_dir) -for thing in sorted(sizes.keys(), key=lambda x: sizes[x][3]): - print(thing.ljust(25) + str(sizes[thing][3])) +for thing in sorted(sizes.keys(), key=lambda x: sizes[x][2]): + print(thing.ljust(25) + str(sizes[thing][2])) From 46586ba9bac4a5b5be05647392beb2661f1f750b Mon Sep 17 00:00:00 2001 From: Alex Bates Date: Fri, 16 Oct 2020 18:23:36 +0100 Subject: [PATCH 07/22] match actor/part decoration funcs --- .../code_190B20/remove_actor_decoration.s | 37 ------------------- src/code_190B20.c | 9 ++++- 2 files changed, 8 insertions(+), 38 deletions(-) delete mode 100644 asm/nonmatchings/code_190B20/remove_actor_decoration.s diff --git a/asm/nonmatchings/code_190B20/remove_actor_decoration.s b/asm/nonmatchings/code_190B20/remove_actor_decoration.s deleted file mode 100644 index eb23f4895e..0000000000 --- a/asm/nonmatchings/code_190B20/remove_actor_decoration.s +++ /dev/null @@ -1,37 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel remove_actor_decoration -/* 195B14 80267234 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 195B18 80267238 AFBF001C */ sw $ra, 0x1c($sp) -/* 195B1C 8026723C AFB20018 */ sw $s2, 0x18($sp) -/* 195B20 80267240 AFB10014 */ sw $s1, 0x14($sp) -/* 195B24 80267244 AFB00010 */ sw $s0, 0x10($sp) -/* 195B28 80267248 8C9001F4 */ lw $s0, 0x1f4($a0) -/* 195B2C 8026724C 12000011 */ beqz $s0, .L80267294 -/* 195B30 80267250 00A0902D */ daddu $s2, $a1, $zero -/* 195B34 80267254 3C110010 */ lui $s1, 0x10 -/* 195B38 80267258 36310001 */ ori $s1, $s1, 1 -.L8026725C: -/* 195B3C 8026725C 8E030000 */ lw $v1, ($s0) -/* 195B40 80267260 00711024 */ and $v0, $v1, $s1 -/* 195B44 80267264 14400008 */ bnez $v0, .L80267288 -/* 195B48 80267268 00000000 */ nop -/* 195B4C 8026726C 8E020094 */ lw $v0, 0x94($s0) -/* 195B50 80267270 10400005 */ beqz $v0, .L80267288 -/* 195B54 80267274 30620002 */ andi $v0, $v1, 2 -/* 195B58 80267278 14400003 */ bnez $v0, .L80267288 -/* 195B5C 8026727C 0200202D */ daddu $a0, $s0, $zero -/* 195B60 80267280 0C099C86 */ jal remove_part_decoration -/* 195B64 80267284 0240282D */ daddu $a1, $s2, $zero -.L80267288: -/* 195B68 80267288 8E10000C */ lw $s0, 0xc($s0) -/* 195B6C 8026728C 1600FFF3 */ bnez $s0, .L8026725C -/* 195B70 80267290 00000000 */ nop -.L80267294: -/* 195B74 80267294 8FBF001C */ lw $ra, 0x1c($sp) -/* 195B78 80267298 8FB20018 */ lw $s2, 0x18($sp) -/* 195B7C 8026729C 8FB10014 */ lw $s1, 0x14($sp) -/* 195B80 802672A0 8FB00010 */ lw $s0, 0x10($sp) -/* 195B84 802672A4 03E00008 */ jr $ra -/* 195B88 802672A8 27BD0020 */ addiu $sp, $sp, 0x20 diff --git a/src/code_190B20.c b/src/code_190B20.c index 366b4f4092..746c0d30e0 100644 --- a/src/code_190B20.c +++ b/src/code_190B20.c @@ -146,7 +146,14 @@ void remove_part_decoration(ActorPart* part, s32 decorationIndex) { _remove_part_decoration(part, decorationIndex); } -INCLUDE_ASM(s32, "code_190B20", remove_actor_decoration); +void remove_actor_decoration(Actor* actor, s32 decorationIndex) { + ActorPart* part; + for (part = actor->partsTable; part != NULL; part = part->nextPart) { + if ((part->flags & 0x100001) == 0 && part->idleAnimations && (part->flags & 2) == 0) { + remove_part_decoration(part, decorationIndex); + } + } +} s32 heroes_is_ability_active(Actor* actor, Ability ability) { s32 actorGenus = actor->actorID & 0x700; From 57d69d1e723debbc7db042b57a126dbd63b53d60 Mon Sep 17 00:00:00 2001 From: Alex Bates Date: Fri, 16 Oct 2020 21:29:54 +0100 Subject: [PATCH 08/22] match add_actor_decoration, near-match others --- include/common_structs.h | 5 +++- src/code_18F340.c | 6 ++--- src/code_190B20.c | 58 ++++++++++++++++++++++++++++++++++++---- src/code_190B20.h | 5 +++- src/code_1967B0.c | 2 +- 5 files changed, 65 insertions(+), 11 deletions(-) diff --git a/include/common_structs.h b/include/common_structs.h index ad6649b18a..99de498391 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -1136,7 +1136,10 @@ typedef struct DecorationTable { /* 0x8AC */ u8 effectType; /* 0 = blur, 14 = none? */ /* 0x8AD */ char unk_8AD[11]; /* 0x8B8 */ u8 decorationType[2]; - /* 0x8BA */ char unk_8BA[46]; + /* 0x8BA */ u8 unk_8BA; + /* 0x8BB */ u8 unk_8BB; + /* 0x8BC */ u8 unk_8BC; + /* 0x8BD */ char unk_8BD[43]; } DecorationTable; // size = 0x8E8 typedef struct Shop { diff --git a/src/code_18F340.c b/src/code_18F340.c index dc8655c260..1b34427f99 100644 --- a/src/code_18F340.c +++ b/src/code_18F340.c @@ -17,10 +17,10 @@ ApiStatus func_80260DB8(ScriptInstance* script, s32 isInitialCall) { ApiStatus func_80260DD8(ScriptInstance* script, s32 isInitialCall) { Actor* player = gBattleStatus.playerActor; - + if (!gPlayerData.hasActionCommands) { s32 var = player->varTable[0]; - + if (var >= rand_int(100)) { script->varTable[0] = 1; } else { @@ -57,7 +57,7 @@ INCLUDE_ASM(s32, "code_18F340", func_8026127C); ApiStatus func_80261388(ScriptInstance* script, s32 isInitialCall) { s32 partnerActorExists = gBattleStatus.partnerActor != NULL; - + script->varTable[0] = FALSE; if (partnerActorExists) { script->varTable[0] = TRUE; diff --git a/src/code_190B20.c b/src/code_190B20.c index 746c0d30e0..00bc7a4fa9 100644 --- a/src/code_190B20.c +++ b/src/code_190B20.c @@ -78,11 +78,35 @@ INCLUDE_ASM(s32, "code_190B20", func_80265CE8); INCLUDE_ASM(s32, "code_190B20", func_80265D44); +#ifdef NON_MATCHING +typedef struct { + Element element; + s32 defense; +} DefenseTableEntry; +s32 lookup_defense(DefenseTableEntry* defenseTable, Element elementKey) { + DefenseTableEntry* row; + s32 normalDefense = 0; + + for (row = defenseTable; row->element != Element_END; row++) { + if (row->element == Element_NORMAL) { + normalDefense = row->defense; + } + + if (row->element == elementKey) { + return row->defense; + } + } + + // Fall back to normal defense if given element is not specified in table + return normalDefense; +} +#else INCLUDE_ASM(s32, "code_190B20", lookup_defense); +#endif -INCLUDE_ASM(s32, "code_190B20", lookup_status_chance); +INCLUDE_ASM(s32, "code_190B20", lookup_status_chance); // exactly (?) the same as lookup_defense -INCLUDE_ASM(s32, "code_190B20", lookup_status_duration_mod); +INCLUDE_ASM(s32, "code_190B20", lookup_status_duration_mod); // exactly (?) the same as lookup_defense INCLUDE_ASM(s32, "code_190B20", inflict_status); @@ -138,9 +162,32 @@ INCLUDE_ASM(s32, "code_190B20", func_8026709C); INCLUDE_ASM(s32, "code_190B20", func_802670C8); -INCLUDE_ASM(s32, "code_190B20", add_part_decoration); +#ifdef NON_MATCHING +// Register allocation issues (decorationIndex is placed in s2 for seemingly no reason?). +// Should be easy to clean up once DecorationTable is more understood +void add_part_decoration(ActorPart* part, s32 decorationIndex, DecorationId decorationType) { + if (part->idleAnimations && (part->flags & 2) == 0) { + DecorationTable* decoration = &part->decorationTable->unk_00[decorationIndex]; + _remove_part_decoration(part, decorationIndex); + decoration->decorationType[0] = decorationType; + decoration->unk_8BA = 1; + decoration->unk_8BC = 0; + func_8025CEC8(part); + } +} +#else +INCLUDE_ASM(void, "code_190B20", add_part_decoration, ActorPart* part, s32 decorationIndex, + DecorationId decorationType); +#endif -INCLUDE_ASM(s32, "code_190B20", add_actor_decoration); +void add_actor_decoration(Actor* actor, s32 decorationIndex, DecorationId decorationType) { + ActorPart* part; + for (part = actor->partsTable; part != NULL; part = part->nextPart) { + if ((part->flags & 0x100001) == 0 && part->idleAnimations && (part->flags & 2) == 0) { + add_part_decoration(part, decorationIndex, decorationType); + } + } +} void remove_part_decoration(ActorPart* part, s32 decorationIndex) { _remove_part_decoration(part, decorationIndex); @@ -188,7 +235,7 @@ void remove_part_shadow(s32 actorId, s32 partIndex) { func_80112328(part->shadow); } -void create_part_shadow_by_ptr(UNK_TYPE unused, ActorPart* part) { +void create_part_shadow_by_ptr(UNK_TYPE arg0, ActorPart* part) { part->flags &= ~4; part->shadow = create_shadow_type(0, part->currentPos.x, part->currentPos.y, part->currentPos.z); part->shadowScale = part->size[0] / 24.0; @@ -215,3 +262,4 @@ INCLUDE_ASM(s32, "code_190B20", show_foreground_models); INCLUDE_ASM(s32, "code_190B20", StartRumbleWithParams); INCLUDE_ASM(s32, "code_190B20", start_rumble_type); + diff --git a/src/code_190B20.h b/src/code_190B20.h index c295e25345..70545647e5 100644 --- a/src/code_190B20.h +++ b/src/code_190B20.h @@ -12,12 +12,15 @@ void set_part_yaw(s32 actorID, s32 partIndex, s32 value); ActorPart* get_actor_part(Actor* actor, s32 partIndex); +void add_part_decoration(ActorPart* part, s32 decorationIndex, DecorationId decorationType); +void add_actor_decoration(Actor* actor, s32 decorationIndex, DecorationId decorationType); void remove_part_decoration(ActorPart* part, s32 decorationIndex); +void remove_actor_decoration(Actor* actor, s32 decorationIndex); s32 heroes_is_ability_active(Actor* actor, Ability ability); void create_part_shadow(s32 actorId, s32 partIndex); void remove_part_shadow(s32 actorId, s32 partIndex); -void create_part_shadow_by_ptr(UNK_TYPE unused, ActorPart* part); +void create_part_shadow_by_ptr(UNK_TYPE arg0, ActorPart* part); // arg0 unused #endif diff --git a/src/code_1967B0.c b/src/code_1967B0.c index fd61de6500..28207b3d72 100644 --- a/src/code_1967B0.c +++ b/src/code_1967B0.c @@ -10,7 +10,7 @@ ApiStatus LoadMoveScript(ScriptInstance* script, s32 isInitialCall) { dma_copy(moveScript[0], moveScript[1], moveScript[2]); script->varTable[0] = moveScript[3]; - + deduct_current_move_fp(); if (gBattleStatus.flags2 & 0x8000000) { From e1b4b8b59426a84188ed81ee2b5395275bdc8730 Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Fri, 16 Oct 2020 16:29:55 -0400 Subject: [PATCH 09/22] :cat: --- .../code_197F40/CheckButtonDown.s | 18 --- .../code_197F40/CheckButtonHeld.s | 18 --- .../code_197F40/CheckButtonPress.s | 18 --- .../code_197F40/EnemyCreateTargetList.s | 21 --- asm/nonmatchings/code_197F40/GetBattleFlags.s | 15 -- .../code_197F40/GetBattleFlags2.s | 15 -- asm/nonmatchings/code_197F40/GetBattlePhase.s | 15 -- asm/nonmatchings/code_197F40/GetBattleState.s | 15 -- asm/nonmatchings/code_197F40/GetLastElement.s | 15 -- asm/nonmatchings/code_197F40/GetOwnerID.s | 14 -- .../code_197F40/GetPlayerActorID.s | 15 -- asm/nonmatchings/code_197F40/GetPlayerHP.s | 15 -- .../code_197F40/PlayerCreateTargetList.s | 21 --- .../code_197F40/RemovePlayerBuffs.s | 13 -- .../code_197F40/SetBattleFlagBits.s | 31 ---- .../code_197F40/SetBattleInputButtons.s | 16 -- asm/nonmatchings/code_197F40/SetOwnerID.s | 17 -- asm/nonmatchings/code_197F40/count_targets.s | 18 --- .../dispatch_damage_event_player_0.s | 15 -- .../dispatch_damage_event_player_1.s | 11 -- include/common_structs.h | 5 +- include/variables.h | 1 + src/code_197F40.c | 149 +++++++++++++++--- tools/symbol_addrs.txt | 6 +- undefined_syms.txt | 4 +- 25 files changed, 139 insertions(+), 362 deletions(-) delete mode 100644 asm/nonmatchings/code_197F40/CheckButtonDown.s delete mode 100644 asm/nonmatchings/code_197F40/CheckButtonHeld.s delete mode 100644 asm/nonmatchings/code_197F40/CheckButtonPress.s delete mode 100644 asm/nonmatchings/code_197F40/EnemyCreateTargetList.s delete mode 100644 asm/nonmatchings/code_197F40/GetBattleFlags.s delete mode 100644 asm/nonmatchings/code_197F40/GetBattleFlags2.s delete mode 100644 asm/nonmatchings/code_197F40/GetBattlePhase.s delete mode 100644 asm/nonmatchings/code_197F40/GetBattleState.s delete mode 100644 asm/nonmatchings/code_197F40/GetLastElement.s delete mode 100644 asm/nonmatchings/code_197F40/GetOwnerID.s delete mode 100644 asm/nonmatchings/code_197F40/GetPlayerActorID.s delete mode 100644 asm/nonmatchings/code_197F40/GetPlayerHP.s delete mode 100644 asm/nonmatchings/code_197F40/PlayerCreateTargetList.s delete mode 100644 asm/nonmatchings/code_197F40/RemovePlayerBuffs.s delete mode 100644 asm/nonmatchings/code_197F40/SetBattleFlagBits.s delete mode 100644 asm/nonmatchings/code_197F40/SetBattleInputButtons.s delete mode 100644 asm/nonmatchings/code_197F40/SetOwnerID.s delete mode 100644 asm/nonmatchings/code_197F40/count_targets.s delete mode 100644 asm/nonmatchings/code_197F40/dispatch_damage_event_player_0.s delete mode 100644 asm/nonmatchings/code_197F40/dispatch_damage_event_player_1.s diff --git a/asm/nonmatchings/code_197F40/CheckButtonDown.s b/asm/nonmatchings/code_197F40/CheckButtonDown.s deleted file mode 100644 index e4b83cce42..0000000000 --- a/asm/nonmatchings/code_197F40/CheckButtonDown.s +++ /dev/null @@ -1,18 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel CheckButtonDown -/* 19C9E8 8026E108 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 19C9EC 8026E10C AFBF0010 */ sw $ra, 0x10($sp) -/* 19C9F0 8026E110 8C82000C */ lw $v0, 0xc($a0) -/* 19C9F4 8026E114 3C06800E */ lui $a2, 0x800e -/* 19C9F8 8026E118 8CC6C280 */ lw $a2, -0x3d80($a2) -/* 19C9FC 8026E11C 8C430000 */ lw $v1, ($v0) -/* 19CA00 8026E120 8C450004 */ lw $a1, 4($v0) -/* 19CA04 8026E124 00C33024 */ and $a2, $a2, $v1 -/* 19CA08 8026E128 0C0B2026 */ jal set_variable -/* 19CA0C 8026E12C 0006302B */ sltu $a2, $zero, $a2 -/* 19CA10 8026E130 8FBF0010 */ lw $ra, 0x10($sp) -/* 19CA14 8026E134 24020002 */ addiu $v0, $zero, 2 -/* 19CA18 8026E138 03E00008 */ jr $ra -/* 19CA1C 8026E13C 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_197F40/CheckButtonHeld.s b/asm/nonmatchings/code_197F40/CheckButtonHeld.s deleted file mode 100644 index 9e9bfc24ad..0000000000 --- a/asm/nonmatchings/code_197F40/CheckButtonHeld.s +++ /dev/null @@ -1,18 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel CheckButtonHeld -/* 19C9B0 8026E0D0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 19C9B4 8026E0D4 AFBF0010 */ sw $ra, 0x10($sp) -/* 19C9B8 8026E0D8 8C82000C */ lw $v0, 0xc($a0) -/* 19C9BC 8026E0DC 3C06800E */ lui $a2, 0x800e -/* 19C9C0 8026E0E0 8CC6C288 */ lw $a2, -0x3d78($a2) -/* 19C9C4 8026E0E4 8C430000 */ lw $v1, ($v0) -/* 19C9C8 8026E0E8 8C450004 */ lw $a1, 4($v0) -/* 19C9CC 8026E0EC 00C33024 */ and $a2, $a2, $v1 -/* 19C9D0 8026E0F0 0C0B2026 */ jal set_variable -/* 19C9D4 8026E0F4 0006302B */ sltu $a2, $zero, $a2 -/* 19C9D8 8026E0F8 8FBF0010 */ lw $ra, 0x10($sp) -/* 19C9DC 8026E0FC 24020002 */ addiu $v0, $zero, 2 -/* 19C9E0 8026E100 03E00008 */ jr $ra -/* 19C9E4 8026E104 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_197F40/CheckButtonPress.s b/asm/nonmatchings/code_197F40/CheckButtonPress.s deleted file mode 100644 index f191aa9572..0000000000 --- a/asm/nonmatchings/code_197F40/CheckButtonPress.s +++ /dev/null @@ -1,18 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel CheckButtonPress -/* 19C978 8026E098 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 19C97C 8026E09C AFBF0010 */ sw $ra, 0x10($sp) -/* 19C980 8026E0A0 8C82000C */ lw $v0, 0xc($a0) -/* 19C984 8026E0A4 3C06800E */ lui $a2, 0x800e -/* 19C988 8026E0A8 8CC6C284 */ lw $a2, -0x3d7c($a2) -/* 19C98C 8026E0AC 8C430000 */ lw $v1, ($v0) -/* 19C990 8026E0B0 8C450004 */ lw $a1, 4($v0) -/* 19C994 8026E0B4 00C33024 */ and $a2, $a2, $v1 -/* 19C998 8026E0B8 0C0B2026 */ jal set_variable -/* 19C99C 8026E0BC 0006302B */ sltu $a2, $zero, $a2 -/* 19C9A0 8026E0C0 8FBF0010 */ lw $ra, 0x10($sp) -/* 19C9A4 8026E0C4 24020002 */ addiu $v0, $zero, 2 -/* 19C9A8 8026E0C8 03E00008 */ jr $ra -/* 19C9AC 8026E0CC 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_197F40/EnemyCreateTargetList.s b/asm/nonmatchings/code_197F40/EnemyCreateTargetList.s deleted file mode 100644 index 303d952f3b..0000000000 --- a/asm/nonmatchings/code_197F40/EnemyCreateTargetList.s +++ /dev/null @@ -1,21 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel EnemyCreateTargetList -/* 19CBF0 8026E310 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 19CBF4 8026E314 0080102D */ daddu $v0, $a0, $zero -/* 19CBF8 8026E318 AFBF0014 */ sw $ra, 0x14($sp) -/* 19CBFC 8026E31C AFB00010 */ sw $s0, 0x10($sp) -/* 19CC00 8026E320 8C440148 */ lw $a0, 0x148($v0) -/* 19CC04 8026E324 0C09A75B */ jal get_actor -/* 19CC08 8026E328 8C50000C */ lw $s0, 0xc($v0) -/* 19CC0C 8026E32C 8E030000 */ lw $v1, ($s0) -/* 19CC10 8026E330 3C01800E */ lui $at, 0x800e -/* 19CC14 8026E334 AC23C1F4 */ sw $v1, -0x3e0c($at) -/* 19CC18 8026E338 0C098C12 */ jal enemy_create_target_list -/* 19CC1C 8026E33C 0040202D */ daddu $a0, $v0, $zero -/* 19CC20 8026E340 8FBF0014 */ lw $ra, 0x14($sp) -/* 19CC24 8026E344 8FB00010 */ lw $s0, 0x10($sp) -/* 19CC28 8026E348 24020002 */ addiu $v0, $zero, 2 -/* 19CC2C 8026E34C 03E00008 */ jr $ra -/* 19CC30 8026E350 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_197F40/GetBattleFlags.s b/asm/nonmatchings/code_197F40/GetBattleFlags.s deleted file mode 100644 index 67c82789c9..0000000000 --- a/asm/nonmatchings/code_197F40/GetBattleFlags.s +++ /dev/null @@ -1,15 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel GetBattleFlags -/* 19B5F0 8026CD10 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 19B5F4 8026CD14 AFBF0010 */ sw $ra, 0x10($sp) -/* 19B5F8 8026CD18 8C82000C */ lw $v0, 0xc($a0) -/* 19B5FC 8026CD1C 3C06800E */ lui $a2, %hi(gBattleStatus) -/* 19B600 8026CD20 8CC6C070 */ lw $a2, %lo(gBattleStatus)($a2) -/* 19B604 8026CD24 0C0B2026 */ jal set_variable -/* 19B608 8026CD28 8C450000 */ lw $a1, ($v0) -/* 19B60C 8026CD2C 8FBF0010 */ lw $ra, 0x10($sp) -/* 19B610 8026CD30 24020002 */ addiu $v0, $zero, 2 -/* 19B614 8026CD34 03E00008 */ jr $ra -/* 19B618 8026CD38 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_197F40/GetBattleFlags2.s b/asm/nonmatchings/code_197F40/GetBattleFlags2.s deleted file mode 100644 index aec0db8717..0000000000 --- a/asm/nonmatchings/code_197F40/GetBattleFlags2.s +++ /dev/null @@ -1,15 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel GetBattleFlags2 -/* 19B680 8026CDA0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 19B684 8026CDA4 AFBF0010 */ sw $ra, 0x10($sp) -/* 19B688 8026CDA8 8C82000C */ lw $v0, 0xc($a0) -/* 19B68C 8026CDAC 3C06800E */ lui $a2, 0x800e -/* 19B690 8026CDB0 8CC6C074 */ lw $a2, -0x3f8c($a2) -/* 19B694 8026CDB4 0C0B2026 */ jal set_variable -/* 19B698 8026CDB8 8C450000 */ lw $a1, ($v0) -/* 19B69C 8026CDBC 8FBF0010 */ lw $ra, 0x10($sp) -/* 19B6A0 8026CDC0 24020002 */ addiu $v0, $zero, 2 -/* 19B6A4 8026CDC4 03E00008 */ jr $ra -/* 19B6A8 8026CDC8 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_197F40/GetBattlePhase.s b/asm/nonmatchings/code_197F40/GetBattlePhase.s deleted file mode 100644 index 22f5fd21f0..0000000000 --- a/asm/nonmatchings/code_197F40/GetBattlePhase.s +++ /dev/null @@ -1,15 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel GetBattlePhase -/* 198708 80269E28 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 19870C 80269E2C AFBF0010 */ sw $ra, 0x10($sp) -/* 198710 80269E30 8C82000C */ lw $v0, 0xc($a0) -/* 198714 80269E34 3C06800E */ lui $a2, 0x800e -/* 198718 80269E38 80C6C217 */ lb $a2, -0x3de9($a2) -/* 19871C 80269E3C 0C0B2026 */ jal set_variable -/* 198720 80269E40 8C450000 */ lw $a1, ($v0) -/* 198724 80269E44 8FBF0010 */ lw $ra, 0x10($sp) -/* 198728 80269E48 24020002 */ addiu $v0, $zero, 2 -/* 19872C 80269E4C 03E00008 */ jr $ra -/* 198730 80269E50 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_197F40/GetBattleState.s b/asm/nonmatchings/code_197F40/GetBattleState.s deleted file mode 100644 index 4ba8f16670..0000000000 --- a/asm/nonmatchings/code_197F40/GetBattleState.s +++ /dev/null @@ -1,15 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel GetBattleState -/* 19CA20 8026E140 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 19CA24 8026E144 AFBF0010 */ sw $ra, 0x10($sp) -/* 19CA28 8026E148 8C82000C */ lw $v0, 0xc($a0) -/* 19CA2C 8026E14C 3C06800E */ lui $a2, 0x800e -/* 19CA30 8026E150 8CC6C068 */ lw $a2, -0x3f98($a2) -/* 19CA34 8026E154 0C0B2026 */ jal set_variable -/* 19CA38 8026E158 8C450000 */ lw $a1, ($v0) -/* 19CA3C 8026E15C 8FBF0010 */ lw $ra, 0x10($sp) -/* 19CA40 8026E160 24020002 */ addiu $v0, $zero, 2 -/* 19CA44 8026E164 03E00008 */ jr $ra -/* 19CA48 8026E168 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_197F40/GetLastElement.s b/asm/nonmatchings/code_197F40/GetLastElement.s deleted file mode 100644 index 51dbcd25e7..0000000000 --- a/asm/nonmatchings/code_197F40/GetLastElement.s +++ /dev/null @@ -1,15 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel GetLastElement -/* 198734 80269E54 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 198738 80269E58 AFBF0010 */ sw $ra, 0x10($sp) -/* 19873C 80269E5C 8C82000C */ lw $v0, 0xc($a0) -/* 198740 80269E60 3C06800E */ lui $a2, 0x800e -/* 198744 80269E64 8CC6C1F8 */ lw $a2, -0x3e08($a2) -/* 198748 80269E68 0C0B2026 */ jal set_variable -/* 19874C 80269E6C 8C450000 */ lw $a1, ($v0) -/* 198750 80269E70 8FBF0010 */ lw $ra, 0x10($sp) -/* 198754 80269E74 24020002 */ addiu $v0, $zero, 2 -/* 198758 80269E78 03E00008 */ jr $ra -/* 19875C 80269E7C 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_197F40/GetOwnerID.s b/asm/nonmatchings/code_197F40/GetOwnerID.s deleted file mode 100644 index 77a186cf94..0000000000 --- a/asm/nonmatchings/code_197F40/GetOwnerID.s +++ /dev/null @@ -1,14 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel GetOwnerID -/* 19C6E0 8026DE00 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 19C6E4 8026DE04 AFBF0010 */ sw $ra, 0x10($sp) -/* 19C6E8 8026DE08 8C82000C */ lw $v0, 0xc($a0) -/* 19C6EC 8026DE0C 8C860148 */ lw $a2, 0x148($a0) -/* 19C6F0 8026DE10 0C0B2026 */ jal set_variable -/* 19C6F4 8026DE14 8C450000 */ lw $a1, ($v0) -/* 19C6F8 8026DE18 8FBF0010 */ lw $ra, 0x10($sp) -/* 19C6FC 8026DE1C 24020002 */ addiu $v0, $zero, 2 -/* 19C700 8026DE20 03E00008 */ jr $ra -/* 19C704 8026DE24 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_197F40/GetPlayerActorID.s b/asm/nonmatchings/code_197F40/GetPlayerActorID.s deleted file mode 100644 index fab2e538b6..0000000000 --- a/asm/nonmatchings/code_197F40/GetPlayerActorID.s +++ /dev/null @@ -1,15 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel GetPlayerActorID -/* 19D254 8026E974 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 19D258 8026E978 AFBF0010 */ sw $ra, 0x10($sp) -/* 19D25C 8026E97C 8C82000C */ lw $v0, 0xc($a0) -/* 19D260 8026E980 3C06800E */ lui $a2, 0x800e -/* 19D264 8026E984 84C6C218 */ lh $a2, -0x3de8($a2) -/* 19D268 8026E988 0C0B2026 */ jal set_variable -/* 19D26C 8026E98C 8C450000 */ lw $a1, ($v0) -/* 19D270 8026E990 8FBF0010 */ lw $ra, 0x10($sp) -/* 19D274 8026E994 24020002 */ addiu $v0, $zero, 2 -/* 19D278 8026E998 03E00008 */ jr $ra -/* 19D27C 8026E99C 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_197F40/GetPlayerHP.s b/asm/nonmatchings/code_197F40/GetPlayerHP.s deleted file mode 100644 index b563dcd9c8..0000000000 --- a/asm/nonmatchings/code_197F40/GetPlayerHP.s +++ /dev/null @@ -1,15 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel GetPlayerHP -/* 1A2B14 80274234 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 1A2B18 80274238 AFBF0010 */ sw $ra, 0x10($sp) -/* 1A2B1C 8027423C 8C82000C */ lw $v0, 0xc($a0) -/* 1A2B20 80274240 3C068011 */ lui $a2, 0x8011 -/* 1A2B24 80274244 80C6F292 */ lb $a2, -0xd6e($a2) -/* 1A2B28 80274248 0C0B2026 */ jal set_variable -/* 1A2B2C 8027424C 8C450000 */ lw $a1, ($v0) -/* 1A2B30 80274250 8FBF0010 */ lw $ra, 0x10($sp) -/* 1A2B34 80274254 24020002 */ addiu $v0, $zero, 2 -/* 1A2B38 80274258 03E00008 */ jr $ra -/* 1A2B3C 8027425C 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_197F40/PlayerCreateTargetList.s b/asm/nonmatchings/code_197F40/PlayerCreateTargetList.s deleted file mode 100644 index b0e7b0a27c..0000000000 --- a/asm/nonmatchings/code_197F40/PlayerCreateTargetList.s +++ /dev/null @@ -1,21 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel PlayerCreateTargetList -/* 19CBAC 8026E2CC 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 19CBB0 8026E2D0 0080102D */ daddu $v0, $a0, $zero -/* 19CBB4 8026E2D4 AFBF0014 */ sw $ra, 0x14($sp) -/* 19CBB8 8026E2D8 AFB00010 */ sw $s0, 0x10($sp) -/* 19CBBC 8026E2DC 8C440148 */ lw $a0, 0x148($v0) -/* 19CBC0 8026E2E0 0C09A75B */ jal get_actor -/* 19CBC4 8026E2E4 8C50000C */ lw $s0, 0xc($v0) -/* 19CBC8 8026E2E8 8E030000 */ lw $v1, ($s0) -/* 19CBCC 8026E2EC 3C01800E */ lui $at, 0x800e -/* 19CBD0 8026E2F0 AC23C1F4 */ sw $v1, -0x3e0c($at) -/* 19CBD4 8026E2F4 0C098C0B */ jal player_create_target_list -/* 19CBD8 8026E2F8 0040202D */ daddu $a0, $v0, $zero -/* 19CBDC 8026E2FC 8FBF0014 */ lw $ra, 0x14($sp) -/* 19CBE0 8026E300 8FB00010 */ lw $s0, 0x10($sp) -/* 19CBE4 8026E304 24020002 */ addiu $v0, $zero, 2 -/* 19CBE8 8026E308 03E00008 */ jr $ra -/* 19CBEC 8026E30C 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_197F40/RemovePlayerBuffs.s b/asm/nonmatchings/code_197F40/RemovePlayerBuffs.s deleted file mode 100644 index d299cc37f8..0000000000 --- a/asm/nonmatchings/code_197F40/RemovePlayerBuffs.s +++ /dev/null @@ -1,13 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel RemovePlayerBuffs -/* 19DD2C 8026F44C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 19DD30 8026F450 AFBF0010 */ sw $ra, 0x10($sp) -/* 19DD34 8026F454 8C82000C */ lw $v0, 0xc($a0) -/* 19DD38 8026F458 0C099D15 */ jal remove_player_buffs -/* 19DD3C 8026F45C 8C440000 */ lw $a0, ($v0) -/* 19DD40 8026F460 8FBF0010 */ lw $ra, 0x10($sp) -/* 19DD44 8026F464 24020002 */ addiu $v0, $zero, 2 -/* 19DD48 8026F468 03E00008 */ jr $ra -/* 19DD4C 8026F46C 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_197F40/SetBattleFlagBits.s b/asm/nonmatchings/code_197F40/SetBattleFlagBits.s deleted file mode 100644 index 5d393d0dcf..0000000000 --- a/asm/nonmatchings/code_197F40/SetBattleFlagBits.s +++ /dev/null @@ -1,31 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel SetBattleFlagBits -/* 19B61C 8026CD3C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 19B620 8026CD40 AFBF0014 */ sw $ra, 0x14($sp) -/* 19B624 8026CD44 AFB00010 */ sw $s0, 0x10($sp) -/* 19B628 8026CD48 8C82000C */ lw $v0, 0xc($a0) -/* 19B62C 8026CD4C 8C450004 */ lw $a1, 4($v0) -/* 19B630 8026CD50 0C0B1EAF */ jal get_variable -/* 19B634 8026CD54 8C500000 */ lw $s0, ($v0) -/* 19B638 8026CD58 10400007 */ beqz $v0, .L8026CD78 -/* 19B63C 8026CD5C 00102027 */ nor $a0, $zero, $s0 -/* 19B640 8026CD60 3C03800E */ lui $v1, %hi(gBattleStatus) -/* 19B644 8026CD64 2463C070 */ addiu $v1, $v1, %lo(gBattleStatus) -/* 19B648 8026CD68 8C620000 */ lw $v0, ($v1) -/* 19B64C 8026CD6C 00501025 */ or $v0, $v0, $s0 -/* 19B650 8026CD70 0809B363 */ j .L8026CD8C -/* 19B654 8026CD74 AC620000 */ sw $v0, ($v1) -.L8026CD78: -/* 19B658 8026CD78 3C02800E */ lui $v0, %hi(gBattleStatus) -/* 19B65C 8026CD7C 2442C070 */ addiu $v0, $v0, %lo(gBattleStatus) -/* 19B660 8026CD80 8C430000 */ lw $v1, ($v0) -/* 19B664 8026CD84 00641824 */ and $v1, $v1, $a0 -/* 19B668 8026CD88 AC430000 */ sw $v1, ($v0) -.L8026CD8C: -/* 19B66C 8026CD8C 8FBF0014 */ lw $ra, 0x14($sp) -/* 19B670 8026CD90 8FB00010 */ lw $s0, 0x10($sp) -/* 19B674 8026CD94 24020002 */ addiu $v0, $zero, 2 -/* 19B678 8026CD98 03E00008 */ jr $ra -/* 19B67C 8026CD9C 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_197F40/SetBattleInputButtons.s b/asm/nonmatchings/code_197F40/SetBattleInputButtons.s deleted file mode 100644 index 675c6835f5..0000000000 --- a/asm/nonmatchings/code_197F40/SetBattleInputButtons.s +++ /dev/null @@ -1,16 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel SetBattleInputButtons -/* 19C948 8026E068 8C82000C */ lw $v0, 0xc($a0) -/* 19C94C 8026E06C 8C450000 */ lw $a1, ($v0) -/* 19C950 8026E070 24420004 */ addiu $v0, $v0, 4 -/* 19C954 8026E074 8C430000 */ lw $v1, ($v0) -/* 19C958 8026E078 8C440004 */ lw $a0, 4($v0) -/* 19C95C 8026E07C 3C02800E */ lui $v0, %hi(gBattleStatus) -/* 19C960 8026E080 2442C070 */ addiu $v0, $v0, %lo(gBattleStatus) -/* 19C964 8026E084 AC450210 */ sw $a1, 0x210($v0) -/* 19C968 8026E088 AC430214 */ sw $v1, 0x214($v0) -/* 19C96C 8026E08C AC440218 */ sw $a0, 0x218($v0) -/* 19C970 8026E090 03E00008 */ jr $ra -/* 19C974 8026E094 24020002 */ addiu $v0, $zero, 2 diff --git a/asm/nonmatchings/code_197F40/SetOwnerID.s b/asm/nonmatchings/code_197F40/SetOwnerID.s deleted file mode 100644 index 7d425d4774..0000000000 --- a/asm/nonmatchings/code_197F40/SetOwnerID.s +++ /dev/null @@ -1,17 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel SetOwnerID -/* 19C708 8026DE28 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 19C70C 8026DE2C AFB00010 */ sw $s0, 0x10($sp) -/* 19C710 8026DE30 0080802D */ daddu $s0, $a0, $zero -/* 19C714 8026DE34 AFBF0014 */ sw $ra, 0x14($sp) -/* 19C718 8026DE38 8E02000C */ lw $v0, 0xc($s0) -/* 19C71C 8026DE3C 0C0B1EAF */ jal get_variable -/* 19C720 8026DE40 8C450000 */ lw $a1, ($v0) -/* 19C724 8026DE44 AE020148 */ sw $v0, 0x148($s0) -/* 19C728 8026DE48 8FBF0014 */ lw $ra, 0x14($sp) -/* 19C72C 8026DE4C 8FB00010 */ lw $s0, 0x10($sp) -/* 19C730 8026DE50 24020002 */ addiu $v0, $zero, 2 -/* 19C734 8026DE54 03E00008 */ jr $ra -/* 19C738 8026DE58 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_197F40/count_targets.s b/asm/nonmatchings/code_197F40/count_targets.s deleted file mode 100644 index bd6641a549..0000000000 --- a/asm/nonmatchings/code_197F40/count_targets.s +++ /dev/null @@ -1,18 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel count_targets -/* 197F40 80269660 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 197F44 80269664 AFB00010 */ sw $s0, 0x10($sp) -/* 197F48 80269668 0080802D */ daddu $s0, $a0, $zero -/* 197F4C 8026966C 3C02800E */ lui $v0, %hi(gBattleStatus) -/* 197F50 80269670 2442C070 */ addiu $v0, $v0, %lo(gBattleStatus) -/* 197F54 80269674 AFBF0014 */ sw $ra, 0x14($sp) -/* 197F58 80269678 A0450197 */ sb $a1, 0x197($v0) -/* 197F5C 8026967C 0C098C0B */ jal player_create_target_list -/* 197F60 80269680 AC460184 */ sw $a2, 0x184($v0) -/* 197F64 80269684 8202040C */ lb $v0, 0x40c($s0) -/* 197F68 80269688 8FBF0014 */ lw $ra, 0x14($sp) -/* 197F6C 8026968C 8FB00010 */ lw $s0, 0x10($sp) -/* 197F70 80269690 03E00008 */ jr $ra -/* 197F74 80269694 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_197F40/dispatch_damage_event_player_0.s b/asm/nonmatchings/code_197F40/dispatch_damage_event_player_0.s deleted file mode 100644 index 0779c29d00..0000000000 --- a/asm/nonmatchings/code_197F40/dispatch_damage_event_player_0.s +++ /dev/null @@ -1,15 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel dispatch_damage_event_player_0 -/* 1A1C5C 8027337C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 1A1C60 80273380 3C02800E */ lui $v0, %hi(gBattleStatus) -/* 1A1C64 80273384 2442C070 */ addiu $v0, $v0, %lo(gBattleStatus) -/* 1A1C68 80273388 0000302D */ daddu $a2, $zero, $zero -/* 1A1C6C 8027338C AFBF0010 */ sw $ra, 0x10($sp) -/* 1A1C70 80273390 AC400188 */ sw $zero, 0x188($v0) -/* 1A1C74 80273394 0C09CC6F */ jal dispatch_damage_event_player -/* 1A1C78 80273398 A040019A */ sb $zero, 0x19a($v0) -/* 1A1C7C 8027339C 8FBF0010 */ lw $ra, 0x10($sp) -/* 1A1C80 802733A0 03E00008 */ jr $ra -/* 1A1C84 802733A4 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_197F40/dispatch_damage_event_player_1.s b/asm/nonmatchings/code_197F40/dispatch_damage_event_player_1.s deleted file mode 100644 index 9444912291..0000000000 --- a/asm/nonmatchings/code_197F40/dispatch_damage_event_player_1.s +++ /dev/null @@ -1,11 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel dispatch_damage_event_player_1 -/* 1A1C88 802733A8 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 1A1C8C 802733AC AFBF0010 */ sw $ra, 0x10($sp) -/* 1A1C90 802733B0 0C09CC6F */ jal dispatch_damage_event_player -/* 1A1C94 802733B4 24060001 */ addiu $a2, $zero, 1 -/* 1A1C98 802733B8 8FBF0010 */ lw $ra, 0x10($sp) -/* 1A1C9C 802733BC 03E00008 */ jr $ra -/* 1A1CA0 802733C0 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/include/common_structs.h b/include/common_structs.h index 46ad0bec62..7f706ada01 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -603,13 +603,14 @@ typedef struct BattleStatus { /* 0x197 */ u8 targetHomeIndex; /* some sort of home idnex used for target list construction */ /* 0x198 */ u8 powerBounceCounter; /* 0x199 */ u8 wasStatusInflicted; /* during last attack */ - /* 0x19A */ char unk_19A[6]; + /* 0x19A */ s8 unk_19A; + /* 0x19B */ char unk_19B[5]; /* 0x1A0 */ s16 currentTargetID; /* selected? */ /* 0x1A2 */ u8 currentTargetPart; /* selected? */ /* 0x1A3 */ char unk_1A3; /* 0x1A4 */ s16 currentTargetID2; /* 0x1A6 */ u8 currentTargetPart2; - /* 0x1A7 */ u8 battlePhase; + /* 0x1A7 */ s8 battlePhase; /* 0x1A8 */ s16 attackerActorID; /* 0x1AA */ char unk_1AA[4]; /* 0x1AE */ s16 submenuIcons[24]; /* icon IDs */ diff --git a/include/variables.h b/include/variables.h index a66f952e04..d32c0c5277 100644 --- a/include/variables.h +++ b/include/variables.h @@ -20,6 +20,7 @@ extern StaticItem gItemTable[364]; extern s16 gMainGameState; /* 0 = battle, 1 = pause, 2 = world */ extern UNK_FUN_PTR(gCurrentUpdateFunction); +extern s32 gBattleState; extern BattleStatus gBattleStatus; extern ScriptList gWorldScriptList; diff --git a/src/code_197F40.c b/src/code_197F40.c index c7e6e31d61..41398f8678 100644 --- a/src/code_197F40.c +++ b/src/code_197F40.c @@ -1,6 +1,13 @@ #include "common.h" -INCLUDE_ASM(s32, "code_197F40", count_targets); +s8 count_targets(Actor* actor, s32 targetHomeIndex, s32 targetSelectionFlags) { + BattleStatus* battleStatus = &gBattleStatus; + + battleStatus->targetHomeIndex = targetHomeIndex; + battleStatus->currentTargetListFlags = targetSelectionFlags; + player_create_target_list(actor); + return actor->targetListLength; +} INCLUDE_ASM(s32, "code_197F40", get_nearest_home_index); @@ -18,9 +25,15 @@ INCLUDE_ASM(Actor*, "code_197F40", get_actor, s32 actorID); INCLUDE_ASM(s32, "code_197F40", LoadBattleSection); -INCLUDE_ASM(s32, "code_197F40", GetBattlePhase); +ApiStatus GetBattlePhase(ScriptInstance* script, s32 isInitialCall) { + set_variable(script, *script->ptrReadPos, gBattleStatus.battlePhase); + return ApiStatus_DONE2; +} -INCLUDE_ASM(s32, "code_197F40", GetLastElement); +ApiStatus GetLastElement(ScriptInstance* script, s32 isInitialCall) { + set_variable(script, *script->ptrReadPos, gBattleStatus.currentAttackElement); + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_197F40", func_80269E80); @@ -148,11 +161,28 @@ INCLUDE_ASM(s32, "code_197F40", SetPartScale); INCLUDE_ASM(s32, "code_197F40", GetPartScale); -INCLUDE_ASM(s32, "code_197F40", GetBattleFlags); +ApiStatus GetBattleFlags(ScriptInstance* script, s32 isInitialCall) { + set_variable(script, *script->ptrReadPos, gBattleStatus.flags1); + return ApiStatus_DONE2; +} -INCLUDE_ASM(s32, "code_197F40", SetBattleFlagBits); +ApiStatus SetBattleFlagBits(ScriptInstance* script, s32 isInitialCall) { + Bytecode* args = script->ptrReadPos; + Bytecode a0 = *args++; -INCLUDE_ASM(s32, "code_197F40", GetBattleFlags2); + if (get_variable(script, *args)) { + gBattleStatus.flags1 |= a0; + } else { + gBattleStatus.flags1 &= ~a0; + } + + return ApiStatus_DONE2; +} + +ApiStatus GetBattleFlags2(ScriptInstance* script, s32 isInitialCall) { + set_variable(script, *script->ptrReadPos, gBattleStatus.flags2); + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_197F40", SetBattleFlagBits2); @@ -196,9 +226,15 @@ INCLUDE_ASM(s32, "code_197F40", func_8026DA94); INCLUDE_ASM(s32, "code_197F40", SummonEnemy); -INCLUDE_ASM(s32, "code_197F40", GetOwnerID); +ApiStatus GetOwnerID(ScriptInstance* script, s32 isInitialCall) { + set_variable(script, *script->ptrReadPos, script->ownerActorID); + return ApiStatus_DONE2; +} -INCLUDE_ASM(s32, "code_197F40", SetOwnerID); +ApiStatus SetOwnerID(ScriptInstance* script, s32 isInitialCall) { + script->ownerActorID = get_variable(script, *script->ptrReadPos); + return ApiStatus_DONE2; +} ApiStatus ActorExists(ScriptInstance* script, s32 isInitialCall) { Bytecode isExist; @@ -235,15 +271,54 @@ ApiStatus SetBattleInputMask(ScriptInstance* script, s32 isInitialCall) { return ApiStatus_DONE2; } -INCLUDE_ASM(s32, "code_197F40", SetBattleInputButtons); +ApiStatus SetBattleInputButtons(ScriptInstance* script, s32 isInitialCall) { + Bytecode* args = script->ptrReadPos; + BattleStatus* battleStatus = &gBattleStatus; + s32 currentButtonsDown = *args++; + s32 currentButtonsPressed = *args++; + s32 currentButtonsHeld = *args; -INCLUDE_ASM(s32, "code_197F40", CheckButtonPress); + battleStatus->currentButtonsDown = currentButtonsDown; + battleStatus->currentButtonsPressed = currentButtonsPressed; + battleStatus->currentButtonsHeld = currentButtonsHeld; -INCLUDE_ASM(s32, "code_197F40", CheckButtonHeld); + return ApiStatus_DONE2; +} -INCLUDE_ASM(s32, "code_197F40", CheckButtonDown); +ApiStatus CheckButtonPress(ScriptInstance* script, s32 isInitialCall) { + Bytecode* args = script->ptrReadPos; + Bytecode buttons = *args++; + Bytecode out = *args; + s32 buttonsPressed = gBattleStatus.currentButtonsPressed; -INCLUDE_ASM(s32, "code_197F40", GetBattleState); + set_variable(script, out, (buttonsPressed & buttons) != 0); + return ApiStatus_DONE2; +} + +ApiStatus CheckButtonHeld(ScriptInstance* script, s32 isInitialCall) { + Bytecode* args = script->ptrReadPos; + Bytecode buttons = *args++; + Bytecode out = *args; + s32 buttonsHeld = gBattleStatus.currentButtonsHeld; + + set_variable(script, out, (buttonsHeld & buttons) != 0); + return ApiStatus_DONE2; +} + +ApiStatus CheckButtonDown(ScriptInstance* script, s32 isInitialCall) { + Bytecode* args = script->ptrReadPos; + Bytecode buttons = *args++; + Bytecode out = *args; + s32 buttonsDown = gBattleStatus.currentButtonsDown; + + set_variable(script, out, (buttonsDown & buttons) != 0); + return ApiStatus_DONE2; +} + +ApiStatus GetBattleState(ScriptInstance* script, s32 isInitialCall) { + set_variable(script, *script->ptrReadPos, gBattleState); + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_197F40", func_8026E16C); @@ -253,9 +328,25 @@ INCLUDE_ASM(s32, "code_197F40", func_8026E208); INCLUDE_ASM(s32, "code_197F40", func_8026E260); -INCLUDE_ASM(s32, "code_197F40", PlayerCreateTargetList); +ApiStatus PlayerCreateTargetList(ScriptInstance* script, s32 isInitialCall) { + Bytecode* args = script->ptrReadPos; + Actor* actor = get_actor(script->ownerActorID); -INCLUDE_ASM(s32, "code_197F40", EnemyCreateTargetList); + gBattleStatus.currentTargetListFlags = *args; + player_create_target_list(actor); + + return ApiStatus_DONE2; +} + +ApiStatus EnemyCreateTargetList(ScriptInstance* script, s32 isInitialCall) { + Bytecode* args = script->ptrReadPos; + Actor* actor = get_actor(script->ownerActorID); + + gBattleStatus.currentTargetListFlags = *args; + enemy_create_target_list(actor); + + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_197F40", InitTargetIterator); @@ -271,7 +362,10 @@ INCLUDE_ASM(s32, "code_197F40", GetOwnerTarget); INCLUDE_ASM(s32, "code_197F40", func_8026E914); -INCLUDE_ASM(s32, "code_197F40", GetPlayerActorID); +ApiStatus GetAttackerActorID(ScriptInstance* script, s32 isInitialCall) { + set_variable(script, *script->ptrReadPos, gBattleStatus.attackerActorID); + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_197F40", func_8026E9A0); @@ -299,7 +393,10 @@ INCLUDE_ASM(s32, "code_197F40", func_8026F1A0); INCLUDE_ASM(s32, "code_197F40", GetStatusFlags); -INCLUDE_ASM(s32, "code_197F40", RemovePlayerBuffs); +ApiStatus RemovePlayerBuffs(ScriptInstance* script, s32 isInitialCall) { + remove_player_buffs(*script->ptrReadPos); + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_197F40", SetPartAlpha); @@ -369,9 +466,17 @@ INCLUDE_ASM(s32, "code_197F40", calc_player_damage_enemy); INCLUDE_ASM(s32, "code_197F40", dispatch_damage_event_player); -INCLUDE_ASM(s32, "code_197F40", dispatch_damage_event_player_0); +void dispatch_damage_event_player_0(s32 damageAmount, Event event) { + BattleStatus* battleStatus = &gBattleStatus; -INCLUDE_ASM(s32, "code_197F40", dispatch_damage_event_player_1); + battleStatus->currentAttackElement = Element_END; + battleStatus->unk_19A = 0; + dispatch_damage_event_player(damageAmount, event, FALSE); +} + +void dispatch_damage_event_player_1(s32 damageAmount, Event event) { + dispatch_damage_event_player(damageAmount, event, TRUE); +} INCLUDE_ASM(s32, "code_197F40", GetMenuSelection); @@ -385,7 +490,11 @@ INCLUDE_ASM(s32, "code_197F40", PlayerRunToGoal); INCLUDE_ASM(s32, "code_197F40", CancelablePlayerRunToGoal); -INCLUDE_ASM(s32, "code_197F40", GetPlayerHP); +ApiStatus GetPlayerHP(ScriptInstance* script, s32 isInitialCall) { + set_variable(script, *script->ptrReadPos, gPlayerData.curHP); + return ApiStatus_DONE2; +} + INCLUDE_ASM(s32, "code_197F40", PlayerDamageEnemy); diff --git a/tools/symbol_addrs.txt b/tools/symbol_addrs.txt index cfe9b9120e..c2e2448c09 100644 --- a/tools/symbol_addrs.txt +++ b/tools/symbol_addrs.txt @@ -242,7 +242,7 @@ GetPartTargetFlags;0x8026D2AC GetPartYaw;0x8026B4C0 GetPartnerPos;0x802CF438 GetPlayerActionState;0x802D1DD0 -GetPlayerActorID;0x8026E974 +GetAttackerActorID;0x8026E974 GetPlayerAnimation;0x802D1E94 GetPlayerHP;0x80274234 GetPlayerPos;0x802D1DFC @@ -1879,3 +1879,7 @@ SetTattleString;0x80045A58 gPauseMenuStrings;0x8026F778 gEffectTable;0x8007F214 gMoveScriptTable;0x80293E80 +gStaticScriptCounter;0x802D9CA0 +D_802D9CA4;0x802D9CA4 +gGlobalTimeSpace;0x802D9CA8 +gBattleState;0x800DC068 diff --git a/undefined_syms.txt b/undefined_syms.txt index 838ecab45b..7a21c80f4c 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -13,9 +13,6 @@ gWorldScriptList = 0x802DA490; gBattleScriptList = 0x802DA690; gNumScripts = 0x802DA488; gCurrentScriptListPtr = 0x802DA890; -gStaticScriptCounter = 0x802D9CA0; -D_802D9CA4 = 0x802D9CA4; -gGlobalTimeSpace = 0x802D9CA8; gPlayerNpcPtr = 0x802D9D20; D_80147574 = 0x80147574; D_8010EBB0 = 0x8010EBB0; @@ -59,6 +56,7 @@ D_8010F094 = 0x8010F094; D_800D9620 = 0x800D9620; +gBattleState = 0x800DC068; gBattleStatus = 0x800DC070; mapScriptLibStart = 0x7E0E80; From 67b516d3d24d6e6a564dbe141d155146a0686ebb Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Fri, 16 Oct 2020 18:23:52 -0400 Subject: [PATCH 10/22] :arrow: --- .../code_190B20/add_actor_decoration.s | 41 ---- asm/nonmatchings/code_190B20/get_defense.s | 155 ------------- .../code_190B20/remove_player_buffs.s | 217 ------------------ include/common_structs.h | 39 +++- src/code_190B20.c | 163 ++++++++++++- 5 files changed, 188 insertions(+), 427 deletions(-) delete mode 100644 asm/nonmatchings/code_190B20/add_actor_decoration.s delete mode 100644 asm/nonmatchings/code_190B20/get_defense.s delete mode 100644 asm/nonmatchings/code_190B20/remove_player_buffs.s diff --git a/asm/nonmatchings/code_190B20/add_actor_decoration.s b/asm/nonmatchings/code_190B20/add_actor_decoration.s deleted file mode 100644 index 7a09ec251a..0000000000 --- a/asm/nonmatchings/code_190B20/add_actor_decoration.s +++ /dev/null @@ -1,41 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel add_actor_decoration -/* 195A70 80267190 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 195A74 80267194 AFB20018 */ sw $s2, 0x18($sp) -/* 195A78 80267198 00A0902D */ daddu $s2, $a1, $zero -/* 195A7C 8026719C AFBF0020 */ sw $ra, 0x20($sp) -/* 195A80 802671A0 AFB3001C */ sw $s3, 0x1c($sp) -/* 195A84 802671A4 AFB10014 */ sw $s1, 0x14($sp) -/* 195A88 802671A8 AFB00010 */ sw $s0, 0x10($sp) -/* 195A8C 802671AC 8C9001F4 */ lw $s0, 0x1f4($a0) -/* 195A90 802671B0 12000012 */ beqz $s0, .L802671FC -/* 195A94 802671B4 00C0982D */ daddu $s3, $a2, $zero -/* 195A98 802671B8 3C110010 */ lui $s1, 0x10 -/* 195A9C 802671BC 36310001 */ ori $s1, $s1, 1 -.L802671C0: -/* 195AA0 802671C0 8E030000 */ lw $v1, ($s0) -/* 195AA4 802671C4 00711024 */ and $v0, $v1, $s1 -/* 195AA8 802671C8 14400009 */ bnez $v0, .L802671F0 -/* 195AAC 802671CC 00000000 */ nop -/* 195AB0 802671D0 8E020094 */ lw $v0, 0x94($s0) -/* 195AB4 802671D4 10400006 */ beqz $v0, .L802671F0 -/* 195AB8 802671D8 30620002 */ andi $v0, $v1, 2 -/* 195ABC 802671DC 14400004 */ bnez $v0, .L802671F0 -/* 195AC0 802671E0 0200202D */ daddu $a0, $s0, $zero -/* 195AC4 802671E4 0240282D */ daddu $a1, $s2, $zero -/* 195AC8 802671E8 0C099C45 */ jal add_part_decoration -/* 195ACC 802671EC 0260302D */ daddu $a2, $s3, $zero -.L802671F0: -/* 195AD0 802671F0 8E10000C */ lw $s0, 0xc($s0) -/* 195AD4 802671F4 1600FFF2 */ bnez $s0, .L802671C0 -/* 195AD8 802671F8 00000000 */ nop -.L802671FC: -/* 195ADC 802671FC 8FBF0020 */ lw $ra, 0x20($sp) -/* 195AE0 80267200 8FB3001C */ lw $s3, 0x1c($sp) -/* 195AE4 80267204 8FB20018 */ lw $s2, 0x18($sp) -/* 195AE8 80267208 8FB10014 */ lw $s1, 0x14($sp) -/* 195AEC 8026720C 8FB00010 */ lw $s0, 0x10($sp) -/* 195AF0 80267210 03E00008 */ jr $ra -/* 195AF4 80267214 27BD0028 */ addiu $sp, $sp, 0x28 diff --git a/asm/nonmatchings/code_190B20/get_defense.s b/asm/nonmatchings/code_190B20/get_defense.s deleted file mode 100644 index 07590070a6..0000000000 --- a/asm/nonmatchings/code_190B20/get_defense.s +++ /dev/null @@ -1,155 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel get_defense -/* 194B9C 802662BC 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 194BA0 802662C0 AFB10014 */ sw $s1, 0x14($sp) -/* 194BA4 802662C4 00A0882D */ daddu $s1, $a1, $zero -/* 194BA8 802662C8 AFB20018 */ sw $s2, 0x18($sp) -/* 194BAC 802662CC 00C0902D */ daddu $s2, $a2, $zero -/* 194BB0 802662D0 AFB00010 */ sw $s0, 0x10($sp) -/* 194BB4 802662D4 241000FF */ addiu $s0, $zero, 0xff -/* 194BB8 802662D8 12200065 */ beqz $s1, .L80266470 -/* 194BBC 802662DC AFBF001C */ sw $ra, 0x1c($sp) -/* 194BC0 802662E0 32420002 */ andi $v0, $s2, 2 -/* 194BC4 802662E4 10400007 */ beqz $v0, .L80266304 -/* 194BC8 802662E8 0220202D */ daddu $a0, $s1, $zero -/* 194BCC 802662EC 0C099791 */ jal lookup_defense -/* 194BD0 802662F0 24050002 */ addiu $a1, $zero, 2 -/* 194BD4 802662F4 0040182D */ daddu $v1, $v0, $zero -/* 194BD8 802662F8 0070102A */ slt $v0, $v1, $s0 -/* 194BDC 802662FC 54400001 */ bnel $v0, $zero, .L80266304 -/* 194BE0 80266300 0060802D */ daddu $s0, $v1, $zero -.L80266304: -/* 194BE4 80266304 32420004 */ andi $v0, $s2, 4 -/* 194BE8 80266308 10400007 */ beqz $v0, .L80266328 -/* 194BEC 8026630C 0220202D */ daddu $a0, $s1, $zero -/* 194BF0 80266310 0C099791 */ jal lookup_defense -/* 194BF4 80266314 24050003 */ addiu $a1, $zero, 3 -/* 194BF8 80266318 0040182D */ daddu $v1, $v0, $zero -/* 194BFC 8026631C 0070102A */ slt $v0, $v1, $s0 -/* 194C00 80266320 54400001 */ bnel $v0, $zero, .L80266328 -/* 194C04 80266324 0060802D */ daddu $s0, $v1, $zero -.L80266328: -/* 194C08 80266328 32420008 */ andi $v0, $s2, 8 -/* 194C0C 8026632C 10400007 */ beqz $v0, .L8026634C -/* 194C10 80266330 0220202D */ daddu $a0, $s1, $zero -/* 194C14 80266334 0C099791 */ jal lookup_defense -/* 194C18 80266338 24050004 */ addiu $a1, $zero, 4 -/* 194C1C 8026633C 0040182D */ daddu $v1, $v0, $zero -/* 194C20 80266340 0070102A */ slt $v0, $v1, $s0 -/* 194C24 80266344 54400001 */ bnel $v0, $zero, .L8026634C -/* 194C28 80266348 0060802D */ daddu $s0, $v1, $zero -.L8026634C: -/* 194C2C 8026634C 32420010 */ andi $v0, $s2, 0x10 -/* 194C30 80266350 10400007 */ beqz $v0, .L80266370 -/* 194C34 80266354 0220202D */ daddu $a0, $s1, $zero -/* 194C38 80266358 0C099791 */ jal lookup_defense -/* 194C3C 8026635C 24050007 */ addiu $a1, $zero, 7 -/* 194C40 80266360 0040182D */ daddu $v1, $v0, $zero -/* 194C44 80266364 0070102A */ slt $v0, $v1, $s0 -/* 194C48 80266368 54400001 */ bnel $v0, $zero, .L80266370 -/* 194C4C 8026636C 0060802D */ daddu $s0, $v1, $zero -.L80266370: -/* 194C50 80266370 32420040 */ andi $v0, $s2, 0x40 -/* 194C54 80266374 10400007 */ beqz $v0, .L80266394 -/* 194C58 80266378 0220202D */ daddu $a0, $s1, $zero -/* 194C5C 8026637C 0C099791 */ jal lookup_defense -/* 194C60 80266380 24050008 */ addiu $a1, $zero, 8 -/* 194C64 80266384 0040182D */ daddu $v1, $v0, $zero -/* 194C68 80266388 0070102A */ slt $v0, $v1, $s0 -/* 194C6C 8026638C 54400001 */ bnel $v0, $zero, .L80266394 -/* 194C70 80266390 0060802D */ daddu $s0, $v1, $zero -.L80266394: -/* 194C74 80266394 32420080 */ andi $v0, $s2, 0x80 -/* 194C78 80266398 10400007 */ beqz $v0, .L802663B8 -/* 194C7C 8026639C 0220202D */ daddu $a0, $s1, $zero -/* 194C80 802663A0 0C099791 */ jal lookup_defense -/* 194C84 802663A4 24050009 */ addiu $a1, $zero, 9 -/* 194C88 802663A8 0040182D */ daddu $v1, $v0, $zero -/* 194C8C 802663AC 0070102A */ slt $v0, $v1, $s0 -/* 194C90 802663B0 54400001 */ bnel $v0, $zero, .L802663B8 -/* 194C94 802663B4 0060802D */ daddu $s0, $v1, $zero -.L802663B8: -/* 194C98 802663B8 32420100 */ andi $v0, $s2, 0x100 -/* 194C9C 802663BC 10400007 */ beqz $v0, .L802663DC -/* 194CA0 802663C0 0220202D */ daddu $a0, $s1, $zero -/* 194CA4 802663C4 0C099791 */ jal lookup_defense -/* 194CA8 802663C8 2405000A */ addiu $a1, $zero, 0xa -/* 194CAC 802663CC 0040182D */ daddu $v1, $v0, $zero -/* 194CB0 802663D0 0070102A */ slt $v0, $v1, $s0 -/* 194CB4 802663D4 54400001 */ bnel $v0, $zero, .L802663DC -/* 194CB8 802663D8 0060802D */ daddu $s0, $v1, $zero -.L802663DC: -/* 194CBC 802663DC 32420200 */ andi $v0, $s2, 0x200 -/* 194CC0 802663E0 10400007 */ beqz $v0, .L80266400 -/* 194CC4 802663E4 0220202D */ daddu $a0, $s1, $zero -/* 194CC8 802663E8 0C099791 */ jal lookup_defense -/* 194CCC 802663EC 2405000B */ addiu $a1, $zero, 0xb -/* 194CD0 802663F0 0040182D */ daddu $v1, $v0, $zero -/* 194CD4 802663F4 0070102A */ slt $v0, $v1, $s0 -/* 194CD8 802663F8 54400001 */ bnel $v0, $zero, .L80266400 -/* 194CDC 802663FC 0060802D */ daddu $s0, $v1, $zero -.L80266400: -/* 194CE0 80266400 32420020 */ andi $v0, $s2, 0x20 -/* 194CE4 80266404 10400007 */ beqz $v0, .L80266424 -/* 194CE8 80266408 0220202D */ daddu $a0, $s1, $zero -/* 194CEC 8026640C 0C099791 */ jal lookup_defense -/* 194CF0 80266410 2405000C */ addiu $a1, $zero, 0xc -/* 194CF4 80266414 0040182D */ daddu $v1, $v0, $zero -/* 194CF8 80266418 0070102A */ slt $v0, $v1, $s0 -/* 194CFC 8026641C 54400001 */ bnel $v0, $zero, .L80266424 -/* 194D00 80266420 0060802D */ daddu $s0, $v1, $zero -.L80266424: -/* 194D04 80266424 32420800 */ andi $v0, $s2, 0x800 -/* 194D08 80266428 10400007 */ beqz $v0, .L80266448 -/* 194D0C 8026642C 0220202D */ daddu $a0, $s1, $zero -/* 194D10 80266430 0C099791 */ jal lookup_defense -/* 194D14 80266434 2405000D */ addiu $a1, $zero, 0xd -/* 194D18 80266438 0040182D */ daddu $v1, $v0, $zero -/* 194D1C 8026643C 0070102A */ slt $v0, $v1, $s0 -/* 194D20 80266440 54400001 */ bnel $v0, $zero, .L80266448 -/* 194D24 80266444 0060802D */ daddu $s0, $v1, $zero -.L80266448: -/* 194D28 80266448 3C020004 */ lui $v0, 4 -/* 194D2C 8026644C 02421024 */ and $v0, $s2, $v0 -/* 194D30 80266450 10400007 */ beqz $v0, .L80266470 -/* 194D34 80266454 0220202D */ daddu $a0, $s1, $zero -/* 194D38 80266458 0C099791 */ jal lookup_defense -/* 194D3C 8026645C 2405000F */ addiu $a1, $zero, 0xf -/* 194D40 80266460 0040182D */ daddu $v1, $v0, $zero -/* 194D44 80266464 0070102A */ slt $v0, $v1, $s0 -/* 194D48 80266468 54400001 */ bnel $v0, $zero, .L80266470 -/* 194D4C 8026646C 0060802D */ daddu $s0, $v1, $zero -.L80266470: -/* 194D50 80266470 240200FF */ addiu $v0, $zero, 0xff -/* 194D54 80266474 16020009 */ bne $s0, $v0, .L8026649C -/* 194D58 80266478 3C020800 */ lui $v0, 0x800 -/* 194D5C 8026647C 0220202D */ daddu $a0, $s1, $zero -/* 194D60 80266480 0C099791 */ jal lookup_defense -/* 194D64 80266484 24050001 */ addiu $a1, $zero, 1 -/* 194D68 80266488 0040182D */ daddu $v1, $v0, $zero -/* 194D6C 8026648C 286200FF */ slti $v0, $v1, 0xff -/* 194D70 80266490 54400001 */ bnel $v0, $zero, .L80266498 -/* 194D74 80266494 0060802D */ daddu $s0, $v1, $zero -.L80266498: -/* 194D78 80266498 3C020800 */ lui $v0, 0x800 -.L8026649C: -/* 194D7C 8026649C 02421024 */ and $v0, $s2, $v0 -/* 194D80 802664A0 10400007 */ beqz $v0, .L802664C0 -/* 194D84 802664A4 24020063 */ addiu $v0, $zero, 0x63 -/* 194D88 802664A8 16020003 */ bne $s0, $v0, .L802664B8 -/* 194D8C 802664AC 00000000 */ nop -/* 194D90 802664B0 08099930 */ j .L802664C0 -/* 194D94 802664B4 241003E7 */ addiu $s0, $zero, 0x3e7 -.L802664B8: -/* 194D98 802664B8 5E000001 */ bgtzl $s0, .L802664C0 -/* 194D9C 802664BC 0000802D */ daddu $s0, $zero, $zero -.L802664C0: -/* 194DA0 802664C0 0200102D */ daddu $v0, $s0, $zero -/* 194DA4 802664C4 8FBF001C */ lw $ra, 0x1c($sp) -/* 194DA8 802664C8 8FB20018 */ lw $s2, 0x18($sp) -/* 194DAC 802664CC 8FB10014 */ lw $s1, 0x14($sp) -/* 194DB0 802664D0 8FB00010 */ lw $s0, 0x10($sp) -/* 194DB4 802664D4 03E00008 */ jr $ra -/* 194DB8 802664D8 27BD0020 */ addiu $sp, $sp, 0x20 diff --git a/asm/nonmatchings/code_190B20/remove_player_buffs.s b/asm/nonmatchings/code_190B20/remove_player_buffs.s deleted file mode 100644 index bc7d22feaf..0000000000 --- a/asm/nonmatchings/code_190B20/remove_player_buffs.s +++ /dev/null @@ -1,217 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel remove_player_buffs -/* 195D34 80267454 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 195D38 80267458 AFB30024 */ sw $s3, 0x24($sp) -/* 195D3C 8026745C 0080982D */ daddu $s3, $a0, $zero -/* 195D40 80267460 AFB20020 */ sw $s2, 0x20($sp) -/* 195D44 80267464 3C12800E */ lui $s2, %hi(gBattleStatus) -/* 195D48 80267468 2652C070 */ addiu $s2, $s2, %lo(gBattleStatus) -/* 195D4C 8026746C 32620001 */ andi $v0, $s3, 1 -/* 195D50 80267470 AFBF002C */ sw $ra, 0x2c($sp) -/* 195D54 80267474 AFB40028 */ sw $s4, 0x28($sp) -/* 195D58 80267478 AFB1001C */ sw $s1, 0x1c($sp) -/* 195D5C 8026747C AFB00018 */ sw $s0, 0x18($sp) -/* 195D60 80267480 F7B80040 */ sdc1 $f24, 0x40($sp) -/* 195D64 80267484 F7B60038 */ sdc1 $f22, 0x38($sp) -/* 195D68 80267488 F7B40030 */ sdc1 $f20, 0x30($sp) -/* 195D6C 8026748C 8E5100D8 */ lw $s1, 0xd8($s2) -/* 195D70 80267490 8E5400DC */ lw $s4, 0xdc($s2) -/* 195D74 80267494 8E3001F4 */ lw $s0, 0x1f4($s1) -/* 195D78 80267498 10400006 */ beqz $v0, .L802674B4 -/* 195D7C 8026749C 3C03DFFF */ lui $v1, 0xdfff -/* 195D80 802674A0 8E420000 */ lw $v0, ($s2) -/* 195D84 802674A4 3463FFFF */ ori $v1, $v1, 0xffff -/* 195D88 802674A8 A2400097 */ sb $zero, 0x97($s2) -/* 195D8C 802674AC 00431024 */ and $v0, $v0, $v1 -/* 195D90 802674B0 AE420000 */ sw $v0, ($s2) -.L802674B4: -/* 195D94 802674B4 32620002 */ andi $v0, $s3, 2 -/* 195D98 802674B8 10400006 */ beqz $v0, .L802674D4 -/* 195D9C 802674BC 3C03EFFF */ lui $v1, 0xefff -/* 195DA0 802674C0 8E420000 */ lw $v0, ($s2) -/* 195DA4 802674C4 3463FFFF */ ori $v1, $v1, 0xffff -/* 195DA8 802674C8 A2400096 */ sb $zero, 0x96($s2) -/* 195DAC 802674CC 00431024 */ and $v0, $v0, $v1 -/* 195DB0 802674D0 AE420000 */ sw $v0, ($s2) -.L802674D4: -/* 195DB4 802674D4 32620008 */ andi $v0, $s3, 8 -/* 195DB8 802674D8 10400003 */ beqz $v0, .L802674E8 -/* 195DBC 802674DC 32620010 */ andi $v0, $s3, 0x10 -/* 195DC0 802674E0 A2200215 */ sb $zero, 0x215($s1) -/* 195DC4 802674E4 A2200214 */ sb $zero, 0x214($s1) -.L802674E8: -/* 195DC8 802674E8 10400006 */ beqz $v0, .L80267504 -/* 195DCC 802674EC 3C03FBFF */ lui $v1, 0xfbff -/* 195DD0 802674F0 8E420000 */ lw $v0, ($s2) -/* 195DD4 802674F4 3463FFFF */ ori $v1, $v1, 0xffff -/* 195DD8 802674F8 A240008B */ sb $zero, 0x8b($s2) -/* 195DDC 802674FC 00431024 */ and $v0, $v0, $v1 -/* 195DE0 80267500 AE420000 */ sw $v0, ($s2) -.L80267504: -/* 195DE4 80267504 32620020 */ andi $v0, $s3, 0x20 -/* 195DE8 80267508 10400009 */ beqz $v0, .L80267530 -/* 195DEC 8026750C 32620040 */ andi $v0, $s3, 0x40 -/* 195DF0 80267510 82220212 */ lb $v0, 0x212($s1) -/* 195DF4 80267514 10400006 */ beqz $v0, .L80267530 -/* 195DF8 80267518 32620040 */ andi $v0, $s3, 0x40 -/* 195DFC 8026751C 86240436 */ lh $a0, 0x436($s1) -/* 195E00 80267520 A2200213 */ sb $zero, 0x213($s1) -/* 195E04 80267524 0C011E68 */ jal func_800479A0 -/* 195E08 80267528 A2200212 */ sb $zero, 0x212($s1) -/* 195E0C 8026752C 32620040 */ andi $v0, $s3, 0x40 -.L80267530: -/* 195E10 80267530 1040000C */ beqz $v0, .L80267564 -/* 195E14 80267534 32620200 */ andi $v0, $s3, 0x200 -/* 195E18 80267538 82220218 */ lb $v0, 0x218($s1) -/* 195E1C 8026753C 10400008 */ beqz $v0, .L80267560 -/* 195E20 80267540 2403FEFF */ addiu $v1, $zero, -0x101 -/* 195E24 80267544 A2200219 */ sb $zero, 0x219($s1) -/* 195E28 80267548 A2200218 */ sb $zero, 0x218($s1) -/* 195E2C 8026754C 8E020000 */ lw $v0, ($s0) -/* 195E30 80267550 00431024 */ and $v0, $v0, $v1 -/* 195E34 80267554 AE020000 */ sw $v0, ($s0) -/* 195E38 80267558 0C011EAA */ jal func_80047AA8 -/* 195E3C 8026755C 86240436 */ lh $a0, 0x436($s1) -.L80267560: -/* 195E40 80267560 32620200 */ andi $v0, $s3, 0x200 -.L80267564: -/* 195E44 80267564 10400058 */ beqz $v0, .L802676C8 -/* 195E48 80267568 32620100 */ andi $v0, $s3, 0x100 -/* 195E4C 8026756C 8242009D */ lb $v0, 0x9d($s2) -/* 195E50 80267570 10400055 */ beqz $v0, .L802676C8 -/* 195E54 80267574 32620100 */ andi $v0, $s3, 0x100 -/* 195E58 80267578 8E42043C */ lw $v0, 0x43c($s2) -/* 195E5C 8026757C 3C013FC0 */ lui $at, 0x3fc0 -/* 195E60 80267580 44811000 */ mtc1 $at, $f2 -/* 195E64 80267584 A240009D */ sb $zero, 0x9d($s2) -/* 195E68 80267588 8C42000C */ lw $v0, 0xc($v0) -/* 195E6C 8026758C A4400010 */ sh $zero, 0x10($v0) -/* 195E70 80267590 8E4300A0 */ lw $v1, 0xa0($s2) -/* 195E74 80267594 3C014190 */ lui $at, 0x4190 -/* 195E78 80267598 44810000 */ mtc1 $at, $f0 -/* 195E7C 8026759C 8C620000 */ lw $v0, ($v1) -/* 195E80 802675A0 3C0140A0 */ lui $at, 0x40a0 -/* 195E84 802675A4 4481A000 */ mtc1 $at, $f20 -/* 195E88 802675A8 34420010 */ ori $v0, $v0, 0x10 -/* 195E8C 802675AC AC620000 */ sw $v0, ($v1) -/* 195E90 802675B0 2402000A */ addiu $v0, $zero, 0xa -/* 195E94 802675B4 C6240148 */ lwc1 $f4, 0x148($s1) -/* 195E98 802675B8 C626014C */ lwc1 $f6, 0x14c($s1) -/* 195E9C 802675BC 46002100 */ add.s $f4, $f4, $f0 -/* 195EA0 802675C0 E7A20010 */ swc1 $f2, 0x10($sp) -/* 195EA4 802675C4 AFA20014 */ sw $v0, 0x14($sp) -/* 195EA8 802675C8 46143180 */ add.s $f6, $f6, $f20 -/* 195EAC 802675CC 8E250144 */ lw $a1, 0x144($s1) -/* 195EB0 802675D0 44062000 */ mfc1 $a2, $f4 -/* 195EB4 802675D4 44073000 */ mfc1 $a3, $f6 -/* 195EB8 802675D8 0C01C694 */ jal func_80071A50 -/* 195EBC 802675DC 24040001 */ addiu $a0, $zero, 1 -/* 195EC0 802675E0 C6220144 */ lwc1 $f2, 0x144($s1) -/* 195EC4 802675E4 3C014120 */ lui $at, 0x4120 -/* 195EC8 802675E8 44810000 */ mtc1 $at, $f0 -/* 195ECC 802675EC 00000000 */ nop -/* 195ED0 802675F0 46001081 */ sub.s $f2, $f2, $f0 -/* 195ED4 802675F4 C6200148 */ lwc1 $f0, 0x148($s1) -/* 195ED8 802675F8 46140000 */ add.s $f0, $f0, $f20 -/* 195EDC 802675FC 44060000 */ mfc1 $a2, $f0 -/* 195EE0 80267600 C620014C */ lwc1 $f0, 0x14c($s1) -/* 195EE4 80267604 0000202D */ daddu $a0, $zero, $zero -/* 195EE8 80267608 46140000 */ add.s $f0, $f0, $f20 -/* 195EEC 8026760C 3C013F80 */ lui $at, 0x3f80 -/* 195EF0 80267610 4481B000 */ mtc1 $at, $f22 -/* 195EF4 80267614 44051000 */ mfc1 $a1, $f2 -/* 195EF8 80267618 44070000 */ mfc1 $a3, $f0 -/* 195EFC 8026761C 24100018 */ addiu $s0, $zero, 0x18 -/* 195F00 80267620 E7B60010 */ swc1 $f22, 0x10($sp) -/* 195F04 80267624 0C01C70C */ jal func_80071C30 -/* 195F08 80267628 AFB00014 */ sw $s0, 0x14($sp) -/* 195F0C 8026762C C6200144 */ lwc1 $f0, 0x144($s1) -/* 195F10 80267630 3C014170 */ lui $at, 0x4170 -/* 195F14 80267634 4481C000 */ mtc1 $at, $f24 -/* 195F18 80267638 00000000 */ nop -/* 195F1C 8026763C 46180001 */ sub.s $f0, $f0, $f24 -/* 195F20 80267640 C6220148 */ lwc1 $f2, 0x148($s1) -/* 195F24 80267644 44050000 */ mfc1 $a1, $f0 -/* 195F28 80267648 3C014200 */ lui $at, 0x4200 -/* 195F2C 8026764C 44810000 */ mtc1 $at, $f0 -/* 195F30 80267650 00000000 */ nop -/* 195F34 80267654 46001080 */ add.s $f2, $f2, $f0 -/* 195F38 80267658 C620014C */ lwc1 $f0, 0x14c($s1) -/* 195F3C 8026765C 46140000 */ add.s $f0, $f0, $f20 -/* 195F40 80267660 44061000 */ mfc1 $a2, $f2 -/* 195F44 80267664 44070000 */ mfc1 $a3, $f0 -/* 195F48 80267668 0000202D */ daddu $a0, $zero, $zero -/* 195F4C 8026766C E7B60010 */ swc1 $f22, 0x10($sp) -/* 195F50 80267670 0C01C70C */ jal func_80071C30 -/* 195F54 80267674 AFB00014 */ sw $s0, 0x14($sp) -/* 195F58 80267678 C6200144 */ lwc1 $f0, 0x144($s1) -/* 195F5C 8026767C 46180000 */ add.s $f0, $f0, $f24 -/* 195F60 80267680 C6220148 */ lwc1 $f2, 0x148($s1) -/* 195F64 80267684 44050000 */ mfc1 $a1, $f0 -/* 195F68 80267688 3C0141B0 */ lui $at, 0x41b0 -/* 195F6C 8026768C 44810000 */ mtc1 $at, $f0 -/* 195F70 80267690 00000000 */ nop -/* 195F74 80267694 46001080 */ add.s $f2, $f2, $f0 -/* 195F78 80267698 C620014C */ lwc1 $f0, 0x14c($s1) -/* 195F7C 8026769C 46140000 */ add.s $f0, $f0, $f20 -/* 195F80 802676A0 44061000 */ mfc1 $a2, $f2 -/* 195F84 802676A4 44070000 */ mfc1 $a3, $f0 -/* 195F88 802676A8 24040001 */ addiu $a0, $zero, 1 -/* 195F8C 802676AC E7B60010 */ swc1 $f22, 0x10($sp) -/* 195F90 802676B0 0C01C70C */ jal func_80071C30 -/* 195F94 802676B4 AFB00014 */ sw $s0, 0x14($sp) -/* 195F98 802676B8 24040299 */ addiu $a0, $zero, 0x299 -/* 195F9C 802676BC 0C05272D */ jal play_sound -/* 195FA0 802676C0 AE4000A0 */ sw $zero, 0xa0($s2) -/* 195FA4 802676C4 32620100 */ andi $v0, $s3, 0x100 -.L802676C8: -/* 195FA8 802676C8 10400009 */ beqz $v0, .L802676F0 -/* 195FAC 802676CC 32620080 */ andi $v0, $s3, 0x80 -/* 195FB0 802676D0 8242009B */ lb $v0, 0x9b($s2) -/* 195FB4 802676D4 10400006 */ beqz $v0, .L802676F0 -/* 195FB8 802676D8 32620080 */ andi $v0, $s3, 0x80 -/* 195FBC 802676DC 8E42043C */ lw $v0, 0x43c($s2) -/* 195FC0 802676E0 A240009B */ sb $zero, 0x9b($s2) -/* 195FC4 802676E4 8C42000C */ lw $v0, 0xc($v0) -/* 195FC8 802676E8 A4400024 */ sh $zero, 0x24($v0) -/* 195FCC 802676EC 32620080 */ andi $v0, $s3, 0x80 -.L802676F0: -/* 195FD0 802676F0 1040000B */ beqz $v0, .L80267720 -/* 195FD4 802676F4 00000000 */ nop -/* 195FD8 802676F8 824200A4 */ lb $v0, 0xa4($s2) -/* 195FDC 802676FC 10400008 */ beqz $v0, .L80267720 -/* 195FE0 80267700 00000000 */ nop -/* 195FE4 80267704 8E42043C */ lw $v0, 0x43c($s2) -/* 195FE8 80267708 A24000A4 */ sb $zero, 0xa4($s2) -/* 195FEC 8026770C 8C42000C */ lw $v0, 0xc($v0) -/* 195FF0 80267710 A440001A */ sh $zero, 0x1a($v0) -/* 195FF4 80267714 0C016914 */ jal remove_effect -/* 195FF8 80267718 8E4400A8 */ lw $a0, 0xa8($s2) -/* 195FFC 8026771C AE4000A8 */ sw $zero, 0xa8($s2) -.L80267720: -/* 196000 80267720 1280000B */ beqz $s4, .L80267750 -/* 196004 80267724 3C020001 */ lui $v0, 1 -/* 196008 80267728 02621024 */ and $v0, $s3, $v0 -/* 19600C 8026772C 10400008 */ beqz $v0, .L80267750 -/* 196010 80267730 3C04BFFF */ lui $a0, 0xbfff -/* 196014 80267734 3C03800E */ lui $v1, %hi(gBattleStatus) -/* 196018 80267738 2463C070 */ addiu $v1, $v1, %lo(gBattleStatus) -/* 19601C 8026773C A2800220 */ sb $zero, 0x220($s4) -/* 196020 80267740 8C620000 */ lw $v0, ($v1) -/* 196024 80267744 3484FFFF */ ori $a0, $a0, 0xffff -/* 196028 80267748 00441024 */ and $v0, $v0, $a0 -/* 19602C 8026774C AC620000 */ sw $v0, ($v1) -.L80267750: -/* 196030 80267750 8FBF002C */ lw $ra, 0x2c($sp) -/* 196034 80267754 8FB40028 */ lw $s4, 0x28($sp) -/* 196038 80267758 8FB30024 */ lw $s3, 0x24($sp) -/* 19603C 8026775C 8FB20020 */ lw $s2, 0x20($sp) -/* 196040 80267760 8FB1001C */ lw $s1, 0x1c($sp) -/* 196044 80267764 8FB00018 */ lw $s0, 0x18($sp) -/* 196048 80267768 D7B80040 */ ldc1 $f24, 0x40($sp) -/* 19604C 8026776C D7B60038 */ ldc1 $f22, 0x38($sp) -/* 196050 80267770 D7B40030 */ ldc1 $f20, 0x30($sp) -/* 196054 80267774 03E00008 */ jr $ra -/* 196058 80267778 27BD0048 */ addiu $sp, $sp, 0x48 diff --git a/include/common_structs.h b/include/common_structs.h index 99de498391..0a5f3aba8e 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -524,6 +524,20 @@ typedef struct Camera { /* 0x538 */ char unk_538[32]; } Camera; // size = 0x558 +typedef struct BattleStatusUnkInner { + /* 0x00 */ char unk_00[0x10]; + /* 0x10 */ s16 unk_10; + /* 0x12 */ char unk_12[8]; + /* 0x1A */ s16 unk_1A; + /* 0x1C */ char unk_1C[8]; + /* 0x24 */ s16 unk_24; +} BattleStatusUnkInner; // size = unknown + +typedef struct BattleStatusUnk { + /* 0x00 */ char unk_00[0xC]; + /* 0x0C */ BattleStatusUnkInner* unk_0C; +} BattleStatusUnk; // size = unknown + typedef struct BattleStatus { /* 0x000 */ s32 flags1; /* 0x004 */ s32 flags2; @@ -552,17 +566,18 @@ typedef struct BattleStatus { /* 0x08C */ char unk_8C[2]; /* 0x08E */ u8 initialEnemyCount; /* used for SP award bonus */ /* 0x08F */ char unk_8F[7]; - /* 0x096 */ u8 hammerCharge; - /* 0x097 */ u8 jumpCharge; + /* 0x096 */ s8 hammerCharge; + /* 0x097 */ s8 jumpCharge; /* 0x098 */ char unk_98; /* 0x099 */ u8 dangerFlags; /* 1 = danger, 2 = peril */ /* 0x09A */ u8 outtaSightActive; - /* 0x09B */ u8 turboChargeTurnsLeft; + /* 0x09B */ s8 turboChargeTurnsLeft; /* 0x09C */ u8 turboChargeAmount; /* unused? */ - /* 0x09D */ u8 waterBlockTurnsLeft; + /* 0x09D */ s8 waterBlockTurnsLeft; /* 0x09E */ u8 waterBlockAmount; /* unused? */ - /* 0x09F */ char unk_9F[5]; - /* 0x0A4 */ u8 cloudNineTurnsLeft; + /* 0x09F */ char unk_9F; + /* 0x0A0 */ s32* unk_A0; + /* 0x0A4 */ s8 cloudNineTurnsLeft; /* 0x0A5 */ u8 cloudNineDodgeChance; /* = 50% */ /* 0x0A6 */ char unk_A6[2]; /* 0x0A8 */ s32 cloudNineEffect; @@ -631,7 +646,7 @@ typedef struct BattleStatus { /* 0x432 */ char unk_432[2]; /* 0x434 */ s32 unk_434; /* 0x438 */ s32* foregroundModelList; - /* 0x43C */ UNK_PTR turboChargeCounter; + /* 0x43C */ BattleStatusUnk* unk_43C; /* 0x440 */ u8 tattleFlags[27]; /* 0x45B */ char unk_45B[17]; /* 0x46C */ s32 battleState; /* 0 = load assets, 1 = create actors, 4 = start scripts, 7 & 8 = unk */ @@ -1286,20 +1301,20 @@ typedef struct Actor { /* 0x20C */ u32* statusTable; /* 0x210 */ u8 debuff; /* 0x211 */ u8 debuffDuration; - /* 0x212 */ u8 staticStatus; /* 0B = yes */ + /* 0x212 */ s8 staticStatus; /* 0B = yes */ /* 0x213 */ u8 staticDuration; /* 0x214 */ s8 stoneStatus; /* 0C = yes */ /* 0x215 */ u8 stoneDuration; /* 0x216 */ u8 koStatus; /* 0D = yes */ /* 0x217 */ u8 koDuration; - /* 0x218 */ u8 transStatus; /* 0E = yes */ + /* 0x218 */ s8 transStatus; /* 0E = yes */ /* 0x219 */ u8 transDuration; /* 0x21A */ char unk_21A[2]; /* 0x21C */ u8 status; /* 0x21D */ char unk_21D[3]; - /* 0x220 */ u8 bGlowing; + /* 0x220 */ u8 isGlowing; /* 0x221 */ u8 attackBoost; - /* 0x222 */ u8 defenseBoost; + /* 0x222 */ s8 defenseBoost; /* 0x223 */ u8 chillOutAmount; /* attack reduction */ /* 0x224 */ u8 chillOutTurns; /* 0x225 */ char unk_225[7]; @@ -1314,7 +1329,7 @@ typedef struct Actor { /* 0x42C */ struct Shadow* shadow; /* might be shadow ID */ /* 0x430 */ f32 shadowScale; /* = actor size / 24.0 */ /* 0x434 */ s16 renderMode; /* initially 0xD, set to 0x22 if any part is transparent */ - /* 0x436 */ char unk_436[2]; + /* 0x436 */ s16 unk_436; /* 0x438 */ s32 x[2]; /* ??? see FUN_80253974 */ /* 0x440 */ struct MenuIcon* ptrDefuffIcon; } Actor; // size = 0x444 diff --git a/src/code_190B20.c b/src/code_190B20.c index 00bc7a4fa9..e9d58cd707 100644 --- a/src/code_190B20.c +++ b/src/code_190B20.c @@ -83,6 +83,7 @@ typedef struct { Element element; s32 defense; } DefenseTableEntry; + s32 lookup_defense(DefenseTableEntry* defenseTable, Element elementKey) { DefenseTableEntry* row; s32 normalDefense = 0; @@ -112,7 +113,99 @@ INCLUDE_ASM(s32, "code_190B20", inflict_status); INCLUDE_ASM(s32, "code_190B20", inflict_partner_ko); -INCLUDE_ASM(s32, "code_190B20", get_defense); +s32 get_defense(Actor* actor, s32* defenseTable, s32 elementFlags) { + s32 defense; + s32 minDefense = 0xFF; + + if (defenseTable != NULL) { + if (elementFlags & 2) { + defense = lookup_defense(defenseTable, Element_FIRE); + if (defense < minDefense) { + minDefense = defense; + } + } + if (elementFlags & 4) { + defense = lookup_defense(defenseTable, Element_WATER); + if (defense < minDefense) { + minDefense = defense; + } + } + if (elementFlags & 8) { + defense = lookup_defense(defenseTable, Element_ICE); + if (defense < minDefense) { + minDefense = defense; + } + } + // Element_MYSTERY missing? + if (elementFlags & 0x10) { + defense = lookup_defense(defenseTable, Element_MAGIC); + if (defense < minDefense) { + minDefense = defense; + } + } + if (elementFlags & 0x40) { + defense = lookup_defense(defenseTable, Element_HAMMER); + if (defense < minDefense) { + minDefense = defense; + } + } + if (elementFlags & 0x80) { + defense = lookup_defense(defenseTable, Element_JUMP); + if (defense < minDefense) { + minDefense = defense; + } + } + if (elementFlags & 0x100) { + defense = lookup_defense(defenseTable, Element_COSMIC); + if (defense < minDefense) { + minDefense = defense; + } + } + if (elementFlags & 0x200) { + defense = lookup_defense(defenseTable, Element_BLAST); + if (defense < minDefense) { + minDefense = defense; + } + } + if (elementFlags & 0x20) { + defense = lookup_defense(defenseTable, Element_SHOCK); + if (defense < minDefense) { + minDefense = defense; + } + } + if (elementFlags & 0x800) { + defense = lookup_defense(defenseTable, Element_QUAKE); + if (defense < minDefense) { + minDefense = defense; + } + } + if (elementFlags & 0x40000) { + defense = lookup_defense(defenseTable, Element_THROW); + if (defense < minDefense) { + minDefense = defense; + } + } + } + + // If no element flags were set, fall back to normal defense. + if (minDefense == 0xFF) { + defense = lookup_defense(defenseTable, Element_NORMAL); + if (defense < 0xFF) { + minDefense = defense; + } + } + + if (elementFlags & 0x8000000) { // "ignore defense" flag + if (minDefense == 99) { + // Immune + minDefense = 999; + } else if (minDefense > 0) { + minDefense = 0; + } + } + + return minDefense; +} INCLUDE_ASM(s32, "code_190B20", func_802664DC); @@ -241,7 +334,73 @@ void create_part_shadow_by_ptr(UNK_TYPE arg0, ActorPart* part) { part->shadowScale = part->size[0] / 24.0; } -INCLUDE_ASM(s32, "code_190B20", remove_player_buffs); +void func_80071A50(s32, f32 x, f32 y, f32 z, f32 scale /* maybe */, s32); +void func_80071C30(s32, f32 x, f32 y, f32 z, f32 scale /* maybe */, s32); + +void remove_player_buffs(PlayerBuff buffs) { + BattleStatus* battleStatus = &gBattleStatus; + Actor* player = battleStatus->playerActor; + Actor* partner = battleStatus->partnerActor; + ActorPart* playerPartsTable = player->partsTable; + + if (buffs & 1) { + battleStatus->jumpCharge = 0; + battleStatus->flags1 &= ~0x20000000; + } + if (buffs & 2) { + battleStatus->hammerCharge = 0; + battleStatus->flags1 &= ~0x10000000; + } + if (buffs & 8) { + player->stoneDuration = 0; + player->stoneStatus = 0; + } + if (buffs & 0x10) { + battleStatus->hustleTurns = 0; + battleStatus->flags1 &= ~0x04000000; + } + if ((buffs & 0x20) && (player->staticStatus != 0)) { + player->staticDuration = 0; + player->staticStatus = 0; + func_800479A0(player->unk_436); + } + if ((buffs & 0x40) && (player->transStatus != 0)) { + player->transDuration = 0; + player->transStatus = 0; + playerPartsTable->flags &= ~0x100; + func_80047AA8(player->unk_436); + } + if ((buffs & 0x200) && (battleStatus->waterBlockTurnsLeft != 0)) { + battleStatus->waterBlockTurnsLeft = 0; + battleStatus->unk_43C->unk_0C->unk_10 = 0; + battleStatus->unk_A0[0] |= 0x10; + + func_80071A50(1, player->currentPos.x, player->currentPos.y + 18.0f, player->currentPos.z + 5.0f, 1.5f, 0xA); + func_80071C30(0, player->currentPos.x - 10.0f, player->currentPos.y + 5.0f, player->currentPos.z + 5.0f, 1.0f, 0x18); + func_80071C30(0, player->currentPos.x - 15.0f, player->currentPos.y + 32.0f, player->currentPos.z + 5.0f, 1.0f, 0x18); + func_80071C30(1, player->currentPos.x + 15.0f, player->currentPos.y + 22.0f, player->currentPos.z + 5.0f, 1.0f, 0x18); + + battleStatus->unk_A0 = NULL; + play_sound(0x299); + } + if ((buffs & 0x100) && (battleStatus->turboChargeTurnsLeft != 0)) { + battleStatus->turboChargeTurnsLeft = 0; + battleStatus->unk_43C->unk_0C->unk_24 = 0; + } + if ((buffs & 0x80) && (battleStatus->cloudNineTurnsLeft != 0)) { + battleStatus->cloudNineTurnsLeft = 0; + battleStatus->unk_43C->unk_0C->unk_1A = 0; + remove_effect(battleStatus->cloudNineEffect); + battleStatus->cloudNineEffect = 0; + } + + if ((partner != NULL) && (buffs & 0x10000)) { + BattleStatus* bs = &gBattleStatus; + + partner->isGlowing = FALSE; + bs->flags1 &= ~0x40000000; + } +} INCLUDE_ASM(s32, "code_190B20", func_8026777C); From f67477a9eb71a389abd551f97dca8562b259be5b Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Fri, 16 Oct 2020 20:59:49 -0400 Subject: [PATCH 11/22] meowp --- .../code_190B20/inflict_partner_ko.s | 32 ------------------- include/common_structs.h | 16 +++++----- src/code_190B20.c | 22 +++++++++++-- 3 files changed, 28 insertions(+), 42 deletions(-) delete mode 100644 asm/nonmatchings/code_190B20/inflict_partner_ko.s diff --git a/asm/nonmatchings/code_190B20/inflict_partner_ko.s b/asm/nonmatchings/code_190B20/inflict_partner_ko.s deleted file mode 100644 index b3fb3ec0d8..0000000000 --- a/asm/nonmatchings/code_190B20/inflict_partner_ko.s +++ /dev/null @@ -1,32 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel inflict_partner_ko -/* 194B34 80266254 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 194B38 80266258 2402000D */ addiu $v0, $zero, 0xd -/* 194B3C 8026625C 14A20013 */ bne $a1, $v0, .L802662AC -/* 194B40 80266260 AFBF0010 */ sw $ra, 0x10($sp) -/* 194B44 80266264 80820216 */ lb $v0, 0x216($a0) -/* 194B48 80266268 10450007 */ beq $v0, $a1, .L80266288 -/* 194B4C 8026626C 00000000 */ nop -/* 194B50 80266270 0C0997D0 */ jal inflict_status -/* 194B54 80266274 2405000D */ addiu $a1, $zero, 0xd -/* 194B58 80266278 0C05272D */ jal play_sound -/* 194B5C 8026627C 24042107 */ addiu $a0, $zero, 0x2107 -/* 194B60 80266280 080998AB */ j .L802662AC -/* 194B64 80266284 00000000 */ nop -.L80266288: -/* 194B68 80266288 90820217 */ lbu $v0, 0x217($a0) -/* 194B6C 8026628C 00461021 */ addu $v0, $v0, $a2 -/* 194B70 80266290 A0820217 */ sb $v0, 0x217($a0) -/* 194B74 80266294 00021600 */ sll $v0, $v0, 0x18 -/* 194B78 80266298 00021603 */ sra $v0, $v0, 0x18 -/* 194B7C 8026629C 2842000A */ slti $v0, $v0, 0xa -/* 194B80 802662A0 14400002 */ bnez $v0, .L802662AC -/* 194B84 802662A4 24020009 */ addiu $v0, $zero, 9 -/* 194B88 802662A8 A0820217 */ sb $v0, 0x217($a0) -.L802662AC: -/* 194B8C 802662AC 8FBF0010 */ lw $ra, 0x10($sp) -/* 194B90 802662B0 24020001 */ addiu $v0, $zero, 1 -/* 194B94 802662B4 03E00008 */ jr $ra -/* 194B98 802662B8 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/include/common_structs.h b/include/common_structs.h index 7f706ada01..d22cbdf5b1 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -1284,15 +1284,15 @@ typedef struct Actor { /* 0x208 */ char unk_208[4]; /* 0x20C */ u32* statusTable; /* 0x210 */ u8 debuff; - /* 0x211 */ u8 debuffDuration; - /* 0x212 */ u8 staticStatus; /* 0B = yes */ - /* 0x213 */ u8 staticDuration; + /* 0x211 */ s8 debuffDuration; + /* 0x212 */ s8 staticStatus; /* 0B = yes */ + /* 0x213 */ s8 staticDuration; /* 0x214 */ s8 stoneStatus; /* 0C = yes */ - /* 0x215 */ u8 stoneDuration; - /* 0x216 */ u8 koStatus; /* 0D = yes */ - /* 0x217 */ u8 koDuration; - /* 0x218 */ u8 transStatus; /* 0E = yes */ - /* 0x219 */ u8 transDuration; + /* 0x215 */ s8 stoneDuration; + /* 0x216 */ s8 koStatus; /* 0D = yes */ + /* 0x217 */ s8 koDuration; + /* 0x218 */ s8 transStatus; /* 0E = yes */ + /* 0x219 */ s8 transDuration; /* 0x21A */ char unk_21A[2]; /* 0x21C */ u8 status; /* 0x21D */ char unk_21D[3]; diff --git a/src/code_190B20.c b/src/code_190B20.c index c13e199d55..6cc00012c1 100644 --- a/src/code_190B20.c +++ b/src/code_190B20.c @@ -88,7 +88,21 @@ INCLUDE_ASM(s32, "code_190B20", lookup_status_duration_mod); INCLUDE_ASM(s32, "code_190B20", inflict_status); -INCLUDE_ASM(s32, "code_190B20", inflict_partner_ko); +s32 inflict_partner_ko(Actor* target, s32 statusTypeKey, s32 duration) { + if (statusTypeKey == Status_DAZE) { + if (statusTypeKey != target->koStatus) { + inflict_status(target, Status_DAZE); + play_sound(0x2107); + } else { + target->koDuration += duration; + if (target->koDuration > 9) { + target->koDuration = 9; + } + } + } + + return TRUE; +} INCLUDE_ASM(s32, "code_190B20", get_defense); @@ -161,7 +175,11 @@ void remove_part_shadow(s32 actorId, s32 partIndex) { func_80112328(part->shadow); } -INCLUDE_ASM(s32, "code_190B20", func_802673E4); +void create_part_shadow_by_ptr(UNK_TYPE actor, ActorPart* part) { + part->flags &= ~4; + part->shadow = create_shadow_type(0, part->currentPos.x, part->currentPos.y, part->currentPos.z); + part->shadowScale = part->size[0] / 24.0; +} INCLUDE_ASM(s32, "code_190B20", remove_player_buffs); From 36f2fc2f864702330690d6403173a2368125acf8 Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Fri, 16 Oct 2020 22:36:28 -0400 Subject: [PATCH 12/22] clover we miss you --- asm/nonmatchings/code_16c8e0/func_8023F088.s | 2 +- asm/nonmatchings/code_16c8e0/func_8023FF84.s | 2 +- .../SetForegroundModelsVisibleUnchecked.s | 4 +- .../code_190B20/StartRumbleWithParams.s | 26 ------ asm/nonmatchings/code_190B20/get_actor_part.s | 26 ------ .../code_190B20/hide_foreground_models.s | 35 -------- .../hide_foreground_models_unchecked.s | 33 ------- .../code_190B20/show_foreground_models.s | 35 -------- .../show_foreground_models_unchecked.s | 33 ------- include/common_structs.h | 11 ++- src/code_190B20.c | 90 +++++++++++++++++-- tools/symbol_addrs.txt | 4 +- 12 files changed, 98 insertions(+), 203 deletions(-) delete mode 100644 asm/nonmatchings/code_190B20/StartRumbleWithParams.s delete mode 100644 asm/nonmatchings/code_190B20/get_actor_part.s delete mode 100644 asm/nonmatchings/code_190B20/hide_foreground_models.s delete mode 100644 asm/nonmatchings/code_190B20/hide_foreground_models_unchecked.s delete mode 100644 asm/nonmatchings/code_190B20/show_foreground_models.s delete mode 100644 asm/nonmatchings/code_190B20/show_foreground_models_unchecked.s diff --git a/asm/nonmatchings/code_16c8e0/func_8023F088.s b/asm/nonmatchings/code_16c8e0/func_8023F088.s index 1e4a92d5ce..bf2cc9103f 100644 --- a/asm/nonmatchings/code_16c8e0/func_8023F088.s +++ b/asm/nonmatchings/code_16c8e0/func_8023F088.s @@ -25,7 +25,7 @@ glabel func_8023F088 /* 16D9B8 8023F0D8 000218C0 */ sll $v1, $v0, 3 /* 16D9BC 8023F0DC 00431021 */ addu $v0, $v0, $v1 /* 16D9C0 8023F0E0 000210C0 */ sll $v0, $v0, 3 -/* 16D9C4 8023F0E4 0C099EF7 */ jal hide_foreground_models_unchecked +/* 16D9C4 8023F0E4 0C099EF7 */ jal hide_foreground_models_unsafe /* 16D9C8 8023F0E8 0044B821 */ addu $s7, $v0, $a0 /* 16D9CC 8023F0EC 0C046EE9 */ jal is_world_fog_enabled /* 16D9D0 8023F0F0 00000000 */ nop diff --git a/asm/nonmatchings/code_16c8e0/func_8023FF84.s b/asm/nonmatchings/code_16c8e0/func_8023FF84.s index c131efd3ef..c161881cf9 100644 --- a/asm/nonmatchings/code_16c8e0/func_8023FF84.s +++ b/asm/nonmatchings/code_16c8e0/func_8023FF84.s @@ -4,7 +4,7 @@ glabel func_8023FF84 /* 16E864 8023FF84 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 16E868 8023FF88 AFBF0010 */ sw $ra, 0x10($sp) -/* 16E86C 8023FF8C 0C099F12 */ jal show_foreground_models_unchecked +/* 16E86C 8023FF8C 0C099F12 */ jal show_foreground_models_unsafe /* 16E870 8023FF90 00000000 */ nop /* 16E874 8023FF94 8FBF0010 */ lw $ra, 0x10($sp) /* 16E878 8023FF98 03E00008 */ jr $ra diff --git a/asm/nonmatchings/code_181810/SetForegroundModelsVisibleUnchecked.s b/asm/nonmatchings/code_181810/SetForegroundModelsVisibleUnchecked.s index 48e8c18ef6..3afedeba5f 100644 --- a/asm/nonmatchings/code_181810/SetForegroundModelsVisibleUnchecked.s +++ b/asm/nonmatchings/code_181810/SetForegroundModelsVisibleUnchecked.s @@ -9,12 +9,12 @@ glabel SetForegroundModelsVisibleUnchecked /* 182398 80253AB8 8C450000 */ lw $a1, ($v0) /* 18239C 80253ABC 10400005 */ beqz $v0, .L80253AD4 /* 1823A0 80253AC0 00000000 */ nop -/* 1823A4 80253AC4 0C099F12 */ jal show_foreground_models_unchecked +/* 1823A4 80253AC4 0C099F12 */ jal show_foreground_models_unsafe /* 1823A8 80253AC8 00000000 */ nop /* 1823AC 80253ACC 08094EB7 */ j .L80253ADC /* 1823B0 80253AD0 00000000 */ nop .L80253AD4: -/* 1823B4 80253AD4 0C099EF7 */ jal hide_foreground_models_unchecked +/* 1823B4 80253AD4 0C099EF7 */ jal hide_foreground_models_unsafe /* 1823B8 80253AD8 00000000 */ nop .L80253ADC: /* 1823BC 80253ADC 8FBF0010 */ lw $ra, 0x10($sp) diff --git a/asm/nonmatchings/code_190B20/StartRumbleWithParams.s b/asm/nonmatchings/code_190B20/StartRumbleWithParams.s deleted file mode 100644 index 50b6b176c8..0000000000 --- a/asm/nonmatchings/code_190B20/StartRumbleWithParams.s +++ /dev/null @@ -1,26 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel StartRumbleWithParams -/* 19667C 80267D9C 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 196680 80267DA0 AFB10014 */ sw $s1, 0x14($sp) -/* 196684 80267DA4 0080882D */ daddu $s1, $a0, $zero -/* 196688 80267DA8 AFBF0018 */ sw $ra, 0x18($sp) -/* 19668C 80267DAC AFB00010 */ sw $s0, 0x10($sp) -/* 196690 80267DB0 8E30000C */ lw $s0, 0xc($s1) -/* 196694 80267DB4 8E050000 */ lw $a1, ($s0) -/* 196698 80267DB8 0C0B1EAF */ jal get_variable -/* 19669C 80267DBC 26100004 */ addiu $s0, $s0, 4 -/* 1966A0 80267DC0 0220202D */ daddu $a0, $s1, $zero -/* 1966A4 80267DC4 8E050000 */ lw $a1, ($s0) -/* 1966A8 80267DC8 0C0B1EAF */ jal get_variable -/* 1966AC 80267DCC 0040802D */ daddu $s0, $v0, $zero -/* 1966B0 80267DD0 0200202D */ daddu $a0, $s0, $zero -/* 1966B4 80267DD4 0C00A3C2 */ jal start_rumble -/* 1966B8 80267DD8 0040282D */ daddu $a1, $v0, $zero -/* 1966BC 80267DDC 8FBF0018 */ lw $ra, 0x18($sp) -/* 1966C0 80267DE0 8FB10014 */ lw $s1, 0x14($sp) -/* 1966C4 80267DE4 8FB00010 */ lw $s0, 0x10($sp) -/* 1966C8 80267DE8 24020002 */ addiu $v0, $zero, 2 -/* 1966CC 80267DEC 03E00008 */ jr $ra -/* 1966D0 80267DF0 27BD0020 */ addiu $sp, $sp, 0x20 diff --git a/asm/nonmatchings/code_190B20/get_actor_part.s b/asm/nonmatchings/code_190B20/get_actor_part.s deleted file mode 100644 index d785ec5786..0000000000 --- a/asm/nonmatchings/code_190B20/get_actor_part.s +++ /dev/null @@ -1,26 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel get_actor_part -/* 192D3C 8026445C 04A00004 */ bltz $a1, .L80264470 -/* 192D40 80264460 8C8301F4 */ lw $v1, 0x1f4($a0) -/* 192D44 80264464 8C62000C */ lw $v0, 0xc($v1) -/* 192D48 80264468 14400003 */ bnez $v0, .L80264478 -/* 192D4C 8026446C 00000000 */ nop -.L80264470: -/* 192D50 80264470 03E00008 */ jr $ra -/* 192D54 80264474 0060102D */ daddu $v0, $v1, $zero -.L80264478: -/* 192D58 80264478 10600008 */ beqz $v1, .L8026449C -/* 192D5C 8026447C 00000000 */ nop -.L80264480: -/* 192D60 80264480 8C620008 */ lw $v0, 8($v1) -/* 192D64 80264484 80420004 */ lb $v0, 4($v0) -/* 192D68 80264488 1045FFF9 */ beq $v0, $a1, .L80264470 -/* 192D6C 8026448C 00000000 */ nop -/* 192D70 80264490 8C63000C */ lw $v1, 0xc($v1) -/* 192D74 80264494 1460FFFA */ bnez $v1, .L80264480 -/* 192D78 80264498 00000000 */ nop -.L8026449C: -/* 192D7C 8026449C 03E00008 */ jr $ra -/* 192D80 802644A0 0000102D */ daddu $v0, $zero, $zero diff --git a/asm/nonmatchings/code_190B20/hide_foreground_models.s b/asm/nonmatchings/code_190B20/hide_foreground_models.s deleted file mode 100644 index 472a8d180d..0000000000 --- a/asm/nonmatchings/code_190B20/hide_foreground_models.s +++ /dev/null @@ -1,35 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel hide_foreground_models -/* 196594 80267CB4 3C02800E */ lui $v0, 0x800e -/* 196598 80267CB8 8C42C4A8 */ lw $v0, -0x3b58($v0) -/* 19659C 80267CBC 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 1965A0 80267CC0 AFBF0014 */ sw $ra, 0x14($sp) -/* 1965A4 80267CC4 10400014 */ beqz $v0, .L80267D18 -/* 1965A8 80267CC8 AFB00010 */ sw $s0, 0x10($sp) -/* 1965AC 80267CCC 8C420018 */ lw $v0, 0x18($v0) -/* 1965B0 80267CD0 10400011 */ beqz $v0, .L80267D18 -/* 1965B4 80267CD4 0040802D */ daddu $s0, $v0, $zero -/* 1965B8 80267CD8 8E020000 */ lw $v0, ($s0) -/* 1965BC 80267CDC 1040000E */ beqz $v0, .L80267D18 -/* 1965C0 80267CE0 00000000 */ nop -.L80267CE4: -/* 1965C4 80267CE4 8E040000 */ lw $a0, ($s0) -/* 1965C8 80267CE8 0480000B */ bltz $a0, .L80267D18 -/* 1965CC 80267CEC 26100004 */ addiu $s0, $s0, 4 -/* 1965D0 80267CF0 0C046C04 */ jal get_model_list_index_from_tree_index -/* 1965D4 80267CF4 00000000 */ nop -/* 1965D8 80267CF8 0C046B4C */ jal get_model_from_list_index -/* 1965DC 80267CFC 0040202D */ daddu $a0, $v0, $zero -/* 1965E0 80267D00 94430000 */ lhu $v1, ($v0) -/* 1965E4 80267D04 34630002 */ ori $v1, $v1, 2 -/* 1965E8 80267D08 A4430000 */ sh $v1, ($v0) -/* 1965EC 80267D0C 8E020000 */ lw $v0, ($s0) -/* 1965F0 80267D10 1440FFF4 */ bnez $v0, .L80267CE4 -/* 1965F4 80267D14 00000000 */ nop -.L80267D18: -/* 1965F8 80267D18 8FBF0014 */ lw $ra, 0x14($sp) -/* 1965FC 80267D1C 8FB00010 */ lw $s0, 0x10($sp) -/* 196600 80267D20 03E00008 */ jr $ra -/* 196604 80267D24 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_190B20/hide_foreground_models_unchecked.s b/asm/nonmatchings/code_190B20/hide_foreground_models_unchecked.s deleted file mode 100644 index 752db53f95..0000000000 --- a/asm/nonmatchings/code_190B20/hide_foreground_models_unchecked.s +++ /dev/null @@ -1,33 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel hide_foreground_models_unchecked -/* 1964BC 80267BDC 3C02800E */ lui $v0, 0x800e -/* 1964C0 80267BE0 8C42C4A8 */ lw $v0, -0x3b58($v0) -/* 1964C4 80267BE4 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 1964C8 80267BE8 AFBF0014 */ sw $ra, 0x14($sp) -/* 1964CC 80267BEC 10400012 */ beqz $v0, .L80267C38 -/* 1964D0 80267BF0 AFB00010 */ sw $s0, 0x10($sp) -/* 1964D4 80267BF4 8C420018 */ lw $v0, 0x18($v0) -/* 1964D8 80267BF8 1040000F */ beqz $v0, .L80267C38 -/* 1964DC 80267BFC 0040802D */ daddu $s0, $v0, $zero -.L80267C00: -/* 1964E0 80267C00 8E020000 */ lw $v0, ($s0) -/* 1964E4 80267C04 1040000C */ beqz $v0, .L80267C38 -/* 1964E8 80267C08 00000000 */ nop -/* 1964EC 80267C0C 8E040000 */ lw $a0, ($s0) -/* 1964F0 80267C10 0480FFFB */ bltz $a0, .L80267C00 -/* 1964F4 80267C14 26100004 */ addiu $s0, $s0, 4 -/* 1964F8 80267C18 0C046C04 */ jal get_model_list_index_from_tree_index -/* 1964FC 80267C1C 00000000 */ nop -/* 196500 80267C20 0C046B4C */ jal get_model_from_list_index -/* 196504 80267C24 0040202D */ daddu $a0, $v0, $zero -/* 196508 80267C28 94430000 */ lhu $v1, ($v0) -/* 19650C 80267C2C 34630002 */ ori $v1, $v1, 2 -/* 196510 80267C30 08099F00 */ j .L80267C00 -/* 196514 80267C34 A4430000 */ sh $v1, ($v0) -.L80267C38: -/* 196518 80267C38 8FBF0014 */ lw $ra, 0x14($sp) -/* 19651C 80267C3C 8FB00010 */ lw $s0, 0x10($sp) -/* 196520 80267C40 03E00008 */ jr $ra -/* 196524 80267C44 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_190B20/show_foreground_models.s b/asm/nonmatchings/code_190B20/show_foreground_models.s deleted file mode 100644 index e2373a7160..0000000000 --- a/asm/nonmatchings/code_190B20/show_foreground_models.s +++ /dev/null @@ -1,35 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel show_foreground_models -/* 196608 80267D28 3C02800E */ lui $v0, 0x800e -/* 19660C 80267D2C 8C42C4A8 */ lw $v0, -0x3b58($v0) -/* 196610 80267D30 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 196614 80267D34 AFBF0014 */ sw $ra, 0x14($sp) -/* 196618 80267D38 10400014 */ beqz $v0, .L80267D8C -/* 19661C 80267D3C AFB00010 */ sw $s0, 0x10($sp) -/* 196620 80267D40 8C420018 */ lw $v0, 0x18($v0) -/* 196624 80267D44 10400011 */ beqz $v0, .L80267D8C -/* 196628 80267D48 0040802D */ daddu $s0, $v0, $zero -/* 19662C 80267D4C 8E020000 */ lw $v0, ($s0) -/* 196630 80267D50 1040000E */ beqz $v0, .L80267D8C -/* 196634 80267D54 00000000 */ nop -.L80267D58: -/* 196638 80267D58 8E040000 */ lw $a0, ($s0) -/* 19663C 80267D5C 0480000B */ bltz $a0, .L80267D8C -/* 196640 80267D60 26100004 */ addiu $s0, $s0, 4 -/* 196644 80267D64 0C046C04 */ jal get_model_list_index_from_tree_index -/* 196648 80267D68 00000000 */ nop -/* 19664C 80267D6C 0C046B4C */ jal get_model_from_list_index -/* 196650 80267D70 0040202D */ daddu $a0, $v0, $zero -/* 196654 80267D74 94430000 */ lhu $v1, ($v0) -/* 196658 80267D78 3063FFFD */ andi $v1, $v1, 0xfffd -/* 19665C 80267D7C A4430000 */ sh $v1, ($v0) -/* 196660 80267D80 8E020000 */ lw $v0, ($s0) -/* 196664 80267D84 1440FFF4 */ bnez $v0, .L80267D58 -/* 196668 80267D88 00000000 */ nop -.L80267D8C: -/* 19666C 80267D8C 8FBF0014 */ lw $ra, 0x14($sp) -/* 196670 80267D90 8FB00010 */ lw $s0, 0x10($sp) -/* 196674 80267D94 03E00008 */ jr $ra -/* 196678 80267D98 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_190B20/show_foreground_models_unchecked.s b/asm/nonmatchings/code_190B20/show_foreground_models_unchecked.s deleted file mode 100644 index fa03a98966..0000000000 --- a/asm/nonmatchings/code_190B20/show_foreground_models_unchecked.s +++ /dev/null @@ -1,33 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel show_foreground_models_unchecked -/* 196528 80267C48 3C02800E */ lui $v0, 0x800e -/* 19652C 80267C4C 8C42C4A8 */ lw $v0, -0x3b58($v0) -/* 196530 80267C50 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 196534 80267C54 AFBF0014 */ sw $ra, 0x14($sp) -/* 196538 80267C58 10400012 */ beqz $v0, .L80267CA4 -/* 19653C 80267C5C AFB00010 */ sw $s0, 0x10($sp) -/* 196540 80267C60 8C420018 */ lw $v0, 0x18($v0) -/* 196544 80267C64 1040000F */ beqz $v0, .L80267CA4 -/* 196548 80267C68 0040802D */ daddu $s0, $v0, $zero -.L80267C6C: -/* 19654C 80267C6C 8E020000 */ lw $v0, ($s0) -/* 196550 80267C70 1040000C */ beqz $v0, .L80267CA4 -/* 196554 80267C74 00000000 */ nop -/* 196558 80267C78 8E040000 */ lw $a0, ($s0) -/* 19655C 80267C7C 0480FFFB */ bltz $a0, .L80267C6C -/* 196560 80267C80 26100004 */ addiu $s0, $s0, 4 -/* 196564 80267C84 0C046C04 */ jal get_model_list_index_from_tree_index -/* 196568 80267C88 00000000 */ nop -/* 19656C 80267C8C 0C046B4C */ jal get_model_from_list_index -/* 196570 80267C90 0040202D */ daddu $a0, $v0, $zero -/* 196574 80267C94 94430000 */ lhu $v1, ($v0) -/* 196578 80267C98 3063FFFD */ andi $v1, $v1, 0xfffd -/* 19657C 80267C9C 08099F1B */ j .L80267C6C -/* 196580 80267CA0 A4430000 */ sh $v1, ($v0) -.L80267CA4: -/* 196584 80267CA4 8FBF0014 */ lw $ra, 0x14($sp) -/* 196588 80267CA8 8FB00010 */ lw $s0, 0x10($sp) -/* 19658C 80267CAC 03E00008 */ jr $ra -/* 196590 80267CB0 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/include/common_structs.h b/include/common_structs.h index d3f3786e30..9d709172dd 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -538,6 +538,11 @@ typedef struct BattleStatusUnk { /* 0x0C */ BattleStatusUnkInner* unk_0C; } BattleStatusUnk; // size = unknown +typedef struct FGModelData { + /* 0x00 */ char unk_00[0x18]; + /* 0x18 */ s32* idList; +} FGModelData; // size = unknown + typedef struct BattleStatus { /* 0x000 */ s32 flags1; /* 0x004 */ s32 flags2; @@ -647,7 +652,7 @@ typedef struct BattleStatus { /* 0x431 */ u8 inputBufferPos; /* 0x432 */ char unk_432[2]; /* 0x434 */ s32 unk_434; - /* 0x438 */ s32* foregroundModelList; + /* 0x438 */ FGModelData* foregroundModelData; /* 0x43C */ BattleStatusUnk* unk_43C; /* 0x440 */ u8 tattleFlags[27]; /* 0x45B */ char unk_45B[17]; @@ -718,7 +723,7 @@ typedef struct CollisionData { } CollisionData; // size = 0x10 typedef struct Model { - /* 0x00 */ s16 flags; + /* 0x00 */ u16 flags; /* 0x02 */ s16 modelID; /* 0x04 */ char unk_04[4]; /* 0x08 */ s32* modelNode; @@ -1338,7 +1343,7 @@ typedef struct Actor { typedef struct StaticActorPart { /* 0x00 */ s32 flags; - /* 0x04 */ u8 index; + /* 0x04 */ s8 index; /* 0x05 */ u8 posOffset[3]; /* 0x08 */ u8 targetOffset[2]; /* 0x0A */ s16 opacity; diff --git a/src/code_190B20.c b/src/code_190B20.c index d97584bb52..97c7a2a04d 100644 --- a/src/code_190B20.c +++ b/src/code_190B20.c @@ -66,7 +66,22 @@ INCLUDE_ASM(s32, "code_190B20", add_xz_vec3f_copy2); INCLUDE_ASM(s32, "code_190B20", play_movement_dust_effects); -INCLUDE_ASM(ActorPart*, "code_190B20", get_actor_part, Actor* actor, s32 partIndex); +ActorPart* get_actor_part(Actor* actor, s32 partIndex) { + ActorPart* part = &actor->partsTable[0]; + + if (partIndex < 0 || part->nextPart == NULL) { + return part; + } + + while (part != NULL) { + if (part->staticData->index == partIndex) { + return part; + } + part = part->nextPart; + } + + return NULL; +} INCLUDE_ASM(s32, "code_190B20", load_player_actor); @@ -424,15 +439,78 @@ INCLUDE_ASM(s32, "code_190B20", func_80267A3C); INCLUDE_ASM(s32, "code_190B20", reset_all_actor_sounds); -INCLUDE_ASM(s32, "code_190B20", hide_foreground_models_unchecked); +void hide_foreground_models_unsafe(void) { + FGModelData* data = gBattleStatus.foregroundModelData; -INCLUDE_ASM(s32, "code_190B20", show_foreground_models_unchecked); + if (data != NULL && data->idList != NULL) { + s32* idList = data->idList; + while (*idList != 0) { + s32 id = *idList++; + if (id >= 0) { + Model* model = get_model_from_list_index(get_model_list_index_from_tree_index(id)); + model->flags |= 2; + } + } + } +} -INCLUDE_ASM(s32, "code_190B20", hide_foreground_models); +void show_foreground_models_unsafe(void) { + FGModelData* data = gBattleStatus.foregroundModelData; -INCLUDE_ASM(s32, "code_190B20", show_foreground_models); + if (data != NULL && data->idList != NULL) { + s32* idList = data->idList; + while (*idList != 0) { + s32 id = *idList++; + if (id >= 0) { + Model* model = get_model_from_list_index(get_model_list_index_from_tree_index(id)); + model->flags &= ~2; + } + } + } +} -INCLUDE_ASM(s32, "code_190B20", StartRumbleWithParams); +void hide_foreground_models(void) { + FGModelData* data = gBattleStatus.foregroundModelData; + + if (data != NULL && data->idList != NULL) { + s32* idList = data->idList; + while (*idList != 0) { + s32 id = *idList++; + if (id < 0) { + break; + } else { + Model* model = get_model_from_list_index(get_model_list_index_from_tree_index(id)); + model->flags |= 2; + } + + } + } +} + +void show_foreground_models(void) { + FGModelData* data = gBattleStatus.foregroundModelData; + + if (data != NULL && data->idList != NULL) { + s32* idList = data->idList; + while (*idList != 0) { + s32 id = *idList++; + if (id < 0) { + break; + } else { + Model* model = get_model_from_list_index(get_model_list_index_from_tree_index(id)); + model->flags &= ~2; + } + } + } +} + +ApiStatus StartRumbleWithParams(ScriptInstance* script, s32 isInitialCall) { + Bytecode* args = script->ptrReadPos; + + start_rumble(get_variable(script, *args++), get_variable(script, *args++)); + + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_190B20", start_rumble_type); diff --git a/tools/symbol_addrs.txt b/tools/symbol_addrs.txt index 90cad40cf2..d7636c03fa 100644 --- a/tools/symbol_addrs.txt +++ b/tools/symbol_addrs.txt @@ -995,7 +995,7 @@ heap_malloc;0x8002ACE4 heroes_is_ability_active;0x802672AC hide_coin_counter;0x800E9698 hide_foreground_models;0x80267CB4 -hide_foreground_models_unchecked;0x80267BDC +hide_foreground_models_unsafe;0x80267BDC icon_set_opacity;0x80144EB0 icon_set_tint;0x80144EFC increment_max_SP;0x800EA1B4 @@ -1541,7 +1541,7 @@ show_coin_counter;0x800E9518 show_damage_popup;0x802665AC show_first_strike_message;0x80041C5C show_foreground_models;0x80267D28 -show_foreground_models_unchecked;0x80267C48 +show_foreground_models_unsafe;0x80267C48 show_message_popup;0x80250EA4 show_variable_battle_message;0x8024FA04 si;0x8006AD90 From 890fd346e9217ffbbcb305ee5d2cd3fd490f6308 Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Fri, 16 Oct 2020 23:47:10 -0400 Subject: [PATCH 13/22] :stars: --- .../code_181810/OverrideBattleDmaDest.s | 15 -- .../code_181810/SetForegroundModelsVisible.s | 23 --- .../SetForegroundModelsVisibleUnchecked.s | 23 --- asm/nonmatchings/code_181810/StartRumble.s | 18 --- asm/nonmatchings/code_181810/func_80253B30.s | 29 ---- include/common_structs.h | 2 +- include/functions.h | 5 + include/variables.h | 1 + src/code_181810.c | 138 +++++++++++++++++- src/code_8230_len_1ae0.c | 3 +- src/code_b72b0_len_15ed0.c | 2 +- tools/symbol_addrs.txt | 10 +- undefined_syms.txt | 8 + 13 files changed, 160 insertions(+), 117 deletions(-) delete mode 100644 asm/nonmatchings/code_181810/OverrideBattleDmaDest.s delete mode 100644 asm/nonmatchings/code_181810/SetForegroundModelsVisible.s delete mode 100644 asm/nonmatchings/code_181810/SetForegroundModelsVisibleUnchecked.s delete mode 100644 asm/nonmatchings/code_181810/StartRumble.s delete mode 100644 asm/nonmatchings/code_181810/func_80253B30.s diff --git a/asm/nonmatchings/code_181810/OverrideBattleDmaDest.s b/asm/nonmatchings/code_181810/OverrideBattleDmaDest.s deleted file mode 100644 index ccba876c58..0000000000 --- a/asm/nonmatchings/code_181810/OverrideBattleDmaDest.s +++ /dev/null @@ -1,15 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel OverrideBattleDmaDest -/* 181ED8 802535F8 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 181EDC 802535FC AFBF0010 */ sw $ra, 0x10($sp) -/* 181EE0 80253600 8C82000C */ lw $v0, 0xc($a0) -/* 181EE4 80253604 0C0B1EAF */ jal get_variable -/* 181EE8 80253608 8C450000 */ lw $a1, ($v0) -/* 181EEC 8025360C 8FBF0010 */ lw $ra, 0x10($sp) -/* 181EF0 80253610 3C018028 */ lui $at, 0x8028 -/* 181EF4 80253614 AC224000 */ sw $v0, 0x4000($at) -/* 181EF8 80253618 24020002 */ addiu $v0, $zero, 2 -/* 181EFC 8025361C 03E00008 */ jr $ra -/* 181F00 80253620 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_181810/SetForegroundModelsVisible.s b/asm/nonmatchings/code_181810/SetForegroundModelsVisible.s deleted file mode 100644 index b6f35466f1..0000000000 --- a/asm/nonmatchings/code_181810/SetForegroundModelsVisible.s +++ /dev/null @@ -1,23 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel SetForegroundModelsVisible -/* 1823CC 80253AEC 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 1823D0 80253AF0 AFBF0010 */ sw $ra, 0x10($sp) -/* 1823D4 80253AF4 8C82000C */ lw $v0, 0xc($a0) -/* 1823D8 80253AF8 0C0B1EAF */ jal get_variable -/* 1823DC 80253AFC 8C450000 */ lw $a1, ($v0) -/* 1823E0 80253B00 10400005 */ beqz $v0, .L80253B18 -/* 1823E4 80253B04 00000000 */ nop -/* 1823E8 80253B08 0C099F4A */ jal show_foreground_models -/* 1823EC 80253B0C 00000000 */ nop -/* 1823F0 80253B10 08094EC8 */ j .L80253B20 -/* 1823F4 80253B14 00000000 */ nop -.L80253B18: -/* 1823F8 80253B18 0C099F2D */ jal hide_foreground_models -/* 1823FC 80253B1C 00000000 */ nop -.L80253B20: -/* 182400 80253B20 8FBF0010 */ lw $ra, 0x10($sp) -/* 182404 80253B24 24020002 */ addiu $v0, $zero, 2 -/* 182408 80253B28 03E00008 */ jr $ra -/* 18240C 80253B2C 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_181810/SetForegroundModelsVisibleUnchecked.s b/asm/nonmatchings/code_181810/SetForegroundModelsVisibleUnchecked.s deleted file mode 100644 index 3afedeba5f..0000000000 --- a/asm/nonmatchings/code_181810/SetForegroundModelsVisibleUnchecked.s +++ /dev/null @@ -1,23 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel SetForegroundModelsVisibleUnchecked -/* 182388 80253AA8 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 18238C 80253AAC AFBF0010 */ sw $ra, 0x10($sp) -/* 182390 80253AB0 8C82000C */ lw $v0, 0xc($a0) -/* 182394 80253AB4 0C0B1EAF */ jal get_variable -/* 182398 80253AB8 8C450000 */ lw $a1, ($v0) -/* 18239C 80253ABC 10400005 */ beqz $v0, .L80253AD4 -/* 1823A0 80253AC0 00000000 */ nop -/* 1823A4 80253AC4 0C099F12 */ jal show_foreground_models_unsafe -/* 1823A8 80253AC8 00000000 */ nop -/* 1823AC 80253ACC 08094EB7 */ j .L80253ADC -/* 1823B0 80253AD0 00000000 */ nop -.L80253AD4: -/* 1823B4 80253AD4 0C099EF7 */ jal hide_foreground_models_unsafe -/* 1823B8 80253AD8 00000000 */ nop -.L80253ADC: -/* 1823BC 80253ADC 8FBF0010 */ lw $ra, 0x10($sp) -/* 1823C0 80253AE0 24020002 */ addiu $v0, $zero, 2 -/* 1823C4 80253AE4 03E00008 */ jr $ra -/* 1823C8 80253AE8 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/asm/nonmatchings/code_181810/StartRumble.s b/asm/nonmatchings/code_181810/StartRumble.s deleted file mode 100644 index 799a03f4c4..0000000000 --- a/asm/nonmatchings/code_181810/StartRumble.s +++ /dev/null @@ -1,18 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel StartRumble -/* 182AF8 80254218 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 182AFC 8025421C AFBF0010 */ sw $ra, 0x10($sp) -/* 182B00 80254220 8C82000C */ lw $v0, 0xc($a0) -/* 182B04 80254224 0C0B1EAF */ jal get_variable -/* 182B08 80254228 8C450000 */ lw $a1, ($v0) -/* 182B0C 8025422C 0C099F7D */ jal start_rumble_type -/* 182B10 80254230 0040202D */ daddu $a0, $v0, $zero -/* 182B14 80254234 8FBF0010 */ lw $ra, 0x10($sp) -/* 182B18 80254238 24020002 */ addiu $v0, $zero, 2 -/* 182B1C 8025423C 03E00008 */ jr $ra -/* 182B20 80254240 27BD0018 */ addiu $sp, $sp, 0x18 -/* 182B24 80254244 00000000 */ nop -/* 182B28 80254248 00000000 */ nop -/* 182B2C 8025424C 00000000 */ nop diff --git a/asm/nonmatchings/code_181810/func_80253B30.s b/asm/nonmatchings/code_181810/func_80253B30.s deleted file mode 100644 index a4be1fbfc3..0000000000 --- a/asm/nonmatchings/code_181810/func_80253B30.s +++ /dev/null @@ -1,29 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80253B30 -/* 182410 80253B30 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 182414 80253B34 AFB00010 */ sw $s0, 0x10($sp) -/* 182418 80253B38 0080802D */ daddu $s0, $a0, $zero -/* 18241C 80253B3C AFBF001C */ sw $ra, 0x1c($sp) -/* 182420 80253B40 AFB20018 */ sw $s2, 0x18($sp) -/* 182424 80253B44 AFB10014 */ sw $s1, 0x14($sp) -/* 182428 80253B48 8E02000C */ lw $v0, 0xc($s0) -/* 18242C 80253B4C 8C510000 */ lw $s1, ($v0) -/* 182430 80253B50 24420004 */ addiu $v0, $v0, 4 -/* 182434 80253B54 8C450004 */ lw $a1, 4($v0) -/* 182438 80253B58 0C0B1EAF */ jal get_variable -/* 18243C 80253B5C 8C520000 */ lw $s2, ($v0) -/* 182440 80253B60 0200202D */ daddu $a0, $s0, $zero -/* 182444 80253B64 0220282D */ daddu $a1, $s1, $zero -/* 182448 80253B68 00021200 */ sll $v0, $v0, 8 -/* 18244C 80253B6C 344200FE */ ori $v0, $v0, 0xfe -/* 182450 80253B70 0C0B2026 */ jal set_variable -/* 182454 80253B74 02423025 */ or $a2, $s2, $v0 -/* 182458 80253B78 8FBF001C */ lw $ra, 0x1c($sp) -/* 18245C 80253B7C 8FB20018 */ lw $s2, 0x18($sp) -/* 182460 80253B80 8FB10014 */ lw $s1, 0x14($sp) -/* 182464 80253B84 8FB00010 */ lw $s0, 0x10($sp) -/* 182468 80253B88 24020002 */ addiu $v0, $zero, 2 -/* 18246C 80253B8C 03E00008 */ jr $ra -/* 182470 80253B90 27BD0020 */ addiu $sp, $sp, 0x20 diff --git a/include/common_structs.h b/include/common_structs.h index 9d709172dd..030d8d1c17 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -1263,7 +1263,7 @@ typedef struct Actor { /* 0x137 */ char unk_137; /* 0x138 */ struct Vec3f homePos; /* 0x144 */ struct Vec3f currentPos; - /* 0x150 */ s16 otherPosheadOffset[3]; + /* 0x150 */ Vec3s otherPosheadOffset; /* 0x156 */ s16 healthBarPosition[3]; /* 0x15C */ f32 rotation[3]; /* 0x168 */ s16 rotationPivotOffset[3]; diff --git a/include/functions.h b/include/functions.h index d3f7c13411..aa88864b26 100644 --- a/include/functions.h +++ b/include/functions.h @@ -21,6 +21,10 @@ void render_player_model(); f32 integrate_gravity(void); +// Text +PrintContext* load_string(s32 stringID, s32* a1); +void get_screen_coords(Cam camID, f32 x, f32 y, f32 z, f32* outX, f32* outY, f32* outZ); + void parent_collider_to_model(s32 colliderID, s16 modelIndex); void clone_model(u16 srcModelID, u16 newModelID); Model* get_model_from_list_index(s32 listIndex); @@ -36,6 +40,7 @@ Trigger* create_trigger(TriggerDefinition* def); s32 _bound_script_trigger_handler(Trigger* trigger); Actor* get_actor(s32 actorID); +ActorPart* get_actor_part(Actor* actor, s32 partIndex); s32 func_800494C0(Npc* npc, s32 arg1, s32 arg2); diff --git a/include/variables.h b/include/variables.h index d32c0c5277..87469f2fb6 100644 --- a/include/variables.h +++ b/include/variables.h @@ -22,6 +22,7 @@ extern UNK_FUN_PTR(gCurrentUpdateFunction); extern s32 gBattleState; extern BattleStatus gBattleStatus; +extern s32 gBattleDmaDest; extern ScriptList gWorldScriptList; extern ScriptList gBattleScriptList; diff --git a/src/code_181810.c b/src/code_181810.c index 03e25e75f9..062eb8cb5d 100644 --- a/src/code_181810.c +++ b/src/code_181810.c @@ -1,6 +1,106 @@ #include "common.h" +// typedef struct DialogueState { +// /* 0x00 */ PrintContext* printCtx; +// /* 0x04 */ s32 unk_04; +// /* 0x08 */ s32 unk_08; +// /* 0x0C */ s32 talkAnim; +// /* 0x10 */ s32 idleAnim; +// /* 0x14 */ Actor* actor; +// /* 0x18 */ ActorPart* part; +// } DialogueState; // 0x8029FA60 size = unknown + +// extern DialogueState gDialogueState; + +extern PrintContext* gSpeakingActorPrintCtx; +extern s32 gSpeakingActorPrintIsDone; // unk_08 +extern s32 gSpeakingActorTalkAnim; +extern s32 gSpeakingActorIdleAnim; +extern Actor* gSpeakingActor; +extern ActorPart* gSpeakingActorPart; + INCLUDE_ASM(s32, "code_181810", ActorSpeak); +/*ApiStatus ActorSpeak(ScriptInstance *script, s32 isInitialCall) { + Bytecode* args = script->ptrReadPos; + Actor *actor; + ActorPart *part; + s32 stringID; + s32 actorID; + s32 partIndex; + PrintContext *printContext; + f32 speakerMouthY; + s32 anim; + + f32 screenX, screenY, screenZ; + + if (isInitialCall) { + stringID = get_variable(script, *args++); + actorID = get_variable(script, *args++); + partIndex = get_variable(script, *args++); + gSpeakingActorTalkAnim = get_variable(script, *args++); + gSpeakingActorIdleAnim = get_variable(script, *args++); + + if (actorID == ActorId_SELF) { + actorID = script->ownerActorID; + } + actor = get_actor(actorID); + part = get_actor_part(actor, partIndex); + gSpeakingActor = actor; + gSpeakingActorPart = part; + + if ((actor->flags & 0x8000) == 0) { + speakerMouthY = actor->otherPosheadOffset.y + actor->currentPos.y + actor->size[1]; + } else { + speakerMouthY = actor->otherPosheadOffset.y + actor->currentPos.y + (actor->size[1] / 2); + } + + get_screen_coords(Cam_BATTLE, actor->currentPos.x + actor->otherPosheadOffset.x, speakerMouthY, actor->currentPos.z + actor->otherPosheadOffset.z, &screenX, &screenY, &screenZ); + gSpeakingActorPrintIsDone = 0; + gSpeakingActorPrintCtx = load_string(stringID, &gSpeakingActorPrintIsDone); + clamp_printer_coords(gSpeakingActorPrintCtx, screenX, screenY); + script->functionTemp[0] = 0; + D_8009A650[0] |= 0x10; + if (gSpeakingActorTalkAnim >= 0) { + func_80263E08(actor, part, gSpeakingActorTalkAnim); + } + increment_status_menu_disabled(); + } + + if (script->functionTemp[0] == 0) { + actor = gSpeakingActor; + part = gSpeakingActorPart; + if ((actor->flags & 0x8000) == 0) { + speakerMouthY = actor->currentPos.y + actor->otherPosheadOffset.y + actor->size[1]; + } else { + speakerMouthY = actor->currentPos.y + actor->otherPosheadOffset.y + (actor->size[1] / 2); + } + get_screen_coords(Cam_BATTLE, actor->currentPos.x + actor->otherPosheadOffset.x, speakerMouthY, actor->currentPos.z + actor->otherPosheadOffset.z, &screenX, &screenY, &screenZ); + clamp_printer_coords(printContext = gSpeakingActorPrintCtx, screenX, screenY); + + if (printContext->stateFlags & 0x40) { + decrement_status_menu_disabled(); + return ApiStatus_DONE1; + } + + if (printContext->stateFlags & 0x80) { // "is talking" flag + anim = gSpeakingActorTalkAnim; + } else { + anim = gSpeakingActorIdleAnim; + } + + if (anim >= 0) { + func_80263E08(actor, part, anim); + } + + if (gSpeakingActorPrintIsDone == 1) { + decrement_status_menu_disabled(); + D_8009A650[0] &= ~0x10; + return ApiStatus_DONE1; + } + } + + return ApiStatus_BLOCK; +}*/ INCLUDE_ASM(s32, "code_181810", EndActorSpeech); @@ -8,7 +108,10 @@ INCLUDE_ASM(s32, "code_181810", ShowBattleChoice); INCLUDE_ASM(s32, "code_181810", func_802535B4); -INCLUDE_ASM(s32, "code_181810", OverrideBattleDmaDest); +ApiStatus OverrideBattleDmaDest(ScriptInstance* script, s32 isInitialCall) { + gBattleDmaDest = get_variable(script, *script->ptrReadPos); + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_181810", LoadBattleDmaData); @@ -26,11 +129,33 @@ INCLUDE_ASM(s32, "code_181810", PlayLoopingSoundAtActor); INCLUDE_ASM(s32, "code_181810", StopLoopingSoundAtActor); -INCLUDE_ASM(s32, "code_181810", SetForegroundModelsVisibleUnchecked); +ApiStatus SetForegroundModelsVisibleUnsafe(ScriptInstance* script, s32 isInitialCall) { + if (get_variable(script, *script->ptrReadPos)) { + show_foreground_models_unsafe(); + } else { + hide_foreground_models_unsafe(); + } + return ApiStatus_DONE2; +} -INCLUDE_ASM(s32, "code_181810", SetForegroundModelsVisible); +ApiStatus SetForegroundModelsVisible(ScriptInstance* script, s32 isInitialCall) { + if (get_variable(script, *script->ptrReadPos)) { + show_foreground_models(); + } else { + hide_foreground_models(); + } + return ApiStatus_DONE2; +} -INCLUDE_ASM(s32, "code_181810", func_80253B30); +ApiStatus func_80253B30(ScriptInstance* script, s32 isInitialCall) { + Bytecode* args = script->ptrReadPos; + Bytecode a0 = *args++; + Bytecode a1 = *args++; + s32 var1 = get_variable(script, *args++); + + set_variable(script, a0, (a1 | 0xFE) | (var1 * 256)); + return ApiStatus_DONE2; +} INCLUDE_ASM(s32, "code_181810", MakeStatusField); @@ -52,4 +177,7 @@ INCLUDE_ASM(s32, "code_181810", MultiplyVec3ByActorScale); INCLUDE_ASM(s32, "code_181810", ApplyShrinkFromOwner); -INCLUDE_ASM(s32, "code_181810", StartRumble); +ApiStatus StartRumble(ScriptInstance* script, s32 isInitialCall) { + start_rumble_type(get_variable(script, *script->ptrReadPos)); + return ApiStatus_DONE2; +} diff --git a/src/code_8230_len_1ae0.c b/src/code_8230_len_1ae0.c index 1d7ee1c65d..825e9f2f8f 100644 --- a/src/code_8230_len_1ae0.c +++ b/src/code_8230_len_1ae0.c @@ -26,7 +26,8 @@ INCLUDE_ASM(void, "code_8230_len_1ae0", set_cam_viewport, s16 id, s16 x, s16 y, INCLUDE_ASM(s32, "code_8230_len_1ae0", get_cam_viewport); -INCLUDE_ASM(s32, "code_8230_len_1ae0", get_screen_coords); +INCLUDE_ASM(void, "code_8230_len_1ae0", get_screen_coords, Cam camID, f32 x, f32 y, f32 z, f32* outX, f32* outY, + f32* outZ); INCLUDE_ASM(s32, "code_8230_len_1ae0", func_8002E754); diff --git a/src/code_b72b0_len_15ed0.c b/src/code_b72b0_len_15ed0.c index 8e0ff55a60..8bba66eb82 100644 --- a/src/code_b72b0_len_15ed0.c +++ b/src/code_b72b0_len_15ed0.c @@ -107,7 +107,7 @@ INCLUDE_ASM(s32, "code_b72b0_len_15ed0", dma_load_string); INCLUDE_ASM(s32, "code_b72b0_len_15ed0", load_message_to_buffer); -INCLUDE_ASM(s32, "code_b72b0_len_15ed0", load_string); +INCLUDE_ASM(PrintContext*, "code_b72b0_len_15ed0", load_string, s32 stringId, s32* a1); INCLUDE_ASM(s32, "code_b72b0_len_15ed0", _load_string); diff --git a/tools/symbol_addrs.txt b/tools/symbol_addrs.txt index d7636c03fa..592cefa958 100644 --- a/tools/symbol_addrs.txt +++ b/tools/symbol_addrs.txt @@ -1782,7 +1782,7 @@ PeachScriptDispatcher;0x80285010 ExecutePlayerAction;0x8028505C ExecutePeachAction;0x80285174 HandleEvent_Player;0x802852D4 -SetForegroundModelsVisibleUnchecked;0x80253AA8 +SetForegroundModelsVisibleUnsafe;0x80253AA8 JumpToGoalSimple2;0x80279420 LandJumpPart;0x8027AB5C _advance_rng;0x80029900 @@ -1884,3 +1884,11 @@ gStaticScriptCounter;0x802D9CA0 D_802D9CA4;0x802D9CA4 gGlobalTimeSpace;0x802D9CA8 gBattleState;0x800DC068 +gBattleDmaDest;0x80284000 +gDialogueState;0x8029FA60 +gSpeakingActorPrintCtx;0x8029FA60 +gSpeakingActorPrintIsDone;0x8029FA68 +gSpeakingActorTalkAnim;0x8029FA6C +gSpeakingActorIdleAnim;0x8029FA70 +gSpeakingActor;0x8029FA74 +gSpeakingActorPart;0x8029FA7C diff --git a/undefined_syms.txt b/undefined_syms.txt index 7a21c80f4c..b976a4b14a 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -56,6 +56,14 @@ D_8010F094 = 0x8010F094; D_800D9620 = 0x800D9620; +gSpeakingActorPrintCtx = 0x8029FA60; +gSpeakingActorPrintIsDone = 0x8029FA68; +gSpeakingActorTalkAnim = 0x8029FA6C; +gSpeakingActorIdleAnim = 0x8029FA70; +gSpeakingActor = 0x8029FA74; +gSpeakingActorPart = 0x8029FA7C; + +gBattleDmaDest = 0x80284000; gBattleState = 0x800DC068; gBattleStatus = 0x800DC070; From bbeef1ff98ef0586d016154b5191a8489fd8ad5a Mon Sep 17 00:00:00 2001 From: Alex Bates Date: Sat, 17 Oct 2020 21:19:10 +0100 Subject: [PATCH 14/22] near-match ActorSpeak just regalloc issues --- format.sh | 2 +- include/common_structs.h | 9 +++-- src/code_181810.c | 71 +++++++++++++++++++++------------------- 3 files changed, 46 insertions(+), 36 deletions(-) diff --git a/format.sh b/format.sh index 16adddc764..8c3f0a677f 100755 --- a/format.sh +++ b/format.sh @@ -21,7 +21,7 @@ astyle ${FILES} \ --lineend=linux \ --convert-tabs \ --max-code-length=120 \ - --min-conditional-indent=1 \ + --min-conditional-indent=0 \ --style=attach \ --align-pointer=type --align-reference=name \ --indent-switches \ diff --git a/include/common_structs.h b/include/common_structs.h index 030d8d1c17..0974e618f5 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -10,6 +10,11 @@ struct ScriptInstance; typedef ApiStatus(*ApiFunc)(struct ScriptInstance*, s32); +typedef struct Vec2b { + /* 0x00 */ u8 x; + /* 0x01 */ u8 y; +} Vec2b; // size = 0x02 + typedef struct Vec3f { /* 0x00 */ f32 x; /* 0x04 */ f32 y; @@ -1263,7 +1268,7 @@ typedef struct Actor { /* 0x137 */ char unk_137; /* 0x138 */ struct Vec3f homePos; /* 0x144 */ struct Vec3f currentPos; - /* 0x150 */ Vec3s otherPosheadOffset; + /* 0x150 */ Vec3s headOffset; /* 0x156 */ s16 healthBarPosition[3]; /* 0x15C */ f32 rotation[3]; /* 0x168 */ s16 rotationPivotOffset[3]; @@ -1272,7 +1277,7 @@ typedef struct Actor { /* 0x17C */ f32 scaleModifier[3]; /* multiplies normal scale factors componentwise */ /* 0x188 */ f32 scalingFactor; /* 0x18C */ f32 yaw; - /* 0x190 */ u8 size[2]; + /* 0x190 */ Vec2b size; /* 0x192 */ s16 actorID; /* 0x194 */ char unk_194[8]; /* 0x19C */ s32 actorTypeData1[6]; /* 4 = jump sound */ diff --git a/src/code_181810.c b/src/code_181810.c index 062eb8cb5d..c976f6e42c 100644 --- a/src/code_181810.c +++ b/src/code_181810.c @@ -1,17 +1,5 @@ #include "common.h" -// typedef struct DialogueState { -// /* 0x00 */ PrintContext* printCtx; -// /* 0x04 */ s32 unk_04; -// /* 0x08 */ s32 unk_08; -// /* 0x0C */ s32 talkAnim; -// /* 0x10 */ s32 idleAnim; -// /* 0x14 */ Actor* actor; -// /* 0x18 */ ActorPart* part; -// } DialogueState; // 0x8029FA60 size = unknown - -// extern DialogueState gDialogueState; - extern PrintContext* gSpeakingActorPrintCtx; extern s32 gSpeakingActorPrintIsDone; // unk_08 extern s32 gSpeakingActorTalkAnim; @@ -19,18 +7,21 @@ extern s32 gSpeakingActorIdleAnim; extern Actor* gSpeakingActor; extern ActorPart* gSpeakingActorPart; -INCLUDE_ASM(s32, "code_181810", ActorSpeak); -/*ApiStatus ActorSpeak(ScriptInstance *script, s32 isInitialCall) { +#ifdef NON_MATCHING +void clamp_printer_coords(PrintContext* printer, f32 x, f32 y); + +// Register allocation issues, otherwise equivalent (?) +ApiStatus ActorSpeak(ScriptInstance* script, s32 isInitialCall) { Bytecode* args = script->ptrReadPos; - Actor *actor; - ActorPart *part; + Actor* actor; + ActorPart* part; s32 stringID; s32 actorID; s32 partIndex; - PrintContext *printContext; - f32 speakerMouthY; + PrintContext** printContext; s32 anim; + f32 headX, headY, headZ; f32 screenX, screenY, screenZ; if (isInitialCall) { @@ -48,16 +39,22 @@ INCLUDE_ASM(s32, "code_181810", ActorSpeak); gSpeakingActor = actor; gSpeakingActorPart = part; + headX = actor->currentPos.x + actor->headOffset.x; if ((actor->flags & 0x8000) == 0) { - speakerMouthY = actor->otherPosheadOffset.y + actor->currentPos.y + actor->size[1]; + headY = actor->size.y + (actor->currentPos.y + actor->headOffset.y); } else { - speakerMouthY = actor->otherPosheadOffset.y + actor->currentPos.y + (actor->size[1] / 2); + headY = actor->headOffset.y + actor->currentPos.y + (actor->size.y / 2); } + headZ = actor->headOffset.z + actor->currentPos.z; + get_screen_coords(Cam_BATTLE, headX, headY, headZ, &screenX, &screenY, &screenZ); - get_screen_coords(Cam_BATTLE, actor->currentPos.x + actor->otherPosheadOffset.x, speakerMouthY, actor->currentPos.z + actor->otherPosheadOffset.z, &screenX, &screenY, &screenZ); - gSpeakingActorPrintIsDone = 0; - gSpeakingActorPrintCtx = load_string(stringID, &gSpeakingActorPrintIsDone); + { + s32* isPrintDone = &gSpeakingActorPrintIsDone; + *isPrintDone = FALSE; + gSpeakingActorPrintCtx = load_string(stringID, isPrintDone); + } clamp_printer_coords(gSpeakingActorPrintCtx, screenX, screenY); + script->functionTemp[0] = 0; D_8009A650[0] |= 0x10; if (gSpeakingActorTalkAnim >= 0) { @@ -69,20 +66,25 @@ INCLUDE_ASM(s32, "code_181810", ActorSpeak); if (script->functionTemp[0] == 0) { actor = gSpeakingActor; part = gSpeakingActorPart; - if ((actor->flags & 0x8000) == 0) { - speakerMouthY = actor->currentPos.y + actor->otherPosheadOffset.y + actor->size[1]; - } else { - speakerMouthY = actor->currentPos.y + actor->otherPosheadOffset.y + (actor->size[1] / 2); - } - get_screen_coords(Cam_BATTLE, actor->currentPos.x + actor->otherPosheadOffset.x, speakerMouthY, actor->currentPos.z + actor->otherPosheadOffset.z, &screenX, &screenY, &screenZ); - clamp_printer_coords(printContext = gSpeakingActorPrintCtx, screenX, screenY); - if (printContext->stateFlags & 0x40) { + headX = actor->currentPos.x + actor->headOffset.x; + if ((actor->flags & 0x8000) == 0) { + headY = actor->size.y + (actor->currentPos.y + actor->headOffset.y); + } else { + headY = actor->headOffset.y + actor->currentPos.y + (actor->size.y / 2); + } + headZ = actor->headOffset.z + actor->currentPos.z; + get_screen_coords(Cam_BATTLE, headX, headY, headZ, &screenX, &screenY, &screenZ); + + printContext = &gSpeakingActorPrintCtx; + clamp_printer_coords(*printContext, screenX, screenY); + + if ((*printContext)->stateFlags & 0x40) { decrement_status_menu_disabled(); return ApiStatus_DONE1; } - if (printContext->stateFlags & 0x80) { // "is talking" flag + if ((*printContext)->stateFlags & 0x80) { // "is talking" flag anim = gSpeakingActorTalkAnim; } else { anim = gSpeakingActorIdleAnim; @@ -100,7 +102,10 @@ INCLUDE_ASM(s32, "code_181810", ActorSpeak); } return ApiStatus_BLOCK; -}*/ +} +#else +INCLUDE_ASM(s32, "code_181810", ActorSpeak); +#endif INCLUDE_ASM(s32, "code_181810", EndActorSpeech); From 948697d3d80a04f74e3d64877fa9a06818d2c79a Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Sat, 17 Oct 2020 16:37:46 -0400 Subject: [PATCH 15/22] Initial work --- Makefile | 8 +- asm/nonmatchings/code_16F740/end_battle.s | 8 +- asm/nonmatchings/code_16F740/func_80241190.s | 8 +- asm/nonmatchings/code_16F740/func_80248B08.s | 4 +- .../code_16c8e0/draw_main_battle_ui.s | 4 +- asm/nonmatchings/code_16c8e0/func_8023ED5C.s | 4 +- .../code_16c8e0/update_battle_state.s | 12 +- asm/nonmatchings/code_181810/ActorSpeak.s | 44 +- asm/nonmatchings/code_181810/EndActorSpeech.s | 36 +- .../code_181810/LoadBattleDmaData.s | 4 +- .../code_181810/ShowBattleChoice.s | 4 +- asm/nonmatchings/code_18F340/func_8026127C.s | 4 +- asm/nonmatchings/code_190B20/func_80263464.s | 4 +- asm/nonmatchings/code_197F40/func_8026E198.s | 4 +- .../os/code_4ac90_len_3910/func_80072B30.s | 4 +- .../os/code_4ac90_len_3910/load_battle.s | 4 +- tools/Makefile | 9 + tools/Yay0compress | Bin 0 -> 21968 bytes tools/Yay0compress.c | 316 +++++++++++ tools/find_bogus_functions.py | 119 ----- tools/find_yay0_size | Bin 17272 -> 0 bytes tools/find_yay0_size.c | 168 ------ tools/glabel.py | 22 - tools/old/fix_asm.py | 66 --- tools/old/reg_convert.py | 17 - tools/postprocess.py | 45 -- tools/splat.yaml | 492 +++++++++--------- tools/yay0_decompress | Bin 17376 -> 0 bytes tools/yay0_decompress.c | 159 ------ 29 files changed, 652 insertions(+), 917 deletions(-) create mode 100644 tools/Makefile create mode 100755 tools/Yay0compress create mode 100644 tools/Yay0compress.c delete mode 100755 tools/find_bogus_functions.py delete mode 100755 tools/find_yay0_size delete mode 100644 tools/find_yay0_size.c delete mode 100755 tools/glabel.py delete mode 100755 tools/old/fix_asm.py delete mode 100755 tools/old/reg_convert.py delete mode 100755 tools/postprocess.py delete mode 100755 tools/yay0_decompress delete mode 100644 tools/yay0_decompress.c diff --git a/Makefile b/Makefile index 7d3b41a03c..42f458a3ab 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,7 @@ ifdef PM_HEADER_REBUILD H_FILES := $(foreach dir,$(INCLUDE_DIRS),$(wildcard $(dir)/*.h)) endif DATA_FILES := $(foreach dir,$(DATA_DIRS),$(wildcard $(dir)/*.bin)) +YAY0_FILES := $(foreach dir,$(YAY0_DIRS),$(wildcard $(dir)/*.bin)) # Object files O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \ @@ -77,13 +78,14 @@ $(TARGET).ld: tools/splat.yaml ./tools/n64splat/split.py baserom.z64 tools/splat.yaml . --modes ld setup: clean submodules split + make -C tools print-% : ; $(info $* is a $(flavor $*) variable set to [$($*)]) @true $(BUILD_DIR): mkdir -p $(BUILD_DIR) -$(BUILD_DIR)/$(TARGET).elf: $(O_FILES) $(LD_SCRIPT) +$(BUILD_DIR)/$(TARGET).elf: $(O_FILES) $(YAY0_FILES) $(LD_SCRIPT) @$(LD) $(LDFLAGS) -o $@ $(O_FILES) $(BUILD_DIR)/%.o: %.s @@ -95,6 +97,10 @@ $(BUILD_DIR)/%.o: %.c $(H_FILES) $(BUILD_DIR)/%.o: %.bin $(LD) -r -b binary -o $@ $< +$(BUILD_DIR)/%.Yay0: %.bin + tools/Yay0compress $< $@ + $(LD) -r -b binary -o $@ $< + $(BUILD_DIR)/$(TARGET).bin: $(BUILD_DIR)/$(TARGET).elf $(OBJCOPY) $< $@ -O binary diff --git a/asm/nonmatchings/code_16F740/end_battle.s b/asm/nonmatchings/code_16F740/end_battle.s index 60bb366684..57a9f4a015 100644 --- a/asm/nonmatchings/code_16F740/end_battle.s +++ b/asm/nonmatchings/code_16F740/end_battle.s @@ -189,8 +189,8 @@ glabel end_battle /* 1735E0 80244D00 3C04802A */ lui $a0, 0x802a /* 1735E4 80244D04 2484CAAC */ addiu $a0, $a0, -0x3554 /* 1735E8 80244D08 27A50010 */ addiu $a1, $sp, 0x10 -/* 1735EC 80244D0C 3C02800E */ lui $v0, 0x800e -/* 1735F0 80244D10 8C42C068 */ lw $v0, -0x3f98($v0) +/* 1735EC 80244D0C 3C02800E */ lui $v0, %hi(gBattleState) +/* 1735F0 80244D10 8C42C068 */ lw $v0, %lo(gBattleState)($v0) /* 1735F4 80244D14 3C01800E */ lui $at, 0x800e /* 1735F8 80244D18 AC22C4D0 */ sw $v0, -0x3b30($at) /* 1735FC 80244D1C 0C016AFE */ jal get_map_IDs_by_name @@ -207,8 +207,8 @@ glabel end_battle .L80244D48: /* 173628 80244D48 0C090464 */ jal func_80241190 /* 17362C 80244D4C 0000202D */ daddu $a0, $zero, $zero -/* 173630 80244D50 3C02800E */ lui $v0, 0x800e -/* 173634 80244D54 8C42C068 */ lw $v0, -0x3f98($v0) +/* 173630 80244D50 3C02800E */ lui $v0, %hi(gBattleState) +/* 173634 80244D54 8C42C068 */ lw $v0, %lo(gBattleState)($v0) /* 173638 80244D58 3C01800E */ lui $at, 0x800e /* 17363C 80244D5C AC22C4D0 */ sw $v0, -0x3b30($at) /* 173640 80244D60 0C00F945 */ jal func_8003E514 diff --git a/asm/nonmatchings/code_16F740/func_80241190.s b/asm/nonmatchings/code_16F740/func_80241190.s index 9452cfa8e9..fc069d84c5 100644 --- a/asm/nonmatchings/code_16F740/func_80241190.s +++ b/asm/nonmatchings/code_16F740/func_80241190.s @@ -5,8 +5,8 @@ glabel func_80241190 /* 16FA70 80241190 3C03800E */ lui $v1, 0x800e /* 16FA74 80241194 8C63C074 */ lw $v1, -0x3f8c($v1) /* 16FA78 80241198 24020001 */ addiu $v0, $zero, 1 -/* 16FA7C 8024119C 3C01800E */ lui $at, 0x800e -/* 16FA80 802411A0 AC24C068 */ sw $a0, -0x3f98($at) +/* 16FA7C 8024119C 3C01800E */ lui $at, %hi(gBattleState) +/* 16FA80 802411A0 AC24C068 */ sw $a0, %lo(gBattleState)($at) /* 16FA84 802411A4 3C01800E */ lui $at, 0x800e /* 16FA88 802411A8 AC22C4E0 */ sw $v0, -0x3b20($at) /* 16FA8C 802411AC 3C01800E */ lui $at, 0x800e @@ -36,8 +36,8 @@ glabel func_80241190 .L80241204: /* 16FAE4 80241204 24040007 */ addiu $a0, $zero, 7 .L80241208: -/* 16FAE8 80241208 3C01800E */ lui $at, 0x800e -/* 16FAEC 8024120C AC24C068 */ sw $a0, -0x3f98($at) +/* 16FAE8 80241208 3C01800E */ lui $at, %hi(gBattleState) +/* 16FAEC 8024120C AC24C068 */ sw $a0, %lo(gBattleState)($at) .L80241210: /* 16FAF0 80241210 03E00008 */ jr $ra /* 16FAF4 80241214 00000000 */ nop diff --git a/asm/nonmatchings/code_16F740/func_80248B08.s b/asm/nonmatchings/code_16F740/func_80248B08.s index a858e00857..acf01c1536 100644 --- a/asm/nonmatchings/code_16F740/func_80248B08.s +++ b/asm/nonmatchings/code_16F740/func_80248B08.s @@ -159,8 +159,8 @@ glabel func_80248B08 .L80248D40: /* 177620 80248D40 0C090464 */ jal func_80241190 /* 177624 80248D44 0000202D */ daddu $a0, $zero, $zero -/* 177628 80248D48 3C02800E */ lui $v0, 0x800e -/* 17762C 80248D4C 8C42C068 */ lw $v0, -0x3f98($v0) +/* 177628 80248D48 3C02800E */ lui $v0, %hi(gBattleState) +/* 17762C 80248D4C 8C42C068 */ lw $v0, %lo(gBattleState)($v0) /* 177630 80248D50 3C01800E */ lui $at, 0x800e /* 177634 80248D54 AC22C4D0 */ sw $v0, -0x3b30($at) /* 177638 80248D58 0C00CD3C */ jal set_game_mode diff --git a/asm/nonmatchings/code_16c8e0/draw_main_battle_ui.s b/asm/nonmatchings/code_16c8e0/draw_main_battle_ui.s index 83a53dda77..0056a774df 100644 --- a/asm/nonmatchings/code_16c8e0/draw_main_battle_ui.s +++ b/asm/nonmatchings/code_16c8e0/draw_main_battle_ui.s @@ -7,8 +7,8 @@ glabel draw_main_battle_ui /* 16D364 8023EA84 0000882D */ daddu $s1, $zero, $zero /* 16D368 8023EA88 AFBF0018 */ sw $ra, 0x18($sp) /* 16D36C 8023EA8C AFB00010 */ sw $s0, 0x10($sp) -/* 16D370 8023EA90 3C10800E */ lui $s0, 0x800e -/* 16D374 8023EA94 8E10C068 */ lw $s0, -0x3f98($s0) +/* 16D370 8023EA90 3C10800E */ lui $s0, %hi(gBattleState) +/* 16D374 8023EA94 8E10C068 */ lw $s0, %lo(gBattleState)($s0) /* 16D378 8023EA98 3C04800E */ lui $a0, 0x800e /* 16D37C 8023EA9C 2484C4D0 */ addiu $a0, $a0, -0x3b30 /* 16D380 8023EAA0 8C820000 */ lw $v0, ($a0) diff --git a/asm/nonmatchings/code_16c8e0/func_8023ED5C.s b/asm/nonmatchings/code_16c8e0/func_8023ED5C.s index 6063f962ca..ad38659215 100644 --- a/asm/nonmatchings/code_16c8e0/func_8023ED5C.s +++ b/asm/nonmatchings/code_16c8e0/func_8023ED5C.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_8023ED5C -/* 16D63C 8023ED5C 3C02800E */ lui $v0, 0x800e -/* 16D640 8023ED60 8C42C068 */ lw $v0, -0x3f98($v0) +/* 16D63C 8023ED5C 3C02800E */ lui $v0, %hi(gBattleState) +/* 16D640 8023ED60 8C42C068 */ lw $v0, %lo(gBattleState)($v0) /* 16D644 8023ED64 27BDFFB8 */ addiu $sp, $sp, -0x48 /* 16D648 8023ED68 AFB40030 */ sw $s4, 0x30($sp) /* 16D64C 8023ED6C 3C14800E */ lui $s4, %hi(gBattleStatus) diff --git a/asm/nonmatchings/code_16c8e0/update_battle_state.s b/asm/nonmatchings/code_16c8e0/update_battle_state.s index 5096f193f8..2718d53107 100644 --- a/asm/nonmatchings/code_16c8e0/update_battle_state.s +++ b/asm/nonmatchings/code_16c8e0/update_battle_state.s @@ -92,13 +92,13 @@ glabel update_battle_state /* 16CE64 8023E584 82030095 */ lb $v1, 0x95($s0) /* 16CE68 8023E588 10600005 */ beqz $v1, .L8023E5A0 /* 16CE6C 8023E58C 24110001 */ addiu $s1, $zero, 1 -/* 16CE70 8023E590 3C02800E */ lui $v0, 0x800e -/* 16CE74 8023E594 8C42C068 */ lw $v0, -0x3f98($v0) +/* 16CE70 8023E590 3C02800E */ lui $v0, %hi(gBattleState) +/* 16CE74 8023E594 8C42C068 */ lw $v0, %lo(gBattleState)($v0) /* 16CE78 8023E598 10620092 */ beq $v1, $v0, .L8023E7E4 /* 16CE7C 8023E59C 00000000 */ nop .L8023E5A0: -/* 16CE80 8023E5A0 3C02800E */ lui $v0, 0x800e -/* 16CE84 8023E5A4 8C42C068 */ lw $v0, -0x3f98($v0) +/* 16CE80 8023E5A0 3C02800E */ lui $v0, %hi(gBattleState) +/* 16CE84 8023E5A4 8C42C068 */ lw $v0, %lo(gBattleState)($v0) /* 16CE88 8023E5A8 24430001 */ addiu $v1, $v0, 1 /* 16CE8C 8023E5AC 2C620025 */ sltiu $v0, $v1, 0x25 /* 16CE90 8023E5B0 1040008C */ beqz $v0, .L8023E7E4 @@ -383,8 +383,8 @@ glabel update_battle_state .L8023E9E0: /* 16D2C0 8023E9E0 1485000A */ bne $a0, $a1, .L8023EA0C /* 16D2C4 8023E9E4 2462000A */ addiu $v0, $v1, 0xa -/* 16D2C8 8023E9E8 3C03800E */ lui $v1, 0x800e -/* 16D2CC 8023E9EC 8C63C068 */ lw $v1, -0x3f98($v1) +/* 16D2C8 8023E9E8 3C03800E */ lui $v1, %hi(gBattleState) +/* 16D2CC 8023E9EC 8C63C068 */ lw $v1, %lo(gBattleState)($v1) /* 16D2D0 8023E9F0 24020023 */ addiu $v0, $zero, 0x23 /* 16D2D4 8023E9F4 1062001B */ beq $v1, $v0, .L8023EA64 /* 16D2D8 8023E9F8 00000000 */ nop diff --git a/asm/nonmatchings/code_181810/ActorSpeak.s b/asm/nonmatchings/code_181810/ActorSpeak.s index 3ce3f4d62b..4b7235830f 100644 --- a/asm/nonmatchings/code_181810/ActorSpeak.s +++ b/asm/nonmatchings/code_181810/ActorSpeak.s @@ -30,13 +30,13 @@ glabel ActorSpeak /* 181874 80252F94 0260202D */ daddu $a0, $s3, $zero /* 181878 80252F98 0C0B1EAF */ jal get_variable /* 18187C 80252F9C 0040A02D */ daddu $s4, $v0, $zero -/* 181880 80252FA0 3C01802A */ lui $at, 0x802a -/* 181884 80252FA4 AC22FA6C */ sw $v0, -0x594($at) +/* 181880 80252FA0 3C01802A */ lui $at, %hi(gSpeakingActorTalkAnim) +/* 181884 80252FA4 AC22FA6C */ sw $v0, %lo(gSpeakingActorTalkAnim)($at) /* 181888 80252FA8 8E250000 */ lw $a1, ($s1) /* 18188C 80252FAC 0C0B1EAF */ jal get_variable /* 181890 80252FB0 0260202D */ daddu $a0, $s3, $zero -/* 181894 80252FB4 3C01802A */ lui $at, 0x802a -/* 181898 80252FB8 AC22FA70 */ sw $v0, -0x590($at) +/* 181894 80252FB4 3C01802A */ lui $at, %hi(gSpeakingActorIdleAnim) +/* 181898 80252FB8 AC22FA70 */ sw $v0, %lo(gSpeakingActorIdleAnim)($at) /* 18189C 80252FBC 2402FF81 */ addiu $v0, $zero, -0x7f /* 1818A0 80252FC0 16420002 */ bne $s2, $v0, .L80252FCC /* 1818A4 80252FC4 00000000 */ nop @@ -52,8 +52,8 @@ glabel ActorSpeak /* 1818C8 80252FE8 86230150 */ lh $v1, 0x150($s1) /* 1818CC 80252FEC C6200144 */ lwc1 $f0, 0x144($s1) /* 1818D0 80252FF0 8E220000 */ lw $v0, ($s1) -/* 1818D4 80252FF4 3C01802A */ lui $at, 0x802a -/* 1818D8 80252FF8 AC31FA74 */ sw $s1, -0x58c($at) +/* 1818D4 80252FF4 3C01802A */ lui $at, %hi(gSpeakingActor) +/* 1818D8 80252FF8 AC31FA74 */ sw $s1, %lo(gSpeakingActor)($at) /* 1818DC 80252FFC 3C01802A */ lui $at, 0x802a /* 1818E0 80253000 AC32FA78 */ sw $s2, -0x588($at) /* 1818E4 80253004 44831000 */ mtc1 $v1, $f2 @@ -106,23 +106,23 @@ glabel ActorSpeak /* 181998 802530B8 0C00B94E */ jal get_screen_coords /* 18199C 802530BC AFA20018 */ sw $v0, 0x18($sp) /* 1819A0 802530C0 0200202D */ daddu $a0, $s0, $zero -/* 1819A4 802530C4 3C05802A */ lui $a1, 0x802a -/* 1819A8 802530C8 24A5FA68 */ addiu $a1, $a1, -0x598 +/* 1819A4 802530C4 3C05802A */ lui $a1, %hi(gSpeakingActorPrintIsDone) +/* 1819A8 802530C8 24A5FA68 */ addiu $a1, $a1, %lo(gSpeakingActorPrintIsDone) /* 1819AC 802530CC 0C049640 */ jal load_string /* 1819B0 802530D0 ACA00000 */ sw $zero, ($a1) /* 1819B4 802530D4 8FA50020 */ lw $a1, 0x20($sp) /* 1819B8 802530D8 8FA60024 */ lw $a2, 0x24($sp) /* 1819BC 802530DC 0040202D */ daddu $a0, $v0, $zero -/* 1819C0 802530E0 3C01802A */ lui $at, 0x802a -/* 1819C4 802530E4 AC24FA60 */ sw $a0, -0x5a0($at) +/* 1819C0 802530E0 3C01802A */ lui $at, %hi(gSpeakingActorPrintCtx) +/* 1819C4 802530E4 AC24FA60 */ sw $a0, %lo(gSpeakingActorPrintCtx)($at) /* 1819C8 802530E8 0C0496AE */ jal clamp_printer_coords /* 1819CC 802530EC 00000000 */ nop /* 1819D0 802530F0 3C03800A */ lui $v1, %hi(D_8009A650) /* 1819D4 802530F4 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) /* 1819D8 802530F8 AE600070 */ sw $zero, 0x70($s3) /* 1819DC 802530FC 8C620000 */ lw $v0, ($v1) -/* 1819E0 80253100 3C06802A */ lui $a2, 0x802a -/* 1819E4 80253104 8CC6FA6C */ lw $a2, -0x594($a2) +/* 1819E0 80253100 3C06802A */ lui $a2, %hi(gSpeakingActorTalkAnim) +/* 1819E4 80253104 8CC6FA6C */ lw $a2, %lo(gSpeakingActorTalkAnim)($a2) /* 1819E8 80253108 34420010 */ ori $v0, $v0, 0x10 /* 1819EC 8025310C 04C00004 */ bltz $a2, .L80253120 /* 1819F0 80253110 AC620000 */ sw $v0, ($v1) @@ -136,8 +136,8 @@ glabel ActorSpeak /* 181A08 80253128 8E620070 */ lw $v0, 0x70($s3) /* 181A0C 8025312C 14400060 */ bnez $v0, .L802532B0 /* 181A10 80253130 0000102D */ daddu $v0, $zero, $zero -/* 181A14 80253134 3C11802A */ lui $s1, 0x802a -/* 181A18 80253138 8E31FA74 */ lw $s1, -0x58c($s1) +/* 181A14 80253134 3C11802A */ lui $s1, %hi(gSpeakingActor) +/* 181A18 80253138 8E31FA74 */ lw $s1, %lo(gSpeakingActor)($s1) /* 181A1C 8025313C 3C12802A */ lui $s2, 0x802a /* 181A20 80253140 8E52FA78 */ lw $s2, -0x588($s2) /* 181A24 80253144 86220150 */ lh $v0, 0x150($s1) @@ -192,8 +192,8 @@ glabel ActorSpeak /* 181AE0 80253200 27A20028 */ addiu $v0, $sp, 0x28 /* 181AE4 80253204 0C00B94E */ jal get_screen_coords /* 181AE8 80253208 AFA20018 */ sw $v0, 0x18($sp) -/* 181AEC 8025320C 3C10802A */ lui $s0, 0x802a -/* 181AF0 80253210 2610FA60 */ addiu $s0, $s0, -0x5a0 +/* 181AEC 8025320C 3C10802A */ lui $s0, %hi(gSpeakingActorPrintCtx) +/* 181AF0 80253210 2610FA60 */ addiu $s0, $s0, %lo(gSpeakingActorPrintCtx) /* 181AF4 80253214 8E040000 */ lw $a0, ($s0) /* 181AF8 80253218 8FA50020 */ lw $a1, 0x20($sp) /* 181AFC 8025321C 0C0496AE */ jal clamp_printer_coords @@ -210,21 +210,21 @@ glabel ActorSpeak .L80253248: /* 181B28 80253248 10400005 */ beqz $v0, .L80253260 /* 181B2C 8025324C 00000000 */ nop -/* 181B30 80253250 3C06802A */ lui $a2, 0x802a -/* 181B34 80253254 8CC6FA6C */ lw $a2, -0x594($a2) +/* 181B30 80253250 3C06802A */ lui $a2, %hi(gSpeakingActorTalkAnim) +/* 181B34 80253254 8CC6FA6C */ lw $a2, %lo(gSpeakingActorTalkAnim)($a2) /* 181B38 80253258 08094C9A */ j .L80253268 /* 181B3C 8025325C 00000000 */ nop .L80253260: -/* 181B40 80253260 3C06802A */ lui $a2, 0x802a -/* 181B44 80253264 8CC6FA70 */ lw $a2, -0x590($a2) +/* 181B40 80253260 3C06802A */ lui $a2, %hi(gSpeakingActorIdleAnim) +/* 181B44 80253264 8CC6FA70 */ lw $a2, %lo(gSpeakingActorIdleAnim)($a2) .L80253268: /* 181B48 80253268 04C00003 */ bltz $a2, .L80253278 /* 181B4C 8025326C 0220202D */ daddu $a0, $s1, $zero /* 181B50 80253270 0C098F82 */ jal func_80263E08 /* 181B54 80253274 0240282D */ daddu $a1, $s2, $zero .L80253278: -/* 181B58 80253278 3C03802A */ lui $v1, 0x802a -/* 181B5C 8025327C 8C63FA68 */ lw $v1, -0x598($v1) +/* 181B58 80253278 3C03802A */ lui $v1, %hi(gSpeakingActorPrintIsDone) +/* 181B5C 8025327C 8C63FA68 */ lw $v1, %lo(gSpeakingActorPrintIsDone)($v1) /* 181B60 80253280 24020001 */ addiu $v0, $zero, 1 /* 181B64 80253284 1462000A */ bne $v1, $v0, .L802532B0 /* 181B68 80253288 0000102D */ daddu $v0, $zero, $zero diff --git a/asm/nonmatchings/code_181810/EndActorSpeech.s b/asm/nonmatchings/code_181810/EndActorSpeech.s index 6e5da8ba30..4a2ec08a22 100644 --- a/asm/nonmatchings/code_181810/EndActorSpeech.s +++ b/asm/nonmatchings/code_181810/EndActorSpeech.s @@ -24,13 +24,13 @@ glabel EndActorSpeech /* 181BFC 8025331C 0240202D */ daddu $a0, $s2, $zero /* 181C00 80253320 0C0B1EAF */ jal get_variable /* 181C04 80253324 0040982D */ daddu $s3, $v0, $zero -/* 181C08 80253328 3C01802A */ lui $at, 0x802a -/* 181C0C 8025332C AC22FA6C */ sw $v0, -0x594($at) +/* 181C08 80253328 3C01802A */ lui $at, %hi(gSpeakingActorTalkAnim) +/* 181C0C 8025332C AC22FA6C */ sw $v0, %lo(gSpeakingActorTalkAnim)($at) /* 181C10 80253330 8E050000 */ lw $a1, ($s0) /* 181C14 80253334 0C0B1EAF */ jal get_variable /* 181C18 80253338 0240202D */ daddu $a0, $s2, $zero -/* 181C1C 8025333C 3C01802A */ lui $at, 0x802a -/* 181C20 80253340 AC22FA70 */ sw $v0, -0x590($at) +/* 181C1C 8025333C 3C01802A */ lui $at, %hi(gSpeakingActorIdleAnim) +/* 181C20 80253340 AC22FA70 */ sw $v0, %lo(gSpeakingActorIdleAnim)($at) /* 181C24 80253344 2402FF81 */ addiu $v0, $zero, -0x7f /* 181C28 80253348 16220002 */ bne $s1, $v0, .L80253354 /* 181C2C 8025334C 00000000 */ nop @@ -42,10 +42,10 @@ glabel EndActorSpeech /* 181C40 80253360 0220202D */ daddu $a0, $s1, $zero /* 181C44 80253364 0C099117 */ jal get_actor_part /* 181C48 80253368 0260282D */ daddu $a1, $s3, $zero -/* 181C4C 8025336C 3C04802A */ lui $a0, 0x802a -/* 181C50 80253370 8C84FA60 */ lw $a0, -0x5a0($a0) -/* 181C54 80253374 3C01802A */ lui $at, 0x802a -/* 181C58 80253378 AC31FA74 */ sw $s1, -0x58c($at) +/* 181C4C 8025336C 3C04802A */ lui $a0, %hi(gSpeakingActorPrintCtx) +/* 181C50 80253370 8C84FA60 */ lw $a0, %lo(gSpeakingActorPrintCtx)($a0) +/* 181C54 80253374 3C01802A */ lui $at, %hi(gSpeakingActor) +/* 181C58 80253378 AC31FA74 */ sw $s1, %lo(gSpeakingActor)($at) /* 181C5C 8025337C 3C01802A */ lui $at, 0x802a /* 181C60 80253380 AC22FA78 */ sw $v0, -0x588($at) /* 181C64 80253384 0C04971C */ jal close_message @@ -56,8 +56,8 @@ glabel EndActorSpeech /* 181C74 80253394 8E420070 */ lw $v0, 0x70($s2) /* 181C78 80253398 14400060 */ bnez $v0, .L8025351C /* 181C7C 8025339C 0000102D */ daddu $v0, $zero, $zero -/* 181C80 802533A0 3C11802A */ lui $s1, 0x802a -/* 181C84 802533A4 8E31FA74 */ lw $s1, -0x58c($s1) +/* 181C80 802533A0 3C11802A */ lui $s1, %hi(gSpeakingActor) +/* 181C84 802533A4 8E31FA74 */ lw $s1, %lo(gSpeakingActor)($s1) /* 181C88 802533A8 3C12802A */ lui $s2, 0x802a /* 181C8C 802533AC 8E52FA78 */ lw $s2, -0x588($s2) /* 181C90 802533B0 86220150 */ lh $v0, 0x150($s1) @@ -112,8 +112,8 @@ glabel EndActorSpeech /* 181D4C 8025346C 27A20028 */ addiu $v0, $sp, 0x28 /* 181D50 80253470 0C00B94E */ jal get_screen_coords /* 181D54 80253474 AFA20018 */ sw $v0, 0x18($sp) -/* 181D58 80253478 3C10802A */ lui $s0, 0x802a -/* 181D5C 8025347C 2610FA60 */ addiu $s0, $s0, -0x5a0 +/* 181D58 80253478 3C10802A */ lui $s0, %hi(gSpeakingActorPrintCtx) +/* 181D5C 8025347C 2610FA60 */ addiu $s0, $s0, %lo(gSpeakingActorPrintCtx) /* 181D60 80253480 8E040000 */ lw $a0, ($s0) /* 181D64 80253484 8FA50020 */ lw $a1, 0x20($sp) /* 181D68 80253488 0C0496AE */ jal clamp_printer_coords @@ -130,21 +130,21 @@ glabel EndActorSpeech .L802534B4: /* 181D94 802534B4 10400005 */ beqz $v0, .L802534CC /* 181D98 802534B8 00000000 */ nop -/* 181D9C 802534BC 3C06802A */ lui $a2, 0x802a -/* 181DA0 802534C0 8CC6FA6C */ lw $a2, -0x594($a2) +/* 181D9C 802534BC 3C06802A */ lui $a2, %hi(gSpeakingActorTalkAnim) +/* 181DA0 802534C0 8CC6FA6C */ lw $a2, %lo(gSpeakingActorTalkAnim)($a2) /* 181DA4 802534C4 08094D35 */ j .L802534D4 /* 181DA8 802534C8 00000000 */ nop .L802534CC: -/* 181DAC 802534CC 3C06802A */ lui $a2, 0x802a -/* 181DB0 802534D0 8CC6FA70 */ lw $a2, -0x590($a2) +/* 181DAC 802534CC 3C06802A */ lui $a2, %hi(gSpeakingActorIdleAnim) +/* 181DB0 802534D0 8CC6FA70 */ lw $a2, %lo(gSpeakingActorIdleAnim)($a2) .L802534D4: /* 181DB4 802534D4 04C00003 */ bltz $a2, .L802534E4 /* 181DB8 802534D8 0220202D */ daddu $a0, $s1, $zero /* 181DBC 802534DC 0C098F82 */ jal func_80263E08 /* 181DC0 802534E0 0240282D */ daddu $a1, $s2, $zero .L802534E4: -/* 181DC4 802534E4 3C03802A */ lui $v1, 0x802a -/* 181DC8 802534E8 8C63FA68 */ lw $v1, -0x598($v1) +/* 181DC4 802534E4 3C03802A */ lui $v1, %hi(gSpeakingActorPrintIsDone) +/* 181DC8 802534E8 8C63FA68 */ lw $v1, %lo(gSpeakingActorPrintIsDone)($v1) /* 181DCC 802534EC 24020001 */ addiu $v0, $zero, 1 /* 181DD0 802534F0 1462000A */ bne $v1, $v0, .L8025351C /* 181DD4 802534F4 0000102D */ daddu $v0, $zero, $zero diff --git a/asm/nonmatchings/code_181810/LoadBattleDmaData.s b/asm/nonmatchings/code_181810/LoadBattleDmaData.s index b16584cf76..8e549b9480 100644 --- a/asm/nonmatchings/code_181810/LoadBattleDmaData.s +++ b/asm/nonmatchings/code_181810/LoadBattleDmaData.s @@ -19,8 +19,8 @@ glabel LoadBattleDmaData /* 181F3C 8025365C 00431021 */ addu $v0, $v0, $v1 /* 181F40 80253660 5040000E */ beql $v0, $zero, .L8025369C /* 181F44 80253664 24020002 */ addiu $v0, $zero, 2 -/* 181F48 80253668 3C068028 */ lui $a2, 0x8028 -/* 181F4C 8025366C 8CC64000 */ lw $a2, 0x4000($a2) +/* 181F48 80253668 3C068028 */ lui $a2, %hi(gBattleDmaDest) +/* 181F4C 8025366C 8CC64000 */ lw $a2, %lo(gBattleDmaDest)($a2) /* 181F50 80253670 14C00005 */ bnez $a2, .L80253688 /* 181F54 80253674 00000000 */ nop /* 181F58 80253678 8C440000 */ lw $a0, ($v0) diff --git a/asm/nonmatchings/code_181810/ShowBattleChoice.s b/asm/nonmatchings/code_181810/ShowBattleChoice.s index 70c4b30185..98bca31fee 100644 --- a/asm/nonmatchings/code_181810/ShowBattleChoice.s +++ b/asm/nonmatchings/code_181810/ShowBattleChoice.s @@ -23,8 +23,8 @@ glabel ShowBattleChoice /* 181E5C 8025357C 0000102D */ daddu $v0, $zero, $zero /* 181E60 80253580 3C02802A */ lui $v0, 0x802a /* 181E64 80253584 8C42FA64 */ lw $v0, -0x59c($v0) -/* 181E68 80253588 3C04802A */ lui $a0, 0x802a -/* 181E6C 8025358C 8C84FA60 */ lw $a0, -0x5a0($a0) +/* 181E68 80253588 3C04802A */ lui $a0, %hi(gSpeakingActorPrintCtx) +/* 181E6C 8025358C 8C84FA60 */ lw $a0, %lo(gSpeakingActorPrintCtx)($a0) /* 181E70 80253590 904304E8 */ lbu $v1, 0x4e8($v0) /* 181E74 80253594 24020001 */ addiu $v0, $zero, 1 /* 181E78 80253598 A08304E8 */ sb $v1, 0x4e8($a0) diff --git a/asm/nonmatchings/code_18F340/func_8026127C.s b/asm/nonmatchings/code_18F340/func_8026127C.s index 3896485a55..975765ae23 100644 --- a/asm/nonmatchings/code_18F340/func_8026127C.s +++ b/asm/nonmatchings/code_18F340/func_8026127C.s @@ -15,8 +15,8 @@ glabel func_8026127C /* 18FB84 802612A4 AFBF0018 */ sw $ra, 0x18($sp) /* 18FB88 802612A8 AFB10014 */ sw $s1, 0x14($sp) /* 18FB8C 802612AC A2000099 */ sb $zero, 0x99($s0) -/* 18FB90 802612B0 3C01800E */ lui $at, 0x800e -/* 18FB94 802612B4 AC22C068 */ sw $v0, -0x3f98($at) +/* 18FB90 802612B0 3C01800E */ lui $at, %hi(gBattleState) +/* 18FB94 802612B4 AC22C068 */ sw $v0, %lo(gBattleState)($at) /* 18FB98 802612B8 8E020000 */ lw $v0, ($s0) /* 18FB9C 802612BC 3C118011 */ lui $s1, %hi(gPlayerData) /* 18FBA0 802612C0 2631F290 */ addiu $s1, $s1, %lo(gPlayerData) diff --git a/asm/nonmatchings/code_190B20/func_80263464.s b/asm/nonmatchings/code_190B20/func_80263464.s index fa0d7781a9..574798d6fd 100644 --- a/asm/nonmatchings/code_190B20/func_80263464.s +++ b/asm/nonmatchings/code_190B20/func_80263464.s @@ -7,8 +7,8 @@ glabel func_80263464 /* 191D4C 8026346C 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 191D50 80263470 1C40000D */ bgtz $v0, .L802634A8 /* 191D54 80263474 AFBF0010 */ sw $ra, 0x10($sp) -/* 191D58 80263478 3C02800E */ lui $v0, 0x800e -/* 191D5C 8026347C 8C42C068 */ lw $v0, -0x3f98($v0) +/* 191D58 80263478 3C02800E */ lui $v0, %hi(gBattleState) +/* 191D5C 8026347C 8C42C068 */ lw $v0, %lo(gBattleState)($v0) /* 191D60 80263480 3C03800E */ lui $v1, 0x800e /* 191D64 80263484 8C63C4DC */ lw $v1, -0x3b24($v1) /* 191D68 80263488 3C01800E */ lui $at, 0x800e diff --git a/asm/nonmatchings/code_197F40/func_8026E198.s b/asm/nonmatchings/code_197F40/func_8026E198.s index 55e77859c1..35733e152e 100644 --- a/asm/nonmatchings/code_197F40/func_8026E198.s +++ b/asm/nonmatchings/code_197F40/func_8026E198.s @@ -20,8 +20,8 @@ glabel func_8026E198 /* 19CAB0 8026E1D0 82030095 */ lb $v1, 0x95($s0) /* 19CAB4 8026E1D4 50600008 */ beql $v1, $zero, .L8026E1F8 /* 19CAB8 8026E1D8 24020002 */ addiu $v0, $zero, 2 -/* 19CABC 8026E1DC 3C02800E */ lui $v0, 0x800e -/* 19CAC0 8026E1E0 8C42C068 */ lw $v0, -0x3f98($v0) +/* 19CABC 8026E1DC 3C02800E */ lui $v0, %hi(gBattleState) +/* 19CAC0 8026E1E0 8C42C068 */ lw $v0, %lo(gBattleState)($v0) /* 19CAC4 8026E1E4 00431026 */ xor $v0, $v0, $v1 /* 19CAC8 8026E1E8 2C420001 */ sltiu $v0, $v0, 1 /* 19CACC 8026E1EC 0809B87E */ j .L8026E1F8 diff --git a/asm/nonmatchings/os/code_4ac90_len_3910/func_80072B30.s b/asm/nonmatchings/os/code_4ac90_len_3910/func_80072B30.s index f5f3b161fc..9f23aa6307 100644 --- a/asm/nonmatchings/os/code_4ac90_len_3910/func_80072B30.s +++ b/asm/nonmatchings/os/code_4ac90_len_3910/func_80072B30.s @@ -6,8 +6,8 @@ glabel func_80072B30 /* 4DF34 80072B34 8C42419C */ lw $v0, %lo(gGameStatusPtr)($v0) /* 4DF38 80072B38 A04000AA */ sb $zero, 0xaa($v0) /* 4DF3C 80072B3C 24020001 */ addiu $v0, $zero, 1 -/* 4DF40 80072B40 3C01800E */ lui $at, 0x800e -/* 4DF44 80072B44 AC20C068 */ sw $zero, -0x3f98($at) +/* 4DF40 80072B40 3C01800E */ lui $at, %hi(gBattleState) +/* 4DF44 80072B44 AC20C068 */ sw $zero, %lo(gBattleState)($at) /* 4DF48 80072B48 3C01800E */ lui $at, 0x800e /* 4DF4C 80072B4C AC22C4E0 */ sw $v0, -0x3b20($at) /* 4DF50 80072B50 3C01800E */ lui $at, 0x800e diff --git a/asm/nonmatchings/os/code_4ac90_len_3910/load_battle.s b/asm/nonmatchings/os/code_4ac90_len_3910/load_battle.s index 076b5ac9a4..5c5d3e18f9 100644 --- a/asm/nonmatchings/os/code_4ac90_len_3910/load_battle.s +++ b/asm/nonmatchings/os/code_4ac90_len_3910/load_battle.s @@ -9,8 +9,8 @@ glabel load_battle /* 4E0A0 80072CA0 0C00CD3C */ jal set_game_mode /* 4E0A4 80072CA4 24040008 */ addiu $a0, $zero, 8 /* 4E0A8 80072CA8 8FBF0010 */ lw $ra, 0x10($sp) -/* 4E0AC 80072CAC 3C01800E */ lui $at, 0x800e -/* 4E0B0 80072CB0 AC20C068 */ sw $zero, -0x3f98($at) +/* 4E0AC 80072CAC 3C01800E */ lui $at, %hi(gBattleState) +/* 4E0B0 80072CB0 AC20C068 */ sw $zero, %lo(gBattleState)($at) /* 4E0B4 80072CB4 3C01800E */ lui $at, 0x800e /* 4E0B8 80072CB8 AC20C4D0 */ sw $zero, -0x3b30($at) /* 4E0BC 80072CBC 3C01800E */ lui $at, 0x800e diff --git a/tools/Makefile b/tools/Makefile new file mode 100644 index 0000000000..35893a733c --- /dev/null +++ b/tools/Makefile @@ -0,0 +1,9 @@ +default: all + +all: Yay0compress + +Yay0compress: + gcc Yay0compress.c -o Yay0compress + +clean: + rm -f Yay0compress diff --git a/tools/Yay0compress b/tools/Yay0compress new file mode 100755 index 0000000000000000000000000000000000000000..a3ffcb67ab9a8bb0418a54319d630dbeb45adaff GIT binary patch literal 21968 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 +#include +#include + +int main(int argc, const char **argv, const char **envp); +void encode(); +void search(unsigned int a1, int a2, int *a3, unsigned int *a4); +int mischarsearch(unsigned char *a1, int a2, unsigned char *a3, int a4); +void initskip(unsigned char *a1, int a2); +void writeshort(short a1); +void writeint4(int a1); + +unsigned short skip[256]; // idb +int cp; // weak +int ndp; // weak +FILE *fp; // idb +unsigned char *def; +unsigned short *pol; +int pp; // weak +int insize; // idb +int ncp; // weak +int npp; // weak +unsigned char *bz; +int dp; // idb +unsigned int *cmd; + +int main(int argc, const char **argv, const char **envp) +{ + char src[999]; + char dest[999]; + + + if (argc < 3) + { + fprintf(stderr, "Yay0decompress [infile] [outfile]\n"); + return 1; + } + + strcpy(src, argv[1]); + strcpy(dest, argv[2]); + + if ((fp = fopen(src, "rb")) == NULL) + { + fprintf(stderr, "FILE OPEN ERROR![%s]\n", src); + return 1; + } + + fseek(fp, 0, SEEK_END); + insize = ftell(fp); + fseek(fp, 0, SEEK_SET); + + bz = malloc(insize); + fread(bz, 1, insize, fp); + fclose(fp); + + for (int i = 0; src[i]; i++) + { + if (src[i] == '.') + { + src[i] = 0; + break; + } + } + + if ((fp = fopen(dest, "wb")) == NULL) + { + fprintf(stderr, "FILE CREATE ERROR![%s]\n", dest); + exit(1); + } + + encode(); + + fprintf(fp, "Yay0"); + + writeint4(insize); + + writeint4(4 * cp + 16); + writeint4(2 * pp + 4 * cp + 16); + + for (int i = 0; i < cp; i++) + writeint4(cmd[i]); + + for (int i = 0; i < pp; i++) + writeshort(pol[i]); + + fwrite(def, 1u, dp, fp); + fclose(fp); + + return 0; +} + +void encode() +{ + unsigned int v0; // esi + unsigned int v1; // edi + int v2; // edx + int v3; // ebx + int v4; // edx + char v5; // [esp+Ch] [ebp-18h] + unsigned int v6; // [esp+10h] [ebp-14h] + unsigned int v7; // [esp+14h] [ebp-10h] + int v8; // [esp+18h] [ebp-Ch] + unsigned int a4; // [esp+1Ch] [ebp-8h] + int a3; // [esp+20h] [ebp-4h] + + dp = 0; + pp = 0; + cp = 0; + npp = 4096; + ndp = 4096; + ncp = 4096; + cmd = calloc(0x4000u, 1u); + pol = malloc(2 * npp); + def = malloc(4 * ndp); + v0 = 0; + v6 = 1024; + v1 = 2147483648; + while ( insize > v0 ) + { + if ( v6 < v0 ) + v6 += 1024; + search(v0, insize, &a3, &a4); + if ( a4 <= 2 ) + { + cmd[cp] |= v1; + def[dp++] = bz[v0++]; + if ( ndp == dp ) + { + ndp = dp + 4096; + def = realloc(def, dp + 4096); + } + } + else + { + search(v0 + 1, insize, &v8, &v7); + if ( v7 > a4 + 1 ) + { + cmd[cp] |= v1; + def[dp++] = bz[v0++]; + if ( ndp == dp ) + { + ndp = dp + 4096; + def = realloc(def, dp + 4096); + } + v1 >>= 1; + if ( !v1 ) + { + v1 = 2147483648; + v2 = cp++; + if ( cp == ncp ) + { + ncp = v2 + 1025; + cmd = realloc(cmd, 4 * (v2 + 1025)); + } + cmd[cp] = 0; + } + a4 = v7; + a3 = v8; + } + v3 = v0 - a3 - 1; + a3 = v0 - a3 - 1; + v5 = a4; + if ( a4 > 0x11 ) + { + pol[pp++] = v3; + def[dp++] = v5 - 18; + if ( ndp == dp ) + { + ndp = dp + 4096; + def = realloc(def, dp + 4096); + } + } + else + { + pol[pp++] = v3 | (((short)a4 - 2) << 12); + } + if ( npp == pp ) + { + npp = pp + 4096; + pol = realloc(pol, 2 * (pp + 4096)); + } + v0 += a4; + } + v1 >>= 1; + if ( !v1 ) + { + v1 = 2147483648; + v4 = cp++; + if ( cp == ncp ) + { + ncp = v4 + 1025; + cmd = realloc(cmd, 4 * (v4 + 1025)); + } + cmd[cp] = 0; + } + } + if ( v1 != 0x80000000 ) + ++cp; + fprintf(stderr, "IN=%d OUT=%d\n", insize, dp + 2 * pp + 4 * cp + 16); +} + +void search(unsigned int a1, int a2, int *a3, unsigned int *a4) +{ + unsigned int v4; // ebx + unsigned int v5; // esi + unsigned int *v6; // edi + unsigned int v7; // [esp+Ch] [ebp-10h] + int v8; // [esp+14h] [ebp-8h] + unsigned int v9; // [esp+18h] [ebp-4h] + + v4 = 3; + v5 = 0; + if ( a1 > 0x1000 ) + v5 = a1 - 4096; + v9 = 273; + if ( a2 - a1 <= 0x111 ) + v9 = a2 - a1; + if ( v9 > 2 ) + { + while ( a1 > v5 ) + { + v7 = mischarsearch(&bz[a1], v4, &bz[v5], v4 + a1 - v5); + if ( v7 >= a1 - v5 ) + break; + for ( ; v9 > v4; ++v4 ) + { + if ( bz[v4 + v5 + v7] != bz[v4 + a1] ) + break; + } + if ( v9 == v4 ) + { + *a3 = v7 + v5; + goto LABEL_17; + } + v8 = v5 + v7; + ++v4; + v5 += v7 + 1; + } + *a3 = v8; + if ( v4 > 3 ) + { + --v4; +LABEL_17: + *a4 = v4; + return; + } + v6 = a4; + } + else + { + *a4 = 0; + v6 = a3; + } + *v6 = 0; +} + +int mischarsearch(unsigned char *pattern, int patternlen, unsigned char *data, int datalen) +{ + int result; // eax + int i; // ebx + int v6; // eax + int j; // ecx + + result = datalen; + if ( patternlen <= datalen ) + { + initskip(pattern, patternlen); + for ( i = patternlen - 1; ; i += v6 ) + { + if ( pattern[patternlen - 1] == data[i] ) + { + --i; + j = patternlen - 2; + if ( patternlen - 2 < 0 ) + return i + 1; + while ( pattern[j] == data[i] ) + { + --i; + if ( --j < 0 ) + return i + 1; + } + v6 = patternlen - j; + if ( skip[data[i]] > patternlen - j ) + v6 = skip[data[i]]; + } + else + { + v6 = skip[data[i]]; + } + } + } + return result; +} + +void initskip(unsigned char *pattern, int len) +{ + for (int i = 0; i < 256; i++) + skip[i] = len; + + for (int i = 0; i < len; i++) + skip[pattern[i]] = len - i - 1; +} + +void writeshort(short val) +{ + fputc((val & 0xff00) >> 8, fp); + fputc((val & 0x00ff) >> 0, fp); +} + +void writeint4(int val) +{ + fputc((val & 0x00ff000000) >> 24, fp); + fputc((val & 0x0000ff0000) >> 16, fp); + fputc((val & 0x000000ff00) >> 8, fp); + fputc((val & 0x00000000ff) >> 0, fp); +} diff --git a/tools/find_bogus_functions.py b/tools/find_bogus_functions.py deleted file mode 100755 index bc95fa5c5a..0000000000 --- a/tools/find_bogus_functions.py +++ /dev/null @@ -1,119 +0,0 @@ -#!/usr/bin/python3 - -import os -import re - -script_dir = os.path.dirname(os.path.realpath(__file__)) -asm_dir = script_dir + "/../asm/" - -js = set() -jals = set() -bs = set() -bals = set() - -debug = False - -renames = [] - - -def dprint(string): - if debug: - print(string) - - -def scan_file(path): - with open(path) as f: - file_lines = f.readlines() - - for line in file_lines: - line = line.strip() - if re.findall(r'\sj\s+.*', line): - target = line.split()[-1] - js.add(target) - if re.findall(r'\sjal\s+.*', line): - target = line.split()[-1] - jals.add(target) - if re.findall(r'\sb.*', line): - target = line.split()[-1] - bs.add(target) - if re.findall(r'\sbal\s+.*', line): - target = line.split()[-1] - bals.add(target) - - -def get_linked_flags(label): - return (label in js or label in bs), (label in jals or label in bals) - - -def process_file(path): - print("Processing " + path) - with open(path) as fi: - file_lines = fi.readlines() - - skip_next = False - to_delete = [] - for i, line in enumerate(file_lines): - if skip_next: - skip_next = False - continue - line = line.strip() - - if line.endswith(":") and not line.startswith(".L"): - func_preamble = line.startswith("func_") - label = line[:-1] - linked_to, linked_al_to = get_linked_flags(label) - - if func_preamble: - # func_12345689 - - # Delete redundant label below - # if file_lines[i + 1].strip() == ".L" + label[5:13] + ":": - # to_delete.append(i + 1) - # skip_next = True - - if linked_al_to: - # Seems to be legit. Do nothing for now - continue - elif linked_to: - # j / b 'd to, rename as label - renames.append((label, ".L" + label[5:])) - else: - # Not referenced by anything. Delete - to_delete.append(i) - - if len(to_delete) > 0: - print("\tDeleting " + str(len(to_delete)) + " lines...") - for i in reversed(to_delete): - del file_lines[i] - with open(path, "w") as fo: - fo.writelines(file_lines) - - -# Collect all branches and jumps -for root, dirs, files in os.walk(asm_dir): - for file in files: - if file.endswith(".s"): - scan_file(os.path.join(root, file)) - -print("Scanned all files") - -# Process files -for root, dirs, files in os.walk(asm_dir): - for file in files: - if file.endswith(".s") and "boot" not in file: - process_file(os.path.join(root, file)) - -if len(renames) > 0: - print("Renaming " + str(len(renames)) + " labels...") - for root, dirs, files in os.walk(asm_dir): - for file in files: - if file.endswith(".s"): - file_path = os.path.join(root, file) - with open(file_path) as f: - orig_file_text = f.read() - file_text = orig_file_text - for rename in renames: - file_text = file_text.replace(rename[0], rename[1]) - if file_text != orig_file_text: - with open(file_path, "w") as f: - f.write(file_text) diff --git a/tools/find_yay0_size b/tools/find_yay0_size deleted file mode 100755 index b37664af3f97694782293f89b66c8ddf71b0f125..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17272 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 I!BrIh1>!&q(f|Me diff --git a/tools/find_yay0_size.c b/tools/find_yay0_size.c deleted file mode 100644 index ec1175cbf4..0000000000 --- a/tools/find_yay0_size.c +++ /dev/null @@ -1,168 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#define U32(s) ((uint32_t)(*(s) << 24 | *((s) + 1) << 16 | *((s) + 2) << 8 | *((s) + 3))) -#define ALIGN(n, s) ((n) + (s)-1) & ~((s)-1) - -#define ERROR_UNSUPPORTED -1 -#define ERROR_CORRUPTED -2 -#define ERROR_UNRECOGNIZED -3 -#define ERROR_MEMORY -4 -#define ERROR_BACKREFERENCE_TOO_DISTANT -5 -#define ERROR_OVERFLOW -6 - - -uint8_t yay0_magic[] = {0x59, 0x61, 0x79, 0x30}; - -typedef struct __attribute__ ((packed)) yay0_header -{ - uint8_t magic[4]; - uint32_t size; - uint32_t count_offset; - uint32_t data_offset; -} yay0_header_t; - -typedef struct -{ - uint8_t *control; - uint8_t *count; - uint8_t *data; - int64_t error; -} yay0_info; - -yay0_info *yay0_decompress(void* _in, void** _out, int64_t stop_after_size); - -size_t get_file_size(char *filename) -{ - struct stat file_stat; - if(stat(filename, &file_stat) < 0) - { - printf("Failed to get file size!\n"); - exit(1); - } - - return file_stat.st_size; -} - -int main(int argc, char **argv) -{ - if(argc < 2) - return 1; - FILE *rom_f = fopen(argv[1], "rb"); - if(!rom_f) - printf("Failed to open input file...\n"); - size_t romSize = get_file_size(argv[1]); - uint8_t *romData = malloc(romSize); - fread(romData, 1, romSize, rom_f); - - for(int i = 0; i < romSize - 4; i++) - { - if(!memcmp(yay0_magic, &romData[i], 4)) - { - yay0_header_t *header = (yay0_header_t *)&romData[i]; - size_t decomp_size = U32((uint8_t *)&header->size); - uint8_t *dest = NULL; - yay0_info *info = yay0_decompress(&romData[i], (void **)&dest, decomp_size); - free(dest); - uintptr_t start = (uintptr_t)i; - uintptr_t end = ((uintptr_t)info->data - (uintptr_t)&romData[i]) + i; - printf(" - [0x%X, 0x%0X, \"COMPRESSED.YAY\", \"yay_%x_len_%x\"]\n", start, ALIGN(end, 2), start, ALIGN(end, 2) - start); - } - } - free(romData); - fclose(rom_f); - - return 0; -} - -yay0_info *yay0_decompress(void* _in, void** _out, int64_t stop_after_size) -{ - yay0_info *info = malloc(sizeof(yay0_info)); - yay0_header_t* header = (yay0_header_t*)_in; - if (memcmp(yay0_magic, &header->magic[0], 4)) - { - info->error = ERROR_UNRECOGNIZED; - return info; - } - - uint32_t total_size = U32((uint8_t *)&header->size); - if (total_size == 0) { - return info; - } - if (stop_after_size && total_size > stop_after_size) { - total_size = stop_after_size; - } - - *_out = malloc(total_size); - if (!*_out) - { - info->error = ERROR_MEMORY; - return info; - } - - uint32_t count_offset = U32((uint8_t *)&header->count_offset); - uint32_t data_offset = U32((uint8_t *)&header->data_offset); - - info->control = (uint8_t*)(_in + sizeof(yay0_header_t)); - info->count = (uint8_t*)_in + count_offset; - info->data = (uint8_t*)_in + data_offset; - uint8_t* out_stream = (uint8_t*)*_out; - - uint32_t bytes_written = 0; - uint8_t control_bits_remaining = 0; - uint8_t control_byte; - - while (bytes_written < total_size) { - - if (control_bits_remaining == 0) { - control_byte = *(info->control++); - control_bits_remaining = 8; - } - - if ((control_byte & 0x80) != 0) { - out_stream[bytes_written] = *(info->data++); - bytes_written++; - - } else { - uint16_t nr = (*(info->count++) << 8); - nr |= *(info->count++); - uint16_t r = (nr & 0x0FFF) + 1; - uint16_t n = (nr & 0xF000) >> 12; - if (n == 0) - n = *(info->data++) + 0x12; // TODO is this really read from the data stream? (not the count stream?) - else - n += 2; - - if (r > bytes_written) - { - info->error = ERROR_BACKREFERENCE_TOO_DISTANT; - return info; - } - - if (bytes_written + n > total_size && stop_after_size == total_size) - { - info->error = ERROR_OVERFLOW; - return info; - } - - for (; n > 0; n--) - { - out_stream[bytes_written] = out_stream[bytes_written - r]; - bytes_written++; - } - } - - control_byte <<= 1; - control_bits_remaining--; - } - - return info; -} \ No newline at end of file diff --git a/tools/glabel.py b/tools/glabel.py deleted file mode 100755 index 5911b6404e..0000000000 --- a/tools/glabel.py +++ /dev/null @@ -1,22 +0,0 @@ -import os -import re - -def replace_func(match): - match = match.group() - - if match.startswith("."): - return match - return "glabel " + match[:-1] - -for root, dirs, files in os.walk("asm"): - for file in files: - for file in files: - if file.endswith(".s"): - with open(os.path.join(root, file)) as f: - old_file_text = f.read() - - new_file_text = re.sub(".*:", replace_func, old_file_text) - - if old_file_text != new_file_text: - with open(os.path.join(root, file), "w", newline="\n") as f: - f.write(new_file_text) diff --git a/tools/old/fix_asm.py b/tools/old/fix_asm.py deleted file mode 100755 index fb2b433b79..0000000000 --- a/tools/old/fix_asm.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/python3 - -import os -import re - -script_dir = os.path.dirname(os.path.realpath(__file__)) -asm_dir = script_dir + "/asm/" - - -def replace_move_daddu(match): - match = match.group() - match = re.sub("\\s+", " ", match) - match_split = match.split(" ") - ret = "daddu " + match_split[1] + " " + match_split[2] + ", $zero" - return ret - - -def replace_move_addu(match): - match = match.group() - match = re.sub("\\s+", " ", match) - match_split = match.split(" ") - ret = "addu " + match_split[1] + " " + match_split[2] + ", $zero" - return ret - - -def replace_move_or(match): - match = match.group() - match = re.sub("\\s+", " ", match) - match_split = match.split(" ") - ret = "or " + match_split[1] + " " + match_split[2] + ", $zero" - return ret - - -adds = ["4a140", "4a1b0"] -ors = ["4a360"] - -range_start = int("3bde0", 16) -range_end = int("48be0", 16) - -for root, dirs, files in os.walk(asm_dir): - for file in files: - if file.endswith(".s"): - dumb_split = file.split("_") - if len(dumb_split) > 2: - file_num = dumb_split[1] - try: - test = int(file_num, 16) - except ValueError: - file_num = "" - else: - file_num = "" - with open(os.path.join(root, file)) as f: - file_text_orig = f.read() - file_text = file_text_orig - - # Fix instructions - if file == "boot.s" or file_num in ors: - file_text = re.sub("move\\s+\\$.+,\\s\\$.+", replace_move_or, file_text) - elif file_num != "" and ((range_start <= int(file_num, 16) <= range_end) or file_num in adds): - file_text = re.sub("move\\s+\\$.+,\\s\\$.+", replace_move_addu, file_text) - else: - file_text = re.sub("move\\s+\\$.+,\\s\\$.+", replace_move_daddu, file_text) - - if file_text != file_text_orig: - with open(os.path.join(root, file), "w") as f: - f.write(file_text) diff --git a/tools/old/reg_convert.py b/tools/old/reg_convert.py deleted file mode 100755 index 94f58d2fa2..0000000000 --- a/tools/old/reg_convert.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/python3 -import fileinput -import os -import re - -script_dir = os.path.dirname(os.path.realpath(__file__)) -asm_dir = script_dir + "/asm/" - -regs = ["zero", "at", "v0", "v1", "a0", "a1", "a2", "a3", "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "s0", - "s1", "s2", "s3", "s4", "s5", "s6", "s7", "t8", "t9", "k0", "k1", "gp", "sp", "fp", "ra"] - - -for line in fileinput.input(): - for reg in regs: - regex = re.compile("\\$" + reg) - line = re.sub(regex, "$" + str(regs.index(reg)), line) - print(line.rstrip()) diff --git a/tools/postprocess.py b/tools/postprocess.py deleted file mode 100755 index 491b89d2e2..0000000000 --- a/tools/postprocess.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/python3 -import fileinput -import os - -script_dir = os.path.dirname(os.path.realpath(__file__)) -asm_dir = script_dir + "/../asm/" - - -def tohex(val, nbits): - return hex((val + (1 << nbits)) % (1 << nbits)) - - -def gen_lui_addiu(line): - line = line.strip() - line_bits = line.split("\t")[1] - reg, addr = line_bits.split(",") - upper_addr = tohex(int(addr) >> 16, 16) - lower_addr = tohex(int(addr) & 0xFFFF, 16) - ret = "lui\t" + reg + "," + upper_addr + "\n" + \ - "addiu\t" + reg + ", $zero, " + lower_addr - return ret - - -def main(): - skip_next = False - for line in fileinput.input(): - line = line.strip() - if skip_next: - skip_next = False - continue - - # Don't print the line after this - if line == "#NO_APP": - skip_next = True - - # Transform la - if line.startswith("la\t"): - print(gen_lui_addiu(line)) - continue - - print(line) - - -if __name__ == '__main__': - main() diff --git a/tools/splat.yaml b/tools/splat.yaml index 8cbeeeac63..296b4bb128 100644 --- a/tools/splat.yaml +++ b/tools/splat.yaml @@ -516,253 +516,253 @@ segments: - [0xFAD8F0, "bin", "SMW_Remix_2F"] - [0xFADE70, "bin", "New_Partner_82"] # BGM end - [0xFAE860, "bin"] - - [0x19E09A8, "bin", "Yay0_19e09a8_len_1206"] - - [0x19E1390, "bin", "Yay0_19e1390_len_806"] - - [0x19E1888, "bin", "Yay0_19e1888_len_2324"] - - [0x19E2330, "bin", "Yay0_19e2330_len_cc0"] - - [0x19E2DE0, "bin", "Yay0_19e2de0_len_1206"] - - [0x19E3208, "bin", "Yay0_19e3208_len_9a6"] - - [0x19E3BA8, "bin", "Yay0_19e3ba8_len_456"] - - [0x19E3FD8, "bin", "Yay0_19e3fd8_len_4024"] - - [0x19E4828, "bin", "Yay0_19e4828_len_3c0"] - - [0x19E4BE0, "bin", "Yay0_19e4be0_len_1416"] - - [0x19E5758, "bin", "Yay0_19e5758_len_802"] - - [0x19E5950, "bin", "Yay0_19e5950_len_22a0"] - - [0x19E62A0, "bin", "Yay0_19e62a0_len_512"] + - [0x19E09A8, "Yay0"] + - [0x19E1390, "Yay0"] + - [0x19E1888, "Yay0"] + - [0x19E2330, "Yay0"] + - [0x19E2DE0, "Yay0"] + - [0x19E3208, "Yay0"] + - [0x19E3BA8, "Yay0"] + - [0x19E3FD8, "Yay0"] + - [0x19E4828, "Yay0"] + - [0x19E4BE0, "Yay0"] + - [0x19E5758, "Yay0"] + - [0x19E5950, "Yay0"] + - [0x19E62A0, "Yay0"] - [0x19E67B2, "bin"] - - [0x19E6B60, "bin", "Yay0_19e6b60_len_1406"] - - [0x19E7528, "bin", "Yay0_19e7528_len_8256"] - - [0x19E9778, "bin", "Yay0_19e9778_len_2800"] - - [0x19EAF38, "bin", "Yay0_19eaf38_len_40c0"] - - [0x19EC4E0, "bin", "Yay0_19ec4e0_len_1910"] - - [0x19EDD30, "bin", "Yay0_19edd30_len_2204"] - - [0x19EEB18, "bin", "Yay0_19eeb18_len_10062"] - - [0x19F0070, "bin", "Yay0_19f0070_len_158c"] - - [0x19F15A0, "bin", "Yay0_19f15a0_len_2252"] - - [0x19F26D8, "bin", "Yay0_19f26d8_len_5102"] - - [0x19F5390, "bin", "Yay0_19f5390_len_2002"] - - [0x19F7398, "bin", "Yay0_19f7398_len_8024"] - - [0x19FA128, "bin", "Yay0_19fa128_len_4ac6"] - - [0x19FCAE8, "bin", "Yay0_19fcae8_len_2502"] - - [0x19FED70, "bin", "Yay0_19fed70_len_200004"] - - [0x1A00958, "bin", "Yay0_1a00958_len_24a2"] - - [0x1A02D00, "bin", "Yay0_1a02d00_len_4000"] - - [0x1A04400, "bin", "Yay0_1a04400_len_114c"] - - [0x1A05550, "bin", "Yay0_1a05550_len_2280"] - - [0x1A06390, "bin", "Yay0_1a06390_len_c04"] - - [0x1A06F98, "bin", "Yay0_1a06f98_len_1066"] - - [0x1A07B68, "bin", "Yay0_1a07b68_len_8092"] - - [0x1A0A0A0, "bin", "Yay0_1a0a0a0_len_c46"] - - [0x1A0ACC8, "bin", "Yay0_1a0acc8_len_1300"] - - [0x1A0B780, "bin", "Yay0_1a0b780_len_85c"] - - [0x1A0BBE0, "bin", "Yay0_1a0bbe0_len_4000"] - - [0x1A0C000, "bin", "Yay0_1a0c000_len_438"] - - [0x1A0C438, "bin", "Yay0_1a0c438_len_842"] - - [0x1A0C860, "bin", "Yay0_1a0c860_len_1186"] - - [0x1A0D1E8, "bin", "Yay0_1a0d1e8_len_406"] - - [0x1A0D5B0, "bin", "Yay0_1a0d5b0_len_840"] - - [0x1A0D970, "bin", "Yay0_1a0d970_len_268e"] - - [0x1A0EF00, "bin", "Yay0_1a0ef00_len_11020"] - - [0x1A13920, "bin", "Yay0_1a13920_len_404c"] - - [0x1A15850, "bin", "Yay0_1a15850_len_83a4"] - - [0x1A183F8, "bin", "Yay0_1a183f8_len_2404"] - - [0x1A1A608, "bin", "Yay0_1a1a608_len_41e2"] - - [0x1A1C5E8, "bin", "Yay0_1a1c5e8_len_1202"] - - [0x1A1D6D0, "bin", "Yay0_1a1d6d0_len_2028"] - - [0x1A1E478, "bin", "Yay0_1a1e478_len_1306"] - - [0x1A1F370, "bin", "Yay0_1a1f370_len_2048c"] - - [0x1A226B0, "bin", "Yay0_1a226b0_len_4908"] - - [0x1A249B8, "bin", "Yay0_1a249b8_len_1644"] - - [0x1A25E78, "bin", "Yay0_1a25e78_len_2186"] - - [0x1A27FF0, "bin", "Yay0_1a27ff0_len_800a"] - - [0x1A28BE0, "bin", "Yay0_1a28be0_len_1400"] - - [0x1A29680, "bin", "Yay0_1a29680_len_2862"] - - [0x1A2BC68, "bin", "Yay0_1a2bc68_len_4112"] - - [0x1A2E120, "bin", "Yay0_1a2e120_len_12d8"] - - [0x1A2F3F8, "bin", "Yay0_1a2f3f8_len_10c06"] - - [0x1A31D18, "bin", "Yay0_1a31d18_len_22a6"] - - [0x1A33AB0, "bin", "Yay0_1a33ab0_len_4106"] - - [0x1A35BB8, "bin", "Yay0_1a35bb8_len_2006"] - - [0x1A369A8, "bin", "Yay0_1a369a8_len_9600"] - - [0x1A39600, "bin", "Yay0_1a39600_len_2014"] - - [0x1A3B018, "bin", "Yay0_1a3b018_len_4300"] - - [0x1A3C310, "bin", "Yay0_1a3c310_len_3cc2"] - - [0x1A3FCC8, "bin", "Yay0_1a3fcc8_len_40314"] - - [0x1A423D8, "bin", "Yay0_1a423d8_len_4822"] - - [0x1A449C0, "bin", "Yay0_1a449c0_len_2422"] - - [0x1A46568, "bin", "Yay0_1a46568_len_9212"] - - [0x1A49340, "bin", "Yay0_1a49340_len_2c88"] - - [0x1A4AC88, "bin", "Yay0_1a4ac88_len_5362"] - - [0x1A4D7E8, "bin", "Yay0_1a4d7e8_len_2006"] - - [0x1A4E028, "bin", "Yay0_1a4e028_len_1a56"] - - [0x1A4FA60, "bin", "Yay0_1a4fa60_len_10190"] - - [0x1A531D0, "bin", "Yay0_1a531d0_len_c08"] - - [0x1A53D48, "bin", "Yay0_1a53d48_len_4032"] - - [0x1A56C80, "bin", "Yay0_1a56c80_len_8358"] - - [0x1A58F58, "bin", "Yay0_1a58f58_len_20a4"] - - [0x1A5A5A8, "bin", "Yay0_1a5a5a8_len_20a14"] - - [0x1A62B40, "bin", "Yay0_1a62b40_len_40b6"] - - [0x1A641F8, "bin", "Yay0_1a641f8_len_2602"] - - [0x1A666F0, "bin", "Yay0_1a666f0_len_8800"] - - [0x1A68870, "bin", "Yay0_1a68870_len_460a"] - - [0x1A6C630, "bin", "Yay0_1a6c630_len_118c"] - - [0x1A6D5A0, "bin", "Yay0_1a6d5a0_len_2a4c"] - - [0x1A6EF50, "bin", "Yay0_1a6ef50_len_100ae"] - - [0x1A70FF0, "bin", "Yay0_1a70ff0_len_4000"] - - [0x1A74FC0, "bin", "Yay0_1a74fc0_len_803a"] - - [0x1A78A40, "bin", "Yay0_1a78a40_len_1100"] - - [0x1A79900, "bin", "Yay0_1a79900_len_4698"] - - [0x1A7D798, "bin", "Yay0_1a7d798_len_2804"] - - [0x1A7EEA0, "bin", "Yay0_1a7eea0_len_158"] - - [0x1A7EFD8, "bin", "Yay0_1a7efd8_len_81002"] - - [0x1A83450, "bin", "Yay0_1a83450_len_4226"] - - [0x1A85668, "bin", "Yay0_1a85668_len_2910"] - - [0x1A87958, "bin", "Yay0_1a87958_len_8680"] - - [0x1A8BF98, "bin", "Yay0_1a8bf98_len_4020"] - - [0x1A8FE28, "bin", "Yay0_1a8fe28_len_10096"] - - [0x1A93EA0, "bin", "Yay0_1a93ea0_len_4102"] - - [0x1A94188, "bin", "Yay0_1a94188_len_476"] - - [0x1A94480, "bin", "Yay0_1a94480_len_226"] - - [0x1A946A8, "bin", "Yay0_1a946a8_len_956"] - - [0x1A94A00, "bin", "Yay0_1a94a00_len_456"] - - [0x1A94C58, "bin", "Yay0_1a94c58_len_8184"] - - [0x1A98D98, "bin", "Yay0_1a98d98_len_3264"] - - [0x1A9BA80, "bin", "Yay0_1a9ba80_len_4168"] - - [0x1A9DB68, "bin", "Yay0_1a9db68_len_20004"] - - [0x1AA0048, "bin", "Yay0_1aa0048_len_692"] - - [0x1AA0698, "bin", "Yay0_1aa0698_len_1000"] - - [0x1AA1008, "bin", "Yay0_1aa1008_len_6d54"] - - [0x1AA6D58, "bin", "Yay0_1aa6d58_len_90a4"] - - [0x1AAD600, "bin", "Yay0_1aad600_len_109f0"] - - [0x1AB1BF0, "bin", "Yay0_1ab1bf0_len_2004"] - - [0x1AB2368, "bin", "Yay0_1ab2368_len_8086"] - - [0x1ABA290, "bin", "Yay0_1aba290_len_41422"] - - [0x1AC14A8, "bin", "Yay0_1ac14a8_len_2902"] - - [0x1AC3910, "bin", "Yay0_1ac3910_len_8488"] - - [0x1ACBC98, "bin", "Yay0_1acbc98_len_4042"] - - [0x1ACE058, "bin", "Yay0_1ace058_len_1902"] - - [0x1ACF910, "bin", "Yay0_1acf910_len_106c8"] - - [0x1AD06D8, "bin", "Yay0_1ad06d8_len_904"] - - [0x1AD0B98, "bin", "Yay0_1ad0b98_len_1400"] - - [0x1AD1E90, "bin", "Yay0_1ad1e90_len_2146"] - - [0x1AD2348, "bin", "Yay0_1ad2348_len_4b2"] - - [0x1AD27F8, "bin", "Yay0_1ad27f8_len_800"] - - [0x1AD28A8, "bin", "Yay0_1ad28a8_len_4446"] - - [0x1AD44F0, "bin", "Yay0_1ad44f0_len_304"] - - [0x1AD4758, "bin", "Yay0_1ad4758_len_1080"] - - [0x1AD57C0, "bin", "Yay0_1ad57c0_len_880c"] - - [0x1AD9D50, "bin", "Yay0_1ad9d50_len_2082"] - - [0x1ADA498, "bin", "Yay0_1ada498_len_4b26"] - - [0x1ADCFC0, "bin", "Yay0_1adcfc0_len_22024"] - - [0x1AE2168, "bin", "Yay0_1ae2168_len_e96"] - - [0x1AE2EA0, "bin", "Yay0_1ae2ea0_len_4058"] - - [0x1AE6A58, "bin", "Yay0_1ae6a58_len_9524"] - - [0x1AEB778, "bin", "Yay0_1aeb778_len_14802"] - - [0x1AF4958, "bin", "Yay0_1af4958_len_8202"] - - [0x1AFCB18, "bin", "Yay0_1afcb18_len_3442"] - - [0x1AFF748, "bin", "Yay0_1aff748_len_100000"] - - [0x1B00640, "bin", "Yay0_1b00640_len_118a"] - - [0x1B01390, "bin", "Yay0_1b01390_len_c04"] - - [0x1B01C08, "bin", "Yay0_1b01c08_len_2120"] - - [0x1B02128, "bin", "Yay0_1b02128_len_844"] - - [0x1B02970, "bin", "Yay0_1b02970_len_1004"] - - [0x1B03118, "bin", "Yay0_1b03118_len_c04"] - - [0x1B03C18, "bin", "Yay0_1b03c18_len_41e2"] - - [0x1B045E8, "bin", "Yay0_1b045e8_len_a12"] - - [0x1B04FC0, "bin", "Yay0_1b04fc0_len_1012"] - - [0x1B05998, "bin", "Yay0_1b05998_len_2400"] - - [0x1B06C88, "bin", "Yay0_1b06c88_len_1046"] - - [0x1B07C48, "bin", "Yay0_1b07c48_len_8034"] - - [0x1B09440, "bin", "Yay0_1b09440_len_228e"] - - [0x1B0B290, "bin", "Yay0_1b0b290_len_90c"] - - [0x1B0B9A0, "bin", "Yay0_1b0b9a0_len_4448"] - - [0x1B0C548, "bin", "Yay0_1b0c548_len_ab4"] - - [0x1B0CAC0, "bin", "Yay0_1b0cac0_len_1130"] - - [0x1B0D130, "bin", "Yay0_1b0d130_len_2a4c"] - - [0x1B0EB80, "bin", "Yay0_1b0eb80_len_1043e"] - - [0x1B10CC0, "bin", "Yay0_1b10cc0_len_2120"] - - [0x1B129A0, "bin", "Yay0_1b129a0_len_1444"] - - [0x1B13548, "bin", "Yay0_1b13548_len_4016"] - - [0x1B16420, "bin", "Yay0_1b16420_len_1104"] - - [0x1B17128, "bin", "Yay0_1b17128_len_814"] - - [0x1B17840, "bin", "Yay0_1b17840_len_8316"] - - [0x1B19318, "bin", "Yay0_1b19318_len_2020"] - - [0x1B1A030, "bin", "Yay0_1b1a030_len_18c6"] - - [0x1B1B8C8, "bin", "Yay0_1b1b8c8_len_402"] - - [0x1B1BC88, "bin", "Yay0_1b1bc88_len_4316"] - - [0x1B1C7A0, "bin", "Yay0_1b1c7a0_len_808"] - - [0x1B1CD28, "bin", "Yay0_1b1cd28_len_21040"] - - [0x1B21C48, "bin", "Yay0_1b21c48_len_2290"] - - [0x1B23290, "bin", "Yay0_1b23290_len_414c"] - - [0x1B253E0, "bin", "Yay0_1b253e0_len_241c"] - - [0x1B26660, "bin", "Yay0_1b26660_len_8192"] - - [0x1B283F8, "bin", "Yay0_1b283f8_len_1c02"] - - [0x1B29C60, "bin", "Yay0_1b29c60_len_2284"] - - [0x1B2A688, "bin", "Yay0_1b2a688_len_1166"] - - [0x1B2B3E8, "bin", "Yay0_1b2b3e8_len_4810"] - - [0x1B2C8D8, "bin", "Yay0_1b2c8d8_len_1722"] - - [0x1B2D7B0, "bin", "Yay0_1b2d7b0_len_2006"] - - [0x1B2E328, "bin", "Yay0_1b2e328_len_c52"] - - [0x1B2ED60, "bin", "Yay0_1b2ed60_len_1218"] - - [0x1B2FA18, "bin", "Yay0_1b2fa18_len_10002"] - - [0x1B31A18, "bin", "Yay0_1b31a18_len_25e2"] - - [0x1B33000, "bin", "Yay0_1b33000_len_4096"] - - [0x1B34098, "bin", "Yay0_1b34098_len_920"] - - [0x1B34928, "bin", "Yay0_1b34928_len_2d4"] - - [0x1B34C00, "bin", "Yay0_1b34c00_len_107e"] - - [0x1B35480, "bin", "Yay0_1b35480_len_2040"] - - [0x1B36440, "bin", "Yay0_1b36440_len_8306"] - - [0x1B38748, "bin", "Yay0_1b38748_len_1894"] - - [0x1B39A98, "bin", "Yay0_1b39a98_len_2062"] - - [0x1B3A2E8, "bin", "Yay0_1b3a2e8_len_816"] - - [0x1B3A818, "bin", "Yay0_1b3a818_len_4482"] - - [0x1B3C488, "bin", "Yay0_1b3c488_len_a44"] - - [0x1B3CAC8, "bin", "Yay0_1b3cac8_len_1012"] - - [0x1B3D0A0, "bin", "Yay0_1b3d0a0_len_91a"] - - [0x1B3D920, "bin", "Yay0_1b3d920_len_205c"] - - [0x1B3F060, "bin", "Yay0_1b3f060_len_40008"] - - [0x1B40048, "bin", "Yay0_1b40048_len_714"] - - [0x1B40720, "bin", "Yay0_1b40720_len_904e"] - - [0x1B49570, "bin", "Yay0_1b49570_len_4288"] - - [0x1B4C3E8, "bin", "Yay0_1b4c3e8_len_1c12"] - - [0x1B4DEA0, "bin", "Yay0_1b4dea0_len_2116"] - - [0x1B4FD98, "bin", "Yay0_1b4fd98_len_10040"] - - [0x1B50CD8, "bin", "Yay0_1b50cd8_len_1302"] - - [0x1B51B08, "bin", "Yay0_1b51b08_len_4052"] - - [0x1B54258, "bin", "Yay0_1b54258_len_8082"] - - [0x1B580A0, "bin", "Yay0_1b580a0_len_2242"] - - [0x1B5A248, "bin", "Yay0_1b5a248_len_1980"] - - [0x1B5BB88, "bin", "Yay0_1b5bb88_len_4406"] - - [0x1B5CC90, "bin", "Yay0_1b5cc90_len_2168"] - - [0x1B5E968, "bin", "Yay0_1b5e968_len_482"] - - [0x1B5ED88, "bin", "Yay0_1b5ed88_len_20040"] - - [0x1B608C0, "bin", "Yay0_1b608c0_len_2534"] - - [0x1B625F8, "bin", "Yay0_1b625f8_len_1202"] - - [0x1B633D0, "bin", "Yay0_1b633d0_len_4824"] - - [0x1B64878, "bin", "Yay0_1b64878_len_1786"] - - [0x1B657E0, "bin", "Yay0_1b657e0_len_808"] - - [0x1B65A08, "bin", "Yay0_1b65a08_len_444"] - - [0x1B65E50, "bin", "Yay0_1b65e50_len_2024"] - - [0x1B66238, "bin", "Yay0_1b66238_len_9542"] - - [0x1B69580, "bin", "Yay0_1b69580_len_4218"] - - [0x1B6C318, "bin", "Yay0_1b6c318_len_1c80"] - - [0x1B6DD98, "bin", "Yay0_1b6dd98_len_2046"] - - [0x1B6F150, "bin", "Yay0_1b6f150_len_10608"] - - [0x1B71618, "bin", "Yay0_1b71618_len_2882"] - - [0x1B72890, "bin", "Yay0_1b72890_len_1302"] - - [0x1B73B08, "bin", "Yay0_1b73b08_len_44b0"] - - [0x1B747B8, "bin", "Yay0_1b747b8_len_2800"] - - [0x1B76E30, "bin", "Yay0_1b76e30_len_808a"] - - [0x1B78EC0, "bin", "Yay0_1b78ec0_len_101c"] - - [0x1B79A20, "bin", "Yay0_1b79a20_len_508"] - - [0x1B79F08, "bin", "Yay0_1b79f08_len_2004"] - - [0x1B7AA08, "bin", "Yay0_1b7aa08_len_1000"] - - [0x1B7B008, "bin", "Yay0_1b7b008_len_b44"] - - [0x1B7BB50, "bin", "Yay0_1b7bb50_len_4424"] - - [0x1B7EC68, "bin", "Yay0_1b7ec68_len_1300"] - - [0x1B7FF48, "bin", "Yay0_1b7ff48_len_80086"] - - [0x1B81E88, "bin", "Yay0_1b81e88_len_2050"] - - [0x1B82058, "bin", "Yay0_1b82058_len_202"] + - [0x19E6B60, "Yay0"] + - [0x19E7528, "Yay0"] + - [0x19E9778, "Yay0"] + - [0x19EAF38, "Yay0"] + - [0x19EC4E0, "Yay0"] + - [0x19EDD30, "Yay0"] + - [0x19EEB18, "Yay0"] + - [0x19F0070, "Yay0"] + - [0x19F15A0, "Yay0"] + - [0x19F26D8, "Yay0"] + - [0x19F5390, "Yay0"] + - [0x19F7398, "Yay0"] + - [0x19FA128, "Yay0"] + - [0x19FCAE8, "Yay0"] + - [0x19FED70, "Yay0"] + - [0x1A00958, "Yay0"] + - [0x1A02D00, "Yay0"] + - [0x1A04400, "Yay0"] + - [0x1A05550, "Yay0"] + - [0x1A06390, "Yay0"] + - [0x1A06F98, "Yay0"] + - [0x1A07B68, "Yay0"] + - [0x1A0A0A0, "Yay0"] + - [0x1A0ACC8, "Yay0"] + - [0x1A0B780, "Yay0"] + - [0x1A0BBE0, "Yay0"] + - [0x1A0C000, "Yay0"] + - [0x1A0C438, "Yay0"] + - [0x1A0C860, "Yay0"] + - [0x1A0D1E8, "Yay0"] + - [0x1A0D5B0, "Yay0"] + - [0x1A0D970, "Yay0"] + - [0x1A0EF00, "Yay0"] + - [0x1A13920, "Yay0"] + - [0x1A15850, "Yay0"] + - [0x1A183F8, "Yay0"] + - [0x1A1A608, "Yay0"] + - [0x1A1C5E8, "Yay0"] + - [0x1A1D6D0, "Yay0"] + - [0x1A1E478, "Yay0"] + - [0x1A1F370, "Yay0"] + - [0x1A226B0, "Yay0"] + - [0x1A249B8, "Yay0"] + - [0x1A25E78, "Yay0"] + - [0x1A27FF0, "Yay0"] + - [0x1A28BE0, "Yay0"] + - [0x1A29680, "Yay0"] + - [0x1A2BC68, "Yay0"] + - [0x1A2E120, "Yay0"] + - [0x1A2F3F8, "Yay0"] + - [0x1A31D18, "Yay0"] + - [0x1A33AB0, "Yay0"] + - [0x1A35BB8, "Yay0"] + - [0x1A369A8, "Yay0"] + - [0x1A39600, "Yay0"] + - [0x1A3B018, "Yay0"] + - [0x1A3C310, "Yay0"] + - [0x1A3FCC8, "Yay0"] + - [0x1A423D8, "Yay0"] + - [0x1A449C0, "Yay0"] + - [0x1A46568, "Yay0"] + - [0x1A49340, "Yay0"] + - [0x1A4AC88, "Yay0"] + - [0x1A4D7E8, "Yay0"] + - [0x1A4E028, "Yay0"] + - [0x1A4FA60, "Yay0"] + - [0x1A531D0, "Yay0"] + - [0x1A53D48, "Yay0"] + - [0x1A56C80, "Yay0"] + - [0x1A58F58, "Yay0"] + - [0x1A5A5A8, "Yay0"] + - [0x1A62B40, "Yay0"] + - [0x1A641F8, "Yay0"] + - [0x1A666F0, "Yay0"] + - [0x1A68870, "Yay0"] + - [0x1A6C630, "Yay0"] + - [0x1A6D5A0, "Yay0"] + - [0x1A6EF50, "Yay0"] + - [0x1A70FF0, "Yay0"] + - [0x1A74FC0, "Yay0"] + - [0x1A78A40, "Yay0"] + - [0x1A79900, "Yay0"] + - [0x1A7D798, "Yay0"] + - [0x1A7EEA0, "Yay0"] + - [0x1A7EFD8, "Yay0"] + - [0x1A83450, "Yay0"] + - [0x1A85668, "Yay0"] + - [0x1A87958, "Yay0"] + - [0x1A8BF98, "Yay0"] + - [0x1A8FE28, "Yay0"] + - [0x1A93EA0, "Yay0"] + - [0x1A94188, "Yay0"] + - [0x1A94480, "Yay0"] + - [0x1A946A8, "Yay0"] + - [0x1A94A00, "Yay0"] + - [0x1A94C58, "Yay0"] + - [0x1A98D98, "Yay0"] + - [0x1A9BA80, "Yay0"] + - [0x1A9DB68, "Yay0"] + - [0x1AA0048, "Yay0"] + - [0x1AA0698, "Yay0"] + - [0x1AA1008, "Yay0"] + - [0x1AA6D58, "Yay0"] + - [0x1AAD600, "Yay0"] + - [0x1AB1BF0, "Yay0"] + - [0x1AB2368, "Yay0"] + - [0x1ABA290, "Yay0"] + - [0x1AC14A8, "Yay0"] + - [0x1AC3910, "Yay0"] + - [0x1ACBC98, "Yay0"] + - [0x1ACE058, "Yay0"] + - [0x1ACF910, "Yay0"] + - [0x1AD06D8, "Yay0"] + - [0x1AD0B98, "Yay0"] + - [0x1AD1E90, "Yay0"] + - [0x1AD2348, "Yay0"] + - [0x1AD27F8, "Yay0"] + - [0x1AD28A8, "Yay0"] + - [0x1AD44F0, "Yay0"] + - [0x1AD4758, "Yay0"] + - [0x1AD57C0, "Yay0"] + - [0x1AD9D50, "Yay0"] + - [0x1ADA498, "Yay0"] + - [0x1ADCFC0, "Yay0"] + - [0x1AE2168, "Yay0"] + - [0x1AE2EA0, "Yay0"] + - [0x1AE6A58, "Yay0"] + - [0x1AEB778, "Yay0"] + - [0x1AF4958, "Yay0"] + - [0x1AFCB18, "Yay0"] + - [0x1AFF748, "Yay0"] + - [0x1B00640, "Yay0"] + - [0x1B01390, "Yay0"] + - [0x1B01C08, "Yay0"] + - [0x1B02128, "Yay0"] + - [0x1B02970, "Yay0"] + - [0x1B03118, "Yay0"] + - [0x1B03C18, "Yay0"] + - [0x1B045E8, "Yay0"] + - [0x1B04FC0, "Yay0"] + - [0x1B05998, "Yay0"] + - [0x1B06C88, "Yay0"] + - [0x1B07C48, "Yay0"] + - [0x1B09440, "Yay0"] + - [0x1B0B290, "Yay0"] + - [0x1B0B9A0, "Yay0"] + - [0x1B0C548, "Yay0"] + - [0x1B0CAC0, "Yay0"] + - [0x1B0D130, "Yay0"] + - [0x1B0EB80, "Yay0"] + - [0x1B10CC0, "Yay0"] + - [0x1B129A0, "Yay0"] + - [0x1B13548, "Yay0"] + - [0x1B16420, "Yay0"] + - [0x1B17128, "Yay0"] + - [0x1B17840, "Yay0"] + - [0x1B19318, "Yay0"] + - [0x1B1A030, "Yay0"] + - [0x1B1B8C8, "Yay0"] + - [0x1B1BC88, "Yay0"] + - [0x1B1C7A0, "Yay0"] + - [0x1B1CD28, "Yay0"] + - [0x1B21C48, "Yay0"] + - [0x1B23290, "Yay0"] + - [0x1B253E0, "Yay0"] + - [0x1B26660, "Yay0"] + - [0x1B283F8, "Yay0"] + - [0x1B29C60, "Yay0"] + - [0x1B2A688, "Yay0"] + - [0x1B2B3E8, "Yay0"] + - [0x1B2C8D8, "Yay0"] + - [0x1B2D7B0, "Yay0"] + - [0x1B2E328, "Yay0"] + - [0x1B2ED60, "Yay0"] + - [0x1B2FA18, "Yay0"] + - [0x1B31A18, "Yay0"] + - [0x1B33000, "Yay0"] + - [0x1B34098, "Yay0"] + - [0x1B34928, "Yay0"] + - [0x1B34C00, "Yay0"] + - [0x1B35480, "Yay0"] + - [0x1B36440, "Yay0"] + - [0x1B38748, "Yay0"] + - [0x1B39A98, "Yay0"] + - [0x1B3A2E8, "Yay0"] + - [0x1B3A818, "Yay0"] + - [0x1B3C488, "Yay0"] + - [0x1B3CAC8, "Yay0"] + - [0x1B3D0A0, "Yay0"] + - [0x1B3D920, "Yay0"] + - [0x1B3F060, "Yay0"] + - [0x1B40048, "Yay0"] + - [0x1B40720, "Yay0"] + - [0x1B49570, "Yay0"] + - [0x1B4C3E8, "Yay0"] + - [0x1B4DEA0, "Yay0"] + - [0x1B4FD98, "Yay0"] + - [0x1B50CD8, "Yay0"] + - [0x1B51B08, "Yay0"] + - [0x1B54258, "Yay0"] + - [0x1B580A0, "Yay0"] + - [0x1B5A248, "Yay0"] + - [0x1B5BB88, "Yay0"] + - [0x1B5CC90, "Yay0"] + - [0x1B5E968, "Yay0"] + - [0x1B5ED88, "Yay0"] + - [0x1B608C0, "Yay0"] + - [0x1B625F8, "Yay0"] + - [0x1B633D0, "Yay0"] + - [0x1B64878, "Yay0"] + - [0x1B657E0, "Yay0"] + - [0x1B65A08, "Yay0"] + - [0x1B65E50, "Yay0"] + - [0x1B66238, "Yay0"] + - [0x1B69580, "Yay0"] + - [0x1B6C318, "Yay0"] + - [0x1B6DD98, "Yay0"] + - [0x1B6F150, "Yay0"] + - [0x1B71618, "Yay0"] + - [0x1B72890, "Yay0"] + - [0x1B73B08, "Yay0"] + - [0x1B747B8, "Yay0"] + - [0x1B76E30, "Yay0"] + - [0x1B78EC0, "Yay0"] + - [0x1B79A20, "Yay0"] + - [0x1B79F08, "Yay0"] + - [0x1B7AA08, "Yay0"] + - [0x1B7B008, "Yay0"] + - [0x1B7BB50, "Yay0"] + - [0x1B7EC68, "Yay0"] + - [0x1B7FF48, "Yay0"] + - [0x1B81E88, "Yay0"] + - [0x1B82058, "Yay0"] - [0x1B82202, "bin"] - [0x1E40000, "bin", "map_assets.fs"] # todo add fs support - [0x27FEE22, "bin"] diff --git a/tools/yay0_decompress b/tools/yay0_decompress deleted file mode 100755 index 74652f9f48ea09e1c861fd7bec0aac4787867158..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17376 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 -#include -#include -#include -#include -#include - -#include -#include -#include - -#define U32(s) ((uint32_t)(*(s) << 24 | *((s) + 1) << 16 | *((s) + 2) << 8 | *((s) + 3))) - -#define ERROR_UNSUPPORTED -1 -#define ERROR_CORRUPTED -2 -#define ERROR_UNRECOGNIZED -3 -#define ERROR_MEMORY -4 -#define ERROR_BACKREFERENCE_TOO_DISTANT -5 -#define ERROR_OVERFLOW -6 - -uint8_t yay0_magic[] = {0x59, 0x61, 0x79, 0x30}; - -typedef struct __attribute__ ((packed)) yay0_header -{ - uint8_t magic[4]; - uint32_t size; - uint32_t count_offset; - uint32_t data_offset; -} yay0_header_t; - -typedef struct -{ - uint8_t *control; - uint8_t *count; - uint8_t *data; - size_t error; -} yay0_info; - -size_t yay0_decompress(void* _in, void** _out, size_t stop_after_size); - -size_t get_file_size(char *filename) -{ - struct stat file_stat; - if(stat(filename, &file_stat) < 0) - { - printf("Failed to get file size!\n"); - exit(1); - } - - return file_stat.st_size; -} - -int main(int argc, char **argv) -{ - if(argc < 2) - return 1; - FILE *rom_f = fopen(argv[1], "rb"); - if(!rom_f) - { - printf("Failed to open input file...\n"); - return 1; - } - size_t romSize = get_file_size(argv[1]); - uint8_t *romData = malloc(romSize); - fread(romData, 1, romSize, rom_f); - yay0_header_t *header = (yay0_header_t *)romData; - size_t decomp_size = U32((uint8_t *)&header->size); - uint8_t *dest = NULL; - size_t bytes_written = yay0_decompress(&romData[0], (void **)&dest, decomp_size); - char *out_path = malloc(strlen(argv[1]) + strlen(".dec") + 2); - strcpy(out_path, argv[1]); - strcat(out_path, ".dec"); - FILE *out_f = fopen(out_path, "wb"); - fwrite(dest, 1, bytes_written, out_f); - free(dest); - free(romData); - fclose(rom_f); - fclose(out_f); - - return 0; -} - -size_t yay0_decompress(void* _in, void** _out, size_t stop_after_size) -{ - yay0_info *info = malloc(sizeof(yay0_info)); - yay0_header_t* header = (yay0_header_t*)_in; - - if (memcmp(yay0_magic, &header->magic[0], 4)) - return ERROR_UNRECOGNIZED; - - uint32_t total_size = U32((uint8_t *)&header->size); - if (total_size == 0) { - return 0; - } - if (stop_after_size && total_size > stop_after_size) { - total_size = stop_after_size; - } - - *_out = malloc(total_size); - if (!*_out) - return ERROR_MEMORY; - - uint32_t count_offset = U32((uint8_t *)&header->count_offset); - uint32_t data_offset = U32((uint8_t *)&header->data_offset); - - info->control = (uint8_t*)(_in + sizeof(yay0_header_t)); - info->count = (uint8_t*)_in + count_offset; - info->data = (uint8_t*)_in + data_offset; - uint8_t* out_stream = (uint8_t*)*_out; - - size_t bytes_written = 0; - uint8_t control_bits_remaining = 0; - uint8_t control_byte; - - while (bytes_written < total_size) - { - - if (control_bits_remaining == 0) - { - control_byte = *(info->control++); - control_bits_remaining = 8; - } - - if ((control_byte & 0x80) != 0) - { - out_stream[bytes_written] = *(info->data++); - bytes_written++; - - } - else - { - uint16_t nr = (*(info->count++) << 8); - nr |= *(info->count++); - uint16_t r = (nr & 0x0FFF) + 1; - uint16_t n = (nr & 0xF000) >> 12; - if (n == 0) - n = *(info->data++) + 0x12; // TODO is this really read from the data stream? (not the count stream?) - else - n += 2; - - if (r > bytes_written) - return ERROR_BACKREFERENCE_TOO_DISTANT; - - if (bytes_written + n > total_size && stop_after_size == total_size) - return ERROR_OVERFLOW; - - for (; n > 0; n--) - { - out_stream[bytes_written] = out_stream[bytes_written - r]; - bytes_written++; - } - } - - control_byte <<= 1; - control_bits_remaining--; - } - - return bytes_written; -} \ No newline at end of file From de8d3fd83914f5012b4f6447094f125943164873 Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Sat, 17 Oct 2020 17:08:57 -0400 Subject: [PATCH 16/22] Yay0 matching compression OK! :nice: --- Makefile | 11 +++++++---- tools/Makefile | 2 +- tools/Yay0compress | Bin 21968 -> 17928 bytes tools/Yay0compress.c | 2 +- tools/n64splat | 2 +- 5 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 42f458a3ab..b6f7492006 100644 --- a/Makefile +++ b/Makefile @@ -11,6 +11,7 @@ SRC_DIRS := src src/os src/os/nusys ASM_DIRS := asm asm/os INCLUDE_DIRS := include include/PR src DATA_DIRS := bin +YAY0_DIRS := bin/Yay0 # Source code files C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)) @@ -26,6 +27,7 @@ O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \ $(foreach file,$(S_FILES),$(BUILD_DIR)/$(file:.s=.o)) \ $(foreach file,$(DATA_FILES),$(BUILD_DIR)/$(file:.bin=.o)) \ +YAY0_FILES := $(foreach file,$(YAY0_FILES),$(BUILD_DIR)/$(file:.bin=.bin.Yay0)) ####################### Other Tools ######################### @@ -69,7 +71,7 @@ submodules: git submodule update --init --recursive split: - rm -rf $(DATA_DIRS) && ./tools/n64splat/split.py baserom.z64 tools/splat.yaml . --modes ld bin + rm -rf $(DATA_DIRS) && ./tools/n64splat/split.py baserom.z64 tools/splat.yaml . --modes ld bin Yay0 split-all: rm -rf $(DATA_DIRS) && ./tools/n64splat/split.py baserom.z64 tools/splat.yaml . --modes all @@ -97,9 +99,10 @@ $(BUILD_DIR)/%.o: %.c $(H_FILES) $(BUILD_DIR)/%.o: %.bin $(LD) -r -b binary -o $@ $< -$(BUILD_DIR)/%.Yay0: %.bin - tools/Yay0compress $< $@ - $(LD) -r -b binary -o $@ $< +$(BUILD_DIR)/%.bin.Yay0: %.bin + mkdir -p build/bin/Yay0 + tools/Yay0compress $< $<.Yay0 + $(LD) -r -b binary -o $@ $<.Yay0 $(BUILD_DIR)/$(TARGET).bin: $(BUILD_DIR)/$(TARGET).elf $(OBJCOPY) $< $@ -O binary diff --git a/tools/Makefile b/tools/Makefile index 35893a733c..d3edc74d33 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -3,7 +3,7 @@ default: all all: Yay0compress Yay0compress: - gcc Yay0compress.c -o Yay0compress + gcc Yay0compress.c -O3 -o Yay0compress clean: rm -f Yay0compress diff --git a/tools/Yay0compress b/tools/Yay0compress index a3ffcb67ab9a8bb0418a54319d630dbeb45adaff..10b3c1c0c64b7fc24d7da45b00f327a8befd26a3 100755 GIT binary patch literal 17928 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 literal 21968 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 Date: Sat, 17 Oct 2020 17:48:43 -0400 Subject: [PATCH 17/22] fixing extern --- include/variables.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/variables.h b/include/variables.h index 87469f2fb6..acdf8f3fd4 100644 --- a/include/variables.h +++ b/include/variables.h @@ -36,7 +36,7 @@ extern s32 gScriptListCount; extern s32 gScriptIdList[MAX_SCRIPTS]; extern s32 gScriptIndexList[MAX_SCRIPTS]; -extern s32 gMoveScriptTable[10][4]; // not 10 - how many? +extern s32 gMoveScriptTable[][4]; extern Model* gWorldModelList[256]; extern Model* gBattleModelList[256]; From ebdc55d8b1b3643bc2c7afd40e92b4f5d783c42f Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Sat, 17 Oct 2020 17:49:33 -0400 Subject: [PATCH 18/22] renaming func --- src/code_190B20.h | 2 +- tools/symbol_addrs.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/code_190B20.h b/src/code_190B20.h index 70545647e5..cee3cc3c5d 100644 --- a/src/code_190B20.h +++ b/src/code_190B20.h @@ -21,6 +21,6 @@ s32 heroes_is_ability_active(Actor* actor, Ability ability); void create_part_shadow(s32 actorId, s32 partIndex); void remove_part_shadow(s32 actorId, s32 partIndex); -void create_part_shadow_by_ptr(UNK_TYPE arg0, ActorPart* part); // arg0 unused +void create_part_shadow_by_ref(UNK_TYPE arg0, ActorPart* part); // arg0 unused #endif diff --git a/tools/symbol_addrs.txt b/tools/symbol_addrs.txt index 592cefa958..12675a3fea 100644 --- a/tools/symbol_addrs.txt +++ b/tools/symbol_addrs.txt @@ -1436,7 +1436,7 @@ remove_item_entity_by_index;0x801339FC remove_item_entity_by_reference;0x80133930 remove_part_decoration;0x80267218 remove_part_shadow;0x802673A0 -create_part_shadow_by_ptr;0x802673E4 +create_part_shadow_by_ref;0x802673E4 remove_player_buffs;0x80267454 render_curtains;0x8002BA80 render_dynamic_entities;0x80123470 From c8b796595d0ed10ed8a5c50548134f708fd1e14c Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Sat, 17 Oct 2020 18:05:39 -0400 Subject: [PATCH 19/22] . --- src/code_190B20.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/code_190B20.c b/src/code_190B20.c index 97c7a2a04d..d529a73fd5 100644 --- a/src/code_190B20.c +++ b/src/code_190B20.c @@ -357,7 +357,7 @@ void remove_part_shadow(s32 actorId, s32 partIndex) { func_80112328(part->shadow); } -void create_part_shadow_by_ptr(UNK_TYPE arg0, ActorPart* part) { +void create_part_shadow_by_ref(UNK_TYPE arg0, ActorPart* part) { part->flags &= ~4; part->shadow = create_shadow_type(0, part->currentPos.x, part->currentPos.y, part->currentPos.z); part->shadowScale = part->size[0] / 24.0; From 8eb0e790678531c170f1bcf292ca80b257f9ea95 Mon Sep 17 00:00:00 2001 From: Alex Bates Date: Sun, 18 Oct 2020 00:32:34 +0100 Subject: [PATCH 20/22] add bitarray python dependency --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 8711334a29..45dd9dff3a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ capstone pycparser PyYAML +bitarray From e59617891eefe771a9f6cbdf236ecbebcf4fb954 Mon Sep 17 00:00:00 2001 From: Alex Bates Date: Sun, 18 Oct 2020 00:32:34 +0100 Subject: [PATCH 21/22] revert "add bitarray python dependency" --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 45dd9dff3a..8711334a29 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,3 @@ capstone pycparser PyYAML -bitarray From 3e412377d9b7d282c6a81d604031d4c959abe7c9 Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Sat, 17 Oct 2020 21:05:17 -0400 Subject: [PATCH 22/22] si.c --- .../get_float_variable.s | 0 .../get_variable.s | 0 .../set_float_variable.s | 0 .../set_variable.s | 0 .../si_execute_next_command.s | 0 .../si_find_label.s | 0 .../si_goto_end_case.s | 0 .../si_goto_end_loop.s | 0 .../si_goto_next_case.s | 0 .../si_handle_bind_lock.s | 0 .../si_handle_case_equal_AND.s | 0 .../si_handle_case_equal_OR.s | 0 .../si_handle_child_thread.s | 0 .../si_handle_print_debug_var.s | 0 .../si_handle_thread.s | 0 .../si_skip_else.s | 0 .../{code_e92d0_len_5da0 => si}/si_skip_if.s | 0 src/{code_e92d0_len_5da0.c => si.c} | 34 +++++++++---------- tools/splat.yaml | 2 +- 19 files changed, 18 insertions(+), 18 deletions(-) rename asm/nonmatchings/{code_e92d0_len_5da0 => si}/get_float_variable.s (100%) rename asm/nonmatchings/{code_e92d0_len_5da0 => si}/get_variable.s (100%) rename asm/nonmatchings/{code_e92d0_len_5da0 => si}/set_float_variable.s (100%) rename asm/nonmatchings/{code_e92d0_len_5da0 => si}/set_variable.s (100%) rename asm/nonmatchings/{code_e92d0_len_5da0 => si}/si_execute_next_command.s (100%) rename asm/nonmatchings/{code_e92d0_len_5da0 => si}/si_find_label.s (100%) rename asm/nonmatchings/{code_e92d0_len_5da0 => si}/si_goto_end_case.s (100%) rename asm/nonmatchings/{code_e92d0_len_5da0 => si}/si_goto_end_loop.s (100%) rename asm/nonmatchings/{code_e92d0_len_5da0 => si}/si_goto_next_case.s (100%) rename asm/nonmatchings/{code_e92d0_len_5da0 => si}/si_handle_bind_lock.s (100%) rename asm/nonmatchings/{code_e92d0_len_5da0 => si}/si_handle_case_equal_AND.s (100%) rename asm/nonmatchings/{code_e92d0_len_5da0 => si}/si_handle_case_equal_OR.s (100%) rename asm/nonmatchings/{code_e92d0_len_5da0 => si}/si_handle_child_thread.s (100%) rename asm/nonmatchings/{code_e92d0_len_5da0 => si}/si_handle_print_debug_var.s (100%) rename asm/nonmatchings/{code_e92d0_len_5da0 => si}/si_handle_thread.s (100%) rename asm/nonmatchings/{code_e92d0_len_5da0 => si}/si_skip_else.s (100%) rename asm/nonmatchings/{code_e92d0_len_5da0 => si}/si_skip_if.s (100%) rename src/{code_e92d0_len_5da0.c => si.c} (95%) diff --git a/asm/nonmatchings/code_e92d0_len_5da0/get_float_variable.s b/asm/nonmatchings/si/get_float_variable.s similarity index 100% rename from asm/nonmatchings/code_e92d0_len_5da0/get_float_variable.s rename to asm/nonmatchings/si/get_float_variable.s diff --git a/asm/nonmatchings/code_e92d0_len_5da0/get_variable.s b/asm/nonmatchings/si/get_variable.s similarity index 100% rename from asm/nonmatchings/code_e92d0_len_5da0/get_variable.s rename to asm/nonmatchings/si/get_variable.s diff --git a/asm/nonmatchings/code_e92d0_len_5da0/set_float_variable.s b/asm/nonmatchings/si/set_float_variable.s similarity index 100% rename from asm/nonmatchings/code_e92d0_len_5da0/set_float_variable.s rename to asm/nonmatchings/si/set_float_variable.s diff --git a/asm/nonmatchings/code_e92d0_len_5da0/set_variable.s b/asm/nonmatchings/si/set_variable.s similarity index 100% rename from asm/nonmatchings/code_e92d0_len_5da0/set_variable.s rename to asm/nonmatchings/si/set_variable.s diff --git a/asm/nonmatchings/code_e92d0_len_5da0/si_execute_next_command.s b/asm/nonmatchings/si/si_execute_next_command.s similarity index 100% rename from asm/nonmatchings/code_e92d0_len_5da0/si_execute_next_command.s rename to asm/nonmatchings/si/si_execute_next_command.s diff --git a/asm/nonmatchings/code_e92d0_len_5da0/si_find_label.s b/asm/nonmatchings/si/si_find_label.s similarity index 100% rename from asm/nonmatchings/code_e92d0_len_5da0/si_find_label.s rename to asm/nonmatchings/si/si_find_label.s diff --git a/asm/nonmatchings/code_e92d0_len_5da0/si_goto_end_case.s b/asm/nonmatchings/si/si_goto_end_case.s similarity index 100% rename from asm/nonmatchings/code_e92d0_len_5da0/si_goto_end_case.s rename to asm/nonmatchings/si/si_goto_end_case.s diff --git a/asm/nonmatchings/code_e92d0_len_5da0/si_goto_end_loop.s b/asm/nonmatchings/si/si_goto_end_loop.s similarity index 100% rename from asm/nonmatchings/code_e92d0_len_5da0/si_goto_end_loop.s rename to asm/nonmatchings/si/si_goto_end_loop.s diff --git a/asm/nonmatchings/code_e92d0_len_5da0/si_goto_next_case.s b/asm/nonmatchings/si/si_goto_next_case.s similarity index 100% rename from asm/nonmatchings/code_e92d0_len_5da0/si_goto_next_case.s rename to asm/nonmatchings/si/si_goto_next_case.s diff --git a/asm/nonmatchings/code_e92d0_len_5da0/si_handle_bind_lock.s b/asm/nonmatchings/si/si_handle_bind_lock.s similarity index 100% rename from asm/nonmatchings/code_e92d0_len_5da0/si_handle_bind_lock.s rename to asm/nonmatchings/si/si_handle_bind_lock.s diff --git a/asm/nonmatchings/code_e92d0_len_5da0/si_handle_case_equal_AND.s b/asm/nonmatchings/si/si_handle_case_equal_AND.s similarity index 100% rename from asm/nonmatchings/code_e92d0_len_5da0/si_handle_case_equal_AND.s rename to asm/nonmatchings/si/si_handle_case_equal_AND.s diff --git a/asm/nonmatchings/code_e92d0_len_5da0/si_handle_case_equal_OR.s b/asm/nonmatchings/si/si_handle_case_equal_OR.s similarity index 100% rename from asm/nonmatchings/code_e92d0_len_5da0/si_handle_case_equal_OR.s rename to asm/nonmatchings/si/si_handle_case_equal_OR.s diff --git a/asm/nonmatchings/code_e92d0_len_5da0/si_handle_child_thread.s b/asm/nonmatchings/si/si_handle_child_thread.s similarity index 100% rename from asm/nonmatchings/code_e92d0_len_5da0/si_handle_child_thread.s rename to asm/nonmatchings/si/si_handle_child_thread.s diff --git a/asm/nonmatchings/code_e92d0_len_5da0/si_handle_print_debug_var.s b/asm/nonmatchings/si/si_handle_print_debug_var.s similarity index 100% rename from asm/nonmatchings/code_e92d0_len_5da0/si_handle_print_debug_var.s rename to asm/nonmatchings/si/si_handle_print_debug_var.s diff --git a/asm/nonmatchings/code_e92d0_len_5da0/si_handle_thread.s b/asm/nonmatchings/si/si_handle_thread.s similarity index 100% rename from asm/nonmatchings/code_e92d0_len_5da0/si_handle_thread.s rename to asm/nonmatchings/si/si_handle_thread.s diff --git a/asm/nonmatchings/code_e92d0_len_5da0/si_skip_else.s b/asm/nonmatchings/si/si_skip_else.s similarity index 100% rename from asm/nonmatchings/code_e92d0_len_5da0/si_skip_else.s rename to asm/nonmatchings/si/si_skip_else.s diff --git a/asm/nonmatchings/code_e92d0_len_5da0/si_skip_if.s b/asm/nonmatchings/si/si_skip_if.s similarity index 100% rename from asm/nonmatchings/code_e92d0_len_5da0/si_skip_if.s rename to asm/nonmatchings/si/si_skip_if.s diff --git a/src/code_e92d0_len_5da0.c b/src/si.c similarity index 95% rename from src/code_e92d0_len_5da0.c rename to src/si.c index b045b51f6a..0e26386890 100644 --- a/src/code_e92d0_len_5da0.c +++ b/src/si.c @@ -447,9 +447,9 @@ ApiStatus si_handle_case_AND(ScriptInstance* script) { } -INCLUDE_ASM(s32, "code_e92d0_len_5da0", si_handle_case_equal_OR); +INCLUDE_ASM(s32, "si", si_handle_case_equal_OR); -INCLUDE_ASM(s32, "code_e92d0_len_5da0", si_handle_case_equal_AND); +INCLUDE_ASM(s32, "si", si_handle_case_equal_AND); ApiStatus si_handle_end_case_group(ScriptInstance* script) { ASSERT(script->switchDepth >= 0); @@ -1069,16 +1069,16 @@ void si_standard_trigger_executor(Trigger* trigger) { } } -INCLUDE_ASM(s32, "code_e92d0_len_5da0", si_handle_bind_lock, ScriptInstance* script, s32 isInitialCall); +INCLUDE_ASM(s32, "si", si_handle_bind_lock, ScriptInstance* script, s32 isInitialCall); -INCLUDE_ASM(s32, "code_e92d0_len_5da0", si_handle_thread, ScriptInstance* script, s32 isInitialCall); +INCLUDE_ASM(s32, "si", si_handle_thread, ScriptInstance* script, s32 isInitialCall); ApiStatus si_handle_end_thread(ScriptInstance* script) { kill_script(script); return ApiStatus_FINISH; } -INCLUDE_ASM(s32, "code_e92d0_len_5da0", si_handle_child_thread, ScriptInstance* script, s32 isInitialCall); +INCLUDE_ASM(s32, "si", si_handle_child_thread, ScriptInstance* script, s32 isInitialCall); ApiStatus si_handle_end_child_thread(ScriptInstance* script) { kill_script(script); @@ -1089,7 +1089,7 @@ ApiStatus func_802C6E14(ScriptInstance* script) { return ApiStatus_DONE2; } -INCLUDE_ASM(s32, "code_e92d0_len_5da0", si_handle_print_debug_var, ScriptInstance* script, s32 isInitialCall); +INCLUDE_ASM(s32, "si", si_handle_print_debug_var, ScriptInstance* script, s32 isInitialCall); ApiStatus func_802C739C(ScriptInstance* script) { script->ptrSavedPosition = (Bytecode*)*script->ptrReadPos; @@ -1111,7 +1111,7 @@ s32 func_802C73B8(ScriptInstance* script) { return 1; } -INCLUDE_ASM(s32, "code_e92d0_len_5da0", si_execute_next_command); +INCLUDE_ASM(s32, "si", si_execute_next_command); // TODO: consider renaming to si_get_variable #ifdef NON_MATCHING @@ -1171,7 +1171,7 @@ s32 get_variable(ScriptInstance* script, Bytecode var) { } */ #else -INCLUDE_ASM(s32, "code_e92d0_len_5da0", get_variable, ScriptInstance* script, Bytecode var); +INCLUDE_ASM(s32, "si", get_variable, ScriptInstance* script, Bytecode var); #endif s32 get_variable_index(ScriptInstance* script, s32 var) { @@ -1260,15 +1260,15 @@ s32 get_variable_index_alt(s32 var) { return var; } -INCLUDE_ASM(s32, "code_e92d0_len_5da0", set_variable, ScriptInstance* script, Bytecode var, s32 value); +INCLUDE_ASM(s32, "si", set_variable, ScriptInstance* script, Bytecode var, s32 value); -INCLUDE_ASM(f32, "code_e92d0_len_5da0", get_float_variable, ScriptInstance* script, Bytecode var); +INCLUDE_ASM(f32, "si", get_float_variable, ScriptInstance* script, Bytecode var); -INCLUDE_ASM(f32, "code_e92d0_len_5da0", set_float_variable, ScriptInstance* script, Bytecode var, f32 value); +INCLUDE_ASM(f32, "si", set_float_variable, ScriptInstance* script, Bytecode var, f32 value); -INCLUDE_ASM(s32, "code_e92d0_len_5da0", si_find_label, ScriptInstance* script, s32 arg1); +INCLUDE_ASM(s32, "si", si_find_label, ScriptInstance* script, s32 arg1); -INCLUDE_ASM(s32, "code_e92d0_len_5da0", si_skip_if, ScriptInstance* script); +INCLUDE_ASM(s32, "si", si_skip_if, ScriptInstance* script); // Matching but needs rodata support /*Bytecode* si_skip_if(ScriptInstance* script) { s32 nestedIfDepth = 0; @@ -1308,7 +1308,7 @@ INCLUDE_ASM(s32, "code_e92d0_len_5da0", si_skip_if, ScriptInstance* script); } while(1); }*/ -INCLUDE_ASM(s32, "code_e92d0_len_5da0", si_skip_else, ScriptInstance* script); +INCLUDE_ASM(s32, "si", si_skip_else, ScriptInstance* script); // Matching but needs rodata support /*Bytecode* si_skip_else(ScriptInstance* script) { s32 nestedIfDepth = 0; @@ -1344,8 +1344,8 @@ INCLUDE_ASM(s32, "code_e92d0_len_5da0", si_skip_else, ScriptInstance* script); } while(1); }*/ -INCLUDE_ASM(s32, "code_e92d0_len_5da0", si_goto_end_case, ScriptInstance* script); +INCLUDE_ASM(s32, "si", si_goto_end_case, ScriptInstance* script); -INCLUDE_ASM(s32, "code_e92d0_len_5da0", si_goto_next_case, ScriptInstance* script); +INCLUDE_ASM(s32, "si", si_goto_next_case, ScriptInstance* script); -INCLUDE_ASM(s32, "code_e92d0_len_5da0", si_goto_end_loop, ScriptInstance* script); +INCLUDE_ASM(s32, "si", si_goto_end_loop, ScriptInstance* script); diff --git a/tools/splat.yaml b/tools/splat.yaml index 8cbeeeac63..19fdfb9b23 100644 --- a/tools/splat.yaml +++ b/tools/splat.yaml @@ -238,7 +238,7 @@ segments: vram: 0x802C3000 files: - [0xe79b0, "c", "code_e79b0_len_1920"] - - [0xe92d0, "c", "code_e92d0_len_5da0"] + - [0xe92d0, "c", "si"] - [0xED510, "c", "code_ED510"] - [0xef070, "c", "code_ef070_len_3400"] - [0xf2470, "c", "code_f2470_len_27f0"]