Decompile overlay 1 (Part 2) (#91)

* UnkStruct_027e09b8_001 OK

* match func_ov001_020b7830

* fix build issues

* UnkStruct_027e0cd8_001 49%

* UnkStruct_027e0cd8_001 OK

* fix build issues

* UnkStruct_027e0cd8_0C_001 92%

* port some MSL C++ headers from rb3 and key decomps

* fix build issues

* UnkStruct_027e0cd8_0C_001 98%
This commit is contained in:
Yanis
2026-06-28 15:29:34 +02:00
committed by GitHub
parent af4e4dcf5d
commit b116e79e9f
110 changed files with 5210 additions and 635 deletions
+1 -1
View File
@@ -48,7 +48,7 @@ void ActorUnkEFIK::vfunc_20() {
for (int i = 0; i < length; i++) {
u8 j;
u8 k;
UnkStruct_027e0cd8_0c *pUVar5 = data_027e0cd8->mUnk_0C;
UnkStruct_027e0cd8_0C_Base *pUVar5 = data_027e0cd8->mUnk_0C;
u8 bStack_3c[2];
bStack_3c[0] = 0;
+5 -4
View File
@@ -15,6 +15,7 @@ extern "C" void func_01ffb9cc(VecFx32 *, VecFx32 *);
extern "C" u16 func_01ffbbe0(fx32 x, fx32 z);
extern "C" void func_01ffecdc(unk32 param1, Cylinder *param2);
extern "C" bool func_01ffd768(unk32, void *, void *, unk8);
extern "C" void func_01fff6d0(void *, VecFx32 *param1, s32 *param2, s32 *param3);
MapObject::MapObject() {
this->mUnk_10 = NULL;
@@ -57,9 +58,9 @@ void MapObject::func_ov000_0209d0bc(Vec2b *param1, MapObject *thisx) {
VecFx32 pos;
Vec2p out;
MapObjectManager *t = data_027e0cd8->mUnk_10;
pos = thisx->mPos;
t->func_01fff6d0(&pos, (fx32 *) &out.y, (fx32 *) &out.x);
UnkStruct_027e0cd8_10 *ptr = data_027e0cd8->mUnk_10;
pos = thisx->mPos;
func_01fff6d0(ptr, &pos, (fx32 *) &out.y, (fx32 *) &out.x);
Vec2p temp;
temp.y = out.x;
@@ -145,7 +146,7 @@ void MapObject::func_ov000_0209d2c4(unk32 param1, bool param2) {
}
void MapObject::func_ov000_0209d2f0(unk32 param1, unk32 param2, Vec2b *param3) {
UnkStruct_027e0cd8_0c *temp_r5 = data_027e0cd8->mUnk_0C;
UnkStruct_027e0cd8_0C_Base *temp_r5 = data_027e0cd8->mUnk_0C;
Vec2b sp0(0, 0);
sp0.x = this->mUnk_3A.x;
@@ -36,12 +36,12 @@ MapObjectMiniBlocks::MapObjectMiniBlocks() {
bool MapObjectMiniBlocks::vfunc_00(void) {
GET_PROFILE(MapObjectProfileMiniBlocks)
->func_ov000_0209ccd8(this->mUnk_20.mUnk_00[1], data_ov000_020af574[this->mUnk_20.mUnk_00[1]]);
UnkStruct_027e0cd8_0c *pUnkStruct_027e0cd8_0c = data_027e0cd8->mUnk_0C;
UnkStruct_027e0cd8_0C_Base *pUnkStruct_027e0cd8_0C = data_027e0cd8->mUnk_0C;
u8 uVar6;
if (this->mUnk_20.mUnk_00[1] != MiniBlocksVariant_BLKF) {
Vec2b vec(this->mUnk_3A.x, this->mUnk_3A.y);
this->mPos.y = pUnkStruct_027e0cd8_0c->func_01ffedf4(&vec);
this->mPos.y = pUnkStruct_027e0cd8_0C->func_01ffedf4(&vec);
}
VecFx32 vec;
+11 -11
View File
@@ -83,9 +83,9 @@ void ActorManager::func_ov001_020bafdc() {
}
// https://decomp.me/scratch/UywfM
void ActorManager::func_ov001_020bb018(UnkStruct_func_ov001_020bb018_param2 *param1) {
u16 unk_0A = param1->mUnk_0A;
u16 unk_08 = param1->mUnk_08;
void ActorManager::func_ov001_020bb018(ZOBHeader *pHeader) {
u16 unk_0A = pHeader->unk_0A;
u16 unk_08 = pHeader->unk_08;
this->mActorCount = 0;
this->mNextActorId = 0;
@@ -206,19 +206,19 @@ void ActorManager::func_ov001_020bb018(UnkStruct_func_ov001_020bb018_param2 *par
}
}
void ActorManager::func_ov001_020bb414(ActorManager *instance) {
void ActorManager::func_ov001_020bb414() {
func_ov001_020ba59c(&data_0204999c);
if (data_027e09a4->UnkCheck(data_027e09a4->mUnk_00.mSceneIndex)) {
instance->func_ov001_020bb844();
this->func_ov001_020bb844();
}
if (instance->mActorTable != 0) {
delete instance->mActorTable;
if (this->mActorTable != 0) {
delete this->mActorTable;
}
instance->mActorTable = NULL;
instance->mActorTableEnd = NULL;
this->mActorTable = NULL;
this->mActorTableEnd = NULL;
}
void ActorManager::func_ov001_020bb488() {
@@ -228,7 +228,7 @@ void ActorManager::func_ov001_020bb488() {
case 0x01:
case 0x03:
case 0x06:
if (data_027e0cd8->mUnk_0C->mUnk_128 & 0x800) {
if (data_027e0cd8->GetUnk0C()->mUnk_128 & 0x800) {
func_ov031_020ea100();
}
break;
@@ -363,7 +363,7 @@ bool ActorManager::func_ov001_020bb728(s32 param1) {
}
void ActorManager::func_ov001_020bb7b0(ZeldaObjectList *pObjList) {
for (s32 i = 0; i < pObjList->nEntries; i++) {
for (s32 i = 0; i < pObjList->header.nEntries; i++) {
u32 id = pObjList->aIdList[i];
ActorProfile *pActorProfile = data_ov000_020b539c_eur.GetProfileFromId(id);
@@ -0,0 +1,85 @@
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_0204a088.hpp"
#include "Unknown/UnkStruct_027e09b8.hpp"
#include "Unknown/UnkStruct_ov000_02067bc4.hpp"
#include <nitro/mi.h>
struct UnkStruct_ov000_02073080 {
/* 00 */ STRUCT_PAD(0x00, 0x08);
/* 08 */ CutsceneIndex csIndex;
/* 0C */ STRUCT_PAD(0x0C, 0x1C);
/* 1C */
};
extern "C" void func_ov000_02073080(void *);
UnkStruct_027e09b8 *UnkStruct_027e09b8::Create() {
return new(HeapIndex_1) UnkStruct_027e09b8();
}
UnkStruct_027e09b8::UnkStruct_027e09b8() {
MI_CpuFill32(0, this->mAdventureFlags, sizeof(this->mAdventureFlags));
this->mUnk_94 = 0;
this->mUnk_96 = false;
this->mUnk_97 = false;
MI_CpuFill32(0, this->mUnk_04, sizeof(this->mUnk_04));
this->mUnk_00 = new(HeapIndex_1) UnkStruct_027e09b8_00();
this->mUnk_04[0] = new(HeapIndex_1) UnkStruct_027e09b8_04();
this->mUnk_04[2] = new(HeapIndex_1) UnkStruct_027e09b8_0C();
if (data_0204a088 != NULL) {
this->mUnk_04[3] = new(HeapIndex_1) UnkStruct_027e09b8_10();
}
this->mUnk_98 = new(HeapIndex_1) UnkStruct_027e09b8_98();
}
UnkStruct_027e09b8::~UnkStruct_027e09b8() {
for (int i = 0; i < ARRAY_LEN(this->mUnk_04); i++) {
delete this->mUnk_04[i];
}
delete this->mUnk_00;
if (this->mUnk_98 != NULL) {
DELETE(this->mUnk_98);
}
}
void UnkStruct_027e09b8::ImportAdventureFlags(AdventureFlag *pAdventureFlags) {
MI_CpuCopy32(pAdventureFlags, this->mAdventureFlags, sizeof(this->mAdventureFlags));
}
void UnkStruct_027e09b8::func_ov001_020b76c0(CutsceneIndex csIndex) {
UnkStruct_ov000_02073080 auStack_30;
func_ov000_02073080(&auStack_30);
auStack_30.csIndex = csIndex;
this->mUnk_04[1] = new(HeapIndex_1) UnkStruct_027e09b8_08(&auStack_30);
this->func_ov000_02073610(&auStack_30, 0);
data_ov000_020b504c.func_ov001_020be998();
}
void UnkStruct_027e09b8::func_ov001_020b7700() {
if (this->mUnk_04[1] != NULL) {
data_ov000_020b504c.func_ov001_020be504();
DELETE(this->mUnk_04[1]);
}
}
void UnkStruct_027e09b8::func_ov001_020b7728() {
this->mUnk_00->func_ov000_02073b5c();
for (int i = 0; i < ARRAY_LEN(this->mUnk_04); i++) {
if (this->mUnk_04[i] != NULL) {
this->mUnk_04[i]->vfunc_0C();
}
}
this->mUnk_98->func_ov000_020a7b34();
}
DECL_INSTANCE(UnkStruct_027e09b8, data_027e09b8);
@@ -0,0 +1,492 @@
#include "Actor/ActorManager.hpp"
#include "Save/SaveManager.hpp"
#include "System/OverlayManager.hpp"
#include "System/SysNew.hpp"
#include "Unknown/Common.hpp"
#include "Unknown/UnkStruct_02049bac.hpp"
#include "Unknown/UnkStruct_027e09a0.hpp"
#include "Unknown/UnkStruct_027e09a4.hpp"
#include "Unknown/UnkStruct_027e09b8.hpp"
#include "Unknown/UnkStruct_027e09bc.hpp"
#include "Unknown/UnkStruct_027e09c0.hpp"
#include "Unknown/UnkStruct_027e0cd8.hpp"
#include "Unknown/UnkStruct_027e0ce0.hpp"
#include "Unknown/UnkStruct_027e0cec.hpp"
#include "Unknown/UnkStruct_ov000_02067bc4.hpp"
#include "Unknown/UnkStruct_ov000_020b50c0.hpp"
#include "Unknown/UnkStruct_ov024_020d8660.hpp"
#include "Unknown/UnkStruct_ov024_020d8694.hpp"
#include "Unknown/UnkStruct_ov026_02138d10.hpp"
#include "files.h"
#include "versions.h"
#include <dsprot.h>
#include <printf.h>
extern "C" void func_ov026_020e9208();
extern "C" void func_ov000_02081520(void *, void *, u8);
extern "C" void func_ov000_020814ec(void *, void *);
extern "C" void func_ov084_0216122c();
extern "C" void func_ov084_021612ac();
extern void *data_ov084_02164690;
struct UnkStruct7 {
/* 00 */ u16 unk_00;
/* 02 */ Vec2s unk_02;
/* 04 */
};
UnkStruct_027e0cd8 *UnkStruct_027e0cd8::Create() {
return new(HeapIndex_1) UnkStruct_027e0cd8();
}
UnkStruct_027e0cd8::UnkStruct_027e0cd8() :
mUnk_04(NULL),
mUnk_08(NULL),
mUnk_0C(NULL),
mUnk_10(NULL),
mUnk_16(true),
mUnk_17(true),
mUnk_30(-1),
mUnk_34(-1) {
UnkStruct_027e09bc *ptr = data_027e09bc;
UnkSystem8 *pList = GetLinkListRef(this->mUnk_18);
ptr->mUnk_48.Prepend(pList);
VecFx32_Init(0, 0, 0, &this->mUnk_24);
for (int i = 0; i < ARRAY_LEN(this->mUnk_38); i++) {
this->mUnk_38[i] = 0;
this->mUnk_48[i] = false;
}
}
UnkStruct_027e0cd8::~UnkStruct_027e0cd8() {
DELETE(this->mUnk_04);
DELETE(this->mUnk_08);
}
void UnkStruct_027e0cd8::func_ov001_020b7830(const UnkStruct_SceneChange1 *param1) {
CourseListEntry *pEntry;
UnkStruct_func_ov000_020702a8 *pUnk1;
pEntry = data_027e09a0->GetCourseEntry(param1->mSceneIndex);
pUnk1 = data_027e09a0->func_ov000_020702a8(param1->mSceneIndex);
wchar_t sp80[16];
sp80[0] = L'\0';
sp80[sizeof(sp80) / 2 - 1] = L'\0';
snprintf((char *) sp80, sizeof(sp80), "Map/%s/course.bin", pEntry->name);
UnkStruct2 sp70((char *) sp80, 0x01);
sp70.func_020154ec("MCS");
bool isCS = true;
if (param1->mIsCS != true) {
isCS = false;
}
UnkFileSystem3 sp60(isCS ? "MCS:objlist/npctype_1.zob" : "MCS:objlist/npctype.zob");
gpActorManager->func_ov001_020bb018((ZOBHeader *) sp60.vfunc_08(sizeof(ZOBHeader)));
UnkFileSystem3 sp50(isCS ? "MCS:objlist/motype_1.zob" : "MCS:objlist/motype.zob");
gpMapObjManager->func_ov001_020bacd8((ZOBHeader *) sp50.vfunc_08(sizeof(ZOBHeader)));
UnkStruct7 sp4;
Vec2s_Copy(&pUnk1->mUnk_10, &sp4.unk_02);
Vec2s_Copy(&sp4.unk_02, &this->mUnk_00);
this->mUnk_14 = pEntry->unk_10;
this->mUnk_04 = new(HeapIndex_1) UnkStruct_027e0cd8_04();
if (pEntry->unk_21 != -1) {
this->mUnk_08 = new(HeapIndex_1) UnkStruct_027e0cd8_04();
}
if (DSProt_DetectEmulator(NULL) == 0) {
this->mUnk_30 = 0x1C;
}
if (this->mUnk_14 == 0x02 || this->mUnk_14 == 0x04) {
this->mUnk_10 = new(HeapIndex_1) UnkStruct_027e0cd8_10();
func_ov026_020e9208();
} else if (data_027e09a4->mUnk_60 == 0 && data_ov024_020d8694 != NULL) {
if (data_027e09a4->CurrentSceneIndex() == SceneIndex_d_main) {
data_ov024_020d8694->func_ov024_020cb000(20);
} else {
data_ov024_020d8694->func_ov024_020cafb8(20);
}
}
this->func_ov001_020b8120(param1->mSceneIndex);
if (pEntry->unk_21 != -1) {
wchar_t sp30[16];
sp30[0] = L'\0';
sp30[sizeof(sp30) / 2 - 1] = L'\0';
snprintf((char *) sp30, sizeof(sp30), "Map/%s/course.bin", data_027e09a0->GetCourseEntry(pEntry->unk_21)->name);
UnkStruct2 sp20((const char *) sp30, 0x01);
sp20.func_020154ec("MCT");
this->func_ov001_020b7b38(pEntry, pUnk1);
} else {
this->func_ov001_020b7b38(pEntry, pUnk1);
}
UnkStruct_SceneChange1 sceneChange(param1);
if (sceneChange.mRoomIndex != 0xFF) {
func_ov000_02081520(&sp4, this->mUnk_04, sceneChange.mRoomIndex);
func_ov000_020814ec(this->mUnk_04, &sp4);
} else {
sceneChange.mRoomIndex = this->mUnk_04->mUnk_40[this->mUnk_04->mUnk_10][this->mUnk_04->mUnk_11];
}
this->func_ov001_020b7d64(&sceneChange);
this->func_ov001_020b7e68(&sceneChange, 0x01);
}
void UnkStruct_027e0cd8::func_ov001_020b7a7c() {
this->func_ov001_020b818c();
this->func_ov001_020b803c();
data_02049ba0.Unload(OverlaySlot_12);
data_02049ba0.Unload(OverlaySlot_16);
data_02049ba0.Unload(OverlaySlot_15);
data_02049ba0.Unload(OverlaySlot_14);
data_02049ba0.Unload(OverlaySlot_13);
this->func_ov001_020b7e50();
this->mUnk_30 = -1;
if (data_027e09a4->mUnk_60 == 0) {
this->func_ov000_02081ca0();
}
DELETE(this->mUnk_04);
DELETE(this->mUnk_08);
if (this->mUnk_10 != NULL) {
DELETE(this->mUnk_10);
}
gpMapObjManager->func_ov001_020bad80();
gpActorManager->func_ov001_020bb414();
}
void UnkStruct_027e0cd8::func_ov001_020b7b38(const CourseListEntry *pEntry, const UnkStruct_func_ov000_020702a8 *pUnk1) {
if (pEntry->saveCourseIndex < SaveCourseIndex_Max) {
SaveManager_00 *ptr = gSaveManager.mUnk_000;
this->mUnk_04->func_ov000_02081354(pEntry, pUnk1, &ptr->unk_030[pEntry->saveCourseIndex], false);
SET_FLAG(ptr->unk_004.unk_00, pEntry->saveCourseIndex);
} else {
SaveFile_00000_0000_Data_184 local_1c;
MI_CpuFill32(0, &local_1c, sizeof(local_1c));
this->mUnk_04->func_ov000_02081354(pEntry, pUnk1, &local_1c, false);
}
this->mUnk_34 = pEntry->unk_21;
if (this->mUnk_34 != SceneIndex_None) {
CourseListEntry *pOtherEntry = data_027e09a0->GetCourseEntry(this->mUnk_34);
UnkStruct_func_ov000_020702a8 *pOtherUnk1 = data_027e09a0->func_ov000_020702a8(this->mUnk_34);
if (pOtherEntry->saveCourseIndex < SaveCourseIndex_Max) {
this->mUnk_08->func_ov000_02081354(pOtherEntry, pOtherUnk1,
&gSaveManager.mUnk_000->unk_030[pOtherEntry->saveCourseIndex], true);
} else {
SaveFile_00000_0000_Data_184 local_1c;
MI_CpuFill32(0, &local_1c, sizeof(local_1c));
this->mUnk_08->func_ov000_02081354(pOtherEntry, pOtherUnk1, &local_1c, true);
}
}
}
void UnkStruct_027e0cd8::func_ov001_020b7c08(const UnkStruct_SceneChange1 *param1, const UnkStruct_WarpUnk1_A0 *param2) {
UnkStruct_SceneChange1 sceneChange(param1);
Vec2s sp4;
if (this->mUnk_30 == param1->mSceneIndex && DSProt_DetectNotFlashcart(NULL) != 0) {
data_ov084_02164690 = &sceneChange;
}
if (!this->func_ov000_02082124() &&
(param1->mSceneIndex < SceneIndex_tekiya00 || param1->mSceneIndex > SceneIndex_tekiya09)) {
#if IS_JP
VecFx32_Copy(&param2->mUnk_04, &this->mUnk_24);
#endif
if (param1->mSceneIndex == SceneIndex_f_water) {
switch (param1->mRoomIndex) {
case 1:
this->mUnk_24.x = 0x16000;
this->mUnk_24.z = 0xFFFF6000;
break;
case 2:
this->mUnk_24.x = 0xFFFE8000;
this->mUnk_24.z = 0x8000;
break;
case 3:
this->mUnk_24.x = 0xFFFFD000;
this->mUnk_24.z = 0x8800;
break;
case 4:
this->mUnk_24.x = 0x8000;
this->mUnk_24.z = 0xFFFFE800;
break;
default:
break;
}
} else {
#if IS_JP
if (param1->mSceneIndex == SceneIndex_f_snow2 && param1->mRoomIndex == 2) {
this->mUnk_24.x = 0xFFFFF000;
this->mUnk_24.z = 0xFFFF0000;
}
#else
VecFx32_Copy(&param2->mUnk_04, &this->mUnk_24);
#endif
}
}
this->func_ov001_020b803c();
this->func_ov001_020b7e50();
if (sceneChange.mRoomIndex != ROOM_INDEX_NONE) {
if (this->mUnk_30 == sceneChange.mSceneIndex && DSProt_DetectNotEmulator(func_ov084_0216122c) == 0) {
func_ov084_021612ac();
}
func_ov000_02081520(&sp4, this->mUnk_04, sceneChange.mRoomIndex);
func_ov000_020814ec(this->mUnk_04, &sp4);
} else {
sceneChange.mRoomIndex = this->mUnk_04->mUnk_40[this->mUnk_04->mUnk_10][this->mUnk_04->mUnk_11];
}
this->func_ov001_020b7d64(&sceneChange);
this->func_ov001_020b7e68(&sceneChange, 0x00);
if (data_027e09a4->mUnk_60 == 0 && data_ov024_020d8694 != NULL) {
if (data_027e09a4->CurrentSceneIndex() == SceneIndex_f_first && this->func_ov000_02081d5c() == 0) {
data_ov024_020d8694->func_ov024_020cafd8(20);
} else {
data_ov024_020d8694->func_ov024_020cb000(20);
}
}
}
void UnkStruct_027e0cd8::func_ov001_020b7d64(const UnkStruct_SceneChange1 *param1) {
UnkStruct_027e0cd8_04_0C *iVar7;
u32 temp_r1;
u16 uVar5;
u16 uVar6;
u16 uVar4;
u16 uVar3;
iVar7 = this->mUnk_04->mUnk_0C;
switch (data_027e09a0->GetCourseEntry(param1->mSceneIndex)->unk_10) {
case 0:
case 1:
case 3:
case 6:
this->mUnk_0C = new(HeapIndex_1) UnkStruct_027e0cd8_0C(this);
uVar3 = iVar7->mUnk_0C & 0x0F;
temp_r1 = iVar7->mUnk_0C;
uVar5 = (temp_r1 >> 4) & 0x0F;
uVar6 = (temp_r1 >> 8) & 0x0F;
uVar4 = (temp_r1 >> 12) & 0x0F;
if (uVar3 != 0) {
data_02049ba0.LoadIfNotLoaded(OverlaySlot_13, uVar3 - 1 + OverlayIndex_MapA1);
}
if (uVar5 != 0) {
data_02049ba0.LoadIfNotLoaded(OverlaySlot_14, uVar5 - 1 + OverlayIndex_MapB1);
}
if (uVar6 != 0) {
data_02049ba0.LoadIfNotLoaded(OverlaySlot_15, uVar6 - 1 + OverlayIndex_MapC1);
}
if (uVar4 != 0) {
data_02049ba0.LoadIfNotLoaded(OverlaySlot_16, uVar4 - 1 + OverlayIndex_MapD1);
}
break;
case 2:
case 4:
this->mUnk_0C = new(HeapIndex_1) UnkStruct_027e0cd8_0C_Derived2(this);
break;
case 5:
this->mUnk_0C = new(HeapIndex_1) UnkStruct_027e0cd8_0C_Derived3(this);
break;
default:
break;
}
}
void UnkStruct_027e0cd8::func_ov001_020b7e50() {
DELETE(this->mUnk_0C);
}
void UnkStruct_027e0cd8::func_ov001_020b7e68(const UnkStruct_SceneChange1 *param1, bool param2) {
if (this->mUnk_10 != NULL) {
this->mUnk_10->func_ov024_020d2520((UnkStruct_SceneChange1 *) param1);
}
data_ov000_020b504c.func_ov001_020be92c(this->mUnk_04->mUnk_0C);
this->mUnk_0C->func_ov001_020b85d0(param1);
this->mUnk_0C->vfunc_1C(param1, this->mUnk_04->mUnk_01, param2);
data_ov000_020b50c0.func_ov001_020bde4c(param1);
data_027e0ce0->func_ov001_020bc65c();
data_027e09bc->func_ov001_020babe8();
data_027e0960->func_ov000_0205a11c();
gpActorManager->func_ov001_020bb488();
gpMapObjManager->func_ov001_020bada0();
data_0204a110.func_ov001_020bd678();
if (data_027e09a4->mUnk_60 == 0) {
data_ov024_020d8660->func_ov024_020c4ba0();
}
unk32 unk_10 = data_027e09a0->GetCourseEntry(param1->mSceneIndex)->unk_10;
if (data_027e09a4->mUnk_60 == 1) {
for (int i = 0; i < 4; i++) {
UnkStruct_027e0ce0 *ptr = data_027e0ce0;
const UnkStruct_ov001_020c40f4 *arg = this->mUnk_0C->func_ov001_020b8a5c(i, 0x00);
ptr->func_ov001_020bc6d8(i, arg);
}
} else if (unk_10 == 2 || unk_10 == 4) {
UnkStruct_027e0ce0 *ptr = data_027e0ce0;
const UnkStruct_ov001_020c40f4 *arg = this->mUnk_0C->func_ov001_020b8a5c(param1->mSpawnIndex, 0x00);
ptr->func_ov001_020bc6e8(arg);
} else {
UnkStruct_027e0cd8_0C_Base *temp_pUnkC = this->mUnk_0C;
u32 temp_unk118 = temp_pUnkC->mUnk_118;
u8 temp_spawn = param1->mSpawnIndex;
UnkStruct_027e0ce0 *ptr = data_027e0ce0;
const UnkStruct_ov001_020c40f4 *spC = temp_pUnkC->func_ov001_020b8a5c(param1->mSpawnIndex, 0);
ptr->func_ov001_020bc6fc(spC, temp_pUnkC->func_ov001_020b8a5c(temp_spawn, 1), temp_pUnkC->mUnk_11C, temp_unk118);
}
data_027e09bc->func_ov000_020771c8();
unk32 iVar7 = data_027e09a0->GetCourseEntry(param1->mSceneIndex)->unk_10;
data_027e09c0->func_ov000_0207da40();
this->mUnk_0C->vfunc_08();
if (iVar7 == 2 || iVar7 == 4) {
data_ov026_02138d10->func_ov026_020dca14();
}
gpMapObjManager->func_ov001_020bac9c();
gpActorManager->func_ov001_020bafdc();
if (data_027e09a4->mUnk_60 == 0) {
SaveManager_00 *ptr = gSaveManager.mUnk_000;
u16 auStack_18[2];
data_027e09a0->func_ov000_02070310(param1->mSceneIndex, param1->mRoomIndex, &auStack_18);
if (auStack_18[1] < 0x100) {
SET_FLAG(ptr->unk_004.unk_0C, auStack_18[1]);
}
}
}
void UnkStruct_027e0cd8::func_ov001_020b803c() {
this->mUnk_0C->vfunc_20();
if (data_027e09a4->mUnk_60 == 0 && data_ov024_020d8660 != NULL) {
data_ov024_020d8660->func_ov024_020c4cc8();
}
data_0204a110.func_ov001_020bd68c();
gpMapObjManager->func_ov001_020badb4();
gpActorManager->func_ov001_020bb548();
data_027e0ce0->func_ov001_020bc69c();
data_027e09bc->func_ov001_020bac08();
data_027e0cec->func_ov001_020bf028();
data_027e0960->func_ov000_0205a120();
data_027e09b8->func_ov001_020b7728();
DELETE_ARRAY(gSaveManager.mUnk_244);
data_ov000_020b50c0.func_ov001_020bde5c();
data_ov000_020b504c.func_ov001_020be94c();
this->mUnk_0C->func_ov001_020b88ec();
if (this->mUnk_10 != NULL) {
this->mUnk_10->func_ov024_020d2564();
}
}
bool UnkStruct_027e0cd8::func_ov001_020b80fc(SceneIndex sceneIndex) {
int index;
switch (sceneIndex) {
case SceneIndex_t_area0:
index = 0;
break;
case SceneIndex_t_area1:
index = 1;
break;
default:
index = 2;
break;
}
if (index == 2) {
return 0;
}
return this->mUnk_48[index];
}
void UnkStruct_027e0cd8::func_ov001_020b8120(SceneIndex sceneIndex) {
int index;
switch (sceneIndex) {
case SceneIndex_t_area0:
index = 0;
break;
case SceneIndex_t_area1:
index = 1;
break;
default:
index = 2;
break;
}
if (index != 2) {
s64 value = data_02049bac.func_02014b00();
if (value > (this->mUnk_38[index] + 600) || value < this->mUnk_38[index]) {
this->mUnk_48[index] = ((u32) value / 300) & 1;
}
}
}
void UnkStruct_027e0cd8::func_ov001_020b818c() {
int index;
switch (data_027e09a4->CurrentSceneIndex()) {
case SceneIndex_t_area0:
index = 0;
break;
case SceneIndex_t_area1:
index = 1;
break;
default:
index = 2;
break;
}
if (index != 2) {
this->mUnk_38[index] = data_02049bac.func_02014b00();
}
}
DECL_INSTANCE(UnkStruct_027e0cd8, data_027e0cd8);
@@ -0,0 +1,488 @@
#include "Actor/ActorManager.hpp"
#include "Cutscene/Cutscene.hpp"
#include "Game/GameModeManager.hpp"
#include "MapObject/MapObjectManager.hpp"
#include "Physics/AABB.hpp"
#include "Unknown/UnkStruct_027e095c.hpp"
#include "Unknown/UnkStruct_027e09a0.hpp"
#include "Unknown/UnkStruct_027e09ac.hpp"
#include "Unknown/UnkStruct_027e09b0.hpp"
#include "Unknown/UnkStruct_027e09b8.hpp"
#include "Unknown/UnkStruct_027e09c0.hpp"
#include "Unknown/UnkStruct_027e0cd8.hpp"
#include <nns/g3d/g3d.h>
#include <printf.h>
#include <vector>
extern "C" BMDSectionModel *func_ov000_0205abcc(void *, void *, unk32, unk32, unk32);
extern "C" void func_ov089_02165c34(void *);
extern AABB data_027e0ca8;
extern AABB data_027e0cc0;
extern AABB data_027e0c90;
extern int data_ov089_02171540;
static UnkStruct_ov001_020c40f4 data_ov001_020c40f4[0x40];
struct UnkStruct_ov001_020c2a40 {
/* 00 */ unk32 unk_00;
/* 04 */ unk32 unk_04;
/* 08 */ unk16 unk_08;
/* 0A */ u8 unk_0A;
/* 0B */ u8 unk_0B;
/* 0C */ u8 unk_0C;
/* 0D */ u8 unk_0D;
/* 0E */ u8 unk_0E;
/* 0F */ u8 unk_0F;
/* 10 */ u8 unk_10;
/* 11 */ STRUCT_PAD(0x11, 0x14); // pad?
/* 14 */
UnkStruct_ov001_020c2a40(unk32 param1, unk32 param2, unk16 param3, unk8 param4, unk8 param5, unk8 param6, unk8 param7) {
this->unk_00 = param1;
this->unk_04 = param2;
this->unk_08 = param3;
this->unk_0A = param4;
this->unk_0B = param5;
this->unk_0C = param6;
this->unk_0D = param7;
this->unk_0E = 0x2B;
this->unk_0F = 0;
this->unk_10 = 0;
}
};
static const UnkStruct_ov001_020c2a40 data_ov001_020c2a40[] = {
UnkStruct_ov001_020c2a40(0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C),
UnkStruct_ov001_020c2a40(0x29, 0x00, 0x00, 0x0B, 0x01, 0x00, 0x3D),
UnkStruct_ov001_020c2a40(0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E),
UnkStruct_ov001_020c2a40(0x04, 0x00, 0x00, 0x00, 0xFA, 0x00, 0x3F),
};
// https://decomp.me/scratch/JcRNn
UnkStruct_027e0cd8_0C_Base::UnkStruct_027e0cd8_0C_Base(UnkStruct_027e0cd8 *param1) :
mUnk_004(NULL, 0x9B, 0x01, 0x01),
mSceneRender(NULL),
mUnk_070(NULL, 0x9B, 0x01, 0x00),
mUnk_084_00(0),
mUnk_084_01(0),
mUnk_098(0),
mUnk_09C(&param1->mUnk_00),
mUnk_0AC(false),
mUnk_0AD(false),
mUnk_0AE(false),
mUnk_0AF(false),
mUnk_0FC(0),
mIsCS(false),
mUnk_104(0),
mUnk_108(0),
mUnk_10C(0),
mUnk_110(0),
mUnk_114(0),
mUnk_118(0),
mUnk_11C(1),
mUnk_120(0),
mUnk_124(0),
mUnk_128(0),
mUnk_12A(true),
mUnk_12B(false),
mUnk_12C(false),
mUnk_12D(false),
mUnk_12E(false),
mUnk_130(0),
mUnk_134(0),
mUnk_138(0) {
Vec2s local_30;
VecFx32 sp18;
VecFx32 spC;
this->mUnk_0A0 = 0;
this->mUnk_0A4 = 0;
this->mUnk_0A8 = 0;
fx32 y = (this->mUnk_11C << 14);
fx32 z = ((u32) (u16) this->mUnk_09C.y >> 1) << 12;
fx32 x = ((u32) (u16) this->mUnk_09C.x >> 1) << 12;
data_027e0c90.min.x = -x;
data_027e0c90.min.y = -y;
data_027e0c90.min.z = -z;
data_027e0c90.max.x = x;
data_027e0c90.max.y = 0;
data_027e0c90.max.z = z;
spC = data_027e0c90.min;
data_027e0ca8.min = spC;
sp18 = data_027e0c90.max;
data_027e0ca8.max = sp18;
data_027e0cc0.min = spC;
data_027e0cc0.max = sp18;
this->mUnk_13C.Init(data_ov001_020c40f4, 0x40);
Vec2s_Copy(&this->mUnk_09C, &local_30);
gpMapObjManager->func_ov001_020baea0(&local_30);
data_027e095c->func_ov000_020592a0();
}
UnkStruct_027e0cd8_0C_Base::~UnkStruct_027e0cd8_0C_Base() {
data_027e095c->func_ov000_020592ec();
gpMapObjManager->func_ov001_020baf28();
DELETE(this->mUnk_098);
this->mUnk_130 = 0;
this->mUnk_138 = 0;
this->mUnk_134 = 0;
this->mUnk_154.clear();
this->func_ov001_020b8aec();
}
void UnkStruct_027e0cd8_0C_Base::vfunc_38() {}
void UnkStruct_027e0cd8_0C_Base::vfunc_08() {}
void UnkStruct_027e0cd8_0C_Base::func_ov001_020b85d0(const UnkStruct_SceneChange1 *param1) {
this->mIsCS = param1->mIsCS;
wchar_t local_c8[2];
local_c8[0] = L'\0';
local_c8[sizeof(local_c8) / 2 - 1] = L'\0';
snprintf((char *) local_c8, sizeof(local_c8), "M%02d", param1->mRoomIndex);
this->mUnk_084[0] = local_c8[0];
this->mUnk_084[1] = local_c8[1];
CourseListEntry *pEntry = data_027e09a0->GetCourseEntry(param1->mSceneIndex);
wchar_t local_34[16];
local_34[0] = L'\0';
local_34[sizeof(local_34) / 2 - 1] = L'\0';
snprintf((char *) local_34, sizeof(local_34), "Map/%s/map%02d.bin", pEntry->name, param1->mRoomIndex);
this->mUnk_004.~UnkSystem3();
this->mUnk_004.mUnk_00 = local_34;
this->mUnk_004.func_0201541c((char *) local_c8, 0x10);
this->LoadSceneModel(param1);
snprintf((char *) local_34, sizeof(local_34), "%s:zcb/%s_%02d.zcb", local_c8, pEntry->name, param1->mRoomIndex);
UnkFileSystem3 local_44((char *) local_34);
data_027e09c0->func_ov001_020be3dc(&local_44, this);
wchar_t local_64[16];
local_64[0] = L'\0';
local_64[sizeof(local_64) / 2 - 1] = L'\0';
snprintf((char *) local_64, sizeof(local_64), "%s:zmb/%s_%02d.zmb", local_c8, pEntry->name, param1->mRoomIndex);
UnkFileSystem3 local_74((char *) local_64);
local_74.vfunc_08(0x10);
ZMBFileInfos zmbFileInfos;
zmbFileInfos.pFile = local_74.mpFile;
zmbFileInfos.size = local_74.mFileSize;
zmbFileInfos.unk_08 = 0;
zmbFileInfos.unk_0C = 0;
zmbFileInfos.unk_10 = 0;
zmbFileInfos.unk_14 = 0;
ZMB_ParseFile(&zmbFileInfos, this, true);
gpMapObjManager->func_ov001_020bade0();
gpActorManager->func_ov001_020bb630();
if (param1->mIsCS == false) {
gpActorManager->func_ov001_020bb6b0((UnkStruct_SceneChange1 *) param1);
}
data_027e095c->func_ov000_020592a0();
u32 isCs = this->mIsCS;
snprintf((char *) local_34, sizeof(local_34), "%s:zob/motype_%02d_%1d.zob", local_c8, param1->mRoomIndex, isCs);
UnkFileSystem3 local_94((char *) local_34);
this->mUnk_0B4 = (ZeldaObjectList *) local_94.vfunc_08(sizeof(ZOBHeader));
gpMapObjManager->func_ov001_020bae40(this->mUnk_0B4);
for (int i = 0; i < ARRAY_LEN(this->mUnk_0B8); i++) {
// i + 2 because 0 is the default one and 1 is the cutscene one
snprintf((char *) local_34, sizeof(local_34), "%s:zob/motype_%02d_%1d.zob", local_c8, param1->mRoomIndex, i + 2);
UnkFileSystem3 local_a4((char *) local_34);
this->mUnk_0B8[i] = (ZeldaObjectList *) local_a4.vfunc_08(sizeof(ZOBHeader));
}
isCs = this->mIsCS;
snprintf((char *) local_34, sizeof(local_34), "%s:zob/npctype_%02d_%1d.zob", local_c8, param1->mRoomIndex, isCs);
UnkFileSystem3 local_b4((char *) local_34);
this->mUnk_0D8 = (ZeldaObjectList *) local_b4.vfunc_08(sizeof(ZOBHeader));
gpActorManager->func_ov001_020bb7b0(this->mUnk_0D8);
for (int i = 0; i < ARRAY_LEN(this->mUnk_0DC); i++) {
// i + 2 because 0 is the default one and 1 is the cutscene one
snprintf((char *) local_34, sizeof(local_34), "%s:zob/npctype_%02d_%1d.zob", local_c8, param1->mRoomIndex, i + 2);
UnkFileSystem3 local_c4((char *) local_34);
this->mUnk_0DC[i] = (ZeldaObjectList *) local_c4.vfunc_08(sizeof(ZOBHeader));
}
data_027e09b0->func_ov000_02072cc4(0x0000, 0x7FFF);
ZMB_ParseFile(&zmbFileInfos, this, false);
this->vfunc_40(param1->mSpawnIndex);
if (param1->mSceneIndex == SceneIndex_t_area1) {
if (GET_FLAG(data_027e09b8->mAdventureFlags, AdventureFlag_ObtainedSnowSource)) {
this->mUnk_110 = 0x0A;
}
} else if (param1->mSceneIndex == SceneIndex_t_area3) {
if (GET_FLAG(data_027e09b8->mAdventureFlags, AdventureFlag_ObtainedFireSource)) {
this->mUnk_110 = 0x10;
this->mUnk_114 = 0x1F;
}
}
this->func_ov001_020b8db8();
this->func_ov001_020b8e24();
if (param1->mIsCS == true) {
this->mUnk_114 = Cutscene_GetParamEntry(param1->mCutsceneIndex)->mUnk_0E;
}
data_027e09ac->func_ov000_020726f0(this->mUnk_114, 0x00, 0x00);
this->vfunc_38();
}
void UnkStruct_027e0cd8_0C_Base::func_ov001_020b88c0(unk32 param1) {
gpMapObjManager->func_ov001_020bae40(this->mUnk_0B8[param1]);
gpActorManager->func_ov001_020bb7b0(this->mUnk_0DC[param1]);
}
void UnkStruct_027e0cd8_0C_Base::func_ov001_020b88ec() {
this->func_ov001_020b8e54();
this->mUnk_088.func_ov000_0208261c();
gpMapObjManager->func_ov001_020bae6c();
gpActorManager->func_ov001_020bb7f0();
data_027e095c->func_ov000_020592ec();
data_027e09c0->func_ov001_020be400();
this->mUnk_004.~UnkSystem3();
if (this->mUnk_128 & 0x200) {
func_ov089_02165c34(&data_ov089_02171540);
}
}
void UnkStruct_027e0cd8_0C_Base::LoadSceneModel(const UnkStruct_SceneChange1 *param1) {
const char *pName = data_027e09a0->GetCourseEntry(param1->mSceneIndex)->name;
wchar_t local_40[20];
local_40[0] = L'\0';
local_40[sizeof(local_40) / 2 - 1] = L'\0';
snprintf((char *) local_40, sizeof(local_40), "%s:nsbmd/%s_%02d.nsbmd", this->mUnk_084, pName, param1->mRoomIndex);
UnkFileSystem3 local_50((char *) local_40);
wchar_t local_78[20];
local_78[0] = L'\0';
local_78[sizeof(local_78) / 2 - 1] = L'\0';
const char *path = "Map/%s/map%02d.nsbtx";
snprintf((char *) local_78, sizeof(local_78), path, pName, param1->mRoomIndex);
this->mUnk_070.vfunc_0C();
this->mUnk_070.mUnk_04 = (char *) local_78;
this->mUnk_070.vfunc_08(0x10);
BMDSectionModel *pBMD = func_ov000_0205abcc(&local_50, &this->mUnk_070, 0x01, 0x00, 0x00);
G3d_Model *pModel = G3d_GetModelPtr(pBMD);
G3d_0200e6a0(pModel, 0x00, 0x40);
G3d_0200e6a0(pModel, 0x00, 0x80);
this->mSceneRender.vfunc_08(pModel);
}
void UnkStruct_027e0cd8_0C_Base::vfunc_1C(const UnkStruct_SceneChange1 *param1, bool param2, bool param3) {
SceneIndex sceneIndex = param1->mSceneIndex;
u8 roomIndex = param1->mRoomIndex;
if (param2 != 0) {
if (param3 == 0) {
return;
}
roomIndex = 99;
}
gpCurrentGameModeMgr->vfunc_38(sceneIndex, roomIndex, 0x01, 0x00);
}
void UnkStruct_027e0cd8_0C_Base::vfunc_20() {}
const UnkStruct_ov001_020c40f4 *UnkStruct_027e0cd8_0C_Base::func_ov001_020b8a5c(unk32 spawnIndex, unk32 param1) {
UnkStruct_ov001_020c40f4 *result =
std::find_if(this->mUnk_13C.begin(), this->mUnk_13C.end(), UnkStruct_ov001_020c40f4::Predicate(spawnIndex, param1));
if (param1 == 0) {
if (result == this->mUnk_13C.end()) {
result = this->mUnk_13C.begin();
}
if (result->mUnk_0F == 0) {
result->mUnk_00.y = this->vfunc_28(&result->mUnk_00, 1, 0);
}
return result;
} else {
if (result == this->mUnk_13C.end()) {
return this->func_ov001_020b8a5c(spawnIndex, 0x00);
}
if (result->mUnk_0F == 0) {
result->mUnk_00.y = this->vfunc_28(&result->mUnk_00, 1, 0);
}
return result;
}
}
void UnkStruct_027e0cd8_0C_Base::func_ov001_020b8aec() {
STACK_PAD(0x24);
this->mUnk_148.unk_action1();
}
void UnkStruct_027e0cd8_0C_Base::func_ov001_020b8b94(ZMBEntryARAB *pARAB) {
UnkStruct_027e0cd8_0C_Base_148_00_Base *ptr = NULL;
if (pARAB->unk_0C == 1) {
ptr = new(HeapIndex_1) UnkStruct_027e0cd8_0C_Base_148_02(pARAB);
} else if (pARAB->unk_0D == 1) {
ptr = new(HeapIndex_1) UnkStruct_027e0cd8_0C_Base_148_01(pARAB);
} else {
ptr = new(HeapIndex_1) UnkStruct_027e0cd8_0C_Base_148_00(pARAB);
}
this->mUnk_148.push_back(ptr);
}
void UnkStruct_027e0cd8_0C_Base::func_ov001_020b8c30(const UnkStruct_027e0cd8_0C_Base_154_00 &param1) {
this->mUnk_154.push_back(param1);
}
void *UnkStruct_027e0cd8_0C_Base::func_ov001_020b8c80(unk32 param1) {
return (void *) &data_ov001_020c2a40[param1 - 0x3C];
}
void UnkStruct_027e0cd8_0C_Base::func_ov001_020b8c90(unk32 param1) {
this->mUnk_138 = param1;
}
void UnkStruct_027e0cd8_0C_Base::func_ov001_020b8c98(unk32 param1) {
this->mUnk_134 = param1;
}
void UnkStruct_027e0cd8_0C_Base::vfunc_34(unk32 param1) {
this->mUnk_130 = param1;
}
void UnkStruct_027e0cd8_0C_Base::vfunc_40(u8 spawnIndex) {
switch (spawnIndex) {
case 0xFB:
case 0xFC:
case 0xFD:
case 0xFE: {
UnkStruct_ov001_020c40f4 stack_elem;
UnkStruct_WarpUnk1_A0 *pEntry = data_027e09a4->func_ov000_02070538();
VecFx32 pos = pEntry->mUnk_04;
fx16 angle = DEG_TO_ANG(0);
switch (spawnIndex) {
case 0xFB:
pos.z = data_027e0c90.max.z - FLOAT_TO_FX32(0.5f);
angle = DEG_TO_ANG(180);
break;
case 0xFC:
pos.z = data_027e0c90.min.z + FLOAT_TO_FX32(0.5f);
angle = DEG_TO_ANG(0);
break;
case 0xFD:
pos.x = data_027e0c90.max.x - FLOAT_TO_FX32(0.5f);
angle = DEG_TO_ANG(270);
break;
case 0xFE:
pos.x = data_027e0c90.min.x + FLOAT_TO_FX32(0.5f);
angle = DEG_TO_ANG(90);
break;
default:
break;
}
stack_elem.mUnk_0E = spawnIndex;
VecFx32_Copy(&pos, &stack_elem.mUnk_00);
stack_elem.mUnk_0C = angle;
stack_elem.mUnk_10 = 0xFD;
UnkStruct_ov001_020c40f4 *pEnd = this->mUnk_13C.end();
if (pEnd != NULL) {
pEnd->mUnk_00 = stack_elem.mUnk_00;
pEnd->mUnk_0C = stack_elem.mUnk_0C;
pEnd->mUnk_0E = stack_elem.mUnk_0E;
pEnd->mUnk_0F = stack_elem.mUnk_0F;
pEnd->mUnk_10 = stack_elem.mUnk_10;
pEnd->mUnk_14 = stack_elem.mUnk_14;
}
this->mUnk_13C.grow_by(1);
break;
}
default:
break;
}
}
void UnkStruct_027e0cd8_0C_Base::func_ov001_020b8db8() {
unk32 uVar1;
uVar1 = 0;
switch (this->mUnk_110) {
case 0x00:
case 0x03:
uVar1 = 0x0A;
break;
case 0x0E:
uVar1 = 0x01;
break;
case 0x05:
case 0x09:
uVar1 = 0x02;
break;
case 0x0A:
uVar1 = 0x03;
break;
case 0x02:
uVar1 = 0x04;
break;
case 0x0F:
uVar1 = 0x05;
break;
case 0x10:
uVar1 = 0x06;
break;
case 0x08:
uVar1 = 0x00;
break;
case 0x0C:
uVar1 = 0x09;
break;
case 0x06:
uVar1 = 0x07;
break;
case 0x01:
case 0x07:
case 0x04:
case 0x0B:
break;
default:
uVar1 = 0x00;
break;
}
this->mUnk_088.func_ov000_020823a8(uVar1);
}
void UnkStruct_027e0cd8_0C_Base::func_ov001_020b8e24() {
if (this->mUnk_110 == 7 && this->mUnk_098 == NULL) {
this->mUnk_098 = new(HeapIndex_1) UnkStruct_027e0cd8_0C_Base_98();
}
}
void UnkStruct_027e0cd8_0C_Base::func_ov001_020b8e54() {
DELETE(this->mUnk_098);
}
+1 -1
View File
@@ -173,7 +173,7 @@ void CargoManager::RemoveAmount(unk32 decr) {
bool CargoManager::func_ov017_020bec9c() {
if (data_027e09a4->IsTrain()) {
return data_027e0cd8->mUnk_0C->mUnk_160->func_ov026_02106aa8();
return data_027e0cd8->GetUnk0C()->mUnk_160->func_ov026_02106aa8();
}
return false;
+1 -1
View File
@@ -123,7 +123,7 @@ SaveManager::SaveManager() {
this->mUnk_20A = 0;
this->mUnk_214 = 0;
this->mpSaveFile = NULL;
this->mUnk_244 = 0;
this->mUnk_244 = NULL;
func_020327c8(&this->mUnk_004, 0x1021);
+2 -2
View File
@@ -117,8 +117,8 @@ void ActorUnkOBPC::SetState(ActorState state, int param2) {
}
bool ActorUnkOBPC::func_ov024_020d7154(void) {
u8 temp_r4 = this->mUnk_5C.mParams[0];
UnkStruct_027e0cd8_0c *temp_r5 = data_027e0cd8->mUnk_0C;
u8 temp_r4 = this->mUnk_5C.mParams[0];
UnkStruct_027e0cd8_0C_Base *temp_r5 = data_027e0cd8->mUnk_0C;
ActorManager *pActorMgr;
VecFx32 sp10;
@@ -601,8 +601,8 @@ void AdventureModeManager::vfunc_34(unk32 param1, unk32 param2) {
}
}
void AdventureModeManager::vfunc_38(u32 param1, u8 param2, unk16 param3, unk16 param4) {
this->func_ov024_020c6514(param1, param2, param3, param4);
void AdventureModeManager::vfunc_38(u32 sceneIndex, u8 roomIndex, unk16 param3, unk16 param4) {
this->func_ov024_020c6514(sceneIndex, roomIndex, param3, param4);
}
void AdventureModeManager::func_ov024_020c6514(SceneIndex sceneIndex, u8 param2, unk16 param3, unk16 param4) {
@@ -40,7 +40,7 @@ void AdventureModeManager_184::vfunc_0C(unk32 param1) {
}
data_0204a088->func_ov000_02061248();
MapObjectId mapObjId = data_027e09b8->mUnk_0C->mMapObjId;
MapObjectId mapObjId = data_027e09b8->GetUnk0C()->mMapObjId;
if (data_027e09a4->IsTrain() || (data_027e09b8->func_ov000_020732dc(2) &&
(mapObjId != MapObjectId_WDST ||
@@ -77,7 +77,7 @@ void AdventureModeManager_184::func_ov024_020c979c(unk32 param1) {
return;
}
MapObjectId mapObjId = data_027e09b8->mUnk_0C->mMapObjId;
MapObjectId mapObjId = data_027e09b8->GetUnk0C()->mMapObjId;
if (data_027e09a4->IsTrain()) {
if (data_027e09a4->IsDarkRealm()) {
+4 -4
View File
@@ -6,8 +6,8 @@
#include "files.h"
#include <nitro/mi.h>
#include <printf.h>
extern "C" void func_02026800(void *, int, const char *, ...);
extern "C" unk32 func_02032784(unk32 param1);
extern "C" unk32 func_ov000_0205c7ac(unk32, unk32);
extern "C" bool func_ov000_0205c74c(unk32, unk32, unk32, unk32);
@@ -55,20 +55,20 @@ void UnkDataStruct4::func_ov024_020d258c(u32 sceneIndex, u8 roomIndex) {
sp10[0] = L'\0';
sp10[1] = L'\0';
func_02026800(sp10, sizeof(sp10), "T%02d", roomIndex);
snprintf((char *) sp10, sizeof(sp10), "T%02d", roomIndex);
sp34[0] = L'\0';
sp34[15] = L'\0';
pEntry = data_027e09a0->GetCourseEntry(sceneIndex);
const char *string = "Map/%s/train%02d.bin";
func_02026800(sp34, sizeof(sp34), string, pEntry->name, roomIndex);
snprintf((char *) sp34, sizeof(sp34), string, pEntry->name, roomIndex);
UnkStruct2 sp24(NULL, 1);
sp24.mUnk_04 = (char *) sp34;
sp24.func_020154ec((char *) sp10);
pEntry = data_027e09a0->GetCourseEntry(sceneIndex);
func_02026800(sp34, sizeof(sp34), "%s:ztb/%s_%02d.ztb", sp10, pEntry->name, roomIndex);
snprintf((char *) sp34, sizeof(sp34), "%s:ztb/%s_%02d.ztb", sp10, pEntry->name, roomIndex);
UnkFileSystem3 sp14((char *) sp34);
sp14.vfunc_08(0x10);
@@ -4,7 +4,8 @@
#include "Unknown/UnkStruct_027e0d00.hpp"
// clang-format on
extern "C" void func_02026800(void *, int, const char *, ...);
#include <printf.h>
extern const char *data_ov000_020aa244; // ".narc"
extern const char *data_ov000_020aa24c; // ".bin"
extern const char *data_ov000_020aa250[4];
@@ -24,11 +25,11 @@ DATA_ALIGN_FIX();
void UnkStruct_027e0d00_20::func_ov024_020d4e9c(wchar_t *param1, unk32 param2, bool param3) {
const char *fileExt = param3 ? data_ov000_020aa24c : data_ov000_020aa244;
func_02026800(param1, 0x40, "%s/anim%s", data_ov024_020d8474[param2], fileExt);
snprintf((char *) param1, 0x40, "%s/anim%s", data_ov024_020d8474[param2], fileExt);
}
void UnkStruct_027e0d00_20::func_ov024_020d4edc(wchar_t *param1, wchar_t *param2, unk32 param3) {
func_02026800(param1, 0x40, "%s:/anm%s", param2, data_ov000_020aa250[param3]);
snprintf((char *) param1, 0x40, "%s:/anm%s", param2, data_ov000_020aa250[param3]);
}
UnkStruct_027e0d00_20::UnkStruct_027e0d00_20(unk32 param1, unk32 param2) :
+1 -1
View File
@@ -10,7 +10,7 @@
#include "versions.h"
extern "C" void func_01ffedac(u16 *, VecFx32 *);
extern "C" void func_01fff05c(u32 *, UnkStruct_027e0cd8_0c *, VecFx32 *);
extern "C" void func_01fff05c(u32 *, UnkStruct_027e0cd8_0C_Base *, VecFx32 *);
extern "C" void func_ov000_0205c1f0(unk32 *, u16);
extern "C" void func_ov000_0205c204(unk32 *, VecFx32 *, unk32, unk32, unk32);
extern "C" void func_ov017_020bf99c();
+2 -2
View File
@@ -8,7 +8,7 @@
#include "Unknown/UnkStruct_027e0d34.hpp"
extern "C" void func_01ffedac(u16 *, VecFx32 *);
extern "C" void func_01fff05c(u32 *, UnkStruct_027e0cd8_0c *, VecFx32 *);
extern "C" void func_01fff05c(u32 *, UnkStruct_027e0cd8_0C_Base *, VecFx32 *);
extern "C" unk32 func_02017158();
extern "C" void func_ov017_020bf99c();
extern "C" void func_ov031_0210acd4(u8);
@@ -472,7 +472,7 @@ void ActorRupee::func_ov031_020e9740() {
unk32 sp4;
unk32 *psp4;
s32 temp_r2;
UnkStruct_027e0cd8_0c *temp_r0;
UnkStruct_027e0cd8_0C_Base *temp_r0;
func_01ffedac(&sp0, &this->mPos);
sp4 = 0;
+1 -1
View File
@@ -19,7 +19,7 @@ ActorUnkNORE::ActorUnkNORE() {}
bool ActorUnkNORE::vfunc_18(unk32 param1) {
Vec2b local_vec;
UnkStruct_027e0cd8_0c *unk_obj = data_027e0cd8->mUnk_0C;
UnkStruct_027e0cd8_0C_Base *unk_obj = data_027e0cd8->mUnk_0C;
func_01ffedac(&local_vec, &this->mPos);
@@ -71,7 +71,7 @@ bool MapObjectChestBase::vfunc_00() {
SET_FLAG(this->mFlags, MapObjFlag_9);
this->mUnk_18[0] = 0x0D;
UnkStruct_027e0cd8_0c *pUVar2 = data_027e0cd8->mUnk_0C;
UnkStruct_027e0cd8_0C_Base *pUVar2 = data_027e0cd8->mUnk_0C;
if (this->mUnk_20.mUnk_00[3] == 1) {
this->mPos.x += 0x7FC;
@@ -91,7 +91,7 @@ bool MapObjectChestBase::vfunc_00() {
// non-matching
void MapObjectChestBase::vfunc_04() {
fx32 iVar2;
UnkStruct_027e0cd8_0c *pUVar5;
UnkStruct_027e0cd8_0C_Base *pUVar5;
VecFx32 sp48;
VecFx32 sp3C;
VecFx32 local_38;
@@ -61,7 +61,7 @@ bool MapObjectDoorDangerSpawn::vfunc_00(void) {
}
void MapObjectDoorDangerSpawn::vfunc_04(void) {
UnkStruct_027e0cd8_0c *ptr;
UnkStruct_027e0cd8_0C_Base *ptr;
VecFx32 auStack_20;
if (this->mUnk_20.mUnk_00[1] == 2) {
@@ -403,7 +403,7 @@ void MapObjectDoorDangerSpawn::vfunc_5C(unk32 param1, unk32 param2) {
}
bool MapObjectDoorDangerSpawn::vfunc_64(void) {
UnkStruct_027e0cd8_0c *pUVar4;
UnkStruct_027e0cd8_0C_Base *pUVar4;
unk32 var_r0;
bool var_r5;
@@ -441,7 +441,7 @@ bool MapObjectDoorDangerSpawn::vfunc_64(void) {
}
bool MapObjectDoorDangerSpawn::vfunc_68(void) {
UnkStruct_027e0cd8_0c *pUVar2 = data_027e0cd8->mUnk_0C;
UnkStruct_027e0cd8_0C_Base *pUVar2 = data_027e0cd8->mUnk_0C;
if (this->mUnk_20.mUnk_00[2] == 1) {
if (func_ov000_0209d29c(1)) {
@@ -466,7 +466,7 @@ bool MapObjectDoorDangerSpawn::vfunc_68(void) {
}
bool MapObjectDoorDangerSpawn::vfunc_6C(void) {
UnkStruct_027e0cd8_0c *pUVar5;
UnkStruct_027e0cd8_0C_Base *pUVar5;
switch (this->mUnk_20.mUnk_00[1]) {
case 1:
@@ -520,7 +520,7 @@ bool MapObjectDoorDangerSpawn::vfunc_6C(void) {
}
bool MapObjectDoorDangerSpawn::func_ov031_020fdec8(void) {
UnkStruct_027e0cd8_0c *pUVar4;
UnkStruct_027e0cd8_0C_Base *pUVar4;
VecFx32 *uVar3;
int iVar1;
@@ -548,7 +548,7 @@ bool MapObjectDoorDangerSpawn::func_ov031_020fdec8(void) {
}
pUVar4 = data_027e0cd8->mUnk_0C;
uVar3 = pUVar4->func_ov001_020b8a5c(data_027e09a4->func_ov000_02070560()->mSpawnIndex, 0);
uVar3 = (VecFx32 *) &pUVar4->func_ov001_020b8a5c(data_027e09a4->func_ov000_02070560()->mSpawnIndex, 0)->mUnk_00;
if (pUVar4->func_ov000_020802ec(this->mUnk_20.mUnk_00[0], uVar3)) {
return true;
@@ -416,7 +416,7 @@ void PlayerSceneChange::vfunc_0C(UnkStruct_PlayerGet_vfunc_0C_param1 *param1) {
case 0x1E:
case 0x1F:
default:
UnkStruct_027e0cd8_0c *ptr = data_027e0cd8->mUnk_0C;
UnkStruct_027e0cd8_0C_Base *ptr = data_027e0cd8->mUnk_0C;
switch (this->mUnk_68) {
case 0x0F:
@@ -682,9 +682,9 @@ void PlayerSceneChange::vfunc_10(unk32 param1, unk32 param2) {
case 0x11:
case 0x13:
case 0x24: {
UnkStruct_027e0cd8_0c *temp_r0_13 = data_027e0cd8->mUnk_0C;
fx32 temp_r0_14 = temp_r0_13->vfunc_28(this->mUnk_34, 0, 0);
VecFx32 *temp_r2_9 = this->mUnk_34;
UnkStruct_027e0cd8_0C_Base *temp_r0_13 = data_027e0cd8->mUnk_0C;
fx32 temp_r0_14 = temp_r0_13->vfunc_28(this->mUnk_34, 0, 0);
VecFx32 *temp_r2_9 = this->mUnk_34;
if (temp_r2_9->y < temp_r0_14) {
temp_r2_9->y = temp_r0_14;
+2 -2
View File
@@ -125,14 +125,14 @@ void GameModeManagerBase::func_0201875c(void) {
}
}
struct UnkStruct5 {
struct UnkStruct6 {
void *a;
unk32 b;
};
void GameModeManagerBase::func_02018830(unk8 *param1) {
unk32 id = this->mNextButtonID;
UnkStruct5 local_28;
UnkStruct6 local_28;
local_28.a = param1;
local_28.b = id;