summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYanis002 <35189056+Yanis002@users.noreply.github.com>2025-02-05 23:17:42 +0100
committerYanis002 <35189056+Yanis002@users.noreply.github.com>2025-02-05 23:17:42 +0100
commit514887962c31df98b4d934af61a4d43fd60b2458 (patch)
tree60007e64fd0d434e72e3ff99bf66da38dde7e812 /src
parentd29bbff21fe81aac1fa6dc382ab3c6b1d085708f (diff)
"progress"
Diffstat (limited to 'src')
-rw-r--r--src/Main/Unknown/UnkStruct_02035064.cpp16
-rw-r--r--src/Main/Unknown/UnkStruct_02037750.cpp145
2 files changed, 156 insertions, 5 deletions
diff --git a/src/Main/Unknown/UnkStruct_02035064.cpp b/src/Main/Unknown/UnkStruct_02035064.cpp
index 6841fdc0..151cdf8c 100644
--- a/src/Main/Unknown/UnkStruct_02035064.cpp
+++ b/src/Main/Unknown/UnkStruct_02035064.cpp
@@ -18,13 +18,23 @@ ARM void UnkStruct_02035064::func_020350b0() {
}
ARM void UnkStruct_02035064::func_020350b4(s32 param1, unk32 param2, unk8 param3, unk16 param4, unk16 param5) {}
-ARM void UnkStruct_02035064::func_0203516c() {}
-ARM s32 UnkStruct_02035064::vfunc_0() {
+ARM void UnkStruct_02035064::func_0203516c() {
+ if (this->mUnk_78 != 0x0) {
+ if (this->mUnk_86 == false) {
+ this->mUnk_5c.func_0202e1e8();
+ this->func_020352d8();
+ } else {
+ this->mUnk_86 = false;
+ }
+ }
+}
+
+ARM s32 UnkStruct_02035064::vfunc_00() {
return this->mUnk_4c;
}
-ARM s32 UnkStruct_02035064::vfunc_4() {
+ARM s32 UnkStruct_02035064::vfunc_04() {
return this->mUnk_4e;
}
diff --git a/src/Main/Unknown/UnkStruct_02037750.cpp b/src/Main/Unknown/UnkStruct_02037750.cpp
index b7342c49..9abe3745 100644
--- a/src/Main/Unknown/UnkStruct_02037750.cpp
+++ b/src/Main/Unknown/UnkStruct_02037750.cpp
@@ -1,7 +1,13 @@
#include "Unknown/UnkStruct_02037750.hpp"
#include "Message/MessageManager.hpp"
+#include "System/Random.hpp"
+#include "Save/AdventureFlags.hpp"
+#include "Actor/ActorManager.hpp"
+#include "Item/ItemManager.hpp"
extern "C" ARM unk32 func_02037628(u8*);
+extern u8* data_027e0d54;
+extern unk32* data_027e0cb4;
ARM UnkStruct_02037750::UnkStruct_02037750(unk32 param1, unk32 param2) {
s32 i;
@@ -38,7 +44,142 @@ ARM bool UnkStruct_02037750::vfunc_24(unk32 param1) {
return this->func_020385d0(param1, auStack_28) != 0;
}
-ARM unk8 UnkStruct_02037750::vfunc_28(s32 param1) {}
+// non-matching
+ARM unk32 UnkStruct_02037750::vfunc_28(s32 param1) {
+ u16 uVar1;
+ s64 lVar2;
+ Random *pRVar3;
+ char cVar4;
+ u16 uVar5;
+ int iVar6;
+ u32 uVar7;
+ UnkStruct_02037750_Callback1 pcVar8;
+ int iVar9;
+ u32 uVar10;
+ u32 uVar11;
+ bool bVar12;
+
+ pRVar3 = gRandom;
+ uVar7 = (u32)*(u16 *)(param1 + 0x2);
+
+ if (uVar7 >= 0xF && uVar7 <= 0x2E) {
+ pcVar8 = this->mUnk_04[((uVar7 - 0xF) << 0x1E) >> 0x1C];
+ iVar9 = 0;
+
+ if (pcVar8 != NULL) {
+ iVar9 = pcVar8(this->mUnk_14);
+ }
+
+ return iVar9;
+ }
+
+ if ((s32)uVar7 <= 0) {
+ switch(uVar7) {
+ case 0x0:
+ case 0x2f:
+ break;
+ case 0x7:
+ if (data_027e0d54[0xd] != 0) {
+ return -0x1;
+ }
+
+ return (data_027e0d54[0xf] != 0);
+ case 0x1:
+ case 0x2:
+ case 0x3:
+ UnkStruct_020397f8* ret_3 = data_027e0c68.func_020366c4();
+
+ if (0x0 < ret_3->mUnk_15c) {
+ return -0x1;
+ }
+
+ uVar7 = (param1 + 0x1);
+
+ if (ret_3->mUnk_576 < uVar7) {
+ return ret_3->mUnk_576;
+ }
+
+ if (uVar7 == 0x0) {
+ uVar10 = 0x0;
+ } else {
+ lVar2 = gRandom->mRandomValue * gRandom->mFactor;
+ uVar10 = gRandom->Next(lVar2);
+ // uVar10 = *(int *)((int)&gRandom->mAddend + 0x4) +
+ // *(int *)((int)&gRandom->mFactor + 0x4) *
+ // *(uint *)&gRandom->mRandomValue + *(uint *)&gRandom->mFactor *
+ // *(int *)((int)&gRandom->mRandomValue + 0x4) +
+ // (lVar2 >> 0x20) + (gRandom->mAddend << uVar11); // CARRY4
+
+ // part of the inline?
+ // *(uint *)&gRandom->mRandomValue = *(uint *)&gRandom->mAddend + uVar11;
+ // *(uint *)((int)&gRandom->mRandomValue + 0x4) = uVar10;
+
+ if (uVar7 != 0x0) {
+ uVar10 = (uVar7 * uVar10 >> 0x20);
+ }
+ }
+
+ return uVar10;
+ case 0x4:
+ return gAdventureFlags->Get(param1 + 0x4) != false;
+ case 0x5:
+ return gActorManager->func_ov00_020c3b2c(NULL) != 0;
+ case 0x6:
+ break;
+ case 0x8:
+ return (((data_027e0cb4[(param1 + 0x4) >> 5]) & 1) << ((param1 + 0x4) & 0x1f)) == 0x0;
+ case 0x9:
+ break;
+ case 0xa:
+ break;
+ case 0xb:
+ lVar2 = gRandom->mRandomValue * gRandom->mFactor;
+ uVar7 = lVar2;
+ uVar10 = gRandom->Next(uVar7);
+
+ return (int)(uVar10 * 0x64 >> 0x20) < (param1 + 0x4);
+ case 0xc:
+ uVar7 = (param1 + 0x1);
+ if (uVar7 == 0x0) {
+ uVar10 = 0x0;
+ } else {
+ lVar2 = gRandom->mRandomValue * gRandom->mFactor;
+ uVar11 = lVar2;
+ uVar10 = gRandom->Next(uVar11);
+
+ if (uVar7 != 0x0) {
+ uVar10 = (uVar7 * uVar10 >> 0x20);
+ }
+ }
+ return (int)(char)uVar10;
+ case 0xd:
+ return gItemManager->GetNumRupees() != 0;
+ case 0xe:
+ return gItemManager->HasItem(param1 + 0x4) != 0;
+ default:
+ if (uVar7 == 0x2f) {
+ return gItemManager->HasItem((param1 + 0x4) + 0x60) != 0;
+ }
+ break;
+ }
+ }
+
+ uVar7 = (param1 + 0x1);
+ if (uVar7 == 0x0) {
+ uVar10 = 0x0;
+ } else {
+ lVar2 = gRandom->mRandomValue * gRandom->mFactor;
+ uVar11 = lVar2;
+ uVar10 = gRandom->Next(uVar11);
+
+ if (uVar7 != 0x0) {
+ uVar10 = (uVar7 * uVar10 >> 0x20);
+ }
+ }
+
+ return (int)(char)uVar10;
+}
+
ARM unk32 UnkStruct_02037750::vfunc_2c(s32 param1) {}
ARM LinkStateInteract *UnkStruct_02037750::GetLinkStateInteract() {
@@ -83,7 +224,7 @@ ARM bool UnkStruct_020386d8::vfunc_24(unk32 param1) {
return this->func_020385d0(param1, &this->mUnk_24.mUnk_00) != 0;
}
-ARM unk8 UnkStruct_020386d8::vfunc_28(s32 param1) {
+ARM unk32 UnkStruct_020386d8::vfunc_28(s32 param1) {
this->mUnk_20 = this->UnkStruct_02037750::vfunc_28(param1);
return this->mUnk_20;
}