From f81e8e85d012d67eca593b5ef1e33083c876a760 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Sat, 5 Jul 2025 16:36:04 +0200 Subject: started GameModeAdventure (97%) --- src/09_Adventure/Game/GameModeAdventure.cpp | 272 ++++++++++++++++++++++++++-- 1 file changed, 261 insertions(+), 11 deletions(-) (limited to 'src/09_Adventure/Game/GameModeAdventure.cpp') diff --git a/src/09_Adventure/Game/GameModeAdventure.cpp b/src/09_Adventure/Game/GameModeAdventure.cpp index bdf61424..630c4c07 100644 --- a/src/09_Adventure/Game/GameModeAdventure.cpp +++ b/src/09_Adventure/Game/GameModeAdventure.cpp @@ -1,13 +1,263 @@ +#include "global.h" + +#include "DTCM/UnkStruct_027e0d38.hpp" +#include "Game/Game.hpp" #include "Game/GameModeAdventure.hpp" +#include "Message/MsgProc.hpp" +#include "Save/AdventureFlags.hpp" +#include "System/OverlayManager.hpp" + +extern unk32 data_027e1044; +extern unk32 data_ov000_020eab04; +extern unk32 data_ov000_020eab08; +extern unk8 data_ov000_020eab09; + +extern "C" void *func_ov003_020f4510(); +extern "C" void func_ov000_02078b0c(); +extern "C" void func_ov003_020f4534(); + +extern UnkStruct_0211ac0c data_ov009_0211f5dc; + +extern "C" void func_ov029_0216dcf4(unk32 *, unk32); +extern unk32 data_ov022_0217a4ac; + +extern "C" void func_ov015_0217707c(unk32 *); +extern unk32 data_027e1060; + +extern "C" void func_ov005_0210274c(void *, unk32, u16 *); +extern "C" void func_ov005_021026f8(void *, unk32, u16 *); +extern "C" void func_ov005_02102828(void *, unk32, u16 *); +extern "C" void func_ov003_020f40c0(unk32 **, u16 *); +extern "C" void func_ov003_020f40e8(unk32 **, u16 *); + +THUMB GameModeAdventure *GameModeAdventure::Create(unk32 param1) { + return new(data_027e0ce0[1], 4) GameModeAdventure(param1); +} + +// non-matching +THUMB GameModeAdventure::GameModeAdventure(unk32 param1) : + GameModePlay(param1) { + UnkStruct_02082348 local_28; + + this->mUnk_008 = new(data_027e0ce0[1], 4) UnkStruct_0211a9ac(); + this->mUnk_00c = new(data_027e0ce0[1], 4) UnkStruct_020fadf4(this->mUnk_008); + this->mUnk_010 = new(data_027e0ce0[1], 4) UnkStruct_020f2978(); + this->mUnk_014 = new(data_027e0ce0[1], 4) UnkStruct_0211ac0c(this->mUnk_010); + data_027e1044 = param1; + func_ov003_020f4510(); + + local_28.mUnk_00.mUnk_00 = 0x47; + local_28.mUnk_04.mPos.x = 0; + local_28.mUnk_04.mPos.y = 0; + local_28.mUnk_04.mPos.z = -2; + local_28.mUnk_04.mAngle = 0; + local_28.mUnk_04.mId = -1; + local_28.mUnk_04.mUnk_0f = 0; + local_28.mUnk_04.mUnk_10 = 0; + local_28.mUnk_04.mUnk_11 = 0; + + if (gGame.mUnk_102 != 0) { + AdventureFlags::Get_FlagsUnk_00(0x17, (FlagsUnk2 *) &local_28); + } else { + if (gGame.mPrevModeId == 1) { + AdventureFlags::Get_FlagsUnk_00(0x17, (FlagsUnk2 *) &local_28); + } else if (data_ov000_020eab04 == 0x47) { + AdventureFlags::Get_FlagsUnk_00(0x01, (FlagsUnk2 *) &local_28); + } else { + unk32 index = AdventureFlags::func_ov00_02097ecc(); + + if (index != 0x21) { + AdventureFlags::Get_FlagsUnk_00(index, (FlagsUnk2 *) &local_28); + } else { + local_28.mUnk_00.mUnk_00 = data_ov000_020eab04; + local_28.mUnk_04.mId = data_ov000_020eab08; + local_28.mUnk_04.mUnk_0f = data_ov000_020eab09; + } + } + } + + local_28.func_ov004_02100ae0(); + data_027e0d38->func_ov004_02100bcc(); + gOverlayManager.LoadIfNotLoaded(OverlayIndex_2, OverlayId_05); +} + +ARM UnkStruct_020f2978_00::~UnkStruct_020f2978_00() {} + +// non-matching +THUMB GameModeAdventure::~GameModeAdventure() { + func_ov000_02078b0c(); + func_ov003_020f4534(); + data_027e1044 = 0; + + if (this->mUnk_014 != NULL) { + this->mUnk_014->mUnk_04.Unregister(); + delete this->mUnk_014; + } + + delete this->mUnk_010; + delete this->mUnk_00c; + delete this->mUnk_008; +} + +// non-matching +ARM unk32 GameModeAdventure::vfunc_08(unk32 param1) { + unk32 uVar2 = 0; + + if (data_027e0d38->mUnk_14 == 1) { + uVar2 = data_027e0d38->func_ov005_02100b7c(param1); + } else { + if (data_027e0d38->mUnk_0c.func_ov000_020a5e9c() == 2) { + func_ov015_0217707c(&data_027e1060); + uVar2 = data_027e0d38->func_ov005_02100b7c(param1); + } else { + if (this->mUnk_00c->func_ov009_0211370c() == 0) { + if (this->mUnk_00c->func_ov009_021136c4() != 0) { + this->mUnk_008->func_ov002_020f50c0(param1); + } else { + if (data_ov009_0211f5dc.func_ov009_021136e8() != 0) { + if (this->mUnk_014->func_ov009_0211370c() == 0) { + if (this->mUnk_014->func_ov009_021136c4() != 0) { + uVar2 = this->mUnk_010->func_ov003_020f2a2c(); + } else { + uVar2 = data_027e0d38->func_ov005_02100b7c(param1); + + if (data_027e0d38->mUnk_14 == 1) { + return uVar2; + } + + if (gOverlayManager.mLoadedOverlays[OverlayIndex_6] == OverlayId_29) { + func_ov029_0216dcf4(&data_ov022_0217a4ac, param1); + } else { + func_ov003_020f4060(&data_ov009_0211f5b4); + } + } + } + } + + data_027e1054->func_ov003_020f4960(); + } + + data_ov009_0211f5dc.func_ov003_020fb148(); + } + + this->mUnk_00c->func_ov009_021135d0(); + this->mUnk_014->func_ov009_0211372c(); + data_027e0e28->func_ov000_0207bc9c(); + } + } + + return uVar2; +} + +ARM void GameModeAdventure::vfunc_0c(u16 *param1) { + if (data_027e0d38->mUnk_14 == 1) { + func_ov005_021026f8(data_027e0d38->mUnk_24, data_027e0d38->mUnk_04, param1); + return; + } + + if (this->mUnk_00c->func_ov009_0211370c() != 0) { + return; + } + + if (this->mUnk_00c->func_ov009_021136c4() != 0) { + this->mUnk_008->func_ov002_020f5390(param1); + return; + } + + if (data_ov009_0211f5dc.func_ov009_021136e8() == 0) { + return; + } + + if (this->mUnk_014->func_ov009_021136e8() == 0) { + return; + } + + func_ov005_021026f8(data_027e0d38->mUnk_24, data_027e0d38->mUnk_04, param1); + func_ov003_020f40c0(&data_ov009_0211f5b4, param1); + data_027e1054->func_ov003_020f4a5c(); +} + +ARM void GameModeAdventure::vfunc_10(u16 *param1) { + if (data_027e0d38->mUnk_14 == 1) { + func_ov005_0210274c(data_027e0d38->mUnk_24, data_027e0d38->mUnk_04, param1); + return; + } + + if (this->mUnk_00c->func_ov009_0211370c() != 0) { + return; + } + + if (this->mUnk_00c->func_ov009_021136c4() != 0) { + this->mUnk_008->func_ov002_020f5504(param1); + return; + } + + if (this->mUnk_014->func_ov009_0211370c() != 0) { + return; + } + + if (this->mUnk_014->func_ov009_021136c4() != 0) { + this->mUnk_010->func_ov003_020f2acc(); + return; + } + + func_ov005_0210274c(data_027e0d38->mUnk_24, data_027e0d38->mUnk_04, param1); + func_ov003_020f40e8(&data_ov009_0211f5b4, param1); + + if (data_ov009_0211f5dc.func_ov009_021136c4() == 0) { + return; + } + + data_ov009_0211f5dc.func_ov003_020fb258(param1); +} + +ARM void GameModeAdventure::vfunc_14(u16 *param1) { + if (data_027e0d38->mUnk_14 == 1) { + func_ov005_02102828(data_027e0d38->mUnk_24, data_027e0d38->mUnk_04, param1); + return; + } + + if (this->mUnk_00c->func_ov009_0211370c() != 0) { + return; + } + + if (this->mUnk_00c->func_ov009_021136c4() != 0) { + this->mUnk_008->func_ov002_020f56c8(param1); + return; + } + + if (data_ov009_0211f5dc.func_ov009_0211370c() != 0) { + return; + } + + if (data_ov009_0211f5dc.func_ov009_021136c4() != 0) { + data_ov009_0211f5dc.func_ov003_020fb26c(); + return; + } + + if (this->mUnk_014->func_ov009_021136e8() == 0) { + return; + } + + func_ov005_02102828(data_027e0d38->mUnk_24, data_027e0d38->mUnk_04, param1); +} + +THUMB void GameModeAdventure::vfunc_1c() { + this->GameModePlay::vfunc_1c(); + + if (data_027e0d38->mUnk_14 != 1) { + this->mUnk_00c->func_ov003_020fae64(); + data_ov009_0211f5dc.func_ov003_020faf90(); + this->mUnk_014->func_ov009_0211ac2c(); + data_027e1054->func_ov003_020f4678(1); + } +} + +THUMB void GameModeAdventure::vfunc_20() { + if (data_027e0d38->mUnk_14 != 1) { + data_027e1054->func_ov003_02f46f8(); + data_ov009_0211f5dc.func_ov003_020fb010(); + } -GameModeAdventure *GameModeAdventure::Create(unk32 param1) {} -GameModeAdventure::GameModeAdventure(unk32 param1) : - GameModePlay(param1) {} -void func_ov009_02112d68() {} -GameModeAdventure::~GameModeAdventure() {} -unk32 GameModeAdventure::vfunc_08(unk32 param1) {} -void GameModeAdventure::vfunc_0c(u16 *param1) {} -void GameModeAdventure::vfunc_10(u16 *param1) {} -void GameModeAdventure::vfunc_14(u16 *param1) {} -void GameModeAdventure::vfunc_1c() {} -void GameModeAdventure::vfunc_20() {} + this->GameModePlay::vfunc_20(); +} -- cgit v1.2.3