Decompile overlay 24 (Part 2) (#66)

* remove scratch links

* UnkAdventureModeSystem1 OK

* UnkStruct_ov024_020d8694_024 OK

* UnkTitleCardSystem1_024 99%

* UnkTitleCardSystem1_024 OK

* fix regressions

* title card vfunc_08 oddity

* tools: make build.ninja deterministic and delink when objdiff rebuild-on-change

* clean up link node mess

* UnkStruct_020d8698_024 24%

* UnkStruct_020d8698_024 49%

* UnkStruct_020d8698_024 65%

* fix build issues

* UnkStruct_020d8698_024 92%

* UnkStruct_020d8698_024 OK

* delink data_ov024_020d8694 symbol

* tools: revert previous objdiff change and reduce ds-rom logs on objdiff
This commit is contained in:
Yanis
2026-05-24 17:20:48 +02:00
committed by GitHub
parent 0698c28bb0
commit 530fcd8c07
100 changed files with 4150 additions and 1201 deletions
+1 -9
View File
@@ -66,14 +66,6 @@ public:
/* 0FE4 */ UnkResult mUnk_0FE4;
/* 1020 */
GameModeLinkListNode *GetNode() {
GameModeLinkListNode *node = (GameModeLinkListNode *) this;
if (this != NULL) {
node = (GameModeLinkListNode *) ((u32 *) node + 1);
}
return node;
}
FileSelectSubScreen();
void func_ov019_020cf73c(unk32 param1, unk32 param2);
@@ -122,7 +114,7 @@ public:
/* 10 */ virtual void vfunc_10(unk32 param1, unk32 param2, unk32 param3) override;
/* 24 */ virtual void vfunc_24() override;
/* 28 */ virtual void vfunc_28(unk8 *param1) override;
/* 2C */ virtual void vfunc_2C(unk8 *param1) override;
/* 2C */ virtual void DrawUI(unk8 *param1) override;
static GameModeManagerBase *Create(unk32 param1);
};
+2 -10
View File
@@ -9,7 +9,7 @@
#include "math.hpp"
#include "types.h"
typedef Iterator<UnkSubStruct9, MAX_SAVE_SLOTS> FileSlotIterator;
typedef Iterator<UnkSubStruct9> FileSlotIterator;
/*
- "Slot Select" refers to the screen where you choose which file to use
@@ -153,21 +153,13 @@ public:
/* 1C28 */
UnkSubStruct9 &GetUnk03E0(int saveSlotIndex) {
return this->mUnk_03E0.GetRef(saveSlotIndex);
return this->mUnk_03E0.Get(saveSlotIndex);
}
UnkSubStruct9 &GetUnk03E0() {
return this->GetUnk03E0(this->mSaveSlotIndex);
}
GameModeLinkListNode *GetNode() {
GameModeLinkListNode *node = (GameModeLinkListNode *) this;
if (this != NULL) {
node = (GameModeLinkListNode *) ((u32 *) node + 1);
}
return node;
}
FileSelectMain();
void func_ov019_020c61dc();
void func_ov019_020c63dc();
-8
View File
@@ -74,14 +74,6 @@ public:
/* 633 */ unk8 mUnk_633;
/* 634 */
GameModeLinkListNode *GetNode() {
GameModeLinkListNode *node = (GameModeLinkListNode *) this;
if (this != NULL) {
node = (GameModeLinkListNode *) ((u32 *) node + 1);
}
return node;
}
FileSelectMicTest();
void func_ov019_020cea74();
void func_ov019_020cefe4();
-8
View File
@@ -135,14 +135,6 @@ public:
/* 1CF7 */ unk8 mUnk_1CF7;
/* 1CF8 */
GameModeLinkListNode *GetNode() {
GameModeLinkListNode *node = (GameModeLinkListNode *) this;
if (this != NULL) {
node = (GameModeLinkListNode *) ((u32 *) node + 1);
}
return node;
}
FileSelectOptions(s32 saveSlotIndex);
void func_ov019_020ccd40();
void func_ov019_020ccdf4();
@@ -29,14 +29,6 @@ public:
/* 2C */ FileSelectOptions *mpOptions;
/* 30 */
GameModeLinkListNode *GetNode() {
GameModeLinkListNode *node = (GameModeLinkListNode *) this;
if (this != NULL) {
node = (GameModeLinkListNode *) ((u32 *) node + 1);
}
return node;
}
FileSelectOptionsManager(void *param1, unk32 param2);
void func_ov019_020cc85c(unk32 param1);
unk32 func_ov019_020cc874();
+1 -1
View File
@@ -8,7 +8,7 @@
class FileSelectManager_UnkDrawBase : public SysObject {
public:
/* 00 (vtable) */
/* 04 */ GameModeLinkListNode mUnk_04;
/* 04 */ LinkListImpl mUnk_04;
/* 0C */
FileSelectManager_UnkDrawBase();
+1 -2
View File
@@ -43,8 +43,7 @@ public:
UnkSubStruct9();
UnkSubStruct9(stack_struct1 param1);
void Init();
void Init(stack_struct1 param1);
void func_ov019_020cbaec();
bool IsPlayerNameSet();
void func_ov019_020cbb40();
+22 -134
View File
@@ -1,11 +1,13 @@
#pragma once
#include "Game/GameMode.hpp"
#include "LinkList.hpp"
#include "Player/TouchControl.hpp"
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_02049b18.hpp"
#include "math.hpp"
#include "types.h"
#include <nitro/button.h>
#include <nitro/touch.h>
@@ -23,126 +25,26 @@ public:
void func_0201bf24();
void func_0201bf54();
void func_0201bf90();
void func_0201bfec();
void func_0201bfec(unk16 param1);
void func_0201c00c(unk32 param1, unk32 param2);
void func_0201c068(unk16 param1);
void func_0201c068(unk16 param1, bool param2);
void func_0201c0c4(unk32 param1);
void func_0201c0e4();
void func_0201c19c();
void func_0201c124(unk32 param1, unk32 param2, unk32 param3, unk32 param4, unk32 param5);
void func_0201c1e4();
void func_0201c22c();
bool func_0201c2b0(unk32 param1);
void func_ov001_020bd734(unk32 *param1);
void func_ov001_020bd784();
};
class GameModeLinkListNode {
class GameModeManagerBase_104_0C : public LinkList<GameModeManagerBase_104_0C> {
public:
/* 00 */ GameModeLinkListNode *mNext;
/* 04 */ GameModeLinkListNode *mPrev;
/* 08 */
GameModeLinkListNode();
~GameModeLinkListNode();
GameModeLinkListNode *GetNode() {
GameModeLinkListNode *node = (GameModeLinkListNode *) this;
if (node != NULL) {
node = (GameModeLinkListNode *) ((u32 *) node + 1);
}
return node;
}
GameModeLinkListNode *GetNext() {
GameModeLinkListNode *next = mNext;
if (next != NULL) {
next = (GameModeLinkListNode *) ((u32 *) next - 1);
}
return next;
}
GameModeLinkListNode *GetNext3() {
GameModeLinkListNode *next = this;
if (next != NULL) {
next = (GameModeLinkListNode *) ((u32 *) next - 1);
}
return next;
}
GameModeLinkListNode *GetUnk() {
GameModeLinkListNode *prev = (GameModeLinkListNode *) *((u32 *) this + 2);
if (prev != NULL) {
prev = (GameModeLinkListNode *) ((u32 *) prev - 1);
}
return prev;
}
GameModeLinkListNode *GetUnk2() {
GameModeLinkListNode *prev = (GameModeLinkListNode *) *((u32 *) this + 1);
if (prev != NULL) {
prev = (GameModeLinkListNode *) ((u32 *) prev - 1);
}
return prev;
}
GameModeLinkListNode *GetPrev() {
GameModeLinkListNode *prev = mPrev;
if (prev != NULL) {
prev = (GameModeLinkListNode *) ((u32 *) prev - 1);
}
return prev;
}
template <typename T> T *GetTarget() {
return (T *) this;
}
void func_020166cc(GameModeLinkListNode *param1);
void func_020166f4(GameModeLinkListNode *param1);
unk32 func_0201673c();
static void func_020166ac(GameModeLinkListNode *param1);
};
template <typename T> class GameModeLinkList : public GameModeLinkListNode {
public:
GameModeLinkList *GetNext2() {
GameModeLinkListNode *next = (GameModeLinkListNode *) *((u8 **) this + 2);
if (next != NULL) {
next = (GameModeLinkListNode *) ((u32 *) next - 1);
}
return (GameModeLinkList *) next;
}
GameModeLinkList *GetNextList() {
return (GameModeLinkList *) this->GetNext();
}
GameModeLinkList *GetPrevList() {
return (GameModeLinkList *) this->GetPrev();
}
T *GetTarget() {
return (T *) this;
}
};
class GameModeManagerBase_104_0C : public SysObject {
public:
GameModeLinkList<GameModeManagerBase_104_0C> mList;
GameModeLinkList<GameModeManagerBase_104_0C> *GetOrigin() {
return (GameModeLinkList<GameModeManagerBase_104_0C> *) this;
}
GameModeLinkListNode *GetUnk3() {
GameModeLinkListNode *prev = (GameModeLinkListNode *) *((u32 *) this - 1);
if (prev != NULL) {
prev = (GameModeLinkListNode *) ((u32 *) prev - 1);
}
return prev;
}
/* 00 (vtable) */
/* 04 (base) */
/* 0C */
// data_ov000_020b1e48 vtable
/* 00 */ virtual ~GameModeManagerBase_104_0C();
@@ -150,38 +52,20 @@ public:
/* 0C */ virtual void vfunc_0C(void *param1);
};
class GameModeManagerBase_104_00 : public SysObject {
public:
GameModeManagerBase_104_00() {}
/* 04 */ GameModeLinkList<GameModeManagerBase_104> mList;
/* 0C */ GameModeManagerBase_104_0C mUnk_0C;
};
class AdventureModeManager_160_14;
class AdventureModeManager_160_18;
class AdventureModeManager_1B8;
class GameModeManagerBase_104 : public GameModeManagerBase_104_00 {
class GameModeManagerBase_104 : public LinkList<GameModeManagerBase_104> {
public:
/* 00 (vtable) */
/* 04 (base) */
/* 0C */ GameModeManagerBase_104_0C mUnk_0C;
/* 18 */ bool mUnk_18;
/* 19 */ bool mUnk_19;
/* 1A */ bool mUnk_1A;
/* 1C */
GameModeLinkList<GameModeManagerBase_104> *GetOrigin() {
return (GameModeLinkList<GameModeManagerBase_104> *) this;
}
GameModeLinkListNode *GetNode() {
GameModeLinkListNode *node = (GameModeLinkListNode *) this;
if (node != NULL) {
node = (GameModeLinkListNode *) ((u32 *) node + 1);
}
return node;
}
GameModeManagerBase_104();
// data_ov000_020b1e60 vtable
@@ -226,6 +110,10 @@ public:
/* 150 */ unk8 mUnk_153;
/* 154 */
BOOL IsUnk150() {
return this->mUnk_150;
}
GameModeManagerBase(unk32 param1);
void func_02018550(void);
void func_02018554(void);
@@ -242,12 +130,12 @@ public:
void func_02018a14(unk8 *param1);
void func_02018a8c(void);
void func_02018a9c(unk32 param1, unk32 param2);
void func_02018aac(unk32 param1);
void func_02018ac4(void);
void func_02018aac(unk32 param1, bool param2);
void func_02018ac4(unk16 param1);
bool func_02018ad4(void);
bool func_02018af0(GameModeLinkList<GameModeManagerBase_104> *param1);
bool func_02018b54(GameModeLinkList<GameModeManagerBase_104> *param1);
bool func_02018b90(GameModeLinkList<GameModeManagerBase_104> *param1, unk8 *param2);
bool func_02018af0(GameModeManagerBase_104 *param1);
bool func_02018b54(GameModeManagerBase_104 *param1);
bool func_02018b90(GameModeManagerBase_104 *param1, unk8 *param2);
void func_02018bc4(unk32 param1);
// data_02044064 vtable
@@ -261,7 +149,7 @@ public:
/* 20 */ virtual void vfunc_20();
/* 24 */ virtual void vfunc_24();
/* 28 */ virtual void vfunc_28(unk8 *param1);
/* 2C */ virtual void vfunc_2C(unk8 *param1);
/* 2C */ virtual void DrawUI(unk8 *param1);
/* 30 */ virtual void vfunc_30(unk32 param1);
/* 34 */ virtual void vfunc_34(unk32 param1, unk32 param2);
+8
View File
@@ -77,6 +77,14 @@ public:
/* 24 */ unk8 mUnk_27;
/* 28 */
u8 GetTearsAmount() const {
return this->mTearsAmount;
}
u8 GetKeyAmount() const {
return this->mKeyAmount;
}
ItemManager();
~ItemManager();
+201
View File
@@ -0,0 +1,201 @@
#pragma once
#include "types.h"
//! TODO: inlines in the class
#define GetLinkListRef(l) (&l)
#define GetLinkListOrigin(l) GetLinkListRef(l)
class LinkListNode {
private:
/* 00 */ LinkListNode *mpNext;
/* 04 */ LinkListNode *mpPrev;
/* 08 */
public:
LinkListNode *GetNext() {
return this->mpNext;
}
LinkListNode *GetPrev() {
return this->mpPrev;
}
void SetNext(LinkListNode *pNext) {
this->mpNext = pNext;
}
void SetPrev(LinkListNode *pPrev) {
this->mpPrev = pPrev;
}
};
class LinkListIterImpl {
private:
LinkListNode *mPointer;
public:
LinkListIterImpl(LinkListNode *pNode) {
this->mPointer = pNode;
}
LinkListNode *operator->() {
return this->mPointer;
}
LinkListNode &operator*() {
return *this->mPointer;
}
LinkListIterImpl &operator++() {
this->mPointer = (LinkListNode *) ((u8 *) this->mPointer + 4);
return *this;
}
LinkListIterImpl &operator++(int) {
this->mPointer = this->mPointer->GetNext();
return *this;
}
LinkListIterImpl &operator--(int) {
this->mPointer = mPointer->GetPrev();
return *this;
}
friend bool operator==(LinkListIterImpl &left, LinkListNode *right) {
return left.mPointer == right;
}
friend bool operator!=(LinkListIterImpl &left, LinkListNode *right) {
return left.mPointer != right;
}
};
class LinkListImpl : public LinkListNode {
public:
/* 00 (base) */
/* 08 */
public:
LinkListImpl();
~LinkListImpl();
LinkListNode *GetOriginNode() {
return (LinkListNode *) this;
}
LinkListNode *GetBeginIterImpl() {
return this->GetNext();
}
LinkListNode *GetEndIterImpl() {
return this;
}
// insert B (`node`) between A (`this`) and C (`this->mNext`)
void Append(LinkListNode *node);
// insert B (`node`) between A (`this->mPrev`) and C (`this`)
void Prepend(LinkListNode *node);
// links list `node` to list `this` (append)
void Extend(LinkListNode *node);
// returns the number of how many nodes are following `this`
s32 GetListLength();
// search through the list to determine if the node is inside it
bool Contains(LinkListNode *node);
static void Detach(LinkListNode *pNode);
};
#define GetBeginIter(l) (GetLinkListRef(l)->GetNextTarget())
#define GetBeginIterReverse(l) (GetLinkListRef(l)->GetPrevTarget())
#define GetEndIter(l) GetLinkListRef(l)
#define GetNextIter(it) (it = it->GetNextTarget())
#define GetPrevIter(it) (it = it->GetPrevTarget())
template <typename T> class LinkListIter {
private:
T *mPointer;
public:
LinkListIter() {}
LinkListIter(T *pNode) {
this->mPointer = pNode;
}
T *operator->() const {
return this->mPointer;
}
T &operator*() const {
return *this->mPointer;
}
void operator++() {
this->mPointer = (T *) ((u8 *) this->mPointer + 4);
}
void operator++(int) {
this->mPointer = this->mPointer->GetNextTarget();
}
void operator--(int) {
this->mPointer = mPointer->GetPrevTarget();
}
friend const bool operator==(LinkListIter &left, T *right) {
return left.mPointer == right;
}
friend const bool operator!=(LinkListIter &left, T *right) {
return left.mPointer != right;
}
friend const bool operator==(LinkListIter &left, T &right) {
return left.mPointer == &right;
}
friend const bool operator!=(LinkListIter &left, T &right) {
return left.mPointer != &right;
}
};
template <typename T> class LinkList : public LinkListImpl {
private:
/* 00 (base) */
/* 08 */
public:
LinkList() {}
~LinkList() {}
LinkListNode *GetNextNode() {
return this->GetNext();
}
LinkListNode *GetPrevNode() {
return this->GetPrev();
}
T *GetNextTarget() {
return (T *) this->GetNextNode();
}
T *GetPrevTarget() {
return (T *) this->GetPrevNode();
}
T *GetRef() {
return (T *) this;
}
void Detach() {
LinkListImpl::Detach(this);
}
typedef LinkListIter<T> Iterator;
};
+8 -14
View File
@@ -115,10 +115,10 @@ public:
void func_ov000_02066218(unk32 param1);
};
class AdventureModeManager_160_18 {
class AdventureModeManager_160_18 : public LinkList<AdventureModeManager_160_18> {
public:
/* 00 (vtable) */
/* 04 */
/* 04 (base) */
/* 00 */ virtual void vfunc_00();
/* 04 */ virtual void vfunc_04();
@@ -695,7 +695,8 @@ public:
class AdventureModeManager_1A0 : public AdventureModeManager_174_Base {
public:
/* 00 (base) */
/* 0C */ STRUCT_PAD(0x0C, 0xBC);
/* B8 */ unk32 mUnk_B8;
/* BC */
AdventureModeManager_1A0(GameModeManagerBase_104 *param1); // overlay 62
@@ -712,7 +713,8 @@ public:
class AdventureModeManager_1A4 : public AdventureModeManager_174_Base {
public:
/* 00 (base) */
/* 0C */ STRUCT_PAD(0x0C, 0xBC);
/* B8 */ unk32 mUnk_B8;
/* BC */
AdventureModeManager_1A4(GameModeManagerBase_104 *param1); // overlay 62
@@ -762,14 +764,6 @@ public:
/* 34 */ STRUCT_PAD(0x34, 0x50);
/* 50 */
GameModeLinkListNode *GetNode() {
GameModeLinkListNode *node = (GameModeLinkListNode *) this;
if (node != NULL) {
node = (GameModeLinkListNode *) ((u32 *) node + 1);
}
return node;
}
AdventureModeManager_1B0(); // overlay 31
void func_ov031_0210fad0();
@@ -957,7 +951,7 @@ public:
/* 20 */ virtual void vfunc_20() override;
/* 24 */ virtual void vfunc_24() override;
/* 28 */ virtual void vfunc_28(unk8 *param1) override;
/* 2C */ virtual void vfunc_2C(unk8 *param1) override;
/* 2C */ virtual void DrawUI(unk8 *param1) override;
/* 34 */ virtual void vfunc_34(unk32 param1, unk32 param2) override;
/* 38 */ virtual void vfunc_38(u32 param1, u8 param2, unk16 param3, unk16 param4) override;
@@ -991,7 +985,7 @@ public:
bool func_ov024_020c6940(unk32 param1, unk32 param2);
unk32 func_ov024_020c69d0();
unk32 func_ov024_020c6a20();
void func_ov024_020c6a48(unk32 param1, unk32 param2);
void func_ov024_020c6a48(unk32 param1, bool param2);
bool func_ov024_020c6af4(unk32 param1);
void func_ov024_020c6b8c();
void func_ov024_020c6c60();
+18 -1
View File
@@ -2,6 +2,7 @@
#include "types.h"
typedef s32 CargoType;
enum CargoType_ {
CargoType_None = -1,
CargoType_MegaIce,
@@ -16,7 +17,7 @@ enum CargoType_ {
class Cargo {
public:
/* 00 */ unk32 mType;
/* 00 */ CargoType mType;
/* 04 */ unk32 mAmount;
/* 08 */ u32 mDecayTimer;
/* 0C */
@@ -36,6 +37,18 @@ public:
this->mAmount = 0;
this->mDecayTimer = 0;
}
CargoType GetType() {
return this->mType;
}
bool IsTypeSet() {
return this->mType != CargoType_None;
}
unk32 GetAmount() {
return this->mAmount;
}
};
class CargoManager : public AutoInstance<CargoManager> {
@@ -46,6 +59,10 @@ public:
/* 1C */ bool mUnk_1C;
/* 20 */
Cargo *GetCargo() {
return &this->mCargo;
}
// overlay 1
CargoManager();
~CargoManager();
+15 -7
View File
@@ -3,19 +3,27 @@
#include "Unknown/Common.hpp"
#include "types.h"
#include <nitro/math.h>
struct UnkAdventureModeSystem1_48 {
/* 00 */ STRUCT_PAD(0x00, 0x2A);
/* 2A */ bool mUnk_2A;
};
class UnkAdventureModeSystem1 {
public:
/* 00 (vtable) */
/* 04 */ UnkSystem2_UnkSubSystem9 mUnk_04;
/* 48 */
/* 48 */ UnkAdventureModeSystem1_48 *mUnk_48;
/* 4A */
UnkAdventureModeSystem1(unk16 *param1, unk16 *param2, unk32 param3);
UnkAdventureModeSystem1(unk32 param3);
UnkAdventureModeSystem1(Vec2s *param1, Vec2s *param2, bool param3);
UnkAdventureModeSystem1(bool param3);
// data_ov024_020d7f7c
/* 00 */ virtual void vfunc_00() = 0;
/* 00 */ virtual unk32 vfunc_00(unk32 param1) = 0;
void func_ov024_020cab58();
void func_ov024_020caba4();
void func_ov024_020cad7c();
void func_ov024_020cab58(Vec2s *param1, Vec2s *param2);
bool func_ov024_020caba4(unk32 param1);
bool func_ov024_020cad7c(unk32 param1);
};
+3 -2
View File
@@ -12,6 +12,7 @@
((u32) (pGroups)->entries[(flags) >> 0x10].pDAT1 + (BMG_GET_MSG_OFFSET((pGroups), (flags)) & ~1))
#define BMG_ID(group, infIndex) (((group) << 16) | (infIndex))
#define BMG_ID_NONE 0
enum BMGGroup_ {
BMGGroup_regular = 0x00,
@@ -89,8 +90,8 @@ struct EntryINF1 {
/* 00 */ u32 offset; // relative to the end of the DAT1 header
/* 04 */ u8 mUnk_04; // flags/attributes? (+0x04 to +0x06)
/* 05 */ u8 mUnk_05;
/* 06 */ u8 mUnk_06;
/* 07 */ u8 mUnk_07;
/* 06 */ u8 fontIndex; // see FontIndex enum
/* 07 */ s8 mUnk_07;
/* 08 */
};
+34 -1
View File
@@ -188,6 +188,38 @@ enum MsgIndex_ {
MsgIndex_ValleySanctuary,
MsgIndex_DuneSanctuary,
MsgIndex_BridgeWorkersHouse,
#if IS_JP
//! TODO: add the indices from the other files so we can improve this
// BMGGroup_dungeon
MsgIndex_BossStagnox = 0x90,
MsgIndex_BossFraaz,
MsgIndex_BossCactops,
MsgIndex_BossVulcano,
MsgIndex_BossCapbone,
// BMGGroup_train_extra
MsgIndex_BossGhostTrain = 0x1A,
// BMGGroup_dungeon
MsgIndex_BossStaven = 0x95,
MsgIndex_BossMalladus1,
MsgIndex_BossMalladus2,
MsgIndex_GoronTargetRange = 0xB2,
MsgIndex_SnowdriftStation,
MsgIndex_LostAtSeaStation,
MsgIndex_DisorientationStation,
MsgIndex_EndsOfTheEarthStation,
MsgIndex_DarkOreMine,
MsgIndex_RabbitHaven,
MsgIndex_SlipperyStation,
MsgIndex_ThreeQuestionMarks,
MsgIndex_Floor1,
MsgIndex_Floor2,
MsgIndex_Floor3,
MsgIndex_ZeldaPhantomTooFar,
#else
MsgIndex_BossStagnox,
MsgIndex_BossFraaz,
MsgIndex_BossCactops,
@@ -202,7 +234,7 @@ enum MsgIndex_ {
MsgIndex_LostAtSeaStation,
MsgIndex_DisorientationStation,
MsgIndex_EndsOfTheEarthStation,
MsgIndex_DarOreMine,
MsgIndex_DarkOreMine,
MsgIndex_RabbitHaven,
MsgIndex_SlipperyStation,
MsgIndex_ThreeQuestionMarks,
@@ -210,4 +242,5 @@ enum MsgIndex_ {
MsgIndex_Floor2,
MsgIndex_Floor3,
MsgIndex_ZeldaPhantomTooFar,
#endif
};
+2 -14
View File
@@ -24,7 +24,7 @@ enum TitleScreenState_ {
TitleScreenState_Max = 6
};
class TitleScreen_Sub2 : public GameModeLinkListNode {
class TitleScreen_Sub2 : public LinkList<TitleScreen_Sub2> {
public:
/* 00 (vtable) */
/* 0C */ unk32 mUnk_0C;
@@ -37,10 +37,6 @@ public:
mUnk_0C(0),
mUnk_10(false) {}
GameModeLinkListNode *GetNode() {
return this;
}
// data_ov025_020c5b24 vtable
/* 00 */ virtual void vfunc_00();
};
@@ -92,14 +88,6 @@ public:
/* 344 */ unk32 mUnk_344;
/* 348 */
GameModeLinkListNode *GetNode() {
GameModeLinkListNode *node = (GameModeLinkListNode *) this;
if (this != NULL) {
node = (GameModeLinkListNode *) ((u32 *) node + 1);
}
return node;
}
TitleScreen();
void func_ov025_020c4e54();
@@ -148,7 +136,7 @@ public:
/* 18 */ virtual void vfunc_18() override;
/* 24 */ virtual void vfunc_24() override;
/* 28 */ virtual void vfunc_28(unk8 *param1) override;
/* 2C */ virtual void vfunc_2C(unk8 *param1) override;
/* 2C */ virtual void DrawUI(unk8 *param1) override;
/* 38 */ virtual void vfunc_38(u32 param1, u8 param2, unk16 param3, unk16 param4) override;
static TitleScreenManager *Create(unk32 param1);
+195 -45
View File
@@ -3,12 +3,15 @@
#include "Game/GameModeManager.hpp"
#include "System/SysNew.hpp"
#include "Unknown/UnkFileSystem.hpp"
#include "Unknown/UnkMemFuncs.h"
#include "global.h"
#include "math.hpp"
#include "profile.hpp"
#include "types.h"
#include <nns/text.h>
class UnkDataStruct2;
extern "C" void func_0201e8d4(void *param1, void *param2);
//! TODO: make this work with templates?
@@ -120,6 +123,35 @@ public:
/* 1C */ unk32 mUnk_1C;
/* 20 */
void UnkOperations1() {
this->mUnk_0A = true;
this->mUnk_0B = false;
this->mUnk_0C = false;
if (this->mUnk_04 == this->mUnk_06) {
this->mUnk_0A = false;
this->mUnk_0C = true;
}
}
void UnkOperations2() {
this->mUnk_0A = false;
this->mUnk_0B = true;
this->mUnk_0C = false;
if (this->mUnk_04 == 0) {
this->mUnk_0B = false;
this->mUnk_0C = true;
}
}
void UnkOperations3() {
this->mUnk_04 = 0;
this->mUnk_0A = false;
this->mUnk_0B = false;
this->mUnk_0C = true;
}
UnkSubStruct1_Base();
// data_02044330 vtable
@@ -181,14 +213,25 @@ public:
struct UnkStruct_ov019_020d24c8_28_258_00 {
/* 00 */ void *mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 08 */
UnkStruct_ov019_020d24c8_28_258_00() {
this->mUnk_00 = NULL;
this->mUnk_04 = 0;
}
UnkStruct_ov019_020d24c8_28_258_00() {}
UnkStruct_ov019_020d24c8_28_258_00(void *param1, unk32 param2) :
mUnk_00(param1),
mUnk_04(param2) {}
void func_ov000_0205fc20(unk32 param1, unk32 param2, void *param3, void *param4);
};
struct UnkStruct_ov019_020d24c8_28_258_00_Derived1 : public UnkStruct_ov019_020d24c8_28_258_00 {
/* 00 (base) */
/* 08 */ unk32 mUnk_08;
/* 0C */
};
class UnkStruct_ov019_020d24c8_28_258 : public UnkStruct_ov019_020d24c8_28_258_00 {
public:
/* 08 */ unk16 mUnk_08;
@@ -196,26 +239,22 @@ public:
Vec2s mPos;
Vec2us mPosU;
};
/* 0E */ s16 mUnk_0E;
/* 10 */ unk16 mUnk_10;
/* 0E */ Vec2s mUnk_0E;
/* 12 */ unk16 mUnk_12;
/* 14 */ unk16 mUnk_14;
/* 16 */ unk16 mUnk_16;
/* 18 */
UnkStruct_ov019_020d24c8_28_258() {
this->mUnk_00 = NULL;
this->mUnk_04 = 0;
this->mPos.x = 0;
this->mPos.y = 0;
this->mPos.x = 0;
this->mPos.y = 0;
};
UnkStruct_ov019_020d24c8_28_258(unk32 param1, unk32 param2) :
UnkStruct_ov019_020d24c8_28_258_00(NULL, 0) {
UnkStruct_ov019_020d24c8_28_258(s16 param1, unk32 param2) {
this->UnknownAction(param1, param2);
}
void UnknownAction(unk32 param1, unk32 param2) {
void UnknownAction(s16 param1, unk32 param2) {
this->func_ov000_0205fc20(param1, param2, &this->mPos, &this->mUnk_0E);
this->mUnk_12 = param1;
this->mUnk_14 = param2;
@@ -223,9 +262,15 @@ public:
};
#define BTN_ID_NONE -1
#define BTN_ID_UNK_00 0x00
#define BTN_ID_ITEM 0x03
#define BTN_ID_RETURN 0x05
#define BTN_ID_UNK_08 0x08
#define BTN_ID_UNK_0C 0x0C
#define BTN_ID_TRAIN_ROUTE_GO 0x0E
#define BTN_ID_TRAIN_ROUTE_CANCEL 0x0F
#define BTN_ID_TRAIN_ROUTE_QUIT 0x10
@@ -256,6 +301,8 @@ public:
#define BTN_ID_MENU_PAN_FLUTE 0x3C
#define BTN_ID_MENU_CLOSE_TOP 0x3D
#define BTN_ID_FILE_SELECT_UNK_0F 0x0F
#define BTN_ID_FILE_SELECT_UNK_14 0x14
#define BTN_ID_FILE_SELECT_FILE_1 0x40
#define BTN_ID_FILE_SELECT_FILE_2 0x41
#define BTN_ID_FILE_SELECT_42 0x42 // unused file 3 probably
@@ -413,7 +460,7 @@ public:
#define BTN_ID_BATTLE_MENU_JOIN_GROUP 0xBB
#define BTN_ID_BATTLE_MENU_PLAYER_LIST 0xBD
class UnkSystem2_UnkSubSystem1_Base : public GameModeLinkList<UnkSystem2_UnkSubSystem1_Base> {
class UnkSystem2_UnkSubSystem1_Base : public LinkList<UnkSystem2_UnkSubSystem1_Base> {
public:
/* 00 (vtable) */
/* 0C */ void *mUnk_0C;
@@ -538,25 +585,33 @@ public:
class UnkSystem2_UnkSubSystem5_Base_10 {
public:
/* 000 (vtable) */
/* 014 */ void *mUnk_014;
/* 018 */ unk32 mUnk_018;
/* 01C */ void *mUnk_01C;
/* 020 */ unk32 mUnk_020;
/* 024 */ unk32 mUnk_024;
/* 028 */ unk8 mUnk_028;
/* 029 */ unk8 mUnk_029;
/* 02A */ unk8 mUnk_02A;
/* 02B */ unk8 mUnk_02B;
/* 02C */ unk32 mUnk_02C;
/* 030 */ unk32 mUnk_030;
/* 034 */ unk32 mUnk_034;
/* 038 */ unk32 mUnk_038;
/* 03C */ unk32 mUnk_03C;
/* 040 */ unk32 mUnk_040;
/* 044 */ unk32 mUnk_044;
/* 048 */ unk32 mUnk_048;
/* 04C */ unk32 mUnk_04C;
/* 050 */ STRUCT_PAD(0x50, 0x130); // e0
/* 014 */ void *mUnk_004;
/* 018 */ unk32 mUnk_008;
/* 01C */ void *mUnk_00C;
/* 020 */ unk32 mUnk_010;
/* 024 */ unk16 mUnk_014;
/* 026 */ u16 mUnk_016;
/* 028 */ unk8 mUnk_018;
/* 029 */ unk8 mUnk_019;
/* 02A */ unk8 mUnk_01A;
/* 02B */ unk8 mUnk_01B;
/* 02C */ unk32 mUnk_01C;
/* 030 */ unk32 mUnk_020;
/* 034 */ unk32 mUnk_024;
/* 038 */ unk32 mUnk_028;
/* 03C */ unk32 mUnk_02C;
/* 040 */ unk32 mUnk_030;
/* 044 */ unk32 mUnk_034;
/* 048 */ unk32 mUnk_038;
/* 04C */ unk32 mUnk_03C;
/* 050 */ unk32 mUnk_040;
/* 054 */ unk32 mUnk_044;
/* 058 */ unk32 mUnk_048;
/* 05C */ unk32 mUnk_04C;
/* 060 */ unk32 mUnk_050;
/* 064 */ unk32 mUnk_054;
/* 068 */ STRUCT_PAD(0x58, 0x130);
/* 130 */
UnkSystem2_UnkSubSystem5_Base_10();
@@ -565,7 +620,7 @@ public:
/* 08 */ virtual void vfunc_08();
/* 0C */ virtual void vfunc_0C();
/* 10 */ virtual void vfunc_10(void *param1);
/* 14 */ virtual void vfunc_14();
/* 14 */ virtual void vfunc_14(unk32 param1);
/* 18 */ virtual void vfunc_18();
/* 1C */ virtual void vfunc_1C();
/* 20 */ virtual void vfunc_20();
@@ -580,10 +635,19 @@ public:
/* 44 */ virtual void vfunc_44();
/* 48 */ virtual void vfunc_48();
/* 4C */
unk32 func_ov000_020691e0(void *param1);
void func_ov000_02068798(Vec2s *param1);
void func_ov000_02068798(void *, void *);
};
struct Font_UnkStruct1;
struct UnkSystem2_UnkSubSystem11_Base_1C {
u8 pad[0x10];
/* 00 */ unk32 mUnk_00;
/* 04 */ Font_UnkStruct1 *mUnk_04;
/* 08 */ unk32 mUnk_08;
/* 0C */ unk32 mUnk_0C;
/* 10 */
};
class UnkSystem2_UnkSubSystem11_Base {
@@ -591,7 +655,9 @@ public:
/* 00 (vtable) */
/* 04 */ Text_UnkStruct2 mUnk_04;
/* 1C */ UnkSystem2_UnkSubSystem11_Base_1C mUnk_1C; // +0x24: space between characters, set from BMG INF1 entry
/* 2C */
/* 2C */ s16 mUnk_2C;
/* 2E */ unk16 mUnk_2E; // pad?
/* 30 */
UnkSystem2_UnkSubSystem11_Base(); // func_ov000_02061ce0
@@ -600,23 +666,48 @@ public:
/* 04 */ virtual void vfunc_04();
/* 08 */ virtual void vfunc_08();
/* 0C */ virtual void vfunc_0C();
void func_ov000_02061d38();
void func_ov000_02061d88();
unk32 func_ov000_02061da8();
unk32 func_ov000_02061db8();
};
class UnkSystem2_UnkSubSystem11 : public UnkSystem2_UnkSubSystem11_Base {
class UnkSystem2_UnkSubSystem11_Derived1 : public UnkSystem2_UnkSubSystem11_Base {
public:
/* 00 (base) */
/* 2C */ STRUCT_PAD(0x2C, 0xE8);
/* E8 */
/* 30 */ STRUCT_PAD(0x30, 0xC0);
/* C0 */
UnkSystem2_UnkSubSystem11(); // func_ov000_02061f30
~UnkSystem2_UnkSubSystem11();
void func_ov000_02061f60();
UnkSystem2_UnkSubSystem11_Derived1(); // func_ov000_02061f30
~UnkSystem2_UnkSubSystem11_Derived1();
// data_ov000_020b1e9c vtable
/* 00 */ virtual void vfunc_00() override;
/* 04 */ virtual void vfunc_04() override;
/* 08 */ virtual void vfunc_08() override;
/* 0C */ virtual void vfunc_0C() override;
void func_ov000_02061f8c();
void func_ov000_02062144();
void func_ov000_0206216c(Vec2s *param1, unk32 param2, unk32 param3);
void func_ov000_02062228();
void func_ov000_02062838(void *param1);
};
class UnkSystem2_UnkSubSystem11_Derived2 : public UnkSystem2_UnkSubSystem11_Derived1 {
public:
/* 00 (base) */
/* C0 */ STRUCT_PAD(0xC0, 0xE0);
/* E0 */
UnkSystem2_UnkSubSystem11_Derived2() {}
~UnkSystem2_UnkSubSystem11_Derived2() {}
// data_020443a8 (vtable)
void func_ov000_020626e4(void *param1, bool param2, unk32 *param3, void *param4);
void func_ov000_020626e4(void *param1, bool param2, unk32 *param3, unk32 param4, unk32 param5, unk32 param6, unk32 param7);
};
class UnkSystem2_UnkSubSystem5_Base {
@@ -627,7 +718,6 @@ public:
/* 00A */ unk16 mUnk_00A; // UnkSystem2_UnkSubSystem5()'s param2
/* 00C */ void *mUnk_00C;
/* 010 */ UnkSystem2_UnkSubSystem5_Base_10 mUnk_010;
/* 130 */ STRUCT_PAD(0x130, 0x140);
/* 140 */ unk16 mUnk_140;
/* 142 */ unk16 mUnk_142;
/* 144 */ unk16 mUnk_144;
@@ -638,7 +728,7 @@ public:
/* 14E */ unk8 mUnk_14E; // 0x546
/* 14F */ unk8 mUnk_14F; // 0x547
UnkSystem2_UnkSubSystem5_Base(UnkSystem2_UnkSubSystem11 *param1, unk32 param2, unk32 param3); // func_0201f288
UnkSystem2_UnkSubSystem5_Base(UnkSystem2_UnkSubSystem11_Derived2 *param1, unk32 param2, unk32 param3); // func_0201f288
~UnkSystem2_UnkSubSystem5_Base();
/* 00 */ virtual void vfunc_00();
@@ -649,7 +739,9 @@ public:
class UnkSystem2_UnkSubSystem5 : public UnkSystem2_UnkSubSystem5_Base {
public:
/* 000 (base) */
/* 150 */ UnkSystem2_UnkSubSystem11 mUnk_150;
/* 150 */ UnkSystem2_UnkSubSystem11_Derived2 mUnk_150;
/* 230 */ unk32 mUnk_230;
/* 234 */ unk32 mUnk_234;
/* 238 */
UnkSystem2_UnkSubSystem5(unk32 param1, unk32 param2);
@@ -717,7 +809,7 @@ public:
/* 0C */
//! TODO: conflict with UnkStruct_ov019_020d24c8_28_304
void func_0201e874(unk32 param1, void *param2, void *param3, unk32 param4);
void func_0201e874(unk32 buttonID, void *param2, void *param3, unk32 param4);
};
class UnkSystem2_UnkSubSystem8 : public UnkSystem2_UnkSubSystem8_Base {
@@ -834,15 +926,16 @@ public:
this->func_ov000_0206082c(param1, param2);
}
void func_ov000_0206082c(unk32 param1, unk32 param2);
void func_ov000_0206082c(s16 param1, unk32 param2);
void func_ov000_02060950();
void func_ov000_020609b0();
void func_ov000_020609c4(void);
bool func_ov000_02060a98(unk32 param1);
void func_ov000_02060ad0();
unk32 func_ov000_02060af8(void);
bool func_ov000_02060af8(void);
void func_ov000_02060b50();
void func_ov000_02060b64(void);
void func_ov000_02060bac();
unk32 func_ov000_02060c28(void);
void func_ov000_02060bd8(unk32 param1);
};
@@ -1133,3 +1226,60 @@ public:
bool func_ov024_020c510c();
void func_ov024_020c5120(bool param1);
};
struct UnkDataStruct1 {
/* 00 */ void *mUnk_00;
/* 04 */ u8 mUnk_04;
/* 05 */ unk8 mUnk_05;
/* 06 */ u16 mUnk_06;
/* 08 */
UnkDataStruct1() {}
UnkDataStruct1(u16 param1) {
this->Init();
this->mUnk_06 |= param1;
}
UnkDataStruct1(void *param1, u16 param2) {
this->Init();
this->mUnk_06 |= param2;
this->mUnk_00 = param1;
}
void Init() {
this->mUnk_06 = 0x00;
MI_CpuFill32(0, this, sizeof(UnkDataStruct1));
this->mUnk_05 = -1;
}
void SetUnk04(u8 param1) {
this->mUnk_04 = param1;
}
};
struct UnkDataStruct2 {
/* 00 */ void *unk_00;
/* 04 */
UnkDataStruct2(unk32 param1);
~UnkDataStruct2();
};
struct UnkDataStruct3 {
/* 00 */ UnkDataStruct2 mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 08 */ STRUCT_PAD(0x08, 0xCC);
/* CC */ unk32 mUnk_CC;
/* D0 */ unk32 mUnk_D0;
/* D4 */
UnkDataStruct3(unk32 param1) :
mUnk_00(param1) {}
};
struct InputInformations {
void *unk_00;
void *unk_04;
void *unk_08;
void *unk_0C;
};
+3 -2
View File
@@ -2,6 +2,7 @@
#include "Game/GameMode.hpp"
#include "Game/GameModeManager.hpp"
#include "LinkList.hpp"
#include "System/SysNew.hpp"
#include "Unknown/Common.hpp"
#include "Unknown/UnkStruct_ov000_02067bc4.hpp"
@@ -9,10 +10,10 @@
class GameModeFileSelect;
class UnkStruct_0204a060_Base3 : public SysObject {
class UnkStruct_0204a060_Base3 : public LinkList<UnkStruct_0204a060_Base3> {
public:
/* 00 (vtable) */
/* 04 */ GameModeLinkList<UnkStruct_0204a060_Base3> mUnk_04;
/* 04 (base) */
/* 0C */ bool mUnk_0C;
/* 0D */ unk8 mUnk_0D;
/* 0E */ unk8 mUnk_0E;
+33 -11
View File
@@ -60,6 +60,7 @@ public:
UnkStruct_0204a110_Sub2();
void func_0201c890(unk32 param1, unk32 param2, unk32 param3, unk32 param4, unk32 param5);
void func_0201ca28(unk32 param1);
};
class UnkStruct_0204a110_Sub3_00 {
@@ -131,12 +132,10 @@ public:
void func_0201cf30();
};
class UnkStruct_0204a110_Sub7_08 : public SysObject {
class UnkStruct_0204a110_Sub7_08 : public UnkSubStruct1_Base {
public:
/* 00 (vtable) */
/* 04 */ STRUCT_PAD(0x04, 0x0A);
/* 0A */ bool mUnk_0A;
/* 0B */ STRUCT_PAD(0x0B, 0x30);
/* 0B */ STRUCT_PAD(0x20, 0x30);
/* 30 */
UnkStruct_0204a110_Sub7_08();
@@ -147,14 +146,21 @@ public:
/* 08 */ virtual void vfunc_08();
unk32 func_0201ec30();
void func_0201ebf8(unk32 param1, unk32 param2, unk32 param3, unk32 param4);
void Subprocess1_UnkValueSets() {
this->mUnk_10 = this->mUnk_18;
}
void Subprocess2_UnkValueSets() {
this->mUnk_10 = this->mUnk_14;
}
UnkSubStruct1_Methods;
};
struct UnkStruct_027e0120 {
/* 00 */ unk32 mUnk_00[4];
/* 10 */
};
extern UnkStruct_027e0120 data_027e0120;
//! TODO: actually a matrix
extern Vec4p data_027e0120;
class UnkStruct_0204a110_Sub7 {
public:
@@ -164,7 +170,7 @@ public:
/* 03 */ unk8 mUnk_03;
/* 04 */ UnkSystem2_UnkSubSystem9 *mUnk_04;
/* 08 */ UnkStruct_0204a110_Sub7_08 *mUnk_08;
/* 0C */ UnkStruct_027e0120 mUnk_0C;
/* 0C */ Vec4p mUnk_0C; // same type as data_027e0120?
/* 1C */
UnkStruct_0204a110_Sub7();
@@ -195,6 +201,21 @@ public:
void func_0201e698(void);
};
//! TODO: is this real?
struct UnkStruct_func_02019590 {
s16 a : 12;
s16 b : 12;
union {
unk32 c_raw;
struct {
u16 c_b1 : 8;
u16 c_b2 : 8;
};
};
u16 d : 8;
u16 e : 4;
};
class UnkStruct_0204a110 {
public:
/* 000 */ unk32 mUnk_000;
@@ -261,6 +282,7 @@ public:
unk32 func_02019514();
void func_02019528();
bool func_02019548();
UnkStruct_func_02019590 *func_02019590(unk16 param1, unk32 param2);
void func_ov001_020bd514(unk32 param1, void *param2, unk32 param3, unk32 param4);
void func_ov001_020bd58c(void);
+2 -1
View File
@@ -21,8 +21,9 @@ public:
UnkStruct_0204af1c();
void func_0201a800();
void func_0201aa44(void *param1, void *param2, unk32 param3, void *param4);
void func_0201aa44(UnkStruct_ov019_020d24c8_28_258_00 *param1, void *param2, unk32 param3, void *param4);
void func_0201aad0(UnkSubStruct19 *param1, void *param2, unk32 param3, void *param4);
void func_0201aa8c(UnkStruct_ov019_020d24c8_28_258_00 *param1, unk32 param2, unk32 param3, unk32 param4, unk32 param5);
};
extern UnkStruct_0204af1c data_0204af1c;
+1 -1
View File
@@ -5,7 +5,7 @@
#include "global.h"
#include "types.h"
class UnkStruct_0204e5f8_1C_Base : GameModeLinkListNode {
class UnkStruct_0204e5f8_1C_Base : public LinkList<UnkStruct_0204e5f8_1C_Base> {
public:
/* 00 (base) */
/* 08 */ unk32 mUnk_08;
+267 -19
View File
@@ -2,30 +2,278 @@
#include "Game/GameModeManager.hpp"
#include "Item/Item.hpp"
#include "Unknown/Common.hpp"
#include "iterator.hpp"
#include "types.h"
class UnkStruct_020d8698 : public GameModeManagerBase_104 {
struct UnkStructIterator1 {
/* 00 */ unk32 mUnk_00;
UnkStructIterator1() {
this->mUnk_00 = 0;
}
~UnkStructIterator1() {}
};
typedef Iterator<UnkStructIterator1> UnkIterator1;
class UnkStruct_020d8698_1C {
public:
void func_ov024_020cd094();
void func_ov024_020cd150();
void func_ov024_020cd368(bool param1, bool param2);
void func_ov024_020cd3d0();
void func_ov024_020cd3e0(unk32 param1);
void func_ov024_020cd3f0(unk32 param1);
void func_ov024_020cd410();
void func_ov024_020cd420();
void func_ov024_020cd458(ItemFlag itemFlag, unk32 param2);
void func_ov024_020cd4e4(u16 param1);
bool func_ov024_020cd5c0(u16 param1);
void func_ov024_020cd3a4();
void func_ov024_020cd400();
/* 000 */ UnkIterator1 mUnk_000;
/* 008 */ u8 mUnk_008;
/* 009 */ u8 mUnk_009;
/* 00A */ u8 mUnk_00A;
/* 00B */ unk8 mUnk_00B;
/* 000 */ UnkStruct_ov019_020d24c8_28_258 mUnk_00C;
/* 018 */ UnkSubStruct19 mUnk_024;
/* 090 */ UnkSubStruct19 mUnk_09C;
/* 108 */ UnkSubStruct19 mUnk_114;
/* 180 */ UnkSubStruct19 mUnk_18C;
/* 1F8 */ UnkSubStruct19 mUnk_204;
/* 270 */ UnkSubStruct19 mUnk_27C;
/* 2E8 */ UnkSubStruct19 mUnk_2F4;
/* 360 */ UnkSubStruct19 mUnk_36C;
/* 3E4 */ UnkSubStruct19 mUnk_3E4[2];
/* 4D4 */ u8 mUnk_4D4;
/* 4D5 */ u8 mUnk_4D5;
/* 4D6 */ unk8 mUnk_4D6; // pad?
/* 4D7 */ unk8 mUnk_4D7; // pad?
/* 4D8 */
unk32 GetIterValue(int index) {
return this->mUnk_000.Get(index).mUnk_00;
}
void SetIterValue(u32 index, u32 value) {
this->mUnk_000.Get(index).mUnk_00 = value;
}
UnkStruct_020d8698_1C();
void func_ov024_020cd768();
void func_ov024_020cd774();
void func_ov024_020cd9f0();
void func_ov024_020cdaac();
void func_ov024_020cdd3c(u8 param1, u8 param2);
void func_ov024_020cde54(u8 param1);
void func_ov024_020cdec8();
void func_ov024_020cdfd8();
u8 func_ov024_020ce218();
u8 func_ov024_020ce260();
u32 func_ov024_020ce2a8();
};
class UnkStruct_020d8698_24_5C_Base {
public:
/* 00 */ Vec2s mUnk_00;
/* 04 */ unk16 mUnk_04;
/* 06 */ unk16 mUnk_06;
/* 08 */ UnkStruct_ov019_020d24c8_28_258_00_Derived1 mUnk_08[10];
/* 80 */ unk32 mUnk_80;
/* 84 */ unk32 mUnk_84;
/* 88 */ unk32 mUnk_88;
/* 8C */ unk32 mUnk_8C;
/* 90 */ unk32 mUnk_90;
/* 94 */ unk32 mUnk_94;
/* 98 */
UnkStruct_020d8698_24_5C_Base(unk32 param1, const u16 *param2, u16 param3, unk32 param4);
void func_ov000_02065884();
void func_ov000_0206590c(u16 param1, unk32 param2);
void func_ov000_02065930();
void func_ov000_02065988(u16 param1, const u16 *param2);
void func_ov000_020659d0(unk8 *param1, UnkDataStruct1 *param2);
};
class UnkStruct_020d8698_24_5C : public UnkStruct_020d8698_24_5C_Base {
public:
/* 00 (base) */
/* 98 */ unk32 mUnk_98;
/* 98 */ unk32 mUnk_9C;
/* A0 */
UnkStruct_020d8698_24_5C(unk32 param1, const u16 *param2, u16 param3, unk32 param4);
void func_ov000_02065b48(unk32 param1, unk32 param2);
void func_ov000_02065b8c();
};
class UnkStruct_020d8698_24 {
public:
/* 000 */ UnkStruct_ov019_020d24c8_28_258 mUnk_000;
/* 018 */ UnkSystem2_UnkSubSystem9 mUnk_018;
/* 05C */ UnkStruct_020d8698_24_5C mUnk_05C;
/* 0FC */ Vec2s mUnk_0FC;
/* 100 */ unk32 mUnk_100;
/* 104 */ bool mUnk_104;
/* 105 */ bool mUnk_105;
/* 106 */ Vec2s mUnk_106;
/* 10C */
UnkStruct_020d8698_24();
void func_ov024_020ce518();
void func_ov024_020ce570();
void func_ov024_020ce5cc();
void func_ov024_020ce88c(unk8 *param1);
void func_ov024_020ce990(bool param1, bool param2);
void func_ov024_020ce9ac();
};
class UnkStruct_020d8698_2C_198 {
public:
/* 00 */ STRUCT_PAD(0x00, 0x80);
/* 80 */
};
class UnkStruct_020d8698_2C_14C {
public:
/* 00 */ wchar_t mUnk_00[31]; // path to a ncgr file
/* 40 */ unk32 mUnk_40;
/* 44 */ unk32 mUnk_44;
/* 48 */ unk32 mUnk_48;
/* 4C */
UnkStruct_020d8698_2C_14C();
void func_ov000_02060c50(const wchar_t *path, UnkStruct_020d8698_2C_198 *param2, unk32 param3,
UnkStruct_ov019_020d24c8_28_258_00 *param4); // is param3 sizeof(param2)?
void func_ov000_02060c7c(unk32 param1);
void func_ov000_02060d7c(unk32 param1, u16 param2);
void func_ov000_02060db8(u16 param1);
void func_ov000_02060e3c(unk32 param1, const char *filename, wchar_t *param3);
};
class UnkStruct_020d8698_2C {
public:
/* 000 */ unk32 mUnk_000;
/* 004 */ UnkStruct_ov019_020d24c8_28_258 mUnk_004;
/* 01C */ UnkStruct_ov019_020d24c8_28_258 mUnk_01C;
/* 034 */ UnkStruct_ov019_020d24c8_28_258 mUnk_034;
/* 04C */ UnkSystem2_UnkSubSystem9 mUnk_04C;
/* 090 */ UnkStruct_020d8698_24_5C mUnk_090;
/* 130 */ Vec2s mUnk_130;
/* 134 */ Vec2s mUnk_134;
/* 138 */ Vec2s mUnk_138;
/* 13C */ unk32 mUnk_13C;
/* 140 */ bool mUnk_140;
/* 141 */ bool mUnk_141;
/* 142 */ bool mUnk_142;
/* 143 */ bool mUnk_143;
/* 144 */ unk16 mUnk_144;
/* 144 */ bool mUnk_146;
/* 148 */ unk16 mUnk_148;
/* 14A */ unk16 mUnk_14A;
/* 14C */ UnkStruct_020d8698_2C_14C mUnk_14C;
/* 198 */ UnkStruct_020d8698_2C_198 mUnk_198;
/* 218 */ Vec2s mUnk_218;
/* 21C */
UnkStruct_020d8698_2C();
void func_ov024_020ced54();
void func_ov024_020ceda8();
void func_ov024_020cee58();
void func_ov024_020cee64();
void func_ov024_020cee84();
void func_ov024_020cef58();
void func_ov024_020cf2b8(unk8 *param1);
void func_ov024_020cf494(bool param1);
void func_ov024_020cf4c4();
void func_ov024_020cf514();
void func_ov024_020cf53c(bool param1);
void func_ov024_020cf570();
void func_ov024_020cf584();
void func_ov024_020cf5a8(bool param1);
};
class UnkStruct_020d8698_34 {
public:
/* 00 */ UnkStruct_ov019_020d24c8_28_258 mUnk_00;
/* 18 */ UnkSubStruct19 mUnk_18;
/* 90 */ unk16 mUnk_90;
/* 92 */ unk16 mUnk_92;
/* 94 */
UnkStruct_020d8698_34();
void func_ov024_020cf698();
void func_ov024_020cf6e4();
void func_ov024_020cf724();
};
class UnkStruct_020d8698_3C {
public:
/* 00 */ UnkStruct_ov019_020d24c8_28_258 mUnk_00;
/* 18 */ UnkStruct_ov019_020d24c8_28_258 mUnk_18;
/* 30 */
UnkStruct_020d8698_3C();
void func_ov024_020cf82c();
void func_ov024_020cf888();
void func_ov024_020cf88c();
};
class UnkStruct_020d8698_44 : public LinkList<UnkStruct_020d8698_44> {
public:
/* 008 */ STRUCT_PAD(0x0C, 0x18B);
/* 18B */ bool mUnk_18B;
/* 18C */ STRUCT_PAD(0x18C, 0x52C);
/* 52C */
UnkStruct_020d8698_44(); // overlay 31
/* 00 */ virtual ~UnkStruct_020d8698_44();
/* 08 */
void func_ov031_0210eeb4();
void func_ov031_0210f7e4(ItemFlag itemFlag, bool param2);
void func_ov031_0210f814();
};
class UnkStruct_020d8698 : public GameModeManagerBase_104, AutoInstance<UnkStruct_020d8698> {
public:
/* 000 (base) */
/* 01C */ UnkStruct_020d8698_1C *mUnk_01C;
/* 020 */ bool mUnk_020;
/* 024 */ UnkStruct_020d8698_24 *mUnk_024;
/* 028 */ bool mUnk_028;
/* 02C */ UnkStruct_020d8698_2C *mUnk_02C;
/* 030 */ bool mUnk_030;
/* 034 */ UnkStruct_020d8698_34 *mUnk_034;
/* 038 */ bool mUnk_038;
/* 03C */ UnkStruct_020d8698_3C *mUnk_03C;
/* 040 */ bool mUnk_040;
/* 044 */ UnkStruct_020d8698_44 *mUnk_044;
/* 048 */ bool mUnk_048;
UnkStruct_020d8698();
/* 00 */ virtual ~UnkStruct_020d8698();
/* 08 */ virtual void vfunc_08();
/* 0C */ virtual void vfunc_0C();
/* 10 */ virtual void vfunc_10();
/* 14 */ virtual void vfunc_14();
/* 18 */ virtual void vfunc_18();
/* 08 */ virtual void vfunc_08(Input *pButtons, TouchControl *pTouchControl);
/* 10 */ virtual void vfunc_10(unk8 *param1);
void func_ov024_020cd094();
void func_ov024_020cd150();
void func_ov024_020cd348(u8 param1, u8 param2);
void func_ov024_020cd358(u8 param1);
void func_ov024_020cd368(bool param1, bool param2);
void func_ov024_020cd3a4();
void func_ov024_020cd3d0();
void func_ov024_020cd3e0(bool param1);
void func_ov024_020cd3f0(bool param1);
void func_ov024_020cd400();
void func_ov024_020cd410();
void func_ov024_020cd420();
void func_ov024_020cd458(ItemFlag itemFlag, bool param2);
void func_ov024_020cd4a4(bool param1);
void func_ov024_020cd4e4(u16 param1, bool param2);
bool func_ov024_020cd5c0(u16 param1);
bool func_ov024_020cd604();
static UnkStruct_020d8698 *Create();
};
extern UnkStruct_020d8698 *data_ov024_020d8698;
+1 -1
View File
@@ -11,7 +11,7 @@ public:
/* 08 */ unk32 mUnk_08;
/* 0C */ unk32 mUnk_0C;
/* 10 */ unk32 mUnk_10;
/* 14 */ GameModeLinkListNode mUnk_14;
/* 14 */ LinkListImpl mUnk_14;
UnkStruct_027e0954();
~UnkStruct_027e0954();
+33 -9
View File
@@ -78,7 +78,7 @@ enum SceneIndex_ {
/* 54 */ SceneIndex_f_bridge = 0x36, // Bridge Worker's House
/* 55 */ SceneIndex_f_bridge2 = 0x37, // Trading Post
/* 56 */ SceneIndex_f_forest3 = 0x38, // whittleton forest
/* 57 */ SceneIndex_f_water3 = 0x39, // papuchia south
/* 57 */ SceneIndex_f_water3 = 0x39, // papuchia south and lost at sea station
/* 58 */ SceneIndex_f_ajito = 0x3A, // Pirate Hideout
/* 59 */ SceneIndex_f_ajito2 = 0x3B, // same as above
/* 60 */ SceneIndex_f_flame3 = 0x3C, // Goron Target Range
@@ -147,11 +147,13 @@ enum SceneIndex_ {
struct UnkStruct_func_01ffd400 {
/* 00 */ STRUCT_PAD(0x00, 0x10);
/* 1B */ unk32 mUnk_10;
/* 1B */ unk32 mUnk_14;
/* 1B */ unk8 mUnk_18;
/* 1B */ unk8 mUnk_19;
/* 1B */ unk8 mUnk_1A;
/* 10 */ unk32 mUnk_10;
/* 14 */ unk16 mUnk_14;
/* 16 */ s8 mUnk_16;
/* 17 */ unk8 mUnk_17;
/* 18 */ unk8 mUnk_18;
/* 19 */ unk8 mUnk_19;
/* 1A */ unk8 mUnk_1A;
/* 1B */ u8 mUnk_1B;
};
@@ -269,6 +271,16 @@ public:
return false;
}
bool UnkCheck2() const {
bool result = true;
if (this->func_01ffd400()->mUnk_10 != 1 && this->func_01ffd400()->mUnk_10 != 3) {
result = false;
}
return result;
}
SceneIndex CurrentSceneIndex() {
return this->mUnk_00.mSceneIndex;
}
@@ -277,18 +289,30 @@ public:
return this->mUnk_00.mSceneIndex <= SceneIndex_t_eviltrain3 && this->mUnk_00.mSceneIndex >= SceneIndex_t_eviltrain;
}
bool IsDungeonTower() {
return this->mUnk_00.mSceneIndex == SceneIndex_d_main;
}
bool IsPirate() {
return this->mUnk_00.mSceneIndex == SceneIndex_f_pirate;
}
bool IsWater3() {
return this->mUnk_00.mSceneIndex == SceneIndex_f_water3;
}
bool IsSnowdriftStation() {
return this->mUnk_00.mSceneIndex == SceneIndex_f_kakushi1;
}
bool IsPassenger() {
return this->mUnk_00.mSceneIndex == SceneIndex_f_passenger;
}
~UnkStruct_027e09a4();
bool func_01ffd3d8();
UnkStruct_func_01ffd400 *func_01ffd400();
bool func_01ffd3d8(); // is on train?
UnkStruct_func_01ffd400 *func_01ffd400() const;
unk8 func_ov000_02070bd0(unk32 csIndex, unk32 param2);
UnkStruct_SceneChange1 *func_ov000_02070560();
@@ -302,7 +326,7 @@ public:
unk16 *func_ov000_02070538();
bool func_ov000_02070a9c(UnkStruct_SceneChange1 *param1);
bool func_ov000_02072154(UnkStruct_SceneChange1 *param1, unk32 param2);
void func_ov000_0207056c();
bool func_ov000_0207056c();
void func_ov000_020705e8(SaveFile *param1, unk32 param2);
void func_ov017_020bb994(void *param1);
+5 -2
View File
@@ -109,7 +109,10 @@ public:
class UnkStruct_027e0cd8_04_0C {
public:
/* 00 */ STRUCT_PAD(0x00, 0x50);
/* 00 */ unk32 mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 08 */ s16 mUnk_08;
/* 0C */ STRUCT_PAD(0x0C, 0x50);
/* 50 */
UnkStruct_027e0cd8_04_0C();
@@ -144,7 +147,7 @@ public:
void func_ov000_02081ecc(unk16 param1, unk32 param2);
void func_ov000_02081eec(unk16 param1, unk32 param2, unk32 param3);
bool func_ov000_02081f3c(unk16 param1, unk32 param2);
unk32 func_ov000_02081d5c();
u32 func_ov000_02081d5c(); // returns current room index?
bool func_ov000_02082124();
bool func_ov000_02081c28();
};
+26 -11
View File
@@ -26,14 +26,20 @@ class UnkStruct_ov000_02067bc4 {
public:
class UnkStruct1 {
public:
unk16 mUnk_00;
unk16 mUnk_02;
unk32 mUnk_04;
unk32 mUnk_08;
unk8 mUnk_0C;
unk8 mUnk_0D;
unk8 mUnk_0E;
unk8 mUnk_0F;
union {
struct {
unk16 mUnk_00;
unk16 mUnk_02;
unk32 mUnk_04;
unk32 mUnk_08;
u8 mUnk_0C;
unk8 mUnk_0D;
unk8 mUnk_0E;
unk8 mUnk_0F;
};
u32 data[4];
};
UnkStruct1(unk32 param1, unk32 param2) {
mUnk_00 = 0;
@@ -64,12 +70,14 @@ public:
/* 000 (vtable) */
/* 004 */ unk32 mUnk_004;
/* 008 */ UnkStruct_ov000_02067bc4_Sub2 *mUnk_008;
/* 00C */ STRUCT_PAD(0x0C, 0x160);
/* 00C */ STRUCT_PAD(0x0C, 0x28);
/* 028 */ UnkStruct1 mUnk_028;
/* 038 */ STRUCT_PAD(0x38, 0x160);
/* 160 */ UnkStruct_ov000_02067bc4_Sub1 mUnk_160;
/* 00 */ virtual unk32 vfunc_00();
/* 04 */ virtual unk32 vfunc_04();
/* 08 */ virtual unk32 vfunc_08();
/* 08 */ virtual bool vfunc_08();
void func_02021bec(unk16 param1);
void func_02021c08();
@@ -99,6 +107,7 @@ public:
UnkStruct_ov000_020b504c_Sub3(unk32 param1);
void func_ov000_020676f8(const char *bmgFileName, unk32 param2);
EntryINF1 *func_ov000_02067a2c(u32 msgId);
};
class UnkStruct_ov000_020b504c_Sub4_00 {
@@ -145,7 +154,7 @@ public:
void func_ov000_02067e60(u8 param1, unk32 param2);
unk32 func_ov000_020682c0(unk32 param1);
void func_ov000_02067f5c(unk32 param1);
unk32 func_ov000_02067f88(unk32 param1, unk32 param2);
bool func_ov000_02067f88(unk32 param1, unk32 param2);
UnkStruct_ov000_020b504c_Sub4_00 *func_ov000_02067bf0();
void func_ov000_02067b20();
void func_ov000_02068068(unk32 param1);
@@ -165,3 +174,9 @@ public:
// gMessageManager?
extern UnkStruct_ov000_020b504c data_ov000_020b504c;
struct UnkMsgDataStruct1 {
unk32 mUnk_00;
void func_ov000_02067a60(void *, int);
};
+3 -3
View File
@@ -5,7 +5,7 @@
#include "types.h"
#include <nns/font.h>
enum {
enum FontIndex_ {
FontIndex_DSZ2_msg = 0,
FontIndex_LC_Font_s = 1, // unused?
FontIndex_DSZ2_endL = 2,
@@ -16,9 +16,9 @@ enum {
};
// FontEntry?
class UnkStruct_ov000_020b4f84_00 : public UnkFileSystem5 {
class UnkStruct_ov000_020b4f84_00 {
public:
/* 00 (base) */
/* 00 */ UnkFileSystem5 mUnk_00;
/* 14 */ Font_UnkStruct1 mUnk_14;
/* 1C */ unk16 mUnk_1C;
/* 1E */ unk16 mUnk_1E;
+100 -53
View File
@@ -9,43 +9,69 @@
#include <nitro/button.h>
// Title Card Scene Message Index (see sBMGSceneMap)
typedef s32 TC_SceneMsgIdx;
enum TC_SceneMsgIdx_ {
/* -1 */ TC_SceneMsgIdx_None = -1,
/* 0 */ TC_SceneMsgIdx_ForestLand,
/* 1 */ TC_SceneMsgIdx_SnowLand,
/* 2 */ TC_SceneMsgIdx_OceanLand,
/* 3 */ TC_SceneMsgIdx_FireLand,
/* 4 */ TC_SceneMsgIdx_TowerOfSpirits,
/* 5 */ TC_SceneMsgIdx_TunnelToTheTower,
/* 6 */ TC_SceneMsgIdx_WoodedTemple,
/* 7 */ TC_SceneMsgIdx_BlizzardTemple,
/* 8 */ TC_SceneMsgIdx_MarineTemple,
/* 9 */ TC_SceneMsgIdx_MountainTemple,
/* 10 */ TC_SceneMsgIdx_DesertTemple,
/* 11 */ TC_SceneMsgIdx_PirateHideout,
/* 12 */ TC_SceneMsgIdx_HyruleCastle,
/* 13 */ TC_SceneMsgIdx_CastleTown,
/* 14 */ TC_SceneMsgIdx_Mayscore,
/* 15 */ TC_SceneMsgIdx_AnoukiVillage,
/* 16 */ TC_SceneMsgIdx_PapuziaVillage,
/* 17 */ TC_SceneMsgIdx_GoronVillage,
/* 18 */ TC_SceneMsgIdx_TradingPost,
/* 19 */ TC_SceneMsgIdx_IcySpring,
/* 20 */ TC_SceneMsgIdx_OutsetVillage,
/* 21 */ TC_SceneMsgIdx_WoodlandSanctuary,
/* 22 */ TC_SceneMsgIdx_SnowfallSanctuary,
/* 23 */ TC_SceneMsgIdx_IslandSanctuary,
/* 24 */ TC_SceneMsgIdx_ValleySanctuary,
/* 25 */ TC_SceneMsgIdx_DuneSanctuary,
/* 26 */ TC_SceneMsgIdx_BridgeWorkersHouse,
/* 27 */ TC_SceneMsgIdx_BossStagnox,
/* 28 */ TC_SceneMsgIdx_BossFraaz,
/* 29 */ TC_SceneMsgIdx_BossCactops,
/* 30 */ TC_SceneMsgIdx_BossVulcano,
/* 31 */ TC_SceneMsgIdx_BossCapbone,
/* 32 */ TC_SceneMsgIdx_BossGhostTrain,
/* 33 */ TC_SceneMsgIdx_BossStaven,
/* 34 */ TC_SceneMsgIdx_BossMalladus1,
/* 35 */ TC_SceneMsgIdx_BossMalladus2,
/* 36 */ TC_SceneMsgIdx_GoronTargetRange,
/* 37 */ TC_SceneMsgIdx_SnowdriftStation,
/* 38 */ TC_SceneMsgIdx_LostAtSeaStation,
/* 39 */ TC_SceneMsgIdx_DisorientationStation,
/* 40 */ TC_SceneMsgIdx_EndsOfTheEarthStation,
/* 41 */ TC_SceneMsgIdx_DarkOreMine,
/* 42 */ TC_SceneMsgIdx_RabbitHaven,
/* 43 */ TC_SceneMsgIdx_SlipperyStation,
};
class UnkTitleCardSystem1 {
public:
/* 000 (vtable) */
/* 004 */ unk16 mUnk_004;
/* 006 */ unk16 mUnk_006; // pad?
/* 008 */ unk32 mUnk_008;
/* 00C */ unk32 mUnk_00C;
/* 008 */ UnkSystem2_UnkSubSystem11_Derived2 *mUnk_008;
/* 00C */ UnkSystem2_UnkSubSystem5_Base_10 *mUnk_00C;
/* 010 */ unk32 mUnk_010;
/* 014 */ GameModeManagerBase_004 *mUnk_014;
/* 018 */ unk32 mUnk_018;
/* 01C */ unk32 mUnk_01C;
/* 020 */ unk16 mUnk_020;
/* 022 */ unk16 mUnk_022;
/* 024 */ unk16 mUnk_024;
/* 026 */ unk16 mUnk_026;
/* 028 */ unk32 mUnk_028;
/* 02C */ unk32 mUnk_02C;
/* 030 */ unk16 mUnk_030;
/* 034 */ unk16 mUnk_034;
/* 036 */ unk16 mUnk_036;
/* 038 */ unk16 mUnk_038;
/* 03A */ unk16 mUnk_03A;
/* 03C */ unk16 mUnk_03C;
/* 03E */ unk16 mUnk_03E;
/* 040 */ unk32 mUnk_040;
/* 044 */ unk32 mUnk_044;
/* 048 */ unk16 mUnk_048;
/* 04A */ unk16 mUnk_04A;
/* 04C */ unk16 mUnk_04C;
/* 04E */ unk16 mUnk_04E;
/* 050 */ unk16 mUnk_050;
/* 052 */ unk16 mUnk_052;
/* 054 */ unk16 mUnk_054;
/* 056 */ unk16 mUnk_056;
/* 058 */ unk32 mUnk_058;
/* 05C */ unk32 mUnk_05C;
/* 060 */ unk32 mUnk_060;
/* 018 */ UnkStruct_ov019_020d24c8_28_258 mUnk_018;
/* 030 */ UnkStruct_ov019_020d24c8_28_258 mUnk_030;
/* 048 */ UnkStruct_ov019_020d24c8_28_258 mUnk_048;
/* 060 */ Vec2s mUnk_060;
/* 064 */ UnkSystem2_UnkSubSystem9 mUnk_064;
/* 0A8 */ UnkSystem2_UnkSubSystem9 mUnk_0A8;
/* 0EC */ UnkSystem2_UnkSubSystem9 mUnk_0EC;
@@ -60,21 +86,29 @@ public:
// data_ov024_020d7fd0
/* 00 */ virtual void vfunc_00();
/* 04 */ virtual void vfunc_04();
/* 08 */ virtual void vfunc_08();
/* 04 */ virtual void vfunc_04(unk8 *param1);
/* 08 */ virtual unk32 vfunc_08();
/* 0C */ virtual void vfunc_0C();
/* 10 */ virtual void vfunc_10();
/* 14 */ virtual void vfunc_14();
/* 18 */ virtual void vfunc_18();
/* 14 */ virtual bool vfunc_14();
/* 18 */ virtual unk32 vfunc_18();
/* 1C */
void func_ov024_020cb274(UnkSystem2_UnkSubSystem11_Derived2 *param1, UnkSystem2_UnkSubSystem5_Base_10 *param2);
void func_ov024_020cb280();
void func_ov024_020cb284(unk32 param1, unk32 param2);
void func_ov024_020cb490(UnkDataStruct2 *param1, unk32 *param2);
void func_ov024_020cb490(UnkDataStruct2 *param1, unk32 *param2, void *);
void func_ov024_020cb5bc();
void func_ov024_020cb654(unk8 *param1, UnkDataStruct1 *param2);
};
class UnkTitleCardSystem1_Derived1 : public UnkTitleCardSystem1 {
public:
/* 000 (base) */
/* 138 */ unk32 mUnk_138;
/* 13C */ unk16 mUnk_13C;
/* 13E */ unk16 mUnk_13E;
/* 13C */ u16 mUnk_13C;
/* 13E */ u16 mUnk_13E;
/* 140 */ bool mUnk_140;
/* 141 */ unk8 mUnk_141; // pad?
/* 142 */ unk8 mUnk_142; // pad?
@@ -84,12 +118,20 @@ public:
UnkTitleCardSystem1_Derived1(GameModeManagerBase_004 *param1);
// data_ov024_020d8044
/* 08 */ virtual void vfunc_08() override;
/* 08 */ virtual unk32 vfunc_08() override;
/* 0C */ virtual void vfunc_0C() override;
/* 10 */ virtual void vfunc_10() override;
/* 18 */ virtual void vfunc_18() override;
/* 1C */ virtual void vfunc_1C();
/* 18 */ virtual unk32 vfunc_18() override;
/* 1C */ virtual void vfunc_1C(u32 msgId, unk32 param2, bool param3);
/* 20 */
void func_ov024_020cbe94(unk32 param1);
void func_ov024_020cbeb8();
void func_ov024_020cbf74(unk32 param1);
void func_ov024_020cbf98();
void func_ov024_020cc05c(u32 msgId);
void func_ov024_020cc088(bool param1);
bool func_ov024_020cc0b4();
};
class UnkStruct_ov024_020d8694_01C : public UnkTitleCardSystem1_Derived1 {
@@ -106,7 +148,7 @@ public:
// data_ov024_020d7ff4
/* 00 */ virtual void vfunc_00() override;
/* 1C */ virtual void vfunc_1C() override;
/* 1C */ virtual void vfunc_1C(u32 msgId, unk32 param2, bool param3) override;
};
class UnkStruct_ov024_020d8694_188 : public UnkTitleCardSystem1_Derived1 {
@@ -119,9 +161,9 @@ public:
// data_ov024_020d801c
/* 00 */ virtual void vfunc_00() override;
/* 04 */ virtual void vfunc_04() override;
/* 14 */ virtual void vfunc_14() override;
/* 1C */ virtual void vfunc_1C() override;
/* 04 */ virtual void vfunc_04(unk8 *param1) override;
/* 14 */ virtual bool vfunc_14() override;
/* 1C */ virtual void vfunc_1C(u32 msgId, unk32 param2, bool param3) override;
};
class UnkStruct_ov024_020d8694_2FC : public UnkTitleCardSystem1 {
@@ -133,17 +175,22 @@ public:
// data_ov024_020d7fac
/* 00 */ virtual void vfunc_00() override;
/* 08 */ virtual void vfunc_08() override;
/* 08 */ virtual unk32 vfunc_08() override;
/* 0C */ virtual void vfunc_0C() override;
/* 10 */ virtual void vfunc_10() override;
void func_ov024_020ccb10(unk32 param1, Vec2s *param2, Vec2s *param3);
};
class UnkStruct_ov024_020d8694 : public AutoInstance<UnkStruct_ov024_020d8694>, public GameModeManagerBase_104 {
class UnkStruct_ov024_020d8694 : public GameModeManagerBase_104, public AutoInstance<UnkStruct_ov024_020d8694> {
public:
/* 000 (vtable) */
/* 01C */ UnkStruct_ov024_020d8694_01C mUnk_01C;
/* 188 */ UnkStruct_ov024_020d8694_188 mUnk_188;
/* 2FC */ UnkStruct_ov024_020d8694_2FC mUnk_2FC;
/* 434 */ UnkSystem2_UnkSubSystem11_Derived2 *mUnk_434;
/* 438 */ UnkSystem2_UnkSubSystem5_Base_10 *mUnk_438;
/* 43C */ GameModeManagerBase_004 *mUnk_43C;
/* 440 */
UnkStruct_ov024_020d8694(GameModeManagerBase_004 *param1);
@@ -153,16 +200,16 @@ public:
/* 08 */ virtual void vfunc_08(Input *pButtons, TouchControl *pTouchControl);
/* 10 */ virtual void vfunc_10(unk8 *param1);
void func_ov024_020cafb8();
void func_ov024_020cafd8();
void func_ov024_020cb000();
void func_ov024_020cb020();
void func_ov024_020cafb8(unk32 param1);
void func_ov024_020cafd8(unk32 param1);
void func_ov024_020cb000(unk32 param1);
void func_ov024_020cb020(unk32 param1);
void func_ov024_020cb040();
void func_ov024_020cb054();
void func_ov024_020cb0ac();
void func_ov024_020cb054(unk32 param1, Vec2s *param2, Vec2s *param3);
u32 GetMessageID(int index);
void func_ov024_020cb0c4();
void func_ov024_020cb178();
void func_ov024_020cb194();
void func_ov024_020cb178(unk32 param1);
void func_ov024_020cb194(unk16 param1);
static UnkStruct_ov024_020d8694 *Create(GameModeManagerBase_004 *param1);
};
+52 -31
View File
@@ -3,50 +3,57 @@
#include "System/SysNew.hpp"
#include "types.h"
// link list?
struct stack_struct1 {
void *param1;
int param2;
union {
void *param2;
unk32 arg2;
};
};
template <typename T, int arrayLength> class Iterator {
template <typename T> class Iterator {
public:
class ListData : public SysObject {
public:
u8 data[sizeof(T) * arrayLength];
};
/* 00 */ void *begin;
/* 04 */ void *end;
/* 08 */
ListData *begin;
ListData *end;
Iterator() {}
Iterator() {
this->Clear();
}
~Iterator() {
this->Destroy();
}
void Init(stack_struct1 *param1) {
if (this->begin != this->end) {
T *it = (T *) this->end;
do {
(--it)->~T();
} while (it != (T *) this->begin);
delete this->begin;
}
ListData *ptr = new(HeapIndex_1) ListData();
this->begin = ptr;
this->end = ptr + (arrayLength - 1);
// allocate the list and run the constructors for each element
void Init(size_t arrayLength) {
this->Destroy();
this->Set(arrayLength * 4);
if (this->begin != this->end) {
T *it = (T *) this->begin;
stack_struct1 *p;
do {
if (it != NULL) {
it->Init(*p);
}
new(it) T(); // using placement new to run the ctor
it++;
} while (it != (T *) this->end);
}
}
// same as the other `Init` except this takes a node list
void Init(size_t arrayLength, void *params) {
this->Destroy();
this->Set(arrayLength);
if (this->begin != this->end) {
T *it = (T *) this->begin;
stack_struct1 *p = (stack_struct1 *) params;
do {
new(it) T(*p);
it++;
p++;
@@ -54,6 +61,7 @@ public:
}
}
// iterate the array and run the destructors for each element
void Destroy() {
if (this->begin != this->end) {
T *it = (T *) this->end;
@@ -66,13 +74,26 @@ public:
}
}
void Reset() {
this->Destroy();
// allocate and set pointers
void Set(size_t arrayLength) {
void *ptr = ::operator new(arrayLength, HeapIndex_1, 4);
this->begin = ptr;
this->end = (void *) ((u8 *) ptr + arrayLength);
}
// clear pointers
void Clear() {
this->begin = NULL;
this->end = NULL;
}
T &GetRef(int index) {
// destroy and clear
void Reset() {
this->Destroy();
this->Clear();
}
T &Get(int index) {
return ((T *) this->begin)[index];
}
};
+45
View File
@@ -67,6 +67,35 @@ static inline void Vec2s_Sub(const Vec2s *a, const Vec2s *b, Vec2s *dst) {
dst->y = y;
}
//! TODO: Vec2s_OffsetAdd and Vec2s_OffsetAdd2 are probably fake?
static inline void Vec2s_OffsetAdd(Vec2s *a, Vec2s *b, Vec2s *c, Vec2s *dst) {
s16 y;
s16 x;
y = a->y + b->y;
x = a->x + b->x;
x += c->x;
y += c->y;
dst->x = x;
dst->y = y;
}
static inline void Vec2s_OffsetAdd2(Vec2s *a, Vec2s *b, Vec2s *c, Vec2s *dst) {
s16 y;
s16 x;
y = a->y + b->y;
x = a->x + b->x;
y += c->y;
x += c->x;
dst->x = x;
dst->y = y;
}
static inline void Vec2s_Copy(const Vec2s *a, Vec2s *dst) {
#if __MWERKS__
dst->coords = a->coords;
@@ -261,3 +290,19 @@ static inline void Vec2pCpp_Copy(const Vec2pCpp *a, Vec2pCpp *dst) {
dst->y = a->y;
#endif
}
//! TODO: remove
extern "C" static inline Vec2s *Vec2s_New(s16 x, s16 y) {
Vec2s vec;
vec.x = x;
vec.y = y;
return &vec;
}
//! TODO: remove
extern "C" static inline Vec2s *Vec2s_GetCopy(Vec2s *src) {
Vec2s vec;
vec.x = src->x;
vec.y = src->y;
return &vec;
}