mirror of
https://github.com/zeldaret/st
synced 2026-06-22 08:35:42 -04:00
f66583c194
* refactor: unknown arow actor to arrow
* refactor: rename ActorUnkArow_c4 and remove warning
* refactor: rename class in system files
* feat: match actorprofilearrow
* feat: progress decompilation
* feat: rename actor to ActorShotArrow
* feat: change mangled name
* feat: decompile some functions and mark unmatched functions as non-matching
* feat: progress
* feat: decompiling function 020f206c
* feat: change two fields for struct padding
* feat: remove non-matching comment on matched function
* feat: decompiling function 020f20bc
* refactor: fix .bss mangled names
* feat: decompiling 020f2134
* feat: decompiling func_ov031_020f2160
* feat: matching function func_ov031_020f21dc
* feat: use correct mangled names in jp version
* fix: change back arm9/delinks in eur version
* feat: non-matching function 020f1a64
* feat: decompile 020f2270
* feat: decompile function 020f2280
* feat: uncompile func_ov031_020f229c
* feat: match 020f22d4 add UnkSystem{4,5} as fields
* feat: reverse 020f2b8c
* feat: 020f2bbc
* feat: 020f2bec
* feat: 020f3304
* style: explicitly indicate floating values when using FLOAT_TO_Q20
* style: move external function to the top
* feat: begin of 020f3258
* feat: decompile 020f32c4
* feat: propagate mangled names changes to japan version
* feat: begin decompilation of func_ov031_020f370c
* feat: begin weird decompilation of func_ov031_020f3d4c
* feat: decompile function 020f3d04
* feat: better matching
* feat: matching function func_ov031_020f2214
* feat: decompile the function 020f3258
* feat: increase matched code
* feat: decompile function func_ov031_020f2794
* feat: decompile function func_ov031_020f18bc
* feat: decompile almost all func_ov031_020f195c
* feat: decompile 3/4 of func_ov031_020f173c
* refactor: change back function's return type to void
* feat: begin decompilation of func_ov031_020f1b04
* feat: advance decompilation of 020f1c7c
* feat: decompile 020f1e3c
* feat: decompile function func_ov031_020f1f54
* refactor: move func(Actor *) into ActorShotArrow class
* feat: introduce ActorShotArrow_194 thanks to Yanis002
* fix: use FX32 in macros over old Q20
* fix: praying magic behaviour
* revert: revert before build failure
* revert: remove all relocs.txt magic stuff
* revert: introduce back correct symbols
* revert: introduce back CORRECTLY correct symbols
* feat: rename vtable
* fix: wrong hex in comment
* feat: huge improvements
* fix: undefined 02081d7c
* fix: awful symbol name
* fix: part of mangled name in jp version
* fix: rest of the line disappeared
* fix: try to fix jp version
* fix: apply eur fix to jp
* feat: add function 020f374c
* fix: full match of 020f173c
* feat: move function in upperclass
* feat: change ActorRupee to use class function
* feat: try decompiling func_ov031_020f2ef0
* feat: improvements
* feat: improvements
* docs: add comment
* fix: build issues
* feat: improvements
* feat: improvements
* feat: forget inclusion of unkstruct
* feat: enhanced
* feat: some improvements
* style: better style
* feat: decompile function and cleanup
* refactor: remove .cache ??
* review
---------
Co-authored-by: Yanis002 <35189056+Yanis002@users.noreply.github.com>
456 lines
12 KiB
C++
456 lines
12 KiB
C++
#pragma once
|
|
|
|
#include "global.h"
|
|
#include "types.h"
|
|
|
|
#include "Actor/ActorRef.hpp"
|
|
#include "Item/ItemManager.hpp"
|
|
#include "LinkList.hpp"
|
|
#include "Player/Player.hpp"
|
|
#include "Player/TouchControl.hpp"
|
|
#include "Save/SaveManager.hpp"
|
|
#include "System/SysNew.hpp"
|
|
#include "input.hpp"
|
|
|
|
#include <nitro/math.h>
|
|
|
|
class UnkStruct_027e0ce0_34 {
|
|
public:
|
|
/* 00 */ unk32 mUnk_00[4];
|
|
/* 10 */ unk32 mUnk_10[4];
|
|
/* 20 */ unk32 mUnk_20;
|
|
/* 24 */ unk32 mUnk_24;
|
|
/* 28 */ unk32 mUnk_28;
|
|
/* 2C */ s32 mUnk_2C;
|
|
/* 30 */ u32 mSpiritTrackFlags;
|
|
/* 34 */ unk32 mUnk_34;
|
|
/* 38 */ u32 mTrackFlags[3];
|
|
/* 44 */
|
|
|
|
// overlay 8
|
|
void func_ov008_020b6a50();
|
|
|
|
// overlay 24
|
|
void func_ov024_020d3c60(SaveFile_00000_0000_Data_D8 *param1);
|
|
unk32 func_ov024_020d3cf4(unk32 param1);
|
|
unk32 func_ov024_020d3d20();
|
|
void func_ov024_020d3d80(unk32 param1);
|
|
void func_ov024_020d3d98(unk32 param1, unk32 param2);
|
|
bool func_ov024_020d3da8(unk32 param1, unk32 param2);
|
|
u32 func_ov024_020d3dc0(unk32 param1, unk32 param2);
|
|
bool func_ov024_020d3dcc();
|
|
unk32 func_ov024_020d3dec(unk32 param1);
|
|
unk32 func_ov024_020d3e0c(unk32 param1);
|
|
void func_ov024_020d3e30(unk32 param1, unk32 param2);
|
|
void *func_ov024_020d3e68(unk32 param1);
|
|
void SetTrackFlag(s32 flagPos, u16 flagValue, bool doSet);
|
|
bool func_ov024_020d3f4c(s8 param1, u16 param2);
|
|
void func_ov024_020d3f8c();
|
|
void func_ov024_020d3fc8();
|
|
void func_ov024_020d4008(unk32 param1);
|
|
void func_ov024_020d404c();
|
|
void func_ov024_020d4098(s32 *param1, s32 *param2);
|
|
|
|
static s8 func_ov024_020d3c54(unk32 param1);
|
|
|
|
// overlay 110
|
|
void func_ov110_02185d3c(ItemId itemId);
|
|
};
|
|
|
|
class UnkStruct_ov031_020f3310_00 {
|
|
public:
|
|
/* 00 */ STRUCT_PAD(0x00, 0x06);
|
|
/* 06 */ u16 mUnk_06;
|
|
/* 0A */
|
|
};
|
|
|
|
class UnkStruct_ov031_020f3310_04 {
|
|
public:
|
|
/* 00 */ STRUCT_PAD(0x00, 0x24);
|
|
/* 24 */ unk32 mUnk_24[4];
|
|
/* 34 */
|
|
};
|
|
|
|
class UnkStruct_ov031_020f3310 {
|
|
public:
|
|
/* 00 */ UnkStruct_ov031_020f3310_00 *mUnk_00;
|
|
/* 04 */ UnkStruct_ov031_020f3310_04 *mUnk_04;
|
|
/* 08 */ VecFx16 mUnk_08;
|
|
/* 20 */
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_38_Base {
|
|
public:
|
|
/* 00 (vtable) */
|
|
/* 04 */
|
|
|
|
// data_ov000_020b2838
|
|
/* 00 */ virtual ~UnkStruct_027e0ce0_38_Base();
|
|
/* 08 */ virtual bool vfunc_08(const UnkStruct_ov031_020f3310 *param1);
|
|
/* 0C */ virtual bool vfunc_0C();
|
|
/* 10 */ virtual void vfunc_10();
|
|
/* 14 */
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_38_10 {
|
|
public:
|
|
/* 00 */ unk32 mUnk_00;
|
|
/* 04 */ unk16 mUnk_04;
|
|
/* 06 */ unk16 mUnk_06;
|
|
/* 08 */ unk16 mUnk_08;
|
|
/* 0A */ unk16 mUnk_0A;
|
|
/* 0C */ unk32 mUnk_0C;
|
|
/* 10 */ unk32 mUnk_10;
|
|
/* 14 */ TouchControl mUnk_14;
|
|
/* 38 */ unk32 mUnk_38;
|
|
/* 3C */ unk8 mUnk_3C;
|
|
/* 3D */ unk8 mUnk_3D;
|
|
/* 3E */ unk16 mUnk_3E;
|
|
/* 40 */ unk16 mUnk_40;
|
|
/* 42 */ Input mUnk_42;
|
|
/* 48 */ TouchControl mUnk_48;
|
|
/* 6A */ Input mUnk_6A;
|
|
/* 70 */
|
|
|
|
UnkStruct_027e0ce0_38_10();
|
|
|
|
void func_ov026_020f4870();
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_38_58 {
|
|
public:
|
|
/* 000 */ STRUCT_PAD(0x00, 0x338);
|
|
/* 338 */ unk32 mUnk_338; // rope pulled timer
|
|
/* 33C */ unk32 mUnk_33C; // rope pull strength, 0 to 8
|
|
/* 340 */ STRUCT_PAD(0x340, 0x3D4);
|
|
/* 3D4 */
|
|
|
|
UnkStruct_027e0ce0_38_58();
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_38_5C {
|
|
public:
|
|
/* 000 */ STRUCT_PAD(0x00, 0x1A4);
|
|
/* 1A4 */
|
|
|
|
UnkStruct_027e0ce0_38_5C();
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_38_60 {
|
|
public:
|
|
/* 00 */ STRUCT_PAD(0x00, 0xD8);
|
|
/* D8 */
|
|
|
|
UnkStruct_027e0ce0_38_60();
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_38_158 {
|
|
public:
|
|
/* 000 */ STRUCT_PAD(0x00, 0x45C);
|
|
/* 45C */
|
|
|
|
UnkStruct_027e0ce0_38_158();
|
|
|
|
void func_ov026_020dc2d0();
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_38_174 {
|
|
public:
|
|
/* 00 */ STRUCT_PAD(0x00, 0x28);
|
|
/* 28 */
|
|
|
|
UnkStruct_027e0ce0_38_174();
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_38_19C {
|
|
public:
|
|
/* 00 */ STRUCT_PAD(0x00, 0x2C);
|
|
/* 2C */
|
|
|
|
UnkStruct_027e0ce0_38_19C();
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_38_1C8 {
|
|
public:
|
|
/* 00 */ STRUCT_PAD(0x00, 0x34);
|
|
/* 34 */
|
|
|
|
UnkStruct_027e0ce0_38_1C8();
|
|
};
|
|
|
|
// train player stuff
|
|
class UnkStruct_027e0ce0_38 : public UnkStruct_027e0ce0_38_Base {
|
|
public:
|
|
/* 000 (base) */
|
|
/* 04 */ void *mUnk_04;
|
|
/* 08 */ void *mUnk_08;
|
|
/* 0C */ unk32 mUnk_0C;
|
|
/* 010 */ UnkStruct_027e0ce0_38_10 *mUnk_010;
|
|
/* 014 */ Input mUnk_014;
|
|
/* 01C */ VecFx32 mPos;
|
|
/* 028 */ VecFx32 mPrevPos;
|
|
/* 034 */ VecFx32 mVel;
|
|
/* 040 */ VecFx32 mAccel;
|
|
/* 04C */ unk32 mUnk_04C;
|
|
/* 050 */ unk32 mUnk_050;
|
|
/* 054 */ unk16 mUnk_054;
|
|
/* 056 */ unk16 mUnk_056;
|
|
/* 058 */ UnkStruct_027e0ce0_38_58 *mUnk_058; // related to train invicibility state in the dark realm (+0x35C/+0x360)
|
|
/* 05C */ UnkStruct_027e0ce0_38_5C *mUnk_05C;
|
|
/* 060 */ UnkStruct_027e0ce0_38_60 mUnk_060;
|
|
/* 138 */ unk32 mUnk_138;
|
|
/* 13C */ unk32 mUnk_13C;
|
|
/* 140 */ unk32 mUnk_140;
|
|
/* 144 */ unk16 mUnk_144;
|
|
/* 146 */ unk8 mUnk_146;
|
|
/* 147 */ unk8 mUnk_147;
|
|
/* 148 */ unk8 mUnk_148;
|
|
/* 149 */ unk8 mUnk_149;
|
|
/* 14A */ unk8 mUnk_14A;
|
|
/* 14B */ unk8 mUnk_14B;
|
|
/* 14C */ unk8 mUnk_14C;
|
|
/* 150 */ unk32 mUnk_150;
|
|
/* 154 */ unk32 mUnk_154;
|
|
/* 158 */ UnkStruct_027e0ce0_38_158 *mUnk_158;
|
|
/* 15C */ STRUCT_PAD(0x15C, 0x170);
|
|
/* 170 */ unk32 mUnk_170;
|
|
/* 174 */ UnkStruct_027e0ce0_38_174 mUnk_174;
|
|
/* 19C */ UnkStruct_027e0ce0_38_19C mUnk_19C;
|
|
/* 1C8 */ UnkStruct_027e0ce0_38_1C8 mUnk_1C8;
|
|
/* 1FC */ CellAnimObject mUnk_1FC;
|
|
/* 274 */ UnkStruct_ov019_020d24c8_28_258_00 mUnk_274;
|
|
/* 280 */
|
|
|
|
UnkStruct_027e0ce0_38();
|
|
|
|
// data_ov026_0213562c
|
|
/* 00 */ virtual ~UnkStruct_027e0ce0_38() override;
|
|
/* 0C */ virtual bool vfunc_0C() override;
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_40_Base_14 {
|
|
public:
|
|
/* 00 */ TouchControl mTouchControl;
|
|
/* 22 */ STRUCT_PAD(0x22, 0x60);
|
|
/* 60 */
|
|
|
|
UnkStruct_027e0ce0_40_Base_14();
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_40_Base_74 {
|
|
public:
|
|
/* 00 */ STRUCT_PAD(0x00, 0x5C);
|
|
/* 5C */
|
|
|
|
UnkStruct_027e0ce0_40_Base_74();
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_40_Base_78 {
|
|
public:
|
|
/* 00 */ STRUCT_PAD(0x00, 0x04);
|
|
/* 04 */
|
|
|
|
UnkStruct_027e0ce0_40_Base_78();
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_40_Base_7C {
|
|
public:
|
|
/* 00 */ STRUCT_PAD(0x00, 0x18);
|
|
/* 18 */
|
|
|
|
UnkStruct_027e0ce0_40_Base_7C();
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_40_Base_94 {
|
|
public:
|
|
/* 00 */ STRUCT_PAD(0x00, 0x14);
|
|
/* 14 */ ActorRef mUnk_14;
|
|
/* 18 */ unk32 mUnk_18;
|
|
/* 1C */ ActorRef mUnk_1C;
|
|
/* 20 */ unk32 mUnk_20;
|
|
/* 24 */ STRUCT_PAD(0x24, 0x48);
|
|
/* 48 */ ActorRef mUnk_48;
|
|
/* 4C */ unk32 mUnk_4C;
|
|
/* 50 */ unk32 mUnk_50;
|
|
/* 54 */ unk32 mUnk_54;
|
|
/* 58 */ unk32 mUnk_58;
|
|
/* 5C */ unk32 mUnk_5C; // seems to be the walking speed of link??
|
|
/* 60 */ unk32 mUnk_60;
|
|
/* 64 */ unk32 mUnk_64;
|
|
/* 68 */ unk32 mUnk_68;
|
|
/* 6C */ unk32 mUnk_6C;
|
|
/* 70 */
|
|
|
|
UnkStruct_027e0ce0_40_Base_94();
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_40_Base {
|
|
public:
|
|
/* 000 */ unk32 mUnk_000;
|
|
/* 004 */ void *mUnk_004;
|
|
/* 008 */ ItemManager *mpItemManager;
|
|
/* 00C */ Input mButtons;
|
|
/* 012 */ unk16 mUnk_012;
|
|
/* 014 */ UnkStruct_027e0ce0_40_Base_14 mUnk_014;
|
|
/* 074 */ UnkStruct_027e0ce0_40_Base_74 *mUnk_074;
|
|
/* 078 */ UnkStruct_027e0ce0_40_Base_78 *mUnk_078;
|
|
/* 07C */ UnkStruct_027e0ce0_40_Base_7C mUnk_07C;
|
|
/* 094 */ UnkStruct_027e0ce0_40_Base_94 mUnk_094;
|
|
/* 104 */ unk16 mUnk_104; // set to 0 on idle, set to 3 when pulling out an item
|
|
/* 106 */ unk8 mUnk_106;
|
|
/* 107 */ unk8 mUnk_107;
|
|
/* 108 */
|
|
|
|
UnkStruct_027e0ce0_40_Base(unk32 param1, void *param2, ItemManager *param3);
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_40_108_Base : public LinkList<UnkStruct_027e0ce0_40_108_Base> {
|
|
public:
|
|
/* 00 (vtable) */
|
|
/* 04 (base) */
|
|
/* 0C */
|
|
|
|
UnkStruct_027e0ce0_40_108_Base() {
|
|
this->SetPrev(NULL);
|
|
}
|
|
|
|
// data_ov101_02183908
|
|
/* 00 */ virtual void vfunc_00() = 0;
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_40_108 : public UnkStruct_027e0ce0_40_108_Base {
|
|
public:
|
|
/* 00 (base) */
|
|
/* 0C */ STRUCT_PAD(0x0C, 0x40);
|
|
/* 40 */
|
|
|
|
UnkStruct_027e0ce0_40_108() {}
|
|
|
|
// data_ov031_02112b60
|
|
/* 00 */ virtual void vfunc_00() override;
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_40_14C {
|
|
/* 00 */ STRUCT_PAD(0x00, 0x94);
|
|
/* 94 */
|
|
|
|
UnkStruct_027e0ce0_40_14C();
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_40_150 {
|
|
/* 00 */ STRUCT_PAD(0x00, 0x0C);
|
|
/* 0C */
|
|
|
|
UnkStruct_027e0ce0_40_150();
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_40_328 {
|
|
/* 000 */ STRUCT_PAD(0x00, 0x154);
|
|
/* 154 */
|
|
|
|
UnkStruct_027e0ce0_40_328();
|
|
};
|
|
|
|
// land player stuff
|
|
class UnkStruct_027e0ce0_40 : public UnkStruct_027e0ce0_40_Base {
|
|
public:
|
|
/* 000 (base) */
|
|
/* 108 */ UnkStruct_027e0ce0_40_108 mUnk_108;
|
|
/* 148 */ void *mUnk_148;
|
|
/* 14C */ UnkStruct_027e0ce0_40_14C *mUnk_14C;
|
|
/* 150 */ UnkStruct_027e0ce0_40_150 *mUnk_150;
|
|
/* 154 */ PlayerActor mPlayer;
|
|
/* 328 */ UnkStruct_027e0ce0_40_328 *mUnk_328;
|
|
/* 32C */ PlayerActor *mpPlayer; // set to mPlayer
|
|
/* 330 */ UnkStruct_027e0ce0_40_328 *mUnk_330; // set to mUnk_328
|
|
/* 334 */ ItemFlag mEquippedItem;
|
|
/* 338 */ bool mIsSceneTowerInteriorStairs;
|
|
/* 339 */ bool mIsSceneTowerExteriorStairs;
|
|
/* 33A */ bool mIsSceneBossByrne;
|
|
/* 33B */ unk8 mUnk_33B;
|
|
/* 33C */
|
|
|
|
// param2 is UnkStruct_027e0ce0::mUnk_20
|
|
// param3 is UnkStruct_027e0ce0::mUnk_04
|
|
// param4 is UnkStruct_027e0ce0::mUnk_28
|
|
UnkStruct_027e0ce0_40(unk32 param1, void *param2, void *param3, ItemManager *param4);
|
|
};
|
|
|
|
union UnkStruct_027e0478 {
|
|
UnkStruct_027e0ce0_38 train;
|
|
UnkStruct_027e0ce0_40 land;
|
|
};
|
|
|
|
extern UnkStruct_027e0478 data_027e0478;
|
|
|
|
class UnkStruct_027e0ce0_3C {
|
|
public:
|
|
/* 00 */ STRUCT_PAD(0x00, 0x98);
|
|
/* 98 */
|
|
|
|
UnkStruct_027e0ce0_3C();
|
|
};
|
|
|
|
class UnkStruct_027e0ce0_1C {
|
|
public:
|
|
/* 00 */ STRUCT_PAD(0x00, 0x0C);
|
|
/* 0C */ MapObjectProfile_Derived2_20_Base *mUnk_0C;
|
|
};
|
|
|
|
// PlayerManager?
|
|
class UnkStruct_027e0ce0 : public AutoInstance<UnkStruct_027e0ce0> {
|
|
public:
|
|
/* 00 */ unk8 mHealth;
|
|
/* 01 */ unk8 mHealthMax;
|
|
/* 02 */ unk8 mUnk_02;
|
|
/* 03 */ unk8 mUnk_03;
|
|
/* 04 */ unk32 *mUnk_04;
|
|
/* 08 */ unk32 *mUnk_08;
|
|
/* 0C */ unk32 *mUnk_0C; // vtable
|
|
/* 10 */ unk32 *mUnk_10;
|
|
/* 14 */ unk32 *mUnk_14;
|
|
/* 18 */ unk32 *mUnk_18;
|
|
/* 1C */ UnkStruct_027e0ce0_1C *mUnk_1C;
|
|
/* 20 */ unk32 *mUnk_20;
|
|
/* 24 */ unk32 mUnk_24;
|
|
/* 28 */ ItemManager *mUnk_28;
|
|
/* 2C */ ItemManager *mUnk_2C; // same as above
|
|
/* 30 */ unk32 *mUnk_30; // ?
|
|
/* 34 */ UnkStruct_027e0ce0_34 *mUnk_34;
|
|
/* 38 */ UnkStruct_027e0ce0_38 *mUnk_38; // pointer to data_027e0478 when on the train
|
|
/* 3C */ UnkStruct_027e0ce0_3C *mUnk_3C; // cutscene related
|
|
/* 40 */ UnkStruct_027e0ce0_40 *mUnk_40; // pointer to data_027e0478 when not on the train
|
|
/* 44 */
|
|
|
|
UnkStruct_027e0ce0();
|
|
~UnkStruct_027e0ce0();
|
|
|
|
// itcm
|
|
VecFx32 *func_01fff148(unk32 param1);
|
|
bool func_01fff1a4();
|
|
bool func_01fff1e0();
|
|
|
|
// overlay 0
|
|
void func_ov000_0208a318(unk32 param1, unk32 param2, unk32 param3);
|
|
void func_ov000_0208bbd4(unk32 param1, VecFx32 *param2, u16 param3);
|
|
|
|
void func_ov000_0208bbd4(unk32 param1, VecFx32 *param2, void *param3);
|
|
void func_ov000_0208bc1c(unk32 param1, unk32 param2, unk32 param3, unk32 param4, unk32 param5, unk32 param6);
|
|
void func_ov000_0208bc9c(unk32 param1, unk32 param2);
|
|
void func_ov000_0208bd30(bool param1, unk32 param2, unk32 param3, unk32 param4);
|
|
|
|
static UnkStruct_027e0ce0_34 *func_ov000_0205c904();
|
|
|
|
// overlay 1
|
|
void func_ov001_020bc5f8();
|
|
void func_ov001_020bc524(bool param1);
|
|
|
|
static UnkStruct_027e0ce0 *Create();
|
|
static void Destroy();
|
|
|
|
// overlay 17
|
|
void func_ov017_020bd69c();
|
|
};
|
|
|
|
extern UnkStruct_027e0ce0 *data_027e0ce0;
|