more vfuncs progress

This commit is contained in:
Yanis002
2025-01-26 23:54:14 +01:00
parent 2107619c79
commit 1518fbfa80
7 changed files with 449 additions and 26 deletions
+12
View File
@@ -18,6 +18,18 @@ struct UnkStruct_027e103c {
/* 24 */ u8 mUnk_24;
/* 25 */ unk8 mUnk_25[7];
/* 2c */
void func_ov000_020cf284(unk32, unk32);
unk32 func_ov000_020cf4bc(void);
unk8* func_ov000_020cef9c(void);
void func_ov000_020cfb38(void);
unk32 func_ov000_020cf488(void);
void func_ov000_020cfa24(void);
void func_ov000_020cfe40(unk32, unk32);
void func_ov005_02104028(unk32);
unk32 func_ov000_020cf0bc(void);
void func_ov005_02103f8c(unk32*);
};
extern UnkStruct_027e103c *data_027e103c;
+3
View File
@@ -124,6 +124,8 @@ struct UnkStruct_027e0d38 {
/* 24 */ void *mUnk_24;
/* 28 */ void *mUnk_28;
/* 2c */
unk32 func_ov000_02078b40(void);
};
typedef u32 ItemModelId;
@@ -332,3 +334,4 @@ public:
};
extern ItemManager *gItemManager;
extern UnkStruct_027e0d38 *data_027e0d38;
+1 -1
View File
@@ -115,7 +115,7 @@ public:
bool func_02036d30(UnkStruct_027E0C68_UnkSubClass3* param_2);
bool func_02036d4c(UnkStruct_027E0C68_UnkSubClass3* param_2);
void func_02036d6c(void);
UnkStruct_027E0C68_UnkSubClass1* func_02036da8(u32 param_2, s32* param_3);
UnkStruct_027E0C68_UnkSubClass1* func_02036da8(u32 param_2, s16* param_3);
void func_02036edc(u32 param_2, u8 param_3);
UnkStruct_027E0C68_UnkSubClass1* func_02036f68(u32 param_2, u8* param_3);
UnkStruct_027E0C68_UnkSubClass2* func_020370d0(unk32 param_2, unk32 param_3);
@@ -6,6 +6,8 @@
// temp
#define UNK_TYPE void
#define ESCAPE_SEQUENCE_MARKER '\x1A'
typedef struct UnkStruct_0203b264 {
/* 0 */ u8 mUnk_0[0x4];
/* 4 */ u16 *mUnk_4;
@@ -32,7 +34,8 @@ typedef struct UnkStruct1 {
class UnkSubClass1_UnkownClass1 {
public:
/* 0x00 */ UnkStruct1* unk_00;
/* 0x04 */ u32* unk_04;
/* 0x04 */ unk16 unk_04;
/* 0x06 */ unk16 unk_06;
/* 0x08 */ u32* unk_08;
/* 0x0C */ unk32 unk_0C;
/* 0x10 */ unk32 unk_10;
@@ -82,6 +85,7 @@ public:
/* 0x04 */
void func_0203ec34(void);
void func_0203ebe0(void);
void func_0203ebf8(void);
};
@@ -93,6 +97,7 @@ public:
void func_0203ee80(unk32);
void func_0203ef78(unk16, u16, unk8);
void func_0203ef78(unk16); // overload?
void func_0203ee48(void);
};
class UnkSubClass1_unk_124 {
@@ -233,7 +238,8 @@ public:
/* 0x528 */ s16* unk_528;
/* 0x52C */ u8 unk_52C[0x30];
/* 0x55C */ unk32 unk_55C;
/* 0x560 */ unk32 unk_560;
/* 0x560 */ unk16 unk_560;
/* 0x560 */ unk16 unk_562;
/* 0x564 */ unk32 unk_564;
/* 0x568 */ unk32 unk_568;
/* 0x56C */ unk16 unk_56C;
@@ -279,8 +285,8 @@ public:
/* 0x44 */ virtual void func_0203a3fc(s32 touchLastX, s32 touchLastY) override;
/* 0x48 */ virtual void func_0203a328(void) override;
/* 0x4C */ virtual void func_02039a3c(void) override;
/* 0x50 */ virtual void func_0203a7f0(EntryINF1* param_2, int param_3, u8* param_4) override;
/* 0x54 */ virtual UNK_TYPE func_0203a988(void) override;
/* 0x50 */ virtual void func_0203a7f0(EntryINF1* param_2, u32 param_3, s16* param_4, unk32 param_5) override;
/* 0x54 */ virtual void func_0203a988(void) override;
/* 0x58 */ virtual void func_0203af1c(void) override;
/* 0x5C */ virtual void func_0203aea8(void) override;
/* 0x60 */ virtual UNK_TYPE func_0203b410(void) override;
@@ -314,9 +320,16 @@ public:
unk32 func_0203de14(unk32);
void func_0203e090(void);
void func_0203e0f8(void);
void func_020392b4(void);
void func_0203b764(void);
void func_0203a188(unk32, unk32);
void func_0203e1b0(unk32, unk32, unk32);
unk32 func_0203a6d0(unk32, unk32);
unk32 func_0203b0bc(void);
void func_02038f44(EntryINF1* param_2, u32 param_3, s16* param_4, unk32 param_5, unk32 param_6);
u16* func_02037604(u16**);
void func_02039398(void);
// not sure it belongs to this class:
void func_02032fcc(unk32, unk32);
@@ -329,4 +342,6 @@ public:
unk32 func_0203e284(UnkStruct_0203b264*, unk32, unk32);
void func_0203e2ac(unk32* param_2);
void func_0203fc78(unk32*, unk32*);
void func_0203cabc(unk32);
};
-1
View File
@@ -124,7 +124,6 @@ ARM ActorNavi *ItemManager::GetFairy(FairyId id) const {
return mFairies[id];
}
extern UnkStruct_027e0d38 *data_027e0d38;
extern unk32 gPlayerAnimHandler;
extern "C" void LoadEquipItemModel(unk32 param1, ItemFlag param2);
extern "C" void _ZNK11ItemManager15GetEquippedItemEv();
+12 -9
View File
@@ -442,16 +442,15 @@ ARM void UnkStruct_027E0C68::func_02036d6c(void) {
}
// non-matching
ARM UnkStruct_027E0C68_UnkSubClass1* UnkStruct_027E0C68::func_02036da8(u32 param_2, s32* param_3) {
ARM UnkStruct_027E0C68_UnkSubClass1* UnkStruct_027E0C68::func_02036da8(u32 param_2, s16* param_3) {
EntryINF1 *pEVar1;
EntryINF1 *pEVar2;
UnkStruct_027E0C68_UnkSubClass1 *pSVar4;
BMGGroups *pBVar5;
bool bVar6;
u8 iStack_38;
s16 iStack_38;
int iStack_34;
int iStack_30;
u8 uStack_2c;
pEVar1 = func_02037258(&this->pGroups->entries[param_2 >> 0x10], param_2 & 0xFFFF);
@@ -461,7 +460,7 @@ ARM UnkStruct_027E0C68_UnkSubClass1* UnkStruct_027E0C68::func_02036da8(u32 param
if ((data_02056be4[data_027e077c.mUnk_0] & 1) == 0) {
pSVar4 = this->unk_28[4];
func_02037628(&iStack_38);
func_02037628((u8*)&iStack_38);
// ???
bVar6 = (data_02056be4[data_027e077c.mUnk_0] & 1) == 0;
@@ -472,12 +471,16 @@ ARM UnkStruct_027E0C68_UnkSubClass1* UnkStruct_027E0C68::func_02036da8(u32 param
data_02056be4[0] = 0;
}
uStack_2c = 1;
iStack_38 = *param_3;
iStack_34 = param_3[1];
iStack_30 = param_3[2];
// iStack_34 = param_3[1];
// iStack_30 = param_3[2];
pBVar5 = this->pGroups;
pSVar4->func_0203a7f0(pEVar1, BMG_GET_MSG_ADDR(pBVar5, param_2), &iStack_38);
// pSVar4->func_0203a7f0(pEVar1, BMG_GET_MSG_ADDR(pBVar5, param_2), (s16*)&iStack_38, 1);
BMGFileInfo* entry = &(pBVar5)->entries[(param_2) >> 0x10];
pSVar4->func_0203a7f0(pEVar1,
((u32)entry->pDAT1 + (((func_02037258(entry, (((param_2))) & 0xFFFF))->offset) & ~1)),
// BMG_GET_MSG_ADDR(pBVar5, param_2),
(s16*)&iStack_38, 1);
func_ov000_020d77e4(data_ov000_020eec9c, 0x1C);
return pSVar4;
@@ -536,7 +539,7 @@ ARM UnkStruct_027E0C68_UnkSubClass1* UnkStruct_027E0C68::func_02036f68(u32 param
pSVar5->unk_164 = pSVar2;
pSVar5->unk_418 = this->unk_28[5];
pSVar5->func_0203a7f0(pEVar1, BMG_GET_MSG_ADDR(this->pGroups, param_2), param_3);
pSVar5->func_0203a7f0(pEVar1, BMG_GET_MSG_ADDR(this->pGroups, param_2), (s16*)param_3, 0);
if (func_ov000_020d7f18(data_ov000_020eec9c, 0x19) == 0 && func_ov000_020d7f18(data_ov000_020eec9c, 0x18) == 0 &&
func_ov000_020d7f18(data_ov000_020eec9c, 0x34) == 0 && func_ov000_020d7f18(data_ov000_020eec9c, 0x35) == 0 &&
@@ -1,11 +1,16 @@
#include "global.h"
#include "Message/UnkStruct_027E0C68_UnkSubClass1.hpp"
#include "Message/MessageManager.hpp"
#include "Save/AdventureFlags.hpp"
#include "DTCM/UnkStruct_027e103c.hpp"
#include "Player/TouchControl.hpp"
#include "Item/ItemManager.hpp"
extern u32 func_01ff9b4c(unk32, unk32);
extern unk32 func_0203c084(void);
extern void func_ov018_02169634(UnkStruct_027E0C68_UnkSubClass1*);
extern unk32 func_ov000_02079e04(void);
extern "C" u32 func_01ff9b4c(unk32, unk32);
extern "C" unk32 func_0203c084(void);
extern "C" void func_ov018_02169634(UnkStruct_027E0C68_UnkSubClass1*);
extern "C" unk32 func_ov000_02079e04(void);
extern "C" unk32 func_01ff9b88(unk32, unk32);
struct Struct_027e0db0 {
/* 0x00 */ unk32 unk_00;
@@ -21,7 +26,7 @@ struct UnkStruct2 {
};
extern UnkStruct2 data_027e077c;
extern u8 data_02056be4[];
extern unk32 data_027e0618[];
extern u8 data_027e0618[];
class UnkClass_027e0cbc {
public:
@@ -37,6 +42,17 @@ extern "C" void func_020347b0(unk32, unk16, unk32*, unk32*, unk32, unk32);
extern THUMB unk32 func_0202ab48(void);
extern "C" void func_02034984(unk32, unk32, unk32, unk32, unk32);
extern "C" void func_02034698(unk32, unk32, unk32*, unk32*);
extern TouchControl data_027e0d78;
class UnkClass_027e0e28 {
public:
unk32 func_ov000_0207bc48();
};
extern UnkClass_027e0e28* data_027e0e28;
extern u8 data_027e0c54;
extern unk32* data_ov009_0211f5b4;
extern "C" unk32 func_ov003_020f3f94(unk32*);
extern unk32* data_02057ed4;
// see Actor.cpp
typedef struct UnkStruct_01ffbe34 {
@@ -57,6 +73,16 @@ typedef struct UnkStruct_01ffbe34 {
} UnkStruct_01ffbe34;
extern "C" void func_01ffbe34(UnkStruct_01ffbe34 *param1);
class UnkClass_027e1054 {
public:
unk32 unk_00;
unk32 unk_04;
void func_ov003_020f4874(void);
};
extern UnkClass_027e1054 data_027e1054;
ARM unk32 UnkStruct_027E0C68_UnkSubClass1::func_02038c34(unk32 param_2) {
s16 iVar1;
unk32 iVar2;
@@ -342,16 +368,338 @@ ARM void UnkStruct_027E0C68_UnkSubClass1::func_0203a328(void) {
this->unk_410.func_0203ec34();
}
// non-matching
ARM void UnkStruct_027E0C68_UnkSubClass1::func_0203a3fc(s32 touchLastX, s32 touchLastY) {
// TODO
unk32 iVar2;
unk32 iVar5;
unk32 iStack_14;
unk32 iStack_18;
if (this->unk_15C <= 0 || this->func_0203951c() == 0) {
return;
}
iStack_14 = 0;
iStack_18 = 0;
this->func_0203bdcc(&iStack_14, &iStack_18);
iVar5 = touchLastX - iStack_14;
iVar2 = touchLastY - iStack_18;
if ((data_027e103c != 0 && data_027e103c->mUnk_1c == 0x8F) || (data_027e077c.mUnk_0 != data_027e077c.mUnk_4)) {
return;
}
if ((data_02056be4[data_027e077c.mUnk_0] & 2) == 0) {
if ((data_027e0d78.mFlags & 1) != 0) {
if (this->unk_50 == 0 && data_027e0d38 != 0) {
if (func_ov000_02079e04() == 0 && data_027e0e28->func_ov000_0207bc48() == 0) {
if (data_027e0618[0x101] == 0 && data_027e103c->mUnk_24 == 0) {
return;
}
}
}
if (this->func_0203a6d0(iVar5, iVar2) == 0 && this->func_0203a2c0() != 0) {
this->unk_57F = 1;
}
} else {
if (data_027e0d78.mTouch != 0) {
this->func_0203a6d0(iVar5, iVar2);
return;
}
if (data_027e0d78.mTouch == 0) {
switch(this->unk_151) {
case 3:
case 4:
break;
case 5:
if (data_027e103c->mUnk_20 == 3) {
this->func_0203b0ec(1);
}
break;
case 6:
if (data_027e103c->mUnk_20 == 5) {
this->func_0203b0ec(1);
}
break;
case 7:
break;
case 2:
if (this->unk_164->unk_168.unk_06 <= 0) {
if ((data_027e0d78.mFlags & 2) != 0) {
this->unk_13C = 0;
if (this->func_0203b0bc() != 0) {
this->func_0203b0ec(1);
}
this->unk_1F0.unk_64 = 0;
this->unk_1F0.func_020352d8();
}
}
break;
case 0:
case 1:
default:
if ((data_027e0d78.mFlags & 2) != 0) {
this->unk_13C = 0;
if (this->func_0203b0bc() != 0) {
this->func_0203b0ec(1);
}
this->unk_1F0.unk_64 = 0;
this->unk_1F0.func_020352d8();
}
break;
}
}
}
}
}
ARM void UnkStruct_027E0C68_UnkSubClass1::func_0203a7f0(EntryINF1* param_2, int param_3, u8* param_4) {
// TODO
// non-matching
ARM void UnkStruct_027E0C68_UnkSubClass1::func_0203a7f0(EntryINF1* param_2, u32 param_3, s16* param_4, unk32 param_5) {
bool bVar5;
bool bVar2;
int iVar4;
int iVar6;
s16 temp;
iVar6 = param_4[0];
if (data_027e0c54 != 0) {
UnkStruct_027E0C68_UnkSubClass1* pVar4 = data_027e0c68.func_02036700();
if (pVar4 != NULL && pVar4->unk_15C > 0) {
this->func_02038b40();
}
}
if (*((s32*)data_027e0618) == 2 && data_027e0d38->func_ov000_02078b40() == 2 && func_ov003_020f3f94(data_ov009_0211f5b4) == 0) {
UnkStruct_027E0C68_UnkSubClass1* pVar4 = data_027e0c68.unk_28[4];
if (pVar4 != NULL && pVar4->unk_15C > 0) {
this->func_02038b40();
}
}
this->unk_586 = (data_02056be4[data_027e077c.mUnk_0] & 1) != 0;
temp = param_4[8];
if (temp >= 0 && param_4[9] >= 0) {
temp = param_4[10];
}
if (temp < 0) {
this->unk_57B = temp;
} else {
this->unk_57B = 0;
}
this->func_02038f44(param_2, param_3, param_4, param_5, iVar6);
this->unk_574 = 0;
if (data_027e0d38 != 0 && (data_02056be4[data_027e077c.mUnk_0] & 1) != 0 && (param_4[11])) {
data_027e103c->func_ov000_020cf284(0x80, 0);
}
}
ARM UNK_TYPE UnkStruct_027E0C68_UnkSubClass1::func_0203a988(UNK_TYPE) {
// TODO
// non-matching (can't get the switch decomp...)
ARM void UnkStruct_027E0C68_UnkSubClass1::func_0203a988(void) {
short sVar1;
int iVar2;
u16* puVar3;
int iVar4;
u16 uVar5;
unk8 uVar6;
u16 *local_54 [17];
if ((this->unk_18 & 0x1FFFFFFF) != 8) {
this->func_0203e060(0xE0, 0x40);
if (this->unk_154 == 0) {
iVar2 = 2;
} else {
iVar2 = (int)*(char *)(this->unk_154->unk_05);
}
this->func_0203dcfc(this->unk_50, 0, (int)this->unk_11E, iVar2);
}
this->unk_410.func_0203ebe0();
this->unk_580 = 0;
this->func_020392b4();
this->unk_57C = 0;
this->unk_164->unk_168.unk_06 = 0;
this->unk_57D = 0;
this->unk_57F = 0;
this->unk_57A = 0;
if (this->unk_154->unk_06 < 2) {
this->unk_580 = 1;
}
this->unk_424.func_0203ee48();
this->unk_151 = 1;
puVar3 = this->unk_12C;
local_54[0] = puVar3;
iVar2 = 0;
for (iVar2 = 0; func_01ff9b88(iVar2, this->unk_154->unk_06) == 0; iVar2++, puVar3 = this->func_02037604(local_54)) {
if (local_54[iVar2] != NULL) {
puVar3 = local_54[iVar2];
}
if (local_54[iVar2] == NULL || puVar3 == NULL) {
break;
}
if (*local_54[iVar2] == ESCAPE_SEQUENCE_MARKER) {
uVar5 = (local_54[iVar2][3] << 0x10) | local_54[iVar2][2];
if (0x00010017 < uVar5) {
if (uVar5 == 0x00020001) {
sVar1 = this->unk_164->unk_168.unk_06;
// (param_1 + sVar1 * 2 + 0x562)[0] = '\x1B';
// (param_1 + sVar1 * 2 + 0x562)[1] = 0;
}
} else {
// switch (*local_54[iVar2]) {
// case 0:
// continue;
// case 1:
// case 2:
// case 3:
// case 4:
// if (this->unk_164->unk_168.unk_06 == 0) {
// this->func_0203cabc(this->unk_164->unk_50);
// this->unk_164->unk_50 = 0x1A; // ???
// while (this->unk_564 < 4) {
// this->unk_564--; // ???
// }
// this->unk_580 = 1;
// } else {
// this->unk_151 = 4
// }
// break;
// case 5:
// case 6:
// case 7:
// case 8:
// case 9:
// case 10:
// case 11:
// case 12:
// case 13:
// case 14:
// case 15:
// case 16:
// case 17:
// case 18:
// case 19:
// case 20:
// case 21:
// case 22:
// case 23:
// case 24:
// case 25:
// sVar1 = this->unk_164->unk_168.unk_06;
// break;
// default:
// return;
// }
}
}
if (*local_54[iVar2] == '\n') {
continue;
}
}
/* while(true) {
// switch (*local_54[iVar2]) {
// case ESCAPE_SEQUENCE_MARKER:
// case '\n':
// }
if (*local_54[iVar2] == ESCAPE_SEQUENCE_MARKER) {
uVar5 = (local_54[iVar2][3] << 0x10) | local_54[iVar2][2];
if (0x00010017 < uVar5) {
if (uVar5 == 0x00020001) {
sVar1 = this->unk_164->unk_168.unk_06;
// (param_1 + sVar1 * 2 + 0x562)[0] = '\x1B';
// (param_1 + sVar1 * 2 + 0x562)[1] = 0;
}
} else {
/* WARNING: Could not recover jumptable at 0x0203aa7c. Too many branches */
/* WARNING: Treating indirect jump as call
// if (-1 < (int)(uVar5 - 0x10000)) {
// (*(code *)((uVar5 - 0x10000) * 4 + 0x203aa84))();
// return;
// }
}
} else if (*local_54[iVar2] == '\n') {
iVar2 = iVar2 + 1;
iVar4 = func_01ff9b88(iVar2, this->unk_154->unk_06);
if (iVar4 == 0) {
break;
}
}
}
*/
if (this->unk_15E == '\x06') {
this->func_0203e060(0xE0, 0x30);
if (this->unk_154 == 0) {
iVar2 = 2;
} else {
iVar2 = this->unk_154->unk_05;
}
this->func_0203dcfc(this->unk_50,0,(int)this->unk_11E,iVar2);
}
if (this->unk_580 != 0) {
this->func_0203e060(0xE0, 0x28);
if (this->unk_154 == 0) {
iVar2 = 2;
} else {
iVar2 = this->unk_154->unk_05;
}
this->func_0203dcfc(this->unk_50, 0, this->unk_11E, iVar2);
if (this->unk_50 == 0) {
uVar6 = 1;
} else {
uVar6 = 7;
}
// *(undefined *)((int)PTR_PTR_0203aea4->unk_28 + ((byte)param_1[0x50] - 0x28)) = uVar6;
// PTR_PTR_0203aea4[this->unk_50] = uVar6;
data_027e0c68.unk_28[this->unk_50]->unk_18 = uVar6;
this->func_0203b764();
if (this->unk_15F == 0 || this->unk_154->unk_06 < 3) {
this->unk_168.unk_64 = this->unk_168.unk_7C;
this->unk_168.func_020352d8();
} else {
this->unk_168.func_020351b8(1, 0, 0, 0);
}
}
this->unk_1F0.unk_64 = 0;
this->unk_1F0.func_020352d8();
this->func_02039578(0, 0, 0, 0);
// (**(code **)(*(int *)param_1 + 0x10))(0);
}
ARM void UnkStruct_027E0C68_UnkSubClass1::func_0203aea8(void) {
@@ -365,8 +713,51 @@ ARM void UnkStruct_027E0C68_UnkSubClass1::func_0203aea8(void) {
}
}
// non-matching
ARM void UnkStruct_027E0C68_UnkSubClass1::func_0203af1c(void) {
// TODO
bool bVar1;
unk8* puVar2;
int iVar3;
char *pcVar4;
if (this->unk_160 != 0) {
if (data_027e103c != NULL) {
if (data_027e103c->func_ov000_020cf4bc() != 0) {
puVar2 = data_027e103c->func_ov000_020cef9c();
if ((puVar2 + 0x244) != NULL || (puVar2[0x250] == '\x02')) {
puVar2 = data_027e103c->func_ov000_020cef9c();
if ((UnkStruct_027E0C68_UnkSubClass1*)(puVar2 + 0x244) == this) {
data_027e103c->func_ov000_020cfb38();
}
}
}
if (this->unk_581 != 0 && data_027e103c->func_ov000_020cf488() != 0) {
data_027e103c->func_ov000_020cfa24();
this->unk_581 = 0;
}
if (this->unk_582 != 0) {
data_027e103c->func_ov000_020cfe40(0, 2);
this->unk_582 = 0;
}
if (this->unk_583 != 0) {
data_027e103c->func_ov005_02104028(0);
this->unk_583 = 0;
}
}
if (data_027e0618[0] == 2 && func_ov000_02079e04() && (data_027e1054.unk_04 + 0x99) != 0 &&
(data_027e077c.mUnk_0 != 0x39 || data_027e103c->func_ov000_020cf0bc())) {
data_027e1054.func_ov003_020f4874();
data_027e103c->func_ov005_02103f8c(data_02057ed4);
}
}
this->func_02039398();
}
// non-matching (regalloc)