diff options
| author | Aetias <144526980+AetiasHax@users.noreply.github.com> | 2025-07-21 19:09:56 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-21 19:09:56 +0200 |
| commit | aee9c362bbeb9ae717f4b93cbbd5fa0dd9a71450 (patch) | |
| tree | 76d68901c25694abd6e3b7f90821e36229accf32 /src/14_Land | |
| parent | 32cc123547fef2ff4aa170ef27ee0a825957a859 (diff) | |
ActorRupee 90% (#124)
* Remove `force_data` macro
* Use size_t in `operator new`
* Bump objdiff to v3.0.0-beta.10
* Decompile functions using gRandom
* ActorRupee 90%
* Fix old gRandom.Next calls
* Revert objdiff
* Clean up
Diffstat (limited to 'src/14_Land')
| -rw-r--r-- | src/14_Land/Actor/ActorRupee.cpp | 70 | ||||
| -rw-r--r-- | src/14_Land/Actor/Player/ActorRefill.cpp | 4 |
2 files changed, 30 insertions, 44 deletions
diff --git a/src/14_Land/Actor/ActorRupee.cpp b/src/14_Land/Actor/ActorRupee.cpp index eac0b559..a8349c58 100644 --- a/src/14_Land/Actor/ActorRupee.cpp +++ b/src/14_Land/Actor/ActorRupee.cpp @@ -12,7 +12,7 @@ void func_ov000_020d7ad4(u32 *param1, u32 param2); } u16 GetRupeeValue(RupeeId id); -char *gShipParts[8] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"}; +static char *gShipParts[8] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"}; extern u32 *data_ov014_021589d8; extern u32 data_ov000_020e9370[]; @@ -21,77 +21,63 @@ extern u32 **data_027e0fe0[]; ActorType ActorRupee::gType = ActorType(ActorTypeId_Rupee, (ActorCreateFunc) ActorRupee::Create, NULL); -#pragma section force_data begin -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() { ActorRupee *newRupee = new(*data_027e0fe0[0], 4) ActorRupee(); return newRupee; } +static const ActorType_UnkClass data_ov014_021589f4 = ActorType_UnkClass(FLOAT_TO_Q21(0.4662), FLOAT_TO_Q19(0.4661)); + ActorRupee::ActorRupee() { mRupeeId = 8; mUnk_15c = 0; } -// https://decomp.me/scratch/1qjCc bool ActorRupee::Init() { - u32 dVar5; - u32 iVar7; - - mRupeeId = mUnk_020.mUnk_00[0]; - - dVar5 = func_ov14_0213b70c(mRupeeId) ? *data_ov014_021589d8 : FLOAT_TO_Q20(0.666); - iVar7 = (s32) dVar5 >> 1; - + RupeeId rupeeId = (RupeeId) mUnk_020.mUnk_00[0]; + mRupeeId = rupeeId; + s32 iVar1 = (func_ov14_0213b70c(rupeeId) ? data_ov014_021589f4.mUnk_4 : 0xaa8) >> 1; mHitbox.pos.x = 0; - mHitbox.pos.y = iVar7; + mHitbox.pos.y = iVar1; mHitbox.pos.z = 0; - mHitbox.size = iVar7; - mUnk_08c.pos = mHitbox.pos; + mHitbox.size = iVar1; + mUnk_08c.pos.x = mHitbox.pos.x; + mUnk_08c.pos.y = mHitbox.pos.y; + mUnk_08c.pos.z = mHitbox.pos.z; mUnk_08c.size = mHitbox.size; mUnk_0a4.mUnk_04.x = 0; - mUnk_0a4.mUnk_04.y = iVar7; + mUnk_0a4.mUnk_04.y = iVar1; 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; - + mUnk_0a4.mUnk_10 = iVar1 + 0x1000; + mUnk_09c.mUnk_0 = mUnk_09c.mUnk_0 & ~0xb0; + mUnk_09c.mUnk_3 = 1; + mMaxFall = mUnk_08c.size + -1; if (mUnk_03c >= 0) { - func_ov14_0213b204(1); + this->func_ov14_0213b204(1); } else { switch (mUnk_144) { case 0: mVel.x = 0; mVel.y = 0; mVel.z = 0; - func_ov14_0213b204(0); + this->func_ov14_0213b204(0); break; case 1: - 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)); - - mVel.x = x - FLOAT_TO_Q20(0.0666); - mVel.y = y + FLOAT_TO_Q20(0.3333); - mVel.z = z - FLOAT_TO_Q20(0.0666); - - func_ov14_0213b204(0); + mVel.x = gRandom.Next(FLOAT_TO_Q20(-0.0666), FLOAT_TO_Q20(0.0666)); + mVel.y = gRandom.Next(FLOAT_TO_Q20(0.3333), FLOAT_TO_Q20(0.5333)); + mVel.z = gRandom.Next(FLOAT_TO_Q20(-0.0666), FLOAT_TO_Q20(0.0666)); + this->func_ov14_0213b204(0); break; case 2: mVel.x = 0; mVel.y = FLOAT_TO_Q20(0.5); mVel.z = 0; - func_ov14_0213b204(0); + this->func_ov14_0213b204(0); break; case 3: - func_ov14_0213b204(5); - break; + this->func_ov14_0213b204(5); } } - return true; } @@ -240,12 +226,12 @@ void ActorRupee::Update(bool param1) { } } break; - case 3: + case 3: { PlayerLinkBase *pLink = gPlayerLink; if (pLink->PlayItemCutscene(GetRupeeCutsceneItemId())) { Kill(); } - break; + } break; case 1: if (param1) { mActiveFrames = 0; @@ -329,8 +315,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_ov014_021589f4.unk_00; - param2->mUnk_18 = data_ov014_021589f4.unk_04; + param2->mUnk_14 = data_ov014_021589f4.mUnk_0; + param2->mUnk_18 = data_ov014_021589f4.mUnk_4; } else { param2->mUnk_08 = 2; param2->mUnk_0c = 2; diff --git a/src/14_Land/Actor/Player/ActorRefill.cpp b/src/14_Land/Actor/Player/ActorRefill.cpp index e547c4ed..1239e930 100644 --- a/src/14_Land/Actor/Player/ActorRefill.cpp +++ b/src/14_Land/Actor/Player/ActorRefill.cpp @@ -285,7 +285,7 @@ ARM bool ActorRefillTime::Init() { case 0: case 1: case 3: - s32 temp_ip = gRandom.Next(10); + s32 temp_ip = gRandom.Next(0, 10); if (temp_ip >= 9) { mUnk_158 = 30; } else if (temp_ip >= 6) { @@ -339,7 +339,7 @@ ARM bool ActorLSTM::Init() { case 0: case 1: case 3: - s32 temp_ip = gRandom.Next(10); + s32 temp_ip = gRandom.Next(0, 10); if (temp_ip >= 9) { mUnk_158 = -30; } else if (temp_ip >= 6) { |
