From 447e6261e18f9f0f222d60793ae763e611953eb7 Mon Sep 17 00:00:00 2001 From: Jdog Date: Tue, 11 Aug 2020 14:38:21 -0700 Subject: [PATCH 1/5] A handful of script functions. Commented out ones that aren't fully matching yet --- .../code_111f0_len_860/func_80035DF0.s | 11 -- .../code_111f0_len_860/func_800360FC.s | 21 --- .../code_111f0_len_860/func_80036130.s | 28 --- .../code_111f0_len_860/func_800363FC.s | 22 --- .../code_111f0_len_860/func_80036430.s | 22 --- .../code_fa4c0_len_3bf0/AddItem.s | 1 + .../code_fa4c0_len_3bf0/PlaySound.s | 1 + .../code_fa4c0_len_3bf0/RemoveEffect.s | 6 + .../code_fa4c0_len_3bf0/StopSound.s | 1 + .../code_fa4c0_len_3bf0/UseDoorSounds.s | 1 + papermario/include/variables.h | 6 +- papermario/src/code_111f0_len_860.c | 4 +- papermario/src/code_fa4c0_len_3bf0.c | 168 ++++++++++++++++-- papermario/undefined_syms.txt | 6 +- 14 files changed, 179 insertions(+), 119 deletions(-) delete mode 100644 papermario/asm/nonmatchings/code_111f0_len_860/func_80035DF0.s delete mode 100644 papermario/asm/nonmatchings/code_111f0_len_860/func_800360FC.s delete mode 100644 papermario/asm/nonmatchings/code_111f0_len_860/func_80036130.s delete mode 100644 papermario/asm/nonmatchings/code_111f0_len_860/func_800363FC.s delete mode 100644 papermario/asm/nonmatchings/code_111f0_len_860/func_80036430.s diff --git a/papermario/asm/nonmatchings/code_111f0_len_860/func_80035DF0.s b/papermario/asm/nonmatchings/code_111f0_len_860/func_80035DF0.s deleted file mode 100644 index 81e7edeb78..0000000000 --- a/papermario/asm/nonmatchings/code_111f0_len_860/func_80035DF0.s +++ /dev/null @@ -1,11 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -.include "include/macro.inc" - -glabel func_80035DF0 -/* 0111F0 80035DF0 3C01800A */ lui $at, 0x800a -/* 0111F4 80035DF4 A4240942 */ sh $a0, 0x942($at) -/* 0111F8 80035DF8 03E00008 */ jr $ra -/* 0111FC 80035DFC 00000000 */ nop - diff --git a/papermario/asm/nonmatchings/code_111f0_len_860/func_800360FC.s b/papermario/asm/nonmatchings/code_111f0_len_860/func_800360FC.s deleted file mode 100644 index 68b5028a50..0000000000 --- a/papermario/asm/nonmatchings/code_111f0_len_860/func_800360FC.s +++ /dev/null @@ -1,21 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -.include "include/macro.inc" - -glabel func_800360FC -/* 0114FC 800360FC 3C028007 */ lui $v0, 0x8007 -/* 011500 80036100 8C42419C */ lw $v0, 0x419c($v0) -/* 011504 80036104 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 011508 80036108 AFBF0010 */ sw $ra, 0x10($sp) -/* 01150C 8003610C 804300AC */ lb $v1, 0xac($v0) -/* 011510 80036110 24020002 */ addiu $v0, $zero, 2 -/* 011514 80036114 14620003 */ bne $v1, $v0, .L80036124 -/* 011518 80036118 00000000 */ nop -/* 01151C 8003611C 0C03A5CF */ jal func_800E973C -/* 011520 80036120 00000000 */ nop -.L80036124: -/* 011524 80036124 8FBF0010 */ lw $ra, 0x10($sp) -/* 011528 80036128 03E00008 */ jr $ra -/* 01152C 8003612C 27BD0018 */ addiu $sp, $sp, 0x18 - diff --git a/papermario/asm/nonmatchings/code_111f0_len_860/func_80036130.s b/papermario/asm/nonmatchings/code_111f0_len_860/func_80036130.s deleted file mode 100644 index a881105eb7..0000000000 --- a/papermario/asm/nonmatchings/code_111f0_len_860/func_80036130.s +++ /dev/null @@ -1,28 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -.include "include/macro.inc" - -glabel func_80036130 -/* 011530 80036130 3C058007 */ lui $a1, 0x8007 -/* 011534 80036134 8CA5419C */ lw $a1, 0x419c($a1) -/* 011538 80036138 84A40088 */ lh $a0, 0x88($a1) -/* 01153C 8003613C 84A30086 */ lh $v1, 0x86($a1) -/* 011540 80036140 24020014 */ addiu $v0, $zero, 0x14 -/* 011544 80036144 3C01800A */ lui $at, 0x800a -/* 011548 80036148 A4200940 */ sh $zero, 0x940($at) -/* 01154C 8003614C 3C01800A */ lui $at, 0x800a -/* 011550 80036150 A4220942 */ sh $v0, 0x942($at) -/* 011554 80036154 3C01800A */ lui $at, 0x800a -/* 011558 80036158 A4200944 */ sh $zero, 0x944($at) -/* 01155C 8003615C 10830005 */ beq $a0, $v1, .L80036174 -/* 011560 80036160 24020001 */ addiu $v0, $zero, 1 -/* 011564 80036164 94A30086 */ lhu $v1, 0x86($a1) -/* 011568 80036168 A4A2008A */ sh $v0, 0x8a($a1) -/* 01156C 8003616C 03E00008 */ jr $ra -/* 011570 80036170 A4A30088 */ sh $v1, 0x88($a1) - -.L80036174: -/* 011574 80036174 03E00008 */ jr $ra -/* 011578 80036178 A4A0008A */ sh $zero, 0x8a($a1) - diff --git a/papermario/asm/nonmatchings/code_111f0_len_860/func_800363FC.s b/papermario/asm/nonmatchings/code_111f0_len_860/func_800363FC.s deleted file mode 100644 index 123fb9cc33..0000000000 --- a/papermario/asm/nonmatchings/code_111f0_len_860/func_800363FC.s +++ /dev/null @@ -1,22 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -.include "include/macro.inc" - -glabel func_800363FC -/* 0117FC 800363FC 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 011800 80036400 3C03800A */ lui $v1, 0x800a -/* 011804 80036404 84630944 */ lh $v1, 0x944($v1) -/* 011808 80036408 24020004 */ addiu $v0, $zero, 4 -/* 01180C 8003640C 10620003 */ beq $v1, $v0, .L8003641C -/* 011810 80036410 AFBF0010 */ sw $ra, 0x10($sp) -/* 011814 80036414 14600003 */ bnez $v1, .L80036424 -/* 011818 80036418 00000000 */ nop -.L8003641C: -/* 01181C 8003641C 0C03A5CF */ jal func_800E973C -/* 011820 80036420 00000000 */ nop -.L80036424: -/* 011824 80036424 8FBF0010 */ lw $ra, 0x10($sp) -/* 011828 80036428 03E00008 */ jr $ra -/* 01182C 8003642C 27BD0018 */ addiu $sp, $sp, 0x18 - diff --git a/papermario/asm/nonmatchings/code_111f0_len_860/func_80036430.s b/papermario/asm/nonmatchings/code_111f0_len_860/func_80036430.s deleted file mode 100644 index aa38d056ef..0000000000 --- a/papermario/asm/nonmatchings/code_111f0_len_860/func_80036430.s +++ /dev/null @@ -1,22 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -.include "include/macro.inc" - -glabel func_80036430 -/* 011830 80036430 240200FF */ addiu $v0, $zero, 0xff -/* 011834 80036434 3C01800A */ lui $at, 0x800a -/* 011838 80036438 A4220940 */ sh $v0, 0x940($at) -/* 01183C 8003643C 24020014 */ addiu $v0, $zero, 0x14 -/* 011840 80036440 3C048011 */ lui $a0, 0x8011 -/* 011844 80036444 2484EFC8 */ addiu $a0, $a0, -0x1038 -/* 011848 80036448 3C01800A */ lui $at, 0x800a -/* 01184C 8003644C A4220942 */ sh $v0, 0x942($at) -/* 011850 80036450 8C820000 */ lw $v0, ($a0) -/* 011854 80036454 24030001 */ addiu $v1, $zero, 1 -/* 011858 80036458 3C01800A */ lui $at, 0x800a -/* 01185C 8003645C A4230944 */ sh $v1, 0x944($at) -/* 011860 80036460 34421000 */ ori $v0, $v0, 0x1000 -/* 011864 80036464 03E00008 */ jr $ra -/* 011868 80036468 AC820000 */ sw $v0, ($a0) - diff --git a/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/AddItem.s b/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/AddItem.s index d435b3e3a8..6ad05d9e39 100644 --- a/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/AddItem.s +++ b/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/AddItem.s @@ -27,6 +27,7 @@ glabel AddItem /* 0FB498 802D6AE8 03E00008 */ jr $ra /* 0FB49C 802D6AEC 27BD0020 */ addiu $sp, $sp, 0x20 +glabel func_802D6AF0 /* 0FB4A0 802D6AF0 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0FB4A4 802D6AF4 AFBF0010 */ sw $ra, 0x10($sp) /* 0FB4A8 802D6AF8 8C82000C */ lw $v0, 0xc($a0) diff --git a/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/PlaySound.s b/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/PlaySound.s index 49ede75fb8..cc323e9bc9 100644 --- a/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/PlaySound.s +++ b/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/PlaySound.s @@ -16,6 +16,7 @@ glabel PlaySound /* 0FAB24 802D6174 03E00008 */ jr $ra /* 0FAB28 802D6178 27BD0018 */ addiu $sp, $sp, 0x18 +glabel func_802D617C /* 0FAB2C 802D617C 27BDFFE0 */ addiu $sp, $sp, -0x20 /* 0FAB30 802D6180 AFB10014 */ sw $s1, 0x14($sp) /* 0FAB34 802D6184 0080882D */ daddu $s1, $a0, $zero diff --git a/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/RemoveEffect.s b/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/RemoveEffect.s index d8d9ae0cf5..56d41a33e8 100644 --- a/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/RemoveEffect.s +++ b/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/RemoveEffect.s @@ -16,6 +16,7 @@ glabel RemoveEffect /* 0FC4B8 802D7B08 03E00008 */ jr $ra /* 0FC4BC 802D7B0C 27BD0018 */ addiu $sp, $sp, 0x18 +glabel func_802D7B10 /* 0FC4C0 802D7B10 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0FC4C4 802D7B14 AFBF0010 */ sw $ra, 0x10($sp) /* 0FC4C8 802D7B18 8C82000C */ lw $v0, 0xc($a0) @@ -30,6 +31,7 @@ glabel RemoveEffect /* 0FC4EC 802D7B3C 03E00008 */ jr $ra /* 0FC4F0 802D7B40 27BD0018 */ addiu $sp, $sp, 0x18 +glabel func_802D7B44 /* 0FC4F4 802D7B44 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0FC4F8 802D7B48 AFBF0010 */ sw $ra, 0x10($sp) /* 0FC4FC 802D7B4C 8C82000C */ lw $v0, 0xc($a0) @@ -43,6 +45,7 @@ glabel RemoveEffect /* 0FC51C 802D7B6C 03E00008 */ jr $ra /* 0FC520 802D7B70 27BD0018 */ addiu $sp, $sp, 0x18 +glabel func_802D7B74 /* 0FC524 802D7B74 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0FC528 802D7B78 AFBF0010 */ sw $ra, 0x10($sp) /* 0FC52C 802D7B7C 8C82000C */ lw $v0, 0xc($a0) @@ -56,6 +59,7 @@ glabel RemoveEffect /* 0FC54C 802D7B9C 03E00008 */ jr $ra /* 0FC550 802D7BA0 27BD0018 */ addiu $sp, $sp, 0x18 +glabel func_802D7BA4 /* 0FC554 802D7BA4 27BDFFC8 */ addiu $sp, $sp, -0x38 /* 0FC558 802D7BA8 AFB00018 */ sw $s0, 0x18($sp) /* 0FC55C 802D7BAC 0080802D */ daddu $s0, $a0, $zero @@ -148,6 +152,7 @@ glabel RemoveEffect /* 0FC6A0 802D7CF0 03E00008 */ jr $ra /* 0FC6A4 802D7CF4 27BD0038 */ addiu $sp, $sp, 0x38 +glabel func_802D7CF8 /* 0FC6A8 802D7CF8 27BDFFD0 */ addiu $sp, $sp, -0x30 /* 0FC6AC 802D7CFC AFB10014 */ sw $s1, 0x14($sp) /* 0FC6B0 802D7D00 0080882D */ daddu $s1, $a0, $zero @@ -217,6 +222,7 @@ glabel RemoveEffect /* 0FC7B0 802D7E00 03E00008 */ jr $ra /* 0FC7B4 802D7E04 27BD0030 */ addiu $sp, $sp, 0x30 +glabel func_802D7E08 /* 0FC7B8 802D7E08 27BDFFA0 */ addiu $sp, $sp, -0x60 /* 0FC7BC 802D7E0C AFB10024 */ sw $s1, 0x24($sp) /* 0FC7C0 802D7E10 0080882D */ daddu $s1, $a0, $zero diff --git a/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/StopSound.s b/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/StopSound.s index 4c9620035d..73ecfc0128 100644 --- a/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/StopSound.s +++ b/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/StopSound.s @@ -16,6 +16,7 @@ glabel StopSound /* 0FAC8C 802D62DC 03E00008 */ jr $ra /* 0FAC90 802D62E0 27BD0018 */ addiu $sp, $sp, 0x18 +glabel func_802D62E4 /* 0FAC94 802D62E4 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0FAC98 802D62E8 AFBF0010 */ sw $ra, 0x10($sp) /* 0FAC9C 802D62EC 8C82000C */ lw $v0, 0xc($a0) diff --git a/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/UseDoorSounds.s b/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/UseDoorSounds.s index f7676cd6f5..1711d47848 100644 --- a/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/UseDoorSounds.s +++ b/papermario/asm/nonmatchings/code_fa4c0_len_3bf0/UseDoorSounds.s @@ -16,6 +16,7 @@ glabel UseDoorSounds /* 0FACE8 802D6338 03E00008 */ jr $ra /* 0FACEC 802D633C 27BD0018 */ addiu $sp, $sp, 0x18 +glabel func_802D6340 /* 0FACF0 802D6340 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0FACF4 802D6344 AFBF0010 */ sw $ra, 0x10($sp) /* 0FACF8 802D6348 8C82000C */ lw $v0, 0xc($a0) diff --git a/papermario/include/variables.h b/papermario/include/variables.h index 5f7fd1fa4f..8122d0e6af 100644 --- a/papermario/include/variables.h +++ b/papermario/include/variables.h @@ -13,10 +13,14 @@ extern s16* D_80151328; extern s16 D_8010CD10; extern s16 D_8010CD12; -extern u16 D_800A0940; +extern u16 mapTransitionAlpha; extern u16 D_800A0942; extern s16 D_800A0944; +extern s16 D_80151308; + +extern s16 gCurrentDoorSoundsSet; + #endif diff --git a/papermario/src/code_111f0_len_860.c b/papermario/src/code_111f0_len_860.c index 783d9f0133..f550c344f9 100644 --- a/papermario/src/code_111f0_len_860.c +++ b/papermario/src/code_111f0_len_860.c @@ -25,7 +25,7 @@ void func_800360FC(void) { void func_80036130(void) { game_status* gameStatus = *gGameStatusPtr; - D_800A0940 = 0x00; + mapTransitionAlpha = 0x00; D_800A0942 = 0x14; D_800A0944 = 0x00; @@ -52,7 +52,7 @@ s32 func_800363FC(void) { s32 func_80036430(void) { player_status* pPlayerStatus = &gPlayerStatus; - D_800A0940 = 0xFF; + mapTransitionAlpha = 0xFF; D_800A0942 = 0x14; D_800A0944 = 0x01; diff --git a/papermario/src/code_fa4c0_len_3bf0.c b/papermario/src/code_fa4c0_len_3bf0.c index c5f3395570..9daa231a94 100644 --- a/papermario/src/code_fa4c0_len_3bf0.c +++ b/papermario/src/code_fa4c0_len_3bf0.c @@ -2,21 +2,92 @@ INCLUDE_ASM(code_fa4c0_len_3bf0, func_802D5B10); -INCLUDE_ASM(code_fa4c0_len_3bf0, FadeOutMusic); +s32 FadeOutMusic(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + s32 itemID = get_variable(script, *ptrReadPos++); + s32* ptrNextPos = ptrReadPos++; -INCLUDE_ASM(code_fa4c0_len_3bf0, SetMusicTrack); + return (set_music_track(itemID, -1, 0, get_variable(script, *ptrNextPos++), 8) != 0) * 2; +} + +s32 SetMusicTrack(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + s32 musicPlayer = get_variable(script, *ptrReadPos++); + s32 songID = get_variable(script, *ptrReadPos++); + s32 variation = get_variable(script, *ptrReadPos++); + s32 volume = get_variable(script, *ptrReadPos++); + + return (set_music_track(musicPlayer, songID, variation, 0x1F4, (volume << 0x10) >> 0x10) != 0) * 2; +} INCLUDE_ASM(code_fa4c0_len_3bf0, FadeInMusic); -INCLUDE_ASM(code_fa4c0_len_3bf0, PlayAmbientSounds); +s32 PlayAmbientSounds(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + s32 soundID = get_variable(script, *ptrReadPos++); -INCLUDE_ASM(code_fa4c0_len_3bf0, PlaySound); + return (play_ambient_sounds(soundID, 0xFA) != 0) * 2; +} + +s32 PlaySound(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + s32 soundID = get_variable(script, *ptrReadPos++); + + play_sound(soundID); + return 2; +} + +s32 func_802D617C(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + s32 soundID = get_variable(script, *ptrReadPos++); + s32 value2 = get_variable(script, *ptrReadPos++); + + _play_sound(soundID, value2 & 0xFF, 0, 0); + return 2; +} INCLUDE_ASM(code_fa4c0_len_3bf0, PlaySoundAt); +/* +s32 PlaySoundAt(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + s32 soundID = get_variable(script, *ptrReadPos++); + s32 value2 = get_variable(script, *ptrReadPos++); + s32 x = get_variable(script, *ptrReadPos++); + s32 y = get_variable(script, *ptrReadPos++); + s32 z = get_variable(script, *ptrReadPos++); -INCLUDE_ASM(code_fa4c0_len_3bf0, StopSound); + play_sound_at_position(soundID, value2, x, y, z); + return 2; +} +*/ -INCLUDE_ASM(code_fa4c0_len_3bf0, UseDoorSounds); +s32 StopSound(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + + stop_sound(get_variable(script, *ptrReadPos++)); + return 2; +} + +s32 func_802D62E4(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + + func_80149A6C(get_variable(script, *ptrReadPos++), 1); + return 2; +} + +s32 UseDoorSounds(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + + gCurrentDoorSoundsSet = get_variable(script, *ptrReadPos++); + return 2; +} + +s32 func_802D6340(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + + D_80151308 = get_variable(script, *ptrReadPos++); + return 2; +} INCLUDE_ASM(code_fa4c0_len_3bf0, PlaySoundAtF); @@ -30,7 +101,19 @@ INCLUDE_ASM(code_fa4c0_len_3bf0, HasKeyItem); INCLUDE_ASM(code_fa4c0_len_3bf0, FindKeyItem); -INCLUDE_ASM(code_fa4c0_len_3bf0, AddItem); +s32 AddItem(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + s32 itemID = get_variable(script, *ptrReadPos++); + s32* ptrNextPos = *ptrReadPos++; + + set_variable(script, ptrNextPos, add_item(itemID)); + return 2; +} + +s32 func_802D6AF0(script_context* script, s32 initialCall) { + set_variable(script, *script->ptrReadPos, 0); + return 2; +} INCLUDE_ASM(code_fa4c0_len_3bf0, FindItem); @@ -48,19 +131,53 @@ INCLUDE_ASM(code_fa4c0_len_3bf0, DropItemEntityB); INCLUDE_ASM(code_fa4c0_len_3bf0, RemoveItemEntity); -INCLUDE_ASM(code_fa4c0_len_3bf0, AddBadge); +s32 AddBadge(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + s32 itemID = get_variable(script, *ptrReadPos++); + s32* ptrNextPos = *ptrReadPos++; + + set_variable(script, ptrNextPos, add_badge(itemID)); + return 2; +} INCLUDE_ASM(code_fa4c0_len_3bf0, RemoveBadge); INCLUDE_ASM(code_fa4c0_len_3bf0, SetItemPos); +/* +s32 SetItemPos(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + s32 itemEntityIndex, value2, value3, value4; + s32* ptrItemEntity; + + itemEntityIndex = get_variable(script, *ptrReadPos++); + value2 = get_variable(script, *ptrReadPos++); + value3 = get_variable(script, *ptrReadPos++); + value4 = get_variable(script, *ptrReadPos++); + + ptrItemEntity = get_item_entity(itemEntityIndex); + *(ptrItemEntity + 0x08) = (f64) value2; + *(ptrItemEntity + 0x0C) = (f64) value3; + *(ptrItemEntity + 0x10) = (f64) value4; + return 2; +} +*/ INCLUDE_ASM(code_fa4c0_len_3bf0, SetItemFlags); -INCLUDE_ASM(code_fa4c0_len_3bf0, AddCoin); +s32 AddCoin(script_context* script, s32 initialCall) { + script->varTable[0] = add_coins(get_variable(script, *script->ptrReadPos)); + return 2; +} -INCLUDE_ASM(code_fa4c0_len_3bf0, AddStarPoints); +s32 AddStarPoints(script_context* script, s32 initialCall) { + script->varTable[0] = add_star_points(get_variable(script, *script->ptrReadPos)); + return 2; +} -INCLUDE_ASM(code_fa4c0_len_3bf0, AddStarPieces); +s32 AddStarPieces(script_context* script, s32 initialCall) { + script->varTable[0] = add_star_pieces(get_variable(script, *script->ptrReadPos)); + return 2; +} INCLUDE_ASM(code_fa4c0_len_3bf0, GetItemPower); @@ -73,6 +190,35 @@ INCLUDE_ASM(code_fa4c0_len_3bf0, func_802D74C0); INCLUDE_ASM(code_fa4c0_len_3bf0, ShowEmote); INCLUDE_ASM(code_fa4c0_len_3bf0, RemoveEffect); +/* +s32 RemoveEffect(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + + remove_effect(get_variable(script, *ptrReadPos++)); + return 2; +} + +s32 func_802D7B10(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + s32 ptrValue = get_variable(script, *ptrReadPos++); + *ptrValue = (*ptrValue | 0x10); + return 2; +} + +s32 func_802D7B44(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + s32 ptrValue = get_variable(script, *ptrReadPos++); + *((ptrValue + 0xC) + 0x14) = 10; + return 2; +} + +s32 func_802D7B74(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + s32 ptrValue = get_variable(script, *ptrReadPos++); + *((ptrValue + 0xC) + 0x30) = 5; + return 2; +} +*/ INCLUDE_ASM(code_fa4c0_len_3bf0, ShowSleepBubble); diff --git a/papermario/undefined_syms.txt b/papermario/undefined_syms.txt index db2e9ccab0..81dd6c91b1 100644 --- a/papermario/undefined_syms.txt +++ b/papermario/undefined_syms.txt @@ -4,7 +4,7 @@ gPlayerData = 0x8010F290; gPlayerStatus = 0x8010EFC8; gItemTable = 0x800878E0; -D_800A0940 = 0x800A0940; +mapTransitionAlpha = 0x800A0940; D_800A0942 = 0x800A0942; D_800A0944 = 0x800A0944; @@ -46,7 +46,11 @@ D_00316F30 = 0x00316F30; D_8010D000 = 0x8010D000; D_8014F140 = 0x8014F140; +D_80151308 = 0x80151308; D_80151328 = 0x80151328; + +gCurrentDoorSoundsSet = 0x80151340; + D_8015C7C0 = 0x8015C7C0; func_802A91F8 = 0x802A91F8; From 224aa7dfdda6063ff26a7eca81e301012b669e71 Mon Sep 17 00:00:00 2001 From: Jdog Date: Tue, 11 Aug 2020 18:59:46 -0700 Subject: [PATCH 2/5] Added item_entity struct and related stuff. More matching functions --- papermario/include/common_structs.h | 56 ++++++++++++++++++++++++++++ papermario/include/functions.h | 2 + papermario/include/variables.h | 5 ++- papermario/src/code_111f0_len_860.c | 4 +- papermario/src/code_de740_len_23f0.c | 2 +- papermario/src/code_fa4c0_len_3bf0.c | 45 +++++++++++++--------- papermario/undefined_syms.txt | 4 +- 7 files changed, 96 insertions(+), 22 deletions(-) diff --git a/papermario/include/common_structs.h b/papermario/include/common_structs.h index 3eff5cdfc6..f2b26328ba 100644 --- a/papermario/include/common_structs.h +++ b/papermario/include/common_structs.h @@ -48,6 +48,62 @@ typedef struct { /* 0x168 */ s32 unk_168; } game_status; +typedef enum eItemEntityState { + CollisionWithPlayer=3, + FellBelowWorld=2, + Init=0, + Initialized=1 +} eItemEntityState; + +typedef struct { + /* 0x00 */ f32 verticalVelocity; + /* 0x04 */ f32 gravity; /* 2 = normal, 1 = low gravity, higher values never 'settle' */ + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 constVelocity; /* ? */ + /* 0x10 */ f32 velx; + /* 0x14 */ f32 velz; + /* 0x18 */ f32 moveAngle; + /* 0x1C */ f32 field_0x1c; + /* 0x20 */ f32 field_0x20; +} item_entity_physics_data; + +typedef struct { + /* 0x00 */ s32 flags; + /* 0x04 */ s16 boundVar; /* see make_item_entity */ + /* 0x06 */ s16 field_0x6; + /* 0x08 */ f32 position[3]; + /* 0x14 */ struct item_entity_physics_data* physicsData; + /* 0x24 */ s16 itemID; /* into item table, also worldIconID */ + /* 0x1A */ eItemEntityState state; + /* 0x1B */ s8 type; + /* 0x1C */ s8 pickupDelay; /* num frames before item can be picked up */ + /* 0x1D */ s8 field_0x1d; + /* 0x1E */ s16 wsFaceAngle; /* < 0 means none */ + /* 0x20 */ s16 shadowIndex; + /* 0x22 */ char unk_22[2]; + /* 0x24 */ u32* readPos; + /* 0x28 */ u32 savedReadPos; + /* 0x2C */ s8 field_0x2c; + /* 0x2D */ s8 field_0x2d; + /* 0x2E */ s8 unkCounter; + /* 0x2F */ s8 field_0x2f; + /* 0x30 */ f32 scale; + /* 0x34 */ s16 field_0x34; + /* 0x36 */ s16 field_0x36; + /* 0x38 */ s16 field_0x38; + /* 0x3A */ char unk_3a[2]; + /* 0x3C */ s32 field_0x3c; /* coin related? timer? state? */ + /* 0x40 */ s32 field_0x40; /* coin sound related? */ + /* 0x44 */ char unk_44[4]; + /* 0x48 */ s32 field_0x48; /* coin sound related? */ + /* 0x4C */ s32 field_0x4c; + /* 0x50 */ s32 field_0x50; + /* 0x54 */ char unk_54[2]; + /* 0x56 */ s16 field_0x56; + /* 0x58 */ char unk_58[2]; + /* 0x5A */ s16 field_0x5a; +} item_entity; + typedef struct { /* 0x00 */ s32 nameString; /* 0x04 */ s16 iconID; diff --git a/papermario/include/functions.h b/papermario/include/functions.h index 2c21d3691b..c15ad959a3 100644 --- a/papermario/include/functions.h +++ b/papermario/include/functions.h @@ -13,4 +13,6 @@ f32 get_float_variable(script_context* script, s32 pos); f32 sin_deg(f32 x); f32 cos_deg(f32 x); +s32 play_sound_at_position(s32 soundID, s32 value2, f32 posX, f32 posY, f32 posZ); + #endif diff --git a/papermario/include/variables.h b/papermario/include/variables.h index 8122d0e6af..bf28b81f71 100644 --- a/papermario/include/variables.h +++ b/papermario/include/variables.h @@ -13,12 +13,15 @@ extern s16* D_80151328; extern s16 D_8010CD10; extern s16 D_8010CD12; -extern u16 mapTransitionAlpha; +extern u16 gMapTransitionAlpha; extern u16 D_800A0942; extern s16 D_800A0944; extern s16 D_80151308; +extern s16 D_8010F304[]; // Key Items +extern s16 D_8010F444[]; // Items + extern s16 gCurrentDoorSoundsSet; diff --git a/papermario/src/code_111f0_len_860.c b/papermario/src/code_111f0_len_860.c index f550c344f9..4dda7fb0e1 100644 --- a/papermario/src/code_111f0_len_860.c +++ b/papermario/src/code_111f0_len_860.c @@ -25,7 +25,7 @@ void func_800360FC(void) { void func_80036130(void) { game_status* gameStatus = *gGameStatusPtr; - mapTransitionAlpha = 0x00; + gMapTransitionAlpha = 0x00; D_800A0942 = 0x14; D_800A0944 = 0x00; @@ -52,7 +52,7 @@ s32 func_800363FC(void) { s32 func_80036430(void) { player_status* pPlayerStatus = &gPlayerStatus; - mapTransitionAlpha = 0xFF; + gMapTransitionAlpha = 0xFF; D_800A0942 = 0x14; D_800A0944 = 0x01; diff --git a/papermario/src/code_de740_len_23f0.c b/papermario/src/code_de740_len_23f0.c index 82daaaeda2..fe3710fc01 100644 --- a/papermario/src/code_de740_len_23f0.c +++ b/papermario/src/code_de740_len_23f0.c @@ -44,7 +44,7 @@ INCLUDE_ASM(code_de740_len_23f0, play_sound_at_player); INCLUDE_ASM(code_de740_len_23f0, play_sound_at_npc); -INCLUDE_ASM(code_de740_len_23f0, play_sound_at_position); +s32 INCLUDE_ASM(code_de740_len_23f0, play_sound_at_position, s32 soundID, s32 value2, f32 posX, f32 posY, f32 posZ); INCLUDE_ASM(code_de740_len_23f0, func_80149E04); diff --git a/papermario/src/code_fa4c0_len_3bf0.c b/papermario/src/code_fa4c0_len_3bf0.c index 9daa231a94..5549705359 100644 --- a/papermario/src/code_fa4c0_len_3bf0.c +++ b/papermario/src/code_fa4c0_len_3bf0.c @@ -46,8 +46,6 @@ s32 func_802D617C(script_context* script, s32 initialCall) { return 2; } -INCLUDE_ASM(code_fa4c0_len_3bf0, PlaySoundAt); -/* s32 PlaySoundAt(script_context* script, s32 initialCall) { s32* ptrReadPos = script->ptrReadPos; s32 soundID = get_variable(script, *ptrReadPos++); @@ -56,10 +54,9 @@ s32 PlaySoundAt(script_context* script, s32 initialCall) { s32 y = get_variable(script, *ptrReadPos++); s32 z = get_variable(script, *ptrReadPos++); - play_sound_at_position(soundID, value2, x, y, z); + play_sound_at_position(soundID, value2, (f32) x, (f32) y, (f32) z); return 2; } -*/ s32 StopSound(script_context* script, s32 initialCall) { s32* ptrReadPos = script->ptrReadPos; @@ -91,9 +88,24 @@ s32 func_802D6340(script_context* script, s32 initialCall) { INCLUDE_ASM(code_fa4c0_len_3bf0, PlaySoundAtF); -INCLUDE_ASM(code_fa4c0_len_3bf0, RemoveKeyItemAt); +s32 RemoveKeyItemAt(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + s32 index = get_variable(script, *ptrReadPos++); + s16* ptrTemp = D_8010F304; + ptrTemp[index] = 0; -INCLUDE_ASM(code_fa4c0_len_3bf0, RemoveItemAt); + return 2; +} + +s32 RemoveItemAt(script_context* script, s32 initialCall) { + s32* ptrReadPos = script->ptrReadPos; + s32 index = get_variable(script, *ptrReadPos++); + s16* ptrTemp = D_8010F444; + ptrTemp[index] = 0; + + sort_items(); + return 2; +} INCLUDE_ASM(code_fa4c0_len_3bf0, AddKeyItem); @@ -142,25 +154,24 @@ s32 AddBadge(script_context* script, s32 initialCall) { INCLUDE_ASM(code_fa4c0_len_3bf0, RemoveBadge); -INCLUDE_ASM(code_fa4c0_len_3bf0, SetItemPos); -/* s32 SetItemPos(script_context* script, s32 initialCall) { s32* ptrReadPos = script->ptrReadPos; - s32 itemEntityIndex, value2, value3, value4; - s32* ptrItemEntity; + item_entity* ptrItemEntity; + s32 itemEntityIndex; + s32 x, y, z; itemEntityIndex = get_variable(script, *ptrReadPos++); - value2 = get_variable(script, *ptrReadPos++); - value3 = get_variable(script, *ptrReadPos++); - value4 = get_variable(script, *ptrReadPos++); + x = get_variable(script, *ptrReadPos++); + y = get_variable(script, *ptrReadPos++); + z = get_variable(script, *ptrReadPos++); ptrItemEntity = get_item_entity(itemEntityIndex); - *(ptrItemEntity + 0x08) = (f64) value2; - *(ptrItemEntity + 0x0C) = (f64) value3; - *(ptrItemEntity + 0x10) = (f64) value4; + ptrItemEntity->position[0] = (f32) x; + ptrItemEntity->position[1] = (f32) y; + ptrItemEntity->position[2] = (f32) z; + return 2; } -*/ INCLUDE_ASM(code_fa4c0_len_3bf0, SetItemFlags); diff --git a/papermario/undefined_syms.txt b/papermario/undefined_syms.txt index 81dd6c91b1..ceb7fce283 100644 --- a/papermario/undefined_syms.txt +++ b/papermario/undefined_syms.txt @@ -4,7 +4,7 @@ gPlayerData = 0x8010F290; gPlayerStatus = 0x8010EFC8; gItemTable = 0x800878E0; -mapTransitionAlpha = 0x800A0940; +gMapTransitionAlpha = 0x800A0940; D_800A0942 = 0x800A0942; D_800A0944 = 0x800A0944; @@ -29,6 +29,8 @@ D_8009A5D8 = 0x8009A5D8; D_8009A650 = 0x8009A650; D_800DC500 = 0x800DC500; D_8010F6D0 = 0x8010F6D0; +D_8010F304 = 0x8010F304; +D_8010F444 = 0x8010F444; D_802C3000 = 0x802C3000; D_802DBD40 = 0x802DBD40; D_802E0D90 = 0x802E0D90; From 23d11ce6f24a3990e6b0177740526e8d8e73daf0 Mon Sep 17 00:00:00 2001 From: Jdog Date: Tue, 11 Aug 2020 19:22:23 -0700 Subject: [PATCH 3/5] field to unk --- papermario/include/common_structs.h | 38 ++++++++++++++--------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/papermario/include/common_structs.h b/papermario/include/common_structs.h index a41e7e6df3..d426be60e4 100644 --- a/papermario/include/common_structs.h +++ b/papermario/include/common_structs.h @@ -59,50 +59,50 @@ typedef enum eItemEntityState { typedef struct { /* 0x00 */ f32 verticalVelocity; /* 0x04 */ f32 gravity; /* 2 = normal, 1 = low gravity, higher values never 'settle' */ - /* 0x08 */ f32 field_0x8; + /* 0x08 */ f32 unk_8; /* 0x0C */ f32 constVelocity; /* ? */ /* 0x10 */ f32 velx; /* 0x14 */ f32 velz; /* 0x18 */ f32 moveAngle; - /* 0x1C */ f32 field_0x1c; - /* 0x20 */ f32 field_0x20; + /* 0x1C */ f32 unk_1C; + /* 0x20 */ f32 unk_20; } item_entity_physics_data; typedef struct { /* 0x00 */ s32 flags; /* 0x04 */ s16 boundVar; /* see make_item_entity */ - /* 0x06 */ s16 field_0x6; + /* 0x06 */ s16 unk_6; /* 0x08 */ f32 position[3]; /* 0x14 */ struct item_entity_physics_data* physicsData; /* 0x24 */ s16 itemID; /* into item table, also worldIconID */ /* 0x1A */ eItemEntityState state; /* 0x1B */ s8 type; /* 0x1C */ s8 pickupDelay; /* num frames before item can be picked up */ - /* 0x1D */ s8 field_0x1d; + /* 0x1D */ s8 unk_1D; /* 0x1E */ s16 wsFaceAngle; /* < 0 means none */ /* 0x20 */ s16 shadowIndex; /* 0x22 */ char unk_22[2]; /* 0x24 */ u32* readPos; /* 0x28 */ u32 savedReadPos; - /* 0x2C */ s8 field_0x2c; - /* 0x2D */ s8 field_0x2d; + /* 0x2C */ s8 unk_2C; + /* 0x2D */ s8 unk_2D; /* 0x2E */ s8 unkCounter; - /* 0x2F */ s8 field_0x2f; + /* 0x2F */ s8 unk_2F; /* 0x30 */ f32 scale; - /* 0x34 */ s16 field_0x34; - /* 0x36 */ s16 field_0x36; - /* 0x38 */ s16 field_0x38; - /* 0x3A */ char unk_3a[2]; - /* 0x3C */ s32 field_0x3c; /* coin related? timer? state? */ - /* 0x40 */ s32 field_0x40; /* coin sound related? */ + /* 0x34 */ s16 unk_34; + /* 0x36 */ s16 unk_36; + /* 0x38 */ s16 unk_38; + /* 0x3A */ char unk_3A[2]; + /* 0x3C */ s32 unk_3C; /* coin related? timer? state? */ + /* 0x40 */ s32 unk_40; /* coin sound related? */ /* 0x44 */ char unk_44[4]; - /* 0x48 */ s32 field_0x48; /* coin sound related? */ - /* 0x4C */ s32 field_0x4c; - /* 0x50 */ s32 field_0x50; + /* 0x48 */ s32 unk_48; /* coin sound related? */ + /* 0x4C */ s32 unk_4C; + /* 0x50 */ s32 unk_50; /* 0x54 */ char unk_54[2]; - /* 0x56 */ s16 field_0x56; + /* 0x56 */ s16 unk_56; /* 0x58 */ char unk_58[2]; - /* 0x5A */ s16 field_0x5a; + /* 0x5A */ s16 unk_5a; } item_entity; typedef struct { From ab39e96b1b51f144739b0662f22b7ac7f1a66e95 Mon Sep 17 00:00:00 2001 From: Jdog Date: Tue, 11 Aug 2020 19:29:31 -0700 Subject: [PATCH 4/5] Style changes and removing casts --- papermario/src/code_fa4c0_len_3bf0.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/papermario/src/code_fa4c0_len_3bf0.c b/papermario/src/code_fa4c0_len_3bf0.c index 5549705359..44b889a82c 100644 --- a/papermario/src/code_fa4c0_len_3bf0.c +++ b/papermario/src/code_fa4c0_len_3bf0.c @@ -54,7 +54,7 @@ s32 PlaySoundAt(script_context* script, s32 initialCall) { s32 y = get_variable(script, *ptrReadPos++); s32 z = get_variable(script, *ptrReadPos++); - play_sound_at_position(soundID, value2, (f32) x, (f32) y, (f32) z); + play_sound_at_position(soundID, value2, x, y, z); return 2; } @@ -92,6 +92,7 @@ s32 RemoveKeyItemAt(script_context* script, s32 initialCall) { s32* ptrReadPos = script->ptrReadPos; s32 index = get_variable(script, *ptrReadPos++); s16* ptrTemp = D_8010F304; + ptrTemp[index] = 0; return 2; @@ -101,6 +102,7 @@ s32 RemoveItemAt(script_context* script, s32 initialCall) { s32* ptrReadPos = script->ptrReadPos; s32 index = get_variable(script, *ptrReadPos++); s16* ptrTemp = D_8010F444; + ptrTemp[index] = 0; sort_items(); @@ -166,9 +168,9 @@ s32 SetItemPos(script_context* script, s32 initialCall) { z = get_variable(script, *ptrReadPos++); ptrItemEntity = get_item_entity(itemEntityIndex); - ptrItemEntity->position[0] = (f32) x; - ptrItemEntity->position[1] = (f32) y; - ptrItemEntity->position[2] = (f32) z; + ptrItemEntity->position[0] = x; + ptrItemEntity->position[1] = y; + ptrItemEntity->position[2] = z; return 2; } From bcfb7c8a75c0b9acb9ad068d2e5540f8a6542824 Mon Sep 17 00:00:00 2001 From: Jdog Date: Tue, 11 Aug 2020 19:45:27 -0700 Subject: [PATCH 5/5] Function prototype for set_music_track --- papermario/include/functions.h | 2 +- papermario/src/code_e0b30_len_b80.c | 2 +- papermario/src/code_fa4c0_len_3bf0.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/papermario/include/functions.h b/papermario/include/functions.h index d495f54906..47b91a0b6b 100644 --- a/papermario/include/functions.h +++ b/papermario/include/functions.h @@ -19,5 +19,5 @@ s32 func_800554E8(s32, s32); s32 func_800555E4(s32); s32 play_sound_at_position(s32 soundID, s32 value2, f32 posX, f32 posY, f32 posZ); - +s32 set_music_track(s32 musicPlayer, s32 songID, s32 variation, s32 unk, s32 volume); #endif diff --git a/papermario/src/code_e0b30_len_b80.c b/papermario/src/code_e0b30_len_b80.c index 6e2fd7dd93..5178ece24d 100644 --- a/papermario/src/code_e0b30_len_b80.c +++ b/papermario/src/code_e0b30_len_b80.c @@ -10,7 +10,7 @@ INCLUDE_ASM(code_e0b30_len_b80, func_8014A548); INCLUDE_ASM(code_e0b30_len_b80, _set_music_track); -INCLUDE_ASM(code_e0b30_len_b80, set_music_track); +s32 INCLUDE_ASM(code_e0b30_len_b80, set_music_track, s32 musicPlayer, s32 songID, s32 variation, s32 unk, s32 volume); INCLUDE_ASM(code_e0b30_len_b80, func_8014A964); diff --git a/papermario/src/code_fa4c0_len_3bf0.c b/papermario/src/code_fa4c0_len_3bf0.c index 44b889a82c..973aa33c98 100644 --- a/papermario/src/code_fa4c0_len_3bf0.c +++ b/papermario/src/code_fa4c0_len_3bf0.c @@ -15,9 +15,9 @@ s32 SetMusicTrack(script_context* script, s32 initialCall) { s32 musicPlayer = get_variable(script, *ptrReadPos++); s32 songID = get_variable(script, *ptrReadPos++); s32 variation = get_variable(script, *ptrReadPos++); - s32 volume = get_variable(script, *ptrReadPos++); + s16 volume = get_variable(script, *ptrReadPos++); - return (set_music_track(musicPlayer, songID, variation, 0x1F4, (volume << 0x10) >> 0x10) != 0) * 2; + return (set_music_track(musicPlayer, songID, variation, 0x1F4, volume) != 0) * 2; } INCLUDE_ASM(code_fa4c0_len_3bf0, FadeInMusic);