Files
st/src/024_MainGame/Game/AdventureModeManager_18C_024.cpp
T
Yanis 90203403dd Decompile overlay 24 (Part 1) (#65)
* GameModeAdventure_001 OK

* GameModeAdventure_024 17%

* GameModeAdventure_024 73%

* GameModeAdventure_024 99%

* jp region differences

* rename GameModeAdventure_024 and GameModeAdventure + UnkStruct_ov000_020d8660_024 OK

* UnkActorSystem1OK

* UnkActorSystem2 OK

* delink more of ov024 & UnkStruct_027e0998_024 OK

* improve instance stuff & UnkStruct_027e0cf8_024 OK

* AdventureModeManager_160_024 OK & GameModeStartUp OK

* fix regressions

* fix regressions 2

* AdventureModeManager_170 OK

* AdventureModeManager_174_Base OK

* AdventureModeManager_174 OK

* mark GameModeAdventure_024 as complete

* AdventureModeManager_178 OK

* AdventureModeManager_180 OK

* AdventureModeManager_184_024 OK

* AdventureModeManager_18C_024 OK & AdventureModeManager_190_024 OK

* AdventureModeManager_15C_20_00 61%

* AdventureModeManager_15C_20_00 OK

* jp version differences

* delink what's left in the overlay

* fix regressions

* AdventureModeManager_1B8_Base_024 98%

* AdventureModeManager_1B8 48% and link AdventureModeManager_024

* AdventureModeManager_1B8_Base and AdventureModeManager_1B8 OK

* oops

* mark statics as local
2026-05-18 21:14:27 +02:00

406 lines
12 KiB
C++

#include "MainGame/AdventureMode.hpp"
#include "Save/AdventureFlags.hpp"
#include "Unknown/UnkStruct_02049f8c.hpp"
#include "Unknown/UnkStruct_0204a088.hpp"
#include "Unknown/UnkStruct_0204a110.hpp"
#include "Unknown/UnkStruct_0204e5f8.hpp"
#include "Unknown/UnkStruct_027e0998.hpp"
#include "Unknown/UnkStruct_027e09a4.hpp"
#include "Unknown/UnkStruct_027e09b8.hpp"
#include "Unknown/UnkStruct_ov000_020b5214.hpp"
#include "regs.h"
extern "C" AdventureModeManager_18C_10 *func_ov011_020b6520(void *, int);
extern "C" void func_ov011_020b84f0(s16 *param1, void *, unk32 param2);
extern "C" void func_02019b3c();
THUMB_BEGIN
AdventureModeManager_18C_14::AdventureModeManager_18C_14() {}
bool AdventureModeManager_18C_14::vfunc_0C(void) {
return data_0204a088->func_ov000_02061224();
}
bool AdventureModeManager_18C_14::vfunc_10(void) {
return data_0204a088->func_ov000_02061224();
}
AdventureModeManager_18C::AdventureModeManager_18C(GameModeManagerBase_104 *param1) :
mUnk_0C(param1),
mUnk_10(NULL),
mUnk_38(false),
mUnk_39(false),
mUnk_3A(false),
mUnk_3C(0x1000) {
this->mUnk_40.x = 0;
this->mUnk_40.y = 0;
this->mUnk_44 = 0x1000;
this->mUnk_48.x = 0;
this->mUnk_48.y = 0;
data_0204a088->func_ov000_020611dc(this, 8);
}
AdventureModeManager_18C::~AdventureModeManager_18C() {}
void AdventureModeManager_18C::vfunc_08(unk32 param1) {
switch (param1) {
case 1:
this->func_ov024_020ca034();
break;
case 6:
this->func_ov024_020ca034();
break;
case 2:
break;
case 5:
this->func_ov024_020ca034();
break;
default:
break;
}
}
void AdventureModeManager_18C::vfunc_0C(unk32 param1) {
switch (param1) {
case 6:
switch (this->mUnk_54) {
case 1:
if (this->mUnk_14.mUnk_0D == this->mUnk_14.mUnk_10) {
data_ov000_020b5214.func_ov000_0206db44(0x43);
data_0204a110.mUnk_DA8.func_0201ced8();
this->mUnk_54 = 2;
}
if (data_0204a110.mUnk_008 != 1 && this->mUnk_38) {
this->mUnk_38 = false;
this->func_ov024_020c9c6c();
}
break;
case 2:
if (data_0204a110.mUnk_DA8.mUnk_0C < 0) {
data_0204a088->func_ov000_02061230();
this->mUnk_54 = 3;
}
break;
default:
break;
}
break;
case 1:
if (this->mUnk_14.mUnk_0D == this->mUnk_14.mUnk_10) {
data_0204a088->func_ov000_02061230();
this->mUnk_54 = 3;
}
if (data_0204a110.mUnk_008 != 1 && this->mUnk_38) {
this->mUnk_38 = false;
this->func_ov024_020c9c6c();
}
break;
case 2:
break;
case 5:
if (this->mUnk_14.mUnk_0D == this->mUnk_14.mUnk_10) {
data_0204a088->func_ov000_02061230();
this->mUnk_54 = 3;
}
break;
default:
break;
}
}
void AdventureModeManager_18C::vfunc_10(unk32 param1, unk32 param2) {
if (param2 != 1) {
return;
}
data_0204a088->func_ov000_02061248();
switch (param1) {
case 1:
case 6:
this->mUnk_38 = 1;
if (data_0204a110.mUnk_DC0.mUnk_00) {
data_0204a110.mUnk_DC0.func_0201dd58(1, 3);
this->mUnk_3C = data_0204a110.mUnk_DC0.mUnk_08->func_0201ec30();
Vec2s auStack_14;
func_0201e8d4(&auStack_14, data_0204a110.mUnk_DC0.mUnk_04);
this->mUnk_40.x = auStack_14.x;
Vec2s auStack_18;
func_0201e8d4(&auStack_18, data_0204a110.mUnk_DC0.mUnk_04);
this->mUnk_40.y = auStack_18.y;
}
if (data_0204a110.mUnk_008 == 1) {
this->mUnk_39 = true;
data_0204a110.mUnk_DFE = true;
}
break;
case 5:
this->func_ov024_020c9c6c();
break;
case 2: {
this->func_ov024_020c9c6c();
unk32 temp = this->mUnk_44;
Vec2s copy;
copy.x = this->mUnk_48.x;
copy.y = this->mUnk_48.y;
Vec2s sp14;
sp14.x = 0;
sp14.y = 0;
Vec2s sp18;
sp18.x = copy.x;
sp18.y = copy.y;
data_0204a110.mUnk_DC0.func_0201db14(temp, 0x1000, &sp18, &sp14, 8, 4);
this->mUnk_44 = 0x1000;
this->mUnk_48.x = 0;
this->mUnk_48.y = 0;
break;
}
default:
break;
}
this->mUnk_50 = data_02049f8c.mUnk_00;
data_02049f8c.mUnk_00 = 0;
}
void AdventureModeManager_18C::func_ov024_020c9c6c() {
GetAdventureModeManager()->func_ov024_020c699c();
data_027e0994->mUnk_004.func_0201c0c4(0x65);
if (this->mUnk_3A) {
this->mUnk_10 = func_ov011_020b6520(&this->mUnk_0C, this->mUnk_4C);
this->mUnk_10->func_ov011_020b89f0(this->mUnk_4C);
} else {
unk32 var_r4 = -1;
if (data_027e09b8->HasAdventureFlag(AdventureFlag_ObtainedFireGlyph)) {
var_r4 = 3;
} else if (data_027e09b8->HasAdventureFlag(AdventureFlag_ObtainedOceanGlyph)) {
var_r4 = 2;
} else if (data_027e09b8->HasAdventureFlag(AdventureFlag_ObtainedSnowGlyph)) {
var_r4 = 1;
} else if (data_027e09b8->HasAdventureFlag(AdventureFlag_ObtainedForestGlyph)) {
var_r4 = 0;
}
this->mUnk_10 = func_ov011_020b6520(&this->mUnk_0C, var_r4);
}
REG_DISPCNT_SUB = (REG_DISPCNT_SUB & ~0x1F00) | 0x1C00;
REG_BG2CNT_SUB = (REG_BG2CNT_SUB & ~0x03) | 0x03;
REG_BG3CNT_SUB = (REG_BG3CNT_SUB & ~0x03) | 0x02;
}
void AdventureModeManager_18C::vfunc_14(unk32 param1) {
this->mUnk_10->func_ov011_020b88ac();
this->mUnk_54 = 3;
}
void AdventureModeManager_18C::vfunc_18(unk32 param1) {
switch (param1) {
case 1:
data_ov000_020b5214.func_ov000_0206db44(0x44);
data_ov000_020b5214.func_ov000_0206db44(0x45);
if (this->mUnk_3A) {
this->func_ov024_020ca034();
} else {
data_0204a110.mUnk_DA8.func_0201cf30();
this->mUnk_54 = 4;
}
break;
case 5:
data_ov000_020b5214.func_ov000_0206db44(0x44);
this->func_ov024_020ca034();
break;
case 2: {
if (this->mUnk_10->mUnk_10EC - 4 <= 3) {
s16 stack[4];
func_ov011_020b84f0(stack, this->mUnk_10, this->mUnk_10->mUnk_10EC);
data_0204a110.mUnk_DC0.func_0201dc10(stack, 8, 4);
}
data_ov000_020b5214.func_ov000_0206db44(0x48);
this->func_ov024_020ca034();
break;
}
case 0:
default:
break;
}
}
void AdventureModeManager_18C::vfunc_1C(unk32 param1) {
switch (param1) {
case 1:
switch (this->mUnk_54) {
case 4:
if (data_0204a110.mUnk_DA8.mUnk_0C < 0) {
this->func_ov024_020ca034();
}
break;
case 1:
if (this->mUnk_14.mUnk_0D == this->mUnk_14.mUnk_10) {
data_0204a088->func_ov000_02061230();
this->mUnk_54 = 0;
}
break;
default:
break;
}
break;
case 5:
if (this->mUnk_14.mUnk_0D == this->mUnk_14.mUnk_10) {
data_0204a088->func_ov000_02061230();
this->mUnk_54 = 0;
}
break;
case 2:
if (this->mUnk_14.mUnk_0D == this->mUnk_14.mUnk_10) {
this->mUnk_54 = 0;
}
break;
case 0:
default:
break;
}
}
void AdventureModeManager_18C::vfunc_20(unk32 param1, unk32 param2) {
if (param2 != 1) {
return;
}
switch (param1) {
case 1: {
if (!data_027e09a4->func_01ffd3d8()) {
GetAdventureModeManager()->mUnk_004.func_0201c0c4(0x68);
}
if (data_027e09a4->func_01ffd3d8()) {
GetAdventureModeManager()->func_ov024_020c555c(1);
} else if (data_027e0998->func_ov024_020c7354()) {
GetAdventureModeManager()->func_ov024_020c555c(4);
} else {
GetAdventureModeManager()->func_ov024_020c555c(0);
}
GetAdventureModeManager()->func_ov024_020c53e8();
if (data_027e09a4->func_01ffd3d8() || data_027e0998->func_ov024_020c7354()) {
GetAdventureModeManager()->func_ov024_020c671c();
} else {
GetAdventureModeManager()->func_ov024_020c66c0();
}
if (this->mUnk_39 != 0) {
this->mUnk_39 = false;
data_0204a110.mUnk_DFE = true;
}
unk32 temp = this->mUnk_3C;
if (temp != 0x1000) {
Vec2s copy;
copy.x = this->mUnk_40.x;
copy.y = this->mUnk_40.y;
Vec2s sp18;
sp18.x = copy.x;
sp18.y = copy.y;
Vec2s sp14;
sp14.x = 0;
sp14.y = 0;
data_0204a110.mUnk_DC0.func_0201db14(0x1000, temp, &sp14, &sp18, 1, 3);
this->mUnk_3C = 0x1000;
this->mUnk_40.x = 0;
this->mUnk_40.y = 0;
}
break;
}
case 2: {
u32 temp_r6 = this->mUnk_10->mUnk_10EC;
u8 temp_r7 = this->mUnk_10->mUnk_10E9;
switch (temp_r6) {
case 4:
case 5:
case 6:
case 7:
this->mUnk_44 = data_0204a110.mUnk_DC0.mUnk_08->func_0201ec30();
Vec2s auStack_14;
func_0201e8d4(&auStack_14, data_0204a110.mUnk_DC0.mUnk_04);
this->mUnk_48.x = auStack_14.x;
Vec2s auStack_18;
func_0201e8d4(&auStack_18, data_0204a110.mUnk_DC0.mUnk_04);
this->mUnk_48.y = auStack_18.y;
data_0204a110.mUnk_DC0.func_0201d628();
GetAdventureModeManager()->func_ov024_020c555c(4);
GetAdventureModeManager()->func_ov024_020c53e8();
GetAdventureModeManager()->func_ov024_020c6770(temp_r6, temp_r7, 0, 4);
break;
default:
GetAdventureModeManager()->func_ov024_020c555c(3);
GetAdventureModeManager()->func_ov024_020c53e8();
GetAdventureModeManager()->vfunc_38(temp_r6, temp_r7, 0, 0);
break;
}
break;
}
case 5:
default:
break;
}
data_02049f8c.mUnk_00 = this->mUnk_50;
data_0204a088->func_ov000_02061248();
func_02019b3c();
}
void AdventureModeManager_18C::vfunc_24() {
this->mUnk_10 = NULL;
this->mUnk_3A = false;
}
void AdventureModeManager_18C::func_ov024_020ca034() {
this->mUnk_14.func_0201bb84(0x14, 2, 0x14);
this->mUnk_14.mUnk_18 = false;
this->mUnk_14.mUnk_19 = true;
data_0204e5f8.func_0201b9a8(&this->mUnk_14);
this->mUnk_54 = true;
}
void AdventureModeManager_18C::func_ov024_020ca068(unk32 param1) {
this->mUnk_3A = true;
this->mUnk_4C = param1;
}
bool AdventureModeManager_18C::func_ov024_020ca074() {
return this->mUnk_3A;
}
THUMB_END