summaryrefslogtreecommitdiff
path: root/src/09_Adventure/Game/GameModeAdventure.cpp
diff options
context:
space:
mode:
authorAetias <144526980+AetiasHax@users.noreply.github.com>2025-07-06 11:09:25 +0200
committerGitHub <noreply@github.com>2025-07-06 11:09:25 +0200
commit87ea4c687d97fc9a0e3e06fa4732087794881039 (patch)
treebf8f539742eead3ca8d660361dd790375a406a54 /src/09_Adventure/Game/GameModeAdventure.cpp
parent1e2adf0ebd714f9ed2c1e814276278755278dd12 (diff)
parent476d7d305fd1f39922761ab78498783af809e234 (diff)
Merge pull request #109 from Yanis002/gamemodeadventure
Started `09_Adventure/Game/GameModeAdventure.cpp` (97%)
Diffstat (limited to 'src/09_Adventure/Game/GameModeAdventure.cpp')
-rw-r--r--src/09_Adventure/Game/GameModeAdventure.cpp272
1 files changed, 261 insertions, 11 deletions
diff --git a/src/09_Adventure/Game/GameModeAdventure.cpp b/src/09_Adventure/Game/GameModeAdventure.cpp
index bdf61424..dbfa9690 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) {
+ FlagsUnk2 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.mUnk_00 = 0;
+ local_28.mUnk_04.mUnk_04 = 0;
+ local_28.mUnk_04.mUnk_08 = -2;
+ local_28.mUnk_04.mUnk_0c = 0;
+ local_28.mUnk_04.mUnk_0e = -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, &local_28);
+ } else {
+ if (gGame.mPrevModeId == 1) {
+ AdventureFlags::Get_FlagsUnk_00(0x17, &local_28);
+ } else if (data_ov000_020eab04 == 0x47) {
+ AdventureFlags::Get_FlagsUnk_00(0x01, &local_28);
+ } else {
+ unk32 index = AdventureFlags::func_ov00_02097ecc();
+
+ if (index != 0x21) {
+ AdventureFlags::Get_FlagsUnk_00(index, &local_28);
+ } else {
+ local_28.mUnk_00.mUnk_00 = data_ov000_020eab04;
+ local_28.mUnk_04.mUnk_0e = 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();
+}