diff options
| author | Yanis002 <35189056+Yanis002@users.noreply.github.com> | 2025-02-05 23:17:42 +0100 |
|---|---|---|
| committer | Yanis002 <35189056+Yanis002@users.noreply.github.com> | 2025-02-05 23:17:42 +0100 |
| commit | 514887962c31df98b4d934af61a4d43fd60b2458 (patch) | |
| tree | 60007e64fd0d434e72e3ff99bf66da38dde7e812 /src | |
| parent | d29bbff21fe81aac1fa6dc382ab3c6b1d085708f (diff) | |
"progress"
Diffstat (limited to 'src')
| -rw-r--r-- | src/Main/Unknown/UnkStruct_02035064.cpp | 16 | ||||
| -rw-r--r-- | src/Main/Unknown/UnkStruct_02037750.cpp | 145 |
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; } |
