mirror of
https://github.com/zeldaret/st
synced 2026-07-10 15:03:58 -04:00
90203403dd
* 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
406 lines
12 KiB
C++
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
|