Decompile overlay 1 (Part 3) (#95)

* ZeldaArrangeBinary OK

* ZeldaMapBinary 26%

* UnkStruct_SceneChange1 -> EntranceInfo

* cleanup EntranceInfo ctors

* fix regressions

* ZeldaMapBinary 47%

* fix regressions

* ZeldaMapBinary 73%

* ZeldaMapBinary 89%

* ZeldaMapBinary 99%
This commit is contained in:
Yanis
2026-07-01 04:09:04 +02:00
committed by GitHub
parent 6ea40b4493
commit 4074a603d2
76 changed files with 1924 additions and 643 deletions
+4 -7
View File
@@ -18,13 +18,9 @@ public:
/* 0E */ s8 mUnk_0E;
/* 0F */ bool mUnk_0F;
/* 10 */ u16 mParams[4];
/* 18 */ Vec2b mUnk_18;
/* 1A */ u16 mUnk_1A;
/* 1C */ union {
unk32 mUnk_1C;
u16 mUnk_1C_0;
u16 mUnk_1C_2;
};
/* 18 */ u8 mUnk_18[2];
/* 1A */ u16 mUnk_1A[2];
/* 1E */ u16 mUnk_1E;
/* 20 */ union {
unk32 mUnk_20;
unk16 mUnk_20_0;
@@ -52,6 +48,7 @@ public:
ActorProfile **func_ov000_02073dc();
ActorProfile **func_ov000_02073e8();
ActorProfile *GetProfileFromId(ActorId actorId);
void func_ov000_02097444(ActorId actorId, ActorParams *pParams, unk32 param3);
};
class Actor_C4;
+3 -3
View File
@@ -7,7 +7,7 @@
#include "files.h"
#include "types.h"
class UnkStruct_SceneChange1;
class EntranceInfo;
class ActorManager : public AutoInstance<ActorManager> {
public:
@@ -54,13 +54,13 @@ public:
void func_ov001_020bb488();
void func_ov001_020bb548();
void func_ov001_020bb630();
void func_ov001_020bb6b0(UnkStruct_SceneChange1 *param1);
void func_ov001_020bb6b0(EntranceInfo *param1);
void func_ov001_020bb7b0(ZeldaObjectList *pObjList);
void func_ov001_020bb7f0();
static ActorManager *Create();
static void Destroy();
static bool func_ov001_020bb728(s32 param1);
static bool func_ov001_020bb728(ActorId actorId);
static void func_ov001_020bb824();
static void func_ov001_020bb844();
};
+4 -1
View File
@@ -13,7 +13,10 @@ class ActorProfile {
public:
/* 00 (vtable) */
/* 04 */ Cylinder mUnk_04;
/* 14 */ unk8 mUnk_14[0x18 - 0x14];
/* 14 */ unk8 mUnk_14;
/* 15 */ bool mUnk_15;
/* 16 */ unk8 mUnk_16;
/* 17 */ unk8 mUnk_17;
/* 18 */ unk8 mUnk_18;
/* 19 */ unk8 mUnk_19;
/* 1A */ unk16 mUnk_1A;
+1 -1
View File
@@ -76,7 +76,7 @@ struct CutsceneParamsEntry {
};
CutsceneParamsEntry *Cutscene_GetParamEntry(s32 csIndex);
s32 func_ov000_020a7840(unk32 param1);
s32 func_ov000_020a7840(unk32 param1, unk32 param2);
bool Cutscene_IsAdventureFlagSet(s32 csIndex);
extern const CutsceneParamsEntry gCSParamsEntries[CutsceneIndex_Max];
+2 -2
View File
@@ -65,7 +65,7 @@ public:
/* 28 */ u16 mUnk_28;
/* 2A */ u16 mPostDate;
/* 2C */ union {
Vec2b mStampPositions[StampType_Max];
Vec2bCpp mStampPositions[StampType_Max];
u16 mStampPos[StampType_Max];
};
/* 54 */ s8 mObtainedLetters[LetterType_Max];
@@ -100,7 +100,7 @@ public:
unk32 func_ov024_020d6468();
unk32 GetStamp(unk32 index);
u16 *GetStampDate(unk32 index);
Vec2b *GetStampPos(unk32 index);
Vec2bCpp *GetStampPos(unk32 index);
void func_ov024_020d64b4(s8 param1, unk32 param2, const u16 *param3);
void func_ov024_020d6530();
unk32 GetNumPostcards();
+6 -8
View File
@@ -96,19 +96,17 @@ public:
class MapObject_20 {
public:
/* 00 */ u16 mUnk_00[4]; // parameters
/* 00 */ u16 mParams[4]; // parameters
/* 08 */ u8 mUnk_08[2];
/* 0A */ u16 mUnk_0A[2];
/* 0E */ unk16 mUnk_0E;
/* 10 */ unk32 mUnk_10;
/* 14 */ s16 mUnk_14;
/* 16 */ bool mUnk_16;
/* 16 */ unk8 mUnk_17;
/* 17 */ s8 mUnk_17;
/* 18 */
MapObject_20() {}
void func_ov000_0209c7c8();
void Init();
static void func_ov000_0209c790(MapObjectId mapObjId, MapObjectProfile *pProfile);
static void func_ov000_0209c7ac(MapObjectId mapObjId);
@@ -129,7 +127,7 @@ public:
/* 20 */ MapObject_20 mUnk_20; // parameters
/* 38 */ unk8 mUnk_38;
/* 39 */ unk8 mUnk_39;
/* 3A */ Vec2b mUnk_3A;
/* 3A */ Vec2bCpp mUnk_3A;
/* 3C */ MapObjectProfile *mpProfile;
/* 40 */
@@ -175,7 +173,7 @@ public:
void func_ov000_0209d274(unk32 param1);
bool func_ov000_0209d29c(unk32 param1);
void func_ov000_0209d2c4(unk32 param1, bool param2);
void func_ov000_0209d2f0(unk32 param1, unk32 param2, Vec2b *param3);
void func_ov000_0209d2f0(unk32 param1, unk32 param2, Vec2bCpp *param3);
void func_ov000_0209d3b4(unk32 param1, fx32 size);
void func_ov000_0209d434(s8 *param1, UnkStruct_ov019_020d24c8_28_258_00 *param2, unk32 param3);
void func_ov000_0209d518(unk32 param1, unk32 param2, unk32 param3, u8 param4);
@@ -184,7 +182,7 @@ public:
bool func_ov000_0209d668();
void func_ov000_0209d6ac(VecFx32 *param1);
static void func_ov000_0209d0bc(Vec2b *param1, MapObject *thisx);
static void func_ov000_0209d0bc(Vec2bCpp *param1, MapObject *thisx);
static void func_ov000_0209d22c(unk16 *param1, MapObject *thisx, unk32 param2);
static void func_ov000_0209d54c(ActorRef *param1, MapObject *thisx, u16 param2, const VecFx32 *pPos, s16 param3,
u16 param4);
+12 -2
View File
@@ -9,6 +9,15 @@
typedef void (*UnkCallback_func_01fff4cc)(void *, void *);
struct UnkStruct_MapObjCreateData {
/* 00 */ u16 unk_00;
/* 02 */ union {
Vec2b pos;
u16 raw_pos;
};
/* 04 */
};
class MapObjectManager : public AutoInstance<MapObjectManager> {
public:
/* 00 */ MapObject **mMapObjTable;
@@ -31,14 +40,15 @@ public:
~MapObjectManager();
// itcm
MapObject *func_01fff498(Vec2b param1);
MapObject *func_01fff498(Vec2bCpp param1);
void func_01fff4cc(UnkCallback_func_01fff4cc param1, void *param2);
MapObject **func_01fff520(UnkStruct_ov000_020b34c4 *param1, MapObject **param2);
// overlay 0
MapObjectId func_ov000_0209c3a8(Vec2b *param1);
MapObjectId func_ov000_0209c3a8(Vec2bCpp *param1);
void func_ov000_0209c3e8();
void func_ov000_0209c444();
MapObject *AllocateMapObject(MapObjectId mapObjId, Vec2b param2, u16 param3, unk32 param4, u8 param5);
static void func_ov000_0209c490();
+1 -1
View File
@@ -15,7 +15,7 @@ public:
/* 48 */ unk32 mUnk_48;
/* 4C */ unk32 mUnk_4C;
/* 50 */ unk32 mUnk_50;
/* 54 */ UnkStruct_SceneChange1 mUnk_54;
/* 54 */ EntranceInfo mUnk_54;
/* 68 */ unk32 mUnk_68;
/* 6C */ s32 mUnk_6C;
/* 70 */ volatile VecFx32 mUnk_70;
+2 -2
View File
@@ -67,7 +67,7 @@ struct SaveMiscAdvManager {
/* 28 */ u16 unk_28;
/* 2A */ u16 postDate;
/* 2C */ union {
Vec2b stampPositions[StampType_Max];
Vec2bCpp stampPositions[StampType_Max];
u16 stampPos[StampType_Max];
};
/* 54 */ s8 obtainedLetters[LetterType_Max];
@@ -327,7 +327,7 @@ struct SaveFile_00000_2600_Data {
/* 00 */ u8 unk_00;
/* 01 */ u8 unk_01;
/* 02 */ u8 unk_02;
/* 03 */ Vec2b unk_03[61];
/* 03 */ Vec2bCpp unk_03[61];
/* 7E */ u16 unk_7E;
/* 80 */
};
+4
View File
@@ -399,6 +399,10 @@ public:
return this->mLoadedOverlays[OverlaySlot_8] == OverlayIndex_FldAjito;
}
bool IsASR() {
return this->mLoadedOverlays[OverlaySlot_9] == OverlayIndex_ASR;
}
void Load(OverlaySlot slot, OverlayIndex index);
void LoadIfNotLoaded(OverlaySlot slot, OverlayIndex index);
void Unload(OverlaySlot slot);
+2 -2
View File
@@ -1073,7 +1073,7 @@ struct UnkDataStruct4_14_2 {
/* 12C */
};
struct UnkStruct_SceneChange1;
struct EntranceInfo;
struct UnkDataStruct4 {
/* 00 (vtable) */
/* 04 */ u16 mUnk_04;
@@ -1097,7 +1097,7 @@ struct UnkDataStruct4 {
void func_ov024_020d2518();
void func_ov024_020d251c();
void func_ov024_020d2520(UnkStruct_SceneChange1 *param1);
void func_ov024_020d2520(EntranceInfo *param1);
void func_ov024_020d2538(u32 sceneIndex, u8 roomIndex, UnkDataStruct4_14_2 *param3);
void func_ov024_020d2564();
void func_ov024_020d258c(u32 sceneIndex, u8 roomIndex);
+10 -5
View File
@@ -68,18 +68,23 @@ public:
~UnkStruct_027e0960();
// overlay 0
void func_ov000_0205a11c();
void func_ov000_0205a120();
void func_ov000_0205a160();
void func_ov000_0205a164();
void func_ov000_0205a1a4();
void func_ov000_0205a1fc(u8 nEntries);
void func_ov000_0205a288(unk32 index, const ZMBEntryRALB *pEntry);
void func_ov000_0205a2a4(volatile unk32 index, ZMBRALBPoint *pPoint);
void func_ov000_0205a2c8();
UnkStruct_027e0960_TableEntry *func_ov000_0205a390(u8 param1);
UnkStruct_027e0960_TableEntry *func_ov000_0205a3fc(VecFx32 param1, unk32 param4);
static UnkStruct_027e0960 *Create();
// overlay 1
void func_ov000_0205a11c();
void func_ov000_0205a120();
void func_ov000_0205a160();
void func_ov000_0205a164();
static void Destroy();
};
// path manager?
extern UnkStruct_027e0960 *data_027e0960;
+91 -60
View File
@@ -5,6 +5,7 @@
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_0204a060.hpp"
#include "Unknown/UnkStruct_027e09a0.hpp"
#include "files.h"
#include "global.h"
#include "iterator.hpp"
#include "types.h"
@@ -16,57 +17,87 @@ class UnkStruct_027e09a4;
#define ROOM_INDEX_NONE 0xFF
struct UnkStruct_SceneChange1 {
/* 00 */ unk32 mSceneIndex;
/* 04 */ unk32 mUnk_04;
/* 08 */ unk16 mUnk_08;
/* 0A */ u8 mRoomIndex;
/* 0B */ u8 mSpawnIndex;
/* 0C */ bool mIsCS;
/* 0D */ u8 mUnk_0D;
/* 0E */ u8 mCutsceneIndex;
/* 0F */ u8 mUnk_0F;
/* 10 */ u8 mUnk_10;
/* 11 */ u8 mUnk_11;
/* 12 */ u16 mUnk_12;
struct EntranceInfo {
/* 00 */ s32 sceneIndex;
/* 04 */ unk32 unk_04;
/* 08 */ unk16 unk_08;
/* 0A */ u8 roomIndex;
/* 0B */ u8 spawnIndex;
/* 0C */ bool isCS;
/* 0D */ u8 unk_0D;
/* 0E */ u8 csIndex;
/* 0F */ u8 unk_0F;
/* 10 */ u8 unk_10;
/* 11 */ u8 unk_11;
/* 12 */ u16 unk_12;
/* 14 */
UnkStruct_SceneChange1() {
this->mSceneIndex = SceneIndex_Max;
this->mUnk_04 = 0;
this->mUnk_08 = 0;
this->mRoomIndex = ROOM_INDEX_NONE;
this->mSpawnIndex = 0;
this->mIsCS = false;
this->mUnk_0D = 0;
this->mCutsceneIndex = CutsceneIndex_None;
this->mUnk_0F = 0;
this->mUnk_10 = 0;
EntranceInfo() {}
EntranceInfo(bool isCS) {
this->sceneIndex = SceneIndex_Max;
this->unk_04 = 0;
this->unk_08 = 0;
this->roomIndex = ROOM_INDEX_NONE;
this->spawnIndex = 0;
this->isCS = isCS;
this->unk_0D = 0;
this->csIndex = CutsceneIndex_None;
this->unk_0F = 0;
this->unk_10 = 0;
}
UnkStruct_SceneChange1(CutsceneParamsEntry *pEntry, bool nextIsCS) {
EntranceInfo(CutsceneParamsEntry *pEntry, bool isCS) {
u8 sceneIndex = pEntry->mSceneIndex;
u8 cutsceneIndex = pEntry->mCutsceneIndex;
u8 spawnIndex = pEntry->mSpawnIndex;
u8 roomIndex = pEntry->mRoomIndex;
this->mSceneIndex = sceneIndex;
this->mUnk_04 = 0;
this->mUnk_08 = 0;
this->mRoomIndex = roomIndex;
this->mSpawnIndex = spawnIndex;
this->mIsCS = nextIsCS;
this->mUnk_0D = 0;
this->mCutsceneIndex = cutsceneIndex;
this->mUnk_0F = 0;
this->mUnk_10 = 0;
this->sceneIndex = sceneIndex;
this->unk_04 = 0;
this->unk_08 = 0;
this->roomIndex = roomIndex;
this->spawnIndex = spawnIndex;
this->isCS = isCS;
this->unk_0D = 0;
this->csIndex = cutsceneIndex;
this->unk_0F = 0;
this->unk_10 = 0;
}
UnkStruct_SceneChange1(const UnkStruct_SceneChange1 *pSource) {
MI_CpuCopy32((void *) pSource, this, sizeof(UnkStruct_SceneChange1));
EntranceInfo(const ZMBEntryWARP *pEntry) {
SceneIndex sceneIndex = data_027e09a0->GetSceneIndexFromName(pEntry->destName);
u8 unk_04 = pEntry->unk_01;
s32 cutsceneIndex = CutsceneIndex_None;
if (pEntry->unk_14 != 0 || pEntry->unk_15 != 0) {
cutsceneIndex = func_ov000_020a7840(pEntry->unk_14, pEntry->unk_15);
}
u8 unk_10 = pEntry->unk_17;
u8 unk_00 = pEntry->unk_00;
u8 spawnIndex = pEntry->spawnIndex;
u8 roomIndex = pEntry->roomIndex;
this->sceneIndex = sceneIndex;
this->unk_04 = unk_04;
this->unk_08 = 0;
this->roomIndex = roomIndex;
this->spawnIndex = spawnIndex;
this->isCS = false;
this->unk_0D = unk_00;
this->csIndex = cutsceneIndex;
this->unk_0F = 0;
this->unk_10 = unk_10;
}
UnkStruct_SceneChange1(s32) {}
EntranceInfo(const EntranceInfo *pSource) {
MI_CpuCopy32((void *) pSource, this, sizeof(EntranceInfo));
}
EntranceInfo(const EntranceInfo &refSource) {
MI_CpuCopy32((void *) &refSource, this, sizeof(EntranceInfo));
}
};
class UnkStruct_WarpUnk1_24 : public UnkStruct_0204a060_Base3 {
@@ -109,8 +140,8 @@ public:
/* 00 (base) */
/* 24 */ UnkStruct_WarpUnk1_24 mUnk_24;
/* 50 */ UnkStruct_WarpUnk1_50 mUnk_50;
/* 78 */ UnkStruct_SceneChange1 mUnk_78; // current scene?
/* 8C */ UnkStruct_SceneChange1 mUnk_8C; // next scene
/* 78 */ EntranceInfo mCurEntrance;
/* 8C */ EntranceInfo mNextEntrance;
/* A0 */ UnkStruct_WarpUnk1_A0 mUnk_A0;
/* B4 */ unk32 mSpawnTransitionType; // the behavior of Link when entering a new scene
/* B8 */
@@ -142,8 +173,8 @@ public:
/* 00 (vtable) */
/* 04 */ Iterator<UnkStruct_027e09a4_54_04> mUnk_04;
/* 0C */ wchar_t mUnk_0C[8];
/* 1C */ UnkStruct_SceneChange1 mUnk_1C;
/* 30 */ unk16 mUnk_30;
/* 1C */ EntranceInfo mUnk_1C;
/* 30 */ u16 mUnk_30;
/* 32 */ bool mUnk_32;
/* 33 */ unk8 mUnk_33;
/* 34 */
@@ -186,8 +217,8 @@ public:
class UnkStruct_027e09a4 : public AutoInstance<UnkStruct_027e09a4> {
public:
/* 00 */ UnkStruct_SceneChange1 mUnk_00; // the infos of the current area, this isn't saved when you save the game
/* 14 */ UnkStruct_SceneChange1 mUnk_14;
/* 00 */ EntranceInfo mUnk_00; // the infos of the current area, this isn't saved when you save the game
/* 14 */ EntranceInfo mUnk_14;
/* 28 */ unk32 mUnk_28;
/* 2C */ UnkStruct_027e09a4_2C mUnk_2C;
/* 40 */ UnkStruct_027e09a4_2C mUnk_40;
@@ -200,15 +231,15 @@ public:
/* 68 */
bool IsCutscene() {
return this->mUnk_00.mIsCS == true;
return this->mUnk_00.isCS == true;
}
bool IsNotCutscene() {
return this->mUnk_00.mIsCS != true;
return this->mUnk_00.isCS != true;
}
u8 CurrentCSIndex() {
return this->mUnk_00.mCutsceneIndex;
return this->mUnk_00.csIndex;
}
bool UnkCheck(unk32 sceneIndex) {
@@ -245,31 +276,31 @@ public:
}
SceneIndex CurrentSceneIndex() {
return this->mUnk_00.mSceneIndex;
return this->mUnk_00.sceneIndex;
}
bool IsDarkRealm() {
return this->mUnk_00.mSceneIndex <= SceneIndex_t_eviltrain3 && this->mUnk_00.mSceneIndex >= SceneIndex_t_eviltrain;
return this->mUnk_00.sceneIndex <= SceneIndex_t_eviltrain3 && this->mUnk_00.sceneIndex >= SceneIndex_t_eviltrain;
}
bool IsDungeonTower() {
return this->mUnk_00.mSceneIndex == SceneIndex_d_main;
return this->mUnk_00.sceneIndex == SceneIndex_d_main;
}
bool IsPirate() {
return this->mUnk_00.mSceneIndex == SceneIndex_f_pirate;
return this->mUnk_00.sceneIndex == SceneIndex_f_pirate;
}
bool IsWater3() {
return this->mUnk_00.mSceneIndex == SceneIndex_f_water3;
return this->mUnk_00.sceneIndex == SceneIndex_f_water3;
}
bool IsSnowdriftStation() {
return this->mUnk_00.mSceneIndex == SceneIndex_f_kakushi1;
return this->mUnk_00.sceneIndex == SceneIndex_f_kakushi1;
}
bool IsPassenger() {
return this->mUnk_00.mSceneIndex == SceneIndex_f_passenger;
return this->mUnk_00.sceneIndex == SceneIndex_f_passenger;
}
UnkStruct_027e09a4(unk32 param1);
@@ -282,7 +313,7 @@ public:
// overlay 0
unk8 func_ov000_02070bd0(unk32 csIndex, unk32 param2);
UnkStruct_SceneChange1 *func_ov000_02070560();
EntranceInfo *func_ov000_02070560();
void func_ov000_020707a8(void *param1);
void func_ov000_02070834(void *param1);
void func_ov000_0207087c(unk32 param1);
@@ -291,18 +322,18 @@ public:
void func_ov000_02070a4c(unk32 param1);
unk32 func_ov000_02070554();
UnkStruct_WarpUnk1_A0 *func_ov000_02070538();
bool func_ov000_02070a9c(UnkStruct_SceneChange1 *param1);
bool func_ov000_02072154(UnkStruct_SceneChange1 *param1, unk32 param2);
bool func_ov000_02070a9c(EntranceInfo *param1);
bool func_ov000_02072154(EntranceInfo *param1, unk32 param2);
bool func_ov000_0207056c();
void func_ov000_020705e8(SaveFile *param1, unk32 param2);
// overlay 1
void func_ov001_020b662c();
void func_ov001_020b66dc();
void func_ov001_020b6758(const UnkStruct_SceneChange1 *param1, bool param2);
void func_ov001_020b6758(const EntranceInfo *param1, bool param2);
void func_ov001_020b68a4(bool param1, bool param2, bool param3);
void func_ov001_020b6924(const UnkStruct_SceneChange1 *param1, bool param2);
void func_ov001_020b69b4(const UnkStruct_SceneChange1 *param1, bool param2);
void func_ov001_020b6924(const EntranceInfo *param1, bool param2);
void func_ov001_020b69b4(const EntranceInfo *param1, bool param2);
static UnkStruct_027e09a4 *Create(unk32 param1);
+73 -36
View File
@@ -4,6 +4,7 @@
#include "math.hpp"
#include "types.h"
#include "Actor/Actor.hpp"
#include "MapObject/MapObjectManager.hpp"
#include "Render/ModelRender.hpp"
#include "Save/SaveFile.hpp"
@@ -58,6 +59,7 @@ public:
/* 14 */ unk32 mUnk_14;
/* 18 */
UnkStruct_ov001_020c40f4(int) {}
UnkStruct_ov001_020c40f4() {
this->mUnk_0E = -1;
this->mUnk_0F = 0;
@@ -145,15 +147,35 @@ public:
~UnkStruct_027e0cd8_0C_Base_148_02();
};
// UnkStruct_ov001_020c2a40 ?
class UnkStruct_027e0cd8_0C_Base_154_00 {
public:
/* 00 */ STRUCT_PAD(0x00, 0x14);
/* 14 */
typedef u16 UnkFlags1;
enum UnkFlags1_ {
UnkFlags1_None = 0,
UnkFlags1_1 = 1,
UnkFlags1_2 = 2,
UnkFlags1_3 = 3,
UnkFlags1_4 = 4,
UnkFlags1_5 = 5,
UnkFlags1_6 = 6,
UnkFlags1_7 = 7,
UnkFlags1_Max = 8,
};
UnkStruct_027e0cd8_0C_Base_154_00(const UnkStruct_027e0cd8_0C_Base_154_00 &ref) {
MI_CpuCopy32((void *) &ref, this, sizeof(UnkStruct_027e0cd8_0C_Base_154_00));
}
typedef u16 UnkFlags2;
enum UnkFlags2_ {
UnkFlags2_None = 0,
UnkFlags2_0 = 0,
UnkFlags2_1 = 1,
UnkFlags2_2 = 2,
UnkFlags2_3 = 3,
UnkFlags2_4 = 4,
UnkFlags2_5 = 5,
UnkFlags2_6 = 6,
UnkFlags2_7 = 7,
UnkFlags2_8 = 8,
UnkFlags2_9 = 9,
UnkFlags2_10 = 10,
UnkFlags2_11 = 11,
UnkFlags2_Max = 12,
};
class UnkStruct_027e0cd8_0C_Base {
@@ -171,7 +193,7 @@ public:
};
/* 088 */ UnkStruct_027e0cd8_0C_Base_88 mUnk_088;
/* 098 */ UnkStruct_027e0cd8_0C_Base_98 *mUnk_098;
/* 09C */ Vec2s mUnk_09C;
/* 09C */ Vec2us mUnk_09C;
/* 0A0 */ unk32 mUnk_0A0;
/* 0A4 */ unk32 mUnk_0A4;
/* 0A8 */ unk32 mUnk_0A8;
@@ -179,14 +201,17 @@ public:
/* 0AC */ bool mUnk_0AD;
/* 0AC */ bool mUnk_0AE;
/* 0AC */ bool mUnk_0AF;
/* 0B0 */ unk32 mUnk_0B0;
/* 0B0 */ u8 mUnk_0B0;
/* 0B1 */ u8 mUnk_0B1;
/* 0B2 */ u8 mUnk_0B2;
/* 0B3 */ u8 mUnk_0B3;
/* 0B4 */ ZeldaObjectList *mUnk_0B4;
/* 0B8 */ ZeldaObjectList *mUnk_0B8[8]; // map objects
/* 0D8 */ ZeldaObjectList *mUnk_0D8;
/* 0DC */ ZeldaObjectList *mUnk_0DC[8]; // actors
/* 0FC */ unk32 mUnk_0FC;
/* 100 */ volatile BOOL mIsCS;
/* 104 */ unk16 mUnk_104;
/* 104 */ UnkFlags1 mUnk_104;
/* 108 */ unk32 mUnk_108;
/* 10C */ unk32 mUnk_10C;
/* 110 */ unk32 mUnk_110;
@@ -195,18 +220,18 @@ public:
/* 11C */ unk32 mUnk_11C;
/* 120 */ unk32 mUnk_120;
/* 124 */ unk32 mUnk_124;
/* 128 */ u16 mUnk_128;
/* 128 */ UnkFlags2 mUnk_128;
/* 12A */ bool mUnk_12A;
/* 12B */ bool mUnk_12B;
/* 12C */ bool mUnk_12C;
/* 12D */ bool mUnk_12D;
/* 12E */ bool mUnk_12E;
/* 130 */ unk32 mUnk_130;
/* 134 */ unk32 mUnk_134;
/* 138 */ unk32 mUnk_138;
/* 13C */ FixedVector<UnkStruct_ov001_020c40f4> mUnk_13C;
/* 148 */ CustomVector<UnkStruct_027e0cd8_0C_Base_148_00_Base *> mUnk_148;
/* 154 */ CustomVector<UnkStruct_027e0cd8_0C_Base_154_00> mUnk_154;
/* 130 */ ZMBSectionROMB *mpROMB;
/* 134 */ ZMBSectionCAME *mpCAME;
/* 138 */ ZMBSectionCMPT *mpCMPT;
/* 13C */ FixedVector<UnkStruct_ov001_020c40f4> mUnk_13C; // related to player
/* 148 */ CustomVector<UnkStruct_027e0cd8_0C_Base_148_00_Base *> mUnk_148; // related to "arrange" stuff
/* 154 */ CustomVector<EntranceInfo> mUnk_154; // exit list?
/* 160 */
UnkStruct_027e0cd8_0C_Base(UnkStruct_027e0cd8 *param1);
@@ -217,43 +242,43 @@ public:
/* 10 */ virtual void vfunc_10();
/* 14 */ virtual void vfunc_14();
/* 18 */ virtual void vfunc_18();
/* 1C */ virtual void vfunc_1C(const UnkStruct_SceneChange1 *param1, bool param2, bool param3);
/* 1C */ virtual void vfunc_1C(const EntranceInfo *param1, bool param2, bool param3);
/* 20 */ virtual void vfunc_20();
/* 24 */ virtual void vfunc_24();
/* 28 */ virtual fx32 vfunc_28(VecFx32 *param1, unk32 param2, unk32 param3);
/* 2C */ virtual void vfunc_2C();
/* 30 */ virtual void LoadSceneModel(const UnkStruct_SceneChange1 *param1);
/* 34 */ virtual void vfunc_34(unk32 param1);
/* 30 */ virtual void LoadSceneModel(const EntranceInfo *param1);
/* 34 */ virtual void ZMB_ParseROMB(ZMBSectionROMB *pROMB);
/* 38 */ virtual void vfunc_38();
/* 3C */ virtual void vfunc_3C();
/* 40 */ virtual void vfunc_40(u8 spawnIndex);
// itcm
fx32 func_01ffedf4(Vec2b *pPos);
fx32 func_01ffedf4(Vec2bCpp *pPos);
// overlay 0
unk32 func_ov000_02080180(void *param1);
void func_ov000_020801b0(Vec2b *param1, unk32 param2, unk32 param3);
void func_ov000_020801b0(Vec2bCpp *param1, unk32 param2, unk32 param3);
bool func_ov000_020802ec(u16 param1, VecFx32 *param2);
void func_ov000_020803ec(u16 param1);
void func_ov000_0208053c(u16 param1);
bool func_ov000_02080658(unk32 param1, UnkStruct_SceneChange1 *param2);
void func_ov000_020808f4(void *param1, void *param2, unk32 param3);
bool func_ov000_02080658(unk32 param1, EntranceInfo *param2);
void func_ov000_020808f4(void *param1, void *param2, u8 param3);
unk32 func_ov000_02080a44();
void func_ov000_02080a5c(VecFx32 *param1);
void func_ov000_02080a78(VecFx32 *param1);
// overlay 1
void func_ov001_020b85d0(const UnkStruct_SceneChange1 *param1);
void func_ov001_020b85d0(const EntranceInfo *param1);
void func_ov001_020b88c0(unk32 param1);
void func_ov001_020b88ec();
const UnkStruct_ov001_020c40f4 *func_ov001_020b8a5c(unk32 spawnIndex, unk32 param1);
void func_ov001_020b8aec();
void func_ov001_020b8b94(ZMBEntryARAB *pARAB);
void func_ov001_020b8c30(const UnkStruct_027e0cd8_0C_Base_154_00 &param1);
void func_ov001_020b8c30(const EntranceInfo &param1);
void *func_ov001_020b8c80(unk32 param1);
void func_ov001_020b8c90(unk32 param1);
void func_ov001_020b8c98(unk32 param1);
void func_ov001_020b8c90(ZMBSectionCMPT *pCMPT);
void func_ov001_020b8c98(ZMBSectionCAME *pCAME);
void func_ov001_020b8db8();
void func_ov001_020b8e24();
void func_ov001_020b8e54();
@@ -275,7 +300,7 @@ public:
/* 10 */ virtual void vfunc_10() override;
/* 14 */ virtual void vfunc_14() override;
/* 18 */ virtual void vfunc_18() override;
/* 1C */ virtual void vfunc_1C(const UnkStruct_SceneChange1 *param1, bool param2, bool param3) override;
/* 1C */ virtual void vfunc_1C(const EntranceInfo *param1, bool param2, bool param3) override;
/* 20 */ virtual void vfunc_20() override;
/* 24 */ virtual void vfunc_24() override;
/* 28 */ virtual fx32 vfunc_28(VecFx32 *param1, unk32 param2, unk32 param3) override;
@@ -316,8 +341,15 @@ public:
/* 08 */ unk32 mUnk_08;
/* 0C */ UnkStruct_027e0cd8_04_0C *mUnk_0C;
/* 10 */ u8 mUnk_10;
/* 11 */ u8 mUnk_11;
/* 12 */ STRUCT_PAD(0x12, 0x40);
/* 10 */ u8 mUnk_11;
/* 12 */ u8 mUnk_12;
/* 12 */ u8 mUnk_13;
/* 14 */ u8 mUnk_14;
/* 14 */ u8 mUnk_15;
/* 16 */ u8 mUnk_16;
/* 16 */ u8 mUnk_17;
/* 18 */ Vec2p mUnk_18;
/* 20 */ STRUCT_PAD(0x20, 0x40);
/* 40 */ u8 mUnk_40[1][10]; // at least one
STRUCT_PAD(0x4C, 0xB4);
/* B4 */
@@ -327,6 +359,10 @@ public:
void func_ov000_02081354(const CourseListEntry *pEntry, const UnkStruct_func_ov000_020702a8 *pUnk1,
SaveFile_00000_0000_Data_184 *param3, bool param4);
void func_ov000_02081874(u16 nEntries);
void func_ov000_020819a4(const UnkStruct_func_ov000_020702a8 *pUnk1);
void func_ov000_020818d0(CourseListRoomEntry *param1, unk32 param2, unk32 param3, unk32 param4, unk32 param5);
void func_ov000_0208199c(SceneIndex sceneIndex, void *param2, unk32 param3);
};
class UnkStruct_027e0cd8_10 : public UnkDataStruct4 {
@@ -374,15 +410,16 @@ public:
bool func_ov000_02082124();
bool func_ov000_02081c28();
void func_ov000_02081ca0();
bool func_ov000_02081edc(u16 param1);
// overlay 1
void func_ov001_020b7830(const UnkStruct_SceneChange1 *param1);
void func_ov001_020b7830(const EntranceInfo *param1);
void func_ov001_020b7a7c();
void func_ov001_020b7b38(const CourseListEntry *pEntry, const UnkStruct_func_ov000_020702a8 *pUnk1);
void func_ov001_020b7c08(const UnkStruct_SceneChange1 *param1, const UnkStruct_WarpUnk1_A0 *param2);
void func_ov001_020b7d64(const UnkStruct_SceneChange1 *param1);
void func_ov001_020b7c08(const EntranceInfo *param1, const UnkStruct_WarpUnk1_A0 *param2);
void func_ov001_020b7d64(const EntranceInfo *param1);
void func_ov001_020b7e50();
void func_ov001_020b7e68(const UnkStruct_SceneChange1 *param1, bool param2);
void func_ov001_020b7e68(const EntranceInfo *param1, bool param2);
void func_ov001_020b803c();
bool func_ov001_020b80fc(SceneIndex sceneIndex);
void func_ov001_020b8120(SceneIndex sceneIndex);
+2
View File
@@ -397,6 +397,8 @@ class UnkStruct_027e0ce0_1C {
public:
/* 00 */ STRUCT_PAD(0x00, 0x0C);
/* 0C */ MapObjectProfile_Derived2_20_Base *mUnk_0C;
void func_ov001_020bd0a4(bool param1);
};
// PlayerManager?
+4 -4
View File
@@ -3,7 +3,7 @@
#include "System/SysNew.hpp"
#include "types.h"
class UnkStruct_SceneChange1;
class EntranceInfo;
class UnkStruct_ov018_020c5ac0 {
public:
@@ -63,10 +63,10 @@ public:
void func_ov001_020bd87c(void);
void func_ov001_020bd8dc(void);
void func_ov001_020bd8ac(void);
void func_ov001_020bd970(UnkStruct_SceneChange1 *param1);
void func_ov001_020bd970(EntranceInfo *param1);
void func_ov001_020bde5c(void);
void func_ov001_020bde04(UnkStruct_SceneChange1 *param1);
void func_ov001_020bde4c(const UnkStruct_SceneChange1 *param1);
void func_ov001_020bde04(EntranceInfo *param1);
void func_ov001_020bde4c(const EntranceInfo *param1);
// overlay 18
UnkStruct_ov018_020c5ac0 *func_ov018_020c5718(void);
+298 -67
View File
@@ -1,5 +1,7 @@
#pragma once
#include "Actor/ActorId.hpp"
#include "Actor/ActorRef.hpp"
#include "Map/MapObjectId.hpp"
#include "types.h"
@@ -11,11 +13,13 @@ extern "C" {
typedef u32 FileType;
enum FileType_ {
FileType_ZOB = 'BLOZ',
FileType_ZTB = '1BTZ',
FileType_ZMB = '1BMZ',
FileType_CIB = 'ZCIB',
FileType_CLB = 'ZCLB',
FileType_ZOB = 'BLOZ',
FileType_ZTB = '1BTZ',
FileType_ZAB = 'ZCAB',
FileType_ZMBv1 = 'ZMB1',
FileType_ZMBv2 = 'ZMB2',
FileType_CIB = 'ZCIB',
FileType_CLB = 'ZCLB',
};
typedef struct FileInfos {
@@ -23,6 +27,55 @@ typedef struct FileInfos {
/* 04 */ size_t size;
} FileInfos;
// .cib
typedef struct CourseInitEntry {
/* 00 */ const char name[16];
/* 10 */ STRUCT_PAD(0x10, 0x24);
} CourseInitEntry; // size = 0x24
typedef struct CourseInitHeader {
/* 00 */ FileType type; // always "ZCIB"
/* 04 */ size_t nSize;
/* 08 */ u32 nEntries;
/* 0C */ u32 nEntries2; // same value as above?
} CourseInitHeader; // size = 0x10
// .clb
typedef struct CourseListRoomEntry {
/* 00 */ u8 roomIndex;
/* 01 */ u8 mapPaintIndex;
/* 02 */ u16 unk_02;
} CourseListRoomEntry; // size = 0x08
typedef struct CourseListEntry {
/* 00 */ const char name[16];
/* 10 */ unk32 unk_10;
/* 14 */ u8 numRooms;
/* 15 */ unk8 unk_15;
/* 16 */ unk8 titleCardMsgIndex;
/* 17 */ u8 saveCourseIndex;
/* 18 */ u8 unk_18;
/* 19 */ u8 unk_19;
/* 1A */ u8 unk_1A;
/* 1B */ u8 unk_1B;
/* 1C */ u8 unk_1C;
/* 1D */ u8 unk_1D;
/* 1E */ u8 unk_1E;
/* 1F */ u8 unk_1F;
/* 20 */ u8 defaultMapPaintIndex;
/* 21 */ s8 unk_21; // scene index but unknown purpose
/* 22 */ unk8 unk_22; // pad?
/* 23 */ unk8 unk_23; // pad?
/* 24 */ CourseListRoomEntry roomEntries[];
} CourseListEntry; // size >= 0x28
typedef struct CourseListHeader {
/* 00 */ FileType type; // always "ZCIB"
/* 04 */ size_t nSize;
/* 08 */ u32 nEntries;
/* 0C */ u32 nEntries2; // same value as above?
} CourseListHeader; // size = 0x10
// .zob
typedef struct ZOBHeader {
/* 00 */ FileType type; // always "ZOLB"
@@ -51,7 +104,7 @@ typedef struct ZTBHeader {
/* 00 */ u32 magic; // 'MTRB'
/* 04 */ FileType type; // always "ZTB1"
/* 08 */ size_t nSize;
/* 0C */ u32 nEntries;
/* 0C */ u32 nSections;
/* 10 */ u8 unused[0x10];
} ZTBHeader; // size = 0x20
@@ -129,35 +182,90 @@ extern BOOL ZTB_ParseGRRL(FileInfos *pFileInfos, UnkDataStruct4 *pDst, ZTBSectio
extern BOOL ZTB_ParseSTAB(FileInfos *pFileInfos, UnkDataStruct4 *pDst, ZTBSectionSTAB *pSTAB);
extern BOOL ZTB_ParseLDMK(FileInfos *pFileInfos, UnkDataStruct4 *pDst, ZTBSectionLDMK *pLDMK);
// .zab
typedef u32 ZABSectionType;
enum ZABSectionType_ {
ZABSectionType_CABM = 'CABM',
ZABSectionType_CABI = 'CABI',
};
typedef struct ZABHeader {
/* 00 */ FileType type; // always "ZCAB" (probably "Zelda Course Arrange Binary"?)
/* 04 */ size_t nSize;
/* 08 */ u32 nSections;
/* 0C */ unk32 unk_0C;
} ZABHeader; // size = 0x10
typedef struct ZABEntryCABM {
/* 00 */ u8 unk_00;
/* 01 */ u8 unk_01;
/* 02 */ u8 unk_02;
/* 03 */ s8 unk_03;
/* 04 */ u32 unk_04;
} ZABEntryCABM; // size = 0x08
typedef struct ZABSectionHeader {
/* 00 */ ZABSectionType type;
/* 04 */ size_t nSize;
/* 08 */ u8 unk_08;
/* 09 */ u8 unk_09;
/* 0A */ u8 unk_0A;
/* 0B */ u8 unk_0B;
/* 0C */ u8 unk_0C;
/* 0D */ u8 unk_0D;
/* 0E */ u16 nEntries;
} ZABSectionHeader; // size = 0x10
typedef struct ZABSectionCABM {
/* 00 */ ZABSectionHeader header;
/* 10 */ ZABEntryCABM entries[];
} ZABSectionCABM;
typedef struct ZABSectionCABI {
/* 00 */ ZABSectionHeader header;
/* 10 */ // unknown
} ZABSectionCABI;
struct UnkStruct_027e0cd8_04;
struct UnkStruct_func_ov000_020702a8;
extern BOOL ZAB_ParseFile(FileInfos *pFileInfos, u32 sceneIndex, UnkStruct_027e0cd8_04 *pDst, const CourseListEntry *pEntry,
const UnkStruct_func_ov000_020702a8 *pUnk1, BOOL param6);
extern BOOL ZAB_ParseCAMB(FileInfos *pFileInfos, ZABSectionCABM *pCABM, u32 sceneIndex, UnkStruct_027e0cd8_04 *pDst,
const CourseListEntry *pEntry, const UnkStruct_func_ov000_020702a8 *pUnk1, BOOL param6);
extern BOOL ZAB_ParseCABI(FileInfos *pFileInfos, ZABSectionCABI *pCABI, BOOL param3);
extern BOOL ZAB_GetRoomEntry(FileInfos *pFileInfos, u8 param2, const CourseListEntry *pEntry, CourseListRoomEntry *param4);
// .zmb
typedef u32 ZMBSectionType;
enum ZMBSectionType_ {
ZMBSectionType_LDLB = 'LDLB', // related to script triggers
ZMBSectionType_ROMB = 'ROMB', // unknown
ZMBSectionType_ROOB = 'ROOM', // room settings
ZMBSectionType_ARAB = 'ARAB', // locations? (?)
ZMBSectionType_RALB = 'RALB', // paths?
ZMBSectionType_WARP = 'WARP', // exits?
ZMBSectionType_CAME = 'CAME', // camera settings?
ZMBSectionType_PLYR = 'PLYR', // player entrances?
ZMBSectionType_MPOB = 'MPOB', // map object list, parameters are stored here
ZMBSectionType_NPCA = 'NPCA', // actor list, same as above
ZMBSectionType_ROMB = 'ROMB', // unknown
ZMBSectionType_ROOM = 'ROOM', // room settings
ZMBSectionType_LDLB = 'LDLB', // related to script triggers
ZMBSectionType_MapObjects = 'MPOB', // map object list, parameters are stored here
ZMBSectionType_ARAB = 'ARAB', // locations? (?)
ZMBSectionType_RALB = 'RALB', // paths?
ZMBSectionType_NPCA = 'NPCA', // actor list, same as above
ZMBSectionType_PLYR = 'PLYR', // player entrances?
ZMBSectionType_WARP = 'WARP', // exits?
ZMBSectionType_CAME = 'CAME', // camera settings?
ZMBSectionType_CMPT = 'CMPT', // ?
};
typedef struct ZMBFileInfos {
/* 00 */ void *pFile;
/* 04 */ size_t size;
/* 08 */ unk16 unk_08;
/* 0A */ unk16 unk_0A;
/* 0C */ unk16 unk_0C;
/* 10 */ unk16 unk_10;
/* 14 */ unk16 unk_14;
} ZMBFileInfos;
/* 0E */ s16 unk_0E;
} ZMBFileInfos; // size = 0x10
typedef struct ZMBHeader {
/* 00 */ u32 magic; // 'MAPB'
/* 04 */ FileType type; // always "ZMB1"
/* 08 */ size_t nSize;
/* 0C */ u32 nEntries;
/* 0C */ u32 nSections;
/* 10 */ u8 unused[0x10];
} ZMBHeader; // size = 0x20
@@ -169,18 +277,68 @@ typedef struct ZMBSectionHeader {
/* 0B */ u8 unk_0B;
} ZMBSectionHeader; // size = 0x0C
typedef struct ZMBEntryRALB {
typedef struct ZMBSectionROMB {
/* 00 */ ZMBSectionHeader header;
/* 0C */
} ZMBSectionROMB;
typedef struct ZMBEntryROOM {
/* 00 */ u8 unk_00;
/* 01 */ u8 unk_01;
/* 02 */ u8 unk_02;
/* 03 */ u8 unk_03;
/* 04 */ unk32 unk_04;
} ZMBEntryRALB; // size = 0x08
/* 04 */ u8 unk_04;
/* 05 */ u8 unk_05;
/* 06 */ u8 unk_06;
/* 07 */ u8 unk_07;
/* 08 */ u32 unk_08;
/* 0C */ u8 unk_0C;
/* 0D */ union {
u8 unk_0D;
bool unk_0D_bool;
};
/* 0E */ u8 unk_0E;
/* 0F */ u8 unk_0F;
/* 10 */ u16 unk_10;
/* 12 */ unk16 unk_12; // pad
} ZMBEntryROOM; // size = 0x14
typedef struct ZMBSectionRALB {
typedef struct ZMBSectionROOM {
/* 00 */ ZMBSectionHeader header;
/* 0C */ ZMBEntryRALB entries[];
} ZMBSectionRALB;
/* 0C */ ZMBEntryROOM entries[];
} ZMBSectionROOM;
typedef struct ZMBEntryLBLB {
/* 00 */ u8 unk_00;
/* 01 */ u8 unk_01;
/* 02 */ u8 unk_02;
/* 03 */ u8 unk_03;
/* 04 */ u16 unk_04;
/* 06 */ unk16 unk_06;
} ZMBEntryLBLB; // size = 0x08
typedef struct ZMBSectionLDLB {
/* 00 */ ZMBSectionHeader header;
/* 0C */ ZMBEntryLBLB entries[];
} ZMBSectionLDLB;
typedef struct ZMBMapObjEntry {
/* 00 */ u32 id;
/* 04 */ Vec2b pos;
/* 06 */ u16 angle;
/* 08 */ u16 params[4];
/* 10 */ u16 unk_10[2];
/* 14 */ unk32 unk_14;
/* 18 */ u8 unk_18;
/* 19 */ u8 unk_19;
/* 1A */ u8 unk_1A;
/* 1B */ u8 unk_1B;
} ZMBMapObjEntry; // size = 0x1C
typedef struct ZMBSectionMapObjectList {
/* 00 */ ZMBSectionHeader header;
/* 0C */ ZMBMapObjEntry entries[];
} ZMBSectionMapObjectList;
typedef struct ZMBEntryARAB {
/* 00 */ u8 unk_00;
@@ -195,57 +353,130 @@ typedef struct ZMBEntryARAB {
/* 0F */ unk8 unk_0F;
} ZMBEntryARAB; // size = 0x10
struct UnkStruct_027e0cd8_0C_Base;
typedef struct ZMBSectionARAB {
/* 00 */ ZMBSectionHeader header;
/* 0C */ ZMBEntryARAB entries[];
} ZMBSectionARAB;
extern BOOL ZMB_ParseFile(ZMBFileInfos *pFileInfos, UnkStruct_027e0cd8_0C_Base *pDst, BOOL param3);
// ZMBPathPoint?
typedef struct ZMBRALBPoint {
/* 00 */ u8 unk_00;
/* 01 */ u8 unk_01;
/* 02 */ fx16 angle;
/* 04 */ VecFx32 pos;
/* 10 */ unk16 unk_10;
/* 12 */ u16 unk_12;
/* 14 */ unk32 unk_14;
} ZMBRALBPoint; // size = 0x18
// .cib
typedef struct CourseInitEntry {
/* 00 */ const char name[16];
/* 10 */ STRUCT_PAD(0x10, 0x24);
} CourseInitEntry; // size = 0x24
typedef struct CourseInitHeader {
/* 00 */ FileType type; // always "ZCIB"
/* 04 */ size_t nSize;
/* 08 */ u32 nEntries;
/* 0C */ u32 nEntries2; // same value as above?
} CourseInitHeader; // size = 0x10
// .clb
typedef struct CourseListRoomEntry {
/* 00 */ u8 roomIndex;
/* 01 */ u8 mapPaintIndex;
// ZMBPathEntry?
typedef struct ZMBEntryRALB {
/* 00 */ u8 unk_00;
/* 01 */ u8 numPoints;
/* 02 */ u8 unk_02;
/* 03 */ u8 unk_03;
} CourseListRoomEntry; // size = 0x08
/* 04 */ unk32 unk_04;
} ZMBEntryRALB; // size = 0x08
typedef struct CourseListEntry {
/* 00 */ const char name[16];
/* 10 */ unk32 unk_10;
/* 14 */ unk8 numRooms;
/* 15 */ unk8 unk_15;
/* 16 */ unk8 titleCardMsgIndex;
/* 17 */ u8 saveCourseIndex;
/* 18 */ u8 unk_18;
/* 19 */ u8 unk_19;
/* 1A */ u8 unk_1A;
/* 1B */ u8 unk_1B;
typedef struct ZMBSectionRALB {
/* 00 */ ZMBSectionHeader header;
/* 0C */ ZMBEntryRALB entries[];
} ZMBSectionRALB;
typedef struct ZMBActorEntry {
/* 00 */ u32 id;
/* 04 */ struct {
u16 x, y;
} pos;
/* 08 */ s8 unk_08;
/* 08 */ s8 unk_09;
/* 0A */ u16 angle;
/* 0C */ u16 params[4];
/* 14 */ u16 unk_14[2];
/* 18 */ u32 unk_18;
/* 1C */ u8 unk_1C;
/* 1D */ u8 unk_1D;
/* 1E */ u8 unk_1E;
/* 1F */ u8 unk_1F;
/* 20 */ u8 defaultMapPaintIndex;
/* 21 */ s8 unk_21; // scene index but unknown purpose
/* 24 */ CourseListRoomEntry roomEntries[];
} CourseListEntry; // size >= 0x28
} ZMBActorEntry; // size = 0x20
typedef struct CourseListHeader {
/* 00 */ FileType type; // always "ZCIB"
/* 04 */ size_t nSize;
/* 08 */ u32 nEntries;
/* 0C */ u32 nEntries2; // same value as above?
} CourseListHeader; // size = 0x10
typedef struct ZMBSectionActorList {
/* 00 */ ZMBSectionHeader header;
/* 0C */ ZMBActorEntry entries[];
} ZMBSectionActorList;
typedef struct ZMBEntryPLYR {
/* 00 */ VecFx32 unk_00;
/* 0C */ u16 unk_0C;
/* 0E */ u8 unk_0E;
/* 0F */ u8 unk_0F;
/* 10 */ u8 unk_10;
/* 11 */ u8 unk_11;
/* 12 */ u8 unk_12;
/* 13 */ u8 unk_13;
} ZMBEntryPLYR; // size = 0x14
typedef struct ZMBSectionPLYR {
/* 00 */ ZMBSectionHeader header;
/* 0C */ ZMBEntryPLYR entries[];
} ZMBSectionPLYR;
typedef struct ZMBEntryWARP {
/* 00 */ u8 unk_00;
/* 01 */ u8 unk_01;
/* 02 */ u8 roomIndex;
/* 03 */ u8 spawnIndex;
/* 04 */ const char destName[16];
/* 14 */ u8 unk_14;
/* 15 */ u8 unk_15;
/* 16 */ u8 unk_16;
/* 17 */ u8 unk_17;
} ZMBEntryWARP; // size = 0x18
typedef struct ZMBSectionWARP {
/* 00 */ ZMBSectionHeader header;
/* 0C */ ZMBEntryWARP entries[];
} ZMBSectionWARP;
typedef struct ZMBEntryCAME {
/* 00 */ fx32 unk_00;
/* 04 */ VecFx32 unk_04;
/* 10 */ s16 unk_10;
/* 12 */ s16 unk_12;
/* 14 */ unk32 unk_14[2]; // pad
} ZMBEntryCAME; // size = 0x1C
typedef struct ZMBSectionCAME {
/* 00 */ ZMBSectionHeader header;
/* 0C */ ZMBEntryCAME entries[];
} ZMBSectionCAME;
typedef struct ZMBEntryCMPT {
/* 04 */ VecFx32 unk_00;
/* 10 */ u8 unk_0C;
/* 12 */ u8 unk_0D;
/* 14 */ unk16 unk_0E; // pad
} ZMBEntryCMPT; // size = 0x10
typedef struct ZMBSectionCMPT {
/* 00 */ ZMBSectionHeader header;
/* 0C */ ZMBEntryCMPT entries[];
} ZMBSectionCMPT;
struct UnkStruct_027e0cd8_0C_Base;
extern BOOL ZMB_ParseFile(ZMBFileInfos *pFileInfos, UnkStruct_027e0cd8_0C_Base *pDst, bool param3);
extern BOOL ZMB_ParseROMB(ZMBFileInfos *pFileInfos, ZMBSectionROMB *pROMB, UnkStruct_027e0cd8_0C_Base *pDst);
extern BOOL ZMB_ParseLDLB(ZMBFileInfos *pFileInfos, ZMBSectionLDLB *pLDLB, UnkStruct_027e0cd8_0C_Base *pDst);
extern BOOL ZMB_ParseARAB(ZMBFileInfos *pFileInfos, ZMBSectionARAB *pARAB, UnkStruct_027e0cd8_0C_Base *pDst);
extern BOOL ZMB_ParseRALB(ZMBFileInfos *pFileInfos, ZMBSectionRALB *pRALB, UnkStruct_027e0cd8_0C_Base *pDst);
extern BOOL ZMB_ParseWARP(ZMBFileInfos *pFileInfos, ZMBSectionWARP *pWARP, UnkStruct_027e0cd8_0C_Base *pDst);
extern BOOL ZMB_ParseMapObjList(ZMBFileInfos *pFileInfos, ZMBSectionMapObjectList *pMapObjs, UnkStruct_027e0cd8_0C_Base *pDst);
extern BOOL ZMB_ParseActorList(ZMBFileInfos *pFileInfos, ZMBSectionActorList *pNPCA, UnkStruct_027e0cd8_0C_Base *pDst);
extern BOOL ZMB_ParseROOM(ZMBFileInfos *pFileInfos, ZMBSectionROOM *pROOM, UnkStruct_027e0cd8_0C_Base *pDst);
extern BOOL ZMB_ParsePLYR(ZMBFileInfos *pFileInfos, ZMBSectionPLYR *pPLYR, UnkStruct_027e0cd8_0C_Base *pDst);
extern BOOL ZMB_ParseCAME(ZMBFileInfos *pFileInfos, ZMBSectionCAME *pCAME, UnkStruct_027e0cd8_0C_Base *pDst);
extern BOOL ZMB_ParseCMPT(ZMBFileInfos *pFileInfos, ZMBSectionCMPT *pCMPT, UnkStruct_027e0cd8_0C_Base *pDst);
#ifdef __cplusplus
} // extern "C"
+4 -1
View File
@@ -11,11 +11,14 @@
*/
#define GET_FLAG(arr, pos) (((arr)[((u32) (pos)) >> 5] & (1 << ((pos) & 0x1F))) != 0)
#define GET_FLAG2(var, pos) ((var) & (1 << pos))
#define SET_FLAG(arr, pos) ((arr)[((u32) (pos)) >> 5] |= 1 << ((pos) & 0x1F))
#define UNSET_FLAG(arr, pos) ((arr)[((u32) (pos)) >> 5] &= ~(1 << ((pos) & 0x1F)))
#define FLAG(index, pos) (((index) << 5) | ((pos) & 0x1F))
#define GET_FLAG2(var, pos) (((var) & (1 << (pos))) != 0)
#define SET_FLAG2(var, pos) ((var) |= 1 << (pos))
#define UNSET_FLAG2(var, pos) ((var) &= ~(1 << (pos)))
#define GET_FLAG_ALT(arr, pos) (((arr)[(pos) >> 5] & (1 << ((0x1F - ((pos) & 0x1F))))) != 0)
#define SET_FLAG_ALT(arr, pos) ((arr)[(pos) >> 5] |= 1 << ((0x1F - ((pos) & 0x1F))))
#define UNSET_FLAG_ALT(arr, pos) ((arr)[(pos) >> 5] &= ~(1 << ((0x1F - ((pos) & 0x1F)))))
+15 -11
View File
@@ -160,6 +160,10 @@ union Vec2us {
x = X;
y = Y;
}
Vec2us(Vec2us *pFrom) {
x = pFrom->x;
y = pFrom->y;
}
};
#define Vec2us_CopyAdd(a, b, dst) Vec2_CopyAdd(Vec2us, a, b, dst)
@@ -204,7 +208,7 @@ static inline void Vec2us_Copy(const Vec2us *a, Vec2us *dst) {
#endif
}
union Vec2b {
union Vec2bCpp {
struct {
/* 0 */ u8 x;
/* 2 */ u8 y;
@@ -212,24 +216,24 @@ union Vec2b {
};
u8 coords[2];
void operator=(const Vec2b &from) {
void operator=(const Vec2bCpp &from) {
this->x = from.x;
this->y = from.y;
}
Vec2b() {}
Vec2b(u8 X, u8 Y) {
Vec2bCpp() {}
Vec2bCpp(u8 X, u8 Y) {
x = X;
y = Y;
}
};
#define Vec2b_CopyAdd(a, b, dst) Vec2_CopyAdd(Vec2b, a, b, dst)
#define Vec2b_CopySub(a, b, dst) Vec2_CopySub(Vec2b, a, b, dst)
#define Vec2b_CopyAdd(a, b, dst) Vec2_CopyAdd(Vec2bCpp, a, b, dst)
#define Vec2b_CopySub(a, b, dst) Vec2_CopySub(Vec2bCpp, a, b, dst)
#define Vec2b_Set(a, dst) Vec2_Set(a, dst)
static inline void Vec2b_Clear(Vec2b *dst) {
Vec2b empty;
static inline void Vec2b_Clear(Vec2bCpp *dst) {
Vec2bCpp empty;
empty.x = 0;
empty.y = 0;
@@ -241,7 +245,7 @@ static inline void Vec2b_Clear(Vec2b *dst) {
#endif
}
static inline void Vec2b_Add(const Vec2b *a, const Vec2b *b, Vec2b *dst) {
static inline void Vec2b_Add(const Vec2bCpp *a, const Vec2bCpp *b, Vec2bCpp *dst) {
u8 x = a->x + b->x;
u8 y = a->y + b->y;
@@ -249,7 +253,7 @@ static inline void Vec2b_Add(const Vec2b *a, const Vec2b *b, Vec2b *dst) {
dst->y = y;
}
static inline void Vec2b_Sub(const Vec2b *a, const Vec2b *b, Vec2b *dst) {
static inline void Vec2b_Sub(const Vec2bCpp *a, const Vec2bCpp *b, Vec2bCpp *dst) {
u8 x = a->x - b->x;
u8 y = a->y - b->y;
@@ -257,7 +261,7 @@ static inline void Vec2b_Sub(const Vec2b *a, const Vec2b *b, Vec2b *dst) {
dst->y = y;
}
static inline void Vec2b_Copy(const Vec2b *a, Vec2b *dst) {
static inline void Vec2b_Copy(const Vec2bCpp *a, Vec2bCpp *dst) {
#if __MWERKS__
dst->coords = a->coords;
#else