summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAetias <144526980+AetiasHax@users.noreply.github.com>2025-07-21 19:09:56 +0200
committerGitHub <noreply@github.com>2025-07-21 19:09:56 +0200
commitaee9c362bbeb9ae717f4b93cbbd5fa0dd9a71450 (patch)
tree76d68901c25694abd6e3b7f90821e36229accf32 /src
parent32cc123547fef2ff4aa170ef27ee0a825957a859 (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')
-rw-r--r--src/09_Adventure/func_ov009_0211c808.cpp17
-rw-r--r--src/14_Land/Actor/ActorRupee.cpp70
-rw-r--r--src/14_Land/Actor/Player/ActorRefill.cpp4
-rw-r--r--src/24/func_ov024_02170f98.cpp9
-rw-r--r--src/47/func_ov047_0219196c.cpp8
-rw-r--r--src/Main/Game/Game.cpp2
-rw-r--r--src/Main/Unknown/UnkStruct_02037750.cpp8
7 files changed, 69 insertions, 49 deletions
diff --git a/src/09_Adventure/func_ov009_0211c808.cpp b/src/09_Adventure/func_ov009_0211c808.cpp
new file mode 100644
index 00000000..3c67b770
--- /dev/null
+++ b/src/09_Adventure/func_ov009_0211c808.cpp
@@ -0,0 +1,17 @@
+#include "global.h"
+#include "types.h"
+
+#include "System/Random.hpp"
+
+extern "C" u32 func_ov009_0211c558(const u8 *param0, s32 param1);
+
+const u8 data_ov009_0211e0fc[80] = {
+ 0x59, 0x5B, 0x60, 0x60, 0x6A, 0x6A, 0x74, 0x58, 0x6A, 0x6A, 0x74, 0x60, 0x60, 0x59, 0x5B, 0x58, 0x60, 0x6A, 0x6A, 0x59,
+ 0x5B, 0x74, 0x60, 0x58, 0x6A, 0x65, 0x60, 0x65, 0x60, 0x65, 0x63, 0x58, 0x65, 0x6A, 0x60, 0x65, 0x65, 0x63, 0x60, 0x58,
+ 0x65, 0x65, 0x6A, 0x60, 0x63, 0x60, 0x65, 0x58, 0x59, 0x6A, 0x6A, 0x65, 0x6A, 0x60, 0x60, 0x58, 0x60, 0x60, 0x6A, 0x6A,
+ 0x65, 0x59, 0x6A, 0x58, 0x6A, 0x59, 0x60, 0x60, 0x6A, 0x6A, 0x65, 0x58, 0x5B, 0x5B, 0x65, 0x6A, 0x6A, 0x65, 0x65, 0x5B,
+};
+
+THUMB void func_ov009_0211c808(unk32 *param1) {
+ *param1 = func_ov009_0211c558(data_ov009_0211e0fc, gRandom.Next(0, 100));
+}
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) {
diff --git a/src/24/func_ov024_02170f98.cpp b/src/24/func_ov024_02170f98.cpp
new file mode 100644
index 00000000..dd70cdd8
--- /dev/null
+++ b/src/24/func_ov024_02170f98.cpp
@@ -0,0 +1,9 @@
+#include "global.h"
+#include "types.h"
+
+#include "System/Random.hpp"
+
+ARM void func_ov024_02170f98(s32 param1) {
+ *(unk32 *) (param1 + 0x330) = 0x3c + gRandom.Next(0, 1);
+ *(unk32 *) (*(s32 *) (param1 + 0x22c) + 0x10) = 0;
+}
diff --git a/src/47/func_ov047_0219196c.cpp b/src/47/func_ov047_0219196c.cpp
new file mode 100644
index 00000000..9029d81f
--- /dev/null
+++ b/src/47/func_ov047_0219196c.cpp
@@ -0,0 +1,8 @@
+#include "global.h"
+#include "types.h"
+
+#include "System/Random.hpp"
+
+ARM void func_ov047_0219196c(s32 param1) {
+ *(s16 *) (param1 + 0x334) = gRandom.Next(0, 61) + 0x3c;
+}
diff --git a/src/Main/Game/Game.cpp b/src/Main/Game/Game.cpp
index 71ccde10..b88ab53d 100644
--- a/src/Main/Game/Game.cpp
+++ b/src/Main/Game/Game.cpp
@@ -302,7 +302,7 @@ ARM void Game::Run() {
if ((this->mUnk_0f4 & 7U) == 0) {
data_027e0dbc.func_ov000_0207b9dc();
} else {
- gRandom.Next(0);
+ gRandom.Next(0, 0);
}
}
nextGameMode = 0;
diff --git a/src/Main/Unknown/UnkStruct_02037750.cpp b/src/Main/Unknown/UnkStruct_02037750.cpp
index 3d9fe9a5..01ae540e 100644
--- a/src/Main/Unknown/UnkStruct_02037750.cpp
+++ b/src/Main/Unknown/UnkStruct_02037750.cpp
@@ -101,7 +101,7 @@ ARM unk32 UnkStruct_02037750::vfunc_28(s32 param1) {
uVar10 = 0x0;
} else {
lVar2 = gRandom.mRandomValue * gRandom.mFactor;
- uVar10 = gRandom.Next(lVar2);
+ uVar10 = gRandom.Next(0, lVar2);
// uVar10 = *(int *)((int)&gRandom.mAddend + 0x4) +
// *(int *)((int)&gRandom.mFactor + 0x4) *
// *(uint *)&gRandom.mRandomValue + *(uint *)&gRandom.mFactor *
@@ -133,7 +133,7 @@ ARM unk32 UnkStruct_02037750::vfunc_28(s32 param1) {
case 0xb:
lVar2 = gRandom.mRandomValue * gRandom.mFactor;
uVar7 = lVar2;
- uVar10 = gRandom.Next(uVar7);
+ uVar10 = gRandom.Next(0, uVar7);
return (int) (uVar10 * 0x64 >> 0x20) < (param1 + 0x4);
case 0xc:
@@ -143,7 +143,7 @@ ARM unk32 UnkStruct_02037750::vfunc_28(s32 param1) {
} else {
lVar2 = gRandom.mRandomValue * gRandom.mFactor;
uVar11 = lVar2;
- uVar10 = gRandom.Next(uVar11);
+ uVar10 = gRandom.Next(0, uVar11);
if (uVar7 != 0x0) {
uVar10 = (uVar7 * uVar10 >> 0x20);
@@ -168,7 +168,7 @@ ARM unk32 UnkStruct_02037750::vfunc_28(s32 param1) {
} else {
lVar2 = gRandom.mRandomValue * gRandom.mFactor;
uVar11 = lVar2;
- uVar10 = gRandom.Next(uVar11);
+ uVar10 = gRandom.Next(0, uVar11);
if (uVar7 != 0x0) {
uVar10 = (uVar7 * uVar10 >> 0x20);