Skip to content

Commit 15e7302

Browse files
authored
Fix s_Bone, S_skeleton, s_800BCE18_0 layout (#391)
1 parent 6fa0c2b commit 15e7302

3 files changed

Lines changed: 144 additions & 162 deletions

File tree

include/bodyprog/bodyprog.h

Lines changed: 24 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -921,12 +921,12 @@ typedef struct
921921
} s_func_800452EC;
922922

923923
// Maybe a collection of matrices.
924-
typedef struct
924+
typedef struct _Bone
925925
{
926926
s_800BCE18_2BEC_0_0 field_x0;
927927
s8 field_10;
928928
s8 unk_11[3];
929-
s32 field_14;
929+
struct _Bone* next_14;
930930
} s_Bone;
931931
STATIC_ASSERT_SIZEOF(s_Bone, 24);
932932

@@ -937,19 +937,11 @@ typedef struct
937937
u8 boneIdx_1; // Current bone index? Used in traversal.
938938
u8 field_2;
939939
s8 field_3;
940-
s_func_800452EC* field_4;
940+
s_Bone* bones_4;
941941
s_Bone* bones_8;
942-
943-
// Maybe incorrect.
944-
s8 field_C[4]; // Maybe struct similar to `s_Bone` but smaller.
945-
u8 field_10; // Some count related to bone hierarchy.
946-
s8 field_11;
947-
s8 field_12;
948-
s8 field_13;
949-
struct s_Skeleton* skeleton_14;
950-
s8 unk_18[4];
942+
s_Bone boneArr_C[56];
951943
} s_Skeleton;
952-
STATIC_ASSERT_SIZEOF(s_Skeleton, 28);
944+
STATIC_ASSERT_SIZEOF(s_Skeleton, 0x54C);
953945

954946
typedef struct
955947
{
@@ -1055,8 +1047,9 @@ typedef struct
10551047
s32 queueIdx_4;
10561048
s_LmHeader* lmHdr_8;
10571049
s_FsImageDesc texture_C;
1058-
s_Skeleton field_14; // Could be different struct?
1059-
} s_800BCE18_0_CC; // Unknown size.
1050+
s_Skeleton skeleton_14; // Could be different struct?
1051+
} s_SkeletonStuff; // Unknown size.
1052+
STATIC_ASSERT_SIZEOF(s_SkeletonStuff, 0x560);
10601053

10611054
typedef struct _MapType
10621055
{
@@ -1074,14 +1067,11 @@ typedef struct
10741067
s8 field_4;
10751068
u8 unk_5[3];
10761069
VECTOR3 field_8; // Position.
1077-
s32 field_14; // Used frequently as `s_LmHeader*`, but code adds file lengths to it. Could just be `u8*` pointing to current file data?
1078-
s_800BCE18_0_CC* field_18[Chara_Count]; // Per-character data? So far only seen accessed by `map4_s03::800D59EC` which calls `func_8003BE50(Chara_Twinfeeler)`.
1079-
s_800BCE18_0_CC field_CC;
1080-
u8 unk_D0[368];
1081-
s32 field_26C;
1082-
u8 unk_270[752];
1070+
s32 dataPtr_14; // Used frequently as `s_LmHeader*`, but code adds file lengths to it. Could just be `u8*` pointing to current file data?
1071+
s_SkeletonStuff* charaSkeletons_18[Chara_Count];
1072+
s_SkeletonStuff skeletons_CC[4];
10831073
} s_800BCE18_0;
1084-
STATIC_ASSERT_SIZEOF(s_800BCE18_0, 1376);
1074+
STATIC_ASSERT_SIZEOF(s_800BCE18_0, (0x560 * 4 + 0xcc));
10851075

10861076
typedef struct
10871077
{
@@ -1118,21 +1108,19 @@ typedef struct
11181108
s_FsImageDesc imageDesc_C;
11191109
s_LmHeader* lmHdr_14;
11201110
s_Bone bone_18;
1121-
} s_800BCE18_1BAC;
1111+
} s_heldItem;
11221112

