Misc things (#30)

* match random init

* UnkSystem2_UnkSubSystem1_Derived1 related docs

* match func_ov031_020e9108 and FileSelect_UnkClass7::vfunc_00

* improve func_02017ea4

* rename next functions

* actor rupee improvements

* update gitignore

* fix broken match

* fileselectmain improvements

* fix broken match

* more misc progress

* fix build issues

* fix regressions
This commit is contained in:
Yanis
2026-02-03 19:59:20 +01:00
committed by GitHub
parent 7803163df2
commit 3ab5bf6de9
41 changed files with 1063 additions and 720 deletions
+14 -3
View File
@@ -9,20 +9,27 @@
#include "nitro/math.h"
#include "types.h"
class Actor_5c {
class Actor_5c_Base {
public:
/* 00 */ Vec3p mUnk_00;
/* 0c */ s16 mUnk_0c;
/* 0e */ unk16 mUnk_0e; // padding?
/* 10 */
Actor_5c_Base() {};
};
class Actor_5c : public Actor_5c_Base {
public:
/* 00 (base) */
Actor_5c() {};
void func_ov000_020975f8();
};
class UnkStruct_ov000_020b539c {
public:
/* 00 */ Actor_5c mUnk_00[3];
/* 00 */ Actor_5c_Base mUnk_00[3];
/* 30 */ ActorType *mUnk_30;
/* 34 */
};
@@ -113,7 +120,7 @@ public:
/* 0c */ virtual unk8 vfunc_0c();
/* 10 */ virtual void vfunc_10();
/* 14 */ virtual void vfunc_14();
/* 18 */ virtual unk32 vfunc_18(unk32 param1);
/* 18 */ virtual bool vfunc_18(unk32 param1);
/* 1c */ virtual void vfunc_1c();
/* 20 */ virtual void vfunc_20();
/* 24 */ virtual void vfunc_24();
@@ -153,9 +160,13 @@ public:
s32 func_ov000_020985f0(void *param1);
void func_ov000_0209862c(unk32 param1);
void func_ov000_020973f4(UnkStruct_ov000_020b539c *param1, ActorId param2, Actor_5c *param3, unk32 param4);
void func_ov000_020973f4(UnkStruct_ov000_020b539c *param1, ActorId param2, Actor_5c *param3);
void func_ov000_020973f4(UnkStruct_ov000_020b539c *param1, ActorId param2, Actor_5c param3);
void func_ov000_020989e0();
unk32 func_ov000_02098a60(unk32 param1);
void func_ov017_020bf5c4(Vec3p *param1, unk32 param2, unk32 param3, unk32 param4, unk32 param5);
};
+9 -4
View File
@@ -32,6 +32,11 @@ public:
void func_ov000_02097bec();
};
struct Actor_c4_stack {
unk32 param1;
unk32 param2;
};
class Actor_c4_Base {
public:
Actor_c4_Base(void *param1, unk32 param2);
@@ -53,7 +58,7 @@ public:
/* 20 */ Actor *mUnk_20;
/* 24 */
/* 00 */ virtual unk32 vfunc_00(unk32 param1, unk32 param2);
/* 00 */ virtual unk32 vfunc_00(Actor_c4_stack param1, unk32 param2);
/* 04 */ virtual void vfunc_04();
/* 08 */ virtual void vfunc_08();
/* 0c */ virtual void vfunc_0c(unk32 param1);
@@ -63,7 +68,7 @@ public:
void func_ov031_020f637c();
void func_ov031_020f6374();
void func_ov031_020f6384(unk32 param1);
unk32 func_ov031_020f62e4(unk32 param1);
unk32 func_ov031_020f62e4(unk32 param1, unk32 param2);
};
class ActorRupee : public Actor {
@@ -95,7 +100,7 @@ public:
ActorRupee();
/* 18 */ virtual unk32 vfunc_18() override;
/* 18 */ virtual bool vfunc_18(unk32 param1) override;
/* 20 */ virtual void vfunc_20() override;
/* 2c */ virtual void vfunc_2c(unk32 param1) override;
/* 4c */ virtual ~ActorRupee() override;
@@ -104,7 +109,7 @@ public:
void func_ov017_020bf9c8(ActorUnk_ov000_020a8bb0 *param1);
void func_ov031_020e8d2c(Vec3p *param1);
void func_ov031_020e8d2c(Vec3p *param1, u8 param2, unk32 param3, unk32 param4);
void func_ov031_020e8fec();
void func_ov031_020e9068();
void func_ov031_020e9108();
+1 -4
View File
@@ -109,14 +109,11 @@ public:
/* 11c */ unk32 mUnk_11c;
/* 14 */ virtual void vfunc_14() override;
/* 18 */ virtual unk32 vfunc_18(unk32 param1) override;
/* 18 */ virtual bool vfunc_18(unk32 param1) override;
/* 1c */ virtual void vfunc_1c() override;
/* 20 */ virtual void vfunc_20() override;
/* 24 */ virtual void vfunc_24() override;
/* 2c */ virtual void vfunc_2c(unk32 param1) override;
/* 40 */ virtual void vfunc_40() override;
/* 44 */ virtual void vfunc_44() override;
/* 48 */ virtual void vfunc_48() override;
/* 4c */ virtual ~ActorUnk_ov000_020a8bb0();
/* 54 */ virtual void vfunc_54(unk32 param1);
/* 54 */ virtual void vfunc_58(unk32 param1) = 0;
+19 -18
View File
@@ -14,18 +14,20 @@
extern const unk16 data_ov019_020d1bb0[];
extern "C" void func_ov001_020bd6a8();
// related to UnkStructSub2 but unsure how
class FileSelect_UnkClass7_04 {
public:
/* 000 */ UnkSubStruct19 mUnk_000[30];
/* E10 */ Vec2us mUnk_E10[30];
/* E88 */
};
class FileSelect_UnkClass7 {
public:
class Sub5 {
public:
u16 one;
u16 two;
};
/* 0000 (vtable) */
/* 0004 */ UnkSubStruct19 mUnk_0004[30];
/* 0E14 */ Sub5 mUnk_0E14[30];
/* 0004 */ FileSelect_UnkClass7_04 mUnk_004;
/* 0E8C */
FileSelect_UnkClass7();
// data_ov019_020d22a8 vtable
/* 00 */ virtual void vfunc_00();
@@ -51,18 +53,17 @@ public:
/* 0028 */ unk8 mUnk_0029;
/* 0028 */ unk8 mUnk_002A;
/* 0028 */ unk8 mUnk_002B;
/* 002C */ UnkStructSub2 mUnk_002C;
/* 007C */ STRUCT_PAD(0x30, 0xEB8);
/* 002C */ FileSelect_UnkClass7 mUnk_002C;
/* 0EB8 */ UnkSystem3 mUnk_0EB8;
/* 0EC4 */ UnkSystem3 mUnk_0EC4;
/* 0ED0 */ UnkSystem3 mUnk_0ED0;
/* 0EDC */ UnkSystem3 mUnk_0EDC;
/* 0EE8 */ UnkSystem3 mUnk_0EE8;
/* 0EF4 */ UnkSystem5 mUnk_0EF4;
/* 0F30 */ UnkSystem5 mUnk_0F30;
/* 0F6C */ UnkSystem5 mUnk_0F6C;
/* 0FA8 */ UnkSystem5 mUnk_0FA8;
/* 0FE4 */ UnkSystem5 mUnk_0FE4;
/* 0EF4 */ UnkResult mUnk_0EF4;
/* 0F30 */ UnkResult mUnk_0F30;
/* 0F6C */ UnkResult mUnk_0F6C;
/* 0FA8 */ UnkResult mUnk_0FA8;
/* 0FE4 */ UnkResult mUnk_0FE4;
/* 1020 */
GameModeLinkListNode *GetNode() {
@@ -143,12 +144,12 @@ public:
/* 00 */ u16 mUnk_02;
/* 04 */ u16 mUnk_04[2];
/* 08 */ unk32 mUnk_08;
/* 0C */ unk32 mUnk_0C;
/* 0C */ volatile unk32 mUnk_0C;
/* 10 */ unk32 mUnk_10;
/* 14 */ unk32 mUnk_14;
/* 18 */ unk32 mUnk_18;
/* 1C */ Vec2s mUnk_1C;
/* 20 */ unk32 mUnk_20;
/* 20 */ volatile unk32 mUnk_20;
};
class UnkStruct_ov019_020d1e94 {
-8
View File
@@ -72,7 +72,6 @@ public:
// upper "select file"
/* 0100 */ UnkSystem2_UnkSubSystem1_Derived1 mUnk_0100;
/* 0160 */ UnkSystem2_UnkSubSystem3 mUnk_0160;
/* 0164 */ UnkSystem2_UnkSubSystem5 mUnk_0164;
/* 039C */ UnkSystem2_UnkSubSystem9 mUnk_039C;
/* 03E0 */ FileSlotIterator mUnk_03E0;
@@ -82,7 +81,6 @@ public:
/* 0488 */ UnkSystem2_UnkSubSystem1_Derived2 mUnk_0488;
/* 04E8 */ unk8 mUnk_04E8[0x38];
/* 0520 */ UnkSystem2_UnkSubSystem3 mUnk_0520;
/* 0524 */ UnkSystem2_UnkSubSystem5 mUnk_0524;
/* 075C */ UnkSystem2_UnkSubSystem9 mUnk_075C;
/* 07A0 */ UnkSystem2_UnkSubSystem9 mUnk_07A0;
@@ -90,20 +88,17 @@ public:
// "copy" button
/* 07E4 */ UnkSystem2_UnkSubSystem1_Derived1 mUnk_07E4;
/* 0844 */ UnkSystem2_UnkSubSystem3 mUnk_0844;
/* 0848 */ UnkSystem2_UnkSubSystem5 mUnk_0848;
/* 0A80 */ UnkSystem2_UnkSubSystem9 mUnk_0A80;
// "erase" button
/* 0AC4 */ UnkSystem2_UnkSubSystem1_Derived1 mUnk_0AC4;
/* 0B24 */ UnkSystem2_UnkSubSystem3 mUnk_0B24;
/* 0B28 */ UnkSystem2_UnkSubSystem5 mUnk_0B28;
/* 0D60 */ UnkSystem2_UnkSubSystem9 mUnk_0D60;
// "adventure" button
/* 0DA4 */ UnkSystem2_UnkSubSystem1_Derived2 mUnk_0DA4;
/* 0E04 */ unk8 mUnk_0E04[0x38];
/* 0E3C */ UnkSystem2_UnkSubSystem3 mUnk_0E3C;
/* 0E40 */ UnkSystem2_UnkSubSystem5 mUnk_0E40;
/* 1078 */ UnkSystem2_UnkSubSystem9 mUnk_1078;
// adventure mode animated sword icon
@@ -115,7 +110,6 @@ public:
/* 11BC */ UnkSystem2_UnkSubSystem1_Derived2 mUnk_11BC;
/* 121C */ unk8 mUnk_121C[0x38];
/* 1254 */ UnkSystem2_UnkSubSystem3 mUnk_1254;
/* 1258 */ UnkSystem2_UnkSubSystem5 mUnk_1258;
/* 1490 */ UnkSystem2_UnkSubSystem9 mUnk_1490;
// battle mode animated sword icon
@@ -127,14 +121,12 @@ public:
/* 15D4 */ UnkSystem2_UnkSubSystem1_Derived2 mUnk_15D4;
/* 1634 */ unk8 mUnk_1634[0x38];
/* 166C */ UnkSystem2_UnkSubSystem3 mUnk_166C;
/* 1670 */ UnkSystem2_UnkSubSystem5 mUnk_1670;
/* 18A8 */ UnkSystem2_UnkSubSystem9 mUnk_18A8;
// "options" button
/* 18EC */ UnkSystem2_UnkSubSystem1_Derived2 mUnk_18EC;
/* 194C */ unk8 mUnk_194C[0x38];
/* 1984 */ UnkSystem2_UnkSubSystem3 mUnk_1984;
/* 1988 */ UnkSystem2_UnkSubSystem5 mUnk_1988;
/* 1BC0 */ UnkSystem2_UnkSubSystem9 mUnk_1BC0;
/* 1C04 */ UnkSystem1_ov019_Derived3 mUnk_1C04;
+3 -3
View File
@@ -52,10 +52,10 @@ public:
/* A4 */ UnkSystem2_UnkSubSystem8 mUnk_0A4;
/* F4 */
UnkStruct_ov019_020d24c8_28_304(unk32 param1, unk32 param2, unk32 param3, unk32 param4, unk32 param5, unk32 param6) :
mUnk_044(param1, param2, param3, param4, param5, param6),
UnkStruct_ov019_020d24c8_28_304(unk32 buttonID, unk32 param2, unk32 param3, unk32 param4, unk32 param5, unk32 param6) :
mUnk_044(buttonID, param2, param3, param4, param5, param6),
mUnk_0A4(&mUnk_044) {}
void func_0201e874(unk32 param1, void *param2, void *param3, unk32 param4);
void func_0201e874(unk32 buttonID, void *param2, void *param3, unk32 param4);
};
// defines the mic test screen (0x022e9b84)
-4
View File
@@ -108,7 +108,6 @@ public:
// "options" string
/* 10A8 */ UnkSystem2_UnkSubSystem1_Derived1 mUnk_10A8;
/* 1108 */ UnkSystem2_UnkSubSystem3 mUnk_1108;
/* 110C */ UnkSystem2_UnkSubSystem5 mUnk_110C;
/* 1344 */ UnkSystem2_UnkSubSystem9 mUnk_1344;
// "mic test" button
@@ -116,21 +115,18 @@ public:
/* 13E8 */ unk8 mUnk_13E8[0x38];
/* 1420 */ UnkSystem2_UnkSubSystem8 mUnk_1420;
/* 1470 */ UnkSystem2_UnkSubSystem3 mUnk_1470;
/* 1474 */ UnkSystem2_UnkSubSystem5 mUnk_1474;
// "ok" button
/* 16AC */ UnkSystem2_UnkSubSystem1_Derived2 mUnk_16AC;
/* 170C */ unk8 mUnk_170C[0x38];
/* 1744 */ UnkSystem2_UnkSubSystem8 mUnk_1744;
/* 1794 */ UnkSystem2_UnkSubSystem3 mUnk_1794;
/* 1798 */ UnkSystem2_UnkSubSystem5 mUnk_1798;
// "cancel" button
/* 19D0 */ UnkSystem2_UnkSubSystem1_Derived2 mUnk_19D0;
/* 1A30 */ unk8 mUnk_1A30[0x38];
/* 1A68 */ UnkSystem2_UnkSubSystem8 mUnk_1A68;
/* 1AB8 */ UnkSystem2_UnkSubSystem3 mUnk_1AB8;
/* 1ABC */ UnkSystem2_UnkSubSystem5 mUnk_1ABC;
/* 1CF4 */ unk8 mUnk_1CF4;
/* 1CF5 */ bool mUnk_1CF5;
-1
View File
@@ -29,7 +29,6 @@ public:
/* 68C */ UnkSubStruct19 mUnk_68C; // fire dungeon icon
/* 704 */ UnkSubStruct19 mUnk_704; // desert dungeon icon
/* 77C */ Vec2us mUnk_77C;
// int pad[10];
/* 780 */
struct stack_struct2 {
+2 -2
View File
@@ -149,8 +149,8 @@ public:
/* 104 */ GameModeManagerBase_104 mUnk_104;
/* 120 */ Input mButtons;
/* 126 */ TouchControl mTouchControl;
/* 148 */ unk32 mUnk_148;
/* 14C */ unk32 mUnk_14C;
/* 148 */ unk32 mNextButtonID;
/* 14C */ unk32 mButtonID;
/* 150 */ bool mUnk_150;
/* 150 */ unk8 mUnk_151;
/* 150 */ unk8 mUnk_152;
+48 -10
View File
@@ -1,26 +1,64 @@
#pragma once
#include "global.h"
#include "nitro/math.h"
#include "types.h"
struct Random {
/* 00 */ u64 mRandomValue;
/* 00 */ u16 mRandomValue[4];
/* 08 */ u64 mFactor;
/* 10 */ u64 mAddend;
/* 18 */
/**
* Generate a random number from 0 (inclusive) to `max` (exclusive)
* @brief Gets the seed's value
*/
u32 Next(u64 min, u64 max) {
mRandomValue = mAddend + mFactor * mRandomValue;
u64 result;
if ((max - min) == 0x100000000) {
result = mRandomValue;
} else {
result = (mRandomValue >> 32) * (max - min);
u64 GetRandomValue() {
return *(u64 *) this->mRandomValue;
}
/**
* @brief Updates the seed's value
*/
void UpdateRandomValue() {
*(u64 *) this->mRandomValue = this->mAddend + (this->mFactor * this->GetRandomValue());
}
/**
* @brief Generates a random number as a u16
*/
u16 Next16() {
this->UpdateRandomValue();
return this->GetRandomValue() >> 48;
}
/**
* @brief Generates a random number from 0 (inclusive) to `max` (exclusive) as a u32
*/
u32 Next32(u64 min, u64 max) {
this->UpdateRandomValue();
return (((this->GetRandomValue() >> 32) * (max - min)) >> 32) + min;
}
u32 ConditionalNext32(u32 value) {
this->UpdateRandomValue();
u64 result = this->GetRandomValue() >> 32;
if (value != 0) {
result = (result * value) >> 32;
}
return (result >> 32) + min;
return result;
}
Vec2us &NextPos(u16 xMax, u16 yMax) {
Vec2us pos;
pos.x = this->Next32(0, xMax);
pos.y = this->Next32(0, yMax);
return pos;
}
void Init();
+328 -100
View File
@@ -101,13 +101,18 @@ public:
}
if (doSetPos) {
Vec2us local_4c_copy;
Vec2us local_4c;
func_0201e8d4(&local_4c_copy, this);
local_4c.x = local_4c_copy.y;
local_4c.y = local_4c_copy.x;
pPos->x = local_4c.x;
pPos->y = local_4c.y;
func_0201e8d4(&local_4c, this);
u16 x = local_4c.x;
u16 y = local_4c.y;
// necessary to flip r1 and r2
pPos->x = 0;
pPos->y = 0;
pPos->x = x;
pPos->y = y;
}
}
@@ -162,22 +167,304 @@ public:
}
if (doSetPos) {
Vec2us local_4c_copy;
Vec2us local_4c;
func_0201e8d4(&local_4c_copy, this);
local_4c.x = local_4c_copy.y;
local_4c.y = local_4c_copy.x;
pPos->x = local_4c.x;
pPos->y = local_4c.y;
func_0201e8d4(&local_4c, this);
u16 x = local_4c.x;
u16 y = local_4c.y;
// necessary to flip r1 and r2
pPos->x = 0;
pPos->y = 0;
pPos->x = x;
pPos->y = y;
}
}
void UnkOperations3() {
int test;
int iVar1;
if (this->mUnk_08 != 0) {
iVar1 = this->mUnk_08 - this->mUnk_0D;
this->mUnk_08 = CLAMP(iVar1, 0, 0xFFFF);
} else {
if (this->mUnk_0A) {
if (this->mUnk_04 < this->mUnk_06) {
iVar1 = this->mUnk_04 + this->mUnk_0D;
if (iVar1 > this->mUnk_06) {
iVar1 = this->mUnk_06;
} else if (iVar1 < 0) {
iVar1 = 0;
}
this->mUnk_04 = iVar1;
this->vfunc_00();
if (this->mUnk_04 >= this->mUnk_06) {
this->mUnk_10 = this->mUnk_18;
this->mUnk_0A = false;
this->mUnk_0C = true;
}
}
} else {
if (this->mUnk_0B && this->mUnk_04 != 0) {
int iVar1 = this->mUnk_04 - this->mUnk_0D;
if (iVar1 > this->mUnk_06) {
iVar1 = this->mUnk_06;
} else if (iVar1 < 0) {
iVar1 = 0;
}
this->mUnk_04 = iVar1;
this->vfunc_04();
if (this->mUnk_04 == 0) {
this->mUnk_10 = this->mUnk_14;
this->mUnk_0B = false;
this->mUnk_0C = true;
}
}
}
}
}
};
class UnkStruct_ov019_020d24c8_28_258 {
public:
/* 00 */ void *mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 08 */ unk16 mUnk_08;
/* 0A */ union { //! TODO: figure out
Vec2s mPos;
Vec2us mPosU;
};
/* 0E */ unk16 mUnk_0E;
/* 10 */ unk16 mUnk_10;
/* 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;
};
UnkStruct_ov019_020d24c8_28_258(unk32 param1, unk32 param2) :
mUnk_00(0),
mUnk_04(0) {
this->UnknownAction(param1, param2);
}
void UnknownAction(unk32 param1, unk32 param2) {
this->func_ov000_0205fc20(param1, param2, &this->mPos, &this->mUnk_0E);
this->mUnk_12 = param1;
this->mUnk_14 = param2;
}
void func_ov000_0205fc20(unk32 param1, unk32 param2, void *param3, void *param4);
};
#define BTN_ID_NONE -1
#define BTN_ID_ITEM 0x03
#define BTN_ID_RETURN 0x05
#define BTN_ID_TRAIN_ROUTE_GO 0x0E
#define BTN_ID_TRAIN_ROUTE_CANCEL 0x0F
#define BTN_ID_TRAIN_ROUTE_QUIT 0x10
#define BTN_ID_TRAIN_LEVER 0x11
#define BTN_ID_TRAIN_ROPE 0x15
#define BTN_ID_MAP_MEMO 0x1A
#define BTN_ID_MAP_ERASE 0x1B
#define BTN_ID_PAUSE_CONTINUE 0x28
#define BTN_ID_PAUSE_SAVE_AND_QUIT 0x29
#define BTN_ID_MENU_OPEN 0x2D
#define BTN_ID_MENU_ROUTE 0x2E
#define BTN_ID_MENU_CLOSE_BOTTOM 0x2F
#define BTN_ID_MENU_WHIRLWIND 0x30
#define BTN_ID_MENU_BOOMERANG 0x31
#define BTN_ID_MENU_WHIP 0x32
#define BTN_ID_MENU_BOW 0x33
#define BTN_ID_MENU_BOMBS 0x34
#define BTN_ID_MENU_SAND_ROD 0x35
#define BTN_ID_MENU_POTION_SLOT_1 0x36
#define BTN_ID_MENU_POTION_SLOT_2 0x37
#define BTN_ID_MENU_SAVE 0x38
#define BTN_ID_MENU_MAP 0x39
#define BTN_ID_MENU_COLLECTION 0x3A
#define BTN_ID_MENU_RAIL_MAP 0x3B
#define BTN_ID_MENU_PAN_FLUTE 0x3C
#define BTN_ID_MENU_CLOSE_TOP 0x3D
#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
#define BTN_ID_FILE_SELECT_START 0x43
#define BTN_ID_FILE_SELECT_COPY 0x44
#define BTN_ID_FILE_SELECT_ERASE 0x45
#define BTN_ID_FILE_SELECT_ADVENTURE 0x46
#define BTN_ID_FILE_SELECT_BATTLE 0x47
#define BTN_ID_FILE_SELECT_CONTACT_MODE 0x48
#define BTN_ID_FILE_SELECT_OPTIONS 0x49
#define BTN_ID_FILE_SELECT_CONFIRM 0x4A
#define BTN_ID_FILE_SELECT_MIC_TEST 0x4B
#define BTN_ID_FILE_SELECT_MESG_SPEED_LEFT_ARROW 0x4C
#define BTN_ID_FILE_SELECT_MESG_SPEED_RIGHT_ARROW 0x4D
#define BTN_ID_FILE_SELECT_SOUND_SETTINGS_LEFT_ARROW 0x4E
#define BTN_ID_FILE_SELECT_SOUND_SETTINGS_RIGHT_ARROW 0x4F
#define BTN_ID_FILE_SELECT_HANDEDNESS_LEFT_ARROW 0x50
#define BTN_ID_FILE_SELECT_HANDEDNESS_RIGHT_ARROW 0x51
#define BTN_ID_FILE_SELECT_NEW_FILE_CONFIRM 0x57
#define BTN_ID_FILE_SELECT_NEW_FILE_RETURN 0x58
#define BTN_ID_RAIL_MAP_FOREST_MAYSCORE 0x5D
#define BTN_ID_RAIL_MAP_FOREST_OUTSET_VILLAGE 0x5E
#define BTN_ID_RAIL_MAP_SNOW_ANOUKI_VILLAGE 0x5F
#define BTN_ID_RAIL_MAP_OCEAN_PAPUZIA_VILLAGE 0x60
#define BTN_ID_RAIL_MAP_FIRE_GORON_VILLAGE 0x61
#define BTN_ID_RAIL_MAP_TOWER_OF_SPIRITS 0x62
#define BTN_ID_RAIL_MAP_WOODED_TEMPLE 0x63
#define BTN_ID_RAIL_MAP_SNOW_BLIZZARD_TEMPLE 0x64
#define BTN_ID_RAIL_MAP_MARINE_TEMPLE 0x65
#define BTN_ID_RAIL_MAP_MOUNTAIN_TEMPLE 0x66
#define BTN_ID_RAIL_MAP_DESERT_TEMPLE 0x67
#define BTN_ID_RAIL_MAP_FOREST_WOODLAND_SANCTUARY 0x68
#define BTN_ID_RAIL_MAP_SNOW_SNOWFALL_SANCTUARY 0x69
#define BTN_ID_RAIL_MAP_OCEAN_ISLAND_SANCTUARY 0x6A
#define BTN_ID_RAIL_MAP_OCEAN_DUNE_SANCTUARY 0x6B
#define BTN_ID_RAIL_MAP_FOREST_HYRULE_CASTLE 0x6C
#define BTN_ID_RAIL_MAP_SNOW_BRIDGE_WORKERS_HOUSE 0x6D
#define BTN_ID_RAIL_MAP_SNOW_ICY_SPRING 0x6E
#define BTN_ID_RAIL_MAP_FOREST_TRADING_POST 0x6F
#define BTN_ID_RAIL_MAP_FOREST_RABBIT_HAVEN 0x70
#define BTN_ID_RAIL_MAP_OCEAN_PIRATE_HIDEOUT 0x71
#define BTN_ID_RAIL_MAP_FIRE_GORON_TARGET_RANGE 0x72
#define BTN_ID_RAIL_MAP_FIRE_DARK_ORE_MINE 0x73
#define BTN_ID_RAIL_MAP_SNOW_SNOWDRIFT_STATION 0x74
#define BTN_ID_RAIL_MAP_FIRE_DISORIENTATION_STATION 0x75
#define BTN_ID_RAIL_MAP_FIRE_ENDS_OF_THE_EARTH_STATION 0x76
#define BTN_ID_RAIL_MAP_OCEAN_LOST_AT_SEA_STATION 0x77
#define BTN_ID_RAIL_MAP_SNOW_SLIPPERY_STATION 0x78
#define BTN_ID_SHOP_QUIT 0x81 // quit shop
#define BTN_ID_SHOP_RETURN 0x82 // quit item preview
#define BTN_ID_SHOP_BUY 0x83
#define BTN_ID_SHOP_ITEM_1 0x84
#define BTN_ID_SHOP_ITEM_2 0x85
#define BTN_ID_SHOP_ITEM_3 0x86
#define BTN_ID_SHOP_ITEM_4 0x87
#define BTN_ID_SHOP_ITEM_5 0x88
#define BTN_ID_COLLECTION_TO_TRAIN_PARTS 0x99
#define BTN_ID_COLLECTION_TO_TREASURES 0x9A
#define BTN_ID_COLLECTION_TO_LETTERS 0x9B
#define BTN_ID_COLLECTION_TO_STAMPS 0x9C
#define BTN_ID_COLLECTION_FLIP_SCREENS 0x9D
#define BTN_ID_COLLECTION_SWORD 0x9E
#define BTN_ID_COLLECTION_SHIELD 0x9F
#define BTN_ID_COLLECTION_BOMB_BAG 0xA0
#define BTN_ID_COLLECTION_QUIVER 0xA1
#define BTN_ID_COLLECTION_CLOTHES 0xA2
#define BTN_ID_COLLECTION_BOW_OF_LIGHT 0xA3
#define BTN_ID_COLLECTION_A4 0xA4 // most likely the other scroll
#define BTN_ID_COLLECTION_GREAT_SPIN_ATTACK 0xA5
#define BTN_ID_COLLECTION_ENGINEER_CERTIFICATE 0xA6
#define BTN_ID_COLLECTION_BEEDLE_CARD 0xA7
#define BTN_ID_COLLECTION_RABBIT_NET 0xAA
#define BTN_ID_COLLECTION_COMPASS_OF_LIGHT 0xAB
#define BTN_ID_COLLECTION_PRIZE_POSTCARDS 0xAC
#define BTN_ID_COLLECTION_PAN_FLUTE 0xAD
#define BTN_ID_COLLECTION_FOREST_SOURCE 0xAE
#define BTN_ID_COLLECTION_SNOW_SOURCE 0xAF
#define BTN_ID_COLLECTION_OCEAN_SOURCE 0xB0
#define BTN_ID_COLLECTION_FIRE_SOURCE 0xB1
#define BTN_ID_COLLECTION_SAND_SOURCE 0xB2
#define BTN_ID_COLLECTION_SONG_OF_AWAKENING 0xB3
#define BTN_ID_COLLECTION_SONG_OF_HEALING 0xB4
#define BTN_ID_COLLECTION_SONG_OF_BIRDS 0xB5
#define BTN_ID_COLLECTION_SONG_OF_LIGHT 0xB6
#define BTN_ID_COLLECTION_SONG_OF_DISCOVERY 0xB7
#define BTN_ID_COLLECTION_RETURN 0xB8
#define BTN_ID_TRAIN_PARTS_TRAIN 0x99
#define BTN_ID_TRAIN_PARTS_CANNON 0x9A
#define BTN_ID_TRAIN_PARTS_CAR 0x9B
#define BTN_ID_TRAIN_PARTS_WAGON 0x9C
#define BTN_ID_TRAIN_PARTS_CHOICE_1 0x9D
#define BTN_ID_TRAIN_PARTS_CHOICE_2 0x9E
#define BTN_ID_TRAIN_PARTS_CHOICE_3 0x9F
#define BTN_ID_TRAIN_PARTS_RETURN 0xB8
#define BTN_ID_TREASURES_DEMON_FOSSIL 0x9D
#define BTN_ID_TREASURES_STALFOS_SKULL 0x9E
#define BTN_ID_TREASURES_STAR_FRAGMENT 0x9F
#define BTN_ID_TREASURES_BEE_LARVAE 0xA0
#define BTN_ID_TREASURES_WOOD_HEART 0xA1
#define BTN_ID_TREASURES_DARK_PEARL_LOOP 0xA2
#define BTN_ID_TREASURES_WHITE_PEARL_LOOP 0xA3
#define BTN_ID_TREASURES_RUTO_CROWN 0xA4
#define BTN_ID_TREASURES_DRAGON_SCALE 0xA5
#define BTN_ID_TREASURES_PIRATE_NECKLACE 0xA6
#define BTN_ID_TREASURES_PALACE_DISH 0xA7
#define BTN_ID_TREASURES_GORON_AMBER 0xA8
#define BTN_ID_TREASURES_MYSTIC_JADE 0xA9
#define BTN_ID_TREASURES_ANCIENT_COIN 0xAA
#define BTN_ID_TREASURES_PRICELESS_STONE 0xAB
#define BTN_ID_TREASURES_REGAL_RING 0xAC
#define BTN_ID_TREASURES_RETURN 0xB8
#define BTN_ID_STAMPS_PAGE_LEFT 0x99
#define BTN_ID_STAMPS_PAGE_RIGHT 0x9A
#define BTN_ID_STAMPS_RETURN 0xB8
#define BTN_ID_LETTERS_CHOICE_1 0x99
#define BTN_ID_LETTERS_CHOICE_2 0x9A
#define BTN_ID_LETTERS_CHOICE_3 0x9B
#define BTN_ID_LETTERS_CHOICE_4 0x9C
#define BTN_ID_LETTERS_ARROW_RIGHT 0x9E
#define BTN_ID_LETTERS_ARROW_LEFT 0x9F
#define BTN_ID_LETTERS_MAP 0xA0
#define BTN_ID_LETTERS_RAIL_MAP 0xA1
#define BTN_ID_LETTERS_RETURN 0xB8
#define BTN_ID_CONTACT_MODE_EXCHANGE 0x99
#define BTN_ID_CONTACT_MODE_DEMON_FOSSIL 0x9B
#define BTN_ID_CONTACT_MODE_STALFOS_SKULL 0x9C
#define BTN_ID_CONTACT_MODE_STAR_FRAGMENT 0x9D
#define BTN_ID_CONTACT_MODE_BEE_LARVAE 0x9E
#define BTN_ID_CONTACT_MODE_WOOD_HEART 0x9F
#define BTN_ID_CONTACT_MODE_DARK_PEARL_LOOP 0xA0
#define BTN_ID_CONTACT_MODE_WHITE_PEARL_LOOP 0xA1
#define BTN_ID_CONTACT_MODE_RUTO_CROWN 0xA2
#define BTN_ID_CONTACT_MODE_DRAGON_SCALE 0xA3
#define BTN_ID_CONTACT_MODE_PIRATE_NECKLACE 0xA4
#define BTN_ID_CONTACT_MODE_PALACE_DISH 0xA5
#define BTN_ID_CONTACT_MODE_GORON_AMBER 0xA6
#define BTN_ID_CONTACT_MODE_MYSTIC_JADE 0xA7
#define BTN_ID_CONTACT_MODE_ANCIENT_COIN 0xA8
#define BTN_ID_CONTACT_MODE_PRICELESS_STONE 0xA9
#define BTN_ID_CONTACT_MODE_REGAL_RING 0xAA
#define BTN_ID_CONTACT_MODE_RETURN 0xB8
#define BTN_ID_BATTLE_MENU_RETURN 0xB9
#define BTN_ID_BATTLE_MENU_CREATE_GROUP 0xBA
#define BTN_ID_BATTLE_MENU_JOIN_GROUP 0xBB
#define BTN_ID_BATTLE_MENU_PLAYER_LIST 0xBD
class UnkSystem2_UnkSubSystem1_Base {
public:
/* 04 */ GameModeLinkList<UnkSystem2_UnkSubSystem1_Base> mUnk_04;
/* 0C */ void *mUnk_0C;
/* 10 */ unk32 mUnk_10;
/* 10 */ unk32 mButtonID;
/* 14 */ Vec2s mPos; // image position (among other things)
/* 18 */ STRUCT_PAD(0x18, 0x24);
/* 24 */ Vec2us mPosOffset; // used to shift the button when selected
@@ -202,24 +489,12 @@ public:
class UnkSystem2_UnkSubSystem1_Derived1 : public UnkSystem2_UnkSubSystem1_Base {
public:
/* 00 (vtable) */
/* 30 */ void *mUnk_30; // related to the background texture draw (idle)
/* 34 */ unk32 mUnk_34; // related to the texture draw
/* 38 */ unk16 mUnk_38; // related to the texture draw
/* 3C */ Vec2us mUnk_3A; // overlaid elements position (text, icons etc...), relative to background position
/* 40 */ unk16 mUnk_3E;
/* 40 */ unk32 mUnk_40;
/* 44 */ unk32 mUnk_44;
/* 48 */ void *mUnk_48; // related to the background texture draw (selected)
/* 4C */ unk32 mUnk_4C;
/* 50 */ unk16 mUnk_50; // related to the texture draw
/* 50 */ unk16 mUnk_52;
/* 54 */ unk32 mUnk_54;
/* 58 */ unk32 mUnk_58;
/* 5C */ unk32 mUnk_5C;
/* 30 */ UnkStruct_ov019_020d24c8_28_258 mUnk_30; // idle
/* 48 */ UnkStruct_ov019_020d24c8_28_258 mUnk_48; // selected
/* 60 */
UnkSystem2_UnkSubSystem1_Derived1();
UnkSystem2_UnkSubSystem1_Derived1(unk32 param1, unk32 param2, unk32 param3, unk32 param4, unk32 param5, unk32 param6);
UnkSystem2_UnkSubSystem1_Derived1(unk32 buttonID, unk32 param2, unk32 param3, unk32 param4, unk32 param5, unk32 param6);
void func_ov000_020633c0(unk32 param1, unk32 param2, unk32 param3, unk32 param4, unk32 param5, unk32 param6);
// data_ov000_020b1efc vtable
@@ -264,16 +539,6 @@ public:
/* 0C */ virtual void vfunc_0C() override;
};
class UnkSystem2_UnkSubSystem3 {
public:
/* 00 */ UnkSystem2_UnkSubSystem1_Base *mUnk_00;
/* 04 */
UnkSystem2_UnkSubSystem3(UnkSystem2_UnkSubSystem1_Base *param1, unk32 param2, unk32 param3, unk32 param4);
void func_ov000_02062f30();
};
class UnkSystem2_UnkSubSystem5_Base_10 {
public:
/* 000 (vtable) */
@@ -392,6 +657,16 @@ public:
/* 04 */
};
class UnkSystem2_UnkSubSystem3 {
public:
/* 00 */ UnkSystem2_UnkSubSystem1_Base *mUnk_00;
/* 04 */ UnkSystem2_UnkSubSystem5 mUnk_04;
UnkSystem2_UnkSubSystem3(UnkSystem2_UnkSubSystem1_Base *param1, unk32 param2, unk32 param3, unk32 param4);
void func_ov000_02062f30();
};
class UnkSystem2_UnkSubSystem8_Base {
public:
/* 00 (vtable) */
@@ -480,22 +755,6 @@ public:
~UnkSystem4();
};
class UnkSystem5 {
public:
/* 00 */ char *mUnk_00;
/* 04 */ char *mUnk_04;
/* 08 */ char *mUnk_08;
/* 10 */ UnkSystem4 mUnk_0F00;
/* 20 */ UnkSystem4 mUnk_0F10;
/* 30 */ UnkSystem4 mUnk_0F20;
/* 40 */
UnkSystem5() {}
~UnkSystem5() {}
void func_020171e4();
void func_02017520(const char *nscrPath, const char *ncgrPath, const char *nclrPath);
};
class UnkStruct2 {
public:
/* 00 */ unk8 pad[0x10];
@@ -514,53 +773,12 @@ struct UnkResult {
UnkSystem4 mUnk_1C;
UnkSystem4 mUnk_2C;
UnkResult();
UnkResult(const char *path);
};
UnkResult(const char *path, const char *param2, const char *param3);
~UnkResult() {}
class UnkStruct_ov019_020d24c8_28_258 {
public:
/* 00 */ void *mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 08 */ unk16 mUnk_08;
/* 0A */ union { //! TODO: figure out
Vec2s mPos;
Vec2us mPosU;
};
/* 0E */ unk16 mUnk_0E;
/* 10 */ unk16 mUnk_10;
/* 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;
};
UnkStruct_ov019_020d24c8_28_258(unk32 param1, unk32 param2) :
mUnk_00(0),
mUnk_04(0) {
this->UnknownAction(param1, param2);
}
void UnknownAction(unk32 param1, unk32 param2) {
this->func_ov000_0205fc20(param1, param2, &this->mPos, &this->mUnk_0E);
this->mUnk_12 = param1;
this->mUnk_14 = param2;
}
void func_ov000_0205fc20(unk32 param1, unk32 param2, void *param3, void *param4);
};
class UnkStructSub2 {
public:
UnkStructSub2();
/* 00 */ virtual void vfunc_00();
/* 04 */ virtual void vfunc_04();
void func_02017520(const char *nscrPath, const char *ncgrPath, const char *nclrPath);
};
// used to draw the swords from the adventure and battle buttons
@@ -580,7 +798,7 @@ public:
/* 29 */ unk8 mUnk_29;
/* 2A */ unk8 mUnk_2A;
/* 2B */ unk8 mUnk_2B;
/* 2C */ UnkStructSub2 mUnk_2C;
/* 2C */ unk32 mUnk_2C;
/* 30 */ void *mUnk_30; // pointer to somewhere inside "CEBK"
/* 34 */ void *mUnk_34;
/* 38 */ unk32 mUnk_38;
@@ -605,6 +823,14 @@ public:
/* 78 */
UnkSubStruct19();
UnkSubStruct19(unk32 param1, unk32 param2) {
this->mUnk_6E = true;
this->mUnk_70 = 0;
this->mUnk_5C.x = 0;
this->mUnk_5C.y = 0;
this->mUnk_74 = 0;
this->func_ov000_0206082c(param1, param2);
}
void func_ov000_0206082c(unk32 param1, unk32 param2);
void func_ov000_02060950();
@@ -615,4 +841,6 @@ public:
unk32 func_ov000_02060af8(void);
void func_ov000_02060b50();
void func_ov000_02060b64(void);
unk32 func_ov000_02060c28(void);
void func_ov000_02060bd8(unk32 param1);
};
+3
View File
@@ -44,4 +44,7 @@
#define STRUCT_PAD(from, to) unsigned char _pad_##from[(to) - (from)]
#define SUBSCREEN_WIDTH 256
#define SUBSCREEN_HEIGHT 192
#endif