mirror of
https://github.com/zeldaret/st
synced 2026-10-07 13:25:33 -04:00
2c723299b7
* create CommonFuncs.hpp * merge every `extern "C"` to a common header * fix regressions * I'm dumb
644 lines
19 KiB
C++
644 lines
19 KiB
C++
#include "CommonFuncs.hpp"
|
|
#include "MainGame/AdventureMode.hpp"
|
|
#include "Save/SaveManager.hpp"
|
|
#include "System/SysNew.hpp"
|
|
#include "Unknown/UnkStruct_0204a110.hpp"
|
|
#include "Unknown/UnkStruct_027e0ce0.hpp"
|
|
#include "Unknown/UnkStruct_ov000_020b52b4.hpp"
|
|
#include "Unknown/UnkStruct_ov017_020c3f70.hpp"
|
|
#include <nitro/mi.h>
|
|
|
|
#include <nitro/gx.h>
|
|
#include <nitro/os.h>
|
|
|
|
static const bool data_ov024_020d7544[] = {true, false, true};
|
|
static const u8 data_ov024_020d7547[] = {0x03, 0x01, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00};
|
|
static u16 data_ov024_020d869c;
|
|
|
|
static const AdventureModeManager_1B8_Base_1C data_ov024_020d8200(0x14, 0x08, 0xD8, 0xB0);
|
|
|
|
AdventureModeManager_1B8_Base::AdventureModeManager_1B8_Base(u8 bgType, bool param2,
|
|
const AdventureModeManager_1B8_Base_1C ¶m3, bool param4,
|
|
bool param5) {
|
|
this->mUnk_00 = ADVMGR_UNK;
|
|
this->mUnk_04 = ADVMGR_UNK;
|
|
this->mUnk_08 = false;
|
|
this->mUnk_09 = param5;
|
|
this->mUnk_0A = false;
|
|
this->mUnk_0B = 0xBF;
|
|
this->mUnk_0C = 0x00;
|
|
this->mBGType = bgType;
|
|
this->mIsTopScreen = param2;
|
|
this->mUnk_10 = param4;
|
|
this->mUnk_14 = GetUnkValue_ImplS(param3.mUnk_06, param4);
|
|
this->mUnk_18 = (u8 *) ::operator new(this->mUnk_14, HeapIndex_1, 4);
|
|
MI_CpuCopy16((void *) ¶m3, &this->mUnk_1C, sizeof(AdventureModeManager_1B8_Base_1C));
|
|
this->func_ov024_020d0698();
|
|
}
|
|
|
|
AdventureModeManager_1B8_Base::~AdventureModeManager_1B8_Base() {
|
|
delete this->mUnk_18;
|
|
}
|
|
|
|
void AdventureModeManager_1B8_Base::func_ov024_020d0698() {
|
|
MI_CpuClearFast(this->mUnk_18, this->mUnk_14);
|
|
this->mUnk_0A = true;
|
|
this->mUnk_0D = true;
|
|
this->mUnk_00 = ADVMGR_UNK;
|
|
this->mUnk_04 = ADVMGR_UNK;
|
|
}
|
|
|
|
void AdventureModeManager_1B8_Base::func_ov024_020d06d0() {
|
|
if (this->mIsTopScreen && data_0204a110.mUnk_008 == 1) {
|
|
return;
|
|
}
|
|
|
|
if (this->mUnk_08) {
|
|
func_ov000_0205a950(this->mBGType, this->mIsTopScreen, this->mUnk_09);
|
|
} else {
|
|
func_ov000_0205a944(this->mBGType, this->mIsTopScreen, this->mUnk_09);
|
|
}
|
|
|
|
this->mUnk_0D = true;
|
|
this->func_ov024_020d0a64();
|
|
}
|
|
|
|
void AdventureModeManager_1B8_Base::func_ov024_020d072c(unk8 *param1) {
|
|
if (this->mUnk_0A) {
|
|
this->func_ov024_020d0a64();
|
|
}
|
|
}
|
|
|
|
static inline void SetUnkValue4(int a, int b, int *pVal) {
|
|
if (a <= b) {
|
|
if (*pVal < 0) {
|
|
*pVal = -*pVal;
|
|
}
|
|
} else if (*pVal > 0) {
|
|
*pVal = -*pVal;
|
|
}
|
|
}
|
|
|
|
bool AdventureModeManager_1B8_Base::func_ov024_020d0744(s32 arg1, s32 arg2, s32 arg3, s32 arg4, u8 arg5, u8 arg6) {
|
|
bool sp10;
|
|
s32 sp8;
|
|
s32 temp_r1;
|
|
s32 temp_r2;
|
|
s32 var_r11;
|
|
|
|
sp10 = false;
|
|
|
|
if (arg6 == 0) {
|
|
return false;
|
|
}
|
|
|
|
temp_r2 = arg3 - arg1;
|
|
temp_r1 = arg4 - arg2;
|
|
|
|
if (temp_r2 == 0 && temp_r1 == 0) {
|
|
sp10 = this->func_ov024_020d0924(arg3, arg4, arg5, arg6);
|
|
} else {
|
|
if (temp_r2 >= 0) {
|
|
sp8 = temp_r2;
|
|
} else {
|
|
sp8 = -temp_r2;
|
|
}
|
|
|
|
s32 var_r11 = (temp_r1 >= 0) ? temp_r1 : -temp_r1;
|
|
|
|
if (sp8 >= var_r11) {
|
|
func_01ffb644(INT_TO_FX32(temp_r1), INT_TO_FX32(temp_r2));
|
|
s32 var_r11_2 = (arg1 <= arg3) ? 1 : -1;
|
|
unk32 var_r5 = INT_TO_FX32(arg2);
|
|
unk32 var_r6 = func_01ffb558();
|
|
SetUnkValue4(arg2, arg4, &var_r6);
|
|
|
|
for (int i = 0; i <= sp8; i++) {
|
|
if (this->func_ov024_020d0924(arg1, ROUND_FX32(var_r5), arg5, arg6)) {
|
|
sp10 = true;
|
|
}
|
|
|
|
arg1 += var_r11_2;
|
|
var_r5 += var_r6;
|
|
}
|
|
} else {
|
|
func_01ffb644(INT_TO_FX32(temp_r2), INT_TO_FX32(temp_r1));
|
|
unk32 var_r5 = INT_TO_FX32(arg1);
|
|
s32 var_r11_2 = (arg2 <= arg4) ? 1 : -1;
|
|
unk32 var_r6 = func_01ffb558();
|
|
SetUnkValue4(arg1, arg3, &var_r6);
|
|
|
|
for (int i = 0; i <= var_r11; i++) {
|
|
if (this->func_ov024_020d0924(ROUND_FX32(var_r5), arg2, arg5, arg6)) {
|
|
sp10 = true;
|
|
}
|
|
|
|
var_r5 += var_r6;
|
|
arg2 += var_r11_2;
|
|
}
|
|
}
|
|
}
|
|
|
|
return sp10;
|
|
}
|
|
|
|
bool AdventureModeManager_1B8_Base::func_ov024_020d0924(unk32 param1, unk32 param2, u8 param3, u8 param4) {
|
|
unk32 var_r4;
|
|
unk32 var_r5;
|
|
unk32 var_r6;
|
|
unk32 var_r7;
|
|
unk32 var_r7_2;
|
|
unk32 var_r8;
|
|
|
|
if (param4 == 0) {
|
|
return false;
|
|
}
|
|
|
|
if (this->mUnk_10 && param3 >= 0x10) {
|
|
param3 &= 0x0F;
|
|
}
|
|
|
|
unk32 temp = param4 >> 1;
|
|
|
|
if ((param4 & 1) == 0) {
|
|
var_r7 = temp - 1;
|
|
} else {
|
|
var_r7 = temp;
|
|
}
|
|
|
|
var_r5 = param1 - var_r7;
|
|
if (var_r5 <= this->mUnk_1C.mUnk_00) {
|
|
var_r5 = this->mUnk_1C.mUnk_00;
|
|
}
|
|
|
|
var_r6 = param1 + temp;
|
|
if (var_r6 >= this->mUnk_1C.mUnk_00 + this->mUnk_1C.mUnk_04 - 1) {
|
|
var_r6 = this->mUnk_1C.mUnk_00 + this->mUnk_1C.mUnk_04 - 1;
|
|
}
|
|
|
|
if (var_r5 > var_r6) {
|
|
return false;
|
|
}
|
|
|
|
var_r7_2 = param2 - var_r7;
|
|
var_r8 = param2 + temp;
|
|
|
|
if (var_r7_2 <= this->mUnk_1C.mUnk_02) {
|
|
var_r7_2 = this->mUnk_1C.mUnk_02;
|
|
}
|
|
|
|
if (var_r8 >= this->mUnk_1C.mUnk_02 + this->mUnk_1C.mUnk_06 - 1) {
|
|
var_r8 = this->mUnk_1C.mUnk_02 + this->mUnk_1C.mUnk_06 - 1;
|
|
}
|
|
|
|
if (var_r7_2 > var_r8) {
|
|
return false;
|
|
}
|
|
|
|
for (; var_r7_2 <= var_r8; var_r7_2++) {
|
|
for (var_r4 = var_r5; var_r4 <= var_r6; var_r4++) {
|
|
unk32 index = this->func_ov024_020d0db4(var_r4, var_r7_2);
|
|
u8 *pBuffer = this->mUnk_18;
|
|
|
|
if (this->mUnk_10) {
|
|
u8 value = pBuffer[index];
|
|
|
|
if (var_r4 & 1) {
|
|
pBuffer[index] = (value & 0x0F) | (param3 * 16);
|
|
} else {
|
|
pBuffer[index] = (value & 0xF0) | param3;
|
|
}
|
|
} else {
|
|
pBuffer[index] = param3;
|
|
}
|
|
}
|
|
|
|
if (var_r7_2 < this->mUnk_0B) {
|
|
this->mUnk_0B = var_r7_2;
|
|
}
|
|
|
|
if (var_r7_2 > this->mUnk_0C) {
|
|
this->mUnk_0C = var_r7_2;
|
|
}
|
|
}
|
|
|
|
this->mUnk_0A = true;
|
|
return true;
|
|
}
|
|
|
|
void AdventureModeManager_1B8_Base::func_ov024_020d0a64() {
|
|
u32 var_r2;
|
|
s32 var_r2_2;
|
|
s32 var_r3;
|
|
u32 var_r6;
|
|
s32 var_r6_2;
|
|
s32 var_r7;
|
|
u8 *temp_r7;
|
|
s32 var_r8;
|
|
|
|
if (this->mUnk_0D) {
|
|
this->mUnk_0B = this->mUnk_1C.mUnk_02;
|
|
this->mUnk_0C = 0xBF - this->mUnk_1C.mUnk_02;
|
|
|
|
if (this->func_ov024_020d0e98()) {
|
|
if (this->mUnk_10) {
|
|
var_r6 = (this->mUnk_1C.mUnk_02 * 0x100) / 2;
|
|
} else {
|
|
var_r6 = this->mUnk_1C.mUnk_02 * 0x100;
|
|
}
|
|
|
|
if (var_r6 != 0) {
|
|
UnkDataStruct2 sp4(var_r6);
|
|
MI_CpuClearFast(sp4.unk_00, var_r6);
|
|
this->TryLoadBGChar(sp4.unk_00, GetUnkValue2(), var_r6);
|
|
}
|
|
|
|
var_r6 = this->mUnk_1C.mUnk_02 + this->mUnk_1C.mUnk_06;
|
|
var_r7 = GetUnkValue(0xC0 - var_r6);
|
|
|
|
if (var_r7 != 0) {
|
|
UnkDataStruct2 sp0(var_r7);
|
|
MI_CpuClearFast(sp0.unk_00, var_r7);
|
|
this->TryLoadBGChar(sp0.unk_00, GetUnkValue2() + GetUnkValue(var_r6), var_r7);
|
|
}
|
|
}
|
|
|
|
this->mUnk_0D = false;
|
|
}
|
|
|
|
if (this->func_ov024_020d0e98()) {
|
|
this->mUnk_0B = this->mUnk_0B - this->mUnk_1C.mUnk_02;
|
|
this->mUnk_0C = this->mUnk_0C - this->mUnk_1C.mUnk_02;
|
|
}
|
|
|
|
this->mUnk_0B = (this->mUnk_0B / 8) * 8;
|
|
this->mUnk_0C = (((this->mUnk_0C / 8) + 1) * 8) - 1;
|
|
|
|
if (this->mUnk_10) {
|
|
var_r6_2 = (this->mUnk_0B * 256) / 2;
|
|
} else {
|
|
var_r6_2 = (this->mUnk_0B * 256);
|
|
}
|
|
|
|
temp_r7 = &this->mUnk_18[var_r6_2];
|
|
|
|
if (this->func_ov024_020d0e98()) {
|
|
if (this->mUnk_10) {
|
|
var_r6_2 += (this->mUnk_1C.mUnk_02 * 0x100) / 2;
|
|
} else {
|
|
var_r6_2 += this->mUnk_1C.mUnk_02 * 0x100;
|
|
}
|
|
}
|
|
|
|
var_r2_2 = GetUnkValue2();
|
|
|
|
if (this->mUnk_10) {
|
|
var_r3 = ((this->mUnk_0C - this->mUnk_0B + 1) * 0x100) / 2;
|
|
} else {
|
|
var_r3 = (this->mUnk_0C - this->mUnk_0B + 1) * 0x100;
|
|
}
|
|
|
|
this->TryLoadBGChar(temp_r7, var_r6_2 + var_r2_2, var_r3);
|
|
|
|
this->mUnk_0A = false;
|
|
this->mUnk_0B = 0xBF;
|
|
this->mUnk_0C = 0;
|
|
}
|
|
|
|
void AdventureModeManager_1B8_Base::TryLoadBGChar(void *ptr, u32 offset, u32 size) {
|
|
DC_func_0002();
|
|
|
|
if (!this->mIsTopScreen) {
|
|
switch (this->mBGType) {
|
|
case 0:
|
|
GX_LoadBG0Char(ptr, offset, size);
|
|
break;
|
|
case 1:
|
|
GX_LoadBG1Char(ptr, offset, size);
|
|
break;
|
|
case 2:
|
|
GX_LoadBG2Char(ptr, offset, size);
|
|
break;
|
|
case 3:
|
|
GX_LoadBG3Char(ptr, offset, size);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
} else if (data_0204a110.mUnk_008 != 1) {
|
|
switch (this->mBGType) {
|
|
case 0:
|
|
GXS_LoadBG0Char(ptr, offset, size);
|
|
break;
|
|
case 1:
|
|
GXS_LoadBG1Char(ptr, offset, size);
|
|
break;
|
|
case 2:
|
|
GXS_LoadBG2Char(ptr, offset, size);
|
|
break;
|
|
case 3:
|
|
GXS_LoadBG3Char(ptr, offset, size);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
unk32 AdventureModeManager_1B8_Base::func_ov024_020d0db4(unk32 param1, unk32 param2) {
|
|
u32 temp_r0;
|
|
s32 temp_r2;
|
|
s32 temp_r3;
|
|
|
|
temp_r3 = param2 - this->mUnk_1C.mUnk_02;
|
|
temp_r2 = (param1 >> 3) + ((temp_r3 >> 3) << 5);
|
|
temp_r0 = temp_r3 << 0x1D;
|
|
|
|
if (this->mUnk_10) {
|
|
return (temp_r2 << 5) + (temp_r0 >> 0x1B) + ((param1 & 0x07) >> 1);
|
|
}
|
|
|
|
return (param1 & 0x07) + ((temp_r2 << 6) + (temp_r0 >> 0x1A));
|
|
}
|
|
|
|
bool AdventureModeManager_1B8_Base::func_ov024_020d0df8(unk32 param1, unk32 param2) {
|
|
bool var_r4 = false;
|
|
|
|
if (param1 >= 0 && param1 < 0x100 && param2 >= 0 && param2 < 0xC0) {
|
|
u8 temp_r0 = this->mUnk_18[this->func_ov024_020d0db4(param1, param2)];
|
|
|
|
if (this->mUnk_10) {
|
|
if (param1 & 1) {
|
|
if (temp_r0 & 0xF0) {
|
|
var_r4 = true;
|
|
}
|
|
} else {
|
|
if (temp_r0 & 0x0F) {
|
|
var_r4 = true;
|
|
}
|
|
}
|
|
} else {
|
|
if (temp_r0 != 0) {
|
|
var_r4 = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return var_r4;
|
|
}
|
|
|
|
void AdventureModeManager_1B8_Base::func_ov024_020d0e64(void *ptr, u32 size) {
|
|
DC_FlushRange(ptr, size * 2);
|
|
GXS_BeginLoadBGExtPltt();
|
|
GXS_LoadBGExtPltt(ptr, 0x4000, size * 2);
|
|
GXS_EndLoadBGExtPltt();
|
|
}
|
|
|
|
bool AdventureModeManager_1B8_Base::func_ov024_020d0e98() {
|
|
if (this->mUnk_1C.mUnk_02 > 0 || this->mUnk_1C.mUnk_06 < 0xC0) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void AdventureModeManager_1B8_Base::func_ov024_020d0ec0(s32 *pFlags, s32 position, bool doSet) {
|
|
if (doSet) {
|
|
SET_FLAG_ALT(pFlags, position);
|
|
} else {
|
|
UNSET_FLAG_ALT(pFlags, position);
|
|
}
|
|
}
|
|
|
|
bool AdventureModeManager_1B8_Base::func_ov024_020d0f0c(s32 *pFlags, s32 position) {
|
|
if (GET_FLAG_ALT(pFlags, position)) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
unk32 AdventureModeManager_1B8_Base::func_ov024_020d0f2c(unk32 param1, unk32 param2) {
|
|
return data_ov024_020d8200.mUnk_04 * (param2 - data_ov024_020d8200.mUnk_02) + (param1 - data_ov024_020d8200.mUnk_00);
|
|
}
|
|
|
|
AdventureModeManager_1B8::AdventureModeManager_1B8(u8 bgType, bool param2, bool param3) :
|
|
AdventureModeManager_1B8_Base(bgType, param2, data_ov024_020d8200, param3, false) {
|
|
this->mUnk_24 = 0xFF;
|
|
this->mUnk_28 = NULL;
|
|
this->func_ov024_020d0e64(&data_ov024_020d869c, sizeof(data_ov024_020d869c));
|
|
}
|
|
|
|
AdventureModeManager_1B8::~AdventureModeManager_1B8() {}
|
|
|
|
void AdventureModeManager_1B8::func_ov024_020d0fb4(unk32 param1, unk32 param2, u8 param3, u8 param4, TouchControl *param5) {
|
|
param1 -= data_0204a110.mUnk_E02;
|
|
|
|
if (CHECK_TOUCH_FLAGS(param5, TouchFlag_TouchedNow) ||
|
|
(param5->mState.touch && this->mUnk_00 == ADVMGR_UNK && this->mUnk_04 == ADVMGR_UNK)) {
|
|
if (this->func_ov024_020d0924(param1, param2, param3, param4)) {
|
|
this->mUnk_00 = param1;
|
|
this->mUnk_04 = param2;
|
|
|
|
if (param3 == 0) {
|
|
data_ov000_020b52b4.func_ov000_0206f778(param1, param2, 0x42);
|
|
} else {
|
|
data_ov000_020b52b4.func_ov000_0206f778(param1, param2, 0x41);
|
|
}
|
|
} else {
|
|
this->mUnk_00 = ADVMGR_UNK;
|
|
this->mUnk_04 = ADVMGR_UNK;
|
|
}
|
|
} else if (param5->mState.touch) {
|
|
if (this->func_ov024_020d0744(this->mUnk_00, this->mUnk_04, param1, param2, param3, param4)) {
|
|
this->mUnk_00 = param1;
|
|
this->mUnk_04 = param2;
|
|
|
|
if (param3 == 0) {
|
|
data_ov000_020b52b4.func_ov000_0206f778(param1, param2, 0x42);
|
|
} else {
|
|
data_ov000_020b52b4.func_ov000_0206f778(param1, param2, 0x41);
|
|
}
|
|
|
|
data_027e0ce0->func_ov017_020bd69c();
|
|
} else {
|
|
this->mUnk_00 = ADVMGR_UNK;
|
|
this->mUnk_04 = ADVMGR_UNK;
|
|
}
|
|
} else {
|
|
this->mUnk_00 = ADVMGR_UNK;
|
|
this->mUnk_04 = ADVMGR_UNK;
|
|
}
|
|
}
|
|
|
|
void AdventureModeManager_1B8::func_ov024_020d114c() {
|
|
this->mUnk_00 = ADVMGR_UNK;
|
|
this->mUnk_04 = ADVMGR_UNK;
|
|
}
|
|
|
|
bool AdventureModeManager_1B8::func_ov024_020d1160() {
|
|
UnkDataStruct2 sp1C(0x4A90);
|
|
|
|
s32 *unk_00 = (s32 *) sp1C.unk_00;
|
|
void *sp14 = (void *) ((u8 *) sp1C.unk_00 + 0x1290);
|
|
void *unk_28 = this->mUnk_28;
|
|
|
|
this->func_ov024_020d14a8((AdventureModeManager_1B8_Base_1C *) &data_ov024_020d8200, 0x1290, unk_00);
|
|
|
|
for (int spC = 0; spC < 4; spC++) {
|
|
u32 temp_r0 = func_0202955c(unk_00, 0x1290, unk_28, 4, sp14);
|
|
|
|
if (temp_r0 != 0 && temp_r0 <= 0xFFC) {
|
|
if (0xFFC - temp_r0 != 0) {
|
|
MI_CpuFill8((void *) ((u8 *) unk_28 + temp_r0), 0, 0xFFC - temp_r0);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
if (spC < 3) {
|
|
int sp8 = data_ov024_020d8200.mUnk_00 + data_ov024_020d8200.mUnk_04;
|
|
int sp4 = data_ov024_020d8200.mUnk_02 + data_ov024_020d8200.mUnk_06;
|
|
int var_r5;
|
|
int var_r6;
|
|
int var_r7;
|
|
int var_r8;
|
|
bool var_r9;
|
|
int var_r10;
|
|
|
|
for (var_r8 = data_ov024_020d8200.mUnk_02; var_r8 < sp4; var_r8 += 2) {
|
|
for (var_r10 = data_ov024_020d8200.mUnk_00; var_r10 < sp8; var_r10 += 2) {
|
|
var_r7 = 0;
|
|
|
|
for (var_r5 = 0; var_r5 < 2; var_r5++) {
|
|
for (var_r6 = 0; var_r6 < 2; var_r6++) {
|
|
int result = AdventureModeManager_1B8_Base::func_ov024_020d0f2c(var_r10 + var_r6, var_r8 + var_r5);
|
|
if (AdventureModeManager_1B8_Base::func_ov024_020d0f0c(unk_00, result)) {
|
|
var_r7++;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (data_ov024_020d7547[spC] == var_r7) {
|
|
var_r9 = data_ov024_020d7544[spC];
|
|
|
|
for (var_r5 = 0; var_r5 < 2; var_r5++) {
|
|
for (var_r6 = 0; var_r6 < 2; var_r6++) {
|
|
int result =
|
|
AdventureModeManager_1B8_Base::func_ov024_020d0f2c(var_r10 + var_r6, var_r8 + var_r5);
|
|
AdventureModeManager_1B8_Base::func_ov024_020d0ec0(unk_00, result, var_r9);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void AdventureModeManager_1B8::func_ov024_020d1364() {
|
|
if (this->mUnk_24 == 0xFF) {
|
|
return;
|
|
}
|
|
|
|
if (this->mUnk_24 >= 0x78) {
|
|
return;
|
|
}
|
|
|
|
if (!this->func_ov024_020d1160()) {
|
|
return;
|
|
}
|
|
|
|
gSaveManager.func_ov017_020c3040(this->mUnk_28, this->mUnk_24);
|
|
SET_FLAG(gSaveManager.mUnk_000->unk_B30.unk_00, this->mUnk_24);
|
|
}
|
|
|
|
void AdventureModeManager_1B8::func_ov024_020d13cc(s32 param1) {
|
|
this->mUnk_24 = param1;
|
|
this->func_ov024_020d0698();
|
|
|
|
if (this->mUnk_24 == 0xFF) {
|
|
return;
|
|
}
|
|
|
|
if (this->mUnk_24 >= 0x78) {
|
|
return;
|
|
}
|
|
|
|
if (GET_FLAG(gSaveManager.mUnk_000->unk_B30.unk_00, this->mUnk_24)) {
|
|
UnkDataStruct2 sp4(0x2290);
|
|
void *unk_00 = sp4.unk_00;
|
|
|
|
if (gSaveManager.func_ov000_020a0b70(unk_00, this->mUnk_24)) {
|
|
s32 *ptr = (s32 *) ((u8 *) sp4.unk_00 + 0x1000);
|
|
func_02029058(unk_00, ptr);
|
|
this->func_ov024_020d1564(&data_ov024_020d8200, 0x1290, ptr, 1);
|
|
return; // this is required
|
|
}
|
|
}
|
|
}
|
|
|
|
bool AdventureModeManager_1B8::func_ov024_020d14a8(AdventureModeManager_1B8_Base_1C *param1, unk32 param2, s32 *pFlags) {
|
|
int i;
|
|
int var_r5;
|
|
int temp_r6;
|
|
int var_r7;
|
|
int temp_r1;
|
|
bool ret = false;
|
|
|
|
MI_CpuFill8(pFlags, 0, param2);
|
|
|
|
temp_r6 = param1->mUnk_00 + param1->mUnk_04;
|
|
var_r5 = param1->mUnk_02;
|
|
temp_r1 = var_r5 + param1->mUnk_06;
|
|
|
|
var_r7 = 0;
|
|
|
|
for (; var_r5 < temp_r1; var_r5++) {
|
|
for (i = param1->mUnk_00; i < temp_r6; var_r7++, i++) {
|
|
if (this->func_ov024_020d0df8(i, var_r5)) {
|
|
this->func_ov024_020d0ec0(pFlags, var_r7, 1);
|
|
ret = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
void AdventureModeManager_1B8::func_ov024_020d1564(const AdventureModeManager_1B8_Base_1C *param1, unk32 param2, s32 *pFlags,
|
|
const u8 param4) {
|
|
int i;
|
|
int var_r5;
|
|
int temp_r6;
|
|
int var_r7;
|
|
int temp_r1;
|
|
|
|
temp_r6 = param1->mUnk_00 + param1->mUnk_04;
|
|
var_r5 = param1->mUnk_02;
|
|
temp_r1 = var_r5 + param1->mUnk_06;
|
|
|
|
var_r7 = 0;
|
|
|
|
for (; var_r5 < temp_r1; var_r5++) {
|
|
for (i = param1->mUnk_00; i < temp_r6; var_r7++, i++) {
|
|
if (AdventureModeManager_1B8_Base::func_ov024_020d0f0c(pFlags, var_r7)) {
|
|
this->func_ov024_020d0924(i, var_r5, param4, 1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void AdventureModeManager_1B8::func_ov024_020d1614(GameSaveSlot *param1) {
|
|
this->mUnk_28 = param1;
|
|
MI_CpuClearFast(this->mUnk_28, 0x1000);
|
|
StaticInstance<UnkStruct_ov017_020c3f70>::sInstance.func_ov017_020bba78();
|
|
}
|
|
|
|
void AdventureModeManager_1B8::func_ov024_020d1638() {
|
|
StaticInstance<UnkStruct_ov017_020c3f70>::sInstance.func_ov017_020bba94();
|
|
this->mUnk_28 = NULL;
|
|
}
|