From 8f6142e4fdd1195541e3f1ecc08ddf961f3b046c Mon Sep 17 00:00:00 2001 From: Aetias Date: Mon, 26 May 2025 21:32:08 +0200 Subject: [PATCH] Decomp `PlayerControl` 99% --- config/eur/arm9/overlays/ov000/symbols.txt | 22 +++++---- config/usa/arm9/overlays/ov000/symbols.txt | 21 ++++---- src/00_Core/Player/PlayerControl.cpp | 56 +++++++++++----------- 3 files changed, 50 insertions(+), 49 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index a7d66f61..4758d647 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -4896,16 +4896,17 @@ data_ov000_020e6088 kind:data(any) addr:0x20e6088 data_ov000_020e6098 kind:data(any) addr:0x20e6098 data_ov000_020e60a8 kind:data(any) addr:0x20e60a8 _ZTV13LinkStateRoll kind:data(any) addr:0x20e60c0 -data_ov000_020e6104 kind:data(any) addr:0x20e6104 -data_ov000_020e6108 kind:data(any) addr:0x20e6108 -data_ov000_020e610c kind:data(any) addr:0x20e610c -data_ov000_020e6110 kind:data(any) addr:0x20e6110 -data_ov000_020e6114 kind:data(any) addr:0x20e6114 -data_ov000_020e6118 kind:data(any) addr:0x20e6118 -data_ov000_020e611c kind:data(any) addr:0x20e611c -data_ov000_020e6120 kind:data(any) addr:0x20e6120 -data_ov000_020e6124 kind:data(any) addr:0x20e6124 -@1548 kind:data(any) addr:0x20e6148 +@1505 kind:data(any) addr:0x20e6104 +@1504 kind:data(any) addr:0x20e6108 +@1503 kind:data(any) addr:0x20e610c +@1502 kind:data(any) addr:0x20e6110 +@1501 kind:data(any) addr:0x20e6114 +@1500 kind:data(any) addr:0x20e6118 +@1499 kind:data(any) addr:0x20e611c +@1498 kind:data(any) addr:0x20e6120 +sShipTypes kind:data(any) addr:0x20e6124 local +data_ov000_020e6144 kind:data(any) addr:0x20e6144 +@1556 kind:data(any) addr:0x20e6148 data_ov000_020e6158 kind:data(any) addr:0x20e6158 data_ov000_020e6174 kind:data(any) addr:0x20e6174 data_ov000_020e6178 kind:data(any) addr:0x20e6178 @@ -5876,6 +5877,7 @@ data_ov000_020ee16c kind:bss addr:0x20ee16c data_ov000_020ee178 kind:bss addr:0x20ee178 data_ov000_020ee184 kind:bss addr:0x20ee184 data_ov000_020ee198 kind:bss addr:0x20ee198 +data_ov000_020ee19c kind:bss addr:0x20ee19c @418 kind:bss addr:0x20ee1a0 local _ZN9ActorNavi5gTypeE kind:bss addr:0x20ee1ac @419 kind:bss addr:0x20ee1c0 local diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index ff122fba..a656d213 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -4896,16 +4896,17 @@ data_ov000_020e6088 kind:data(any) addr:0x20e6028 data_ov000_020e6098 kind:data(any) addr:0x20e6038 data_ov000_020e60a8 kind:data(any) addr:0x20e6048 _ZTV13LinkStateRoll kind:data(any) addr:0x20e6060 -data_ov000_020e6104 kind:data(any) addr:0x20e60a4 -data_ov000_020e6108 kind:data(any) addr:0x20e60a8 -data_ov000_020e610c kind:data(any) addr:0x20e60ac -data_ov000_020e6110 kind:data(any) addr:0x20e60b0 -data_ov000_020e6114 kind:data(any) addr:0x20e60b4 -data_ov000_020e6118 kind:data(any) addr:0x20e60b8 -data_ov000_020e611c kind:data(any) addr:0x20e60bc -data_ov000_020e6120 kind:data(any) addr:0x20e60c0 -data_ov000_020e6124 kind:data(any) addr:0x20e60c4 -@1548 kind:data(any) addr:0x20e60e8 +@1505 kind:data(any) addr:0x20e60a4 +@1504 kind:data(any) addr:0x20e60a8 +@1503 kind:data(any) addr:0x20e60ac +@1502 kind:data(any) addr:0x20e60b0 +@1501 kind:data(any) addr:0x20e60b4 +@1500 kind:data(any) addr:0x20e60b8 +@1499 kind:data(any) addr:0x20e60bc +@1498 kind:data(any) addr:0x20e60c0 +sShipTypes kind:data(any) addr:0x20e60c4 local +data_ov000_020e6144 kind:data(any) addr:0x20e6144 +@1556 kind:data(any) addr:0x20e60e8 data_ov000_020e6158 kind:data(any) addr:0x20e60f8 data_ov000_020e6174 kind:data(any) addr:0x20e6114 data_ov000_020e6178 kind:data(any) addr:0x20e6118 diff --git a/src/00_Core/Player/PlayerControl.cpp b/src/00_Core/Player/PlayerControl.cpp index d2619cbc..406fe1da 100644 --- a/src/00_Core/Player/PlayerControl.cpp +++ b/src/00_Core/Player/PlayerControl.cpp @@ -15,7 +15,7 @@ #include "Player/PlayerLinkBase.hpp" #include "Save/AdventureFlags.hpp" -static char *sShipTypes[] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"}; +static char *sShipTypes[] = {"brg", "anc", "pdl", "hul", "can", "dco", "bow", "fnl"}; ARM bool PlayerControl::func_ov00_020aeeac() { if (((data_02056be4[data_027e077c.GetUnk0()] & 1) != 0) || ((data_02056be4[data_027e077c.GetUnk0()] & 4) != 0)) { @@ -569,7 +569,10 @@ ARM void PlayerControl::func_ov00_020affec(Vec3p *param1, s32 y, s32 param3, Vec param1->z = mTouchWorld.z; } -extern u32 data_ov000_020ee198; +#pragma section sbss begin +static u32 data_ov000_020ee198; +static u32 data_ov000_020ee19c; +#pragma section sbss end ARM void PlayerControl::func_ov00_020b014c(Vec3p *param1) { if ((data_ov000_020ee198 & 1) == 0) { @@ -629,32 +632,23 @@ ARM s16 PlayerControl::GetTouchAngle() { static q20 data_ov000_020e6144 = FLOAT_TO_Q20(80.0); ARM u32 PlayerControl::func_ov00_020b034c() { - s16 temp_r2; - s64 temp_ip; - s32 temp_r2_2; - s64 temp_r3; - u64 temp_ret; - s32 var_r0; - if ((mTouchDuration >= 0) && (this->func_ov00_020af2d4(1, 1) != 0)) { - temp_ret = func_01ff992c(data_ov000_020e6144); - temp_ip = mTouchDist; - temp_r2 = mTouchDuration; - temp_r3 = temp_ret * temp_ip + 0x80000000; - var_r0 = (((temp_r3 >> 32) * (temp_r3 >> 32)) + 0x800) >> 12; - if (temp_r2 < 4) { - temp_r2_2 = (4 - temp_r2) << 0xc; - var_r0 -= (s32) (temp_r2_2 + ((u32) (temp_r2_2 >> 1) >> 0x1e)) >> 2; + u64 temp_r0_r1 = func_01ff992c(data_ov000_020e6144); // 0x03333333 + s32 temp_r3 = (temp_r0_r1 * mTouchDist + 0x80000000) >> 32; + s32 temp_r1_r0 = MUL_Q20(temp_r3, temp_r3); + if (mTouchDuration < 4) { + s32 temp_r2_2 = (4 - mTouchDuration) << 0xc; + temp_r1_r0 -= (s32) (temp_r2_2 + ((u32) (temp_r2_2 >> 1) >> 0x1e)) >> 2; } - if (var_r0 < 0) { + if (temp_r1_r0 < 0) { return 0; } - if (var_r0 > FLOAT_TO_Q20(1.0)) { - var_r0 = FLOAT_TO_Q20(1.0); + if (temp_r1_r0 > FLOAT_TO_Q20(1.0)) { + temp_r1_r0 = FLOAT_TO_Q20(1.0); } - return var_r0; + return temp_r1_r0; } - if ((mUnk_7f != 0) && (data_027e05f8.mUnk_0 & 0xF0)) { + if ((mUnk_7f != 0) && (data_027e05f8.mUnk_0 & 0xf0)) { return FLOAT_TO_Q20(1.0); } return 0; @@ -678,6 +672,7 @@ ARM s32 PlayerControl::func_ov00_020b0418() { } extern "C" void func_0202d95c(Vec3p *param1, q20 param2); +// NONMATCH: Register allocation, instruction ordering ARM bool PlayerControl::func_ov00_020b049c(Vec3p *param1, bool param2) { if (this->CheckUntouchedNow(1) && mTouchDuration >= 0 && mTouchDuration < 21) { this->ApplyTouchWorld(param1, FLOAT_TO_Q20(0.25)); @@ -743,12 +738,13 @@ ARM bool PlayerControl::func_ov00_020b0778(Vec3p *param1, u32 angle, unk32 *para return 0; } - s32 temp_r2 = SIN((u16) angle) * 0x30; - s32 temp_r3 = COS((u16) angle) * 0x30; + // NONMATCH: Register allocation + q20 temp_r2 = SIN((u16) angle) * 0x30; + q20 temp_r3 = COS((u16) angle) * 0x30; s32 temp_r4; s32 temp_r5; - s32 var_r6; - s32 var_r7; + q20 var_r6; + q20 var_r7; var_r6 = (s32) (temp_r2 + ((u32) (temp_r2 >> 11) >> 20)) >> 0xC; var_r7 = (s32) (temp_r3 + ((u32) (temp_r3 >> 11) >> 20)) >> 0xC; temp_r4 = mTouchX - sp8; @@ -809,6 +805,7 @@ ARM bool PlayerControl::func_ov00_020b0778(Vec3p *param1, u32 angle, unk32 *para } s32 var_r2 = mTouchPrevX - sp8; s32 var_r1 = mTouchPrevY - sp4; + // NONMATCH: Instruction ordering if (var_r6 > 0x18) { if (var_r2 < 0) { var_r2 = -var_r2; @@ -911,12 +908,13 @@ ARM bool PlayerControl::func_ov00_020b0b0c(s16 *pAngle, ItemFlag *pEquipId, unk3 return false; } +// NONMATCH: Instruction ordering ARM bool PlayerControl::func_ov00_020b0de8(Vec3p *param1) { - if (this->CheckTouching(1) == 0) { + if (!this->CheckTouching(1)) { return false; } - s32 x = (mTouchLastX - 0x80) * 0xAA; - s32 z = ((mTouchLastY - 0x60) * 0xAA00) / 192; + s32 z = (mTouchLastY - 96) * FLOAT_TO_Q20(10.625) / 192; + s32 x = (mTouchLastX - 128) * (FLOAT_TO_Q20(10.625) / 256); param1->x = x; param1->y = 0; param1->z = z;