From 40e593461fd7c0005f33b13cc6b297f4cba1ef74 Mon Sep 17 00:00:00 2001 From: Yanis42 <35189056+Yanis42@users.noreply.github.com> Date: Mon, 15 Apr 2024 23:54:15 +0200 Subject: [PATCH 01/13] initial work --- asm/ov14/Actor/ActorRupee_vfunc_08.inc | 149 +++++++++ include/Actor/Actor.hpp | 36 +- include/Actor/ActorRupee.hpp | 13 +- include/Item/Item.hpp | 1 + include/Player/PlayerLinkBase.hpp | 2 + src/00_Core/Actor/Actor.cpp | 1 + src/14_Land/Actor/ActorRupee.cpp | 436 +++++++++++++++++++++++-- 7 files changed, 607 insertions(+), 31 deletions(-) create mode 100644 asm/ov14/Actor/ActorRupee_vfunc_08.inc diff --git a/asm/ov14/Actor/ActorRupee_vfunc_08.inc b/asm/ov14/Actor/ActorRupee_vfunc_08.inc new file mode 100644 index 00000000..6a772035 --- /dev/null +++ b/asm/ov14/Actor/ActorRupee_vfunc_08.inc @@ -0,0 +1,149 @@ + + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x18 + mov r4, r0 + ldrh r0, [r4, #0x20] + str r0, [r4, #0x158] + bl _ZN10ActorRupee18func_ov14_0213b70cEj + cmp r0, #0 + ldconst r0, data_ov14_021589b4 + mov r2, #0 + ldrne r0, [r0, #0x24] + str r2, [r4, #0x7c] + ldconst r0, 0x00000aa8 + mov r5, r0, asr #0x1 + str r5, [r4, #0x80] + str r2, [r4, #0x84] + str r5, [r4, #0x88] + ldr r1, [r4, #0x7c] + add r0, r5, #0x1000 + str r1, [r4, #0x8c] + ldr r3, [r4, #0x80] + mov r1, #1 + str r3, [r4, #0x90] + ldr r3, [r4, #0x84] + str r3, [r4, #0x94] + ldr r3, [r4, #0x88] + str r3, [r4, #0x98] + str r2, [r4, #0xa8] + str r5, [r4, #0xac] + str r2, [r4, #0xb0] + str r0, [r4, #0xb4] + ldrh r0, [r4, #0x9c] + bic r0, r0, #0xb0 + strh r0, [r4, #0x9c] + strb r1, [r4, #0x9f] + ldr r0, [r4, #0x98] + sub r0, r0, #1 + str r0, [r4, #0x70] + ldr r0, [r4, #0x3c] + cmp r0, #0 + blt _0213af78 + mov r0, r4 + bl _ZN10ActorRupee18func_ov14_0213b204Ei + b _0213b0f4 +_0213af78: + ldr r0, [r4, #0x144] + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _0213b0f4 +_0213af88: + b _0213af98 // case 0 + b _0213afb4 // case 1 + b _0213b0c8 // case 2 + b _0213b0e8 // case 3 +_0213af98: + str r2, [r4, #0x60] + str r2, [r4, #0x64] + mov r0, r4 + mov r1, r2 + str r2, [r4, #0x68] + bl _ZN10ActorRupee18func_ov14_0213b204Ei + b _0213b0f4 +_0213afb4: + ldconst r0, data_027e0764 + mvn ip, #0x110 + ldr r5, [r0] + ldmib r0, {r3, r7} + umull sb, r0, r7, r5 + mla r0, r7, r3, r0 + ldconst r3, data_027e0764 + ldr r8, [r3, #0x10] + ldr r6, [r3, #0xc] + adds sl, r8, sb + ldr fp, [r3, #0x14] + mla r0, r6, r5, r0 + umull r3, lr, r7, sl + adc sb, fp, r0 + adds r0, r8, r3 + str r0, [sp, #0x14] + ldconst r0, data_027e0764 + mla lr, r7, sb, lr + str sl, [r0] + ldr r3, [sp, #0x14] + str sb, [r0, #4] + str r3, [r0] + rsb r0, r1, #0x224 + str r0, [sp, #0x10] + umull r0, r5, sb, r0 + str r0, [sp, #4] + mla r5, sb, r2, r5 + mla lr, r6, sl, lr + ldr r0, [sp, #0x10] + mov r3, r2 + mla r5, r3, r0, r5 + add r0, r5, ip + str r0, [sp] + ldr r5, [sp, #0x14] + ldconst r0, data_027e0764 + adc sb, fp, lr + umull sl, r5, r7, r5 + mla r5, r7, sb, r5 + ldr r7, [sp, #0x14] + rsb r1, r1, #0x334 + str sb, [r0, #4] + umull r0, r3, sb, r1 + mla r5, r6, r7, r5 + mov r6, sl + adds r6, r8, r6 + adc r7, fp, r5 + ldconst r5, data_027e0764 + mla r3, sb, r2, r3 + mov r0, r2 + mla r3, r0, r1, r3 + add r0, r3, #0x55 + add r0, r0, #0x500 + str r0, [sp, #8] + add r3, ip, #0x334 + stmia r5, {r6, r7} + umull r5, r6, r7, r3 + mla r6, r7, r2, r6 + mla r6, r2, r3, r6 + mov r1, r2 + add r2, r6, ip + str r2, [r4, #0x60] + ldr r2, [sp, #8] + mov r0, r4 + str r2, [r4, #0x64] + ldr r2, [sp] + str sl, [sp, #0xc] + str r2, [r4, #0x68] + bl _ZN10ActorRupee18func_ov14_0213b204Ei + b _0213b0f4 +_0213b0c8: + str r2, [r4, #0x60] + mov r0, #0x800 + str r0, [r4, #0x64] + mov r0, r4 + mov r1, r2 + str r2, [r4, #0x68] + bl _ZN10ActorRupee18func_ov14_0213b204Ei + b _0213b0f4 +_0213b0e8: + mov r0, r4 + mov r1, #5 + bl _ZN10ActorRupee18func_ov14_0213b204Ei +_0213b0f4: + mov r0, #1 + add sp, sp, #0x18 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp index c5b71193..78151cc0 100644 --- a/include/Actor/Actor.hpp +++ b/include/Actor/Actor.hpp @@ -11,8 +11,26 @@ #include "Physics/Transform.hpp" #include "Player/EquipBoomerang.hpp" +class Actor_UnkStruct_012 { + public: + /* 00 */ u16 mUnk_00; + /* 02 */ u8 mUnk_02; + /* 03 */ u8 mUnk_03; + /* 04 */ u32 mUnk_04; + /* 08 */ u32 mUnk_08; + /* 0c */ u32 mUnk_0c; + /* 10 */ u8 mUnk_10; + /* 11 */ u8 mUnk_11; + /* 12 */ u8 mUnk_12[0x2]; + /* 14 */ u32 mUnk_14; + /* 18 */ u32 mUnk_18; + /* 1c */ + + Actor_UnkStruct_012(); +}; + struct Actor_UnkStruct_020 { - /* 00 */ unk16 mUnk_00[4]; + /* 00 */ u16 mUnk_00[4]; /* 08 */ unk8 mUnk_08[2]; /* 0a */ unk8 mUnk_0a[2]; /* 0c */ unk8 mUnk_0c; @@ -24,7 +42,7 @@ struct Actor_UnkStruct_020 { }; struct Actor_UnkStruct_09c { - /* 0 */ unk16 mUnk_0; + /* 0 */ u16 mUnk_0; /* 2 */ unk8 mUnk_2; /* 3 */ unk8 mUnk_3; /* 4 */ unk32 mUnk_4; @@ -36,8 +54,8 @@ struct Actor_UnkStruct_09c { struct Actor_UnkStruct_0a4 { /* 00 */ bool mUnk_00; /* 01 */ bool mUnk_01; - /* 01 */ bool mUnk_02; - /* 01 */ bool mUnk_03; + /* 02 */ bool mUnk_02; + /* 03 */ bool mUnk_03; /* 04 */ Vec3p mUnk_04; /* 10 */ s32 mUnk_10; /* 14 */ @@ -58,9 +76,15 @@ enum PlayerCollide_ { PlayerCollide_Shield = 0x4, PlayerCollide_Gongoron = 0x8, PlayerCollide_Hammer = 0x10, + + PlayerCollide_PickupFlags = PlayerCollide_Hammer | PlayerCollide_Gongoron | PlayerCollide_Sword | PlayerCollide_Player, }; -class Actor { +#include "System/SysNew.hpp" + +#include "Item/Item.hpp" + +class Actor : public SysObject { public: /* 000 (vtable) */ /* 004 */ unk32 mType; @@ -103,7 +127,7 @@ public: /* 109 */ unk8 mUnk_109; /* 10a */ unk8 mUnk_10a[0x6]; /* 110 */ unk8 mUnk_110; - /* 111 */ unk8 mUnk_111; + /* 111 */ bool mUnk_111; /* 112 */ unk8 mUnk_112; /* 113 */ unk8 mUnk_113; /* 114 */ unk8 mUnk_114; diff --git a/include/Actor/ActorRupee.hpp b/include/Actor/ActorRupee.hpp index 93c3082c..0944bc03 100644 --- a/include/Actor/ActorRupee.hpp +++ b/include/Actor/ActorRupee.hpp @@ -7,7 +7,8 @@ #include "System/Resource.hpp" #include "Actor/Actor.hpp" #include "Actor/ActorType.hpp" -#include "Item/Item.hpp" +#include "Item/ItemManager.hpp" +#include "Player/PlayerLinkBase.hpp" typedef u32 RupeeId; enum RupeeId_ { @@ -29,15 +30,15 @@ public: /* 000 (base) */ /* 158 */ RupeeId mRupeeId; - /* 15c */ unk16 mUnk_15c; + /* 15c */ s16 mUnk_15c; /* 15e */ unk16 mUnk_15e; /* 160 */ /* 00 */ virtual ~ActorRupee() override; /* 08 */ virtual bool vfunc_08() override; - /* 14 */ virtual void vfunc_14(u32 param1) override; - /* 18 */ virtual void vfunc_18(u32 param1) override; - /* 20 */ virtual void vfunc_20(s32 param1) override; + /* 14 */ virtual void vfunc_14(bool param1) override; + /* 18 */ virtual void vfunc_18(bool param1) override; + /* 20 */ virtual void vfunc_20(bool param1) override; /* 60 */ virtual bool vfunc_60() override; /* 64 */ virtual void vfunc_64() override; /* b4 */ @@ -49,6 +50,6 @@ public: void func_ov14_0213b204(unk32 param1); void Update(bool param1); static void func_ov14_0213b5f4(RupeeId id, unk32 param2, Vec3p *param3, bool param4); - static void func_ov14_0213b6a4(RupeeId id, void *param2); + static void func_ov14_0213b6a4(RupeeId id, Actor_UnkStruct_012 *param2); static bool func_ov14_0213b70c(RupeeId id); }; diff --git a/include/Item/Item.hpp b/include/Item/Item.hpp index a2b02076..5aab40dc 100644 --- a/include/Item/Item.hpp +++ b/include/Item/Item.hpp @@ -50,6 +50,7 @@ enum ItemFlag_ { typedef s32 ItemId; enum ItemId_ { + /* -1 */ ItemId_None = -1, /* 0x01 */ ItemId_SmallKey = 1, /* 0x02 */ ItemId_GreenRupee = 2, /* 0x03 */ ItemId_OshusSword = 3, diff --git a/include/Player/PlayerLinkBase.hpp b/include/Player/PlayerLinkBase.hpp index e708f235..f8b291cf 100644 --- a/include/Player/PlayerLinkBase.hpp +++ b/include/Player/PlayerLinkBase.hpp @@ -73,4 +73,6 @@ class PlayerLinkBase: public PlayerBase { /* 80 */ virtual void SetUnk_5e(); /* 84 */ virtual void ResetUnk_5e(); /* 88 */ + public: + bool PlayItemCutscene(ItemId cutsceneItemId); }; diff --git a/src/00_Core/Actor/Actor.cpp b/src/00_Core/Actor/Actor.cpp index d0b2d086..719cad35 100644 --- a/src/00_Core/Actor/Actor.cpp +++ b/src/00_Core/Actor/Actor.cpp @@ -105,5 +105,6 @@ void Actor::vfunc_b0() {} void Actor::GetLinkPos(Vec3p *result) {} void Actor::GetLinkDummyPos(Vec3p *result) {} Actor_UnkStruct_09c::Actor_UnkStruct_09c() {} +Actor_UnkStruct_012::Actor_UnkStruct_012() {} #endif diff --git a/src/14_Land/Actor/ActorRupee.cpp b/src/14_Land/Actor/ActorRupee.cpp index 20d98de4..0fb129d7 100644 --- a/src/14_Land/Actor/ActorRupee.cpp +++ b/src/14_Land/Actor/ActorRupee.cpp @@ -1,25 +1,423 @@ #include "Actor/ActorRupee.hpp" - -#ifdef STUBS +#include "Item/ItemManager.hpp" Resource ActorRupee::gResource; ActorType ActorRupee::gType; -ActorRupee* ActorRupee::Create() {} -ActorRupee::ActorRupee() {} -bool ActorRupee::vfunc_08() {} -bool ActorRupee::vfunc_60() {} -void ActorRupee::vfunc_64() {} -void ActorRupee::Move() {} -ItemId ActorRupee::GetRupeeCutsceneItemId() {} -void ActorRupee::func_ov14_0213b204(unk32 param1) {} -void ActorRupee::Update(bool param1) {} -void ActorRupee::vfunc_14(u32 param1) {} -void ActorRupee::vfunc_18(u32 param1) {} -void ActorRupee::vfunc_20(s32 param1) {} -void ActorRupee::func_ov14_0213b5f4(RupeeId id, unk32 param2, Vec3p *param3, bool param4) {} -void ActorRupee::func_ov14_0213b6a4(RupeeId id, void *param2) {} -bool ActorRupee::func_ov14_0213b70c(RupeeId id) {} -ActorRupee::~ActorRupee() {} +extern u32 **data_027e0fe0[]; +extern u32 data_ov14_021589b4[]; -#endif + +u32 func_01fffd04(void*, u32); +void func_01ff9bc4(Vec3p *a, Vec3p *b, Vec3p *sum); + +extern u32 data_ov00_020e9370[]; +bool func_ov00_020c313c(); +void func_ov00_0207a1c8(bool *param_1, bool 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_ov00_02083fb0(u32* param1, void* param2, Vec3p* param3); +u16 GetRupeeValue(RupeeId id); +extern u32 data_ov00_020eec9c[]; +extern PlayerLinkBase *data_027e0fc8; // gPlayerLink +extern void *data_027e0e60; + +// void func_ov05_02102c2c(int param_1, int param_2, Vec3p *param_3); +// void func_0202bc38(unk32 param_1, Vec3p *param_2, u32 param_3, Actor_UnkStruct_012 *param_4, s16 param_5); +// extern u32 sRupeePalettes[]; + +ActorRupee* ActorRupee::Create() { + ActorRupee* newRupee = new(*data_027e0fe0[0], 4) ActorRupee(); + return newRupee; +} + +// match? +ActorRupee::ActorRupee() { + mRupeeId = 8; + mUnk_15c = 0; +} + +// https://decomp.me/scratch/1qjCc +extern "C" void _ZN10ActorRupee18func_ov14_0213b204Ei(); +bool NONMATCH(ActorRupee::vfunc_08)() { + #ifndef NONMATCHING + #include "../../../asm/ov14/Actor/ActorRupee_vfunc_08.inc" + #else + u32 *puVar2; // undefined + u32 uVar4; + u32 dVar5; + u32 uVar6; + u32 iVar7; + u32 uVar8; + u32 uVar9; + u32 uVar10; + u32 uVar11; + u32 iVar12; + + mRupeeId = mUnk_020.mUnk_00[0]; + + dVar5 = func_ov14_0213b70c(mRupeeId) ? data_ov14_021589b4[9] : FLOAT_TO_Q20(0.666); + iVar7 = (s32)dVar5 >> 1; + + mHitbox.pos.x = 0; + mHitbox.pos.y = iVar7; + mHitbox.pos.z = 0; + mHitbox.size = iVar7; + mUnk_08c.pos = mHitbox.pos; + mUnk_08c.size = mHitbox.size; + mUnk_0a4.mUnk_04.x = 0; + mUnk_0a4.mUnk_04.y = iVar7; + mUnk_0a4.mUnk_04.z = 0; + mUnk_0a4.mUnk_10 = iVar7 + FLOAT_TO_Q20(1.0); + mUnk_09c.mUnk_0 &= 0xFFFFFF4F; + mUnk_09c.mUnk_3 = 1; + mMaxFall = mUnk_08c.size - 1; + + puVar2 = data_027e0764; + + if (mUnk_03c >= 0) { + func_ov14_0213b204(1); + } else { + switch(mUnk_144) { + case 0: + mVel.x = 0; + mVel.y = 0; + mVel.z = 0; + func_ov14_0213b204(0); + break; + case 1: + uVar8 = PTR_DWORD_overlay_d_14__0213b108[8]; + uVar4 = PTR_DWORD_overlay_d_14__0213b108[uVar8]; + + uVar9 = PTR_DWORD_overlay_d_14__0213b108[16]; + iVar7 = PTR_DWORD_overlay_d_14__0213b108[12]; + uVar11 = uVar9 + uVar4; + + iVar12 = PTR_DWORD_overlay_d_14__0213b108[20]; + uVar6 = (u64)uVar11 * (u64)uVar8; + uVar10 = ( + iVar12 + + (iVar7 * PTR_DWORD_overlay_d_14__0213b108[0]) + + (uVar8 * PTR_DWORD_overlay_d_14__0213b108[4]) + + ((uVar4) >> 0x20) + // + CARRY4(uVar9, uVar4) + ); + + uVar4 = uVar9 + uVar6; + PTR_DWORD_overlay_d_14__0213b108[0] = uVar11; + puVar2[4] = uVar10; + + puVar2[0] = uVar4; + uVar6 = ( + iVar12 + + (iVar7 * uVar11) + + (uVar8 * uVar10) + + ((u64)uVar11 * (FP_1(uVar8) >> 0x20)) + // + CARRY4(uVar9, uVar6) + ); + uVar11 = uVar4 * uVar8; + + PTR_DWORD_overlay_d_14__0213b108[4] = uVar6; + puVar2 = PTR_DWORD_overlay_d_14__0213b108; + uVar4 = ( + iVar12 + + (iVar7 * uVar4) + + (uVar8 * uVar6) + + ((u64)uVar4 * (FP_1(uVar8) >> 0x20)) + // + CARRY4(uVar9, uVar11) + ); + + PTR_DWORD_overlay_d_14__0213b108[0] = uVar9 + uVar11; + puVar2[4] = uVar4; + + mVel.x = (s32)((u64)uVar4 * FLOAT_TO_Q20(0.1335) >> 0x20) - FLOAT_TO_Q20(0.0666); + mVel.y = (s32)((u64)uVar6 * FLOAT_TO_Q20(0.2) >> 0x20) + FLOAT_TO_Q20(0.3333); + mVel.z = (s32)((u64)uVar10 * FLOAT_TO_Q20(0.1335) >> 0x20) - FLOAT_TO_Q20(0.0666); + func_ov14_0213b204(0); + break; + case 2: + mVel.x = 0; + mVel.y = FLOAT_TO_Q20(0.5); + mVel.z = 0; + func_ov14_0213b204(0); + break; + case 3: + func_ov14_0213b204(5); + break; + } + } + + return true; + #endif +} + +bool ActorRupee::vfunc_60() { + return func_ov14_0213b70c(mRupeeId); +} + +void ActorRupee::vfunc_64() {} + +void ActorRupee::Move() { + s32 size; + + ApplyGravity(); + func_01ff9bc4(&mPos, &mVel, &mPos); // Vec3p::Add() + mUnk_09c.mUnk_3 = 1; + size = mMaxFall = mUnk_08c.size - 1; + + size += mUnk_018; + if (size < mPos.y) { + mUnk_09c.mUnk_0 = 0x49; + } else { + mUnk_09c.mUnk_0 = 0xcb; + } + + if (func_01fffd04(this, 0)) { + mVel.x = 0; + mVel.z = 0; + } +} + +ItemId ActorRupee::GetRupeeCutsceneItemId() { + switch (mRupeeId) { + case RupeeId_Green: + return ItemId_None; + + case RupeeId_Blue: + return ItemId_None; + + case RupeeId_Red: + return ItemId_None; + + case RupeeId_BigGreen: + return ItemId_BigGreenRupee; + + case RupeeId_BigRed: + return ItemId_BigRedRupee; + + case RupeeId_Gold: + return ItemId_GoldRupee; + + case RupeeId_Rupoor10: + return ItemId_Rupoor10; + + case RupeeId_Rupoor50: + return ItemId_Rupoor50; + + default: + break; + } + + return ItemId_None; +} + +void ActorRupee::func_ov14_0213b204(unk32 param1) { + switch (param1) { + case 0: + mVisible = true; + break; + case 1: + case 2: + case 3: + case 4: + case 5: + mVel.x = 0; + mVel.y = 0; + mVel.z = 0; + break; + } + + mActiveFrames = 0; + mUnk_130 = param1; +} + +void ActorRupee::Update(bool param1) { + ItemId cutsceneItemId; + s32 uVar3; + Vec3p local_1c; + u32 local_20; + u16 rupeeValue; + + mPrevPos = mPos; + IncreaseActiveFrames(); + + if ((mUnk_130 != 3) && (++mUnk_15c >= 6) && CollidesWithPlayer(PlayerCollide_PickupFlags)) { + cutsceneItemId = GetRupeeCutsceneItemId(); + + if (cutsceneItemId >= 0) { + if (data_027e0fc8->PlayItemCutscene(cutsceneItemId)) { + Kill(); + } else { + func_ov14_0213b204(3); + } + } else { + ItemManager* pItem = gItemManager; + rupeeValue = GetRupeeValue(mRupeeId); + pItem->GiveRupees(rupeeValue, false); + uVar3 = -1; + + switch (mRupeeId) { + case RupeeId_Green: + uVar3 = 0xfa; + break; + case RupeeId_Blue: + uVar3 = 0xfb; + break; + case RupeeId_Red: + uVar3 = 0xfc; + break; + default: + break; + } + + func_ov00_020d7ad4(data_ov00_020eec9c, uVar3); + Kill(); + } + } + + if (!(mUnk_130 != 0 && mUnk_130 != 1 && mUnk_130 != 2)) { + if (func_ov00_020c2c0c()) { + func_ov14_0213b204(4); + } else if (func_ov00_020c2d54()) { + func_ov14_0213b204(5); + } + } + + switch (mUnk_130) { + case 0: + Move(); + if (mUnk_111) { + local_1c = mPos; + func_ov00_02083fb0(&local_20, data_027e0e60, &local_1c); + if (((local_20 >> 5) & 3) == 2) { + Kill(); + } else { + func_ov14_0213b204(1); + } + } + break; + case 3: + PlayerLinkBase* pLink = data_027e0fc8; + if (pLink->PlayItemCutscene(GetRupeeCutsceneItemId())) { + Kill(); + } + break; + case 1: + if (param1) { + mActiveFrames = 0; + } + if ((mUnk_03c < 0) && (mActiveFrames >= 180)) { + func_ov14_0213b204(2); + } + break; + case 2: + if (param1) { + mActiveFrames = 0; + } + if (mActiveFrames >= 60) { + Kill(); + } + break; + case 4: + if (!func_ov00_020c2c70()) { + func_ov14_0213b204(1); + } + break; + case 5: + if (!func_ov00_020c2de4()) { + func_ov14_0213b204(1); + } + break; + default: + break; + } + + KillInBounds(); +} + +void ActorRupee::vfunc_14(bool param1) { + if (func_ov00_020c313c(param1)) { + Update(false); + } + func_ov00_0207a1c8(&mUnk_0a4.mUnk_00, param1, &mPos); +} + +void ActorRupee::vfunc_18(bool param1) { + if (func_ov00_020c313c(param1)) { + Update(true); + } + func_ov00_0207a1c8(&mUnk_0a4.mUnk_00, param1, &mPos); +} + +void ActorRupee::vfunc_20(bool param1) { + if (param1 ? mUnk_0a4.mUnk_01 : mUnk_0a4.mUnk_00) { + if (mUnk_130 == 2 && mActiveFrames % 8 < 4) { + return; + } + + if (param1 ? mUnk_0a4.mUnk_01 : mUnk_0a4.mUnk_00) { + func_ov14_0213b5f4(mRupeeId, param1, &mPos, true); + } + } +} + +void ActorRupee::func_ov14_0213b5f4(RupeeId id, unk32 param2, Vec3p *param3, bool param4) { + Actor_UnkStruct_012 unk_class; + static u32 data_ov14_02153e28[] = { // sRupeePalettes + 0x9, // RupeeId_Green + 0xA, // RupeeId_Blue + 0x8, // RupeeId_Red + 0x9, // RupeeId_BigGreen + 0x8, // RupeeId_BigRed + 0xB, // RupeeId_Gold + 0xC, // RupeeId_Rupoor10 + 0xC, // RupeeId_Rupoor50 + }; + + func_ov14_0213b6a4(id, &unk_class); + func_0202bc38(param2, param3, data_ov14_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); + } +} + +void ActorRupee::func_ov14_0213b6a4(RupeeId id, Actor_UnkStruct_012 *param2) { + param2->mUnk_04 = 3; + + if (func_ov14_0213b70c(id)) { + param2->mUnk_08 = 2; + param2->mUnk_0c = 2; + param2->mUnk_14 = data_ov14_021589b4[0x8]; + param2->mUnk_18 = data_ov14_021589b4[0x9]; + } else { + param2->mUnk_08 = 2; + param2->mUnk_0c = 2; + param2->mUnk_14 = 0x2aa; + param2->mUnk_18 = 0xaa8; + } +} + +bool ActorRupee::func_ov14_0213b70c(RupeeId id) { + switch (id) { + case RupeeId_BigGreen: + case RupeeId_BigRed: + case RupeeId_Gold: + case RupeeId_Rupoor50: + return true; + + default: + break; + } + + return false; +} + +ActorRupee::~ActorRupee() {} From 2577871c94a173768503c15eade891269acdd348 Mon Sep 17 00:00:00 2001 From: Yanis42 <35189056+Yanis42@users.noreply.github.com> Date: Tue, 16 Apr 2024 00:58:58 +0200 Subject: [PATCH 02/13] improved vfunc_20 a bit --- src/14_Land/Actor/ActorRupee.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/14_Land/Actor/ActorRupee.cpp b/src/14_Land/Actor/ActorRupee.cpp index 0fb129d7..60fac224 100644 --- a/src/14_Land/Actor/ActorRupee.cpp +++ b/src/14_Land/Actor/ActorRupee.cpp @@ -355,15 +355,10 @@ void ActorRupee::vfunc_18(bool param1) { func_ov00_0207a1c8(&mUnk_0a4.mUnk_00, param1, &mPos); } +#define VFUNC20_COND (param1 ? mUnk_0a4.mUnk_01 : mUnk_0a4.mUnk_00) void ActorRupee::vfunc_20(bool param1) { - if (param1 ? mUnk_0a4.mUnk_01 : mUnk_0a4.mUnk_00) { - if (mUnk_130 == 2 && mActiveFrames % 8 < 4) { - return; - } - - if (param1 ? mUnk_0a4.mUnk_01 : mUnk_0a4.mUnk_00) { - func_ov14_0213b5f4(mRupeeId, param1, &mPos, true); - } + if (VFUNC20_COND && !(mUnk_130 == 2 && mActiveFrames % 8 < 4) && VFUNC20_COND) { + func_ov14_0213b5f4(mRupeeId, param1, &mPos, true); } } From e38046cd56ed543aa741a0e26cf055739b63eefc Mon Sep 17 00:00:00 2001 From: Yanis42 <35189056+Yanis42@users.noreply.github.com> Date: Wed, 17 Apr 2024 00:39:42 +0200 Subject: [PATCH 03/13] fix some build issues --- Makefile | 2 +- asm/ov14/Actor/ActorRupee_vfunc_08.inc | 58 +++++++++++++------------- src/14_Land/Actor/ActorRupee.cpp | 50 ++++++++++++++-------- tools/lcf.py | 1 - 4 files changed, 62 insertions(+), 49 deletions(-) diff --git a/Makefile b/Makefile index 90534997..3b9a0ef2 100644 --- a/Makefile +++ b/Makefile @@ -47,7 +47,7 @@ LCF_FILE := $(ROOT)/$(BUILD_DIR)/arm9_linker_script.lcf OBJS_FILE := $(ROOT)/$(BUILD_DIR)/arm9_objects.txt ASM_FLAGS := -proc arm5te -d $(REGION) -i asm -msgstyle gcc -CC_FLAGS := -proc arm946e -interworking -O4,p -enum int -i include -i- -i libs/c/include -nolink -d $(REGION) -char signed -lang=c++ -sym on -msgstyle gcc +CC_FLAGS := -proc arm946e -interworking -O4,p -enum int -i include -i- -i libs/c/include -nolink -d $(REGION) -char signed -lang=c++ -sym on -msgstyle gcc -RTTI off LD_FLAGS := -proc arm946e -nostdlib -interworking -nodead -m Entry -map closure,unused -o main.bin -msgstyle gcc ifeq ($(NONMATCHING),1) diff --git a/asm/ov14/Actor/ActorRupee_vfunc_08.inc b/asm/ov14/Actor/ActorRupee_vfunc_08.inc index 6a772035..d54665af 100644 --- a/asm/ov14/Actor/ActorRupee_vfunc_08.inc +++ b/asm/ov14/Actor/ActorRupee_vfunc_08.inc @@ -1,16 +1,16 @@ - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, r10, r11, lr} sub sp, sp, #0x18 mov r4, r0 ldrh r0, [r4, #0x20] str r0, [r4, #0x158] bl _ZN10ActorRupee18func_ov14_0213b70cEj cmp r0, #0 - ldconst r0, data_ov14_021589b4 + lda r0, data_ov14_021589b4 mov r2, #0 ldrne r0, [r0, #0x24] str r2, [r4, #0x7c] - ldconst r0, 0x00000aa8 + ldconst r0, #0x00000aa8 mov r5, r0, asr #0x1 str r5, [r4, #0x80] str r2, [r4, #0x84] @@ -61,54 +61,54 @@ _0213af98: bl _ZN10ActorRupee18func_ov14_0213b204Ei b _0213b0f4 _0213afb4: - ldconst r0, data_027e0764 + lda r0, data_027e0764 mvn ip, #0x110 ldr r5, [r0] ldmib r0, {r3, r7} - umull sb, r0, r7, r5 + umull r9, r0, r7, r5 mla r0, r7, r3, r0 - ldconst r3, data_027e0764 + lda r3, data_027e0764 ldr r8, [r3, #0x10] ldr r6, [r3, #0xc] - adds sl, r8, sb - ldr fp, [r3, #0x14] + adds r10, r8, r9 + ldr r11, [r3, #0x14] mla r0, r6, r5, r0 - umull r3, lr, r7, sl - adc sb, fp, r0 + umull r3, lr, r7, r10 + adc r9, r11, r0 adds r0, r8, r3 str r0, [sp, #0x14] - ldconst r0, data_027e0764 - mla lr, r7, sb, lr - str sl, [r0] + lda r0, data_027e0764 + mla lr, r7, r9, lr + str r10, [r0] ldr r3, [sp, #0x14] - str sb, [r0, #4] + str r9, [r0, #4] str r3, [r0] rsb r0, r1, #0x224 str r0, [sp, #0x10] - umull r0, r5, sb, r0 + umull r0, r5, r9, r0 str r0, [sp, #4] - mla r5, sb, r2, r5 - mla lr, r6, sl, lr + mla r5, r9, r2, r5 + mla lr, r6, r10, lr ldr r0, [sp, #0x10] mov r3, r2 mla r5, r3, r0, r5 add r0, r5, ip str r0, [sp] ldr r5, [sp, #0x14] - ldconst r0, data_027e0764 - adc sb, fp, lr - umull sl, r5, r7, r5 - mla r5, r7, sb, r5 + lda r0, data_027e0764 + adc r9, r11, lr + umull r10, r5, r7, r5 + mla r5, r7, r9, r5 ldr r7, [sp, #0x14] rsb r1, r1, #0x334 - str sb, [r0, #4] - umull r0, r3, sb, r1 + str r9, [r0, #4] + umull r0, r3, r9, r1 mla r5, r6, r7, r5 - mov r6, sl + mov r6, r10 adds r6, r8, r6 - adc r7, fp, r5 - ldconst r5, data_027e0764 - mla r3, sb, r2, r3 + adc r7, r11, r5 + lda r5, data_027e0764 + mla r3, r9, r2, r3 mov r0, r2 mla r3, r0, r1, r3 add r0, r3, #0x55 @@ -126,7 +126,7 @@ _0213afb4: mov r0, r4 str r2, [r4, #0x64] ldr r2, [sp] - str sl, [sp, #0xc] + str r10, [sp, #0xc] str r2, [r4, #0x68] bl _ZN10ActorRupee18func_ov14_0213b204Ei b _0213b0f4 @@ -146,4 +146,4 @@ _0213b0e8: _0213b0f4: mov r0, #1 add sp, sp, #0x18 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldmia sp!, {r3, r4, r5, r6, r7, r8, r9, r10, r11, pc} diff --git a/src/14_Land/Actor/ActorRupee.cpp b/src/14_Land/Actor/ActorRupee.cpp index 60fac224..89537646 100644 --- a/src/14_Land/Actor/ActorRupee.cpp +++ b/src/14_Land/Actor/ActorRupee.cpp @@ -4,34 +4,40 @@ Resource ActorRupee::gResource; ActorType ActorRupee::gType; +static u32 data_ov14_021589d4 = 0x00000000; + +static u32 data_ov14_021589d8[] = { + 0x00000000, + 0x00000000, + 0x00000000, +}; + +static char data_ov14_021589b4[] = "anc"; + extern u32 **data_027e0fe0[]; -extern u32 data_ov14_021589b4[]; -u32 func_01fffd04(void*, u32); -void func_01ff9bc4(Vec3p *a, Vec3p *b, Vec3p *sum); +extern "C" void func_01ff9bc4(Vec3p *a, Vec3p *b, Vec3p *sum); +extern "C" u32 func_01fffd04(void*, u32); extern u32 data_ov00_020e9370[]; -bool func_ov00_020c313c(); -void func_ov00_0207a1c8(bool *param_1, bool param_2, Vec3p *param_3); +extern "C" bool func_ov00_020c313c(); +extern "C" void func_ov00_0207a1c8(bool *param_1, bool 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, +extern "C" void func_0202bc38(unk32 param_1, Vec3p *param_2, u32 param_3, Actor_UnkStruct_012 *param_4, bool); +extern "C" 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_ov00_02083fb0(u32* param1, void* param2, Vec3p* param3); -u16 GetRupeeValue(RupeeId id); +extern "C" void func_ov00_020d7ad4(u32* param1, u32 param2); +extern "C" void func_ov00_02083fb0(u32* param1, void* param2, Vec3p* param3); +extern "C" u16 func_ov00_020c5a24(RupeeId id); // GetRupeeValue + extern u32 data_ov00_020eec9c[]; extern PlayerLinkBase *data_027e0fc8; // gPlayerLink extern void *data_027e0e60; -// void func_ov05_02102c2c(int param_1, int param_2, Vec3p *param_3); -// void func_0202bc38(unk32 param_1, Vec3p *param_2, u32 param_3, Actor_UnkStruct_012 *param_4, s16 param_5); -// extern u32 sRupeePalettes[]; - ActorRupee* ActorRupee::Create() { ActorRupee* newRupee = new(*data_027e0fe0[0], 4) ActorRupee(); return newRupee; @@ -45,6 +51,13 @@ ActorRupee::ActorRupee() { // https://decomp.me/scratch/1qjCc extern "C" void _ZN10ActorRupee18func_ov14_0213b204Ei(); +extern "C" void _ZN10ActorRupee18func_ov14_0213b70cEj(); +extern "C" void _ZN10ActorRupee8vfunc_14Ei(); +extern "C" void _ZN10ActorRupee8vfunc_18Ej(); +extern "C" void _ZN10ActorRupee8vfunc_20Ei(); +extern "C" void _ZN10ActorRupee8vfunc_60Ev(); +extern "C" void _ZN10ActorRupee8vfunc_64Ev(); +extern "C" u32 data_027e0764[]; bool NONMATCH(ActorRupee::vfunc_08)() { #ifndef NONMATCHING #include "../../../asm/ov14/Actor/ActorRupee_vfunc_08.inc" @@ -62,7 +75,7 @@ bool NONMATCH(ActorRupee::vfunc_08)() { mRupeeId = mUnk_020.mUnk_00[0]; - dVar5 = func_ov14_0213b70c(mRupeeId) ? data_ov14_021589b4[9] : FLOAT_TO_Q20(0.666); + dVar5 = func_ov14_0213b70c(mRupeeId) ? data_ov14_021589d8[0] : FLOAT_TO_Q20(0.666); iVar7 = (s32)dVar5 >> 1; mHitbox.pos.x = 0; @@ -237,6 +250,7 @@ void ActorRupee::func_ov14_0213b204(unk32 param1) { mUnk_130 = param1; } +extern "C" void _ZN11ItemManager10GiveRupeesEjj(); void ActorRupee::Update(bool param1) { ItemId cutsceneItemId; s32 uVar3; @@ -258,7 +272,7 @@ void ActorRupee::Update(bool param1) { } } else { ItemManager* pItem = gItemManager; - rupeeValue = GetRupeeValue(mRupeeId); + rupeeValue = func_ov00_020c5a24(mRupeeId); pItem->GiveRupees(rupeeValue, false); uVar3 = -1; @@ -390,8 +404,8 @@ 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_021589b4[0x8]; - param2->mUnk_18 = data_ov14_021589b4[0x9]; + param2->mUnk_14 = data_ov14_021589d4; // data_ov14_021589b4[8] + param2->mUnk_18 = data_ov14_021589d8[0]; // data_ov14_021589b4[9] } else { param2->mUnk_08 = 2; param2->mUnk_0c = 2; diff --git a/tools/lcf.py b/tools/lcf.py index 15ab4aeb..349e9c17 100644 --- a/tools/lcf.py +++ b/tools/lcf.py @@ -113,7 +113,6 @@ ov14 = Overlay(name='ov14', after=[ov08, ov09, ov10, ov13], objects=[ 'asm/ov14/ov14_0211f640.s', 'src/14_Land/Actor/ActorRupee.cpp', - 'asm/ov14/Actor/ActorRupee.s', 'asm/ov14/ov14_0213b778.s', ]) From 808cd5bf0f73c3f785880b3f2950bde5c3d6f7c2 Mon Sep 17 00:00:00 2001 From: Yanis42 <35189056+Yanis42@users.noreply.github.com> Date: Wed, 17 Apr 2024 13:59:41 +0200 Subject: [PATCH 04/13] fixed build issues and function non-matchings --- asm/ov14/Actor/ActorRupee.inc | 73 --- asm/ov14/Actor/ActorRupee.s | 976 ------------------------------ include/Actor/Actor.hpp | 28 +- include/Actor/ActorRupee.hpp | 2 +- include/Player/PlayerLinkBase.hpp | 2 +- src/14_Land/Actor/ActorRupee.cpp | 23 +- 6 files changed, 28 insertions(+), 1076 deletions(-) delete mode 100644 asm/ov14/Actor/ActorRupee.inc delete mode 100644 asm/ov14/Actor/ActorRupee.s diff --git a/asm/ov14/Actor/ActorRupee.inc b/asm/ov14/Actor/ActorRupee.inc deleted file mode 100644 index b72e0342..00000000 --- a/asm/ov14/Actor/ActorRupee.inc +++ /dev/null @@ -1,73 +0,0 @@ -#pragma once -.extern _ZN11ItemManager10GiveRupeesEjj -.extern _ZN5Actor10SetUnk_11bEv -.extern _ZN5Actor11SetVelocityEP5Vec3p -.extern _ZN5Actor12ApplyGravityEv -.extern _ZN5Actor12CollidesWithEPKS_ -.extern _ZN5Actor12GetOffsetPosEP5Vec3p -.extern _ZN5Actor12KillInBoundsEv -.extern _ZN5Actor12SetTransformEP9Transform -.extern _ZN5Actor15IsHitboxTouchedEb -.extern _ZN5Actor15TrySetTransformEP9Transform -.extern _ZN5Actor16CollidesWithLinkEv -.extern _ZN5Actor18CollidesWithPlayerEj -.extern _ZN5Actor18func_ov00_020c2c0cEv -.extern _ZN5Actor18func_ov00_020c2c70Ev -.extern _ZN5Actor18func_ov00_020c2d54Ev -.extern _ZN5Actor18func_ov00_020c2de4Ev -.extern _ZN5Actor18func_ov00_020c313cEj -.extern _ZN5Actor20IncreaseActiveFramesEv -.extern _ZN5Actor4KillEv -.extern _ZN5Actor6GetPosEv -.extern _ZN5Actor8vfunc_0cEv -.extern _ZN5Actor8vfunc_10Ej -.extern _ZN5Actor8vfunc_1cEt -.extern _ZN5Actor8vfunc_24Ev -.extern _ZN5Actor8vfunc_28Ev -.extern _ZN5Actor8vfunc_2cEv -.extern _ZN5Actor8vfunc_30Ev -.extern _ZN5Actor8vfunc_38Ev -.extern _ZN5Actor8vfunc_48Ei -.extern _ZN5Actor8vfunc_4cEPi -.extern _ZN5Actor8vfunc_54Ev -.extern _ZN5Actor8vfunc_68Ev -.extern _ZN5Actor8vfunc_6cEv -.extern _ZN5Actor8vfunc_70Ev -.extern _ZN5Actor8vfunc_74Ev -.extern _ZN5Actor8vfunc_78Ev -.extern _ZN5Actor8vfunc_7cEv -.extern _ZN5Actor8vfunc_80Ev -.extern _ZN5Actor8vfunc_84Ev -.extern _ZN5Actor8vfunc_88Ev -.extern _ZN5Actor8vfunc_8cEv -.extern _ZN5Actor8vfunc_90Ev -.extern _ZN5Actor8vfunc_94Ev -.extern _ZN5Actor8vfunc_98Ev -.extern _ZN5Actor8vfunc_9cEv -.extern _ZN5Actor8vfunc_a8Ev -.extern _ZN5Actor8vfunc_acEv -.extern _ZN5Actor8vfunc_b0Ev -.extern _ZN5ActorC2Ev -.extern _ZN5ActorD2Ev -.extern _ZN9SysObjectdlEPv -.extern _ZN9SysObjectnwEmPjj -.extern data_027e0764 -.extern data_027e0e60 -.extern data_027e0fc8 -.extern data_027e0fe0 -.extern data_ov00_020e9370 -.extern data_ov00_020eec9c -.extern func_01ff9bc4 -.extern func_01fffd04 -.extern func_0202bc38 -.extern func_0203e784 -.extern func_0203e7b4 -.extern func_0204f8d4 -.extern func_ov00_0207a13c -.extern func_ov00_0207a1c8 -.extern func_ov00_02083fb0 -.extern func_ov00_020bce48 -.extern func_ov00_020c5a24 -.extern func_ov00_020d7ad4 -.extern func_ov05_02102c2c -.extern gItemManager diff --git a/asm/ov14/Actor/ActorRupee.s b/asm/ov14/Actor/ActorRupee.s deleted file mode 100644 index f7a8bb17..00000000 --- a/asm/ov14/Actor/ActorRupee.s +++ /dev/null @@ -1,976 +0,0 @@ - .include "ov14/Actor/ActorRupee.inc" - .include "macros/function.inc" - - .text - .global _ZN10ActorRupee6CreateEv - arm_func_start _ZN10ActorRupee6CreateEv -_ZN10ActorRupee6CreateEv: ; 0x0213ae68 - stmdb sp!, {r3, lr} - ldr r1, _0213ae94 ; =data_027e0fe0 - mov r0, #0x160 - ldr r1, [r1] - mov r2, #4 - ldr r1, [r1] - bl _ZN9SysObjectnwEmPjj - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl _ZN10ActorRupeeC2Ev - ldmia sp!, {r3, pc} - .align 2, 0 - arm_func_end _ZN10ActorRupee6CreateEv -_0213ae94: .word data_027e0fe0 - - .global _ZN10ActorRupeeC2Ev - arm_func_start _ZN10ActorRupeeC2Ev -_ZN10ActorRupeeC2Ev: ; 0x0213ae98 - stmdb sp!, {r4, lr} - mov r4, r0 - bl _ZN5ActorC2Ev - ldr r1, _0213aec8 ; =_ZTV10ActorRupee - mov r0, #8 - str r1, [r4] - str r0, [r4, #0x158] - add r1, r4, #0x100 - mov r2, #0 - mov r0, r4 - strh r2, [r1, #0x5c] - ldmia sp!, {r4, pc} - .align 2, 0 - arm_func_end _ZN10ActorRupeeC2Ev -_0213aec8: .word _ZTV10ActorRupee - - .global _ZN10ActorRupee8vfunc_08Ev - arm_func_start _ZN10ActorRupee8vfunc_08Ev -_ZN10ActorRupee8vfunc_08Ev: ; 0x0213aecc - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x18 - mov r4, r0 - ldrh r0, [r4, #0x20] - str r0, [r4, #0x158] - bl _ZN10ActorRupee18func_ov14_0213b70cEj - cmp r0, #0 - ldrne r0, _0213b100 ; =data_ov14_021589b4 - mov r2, #0 - ldrne r0, [r0, #0x24] - str r2, [r4, #0x7c] - ldreq r0, _0213b104 ; =0x00000aa8 - mov r5, r0, asr #0x1 - str r5, [r4, #0x80] - str r2, [r4, #0x84] - str r5, [r4, #0x88] - ldr r1, [r4, #0x7c] - add r0, r5, #0x1000 - str r1, [r4, #0x8c] - ldr r3, [r4, #0x80] - mov r1, #1 - str r3, [r4, #0x90] - ldr r3, [r4, #0x84] - str r3, [r4, #0x94] - ldr r3, [r4, #0x88] - str r3, [r4, #0x98] - str r2, [r4, #0xa8] - str r5, [r4, #0xac] - str r2, [r4, #0xb0] - str r0, [r4, #0xb4] - ldrh r0, [r4, #0x9c] - bic r0, r0, #0xb0 - strh r0, [r4, #0x9c] - strb r1, [r4, #0x9f] - ldr r0, [r4, #0x98] - sub r0, r0, #1 - str r0, [r4, #0x70] - ldr r0, [r4, #0x3c] - cmp r0, #0 - blt _0213af78 - mov r0, r4 - bl _ZN10ActorRupee18func_ov14_0213b204Ei - b _0213b0f4 -_0213af78: - ldr r0, [r4, #0x144] - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _0213b0f4 -_0213af88: ; jump table - b _0213af98 ; case 0 - b _0213afb4 ; case 1 - b _0213b0c8 ; case 2 - b _0213b0e8 ; case 3 -_0213af98: - str r2, [r4, #0x60] - str r2, [r4, #0x64] - mov r0, r4 - mov r1, r2 - str r2, [r4, #0x68] - bl _ZN10ActorRupee18func_ov14_0213b204Ei - b _0213b0f4 -_0213afb4: - ldr r0, _0213b108 ; =data_027e0764 - mvn ip, #0x110 - ldr r5, [r0] - ldmib r0, {r3, r7} - umull sb, r0, r7, r5 - mla r0, r7, r3, r0 - ldr r3, _0213b108 ; =data_027e0764 - ldr r8, [r3, #0x10] - ldr r6, [r3, #0xc] - adds sl, r8, sb - ldr fp, [r3, #0x14] - mla r0, r6, r5, r0 - umull r3, lr, r7, sl - adc sb, fp, r0 - adds r0, r8, r3 - str r0, [sp, #0x14] - ldr r0, _0213b108 ; =data_027e0764 - mla lr, r7, sb, lr - str sl, [r0] - ldr r3, [sp, #0x14] - str sb, [r0, #4] - str r3, [r0] - rsb r0, r1, #0x224 - str r0, [sp, #0x10] - umull r0, r5, sb, r0 - str r0, [sp, #4] - mla r5, sb, r2, r5 - mla lr, r6, sl, lr - ldr r0, [sp, #0x10] - mov r3, r2 - mla r5, r3, r0, r5 - add r0, r5, ip - str r0, [sp] - ldr r5, [sp, #0x14] - ldr r0, _0213b108 ; =data_027e0764 - adc sb, fp, lr - umull sl, r5, r7, r5 - mla r5, r7, sb, r5 - ldr r7, [sp, #0x14] - rsb r1, r1, #0x334 - str sb, [r0, #4] - umull r0, r3, sb, r1 - mla r5, r6, r7, r5 - mov r6, sl - adds r6, r8, r6 - adc r7, fp, r5 - ldr r5, _0213b108 ; =data_027e0764 - mla r3, sb, r2, r3 - mov r0, r2 - mla r3, r0, r1, r3 - add r0, r3, #0x55 - add r0, r0, #0x500 - str r0, [sp, #8] - add r3, ip, #0x334 - stmia r5, {r6, r7} - umull r5, r6, r7, r3 - mla r6, r7, r2, r6 - mla r6, r2, r3, r6 - mov r1, r2 - add r2, r6, ip - str r2, [r4, #0x60] - ldr r2, [sp, #8] - mov r0, r4 - str r2, [r4, #0x64] - ldr r2, [sp] - str sl, [sp, #0xc] - str r2, [r4, #0x68] - bl _ZN10ActorRupee18func_ov14_0213b204Ei - b _0213b0f4 -_0213b0c8: - str r2, [r4, #0x60] - mov r0, #0x800 - str r0, [r4, #0x64] - mov r0, r4 - mov r1, r2 - str r2, [r4, #0x68] - bl _ZN10ActorRupee18func_ov14_0213b204Ei - b _0213b0f4 -_0213b0e8: - mov r0, r4 - mov r1, #5 - bl _ZN10ActorRupee18func_ov14_0213b204Ei -_0213b0f4: - mov r0, #1 - add sp, sp, #0x18 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 - arm_func_end _ZN10ActorRupee8vfunc_08Ev -_0213b100: .word data_ov14_021589b4 -_0213b104: .word 0x00000aa8 -_0213b108: .word data_027e0764 - - .global _ZN10ActorRupee8vfunc_60Ev - arm_func_start _ZN10ActorRupee8vfunc_60Ev -_ZN10ActorRupee8vfunc_60Ev: ; 0x0213b10c - ldr ip, _0213b118 ; =_ZN10ActorRupee18func_ov14_0213b70cEj - ldr r0, [r0, #0x158] - bx ip - .align 2, 0 - arm_func_end _ZN10ActorRupee8vfunc_60Ev -_0213b118: .word _ZN10ActorRupee18func_ov14_0213b70cEj - - .global _ZN10ActorRupee8vfunc_64Ev - arm_func_start _ZN10ActorRupee8vfunc_64Ev -_ZN10ActorRupee8vfunc_64Ev: ; 0x0213b11c - bx lr - arm_func_end _ZN10ActorRupee8vfunc_64Ev - - .global _ZN10ActorRupee4MoveEv - arm_func_start _ZN10ActorRupee4MoveEv -_ZN10ActorRupee4MoveEv: ; 0x0213b120 - stmdb sp!, {r4, lr} - mov r4, r0 - bl _ZN5Actor12ApplyGravityEv - add r0, r4, #0x48 - add r1, r4, #0x60 - mov r2, r0 - bl func_01ff9bc4 - mov r0, #1 - strb r0, [r4, #0x9f] - ldr r0, [r4, #0x98] - sub r2, r0, #1 - str r2, [r4, #0x70] - ldr r1, [r4, #0x18] - ldr r0, [r4, #0x4c] - add r1, r2, r1 - cmp r1, r0 - movlt r0, #0x49 - movge r0, #0xcb - strh r0, [r4, #0x9c] - mov r0, r4 - mov r1, #0 - bl func_01fffd04 - cmp r0, #0 - movne r0, #0 - strne r0, [r4, #0x60] - strne r0, [r4, #0x68] - ldmia sp!, {r4, pc} - arm_func_end _ZN10ActorRupee4MoveEv - - .global _ZN10ActorRupee22GetRupeeCutsceneItemIdEv - arm_func_start _ZN10ActorRupee22GetRupeeCutsceneItemIdEv -_ZN10ActorRupee22GetRupeeCutsceneItemIdEv: ; 0x0213b18c - ldr r0, [r0, #0x158] - cmp r0, #7 - addls pc, pc, r0, lsl #2 - b _0213b1fc -_0213b19c: ; jump table - b _0213b1bc ; case 0 - b _0213b1c4 ; case 1 - b _0213b1cc ; case 2 - b _0213b1d4 ; case 3 - b _0213b1dc ; case 4 - b _0213b1e4 ; case 5 - b _0213b1ec ; case 6 - b _0213b1f4 ; case 7 -_0213b1bc: - mvn r0, #0 - bx lr -_0213b1c4: - mvn r0, #0 - bx lr -_0213b1cc: - mvn r0, #0 - bx lr -_0213b1d4: - mov r0, #9 - bx lr -_0213b1dc: - mov r0, #0x1a - bx lr -_0213b1e4: - mov r0, #0x1b - bx lr -_0213b1ec: - mov r0, #0x81 - bx lr -_0213b1f4: - mov r0, #0x82 - bx lr -_0213b1fc: - mvn r0, #0 - bx lr - arm_func_end _ZN10ActorRupee22GetRupeeCutsceneItemIdEv - - .global _ZN10ActorRupee18func_ov14_0213b204Ei - arm_func_start _ZN10ActorRupee18func_ov14_0213b204Ei -_ZN10ActorRupee18func_ov14_0213b204Ei: ; 0x0213b204 - cmp r1, #5 - addls pc, pc, r1, lsl #2 - b _0213b244 -_0213b210: ; jump table - b _0213b228 ; case 0 - b _0213b234 ; case 1 - b _0213b234 ; case 2 - b _0213b234 ; case 3 - b _0213b234 ; case 4 - b _0213b234 ; case 5 -_0213b228: - mov r2, #1 - strb r2, [r0, #0x11a] - b _0213b244 -_0213b234: - mov r2, #0 - str r2, [r0, #0x60] - str r2, [r0, #0x64] - str r2, [r0, #0x68] -_0213b244: - mov r2, #0 - str r2, [r0, #0x138] - str r1, [r0, #0x130] - bx lr - arm_func_end _ZN10ActorRupee18func_ov14_0213b204Ei - - .global _ZN10ActorRupee6UpdateEb - arm_func_start _ZN10ActorRupee6UpdateEb -_ZN10ActorRupee6UpdateEb: ; 0x0213b254 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0x10 - mov r5, r0 - ldr r2, [r5, #0x48] - mov r4, r1 - str r2, [r5, #0x54] - ldr r1, [r5, #0x4c] - str r1, [r5, #0x58] - ldr r1, [r5, #0x50] - str r1, [r5, #0x5c] - bl _ZN5Actor20IncreaseActiveFramesEv - ldr r0, [r5, #0x130] - cmp r0, #3 - beq _0213b358 - add r0, r5, #0x100 - ldrh r1, [r0, #0x5c] - add r1, r1, #1 - strh r1, [r0, #0x5c] - ldrh r0, [r0, #0x5c] - cmp r0, #6 - blo _0213b358 - mov r0, r5 - mov r1, #0x1b - bl _ZN5Actor18CollidesWithPlayerEj - cmp r0, #0 - beq _0213b358 - mov r0, r5 - bl _ZN10ActorRupee22GetRupeeCutsceneItemIdEv - movs r1, r0 - bmi _0213b2f8 - ldr r0, _0213b50c ; =data_027e0fc8 - ldr r0, [r0] - bl func_ov00_020bce48 - cmp r0, #0 - mov r0, r5 - beq _0213b2ec - bl _ZN5Actor4KillEv - b _0213b358 -_0213b2ec: - mov r1, #3 - bl _ZN10ActorRupee18func_ov14_0213b204Ei - b _0213b358 -_0213b2f8: - ldr r1, _0213b510 ; =gItemManager - ldr r0, [r5, #0x158] - ldr r6, [r1] - bl func_ov00_020c5a24 - mov r1, r0 - mov r0, r6 - mov r2, #0 - bl _ZN11ItemManager10GiveRupeesEjj - ldr r0, [r5, #0x158] - mvn r1, #0 - cmp r0, #0 - beq _0213b33c - cmp r0, #1 - beq _0213b344 - cmp r0, #2 - moveq r1, #0xfc - b _0213b348 -_0213b33c: - mov r1, #0xfa - b _0213b348 -_0213b344: - mov r1, #0xfb -_0213b348: - ldr r0, _0213b514 ; =data_ov00_020eec9c - bl func_ov00_020d7ad4 - mov r0, r5 - bl _ZN5Actor4KillEv -_0213b358: - ldr r0, [r5, #0x130] - cmp r0, #0 - cmpne r0, #1 - cmpne r0, #2 - bne _0213b3a4 - mov r0, r5 - bl _ZN5Actor18func_ov00_020c2c0cEv - cmp r0, #0 - mov r0, r5 - beq _0213b38c - mov r1, #4 - bl _ZN10ActorRupee18func_ov14_0213b204Ei - b _0213b3a4 -_0213b38c: - bl _ZN5Actor18func_ov00_020c2d54Ev - cmp r0, #0 - beq _0213b3a4 - mov r0, r5 - mov r1, #5 - bl _ZN10ActorRupee18func_ov14_0213b204Ei -_0213b3a4: - ldr r0, [r5, #0x130] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _0213b4fc -_0213b3b4: ; jump table - b _0213b3cc ; case 0 - b _0213b468 ; case 1 - b _0213b49c ; case 2 - b _0213b438 ; case 3 - b _0213b4c0 ; case 4 - b _0213b4e0 ; case 5 -_0213b3cc: - mov r0, r5 - bl _ZN10ActorRupee4MoveEv - ldrb r0, [r5, #0x111] - cmp r0, #0 - beq _0213b4fc - ldr r1, [r5, #0x48] - ldr r0, _0213b518 ; =data_027e0e60 - str r1, [sp, #4] - ldr r2, [r5, #0x4c] - ldr r1, [r0] - str r2, [sp, #8] - ldr r3, [r5, #0x50] - add r0, sp, #0 - add r2, sp, #4 - str r3, [sp, #0xc] - bl func_ov00_02083fb0 - ldr r0, [sp] - mov r0, r0, lsr #0x5 - and r0, r0, #3 - cmp r0, #2 - mov r0, r5 - bne _0213b42c - bl _ZN5Actor4KillEv - b _0213b4fc -_0213b42c: - mov r1, #1 - bl _ZN10ActorRupee18func_ov14_0213b204Ei - b _0213b4fc -_0213b438: - ldr r1, _0213b50c ; =data_027e0fc8 - mov r0, r5 - ldr r4, [r1] - bl _ZN10ActorRupee22GetRupeeCutsceneItemIdEv - mov r1, r0 - mov r0, r4 - bl func_ov00_020bce48 - cmp r0, #0 - beq _0213b4fc - mov r0, r5 - bl _ZN5Actor4KillEv - b _0213b4fc -_0213b468: - cmp r4, #0 - movne r0, #0 - strne r0, [r5, #0x138] - ldr r0, [r5, #0x3c] - cmp r0, #0 - bge _0213b4fc - ldr r0, [r5, #0x138] - cmp r0, #0xb4 - blt _0213b4fc - mov r0, r5 - mov r1, #2 - bl _ZN10ActorRupee18func_ov14_0213b204Ei - b _0213b4fc -_0213b49c: - cmp r4, #0 - movne r0, #0 - strne r0, [r5, #0x138] - ldr r0, [r5, #0x138] - cmp r0, #0x3c - blt _0213b4fc - mov r0, r5 - bl _ZN5Actor4KillEv - b _0213b4fc -_0213b4c0: - mov r0, r5 - bl _ZN5Actor18func_ov00_020c2c70Ev - cmp r0, #0 - bne _0213b4fc - mov r0, r5 - mov r1, #1 - bl _ZN10ActorRupee18func_ov14_0213b204Ei - b _0213b4fc -_0213b4e0: - mov r0, r5 - bl _ZN5Actor18func_ov00_020c2de4Ev - cmp r0, #0 - bne _0213b4fc - mov r0, r5 - mov r1, #1 - bl _ZN10ActorRupee18func_ov14_0213b204Ei -_0213b4fc: - mov r0, r5 - bl _ZN5Actor12KillInBoundsEv - add sp, sp, #0x10 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 - arm_func_end _ZN10ActorRupee6UpdateEb -_0213b50c: .word data_027e0fc8 -_0213b510: .word gItemManager -_0213b514: .word data_ov00_020eec9c -_0213b518: .word data_027e0e60 - - .global _ZN10ActorRupee8vfunc_14Ej - arm_func_start _ZN10ActorRupee8vfunc_14Ej -_ZN10ActorRupee8vfunc_14Ej: ; 0x0213b51c - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl _ZN5Actor18func_ov00_020c313cEj - cmp r0, #0 - beq _0213b540 - mov r0, r5 - mov r1, #0 - bl _ZN10ActorRupee6UpdateEb -_0213b540: - mov r1, r4 - add r0, r5, #0xa4 - add r2, r5, #0x48 - bl func_ov00_0207a1c8 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end _ZN10ActorRupee8vfunc_14Ej - - .global _ZN10ActorRupee8vfunc_18Ej - arm_func_start _ZN10ActorRupee8vfunc_18Ej -_ZN10ActorRupee8vfunc_18Ej: ; 0x0213b554 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl _ZN5Actor18func_ov00_020c313cEj - cmp r0, #0 - beq _0213b578 - mov r0, r5 - mov r1, #1 - bl _ZN10ActorRupee6UpdateEb -_0213b578: - mov r1, r4 - add r0, r5, #0xa4 - add r2, r5, #0x48 - bl func_ov00_0207a1c8 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end _ZN10ActorRupee8vfunc_18Ej - - .global _ZN10ActorRupee8vfunc_20Ei - arm_func_start _ZN10ActorRupee8vfunc_20Ei -_ZN10ActorRupee8vfunc_20Ei: ; 0x0213b58c - stmdb sp!, {r3, lr} - mov r3, r0 - cmp r1, #0 - ldrneb r0, [r3, #0xa5] - ldreqb r0, [r3, #0xa4] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldr r0, [r3, #0x130] - cmp r0, #2 - bne _0213b5cc - ldr r0, [r3, #0x138] - mov r2, r0, lsr #0x1f - rsb r0, r2, r0, lsl #29 - add r0, r2, r0, ror #29 - cmp r0, #4 - ldmltia sp!, {r3, pc} -_0213b5cc: - cmp r1, #0 - ldrneb r0, [r3, #0xa5] - ldreqb r0, [r3, #0xa4] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldr r0, [r3, #0x158] - add r2, r3, #0x48 - mov r3, #1 - bl _ZN10ActorRupee18func_ov14_0213b5f4EjiP5Vec3pb - ldmia sp!, {r3, pc} - arm_func_end _ZN10ActorRupee8vfunc_20Ei - - .global _ZN10ActorRupee18func_ov14_0213b5f4EjiP5Vec3pb - arm_func_start _ZN10ActorRupee18func_ov14_0213b5f4EjiP5Vec3pb -_ZN10ActorRupee18func_ov14_0213b5f4EjiP5Vec3pb: ; 0x0213b5f4 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #0x34 - mov r7, r0 - add r0, sp, #0x18 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl func_ov00_0207a13c - add r1, sp, #0x18 - mov r0, r7 - bl _ZN10ActorRupee18func_ov14_0213b6a4EjPv - ldr r2, _0213b698 ; =data_ov14_02153e28 - mov r1, #0 - str r1, [sp] - ldr r2, [r2, r7, lsl #2] - mov r0, r6 - mov r1, r5 - add r3, sp, #0x18 - bl func_0202bc38 - cmp r4, #0 - addeq sp, sp, #0x34 - ldmeqia sp!, {r4, r5, r6, r7, pc} - mov r0, r7 - bl _ZN10ActorRupee18func_ov14_0213b70cEj - cmp r0, #0 - ldrne r3, _0213b69c ; =0x000004cd - mov r1, #0 - moveq r3, #0x400 - str r3, [sp] - str r1, [sp, #4] - mov r0, #0x1f - str r0, [sp, #8] - str r1, [sp, #0xc] - mov ip, #1 - str ip, [sp, #0x10] - ldr r0, _0213b6a0 ; =data_ov00_020e9370 - mov r2, r5 - str ip, [sp, #0x14] - bl func_ov05_02102c2c - add sp, sp, #0x34 - ldmia sp!, {r4, r5, r6, r7, pc} - .align 2, 0 - arm_func_end _ZN10ActorRupee18func_ov14_0213b5f4EjiP5Vec3pb -_0213b698: .word data_ov14_02153e28 -_0213b69c: .word 0x000004cd -_0213b6a0: .word data_ov00_020e9370 - - .global _ZN10ActorRupee18func_ov14_0213b6a4EjPv - arm_func_start _ZN10ActorRupee18func_ov14_0213b6a4EjPv -_ZN10ActorRupee18func_ov14_0213b6a4EjPv: ; 0x0213b6a4 - stmdb sp!, {r4, lr} - mov r4, r1 - mov r1, #3 - str r1, [r4, #4] - bl _ZN10ActorRupee18func_ov14_0213b70cEj - cmp r0, #0 - beq _0213b6e4 - mov r1, #2 - str r1, [r4, #8] - ldr r0, _0213b704 ; =data_ov14_021589b4 - str r1, [r4, #0xc] - ldr r1, [r0, #0x20] - str r1, [r4, #0x14] - ldr r0, [r0, #0x24] - str r0, [r4, #0x18] - ldmia sp!, {r4, pc} -_0213b6e4: - mov r0, #2 - str r0, [r4, #8] - str r0, [r4, #0xc] - add r1, r0, #0x2a8 - ldr r0, _0213b708 ; =0x00000aa8 - str r1, [r4, #0x14] - str r0, [r4, #0x18] - ldmia sp!, {r4, pc} - .align 2, 0 - arm_func_end _ZN10ActorRupee18func_ov14_0213b6a4EjPv -_0213b704: .word data_ov14_021589b4 -_0213b708: .word 0x00000aa8 - - .global _ZN10ActorRupee18func_ov14_0213b70cEj - arm_func_start _ZN10ActorRupee18func_ov14_0213b70cEj -_ZN10ActorRupee18func_ov14_0213b70cEj: ; 0x0213b70c - cmp r0, #7 - addls pc, pc, r0, lsl #2 - b _0213b740 -_0213b718: ; jump table - b _0213b740 ; case 0 - b _0213b740 ; case 1 - b _0213b740 ; case 2 - b _0213b738 ; case 3 - b _0213b738 ; case 4 - b _0213b738 ; case 5 - b _0213b740 ; case 6 - b _0213b738 ; case 7 -_0213b738: - mov r0, #1 - bx lr -_0213b740: - mov r0, #0 - bx lr - arm_func_end _ZN10ActorRupee18func_ov14_0213b70cEj - - .global _ZN10ActorRupeeD0Ev - arm_func_start _ZN10ActorRupeeD0Ev -_ZN10ActorRupeeD0Ev: ; 0x0213b748 - stmdb sp!, {r4, lr} - mov r4, r0 - bl _ZN5ActorD2Ev - mov r0, r4 - bl _ZN9SysObjectdlEPv - mov r0, r4 - ldmia sp!, {r4, pc} - arm_func_end _ZN10ActorRupeeD0Ev - - .global _ZN10ActorRupeeD2Ev - arm_func_start _ZN10ActorRupeeD2Ev -_ZN10ActorRupeeD2Ev: ; 0x0213b764 - stmdb sp!, {r4, lr} - mov r4, r0 - bl _ZN5ActorD2Ev - mov r0, r4 - ldmia sp!, {r4, pc} - arm_func_end _ZN10ActorRupeeD2Ev - - .rodata - .global data_ov14_02153e28 -data_ov14_02153e28: ; 0x02153e28 - .word 0x00000009 - .word 0x0000000a - .word 0x00000008 - .word 0x00000009 - .word 0x00000008 - .word 0x0000000b - .word 0x0000000c - .word 0x0000000c - - .section .init, 4, 1, 4 - .global func_ov14_0215517c - arm_func_start func_ov14_0215517c -func_ov14_0215517c: ; 0x0215517c - stmdb sp!, {r3, lr} - ldr r0, _021551bc ; =_ZN10ActorRupee5gTypeE - ldr r1, _021551c0 ; =0x52555059 - ldr r2, _021551c4 ; =_ZN10ActorRupee6CreateEv - mov r3, #0 - bl func_0203e784 - ldr r0, _021551bc ; =_ZN10ActorRupee5gTypeE - ldr r1, _021551c8 ; =func_0203e7b4 - ldr r2, _021551cc ; =_ZN10ActorRupee9gResourceE - bl func_0204f8d4 - ldr r2, _021551d0 ; =0x000003bb - ldr r0, _021551d4 ; =data_ov14_021589b4 - add r1, r2, #0xb30 - str r2, [r0, #0x20] - str r1, [r0, #0x24] - ldmia sp!, {r3, pc} - .align 2, 0 - arm_func_end func_ov14_0215517c -_021551bc: .word _ZN10ActorRupee5gTypeE -_021551c0: .word 0x52555059 -_021551c4: .word _ZN10ActorRupee6CreateEv -_021551c8: .word func_0203e7b4 -_021551cc: .word _ZN10ActorRupee9gResourceE -_021551d0: .word 0x000003bb -_021551d4: .word data_ov14_021589b4 - - .section .ctor, 4, 1, 4 - .global data_ov14_0215591c -data_ov14_0215591c: ; 0x0215591c - .word func_ov14_0215517c - - .data - .global data_ov14_02158994 -data_ov14_02158994: ; 0x02158994 - .ascii "brg" - .byte 0x00 - .global data_ov14_02158998 -data_ov14_02158998: ; 0x02158998 - .ascii "fnl" - .byte 0x00 - .global data_ov14_0215899c -data_ov14_0215899c: ; 0x0215899c - .ascii "pdl" - .byte 0x00 - .global data_ov14_021589a0 -data_ov14_021589a0: ; 0x021589a0 - .ascii "dco" - .byte 0x00 - .global data_ov14_021589a4 -data_ov14_021589a4: ; 0x021589a4 - .ascii "can" - .byte 0x00 - .global data_ov14_021589a8 -data_ov14_021589a8: ; 0x021589a8 - .ascii "hul" - .byte 0x00 - .global data_ov14_021589ac -data_ov14_021589ac: ; 0x021589ac - .ascii "bow" - .byte 0x00 - .global data_ov14_021589b0 -data_ov14_021589b0: ; 0x021589b0 - .ascii "anc" - .byte 0x00 - .global data_ov14_021589b4 -data_ov14_021589b4: ; 0x021589b4 - .word data_ov14_021589b0 - .global data_ov14_021589b8 -data_ov14_021589b8: ; 0x021589b8 - .word data_ov14_021589ac - .global data_ov14_021589bc -data_ov14_021589bc: ; 0x021589bc - .word data_ov14_021589a8 - .global data_ov14_021589c0 -data_ov14_021589c0: ; 0x021589c0 - .word data_ov14_021589a4 - .global data_ov14_021589c4 -data_ov14_021589c4: ; 0x021589c4 - .word data_ov14_021589a0 - .global data_ov14_021589c8 -data_ov14_021589c8: ; 0x021589c8 - .word data_ov14_0215899c - .global data_ov14_021589cc -data_ov14_021589cc: ; 0x021589cc - .word data_ov14_02158998 - .global data_ov14_021589d0 -data_ov14_021589d0: ; 0x021589d0 - .word data_ov14_02158994 ; func_ov61_02158994 - .global data_ov14_021589d4 -data_ov14_021589d4: ; 0x021589d4 - .byte 0x00, 0x00, 0x00, 0x00 - .global data_ov14_021589d8 -data_ov14_021589d8: ; 0x021589d8 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .global _ZTV10ActorRupee -_ZTV10ActorRupee: ; 0x021589e4 - .word _ZN10ActorRupeeD2Ev - .global data_ov14_021589e8 -data_ov14_021589e8: ; 0x021589e8 - .word _ZN10ActorRupeeD0Ev - .global data_ov14_021589ec -data_ov14_021589ec: ; 0x021589ec - .word _ZN10ActorRupee8vfunc_08Ev - .global data_ov14_021589f0 -data_ov14_021589f0: ; 0x021589f0 - .word _ZN5Actor8vfunc_0cEv - .global data_ov14_021589f4 -data_ov14_021589f4: ; 0x021589f4 - .word _ZN5Actor8vfunc_10Ej - .global data_ov14_021589f8 -data_ov14_021589f8: ; 0x021589f8 - .word _ZN10ActorRupee8vfunc_14Ej - .global data_ov14_021589fc -data_ov14_021589fc: ; 0x021589fc - .word _ZN10ActorRupee8vfunc_18Ej - .global data_ov14_02158a00 -data_ov14_02158a00: ; 0x02158a00 - .word _ZN5Actor8vfunc_1cEt - .global data_ov14_02158a04 -data_ov14_02158a04: ; 0x02158a04 - .word _ZN10ActorRupee8vfunc_20Ei - .global data_ov14_02158a08 -data_ov14_02158a08: ; 0x02158a08 - .word _ZN5Actor8vfunc_24Ev - .global data_ov14_02158a0c -data_ov14_02158a0c: ; 0x02158a0c - .word _ZN5Actor8vfunc_28Ev - .global data_ov14_02158a10 -data_ov14_02158a10: ; 0x02158a10 - .word _ZN5Actor8vfunc_2cEv - .global data_ov14_02158a14 -data_ov14_02158a14: ; 0x02158a14 - .word _ZN5Actor8vfunc_30Ev - .global data_ov14_02158a18 -data_ov14_02158a18: ; 0x02158a18 - .word _ZN5Actor12GetOffsetPosEP5Vec3p - .global data_ov14_02158a1c -data_ov14_02158a1c: ; 0x02158a1c - .word _ZN5Actor8vfunc_38Ev - .global data_ov14_02158a20 -data_ov14_02158a20: ; 0x02158a20 - .word _ZN5Actor16CollidesWithLinkEv - .global data_ov14_02158a24 -data_ov14_02158a24: ; 0x02158a24 - .word _ZN5Actor15IsHitboxTouchedEb - .global data_ov14_02158a28 -data_ov14_02158a28: ; 0x02158a28 - .word _ZN5Actor12CollidesWithEPKS_ - .global data_ov14_02158a2c -data_ov14_02158a2c: ; 0x02158a2c - .word _ZN5Actor8vfunc_48Ei - .global data_ov14_02158a30 -data_ov14_02158a30: ; 0x02158a30 - .word _ZN5Actor8vfunc_4cEPi - .global data_ov14_02158a34 -data_ov14_02158a34: ; 0x02158a34 - .word _ZN5Actor6GetPosEv - .global data_ov14_02158a38 -data_ov14_02158a38: ; 0x02158a38 - .word _ZN5Actor8vfunc_54Ev - .global data_ov14_02158a3c -data_ov14_02158a3c: ; 0x02158a3c - .word _ZN5Actor10SetUnk_11bEv - .global data_ov14_02158a40 -data_ov14_02158a40: ; 0x02158a40 - .word _ZN5Actor11SetVelocityEP5Vec3p - .global data_ov14_02158a44 -data_ov14_02158a44: ; 0x02158a44 - .word _ZN10ActorRupee8vfunc_60Ev - .global data_ov14_02158a48 -data_ov14_02158a48: ; 0x02158a48 - .word _ZN10ActorRupee8vfunc_64Ev - .global data_ov14_02158a4c -data_ov14_02158a4c: ; 0x02158a4c - .word _ZN5Actor8vfunc_68Ev - .global data_ov14_02158a50 -data_ov14_02158a50: ; 0x02158a50 - .word _ZN5Actor8vfunc_6cEv - .global data_ov14_02158a54 -data_ov14_02158a54: ; 0x02158a54 - .word _ZN5Actor8vfunc_70Ev - .global data_ov14_02158a58 -data_ov14_02158a58: ; 0x02158a58 - .word _ZN5Actor8vfunc_74Ev - .global data_ov14_02158a5c -data_ov14_02158a5c: ; 0x02158a5c - .word _ZN5Actor8vfunc_78Ev - .global data_ov14_02158a60 -data_ov14_02158a60: ; 0x02158a60 - .word _ZN5Actor8vfunc_7cEv - .global data_ov14_02158a64 -data_ov14_02158a64: ; 0x02158a64 - .word _ZN5Actor8vfunc_80Ev - .global data_ov14_02158a68 -data_ov14_02158a68: ; 0x02158a68 - .word _ZN5Actor8vfunc_84Ev - .global data_ov14_02158a6c -data_ov14_02158a6c: ; 0x02158a6c - .word _ZN5Actor8vfunc_88Ev - .global data_ov14_02158a70 -data_ov14_02158a70: ; 0x02158a70 - .word _ZN5Actor8vfunc_8cEv - .global data_ov14_02158a74 -data_ov14_02158a74: ; 0x02158a74 - .word _ZN5Actor8vfunc_90Ev - .global data_ov14_02158a78 -data_ov14_02158a78: ; 0x02158a78 - .word _ZN5Actor8vfunc_94Ev - .global data_ov14_02158a7c -data_ov14_02158a7c: ; 0x02158a7c - .word _ZN5Actor8vfunc_98Ev - .global data_ov14_02158a80 -data_ov14_02158a80: ; 0x02158a80 - .word _ZN5Actor8vfunc_9cEv - .global data_ov14_02158a84 -data_ov14_02158a84: ; 0x02158a84 - .word _ZN5Actor15TrySetTransformEP9Transform - .global data_ov14_02158a88 -data_ov14_02158a88: ; 0x02158a88 - .word _ZN5Actor12SetTransformEP9Transform - .global data_ov14_02158a8c -data_ov14_02158a8c: ; 0x02158a8c - .word _ZN5Actor8vfunc_a8Ev - .global data_ov14_02158a90 -data_ov14_02158a90: ; 0x02158a90 - .word _ZN5Actor8vfunc_acEv - .global data_ov14_02158a94 -data_ov14_02158a94: ; 0x02158a94 - .word _ZN5Actor8vfunc_b0Ev - - .bss - .global _ZN10ActorRupee9gResourceE -_ZN10ActorRupee9gResourceE: - .space 0xc - .global _ZN10ActorRupee5gTypeE -_ZN10ActorRupee5gTypeE: - .space 0x14 diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp index 78151cc0..ba2f7449 100644 --- a/include/Actor/Actor.hpp +++ b/include/Actor/Actor.hpp @@ -11,22 +11,20 @@ #include "Physics/Transform.hpp" #include "Player/EquipBoomerang.hpp" -class Actor_UnkStruct_012 { - public: - /* 00 */ u16 mUnk_00; - /* 02 */ u8 mUnk_02; - /* 03 */ u8 mUnk_03; - /* 04 */ u32 mUnk_04; - /* 08 */ u32 mUnk_08; - /* 0c */ u32 mUnk_0c; - /* 10 */ u8 mUnk_10; - /* 11 */ u8 mUnk_11; - /* 12 */ u8 mUnk_12[0x2]; - /* 14 */ u32 mUnk_14; - /* 18 */ u32 mUnk_18; - /* 1c */ - Actor_UnkStruct_012(); +struct Actor_UnkStruct_012 { + /* 00 */ u16 mUnk_00; + /* 02 */ u8 mUnk_02; + /* 03 */ u8 mUnk_03; + /* 04 */ u32 mUnk_04; + /* 08 */ u32 mUnk_08; + /* 0c */ u32 mUnk_0c; + /* 10 */ u8 mUnk_10; + /* 11 */ u8 mUnk_11; + /* 12 */ u8 mUnk_12[0x2]; + /* 14 */ u32 mUnk_14; + /* 18 */ u32 mUnk_18; + /* 1c */ }; struct Actor_UnkStruct_020 { diff --git a/include/Actor/ActorRupee.hpp b/include/Actor/ActorRupee.hpp index 0944bc03..c86a1a0f 100644 --- a/include/Actor/ActorRupee.hpp +++ b/include/Actor/ActorRupee.hpp @@ -30,7 +30,7 @@ public: /* 000 (base) */ /* 158 */ RupeeId mRupeeId; - /* 15c */ s16 mUnk_15c; + /* 15c */ u16 mUnk_15c; /* 15e */ unk16 mUnk_15e; /* 160 */ diff --git a/include/Player/PlayerLinkBase.hpp b/include/Player/PlayerLinkBase.hpp index f8b291cf..16510ee3 100644 --- a/include/Player/PlayerLinkBase.hpp +++ b/include/Player/PlayerLinkBase.hpp @@ -74,5 +74,5 @@ class PlayerLinkBase: public PlayerBase { /* 84 */ virtual void ResetUnk_5e(); /* 88 */ public: - bool PlayItemCutscene(ItemId cutsceneItemId); + bool func_ov00_020bce48(ItemId cutsceneItemId); // PlayItemCutscene }; diff --git a/src/14_Land/Actor/ActorRupee.cpp b/src/14_Land/Actor/ActorRupee.cpp index 89537646..7cde3474 100644 --- a/src/14_Land/Actor/ActorRupee.cpp +++ b/src/14_Land/Actor/ActorRupee.cpp @@ -4,7 +4,7 @@ Resource ActorRupee::gResource; ActorType ActorRupee::gType; -static u32 data_ov14_021589d4 = 0x00000000; +static u32 data_ov14_021589d4[] = { 0x00000000 }; static u32 data_ov14_021589d8[] = { 0x00000000, @@ -12,7 +12,7 @@ static u32 data_ov14_021589d8[] = { 0x00000000, }; -static char data_ov14_021589b4[] = "anc"; +static char* data_ov14_021589b4 = "anc"; extern u32 **data_027e0fe0[]; @@ -24,8 +24,6 @@ extern u32 data_ov00_020e9370[]; extern "C" bool func_ov00_020c313c(); extern "C" void func_ov00_0207a1c8(bool *param_1, bool param_2, Vec3p *param_3); -// --- - extern "C" void func_0202bc38(unk32 param_1, Vec3p *param_2, u32 param_3, Actor_UnkStruct_012 *param_4, bool); extern "C" 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); @@ -38,6 +36,9 @@ extern u32 data_ov00_020eec9c[]; extern PlayerLinkBase *data_027e0fc8; // gPlayerLink extern void *data_027e0e60; +extern "C" bool func_ov00_020bce48(PlayerLinkBase* implicit, ItemId cutsceneItemId); +extern "C" void func_ov00_0207a13c(Actor_UnkStruct_012* implicit); + ActorRupee* ActorRupee::Create() { ActorRupee* newRupee = new(*data_027e0fe0[0], 4) ActorRupee(); return newRupee; @@ -250,7 +251,7 @@ void ActorRupee::func_ov14_0213b204(unk32 param1) { mUnk_130 = param1; } -extern "C" void _ZN11ItemManager10GiveRupeesEjj(); +extern "C" void _ZN11ItemManager10GiveRupeesEjj(ItemManager* implicit, u16 amount, unk32 param2); void ActorRupee::Update(bool param1) { ItemId cutsceneItemId; s32 uVar3; @@ -265,7 +266,7 @@ void ActorRupee::Update(bool param1) { cutsceneItemId = GetRupeeCutsceneItemId(); if (cutsceneItemId >= 0) { - if (data_027e0fc8->PlayItemCutscene(cutsceneItemId)) { + if (/*data_027e0fc8->*/func_ov00_020bce48(data_027e0fc8, cutsceneItemId)) { Kill(); } else { func_ov14_0213b204(3); @@ -273,7 +274,8 @@ void ActorRupee::Update(bool param1) { } else { ItemManager* pItem = gItemManager; rupeeValue = func_ov00_020c5a24(mRupeeId); - pItem->GiveRupees(rupeeValue, false); + _ZN11ItemManager10GiveRupeesEjj(pItem, rupeeValue, false); // GiveRupees + // pItem->GiveRupees(rupeeValue, false); // giverupees uVar3 = -1; switch (mRupeeId) { @@ -318,7 +320,7 @@ void ActorRupee::Update(bool param1) { break; case 3: PlayerLinkBase* pLink = data_027e0fc8; - if (pLink->PlayItemCutscene(GetRupeeCutsceneItemId())) { + if (/*pLink->*/func_ov00_020bce48(pLink, GetRupeeCutsceneItemId())) { Kill(); } break; @@ -389,6 +391,7 @@ void ActorRupee::func_ov14_0213b5f4(RupeeId id, unk32 param2, Vec3p *param3, boo 0xC, // RupeeId_Rupoor50 }; + func_ov00_0207a13c(&unk_class); func_ov14_0213b6a4(id, &unk_class); func_0202bc38(param2, param3, data_ov14_02153e28[id], &unk_class, 0); @@ -404,8 +407,8 @@ 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_021589d4; // data_ov14_021589b4[8] - param2->mUnk_18 = data_ov14_021589d8[0]; // data_ov14_021589b4[9] + param2->mUnk_14 = data_ov14_021589d4[8]; // data_ov14_021589b4[8] + param2->mUnk_18 = data_ov14_021589d8[8]; // data_ov14_021589b4[9] } else { param2->mUnk_08 = 2; param2->mUnk_0c = 2; From c7fd0dd4bdbce1b7d6e29a17e11cbcf92981875f Mon Sep 17 00:00:00 2001 From: Yanis42 <35189056+Yanis42@users.noreply.github.com> Date: Fri, 19 Apr 2024 21:57:52 +0200 Subject: [PATCH 05/13] fix more matching issues --- asm/ov14/Actor/ActorRupee_ActorRupee.inc | 13 ++++ .../Actor/ActorRupee__ZN10ActorRupeeD0Ev.inc | 8 ++ .../Actor/ActorRupee__ZN10ActorRupeeD2Ev.inc | 6 ++ include/Actor/ActorRupee.hpp | 2 +- src/14_Land/Actor/ActorRupee.cpp | 75 +++++++++++++++---- 5 files changed, 90 insertions(+), 14 deletions(-) create mode 100644 asm/ov14/Actor/ActorRupee_ActorRupee.inc create mode 100644 asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD0Ev.inc create mode 100644 asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD2Ev.inc diff --git a/asm/ov14/Actor/ActorRupee_ActorRupee.inc b/asm/ov14/Actor/ActorRupee_ActorRupee.inc new file mode 100644 index 00000000..1d2d92ba --- /dev/null +++ b/asm/ov14/Actor/ActorRupee_ActorRupee.inc @@ -0,0 +1,13 @@ + + stmdb sp!, {r4, lr} + mov r4, r0 + bl _ZN5ActorC2Ev + lda r1, _ZTV10ActorRupee + mov r0, #8 + str r1, [r4] + str r0, [r4, #0x158] + add r1, r4, #0x100 + mov r2, #0 + mov r0, r4 + strh r2, [r1, #0x5c] + ldmia sp!, {r4, pc} diff --git a/asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD0Ev.inc b/asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD0Ev.inc new file mode 100644 index 00000000..c5f964ba --- /dev/null +++ b/asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD0Ev.inc @@ -0,0 +1,8 @@ + + stmdb sp!, {r4, lr} + mov r4, r0 + bl _ZN5ActorD2Ev + mov r0, r4 + bl _ZN9SysObjectdlEPv + mov r0, r4 + ldmia sp!, {r4, pc} diff --git a/asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD2Ev.inc b/asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD2Ev.inc new file mode 100644 index 00000000..642af1ea --- /dev/null +++ b/asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD2Ev.inc @@ -0,0 +1,6 @@ + + stmdb sp!, {r4, lr} + mov r4, r0 + bl _ZN5ActorD2Ev + mov r0, r4 + ldmia sp!, {r4, pc} diff --git a/include/Actor/ActorRupee.hpp b/include/Actor/ActorRupee.hpp index c86a1a0f..fa9bdf71 100644 --- a/include/Actor/ActorRupee.hpp +++ b/include/Actor/ActorRupee.hpp @@ -44,7 +44,7 @@ public: /* b4 */ static ActorRupee* Create(); - ActorRupee(); + ActorRupee(void); void Move(); ItemId GetRupeeCutsceneItemId(); void func_ov14_0213b204(unk32 param1); diff --git a/src/14_Land/Actor/ActorRupee.cpp b/src/14_Land/Actor/ActorRupee.cpp index 7cde3474..40994a69 100644 --- a/src/14_Land/Actor/ActorRupee.cpp +++ b/src/14_Land/Actor/ActorRupee.cpp @@ -4,6 +4,15 @@ Resource ActorRupee::gResource; ActorType ActorRupee::gType; +static char data_ov14_021589b4[] = "anc"; +static char data_ov14_021589b8[] = "bow"; +static char data_ov14_021589bc[] = "hul"; +static char data_ov14_021589c0[] = "can"; +static char data_ov14_021589c4[] = "dco"; +static char data_ov14_021589c8[] = "pdl"; +static char data_ov14_021589cc[] = "fnl"; +static char data_ov14_021589d0[] = "brg"; + static u32 data_ov14_021589d4[] = { 0x00000000 }; static u32 data_ov14_021589d8[] = { @@ -12,44 +21,72 @@ static u32 data_ov14_021589d8[] = { 0x00000000, }; -static char* data_ov14_021589b4 = "anc"; extern u32 **data_027e0fe0[]; - extern "C" void func_01ff9bc4(Vec3p *a, Vec3p *b, Vec3p *sum); extern "C" u32 func_01fffd04(void*, u32); - extern u32 data_ov00_020e9370[]; extern "C" bool func_ov00_020c313c(); extern "C" void func_ov00_0207a1c8(bool *param_1, bool param_2, Vec3p *param_3); - extern "C" void func_0202bc38(unk32 param_1, Vec3p *param_2, u32 param_3, Actor_UnkStruct_012 *param_4, bool); extern "C" 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); - extern "C" void func_ov00_020d7ad4(u32* param1, u32 param2); extern "C" void func_ov00_02083fb0(u32* param1, void* param2, Vec3p* param3); extern "C" u16 func_ov00_020c5a24(RupeeId id); // GetRupeeValue - extern u32 data_ov00_020eec9c[]; extern PlayerLinkBase *data_027e0fc8; // gPlayerLink extern void *data_027e0e60; - extern "C" bool func_ov00_020bce48(PlayerLinkBase* implicit, ItemId cutsceneItemId); extern "C" void func_ov00_0207a13c(Actor_UnkStruct_012* implicit); +extern "C" void _ZN5ActorD2Ev(); +extern "C" void _ZN9SysObjectdlEPv(); +extern "C" ActorRupee* _ZN5ActorC2Ev(ActorRupee *thisx); +extern "C" void _ZN10ActorRupeeD2Ev(); +extern "C" void* _ZTV10ActorRupee = _ZN10ActorRupeeD2Ev; + +extern "C" { + void func_0203e784(ActorType *param_1, u32 type, ActorCreateFunc createFunc, void* param_4); + void func_0203e7b4(); + void func_0204f8d4(void *object, void *cleanupFunc, Resource *resource); +} + +#pragma section init begin +void func_ov14_0215517c() { + func_0203e784(&ActorRupee::gType, 0x52555059, (ActorCreateFunc)ActorRupee::Create, NULL); + func_0204f8d4(&ActorRupee::gType, func_0203e7b4, &ActorRupee::gResource); + data_ov14_021589d8[7] = 0x000003bb; + data_ov14_021589d8[8] = 0x00000eeb; +} +#pragma section init end + +#pragma section pinit begin +extern "C" void* data_ov14_0215591c = func_ov14_0215517c; +#pragma section pinit end ActorRupee* ActorRupee::Create() { ActorRupee* newRupee = new(*data_027e0fe0[0], 4) ActorRupee(); return newRupee; } -// match? -ActorRupee::ActorRupee() { - mRupeeId = 8; - mUnk_15c = 0; +extern "C" asm ActorRupee* _ZN10ActorRupeeC1Ev(ActorRupee *thisx) { +#ifndef NONMATCHING + #include "../../../asm/ov14/Actor/ActorRupee_ActorRupee.inc" +#else + _ZN5ActorC2Ev(thisx); + _ZTV10ActorRupee = thisx; + thisx->mRupeeId = 8; + thisx->mUnk_15c = 0; + return thisx; +#endif } +// ActorRupee::ActorRupee() { +// mRupeeId = 8; +// mUnk_15c = 0; +// } + // https://decomp.me/scratch/1qjCc extern "C" void _ZN10ActorRupee18func_ov14_0213b204Ei(); extern "C" void _ZN10ActorRupee18func_ov14_0213b70cEj(); @@ -380,7 +417,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 u32 data_ov14_02153e28[] = { // sRupeePalettes + static const u32 data_ov14_02153e28[] = { // sRupeePalettes 0x9, // RupeeId_Green 0xA, // RupeeId_Blue 0x8, // RupeeId_Red @@ -432,4 +469,16 @@ bool ActorRupee::func_ov14_0213b70c(RupeeId id) { return false; } -ActorRupee::~ActorRupee() {} +extern "C" asm void _ZN10ActorRupeeD0Ev() { + #ifndef NONMATCHING + #include "../../../asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD0Ev.inc" + #endif +} + +extern "C" asm void _ZN10ActorRupeeD2Ev() { + #ifndef NONMATCHING + #include "../../../asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD2Ev.inc" + #endif +} + +// ActorRupee::~ActorRupee() {} From efd86d8156d3cf1cbca5bf3ba68c05dcb70b9745 Mon Sep 17 00:00:00 2001 From: Yanis42 <35189056+Yanis42@users.noreply.github.com> Date: Sun, 21 Apr 2024 01:06:46 +0200 Subject: [PATCH 06/13] more data stuff --- src/14_Land/Actor/ActorRupee.cpp | 85 ++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 38 deletions(-) diff --git a/src/14_Land/Actor/ActorRupee.cpp b/src/14_Land/Actor/ActorRupee.cpp index 40994a69..41d6b27a 100644 --- a/src/14_Land/Actor/ActorRupee.cpp +++ b/src/14_Land/Actor/ActorRupee.cpp @@ -1,17 +1,46 @@ #include "Actor/ActorRupee.hpp" #include "Item/ItemManager.hpp" -Resource ActorRupee::gResource; -ActorType ActorRupee::gType; -static char data_ov14_021589b4[] = "anc"; -static char data_ov14_021589b8[] = "bow"; -static char data_ov14_021589bc[] = "hul"; -static char data_ov14_021589c0[] = "can"; -static char data_ov14_021589c4[] = "dco"; -static char data_ov14_021589c8[] = "pdl"; -static char data_ov14_021589cc[] = "fnl"; -static char data_ov14_021589d0[] = "brg"; +extern "C" { + void func_01ff9bc4(Vec3p *a, Vec3p *b, Vec3p *sum); + u32 func_01fffd04(void*, u32); + bool func_ov00_020c313c(); + void func_ov00_0207a1c8(bool *param_1, bool 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_ov00_02083fb0(u32* param1, void* param2, Vec3p* param3); + u16 func_ov00_020c5a24(RupeeId id); // GetRupeeValue + bool func_ov00_020bce48(PlayerLinkBase* implicit, ItemId cutsceneItemId); + void func_ov00_0207a13c(Actor_UnkStruct_012* implicit); + void _ZN5ActorD2Ev(); + void _ZN9SysObjectdlEPv(); + ActorRupee* _ZN5ActorC2Ev(ActorRupee *thisx); + void _ZN10ActorRupeeD2Ev(); + void func_0203e784(ActorType *param_1, u32 type, ActorCreateFunc createFunc, void* param_4); + void func_0203e7b4(); + void func_0204f8d4(void *object, void *cleanupFunc, Resource *resource); +} + +static char data_ov14_02158998[] = "fnl"; +static char data_ov14_02158994[] = "brg"; +static char data_ov14_0215899c[] = "pdl"; +static char data_ov14_021589a0[] = "dco"; +static char data_ov14_021589a4[] = "can"; +static char data_ov14_021589a8[] = "hul"; +static char data_ov14_021589ac[] = "bow"; +static char data_ov14_021589b0[] = "anc"; + +static char* data_ov14_021589d0 = data_ov14_021589b0; +static char* data_ov14_021589cc = data_ov14_021589ac; +static char* data_ov14_021589c8 = data_ov14_021589a8; +static char* data_ov14_021589c4 = data_ov14_021589a4; +static char* data_ov14_021589c0 = data_ov14_021589a0; +static char* data_ov14_021589bc = data_ov14_0215899c; +static char* data_ov14_021589b8 = data_ov14_02158998; +static char* data_ov14_021589b4 = data_ov14_02158994; static u32 data_ov14_021589d4[] = { 0x00000000 }; @@ -21,36 +50,16 @@ static u32 data_ov14_021589d8[] = { 0x00000000, }; - -extern u32 **data_027e0fe0[]; - -extern "C" void func_01ff9bc4(Vec3p *a, Vec3p *b, Vec3p *sum); -extern "C" u32 func_01fffd04(void*, u32); -extern u32 data_ov00_020e9370[]; -extern "C" bool func_ov00_020c313c(); -extern "C" void func_ov00_0207a1c8(bool *param_1, bool param_2, Vec3p *param_3); -extern "C" void func_0202bc38(unk32 param_1, Vec3p *param_2, u32 param_3, Actor_UnkStruct_012 *param_4, bool); -extern "C" 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); -extern "C" void func_ov00_020d7ad4(u32* param1, u32 param2); -extern "C" void func_ov00_02083fb0(u32* param1, void* param2, Vec3p* param3); -extern "C" u16 func_ov00_020c5a24(RupeeId id); // GetRupeeValue -extern u32 data_ov00_020eec9c[]; -extern PlayerLinkBase *data_027e0fc8; // gPlayerLink -extern void *data_027e0e60; -extern "C" bool func_ov00_020bce48(PlayerLinkBase* implicit, ItemId cutsceneItemId); -extern "C" void func_ov00_0207a13c(Actor_UnkStruct_012* implicit); -extern "C" void _ZN5ActorD2Ev(); -extern "C" void _ZN9SysObjectdlEPv(); -extern "C" ActorRupee* _ZN5ActorC2Ev(ActorRupee *thisx); -extern "C" void _ZN10ActorRupeeD2Ev(); extern "C" void* _ZTV10ActorRupee = _ZN10ActorRupeeD2Ev; -extern "C" { - void func_0203e784(ActorType *param_1, u32 type, ActorCreateFunc createFunc, void* param_4); - void func_0203e7b4(); - void func_0204f8d4(void *object, void *cleanupFunc, Resource *resource); -} +extern u32 data_ov00_020e9370[]; +extern u32 data_ov00_020eec9c[]; +extern void *data_027e0e60; +extern PlayerLinkBase *data_027e0fc8; // gPlayerLink +extern u32 **data_027e0fe0[]; + +Resource ActorRupee::gResource; +ActorType ActorRupee::gType; #pragma section init begin void func_ov14_0215517c() { From 5f9ed124164aca86632f03f7953103d1fc409395 Mon Sep 17 00:00:00 2001 From: Yanis42 <35189056+Yanis42@users.noreply.github.com> Date: Sun, 21 Apr 2024 13:40:14 +0200 Subject: [PATCH 07/13] progress? --- include/Actor/ActorType.hpp | 10 ++++++ src/14_Land/Actor/ActorRupee.cpp | 60 ++++++++------------------------ 2 files changed, 25 insertions(+), 45 deletions(-) diff --git a/include/Actor/ActorType.hpp b/include/Actor/ActorType.hpp index 29031faf..1f1bb4d5 100644 --- a/include/Actor/ActorType.hpp +++ b/include/Actor/ActorType.hpp @@ -65,6 +65,16 @@ enum ActorTypeId_ { ActorTypeId_Postman = __ACTOR_TYPE_ID('P','S','T','M'), }; +class ActorType_UnkClass { + public: + u32 unk_00; + u32 unk_04; + u32 unk_08; + u32 unk_0C; + u32 unk_10; + ActorType_UnkClass(u32 unk_00, u32 unk_04): unk_00(unk_00), unk_04(unk_04) {} +}; + typedef Actor* (*ActorCreateFunc)(); struct ActorType { diff --git a/src/14_Land/Actor/ActorRupee.cpp b/src/14_Land/Actor/ActorRupee.cpp index 41d6b27a..a7eb3ab3 100644 --- a/src/14_Land/Actor/ActorRupee.cpp +++ b/src/14_Land/Actor/ActorRupee.cpp @@ -2,6 +2,9 @@ #include "Item/ItemManager.hpp" + +// char* data_ov14_021589b4 = *data_ov14_02158994; + extern "C" { void func_01ff9bc4(Vec3p *a, Vec3p *b, Vec3p *sum); u32 func_01fffd04(void*, u32); @@ -19,37 +22,13 @@ extern "C" { void _ZN9SysObjectdlEPv(); ActorRupee* _ZN5ActorC2Ev(ActorRupee *thisx); void _ZN10ActorRupeeD2Ev(); - void func_0203e784(ActorType *param_1, u32 type, ActorCreateFunc createFunc, void* param_4); - void func_0203e7b4(); - void func_0204f8d4(void *object, void *cleanupFunc, Resource *resource); + + u32 data_ov14_021589b4; + u32 data_ov14_021589d4; + u32 data_ov14_021589d8; } -static char data_ov14_02158998[] = "fnl"; -static char data_ov14_02158994[] = "brg"; -static char data_ov14_0215899c[] = "pdl"; -static char data_ov14_021589a0[] = "dco"; -static char data_ov14_021589a4[] = "can"; -static char data_ov14_021589a8[] = "hul"; -static char data_ov14_021589ac[] = "bow"; -static char data_ov14_021589b0[] = "anc"; - -static char* data_ov14_021589d0 = data_ov14_021589b0; -static char* data_ov14_021589cc = data_ov14_021589ac; -static char* data_ov14_021589c8 = data_ov14_021589a8; -static char* data_ov14_021589c4 = data_ov14_021589a4; -static char* data_ov14_021589c0 = data_ov14_021589a0; -static char* data_ov14_021589bc = data_ov14_0215899c; -static char* data_ov14_021589b8 = data_ov14_02158998; -static char* data_ov14_021589b4 = data_ov14_02158994; - -static u32 data_ov14_021589d4[] = { 0x00000000 }; - -static u32 data_ov14_021589d8[] = { - 0x00000000, - 0x00000000, - 0x00000000, -}; - +/* inline */ char *data_ov14_02158994[8] = { "brg", "fnl", "pdl", "dco", "can", "hul", "bow", "anc" }; // gShipParts extern "C" void* _ZTV10ActorRupee = _ZN10ActorRupeeD2Ev; extern u32 data_ov00_020e9370[]; @@ -58,21 +37,12 @@ extern void *data_027e0e60; extern PlayerLinkBase *data_027e0fc8; // gPlayerLink extern u32 **data_027e0fe0[]; -Resource ActorRupee::gResource; -ActorType ActorRupee::gType; +ActorType ActorRupee::gType = ActorType(ActorTypeId_Rupee, (ActorCreateFunc)ActorRupee::Create, NULL); +ActorType_UnkClass data_ov14_021589f4 = ActorType_UnkClass(0x3bb, 0xeeb); -#pragma section init begin -void func_ov14_0215517c() { - func_0203e784(&ActorRupee::gType, 0x52555059, (ActorCreateFunc)ActorRupee::Create, NULL); - func_0204f8d4(&ActorRupee::gType, func_0203e7b4, &ActorRupee::gResource); - data_ov14_021589d8[7] = 0x000003bb; - data_ov14_021589d8[8] = 0x00000eeb; -} -#pragma section init end - -#pragma section pinit begin -extern "C" void* data_ov14_0215591c = func_ov14_0215517c; -#pragma section pinit end +// #pragma section pinit begin +// extern "C" void* data_ov14_0215591c = func_ov14_0215517c; +// #pragma section pinit end ActorRupee* ActorRupee::Create() { ActorRupee* newRupee = new(*data_027e0fe0[0], 4) ActorRupee(); @@ -453,8 +423,8 @@ 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_021589d4[8]; // data_ov14_021589b4[8] - param2->mUnk_18 = data_ov14_021589d8[8]; // data_ov14_021589b4[9] + param2->mUnk_14 = data_ov14_021589f4.unk_00; + param2->mUnk_18 = data_ov14_021589f4.unk_04; } else { param2->mUnk_08 = 2; param2->mUnk_0c = 2; From 40a3b9d85177d30fd2f438ec3240c9f1bb258337 Mon Sep 17 00:00:00 2001 From: Aetias Date: Fri, 3 May 2024 19:21:42 +0200 Subject: [PATCH 08/13] Remangle `MapManager::func_ov00_02083fb0` --- asm/ov00/Map/MapManager.s | 8 ++++---- asm/ov00/ov00_020b1498.inc | 2 +- asm/ov00/ov00_020b1498.s | 4 ++-- asm/ov00/ov00_020c3e54.inc | 2 +- asm/ov00/ov00_020c3e54.s | 6 +++--- asm/ov05.inc | 2 +- asm/ov05.s | 4 ++-- asm/ov12.inc | 2 +- asm/ov12.s | 4 ++-- asm/ov14/ov14_0211f640.inc | 2 +- asm/ov14/ov14_0211f640.s | 10 +++++----- asm/ov17.inc | 2 +- asm/ov17.s | 4 ++-- asm/ov19.inc | 2 +- asm/ov19.s | 2 +- asm/ov23.inc | 2 +- asm/ov23.s | 4 ++-- asm/ov46.inc | 2 +- asm/ov46.s | 4 ++-- asm/ov49.inc | 2 +- asm/ov49.s | 2 +- asm/ov58.inc | 2 +- asm/ov58.s | 4 ++-- asm/ov59.inc | 2 +- asm/ov59.s | 2 +- include/Map/MapManager.hpp | 2 +- src/00_Core/Map/MapManager.cpp | 2 +- 27 files changed, 43 insertions(+), 43 deletions(-) diff --git a/asm/ov00/Map/MapManager.s b/asm/ov00/Map/MapManager.s index fe64cb25..35e4d2b4 100644 --- a/asm/ov00/Map/MapManager.s +++ b/asm/ov00/Map/MapManager.s @@ -2746,9 +2746,9 @@ _ZN10MapManager16MapData_vfunc_70Ev: ; 0x02083f98 ldmia sp!, {r3, pc} arm_func_end _ZN10MapManager16MapData_vfunc_70Ev - .global _ZN10MapManager18func_ov00_02083fb0EiPS_i - arm_func_start _ZN10MapManager18func_ov00_02083fb0EiPS_i -_ZN10MapManager18func_ov00_02083fb0EiPS_i: ; 0x02083fb0 + .global _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p + arm_func_start _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p +_ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p: ; 0x02083fb0 stmdb sp!, {r4, r5, r6, lr} mov r6, r1 mov r4, r0 @@ -2777,7 +2777,7 @@ _ZN10MapManager18func_ov00_02083fb0EiPS_i: ; 0x02083fb0 bl func_ov00_02093a1c ldmia sp!, {r4, r5, r6, pc} .align 2, 0 - arm_func_end _ZN10MapManager18func_ov00_02083fb0EiPS_i + arm_func_end _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p _0208401c: .word 0x0000ffff _02084020: .word data_027e0f6c diff --git a/asm/ov00/ov00_020b1498.inc b/asm/ov00/ov00_020b1498.inc index a9e87b3c..931f2316 100644 --- a/asm/ov00/ov00_020b1498.inc +++ b/asm/ov00/ov00_020b1498.inc @@ -20,7 +20,7 @@ .extern _ZN10MapManager18func_ov00_02083c7cEP5Vec3pi .extern _ZN10MapManager18func_ov00_02083e34Ecci .extern _ZN10MapManager18func_ov00_02083f44EP5Vec3p -.extern _ZN10MapManager18func_ov00_02083fb0EiPS_i +.extern _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p .extern _ZN10MapManager18func_ov00_020840a0Ecci .extern _ZN10MapManager18func_ov00_0208412cEv .extern _ZN10MapManager18func_ov00_02084164Ev diff --git a/asm/ov00/ov00_020b1498.s b/asm/ov00/ov00_020b1498.s index 07ecf977..02541758 100644 --- a/asm/ov00/ov00_020b1498.s +++ b/asm/ov00/ov00_020b1498.s @@ -605,7 +605,7 @@ func_ov00_020b1ba4: ; 0x020b1ba4 add r0, sp, #0 add r2, sp, #4 str r3, [sp, #0xc] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp] mov r0, r0, lsr #0x9 and r0, r0, #3 @@ -6545,7 +6545,7 @@ _020b6830: add r0, sp, #0x1c add r2, sp, #0x50 str r3, [sp, #0x58] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp, #0x1c] mov r1, r0 mov r0, r0, lsr #0x5 diff --git a/asm/ov00/ov00_020c3e54.inc b/asm/ov00/ov00_020c3e54.inc index 840dc10a..03614a14 100644 --- a/asm/ov00/ov00_020c3e54.inc +++ b/asm/ov00/ov00_020c3e54.inc @@ -14,7 +14,7 @@ .extern _ZN10MapManager18func_ov00_02083c24Ei .extern _ZN10MapManager18func_ov00_02083c50Ei .extern _ZN10MapManager18func_ov00_02083f44EP5Vec3p -.extern _ZN10MapManager18func_ov00_02083fb0EiPS_i +.extern _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p .extern _ZN10MapManager18func_ov00_020840dcEv .extern _ZN10MapManager18func_ov00_02084164Ev .extern _ZN10MapManager18func_ov00_02084838Ev diff --git a/asm/ov00/ov00_020c3e54.s b/asm/ov00/ov00_020c3e54.s index 7236a01d..7275d53e 100644 --- a/asm/ov00/ov00_020c3e54.s +++ b/asm/ov00/ov00_020c3e54.s @@ -933,7 +933,7 @@ _020c498c: str lr, [sp, #8] str ip, [sp, #0xc] str r3, [sp, #0x10] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp, #4] mov r0, r0, lsr #0x5 and r0, r0, #3 @@ -1665,7 +1665,7 @@ func_ov00_020c5288: ; 0x020c5288 ldr r3, [r5, #8] mov r1, r4 str r3, [sp, #0x10] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp, #4] mov r0, r0, lsr #0x9 and r0, r0, #3 @@ -10465,7 +10465,7 @@ func_ov00_020cc27c: ; 0x020cc27c add r0, sp, #0 add r2, sp, #4 str r3, [sp, #0xc] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp] mov r0, r0, lsr #0x5 and r0, r0, #3 diff --git a/asm/ov05.inc b/asm/ov05.inc index 901ca129..14911a36 100644 --- a/asm/ov05.inc +++ b/asm/ov05.inc @@ -18,7 +18,7 @@ .extern _ZN10MapManager18func_ov00_02083c7cEP5Vec3pi .extern _ZN10MapManager18func_ov00_02083e34Ecci .extern _ZN10MapManager18func_ov00_02083f44EP5Vec3p -.extern _ZN10MapManager18func_ov00_02083fb0EiPS_i +.extern _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p .extern _ZN10MapManager18func_ov00_020840a0Ecci .extern _ZN10MapManager18func_ov00_02084740Ev .extern _ZN10MapManager18func_ov00_020848b8Ev diff --git a/asm/ov05.s b/asm/ov05.s index cd59e77b..3d13fb75 100644 --- a/asm/ov05.s +++ b/asm/ov05.s @@ -2641,7 +2641,7 @@ _02102e24: ldr r1, [sp, #0x44] add r0, sp, #0x74 add r2, sp, #0x78 - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p add r0, sp, #0x74 bl func_ov05_02103b2c cmp r0, #2 @@ -12408,7 +12408,7 @@ _0210ae98: str r7, [sp, #0x10] str r6, [sp, #0x14] str r3, [sp, #0x18] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp, #0xc] mov r0, r0, lsr #0x5 and r0, r0, #3 diff --git a/asm/ov12.inc b/asm/ov12.inc index 0303dc97..3130d090 100644 --- a/asm/ov12.inc +++ b/asm/ov12.inc @@ -18,7 +18,7 @@ .extern _ZN10MapManager18func_ov00_02083c50Ei .extern _ZN10MapManager18func_ov00_02083e34Ecci .extern _ZN10MapManager18func_ov00_02083ef8EP5Vec3pS1_ -.extern _ZN10MapManager18func_ov00_02083fb0EiPS_i +.extern _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p .extern _ZN10MapManager18func_ov00_020840a0Ecci .extern _ZN10PlayerBase18func_ov00_020a7c00Ei .extern _ZN10PlayerBase18func_ov00_020a7c1cEP8Cylinder diff --git a/asm/ov12.s b/asm/ov12.s index 70704064..466d3f93 100644 --- a/asm/ov12.s +++ b/asm/ov12.s @@ -29082,7 +29082,7 @@ _0212a830: add r0, sp, #4 add r2, sp, #8 str r3, [sp, #0x10] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp, #4] mov r0, r0, lsr #0x9 and r0, r0, #3 @@ -34553,7 +34553,7 @@ func_ov12_0212ecb0: ; 0x0212ecb0 add r0, sp, #4 add r2, sp, #8 str r3, [sp, #0x10] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldrb r1, [sp] ldrb r0, [sp, #1] sub r2, sp, #4 diff --git a/asm/ov14/ov14_0211f640.inc b/asm/ov14/ov14_0211f640.inc index f23b93a8..92d28a72 100644 --- a/asm/ov14/ov14_0211f640.inc +++ b/asm/ov14/ov14_0211f640.inc @@ -27,7 +27,7 @@ .extern _ZN10MapManager18func_ov00_02083c50Ei .extern _ZN10MapManager18func_ov00_02083c7cEP5Vec3pi .extern _ZN10MapManager18func_ov00_02083e34Ecci -.extern _ZN10MapManager18func_ov00_02083fb0EiPS_i +.extern _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p .extern _ZN10MapManager18func_ov00_020840a0Ecci .extern _ZN10MapManager18func_ov00_020840dcEv .extern _ZN10MapManager18func_ov00_020843ecEPi diff --git a/asm/ov14/ov14_0211f640.s b/asm/ov14/ov14_0211f640.s index 21002b8b..28936275 100644 --- a/asm/ov14/ov14_0211f640.s +++ b/asm/ov14/ov14_0211f640.s @@ -6080,7 +6080,7 @@ _02124668: add r0, sp, #0x1c add r2, sp, #0x68 str r3, [sp, #0x70] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r1, [r5, #0x48] ldr r0, _02124c54 ; =gMapManager str r1, [sp, #0x5c] @@ -6318,7 +6318,7 @@ _021249a4: add r0, sp, #0x10 add r2, sp, #0x2c str r3, [sp, #0x34] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp, #0x10] mov r1, r0 mov r0, r0, lsr #0x5 @@ -31114,7 +31114,7 @@ func_ov14_02138b18: ; 0x02138b18 add r0, sp, #0xc add r2, sp, #0x1c str r3, [sp, #0x24] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp, #0xc] mov r0, r0, lsr #0x5 and r0, r0, #3 @@ -33299,7 +33299,7 @@ _0213a68c: add r0, sp, #0 add r2, sp, #0x38 str r3, [sp, #0x40] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp] mov r0, r0, lsr #0x5 and r0, r0, #3 @@ -33681,7 +33681,7 @@ _0213ab94: add r0, sp, #0 add r2, sp, #4 str r3, [sp, #0xc] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp] mov r0, r0, lsr #0x5 and r0, r0, #3 diff --git a/asm/ov17.inc b/asm/ov17.inc index c8e656d3..c17f45de 100644 --- a/asm/ov17.inc +++ b/asm/ov17.inc @@ -250,7 +250,7 @@ .extern _ZN10MapManager18func_ov00_02083c50Ei .extern _ZN10MapManager16MapData_vfunc_68Ev .extern _ZN10MapManager18func_ov00_02083f44EP5Vec3p -.extern _ZN10MapManager18func_ov00_02083fb0EiPS_i +.extern _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p .extern _ZN10MapManager18func_ov00_020840a0Ecci .extern _ZN10MapManager16MapData_vfunc_78Ev .extern _ZN10MapManager18func_ov00_020843ecEPi diff --git a/asm/ov17.s b/asm/ov17.s index cb50764d..458afc1a 100644 --- a/asm/ov17.s +++ b/asm/ov17.s @@ -6940,7 +6940,7 @@ _02160b10: add r0, sp, #4 add r2, sp, #0x14 str r3, [sp, #0x1c] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp, #4] mov r0, r0, lsr #0x5 and r0, r0, #3 @@ -7012,7 +7012,7 @@ _02160c28: add r0, sp, #0 add r2, sp, #8 str r3, [sp, #0x10] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp] mov r0, r0, lsr #0x5 and r0, r0, #3 diff --git a/asm/ov19.inc b/asm/ov19.inc index 7d8152e9..b05b0aba 100644 --- a/asm/ov19.inc +++ b/asm/ov19.inc @@ -7,7 +7,7 @@ .extern _ZN10MapManager18func_ov00_02083770Eji .extern _ZN10MapManager18func_ov00_02083780Ei .extern _ZN10MapManager18func_ov00_02083a1cEiPS_P5Vec3p -.extern _ZN10MapManager18func_ov00_02083fb0EiPS_i +.extern _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p .extern _ZN10MapManager18func_ov00_02084d24Ecci .extern _ZN10PlayerBase10SetVisibleEb .extern _ZN10PlayerBase18func_ov00_020a7c1cEP8Cylinder diff --git a/asm/ov19.s b/asm/ov19.s index 627744b2..dc799a3d 100644 --- a/asm/ov19.s +++ b/asm/ov19.s @@ -5462,7 +5462,7 @@ func_ov19_02171e64: ; 0x02171e64 add r0, sp, #0 add r2, sp, #4 str r3, [sp, #0xc] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp] mov r0, r0, lsr #0x5 and r0, r0, #3 diff --git a/asm/ov23.inc b/asm/ov23.inc index 694a2f3f..1281e283 100644 --- a/asm/ov23.inc +++ b/asm/ov23.inc @@ -18,7 +18,7 @@ .extern _ZN10MapManager18func_ov00_02083c24Ei .extern _ZN10MapManager18func_ov00_02083c50Ei .extern _ZN10MapManager18func_ov00_02083c7cEP5Vec3pi -.extern _ZN10MapManager18func_ov00_02083fb0EiPS_i +.extern _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p .extern _ZN10MapManager18func_ov00_020840a0Ecci .extern _ZN10MapManager18func_ov00_02084740Ev .extern _ZN10MapManager18func_ov00_02084b38Eiii diff --git a/asm/ov23.s b/asm/ov23.s index 4e6986ee..e15ccc20 100644 --- a/asm/ov23.s +++ b/asm/ov23.s @@ -13756,7 +13756,7 @@ _02178b10: ldr r1, [r1] add r0, sp, #0x10 mov r2, r4 - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp, #0x10] mov r0, r0, lsr #0x5 and r0, r0, #3 @@ -13902,7 +13902,7 @@ _02178de8: ldr r1, [r1] add r0, sp, #0xc add r2, sp, #0x20 - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp, #0xc] mov r0, r0, lsr #0x5 and r0, r0, #3 diff --git a/asm/ov46.inc b/asm/ov46.inc index 094317f1..0757fbcc 100644 --- a/asm/ov46.inc +++ b/asm/ov46.inc @@ -2,7 +2,7 @@ .extern Approach_thunk .extern _ZN10MapManager16MapData_vfunc_78Ev .extern _ZN10MapManager18func_ov00_02083a1cEiPS_P5Vec3p -.extern _ZN10MapManager18func_ov00_02083fb0EiPS_i +.extern _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p .extern _ZN11ItemManager10GiveRupeesEsb .extern _ZN11ItemManager16SetTreasureCountEjc .extern _ZN12ActorManager15FindActorByTypeEP8ActorRefPS_j diff --git a/asm/ov46.s b/asm/ov46.s index 58abc6f7..5f34693d 100644 --- a/asm/ov46.s +++ b/asm/ov46.s @@ -60,7 +60,7 @@ _021900d8: ldr r3, [r6, #8] mov r1, r5 str r3, [sp, #0x10] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp, #4] and r0, r0, #0x1f cmp r0, #0xe @@ -783,7 +783,7 @@ _02190a10: ldr r3, [r6, #8] mov r1, r5 str r3, [sp, #0x10] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp, #4] and r0, r0, #0x1f cmp r0, #0xe diff --git a/asm/ov49.inc b/asm/ov49.inc index 7ff8c456..7e7d2899 100644 --- a/asm/ov49.inc +++ b/asm/ov49.inc @@ -122,7 +122,7 @@ .extern _ZN10MapManager18func_ov00_020839b4Ei .extern _ZN10MapManager18func_ov00_020839c4Ei .extern _ZN10MapManager16MapData_vfunc_68Ev -.extern _ZN10MapManager18func_ov00_02083fb0EiPS_i +.extern _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p .extern func_ov00_02088000 .extern func_ov00_02094824 .extern func_ov00_0209a4f4 diff --git a/asm/ov49.s b/asm/ov49.s index cdf531cb..df8173e8 100644 --- a/asm/ov49.s +++ b/asm/ov49.s @@ -2661,7 +2661,7 @@ _021978a8: add r0, sp, #0 add r2, sp, #4 str r3, [sp, #0xc] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp] mov r0, r0, lsr #0x5 and r0, r0, #3 diff --git a/asm/ov58.inc b/asm/ov58.inc index 4ce7c74e..58fadba3 100644 --- a/asm/ov58.inc +++ b/asm/ov58.inc @@ -78,7 +78,7 @@ .extern _ZN10MapManager16MapData_vfunc_68Ev .extern _ZN10MapManager18func_ov00_02083f44EP5Vec3p .extern _ZN10MapManager16MapData_vfunc_6cEv -.extern _ZN10MapManager18func_ov00_02083fb0EiPS_i +.extern _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p .extern _ZN10MapManager16MapData_vfunc_54Ev .extern _ZN10MapManager18func_ov00_020840dcEv .extern _ZN10MapManager18func_ov00_0208499cEv diff --git a/asm/ov58.s b/asm/ov58.s index 33b2e70a..f61c67cf 100644 --- a/asm/ov58.s +++ b/asm/ov58.s @@ -1881,7 +1881,7 @@ _02199d50: add r0, sp, #0x60 ldr r1, [r1] add r2, r7, #0 - blx _ZN10MapManager18func_ov00_02083fb0EiPS_i + blx _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r1, [sp, #0x60] ldr r0, [sp, #0x60] lsr r2, r1, #5 @@ -2014,7 +2014,7 @@ _02199e54: add r2, sp, #0x74 str r0, [sp, #0x7c] add r0, sp, #0x5c - blx _ZN10MapManager18func_ov00_02083fb0EiPS_i + blx _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p ldr r0, [sp, #0x5c] ldr r2, [sp, #0x5c] lsr r1, r0, #5 diff --git a/asm/ov59.inc b/asm/ov59.inc index b1008d20..555e07f5 100644 --- a/asm/ov59.inc +++ b/asm/ov59.inc @@ -1,6 +1,6 @@ #pragma once .extern _ZN10MapManager16MapData_vfunc_68Ev -.extern _ZN10MapManager18func_ov00_02083fb0EiPS_i +.extern _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p .extern _ZN10MapManager18func_ov00_020858b0Ev .extern _ZN12ActorManager15FindActorByTypeEP8ActorRefPS_j .extern _ZN12ActorManager8GetActorEP8ActorRef diff --git a/asm/ov59.s b/asm/ov59.s index 894f00e9..688da49e 100644 --- a/asm/ov59.s +++ b/asm/ov59.s @@ -982,7 +982,7 @@ _02199968: str r6, [sp, #0x38] str r5, [sp, #0x64] str r5, [sp, #0x40] - bl _ZN10MapManager18func_ov00_02083fb0EiPS_i + bl _ZN10MapManager18func_ov00_02083fb0EPjPS_P5Vec3p bl func_ov59_02198e2c ldrb r1, [r0, #0x27] mov r2, #0 diff --git a/include/Map/MapManager.hpp b/include/Map/MapManager.hpp index e773ef19..632b9e25 100644 --- a/include/Map/MapManager.hpp +++ b/include/Map/MapManager.hpp @@ -171,7 +171,7 @@ public: void func_ov00_02083f44(Vec3p *param_2); unk8 MapData_vfunc_6c(); unk8 MapData_vfunc_70(); - static unk8 func_ov00_02083fb0(unk32 param_1, MapManager *param_2, unk32 param_3); + static unk8 func_ov00_02083fb0(u32 *param_1, MapManager *param_2, Vec3p *param_3); void func_ov00_02084024(unk32 param_2, AABB *param_3); unk8 MapData_vfunc_54(); unk8 func_ov00_020840a0(unk8 param_2, unk8 param_3, unk32 param_4); diff --git a/src/00_Core/Map/MapManager.cpp b/src/00_Core/Map/MapManager.cpp index 802043ac..409dc9bd 100644 --- a/src/00_Core/Map/MapManager.cpp +++ b/src/00_Core/Map/MapManager.cpp @@ -133,7 +133,7 @@ void MapManager::func_ov00_02083ef8(Vec3p *param_2, Vec3p *param_3) {} void MapManager::func_ov00_02083f44(Vec3p *param_2) {} unk8 MapManager::MapData_vfunc_6c() {} unk8 MapManager::MapData_vfunc_70() {} -unk8 MapManager::func_ov00_02083fb0(unk32 param_1, MapManager *param_2, unk32 param_3) {} +unk8 MapManager::func_ov00_02083fb0(u32 *param_1, MapManager *param_2, Vec3p *param_3) {} void MapManager::func_ov00_02084024(unk32 param_2, AABB *param_3) {} unk8 MapManager::MapData_vfunc_54() {} unk8 MapManager::func_ov00_020840a0(unk8 param_2, unk8 param_3, unk32 param_4) {} From 8977783337f6b2407fbcd36c7337ec63343d6898 Mon Sep 17 00:00:00 2001 From: Aetias Date: Fri, 3 May 2024 19:22:24 +0200 Subject: [PATCH 09/13] Use demangled funcs --- src/14_Land/Actor/ActorRupee.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/14_Land/Actor/ActorRupee.cpp b/src/14_Land/Actor/ActorRupee.cpp index a7eb3ab3..4ccd230f 100644 --- a/src/14_Land/Actor/ActorRupee.cpp +++ b/src/14_Land/Actor/ActorRupee.cpp @@ -1,5 +1,6 @@ #include "Actor/ActorRupee.hpp" #include "Item/ItemManager.hpp" +#include "Map/MapManager.hpp" @@ -14,7 +15,6 @@ extern "C" { 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_ov00_02083fb0(u32* param1, void* param2, Vec3p* param3); u16 func_ov00_020c5a24(RupeeId id); // GetRupeeValue bool func_ov00_020bce48(PlayerLinkBase* implicit, ItemId cutsceneItemId); void func_ov00_0207a13c(Actor_UnkStruct_012* implicit); @@ -33,7 +33,6 @@ extern "C" void* _ZTV10ActorRupee = _ZN10ActorRupeeD2Ev; extern u32 data_ov00_020e9370[]; extern u32 data_ov00_020eec9c[]; -extern void *data_027e0e60; extern PlayerLinkBase *data_027e0fc8; // gPlayerLink extern u32 **data_027e0fe0[]; @@ -267,7 +266,7 @@ void ActorRupee::func_ov14_0213b204(unk32 param1) { mUnk_130 = param1; } -extern "C" void _ZN11ItemManager10GiveRupeesEjj(ItemManager* implicit, u16 amount, unk32 param2); +extern "C" void _ZN11ItemManager10GiveRupeesEsb(ItemManager* implicit, u16 amount, unk32 param2); void ActorRupee::Update(bool param1) { ItemId cutsceneItemId; s32 uVar3; @@ -290,8 +289,7 @@ void ActorRupee::Update(bool param1) { } else { ItemManager* pItem = gItemManager; rupeeValue = func_ov00_020c5a24(mRupeeId); - _ZN11ItemManager10GiveRupeesEjj(pItem, rupeeValue, false); // GiveRupees - // pItem->GiveRupees(rupeeValue, false); // giverupees + pItem->GiveRupees(rupeeValue, false); // giverupees uVar3 = -1; switch (mRupeeId) { @@ -326,7 +324,7 @@ void ActorRupee::Update(bool param1) { Move(); if (mUnk_111) { local_1c = mPos; - func_ov00_02083fb0(&local_20, data_027e0e60, &local_1c); + MapManager::func_ov00_02083fb0(&local_20, gMapManager, &local_1c); if (((local_20 >> 5) & 3) == 2) { Kill(); } else { From 8181d30b8731685395f7499117648413ae3898a3 Mon Sep 17 00:00:00 2001 From: Aetias Date: Sat, 19 Oct 2024 13:38:06 +0200 Subject: [PATCH 10/13] Remove nonmatching functions --- asm/ov14/Actor/ActorRupee_ActorRupee.inc | 13 -- .../Actor/ActorRupee__ZN10ActorRupeeD0Ev.inc | 8 - .../Actor/ActorRupee__ZN10ActorRupeeD2Ev.inc | 6 - asm/ov14/Actor/ActorRupee_vfunc_08.inc | 149 ------------------ src/14_Land/Actor/ActorRupee.cpp | 22 +-- 5 files changed, 3 insertions(+), 195 deletions(-) delete mode 100644 asm/ov14/Actor/ActorRupee_ActorRupee.inc delete mode 100644 asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD0Ev.inc delete mode 100644 asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD2Ev.inc delete mode 100644 asm/ov14/Actor/ActorRupee_vfunc_08.inc diff --git a/asm/ov14/Actor/ActorRupee_ActorRupee.inc b/asm/ov14/Actor/ActorRupee_ActorRupee.inc deleted file mode 100644 index 1d2d92ba..00000000 --- a/asm/ov14/Actor/ActorRupee_ActorRupee.inc +++ /dev/null @@ -1,13 +0,0 @@ - - stmdb sp!, {r4, lr} - mov r4, r0 - bl _ZN5ActorC2Ev - lda r1, _ZTV10ActorRupee - mov r0, #8 - str r1, [r4] - str r0, [r4, #0x158] - add r1, r4, #0x100 - mov r2, #0 - mov r0, r4 - strh r2, [r1, #0x5c] - ldmia sp!, {r4, pc} diff --git a/asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD0Ev.inc b/asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD0Ev.inc deleted file mode 100644 index c5f964ba..00000000 --- a/asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD0Ev.inc +++ /dev/null @@ -1,8 +0,0 @@ - - stmdb sp!, {r4, lr} - mov r4, r0 - bl _ZN5ActorD2Ev - mov r0, r4 - bl _ZN9SysObjectdlEPv - mov r0, r4 - ldmia sp!, {r4, pc} diff --git a/asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD2Ev.inc b/asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD2Ev.inc deleted file mode 100644 index 642af1ea..00000000 --- a/asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD2Ev.inc +++ /dev/null @@ -1,6 +0,0 @@ - - stmdb sp!, {r4, lr} - mov r4, r0 - bl _ZN5ActorD2Ev - mov r0, r4 - ldmia sp!, {r4, pc} diff --git a/asm/ov14/Actor/ActorRupee_vfunc_08.inc b/asm/ov14/Actor/ActorRupee_vfunc_08.inc deleted file mode 100644 index d54665af..00000000 --- a/asm/ov14/Actor/ActorRupee_vfunc_08.inc +++ /dev/null @@ -1,149 +0,0 @@ - - stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, r10, r11, lr} - sub sp, sp, #0x18 - mov r4, r0 - ldrh r0, [r4, #0x20] - str r0, [r4, #0x158] - bl _ZN10ActorRupee18func_ov14_0213b70cEj - cmp r0, #0 - lda r0, data_ov14_021589b4 - mov r2, #0 - ldrne r0, [r0, #0x24] - str r2, [r4, #0x7c] - ldconst r0, #0x00000aa8 - mov r5, r0, asr #0x1 - str r5, [r4, #0x80] - str r2, [r4, #0x84] - str r5, [r4, #0x88] - ldr r1, [r4, #0x7c] - add r0, r5, #0x1000 - str r1, [r4, #0x8c] - ldr r3, [r4, #0x80] - mov r1, #1 - str r3, [r4, #0x90] - ldr r3, [r4, #0x84] - str r3, [r4, #0x94] - ldr r3, [r4, #0x88] - str r3, [r4, #0x98] - str r2, [r4, #0xa8] - str r5, [r4, #0xac] - str r2, [r4, #0xb0] - str r0, [r4, #0xb4] - ldrh r0, [r4, #0x9c] - bic r0, r0, #0xb0 - strh r0, [r4, #0x9c] - strb r1, [r4, #0x9f] - ldr r0, [r4, #0x98] - sub r0, r0, #1 - str r0, [r4, #0x70] - ldr r0, [r4, #0x3c] - cmp r0, #0 - blt _0213af78 - mov r0, r4 - bl _ZN10ActorRupee18func_ov14_0213b204Ei - b _0213b0f4 -_0213af78: - ldr r0, [r4, #0x144] - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _0213b0f4 -_0213af88: - b _0213af98 // case 0 - b _0213afb4 // case 1 - b _0213b0c8 // case 2 - b _0213b0e8 // case 3 -_0213af98: - str r2, [r4, #0x60] - str r2, [r4, #0x64] - mov r0, r4 - mov r1, r2 - str r2, [r4, #0x68] - bl _ZN10ActorRupee18func_ov14_0213b204Ei - b _0213b0f4 -_0213afb4: - lda r0, data_027e0764 - mvn ip, #0x110 - ldr r5, [r0] - ldmib r0, {r3, r7} - umull r9, r0, r7, r5 - mla r0, r7, r3, r0 - lda r3, data_027e0764 - ldr r8, [r3, #0x10] - ldr r6, [r3, #0xc] - adds r10, r8, r9 - ldr r11, [r3, #0x14] - mla r0, r6, r5, r0 - umull r3, lr, r7, r10 - adc r9, r11, r0 - adds r0, r8, r3 - str r0, [sp, #0x14] - lda r0, data_027e0764 - mla lr, r7, r9, lr - str r10, [r0] - ldr r3, [sp, #0x14] - str r9, [r0, #4] - str r3, [r0] - rsb r0, r1, #0x224 - str r0, [sp, #0x10] - umull r0, r5, r9, r0 - str r0, [sp, #4] - mla r5, r9, r2, r5 - mla lr, r6, r10, lr - ldr r0, [sp, #0x10] - mov r3, r2 - mla r5, r3, r0, r5 - add r0, r5, ip - str r0, [sp] - ldr r5, [sp, #0x14] - lda r0, data_027e0764 - adc r9, r11, lr - umull r10, r5, r7, r5 - mla r5, r7, r9, r5 - ldr r7, [sp, #0x14] - rsb r1, r1, #0x334 - str r9, [r0, #4] - umull r0, r3, r9, r1 - mla r5, r6, r7, r5 - mov r6, r10 - adds r6, r8, r6 - adc r7, r11, r5 - lda r5, data_027e0764 - mla r3, r9, r2, r3 - mov r0, r2 - mla r3, r0, r1, r3 - add r0, r3, #0x55 - add r0, r0, #0x500 - str r0, [sp, #8] - add r3, ip, #0x334 - stmia r5, {r6, r7} - umull r5, r6, r7, r3 - mla r6, r7, r2, r6 - mla r6, r2, r3, r6 - mov r1, r2 - add r2, r6, ip - str r2, [r4, #0x60] - ldr r2, [sp, #8] - mov r0, r4 - str r2, [r4, #0x64] - ldr r2, [sp] - str r10, [sp, #0xc] - str r2, [r4, #0x68] - bl _ZN10ActorRupee18func_ov14_0213b204Ei - b _0213b0f4 -_0213b0c8: - str r2, [r4, #0x60] - mov r0, #0x800 - str r0, [r4, #0x64] - mov r0, r4 - mov r1, r2 - str r2, [r4, #0x68] - bl _ZN10ActorRupee18func_ov14_0213b204Ei - b _0213b0f4 -_0213b0e8: - mov r0, r4 - mov r1, #5 - bl _ZN10ActorRupee18func_ov14_0213b204Ei -_0213b0f4: - mov r0, #1 - add sp, sp, #0x18 - ldmia sp!, {r3, r4, r5, r6, r7, r8, r9, r10, r11, pc} diff --git a/src/14_Land/Actor/ActorRupee.cpp b/src/14_Land/Actor/ActorRupee.cpp index 5f55847f..c4add821 100644 --- a/src/14_Land/Actor/ActorRupee.cpp +++ b/src/14_Land/Actor/ActorRupee.cpp @@ -47,15 +47,11 @@ ActorRupee *ActorRupee::Create() { } extern "C" asm ActorRupee *_ZN10ActorRupeeC1Ev(ActorRupee *thisx) { -#ifndef NONMATCHING - #include "../../../asm/ov14/Actor/ActorRupee_ActorRupee.inc" -#else _ZN5ActorC2Ev(thisx); _ZTV10ActorRupee = thisx; thisx->mRupeeId = 8; thisx->mUnk_15c = 0; return thisx; -#endif } // ActorRupee::ActorRupee() { @@ -72,10 +68,7 @@ extern "C" void _ZN10ActorRupee8vfunc_20Ei(); extern "C" void _ZN10ActorRupee8vfunc_60Ev(); extern "C" void _ZN10ActorRupee8vfunc_64Ev(); extern "C" u32 data_027e0764[]; -bool NONMATCH(ActorRupee::vfunc_08)() { -#ifndef NONMATCHING - #include "../../../asm/ov14/Actor/ActorRupee_vfunc_08.inc" -#else +bool ActorRupee::vfunc_08() { u32 *puVar2; // undefined u32 uVar4; u32 dVar5; @@ -168,7 +161,6 @@ bool NONMATCH(ActorRupee::vfunc_08)() { } return true; -#endif } bool ActorRupee::vfunc_60() { @@ -411,16 +403,8 @@ bool ActorRupee::func_ov14_0213b70c(RupeeId id) { return false; } -extern "C" asm void _ZN10ActorRupeeD0Ev() { -#ifndef NONMATCHING - #include "../../../asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD0Ev.inc" -#endif -} +extern "C" asm void _ZN10ActorRupeeD0Ev() {} -extern "C" asm void _ZN10ActorRupeeD2Ev() { -#ifndef NONMATCHING - #include "../../../asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD2Ev.inc" -#endif -} +extern "C" asm void _ZN10ActorRupeeD2Ev() {} // ActorRupee::~ActorRupee() {} From fb9d00b87f47a043b1f4a314be6607085947d3c8 Mon Sep 17 00:00:00 2001 From: Aetias Date: Sun, 20 Oct 2024 10:39:09 +0200 Subject: [PATCH 11/13] Fix build; add RNG code --- config/eur/arm9/dtcm/symbols.txt | 2 +- config/usa/arm9/dtcm/symbols.txt | 2 +- include/Actor/Actor.hpp | 2 + include/System/Random.hpp | 22 +++++++++ src/14_Land/Actor/ActorRupee.cpp | 77 +++++++++----------------------- 5 files changed, 46 insertions(+), 59 deletions(-) create mode 100644 include/System/Random.hpp diff --git a/config/eur/arm9/dtcm/symbols.txt b/config/eur/arm9/dtcm/symbols.txt index 1744f8f5..42ca4f97 100644 --- a/config/eur/arm9/dtcm/symbols.txt +++ b/config/eur/arm9/dtcm/symbols.txt @@ -73,7 +73,7 @@ data_027e06d8 kind:bss addr:0x27e06d8 data_027e06e4 kind:bss addr:0x27e06e4 data_027e0718 kind:bss addr:0x27e0718 data_027e071c kind:bss addr:0x27e071c -data_027e0764 kind:bss addr:0x27e0764 +gRandom kind:bss addr:0x27e0764 data_027e077c kind:bss addr:0x27e077c data_027e080c kind:bss addr:0x27e080c data_027e081c kind:bss addr:0x27e081c diff --git a/config/usa/arm9/dtcm/symbols.txt b/config/usa/arm9/dtcm/symbols.txt index 1744f8f5..42ca4f97 100644 --- a/config/usa/arm9/dtcm/symbols.txt +++ b/config/usa/arm9/dtcm/symbols.txt @@ -73,7 +73,7 @@ data_027e06d8 kind:bss addr:0x27e06d8 data_027e06e4 kind:bss addr:0x27e06e4 data_027e0718 kind:bss addr:0x27e0718 data_027e071c kind:bss addr:0x27e071c -data_027e0764 kind:bss addr:0x27e0764 +gRandom kind:bss addr:0x27e0764 data_027e077c kind:bss addr:0x27e077c data_027e080c kind:bss addr:0x27e080c data_027e081c kind:bss addr:0x27e081c diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp index ee9737c0..1063bf76 100644 --- a/include/Actor/Actor.hpp +++ b/include/Actor/Actor.hpp @@ -26,6 +26,8 @@ struct Actor_UnkStruct_012 { /* 14 */ u32 mUnk_14; /* 18 */ u32 mUnk_18; /* 1c */ + + Actor_UnkStruct_012(); }; struct Actor_UnkStruct_020 { diff --git a/include/System/Random.hpp b/include/System/Random.hpp new file mode 100644 index 00000000..4506466d --- /dev/null +++ b/include/System/Random.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include "global.h" +#include "types.h" + +struct Random { + /* 00 */ u64 mRandomValue; + /* 08 */ u64 mFactor; + /* 10 */ u64 mAddend; + /* 18 */ + + /** + * Generate a random number from 0 (inclusive) to `max` (exclusive) + */ + inline u32 Next(u32 max) { + mRandomValue = mAddend + mFactor * mRandomValue; + u64 result = (mRandomValue >> 32) * max; + return result >> 32; + } +}; + +extern Random *gRandom; diff --git a/src/14_Land/Actor/ActorRupee.cpp b/src/14_Land/Actor/ActorRupee.cpp index c4add821..091202b6 100644 --- a/src/14_Land/Actor/ActorRupee.cpp +++ b/src/14_Land/Actor/ActorRupee.cpp @@ -1,6 +1,7 @@ #include "Actor/ActorRupee.hpp" #include "Item/ItemManager.hpp" #include "Map/MapManager.hpp" +#include "System/Random.hpp" // char* data_ov14_021589b4 = *data_ov14_02158994; @@ -23,7 +24,7 @@ extern "C" { u32 data_ov14_021589b4; u32 data_ov14_021589d4; - u32 data_ov14_021589d8; + u32 *data_ov14_021589d8; } /* inline */ char *data_ov14_02158994[8] = {"brg", "fnl", "pdl", "dco", "can", "hul", "bow", "anc"}; // gShipParts @@ -46,13 +47,13 @@ ActorRupee *ActorRupee::Create() { return newRupee; } -extern "C" asm ActorRupee *_ZN10ActorRupeeC1Ev(ActorRupee *thisx) { - _ZN5ActorC2Ev(thisx); - _ZTV10ActorRupee = thisx; - thisx->mRupeeId = 8; - thisx->mUnk_15c = 0; - return thisx; -} +// extern "C" asm ActorRupee *_ZN10ActorRupeeC1Ev(ActorRupee *thisx) { +// _ZN5ActorC2Ev(thisx); +// _ZTV10ActorRupee = thisx; +// thisx->mRupeeId = 8; +// thisx->mUnk_15c = 0; +// return thisx; +// } // ActorRupee::ActorRupee() { // mRupeeId = 8; @@ -60,6 +61,7 @@ extern "C" asm ActorRupee *_ZN10ActorRupeeC1Ev(ActorRupee *thisx) { // } // https://decomp.me/scratch/1qjCc +#define FP_1(n) (u64)((n) << 0x800) extern "C" void _ZN10ActorRupee18func_ov14_0213b204Ei(); extern "C" void _ZN10ActorRupee18func_ov14_0213b70cEj(); extern "C" void _ZN10ActorRupee8vfunc_14Ei(); @@ -67,22 +69,13 @@ extern "C" void _ZN10ActorRupee8vfunc_18Ej(); extern "C" void _ZN10ActorRupee8vfunc_20Ei(); extern "C" void _ZN10ActorRupee8vfunc_60Ev(); extern "C" void _ZN10ActorRupee8vfunc_64Ev(); -extern "C" u32 data_027e0764[]; bool ActorRupee::vfunc_08() { - u32 *puVar2; // undefined - u32 uVar4; u32 dVar5; - u32 uVar6; u32 iVar7; - u32 uVar8; - u32 uVar9; - u32 uVar10; - u32 uVar11; - u32 iVar12; mRupeeId = mUnk_020.mUnk_00[0]; - dVar5 = func_ov14_0213b70c(mRupeeId) ? data_ov14_021589d8[0] : FLOAT_TO_Q20(0.666); + dVar5 = func_ov14_0213b70c(mRupeeId) ? *data_ov14_021589d8 : FLOAT_TO_Q20(0.666); iVar7 = (s32) dVar5 >> 1; mHitbox.pos.x = 0; @@ -99,8 +92,6 @@ bool ActorRupee::vfunc_08() { mUnk_09c.mUnk_3 = 1; mMaxFall = mUnk_08c.size - 1; - puVar2 = data_027e0764; - if (mUnk_03c >= 0) { func_ov14_0213b204(1); } else { @@ -112,42 +103,14 @@ bool ActorRupee::vfunc_08() { func_ov14_0213b204(0); break; case 1: - uVar8 = PTR_DWORD_overlay_d_14__0213b108[8]; - uVar4 = PTR_DWORD_overlay_d_14__0213b108[uVar8]; + q20 x = gRandom->Next(FLOAT_TO_Q20(0.1335)); + q20 y = gRandom->Next(FLOAT_TO_Q20(0.2)); + q20 z = gRandom->Next(FLOAT_TO_Q20(0.1335)); - uVar9 = PTR_DWORD_overlay_d_14__0213b108[16]; - iVar7 = PTR_DWORD_overlay_d_14__0213b108[12]; - uVar11 = uVar9 + uVar4; + mVel.x = x - FLOAT_TO_Q20(0.0666); + mVel.y = y + FLOAT_TO_Q20(0.3333); + mVel.z = z - FLOAT_TO_Q20(0.0666); - iVar12 = PTR_DWORD_overlay_d_14__0213b108[20]; - uVar6 = (u64) uVar11 * (u64) uVar8; - uVar10 = (iVar12 + (iVar7 * PTR_DWORD_overlay_d_14__0213b108[0]) + - (uVar8 * PTR_DWORD_overlay_d_14__0213b108[4]) + ((uVar4) >> 0x20) - // + CARRY4(uVar9, uVar4) - ); - - uVar4 = uVar9 + uVar6; - PTR_DWORD_overlay_d_14__0213b108[0] = uVar11; - puVar2[4] = uVar10; - - puVar2[0] = uVar4; - uVar6 = (iVar12 + (iVar7 * uVar11) + (uVar8 * uVar10) + ((u64) uVar11 * (FP_1(uVar8) >> 0x20)) - // + CARRY4(uVar9, uVar6) - ); - uVar11 = uVar4 * uVar8; - - PTR_DWORD_overlay_d_14__0213b108[4] = uVar6; - puVar2 = PTR_DWORD_overlay_d_14__0213b108; - uVar4 = (iVar12 + (iVar7 * uVar4) + (uVar8 * uVar6) + ((u64) uVar4 * (FP_1(uVar8) >> 0x20)) - // + CARRY4(uVar9, uVar11) - ); - - PTR_DWORD_overlay_d_14__0213b108[0] = uVar9 + uVar11; - puVar2[4] = uVar4; - - mVel.x = (s32) ((u64) uVar4 * FLOAT_TO_Q20(0.1335) >> 0x20) - FLOAT_TO_Q20(0.0666); - mVel.y = (s32) ((u64) uVar6 * FLOAT_TO_Q20(0.2) >> 0x20) + FLOAT_TO_Q20(0.3333); - mVel.z = (s32) ((u64) uVar10 * FLOAT_TO_Q20(0.1335) >> 0x20) - FLOAT_TO_Q20(0.0666); func_ov14_0213b204(0); break; case 2: @@ -177,14 +140,14 @@ void ActorRupee::Move() { mUnk_09c.mUnk_3 = 1; size = mMaxFall = mUnk_08c.size - 1; - size += mUnk_018; + size += mUnk_014.y; if (size < mPos.y) { mUnk_09c.mUnk_0 = 0x49; } else { mUnk_09c.mUnk_0 = 0xcb; } - if (func_01fffd04(this, 0)) { + if (this->func_01fffd04(0)) { mVel.x = 0; mVel.z = 0; } @@ -353,7 +316,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[] = { - // sRupeePalettes + // sRupeePalettes 0x9, // RupeeId_Green 0xA, // RupeeId_Blue 0x8, // RupeeId_Red From 29d76fbe45f6e88d345975f548433281bccaae40 Mon Sep 17 00:00:00 2001 From: Aetias Date: Sun, 20 Oct 2024 12:36:47 +0200 Subject: [PATCH 12/13] Decomp `ActorRupee` --- config/eur/arm9/overlays/ov000/symbols.txt | 2 +- config/eur/arm9/overlays/ov014/relocs.txt | 2 +- config/eur/arm9/overlays/ov014/symbols.txt | 10 +-- config/usa/arm9/overlays/ov000/symbols.txt | 2 +- config/usa/arm9/overlays/ov014/relocs.txt | 2 +- config/usa/arm9/overlays/ov014/symbols.txt | 10 +-- include/Actor/Actor.hpp | 2 +- include/Actor/ActorRupee.hpp | 4 +- src/14_Land/Actor/ActorRupee.cpp | 76 ++++++---------------- 9 files changed, 39 insertions(+), 71 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 65e60aea..c71ab32a 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -2920,7 +2920,7 @@ func_ov000_020c56d8 kind:function(arm,size=0x9c) addr:0x20c56d8 func_ov000_020c5774 kind:function(arm,size=0x88) addr:0x20c5774 func_ov000_020c57fc kind:function(arm,size=0x128) addr:0x20c57fc func_ov000_020c5924 kind:function(arm,size=0x100) addr:0x20c5924 -func_ov000_020c5a24 kind:function(arm,size=0x38) addr:0x20c5a24 +_Z13GetRupeeValuej kind:function(arm,size=0x38) addr:0x20c5a24 func_ov000_020c5a5c kind:function(arm,size=0xd8) addr:0x20c5a5c func_ov000_020c5b34 kind:function(arm,size=0xb8) addr:0x20c5b34 func_ov000_020c5bec kind:function(arm,size=0x40) addr:0x20c5bec diff --git a/config/eur/arm9/overlays/ov014/relocs.txt b/config/eur/arm9/overlays/ov014/relocs.txt index dd7bc1cb..2893de9a 100644 --- a/config/eur/arm9/overlays/ov014/relocs.txt +++ b/config/eur/arm9/overlays/ov014/relocs.txt @@ -3214,7 +3214,7 @@ from:0x0213ae80 kind:arm_call to:0x0202e9dc module:main from:0x0213ae8c kind:arm_call to:0x0213ae98 module:overlay(14) from:0x0213ae94 kind:load to:0x027e0fe0 module:dtcm from:0x0213aea0 kind:arm_call to:0x020c1554 module:overlay(0) -from:0x0213aec8 kind:load to:0x021589e4 module:overlay(14) +from:0x0213aec8 kind:load to:0x021589dc add:8 module:overlay(14) from:0x0213aee0 kind:arm_call to:0x0213b70c module:overlay(14) from:0x0213af70 kind:arm_call to:0x0213b204 module:overlay(14) from:0x0213afac kind:arm_call to:0x0213b204 module:overlay(14) diff --git a/config/eur/arm9/overlays/ov014/symbols.txt b/config/eur/arm9/overlays/ov014/symbols.txt index 27b5de82..921e70c8 100644 --- a/config/eur/arm9/overlays/ov014/symbols.txt +++ b/config/eur/arm9/overlays/ov014/symbols.txt @@ -793,9 +793,9 @@ _ZN10ActorRupee18func_ov14_0213b204Ei kind:function(arm,size=0x50) addr:0x213b20 _ZN10ActorRupee6UpdateEb kind:function(arm,size=0x2c8) addr:0x213b254 _ZN10ActorRupee8vfunc_14Ej kind:function(arm,size=0x38) addr:0x213b51c _ZN10ActorRupee8vfunc_18Ej kind:function(arm,size=0x38) addr:0x213b554 -_ZN10ActorRupee8vfunc_20Ei kind:function(arm,size=0x68) addr:0x213b58c +_ZN10ActorRupee8vfunc_20Eb kind:function(arm,size=0x68) addr:0x213b58c _ZN10ActorRupee18func_ov14_0213b5f4EjiP5Vec3pb kind:function(arm,size=0xb0) addr:0x213b5f4 -_ZN10ActorRupee18func_ov14_0213b6a4EjPv kind:function(arm,size=0x68) addr:0x213b6a4 +_ZN10ActorRupee18func_ov14_0213b6a4EjP19Actor_UnkStruct_012 kind:function(arm,size=0x68) addr:0x213b6a4 _ZN10ActorRupee18func_ov14_0213b70cEj kind:function(arm,size=0x3c) addr:0x213b70c _ZN10ActorRupeeD0Ev kind:function(arm,size=0x1c) addr:0x213b748 _ZN10ActorRupeeD2Ev kind:function(arm,size=0x14) addr:0x213b764 @@ -1684,7 +1684,7 @@ func_ov014_0215507c kind:function(arm,size=0x40) addr:0x215507c func_ov014_021550bc kind:function(arm,size=0x40) addr:0x21550bc func_ov014_021550fc kind:function(arm,size=0x40) addr:0x21550fc func_ov014_0215513c kind:function(arm,size=0x40) addr:0x215513c -func_ov014_0215517c kind:function(arm,size=0x5c) addr:0x215517c +__sinit_ActorRupee.cpp kind:function(arm,size=0x5c) addr:0x215517c func_ov014_021551d8 kind:function(arm,size=0x40) addr:0x21551d8 func_ov014_02155218 kind:function(arm,size=0x38) addr:0x2155218 func_ov014_02155250 kind:function(arm,size=0x3c) addr:0x2155250 @@ -1902,7 +1902,9 @@ data_ov014_021589a8 kind:data(any) addr:0x21589a8 data_ov014_021589ac kind:data(any) addr:0x21589ac data_ov014_021589b0 kind:data(any) addr:0x21589b0 data_ov014_021589b4 kind:data(any) addr:0x21589b4 -_ZTV10ActorRupee kind:data(any) addr:0x21589e4 +data_ov014_021589d4 kind:data(any) addr:0x21589d4 +data_ov014_021589d8 kind:data(any) addr:0x21589d8 +_ZTV10ActorRupee kind:data(any) addr:0x21589dc data_ov014_02158aa0 kind:data(any) addr:0x2158aa0 data_ov014_02158b60 kind:data(any) addr:0x2158b60 data_ov014_02158b64 kind:data(any) addr:0x2158b64 diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 88d2aba4..9814c92c 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -2920,7 +2920,7 @@ func_ov000_020c56d8 kind:function(arm,size=0x9c) addr:0x20c5678 func_ov000_020c5774 kind:function(arm,size=0x88) addr:0x20c5714 func_ov000_020c57fc kind:function(arm,size=0x128) addr:0x20c579c func_ov000_020c5924 kind:function(arm,size=0x100) addr:0x20c58c4 -func_ov000_020c5a24 kind:function(arm,size=0x38) addr:0x20c59c4 +_Z13GetRupeeValuej kind:function(arm,size=0x38) addr:0x20c59c4 func_ov000_020c5a5c kind:function(arm,size=0xd8) addr:0x20c59fc func_ov000_020c5b34 kind:function(arm,size=0xb8) addr:0x20c5ad4 func_ov000_020c5bec kind:function(arm,size=0x40) addr:0x20c5b8c diff --git a/config/usa/arm9/overlays/ov014/relocs.txt b/config/usa/arm9/overlays/ov014/relocs.txt index 7a9d94d7..c7441ced 100644 --- a/config/usa/arm9/overlays/ov014/relocs.txt +++ b/config/usa/arm9/overlays/ov014/relocs.txt @@ -3214,7 +3214,7 @@ from:0x0213addc kind:arm_call to:0x0202e9d8 module:main from:0x0213ade8 kind:arm_call to:0x0213adf4 module:overlay(14) from:0x0213adf0 kind:load to:0x027e0fe0 module:dtcm from:0x0213adfc kind:arm_call to:0x020c14f4 module:overlay(0) -from:0x0213ae24 kind:load to:0x02158944 module:overlay(14) +from:0x0213ae24 kind:load to:0x0215893c add:8 module:overlay(14) from:0x0213ae3c kind:arm_call to:0x0213b668 module:overlay(14) from:0x0213aecc kind:arm_call to:0x0213b160 module:overlay(14) from:0x0213af08 kind:arm_call to:0x0213b160 module:overlay(14) diff --git a/config/usa/arm9/overlays/ov014/symbols.txt b/config/usa/arm9/overlays/ov014/symbols.txt index cc99c40b..405b4f55 100644 --- a/config/usa/arm9/overlays/ov014/symbols.txt +++ b/config/usa/arm9/overlays/ov014/symbols.txt @@ -793,9 +793,9 @@ _ZN10ActorRupee18func_ov14_0213b204Ei kind:function(arm,size=0x50) addr:0x213b16 _ZN10ActorRupee6UpdateEb kind:function(arm,size=0x2c8) addr:0x213b1b0 _ZN10ActorRupee8vfunc_14Ej kind:function(arm,size=0x38) addr:0x213b478 _ZN10ActorRupee8vfunc_18Ej kind:function(arm,size=0x38) addr:0x213b4b0 -_ZN10ActorRupee8vfunc_20Ei kind:function(arm,size=0x68) addr:0x213b4e8 +_ZN10ActorRupee8vfunc_20Eb kind:function(arm,size=0x68) addr:0x213b4e8 _ZN10ActorRupee18func_ov14_0213b5f4EjiP5Vec3pb kind:function(arm,size=0xb0) addr:0x213b550 -_ZN10ActorRupee18func_ov14_0213b6a4EjPv kind:function(arm,size=0x68) addr:0x213b600 +_ZN10ActorRupee18func_ov14_0213b6a4EjP19Actor_UnkStruct_012 kind:function(arm,size=0x68) addr:0x213b600 _ZN10ActorRupee18func_ov14_0213b70cEj kind:function(arm,size=0x3c) addr:0x213b668 _ZN10ActorRupeeD0Ev kind:function(arm,size=0x1c) addr:0x213b6a4 _ZN10ActorRupeeD2Ev kind:function(arm,size=0x14) addr:0x213b6c0 @@ -1684,7 +1684,7 @@ func_ov014_0215507c kind:function(arm,size=0x40) addr:0x2154fd8 func_ov014_021550bc kind:function(arm,size=0x40) addr:0x2155018 func_ov014_021550fc kind:function(arm,size=0x40) addr:0x2155058 func_ov014_0215513c kind:function(arm,size=0x40) addr:0x2155098 -func_ov014_0215517c kind:function(arm,size=0x5c) addr:0x21550d8 +__sinit_ActorRupee.cpp kind:function(arm,size=0x5c) addr:0x21550d8 func_ov014_021551d8 kind:function(arm,size=0x40) addr:0x2155134 func_ov014_02155218 kind:function(arm,size=0x38) addr:0x2155174 func_ov014_02155250 kind:function(arm,size=0x3c) addr:0x21551ac @@ -1902,7 +1902,9 @@ data_ov014_021589a8 kind:data(any) addr:0x2158908 data_ov014_021589ac kind:data(any) addr:0x215890c data_ov014_021589b0 kind:data(any) addr:0x2158910 data_ov014_021589b4 kind:data(any) addr:0x2158914 -_ZTV10ActorRupee kind:data(any) addr:0x2158944 +data_ov014_021589d4 kind:data(any) addr:0x2158934 +data_ov014_021589d8 kind:data(any) addr:0x2158938 +_ZTV10ActorRupee kind:data(any) addr:0x215893c data_ov014_02158aa0 kind:data(any) addr:0x2158a00 data_ov014_02158b60 kind:data(any) addr:0x2158ac0 data_ov014_02158b64 kind:data(any) addr:0x2158ac4 diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp index 1063bf76..64402237 100644 --- a/include/Actor/Actor.hpp +++ b/include/Actor/Actor.hpp @@ -178,7 +178,7 @@ public: /* 14 */ virtual void vfunc_14(u32 param1); /* 18 */ virtual void vfunc_18(u32 param1); /* 1c */ virtual void vfunc_1c(u16 *param1); - /* 20 */ virtual void vfunc_20(s32 param1); + /* 20 */ virtual void vfunc_20(bool param1); /* 24 */ virtual void vfunc_24(); /* 28 */ virtual void vfunc_28(); /* 2c */ virtual s32 vfunc_2c(); diff --git a/include/Actor/ActorRupee.hpp b/include/Actor/ActorRupee.hpp index 681a82a9..56519394 100644 --- a/include/Actor/ActorRupee.hpp +++ b/include/Actor/ActorRupee.hpp @@ -34,8 +34,8 @@ public: /* 00 */ virtual ~ActorRupee() override; /* 08 */ virtual bool vfunc_08() override; - /* 14 */ virtual void vfunc_14(bool param1) override; - /* 18 */ virtual void vfunc_18(bool param1) override; + /* 14 */ virtual void vfunc_14(u32 param1) override; + /* 18 */ virtual void vfunc_18(u32 param1) override; /* 20 */ virtual void vfunc_20(bool param1) override; /* 60 */ virtual bool vfunc_60() override; /* 64 */ virtual void vfunc_64() override; diff --git a/src/14_Land/Actor/ActorRupee.cpp b/src/14_Land/Actor/ActorRupee.cpp index 091202b6..78a0cf07 100644 --- a/src/14_Land/Actor/ActorRupee.cpp +++ b/src/14_Land/Actor/ActorRupee.cpp @@ -1,74 +1,43 @@ #include "Actor/ActorRupee.hpp" #include "Item/ItemManager.hpp" #include "Map/MapManager.hpp" +#include "Player/PlayerLinkBase.hpp" #include "System/Random.hpp" -// char* data_ov14_021589b4 = *data_ov14_02158994; - extern "C" { void func_01ff9bc4(Vec3p *a, Vec3p *b, Vec3p *sum); - u32 func_01fffd04(void *, u32); - bool func_ov00_020c313c(); - void func_ov00_0207a1c8(bool *param_1, bool param_2, Vec3p *param_3); + void func_ov00_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); - u16 func_ov00_020c5a24(RupeeId id); // GetRupeeValue - bool func_ov00_020bce48(PlayerLinkBase *implicit, ItemId cutsceneItemId); - void func_ov00_0207a13c(Actor_UnkStruct_012 *implicit); - void _ZN5ActorD2Ev(); - void _ZN9SysObjectdlEPv(); - ActorRupee *_ZN5ActorC2Ev(ActorRupee *thisx); - void _ZN10ActorRupeeD2Ev(); - - u32 data_ov14_021589b4; - u32 data_ov14_021589d4; - u32 *data_ov14_021589d8; } +u16 GetRupeeValue(RupeeId id); -/* inline */ char *data_ov14_02158994[8] = {"brg", "fnl", "pdl", "dco", "can", "hul", "bow", "anc"}; // gShipParts -extern "C" void *_ZTV10ActorRupee = _ZN10ActorRupeeD2Ev; +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 PlayerLinkBase *data_027e0fc8; // gPlayerLink extern u32 **data_027e0fe0[]; -ActorType ActorRupee::gType = ActorType(ActorTypeId_Rupee, (ActorCreateFunc) ActorRupee::Create, NULL); -ActorType_UnkClass data_ov14_021589f4 = ActorType_UnkClass(0x3bb, 0xeeb); +ActorType ActorRupee::gType = ActorType(ActorTypeId_Rupee, (ActorCreateFunc) ActorRupee::Create, NULL); -// #pragma section pinit begin -// extern "C" void* data_ov14_0215591c = func_ov14_0215517c; -// #pragma section pinit end +#pragma section force_data begin +ActorType_UnkClass data_ov14_021589f4 = ActorType_UnkClass(0x3bb, 0xeeb); +#pragma section force_data end ActorRupee *ActorRupee::Create() { ActorRupee *newRupee = new(*data_027e0fe0[0], 4) ActorRupee(); return newRupee; } -// extern "C" asm ActorRupee *_ZN10ActorRupeeC1Ev(ActorRupee *thisx) { -// _ZN5ActorC2Ev(thisx); -// _ZTV10ActorRupee = thisx; -// thisx->mRupeeId = 8; -// thisx->mUnk_15c = 0; -// return thisx; -// } - -// ActorRupee::ActorRupee() { -// mRupeeId = 8; -// mUnk_15c = 0; -// } +ActorRupee::ActorRupee() { + mRupeeId = 8; + mUnk_15c = 0; +} // https://decomp.me/scratch/1qjCc -#define FP_1(n) (u64)((n) << 0x800) -extern "C" void _ZN10ActorRupee18func_ov14_0213b204Ei(); -extern "C" void _ZN10ActorRupee18func_ov14_0213b70cEj(); -extern "C" void _ZN10ActorRupee8vfunc_14Ei(); -extern "C" void _ZN10ActorRupee8vfunc_18Ej(); -extern "C" void _ZN10ActorRupee8vfunc_20Ei(); -extern "C" void _ZN10ActorRupee8vfunc_60Ev(); -extern "C" void _ZN10ActorRupee8vfunc_64Ev(); bool ActorRupee::vfunc_08() { u32 dVar5; u32 iVar7; @@ -210,14 +179,14 @@ void ActorRupee::Update(bool param1) { cutsceneItemId = GetRupeeCutsceneItemId(); if (cutsceneItemId >= 0) { - if (/*data_027e0fc8->*/ func_ov00_020bce48(data_027e0fc8, cutsceneItemId)) { + if (gPlayerLink->func_ov00_020bce48(cutsceneItemId)) { Kill(); } else { func_ov14_0213b204(3); } } else { ItemManager *pItem = gItemManager; - rupeeValue = func_ov00_020c5a24(mRupeeId); + rupeeValue = GetRupeeValue(mRupeeId); pItem->GiveRupees(rupeeValue, false); // giverupees uVar3 = -1; @@ -255,8 +224,8 @@ void ActorRupee::Update(bool param1) { } break; case 3: - PlayerLinkBase *pLink = data_027e0fc8; - if (/*pLink->*/ func_ov00_020bce48(pLink, GetRupeeCutsceneItemId())) { + PlayerLinkBase *pLink = gPlayerLink; + if (pLink->func_ov00_020bce48(GetRupeeCutsceneItemId())) { Kill(); } break; @@ -292,14 +261,14 @@ void ActorRupee::Update(bool param1) { KillInBounds(); } -void ActorRupee::vfunc_14(bool param1) { +void ActorRupee::vfunc_14(u32 param1) { if (func_ov00_020c313c(param1)) { Update(false); } func_ov00_0207a1c8(&mUnk_0a4.mUnk_00, param1, &mPos); } -void ActorRupee::vfunc_18(bool param1) { +void ActorRupee::vfunc_18(u32 param1) { if (func_ov00_020c313c(param1)) { Update(true); } @@ -327,7 +296,6 @@ void ActorRupee::func_ov14_0213b5f4(RupeeId id, unk32 param2, Vec3p *param3, boo 0xC, // RupeeId_Rupoor50 }; - func_ov00_0207a13c(&unk_class); func_ov14_0213b6a4(id, &unk_class); func_0202bc38(param2, param3, data_ov14_02153e28[id], &unk_class, 0); @@ -366,8 +334,4 @@ bool ActorRupee::func_ov14_0213b70c(RupeeId id) { return false; } -extern "C" asm void _ZN10ActorRupeeD0Ev() {} - -extern "C" asm void _ZN10ActorRupeeD2Ev() {} - -// ActorRupee::~ActorRupee() {} +ActorRupee::~ActorRupee() {} From 52e0ac185a5a3570e166ddfaddb4662863ed3d63 Mon Sep 17 00:00:00 2001 From: Aetias Date: Sun, 20 Oct 2024 16:51:14 +0200 Subject: [PATCH 13/13] 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); } }