From 52e0ac185a5a3570e166ddfaddb4662863ed3d63 Mon Sep 17 00:00:00 2001 From: Aetias Date: Sun, 20 Oct 2024 16:51:14 +0200 Subject: [PATCH] Decomp `ActorRupee` --- config/eur/arm9/overlays/ov000/symbols.txt | 8 ++-- config/eur/arm9/overlays/ov014/symbols.txt | 2 +- config/usa/arm9/overlays/ov000/symbols.txt | 8 ++-- config/usa/arm9/overlays/ov014/symbols.txt | 2 +- include/Item/ItemManager.hpp | 2 +- include/lib/math.h | 2 + src/00_Core/Actor/Actor.cpp | 2 +- src/00_Core/Item/ItemManager.cpp | 2 +- src/14_Land/Actor/ActorRupee.cpp | 48 +++++++++++----------- 9 files changed, 38 insertions(+), 38 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index c71ab32a..009ce35d 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -143,7 +143,7 @@ func_ov000_02079f3c kind:function(thumb,size=0x20) addr:0x2079f3c func_ov000_02079f5c kind:function(thumb,size=0xa0) addr:0x2079f5c func_ov000_02079ffc kind:function(thumb,size=0x3c) addr:0x2079ffc func_ov000_0207a038 kind:function(thumb,size=0x104) addr:0x207a038 -func_ov000_0207a13c kind:function(arm,size=0x4c) addr:0x207a13c +_ZN19Actor_UnkStruct_012C1Ev kind:function(arm,size=0x4c) addr:0x207a13c _ZN19Actor_UnkStruct_0a4C1Eiiii kind:function(thumb,size=0x1c) addr:0x207a188 func_ov000_0207a1a4 kind:function(arm,size=0x24) addr:0x207a1a4 func_ov000_0207a1c8 kind:function(arm,size=0xcc) addr:0x207a1c8 @@ -619,7 +619,7 @@ _ZN10MapManager18func_ov00_02083ef8EP5Vec3pS1_i kind:function(arm,size=0x4c) add _ZN10MapManager18func_ov00_02083f44EP5Vec3p kind:function(arm,size=0x3c) addr:0x2083f44 _ZN10MapManager16MapData_vfunc_6cEv kind:function(arm,size=0x18) addr:0x2083f80 _ZN10MapManager16MapData_vfunc_70Ev kind:function(arm,size=0x18) addr:0x2083f98 -_ZN10MapManager18func_ov00_02083fb0EiPS_i kind:function(arm,size=0x74) addr:0x2083fb0 +_ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p kind:function(arm,size=0x74) addr:0x2083fb0 _ZN10MapManager18func_ov00_02084024EiP4AABB kind:function(arm,size=0x64) addr:0x2084024 _ZN10MapManager16MapData_vfunc_54Ev kind:function(arm,size=0x18) addr:0x2084088 _ZN10MapManager18func_ov00_020840a0Ecci kind:function(arm,size=0x24) addr:0x20840a0 @@ -2147,7 +2147,7 @@ _ZN11ItemManager8GiveItemEi kind:function(thumb,size=0x59c) addr:0x20adcdc _ZN11ItemManager13GiveEquipItemEit kind:function(thumb,size=0x48) addr:0x20ae278 _ZN11ItemManager13UnequipPotionEv kind:function(thumb,size=0x14) addr:0x20ae2c0 _ZNK11ItemManager12GetMaxRupeesEv kind:function(arm,size=0xc) addr:0x20ae2d4 -_ZN11ItemManager10GiveRupeesEsb kind:function(arm,size=0x70) addr:0x20ae2e0 +_ZN11ItemManager10GiveRupeesEib kind:function(arm,size=0x70) addr:0x20ae2e0 _ZNK11ItemManager10GetNumKeysEv kind:function(arm,size=0x18) addr:0x20ae350 _ZN11ItemManager8GiveKeysEj kind:function(thumb,size=0x28) addr:0x20ae368 _ZNK11ItemManager15GetEquippedItemEv kind:function(arm,size=0x18) addr:0x20ae390 @@ -2577,7 +2577,7 @@ func_ov000_020bcc78 kind:function(arm,size=0x50) addr:0x20bcc78 func_ov000_020bccc8 kind:function(arm,size=0xf0) addr:0x20bccc8 func_ov000_020bcdb8 kind:function(arm,size=0x34) addr:0x20bcdb8 func_ov000_020bcdec kind:function(arm,size=0x5c) addr:0x20bcdec -func_ov000_020bce48 kind:function(arm,size=0x80) addr:0x20bce48 +_ZN14PlayerLinkBase18func_ov00_020bce48Ei kind:function(arm,size=0x80) addr:0x20bce48 func_ov000_020bcec8 kind:function(arm,size=0x34) addr:0x20bcec8 func_ov000_020bcefc kind:function(arm,size=0x30) addr:0x20bcefc func_ov000_020bcf2c kind:function(arm,size=0x24) addr:0x20bcf2c diff --git a/config/eur/arm9/overlays/ov014/symbols.txt b/config/eur/arm9/overlays/ov014/symbols.txt index 921e70c8..d53f225f 100644 --- a/config/eur/arm9/overlays/ov014/symbols.txt +++ b/config/eur/arm9/overlays/ov014/symbols.txt @@ -783,7 +783,7 @@ func_ov014_0213ae00 kind:function(arm,size=0x20) addr:0x213ae00 func_ov014_0213ae20 kind:function(arm,size=0x28) addr:0x213ae20 func_ov014_0213ae48 kind:function(arm,size=0x20) addr:0x213ae48 _ZN10ActorRupee6CreateEv kind:function(arm,size=0x30) addr:0x213ae68 -_ZN10ActorRupeeC2Ev kind:function(arm,size=0x34) addr:0x213ae98 +_ZN10ActorRupeeC1Ev kind:function(arm,size=0x34) addr:0x213ae98 _ZN10ActorRupee8vfunc_08Ev kind:function(arm,size=0x240) addr:0x213aecc _ZN10ActorRupee8vfunc_60Ev kind:function(arm,size=0x10) addr:0x213b10c _ZN10ActorRupee8vfunc_64Ev kind:function(arm,size=0x4) addr:0x213b11c diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 9814c92c..ba0a3d3b 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -143,7 +143,7 @@ func_ov000_02079f3c kind:function(thumb,size=0x20) addr:0x2079edc func_ov000_02079f5c kind:function(thumb,size=0xa0) addr:0x2079efc func_ov000_02079ffc kind:function(thumb,size=0x3c) addr:0x2079f9c func_ov000_0207a038 kind:function(thumb,size=0x104) addr:0x2079fd8 -func_ov000_0207a13c kind:function(arm,size=0x4c) addr:0x207a0dc +_ZN19Actor_UnkStruct_012C1Ev kind:function(arm,size=0x4c) addr:0x207a0dc _ZN19Actor_UnkStruct_0a4C1Eiiii kind:function(thumb,size=0x1c) addr:0x207a128 func_ov000_0207a1a4 kind:function(arm,size=0x24) addr:0x207a144 func_ov000_0207a1c8 kind:function(arm,size=0xcc) addr:0x207a168 @@ -619,7 +619,7 @@ _ZN10MapManager18func_ov00_02083ef8EP5Vec3pS1_i kind:function(arm,size=0x4c) add _ZN10MapManager18func_ov00_02083f44EP5Vec3p kind:function(arm,size=0x3c) addr:0x2083ee4 _ZN10MapManager16MapData_vfunc_6cEv kind:function(arm,size=0x18) addr:0x2083f20 _ZN10MapManager16MapData_vfunc_70Ev kind:function(arm,size=0x18) addr:0x2083f38 -_ZN10MapManager18func_ov00_02083fb0EiPS_i kind:function(arm,size=0x74) addr:0x2083f50 +_ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p kind:function(arm,size=0x74) addr:0x2083f50 _ZN10MapManager18func_ov00_02084024EiP4AABB kind:function(arm,size=0x64) addr:0x2083fc4 _ZN10MapManager16MapData_vfunc_54Ev kind:function(arm,size=0x18) addr:0x2084028 _ZN10MapManager18func_ov00_020840a0Ecci kind:function(arm,size=0x24) addr:0x2084040 @@ -2147,7 +2147,7 @@ _ZN11ItemManager8GiveItemEi kind:function(thumb,size=0x59c) addr:0x20adc7c _ZN11ItemManager13GiveEquipItemEit kind:function(thumb,size=0x48) addr:0x20ae218 _ZN11ItemManager13UnequipPotionEv kind:function(thumb,size=0x14) addr:0x20ae260 _ZNK11ItemManager12GetMaxRupeesEv kind:function(arm,size=0xc) addr:0x20ae274 -_ZN11ItemManager10GiveRupeesEsb kind:function(arm,size=0x70) addr:0x20ae280 +_ZN11ItemManager10GiveRupeesEib kind:function(arm,size=0x70) addr:0x20ae280 _ZNK11ItemManager10GetNumKeysEv kind:function(arm,size=0x18) addr:0x20ae2f0 _ZN11ItemManager8GiveKeysEj kind:function(thumb,size=0x28) addr:0x20ae308 _ZNK11ItemManager15GetEquippedItemEv kind:function(arm,size=0x18) addr:0x20ae330 @@ -2577,7 +2577,7 @@ func_ov000_020bcc78 kind:function(arm,size=0x50) addr:0x20bcc18 func_ov000_020bccc8 kind:function(arm,size=0xf0) addr:0x20bcc68 func_ov000_020bcdb8 kind:function(arm,size=0x34) addr:0x20bcd58 func_ov000_020bcdec kind:function(arm,size=0x5c) addr:0x20bcd8c -func_ov000_020bce48 kind:function(arm,size=0x80) addr:0x20bcde8 +_ZN14PlayerLinkBase18func_ov00_020bce48Ei kind:function(arm,size=0x80) addr:0x20bcde8 func_ov000_020bcec8 kind:function(arm,size=0x34) addr:0x20bce68 func_ov000_020bcefc kind:function(arm,size=0x30) addr:0x20bce9c func_ov000_020bcf2c kind:function(arm,size=0x24) addr:0x20bcecc diff --git a/config/usa/arm9/overlays/ov014/symbols.txt b/config/usa/arm9/overlays/ov014/symbols.txt index 405b4f55..028839a5 100644 --- a/config/usa/arm9/overlays/ov014/symbols.txt +++ b/config/usa/arm9/overlays/ov014/symbols.txt @@ -783,7 +783,7 @@ func_ov014_0213ae00 kind:function(arm,size=0x20) addr:0x213ad5c func_ov014_0213ae20 kind:function(arm,size=0x28) addr:0x213ad7c func_ov014_0213ae48 kind:function(arm,size=0x20) addr:0x213ada4 _ZN10ActorRupee6CreateEv kind:function(arm,size=0x30) addr:0x213adc4 -_ZN10ActorRupeeC2Ev kind:function(arm,size=0x34) addr:0x213adf4 +_ZN10ActorRupeeC1Ev kind:function(arm,size=0x34) addr:0x213adf4 _ZN10ActorRupee8vfunc_08Ev kind:function(arm,size=0x240) addr:0x213ae28 _ZN10ActorRupee8vfunc_60Ev kind:function(arm,size=0x10) addr:0x213b068 _ZN10ActorRupee8vfunc_64Ev kind:function(arm,size=0x4) addr:0x213b078 diff --git a/include/Item/ItemManager.hpp b/include/Item/ItemManager.hpp index 1cc75738..ae5e8cad 100644 --- a/include/Item/ItemManager.hpp +++ b/include/Item/ItemManager.hpp @@ -314,7 +314,7 @@ public: // Rupees s32 GetMaxRupees() const; - void GiveRupees(s16 amount, bool param2); + void GiveRupees(s32 amount, bool param2); // Potion void SetPotion(u32 index, Potion potion); diff --git a/include/lib/math.h b/include/lib/math.h index f11bd10e..f7204acc 100644 --- a/include/lib/math.h +++ b/include/lib/math.h @@ -9,7 +9,9 @@ typedef s32 q20; typedef s16 q4; #define INT_TO_Q20(n) ((s32) ((n) << 12)) +#define FLOAT_TO_Q21(n) ((s32) (((n) * 8192 + 1) / 4)) #define FLOAT_TO_Q20(n) ((s32) (((n) * 8192 + 1) / 2)) +#define FLOAT_TO_Q19(n) ((s32) (((n) * 8192 + 1))) #define ROUND_Q20(n) (((s32) (n) + 0x800) >> 12) #define MUL_Q20(a, b) (q20)((((s64) (a)) * ((s64) (b)) + 0x800) >> 12) diff --git a/src/00_Core/Actor/Actor.cpp b/src/00_Core/Actor/Actor.cpp index 4150b42f..3f1f2850 100644 --- a/src/00_Core/Actor/Actor.cpp +++ b/src/00_Core/Actor/Actor.cpp @@ -187,7 +187,7 @@ ARM void Actor::vfunc_1c(u16 *param1) { } } -ARM void Actor::vfunc_20(s32 param1) {} +ARM void Actor::vfunc_20(bool param1) {} ARM void Actor::SetUnk_129(bool value) { if (mUnk_128) mUnk_129 = value; diff --git a/src/00_Core/Item/ItemManager.cpp b/src/00_Core/Item/ItemManager.cpp index 66fba02a..9b4a71fb 100644 --- a/src/00_Core/Item/ItemManager.cpp +++ b/src/00_Core/Item/ItemManager.cpp @@ -839,7 +839,7 @@ ARM s32 ItemManager::GetMaxRupees() const { extern void *data_027e103c; extern "C" s32 func_ov00_020cf374(void *param1, bool param2); extern "C" void func_ov05_02104004(void *param1); -ARM void ItemManager::GiveRupees(s16 amount, bool param2) { +ARM void ItemManager::GiveRupees(s32 amount, bool param2) { s32 newRupees = mNumRupees + amount; if (newRupees > this->GetMaxRupees()) { newRupees = this->GetMaxRupees(); diff --git a/src/14_Land/Actor/ActorRupee.cpp b/src/14_Land/Actor/ActorRupee.cpp index 78a0cf07..f45f2c7a 100644 --- a/src/14_Land/Actor/ActorRupee.cpp +++ b/src/14_Land/Actor/ActorRupee.cpp @@ -5,26 +5,25 @@ #include "System/Random.hpp" extern "C" { - void func_01ff9bc4(Vec3p *a, Vec3p *b, Vec3p *sum); - void func_ov00_0207a1c8(bool *param_1, unk32 param_2, Vec3p *param_3); + void func_ov000_0207a1c8(bool *param_1, unk32 param_2, Vec3p *param_3); void func_0202bc38(unk32 param_1, Vec3p *param_2, u32 param_3, Actor_UnkStruct_012 *param_4, bool); - void func_ov05_02102c2c(u32 *param_1, int param_2, Vec3p *param_3, int param_4, int param_5, u32 param_6, int param_7, - char param_8, char param_9, char param_10); - void func_ov00_020d7ad4(u32 *param1, u32 param2); + void func_ov005_02102c2c(u32 *param_1, int param_2, Vec3p *param_3, int param_4, int param_5, u32 param_6, int param_7, + char param_8, char param_9, char param_10); + void func_ov000_020d7ad4(u32 *param1, u32 param2); } u16 GetRupeeValue(RupeeId id); char *gShipParts[8] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"}; -extern u32 *data_ov14_021589d8; -extern u32 data_ov00_020e9370[]; -extern u32 data_ov00_020eec9c[]; +extern u32 *data_ov014_021589d8; +extern u32 data_ov000_020e9370[]; +extern u32 data_ov000_020eec9c[]; extern u32 **data_027e0fe0[]; ActorType ActorRupee::gType = ActorType(ActorTypeId_Rupee, (ActorCreateFunc) ActorRupee::Create, NULL); #pragma section force_data begin -ActorType_UnkClass data_ov14_021589f4 = ActorType_UnkClass(0x3bb, 0xeeb); +ActorType_UnkClass data_ov014_021589f4 = ActorType_UnkClass(FLOAT_TO_Q21(0.4662), FLOAT_TO_Q19(0.4661)); #pragma section force_data end ActorRupee *ActorRupee::Create() { @@ -44,7 +43,7 @@ bool ActorRupee::vfunc_08() { mRupeeId = mUnk_020.mUnk_00[0]; - dVar5 = func_ov14_0213b70c(mRupeeId) ? *data_ov14_021589d8 : FLOAT_TO_Q20(0.666); + dVar5 = func_ov14_0213b70c(mRupeeId) ? *data_ov014_021589d8 : FLOAT_TO_Q20(0.666); iVar7 = (s32) dVar5 >> 1; mHitbox.pos.x = 0; @@ -105,7 +104,7 @@ void ActorRupee::Move() { s32 size; ApplyGravity(); - func_01ff9bc4(&mPos, &mVel, &mPos); // Vec3p::Add() + Vec3p_Add(&mPos, &mVel, &mPos); // Vec3p::Add() mUnk_09c.mUnk_3 = 1; size = mMaxFall = mUnk_08c.size - 1; @@ -164,7 +163,6 @@ void ActorRupee::func_ov14_0213b204(unk32 param1) { mUnk_130 = param1; } -extern "C" void _ZN11ItemManager10GiveRupeesEsb(ItemManager *implicit, u16 amount, unk32 param2); void ActorRupee::Update(bool param1) { ItemId cutsceneItemId; s32 uVar3; @@ -185,9 +183,9 @@ void ActorRupee::Update(bool param1) { func_ov14_0213b204(3); } } else { - ItemManager *pItem = gItemManager; - rupeeValue = GetRupeeValue(mRupeeId); - pItem->GiveRupees(rupeeValue, false); // giverupees + ItemManager *pItemMgr = gItemManager; + rupeeValue = GetRupeeValue(mRupeeId); + pItemMgr->GiveRupees(rupeeValue, false); uVar3 = -1; switch (mRupeeId) { @@ -197,7 +195,7 @@ void ActorRupee::Update(bool param1) { default: break; } - func_ov00_020d7ad4(data_ov00_020eec9c, uVar3); + func_ov000_020d7ad4(data_ov000_020eec9c, uVar3); Kill(); } } @@ -265,14 +263,14 @@ void ActorRupee::vfunc_14(u32 param1) { if (func_ov00_020c313c(param1)) { Update(false); } - func_ov00_0207a1c8(&mUnk_0a4.mUnk_00, param1, &mPos); + func_ov000_0207a1c8(&mUnk_0a4.mUnk_00, param1, &mPos); } void ActorRupee::vfunc_18(u32 param1) { if (func_ov00_020c313c(param1)) { Update(true); } - func_ov00_0207a1c8(&mUnk_0a4.mUnk_00, param1, &mPos); + func_ov000_0207a1c8(&mUnk_0a4.mUnk_00, param1, &mPos); } #define VFUNC20_COND (param1 ? mUnk_0a4.mUnk_01 : mUnk_0a4.mUnk_00) @@ -284,7 +282,7 @@ void ActorRupee::vfunc_20(bool param1) { void ActorRupee::func_ov14_0213b5f4(RupeeId id, unk32 param2, Vec3p *param3, bool param4) { Actor_UnkStruct_012 unk_class; - static const u32 data_ov14_02153e28[] = { + static const u32 data_ov014_02153e28[] = { // sRupeePalettes 0x9, // RupeeId_Green 0xA, // RupeeId_Blue @@ -297,11 +295,11 @@ void ActorRupee::func_ov14_0213b5f4(RupeeId id, unk32 param2, Vec3p *param3, boo }; func_ov14_0213b6a4(id, &unk_class); - func_0202bc38(param2, param3, data_ov14_02153e28[id], &unk_class, 0); + func_0202bc38(param2, param3, data_ov014_02153e28[id], &unk_class, 0); if (param4) { u32 var = func_ov14_0213b70c(id) ? 0x4cd : 0x400; - func_ov05_02102c2c(&data_ov00_020e9370[0], 0, param3, var, var, 0, 0x1f, 0, 1, 1); + func_ov005_02102c2c(&data_ov000_020e9370[0], 0, param3, var, var, 0, 0x1f, 0, 1, 1); } } @@ -311,13 +309,13 @@ void ActorRupee::func_ov14_0213b6a4(RupeeId id, Actor_UnkStruct_012 *param2) { if (func_ov14_0213b70c(id)) { param2->mUnk_08 = 2; param2->mUnk_0c = 2; - param2->mUnk_14 = data_ov14_021589f4.unk_00; - param2->mUnk_18 = data_ov14_021589f4.unk_04; + param2->mUnk_14 = data_ov014_021589f4.unk_00; + param2->mUnk_18 = data_ov014_021589f4.unk_04; } else { param2->mUnk_08 = 2; param2->mUnk_0c = 2; - param2->mUnk_14 = 0x2aa; - param2->mUnk_18 = 0xaa8; + param2->mUnk_14 = FLOAT_TO_Q21(0.333); + param2->mUnk_18 = FLOAT_TO_Q19(0.333); } }