11231113
typedef struct
11241114
{
1125-
s_800BCE18_0 field_0[4];
1126-
u8 unk_1580[204];
1127-
s_800BCE18_0_CC field_164C;
1128-
u8 unk_1650[1328];
1129-
s_800BCE18_1BAC heldItem_1BAC;
1115+
s_800BCE18_0 field_0;
1116+
s_SkeletonStuff harrySkel_164C;
1117+
s_heldItem heldItem_1BAC;
11301118
VC_CAMERA_INTINFO vcCameraInternalInfo_1BDC; // Debug camera info.
11311119
s_LmHeader field_1BE4;
11321120
s32 field_2BE8;
1133-
s_800BCE18_2BEC field_2BEC[1]; // Unknown size, valid count determined by `field_2BE8`?
1121+
s_800BCE18_2BEC field_2BEC[29]; // Size based on the check in func_8003C92C
11341122
} s_800BCE18;
1135-
STATIC_ASSERT_SIZEOF(s_800BCE18, 11260);
1123+
STATIC_ASSERT_SIZEOF(s_800BCE18, 11260 + (16*28));
11361124

11371125
// IPD data?
11381126
typedef struct
@@ -2529,7 +2517,7 @@ void SysState_Fmv_Update();
25292517

25302518
s32 Map_TypeGet();
25312519

2532-
void func_8003C1AC(s_800BCE18_0_CC* arg0);
2520+
void func_8003C1AC(s_SkeletonStuff* arg0);
25332521

25342522
void func_8003C220(s_MapOverlayHeader* mapHeader, s32 playerPosX, s32 playerPosZ);
25352523

@@ -2558,7 +2546,7 @@ void func_8003D550(s32 arg0, s32 arg1);
25582546
/** Called by some chara init funcs, similar to `func_8003DD80`? */
25592547
void func_8003D468(s32 arg0, bool flag);
25602548

2561-
void func_8003D6A4(s_800BCE18_0_CC* arg0);
2549+
void func_8003D6A4(s_SkeletonStuff* arg0);
25622550

25632551
/** Return type assumed. */
25642552
void func_8003D160();
@@ -2841,7 +2829,7 @@ void func_80045108(s_Skeleton* skel, s_LmHeader* lmHdr, u8* arg2, s32 arg3);
28412829
void func_800451B0(s_Skeleton* skel, s_LmHeader* lmHdr, s32* arg2);
28422830

28432831
/** Anim func. Param names are rough. */
2844-
void func_80045258(s_Skeleton** skels, s_Bone* bones, s32 boneIdx, s_LmHeader* lmHdr);
2832+
void func_80045258(s_Bone** skels, s_Bone* bones, s32 boneIdx, s_LmHeader* lmHdr);
28452833

28462834
/** Anim func. */
28472835
void func_800452EC(s_Skeleton* skel);
@@ -3961,7 +3949,7 @@ void func_8003BE28();
39613949

39623950
// ====================
39633951

3964-
s32 func_8003BE50(s32 idx);
3952+
s_Bone* func_8003BE50(s32 idx);
39653953

39663954
void GameFs_BgEtcGfxLoad();
39673955

@@ -3982,7 +3970,7 @@ void func_8003C0C0();
39823970
/** Allocates player model? */
39833971
void func_8003C110();
39843972

3985-
void func_8003C1AC(s_800BCE18_0_CC* arg0);
3973+
void func_8003C1AC(s_SkeletonStuff* arg0);
39863974

39873975
void Ipd_ActiveChunksClear1();
39883976

@@ -4017,7 +4005,7 @@ void func_8003D938();
40174005

40184006
void func_8003D95C();
40194007

4020-
void func_8003D9C8(s_800BCE18_0_CC* arg0);
4008+
void func_8003D9C8(s_SkeletonStuff* arg0);
40214009

40224010
void func_8003DA9C(s32 arg0, GsCOORDINATE2* coord, s32 arg2, s16 arg3, s32 arg4);
40234011

0 commit comments

Comments
 (0)