This commit is contained in:
Donkey Kong 2023-05-22 00:07:49 +09:30
parent 8c80160c7d
commit c0d5fdb761
12 changed files with 525 additions and 307 deletions

View File

@ -772,7 +772,7 @@ void func_8070E8DC(u8 arg0);
void func_80630300(void);
void func_8063039C(void);
void func_806307AC(Chunk14 *current);
void func_806307CC(Chunk14 *arg0, s32 arg1, u8 arg2, u8 arg3, s8 *arg4);
void func_806307CC(Chunk14 *arg0, Model2Model *arg1, u8 arg2, u8 arg3, s8 *arg4);
u8 func_80663FCC(s16 model2ArrayIndex);
s32 func_80629148(void);
void func_806CBE90(void);
@ -1164,7 +1164,7 @@ void func_80665ACC(Actor *arg0);
void func_80665548(void);
u8 func_80665558(void);
u8 func_80665AAC(Actor *arg0);
Chunk14 *func_806303C4(Chunk14 *arg0, u8 arg1, s32 arg2, f32 arg3, f32 arg4, f32 arg5, s16 arg6, s16 arg7, u8 arg8, s16 arg9, u8 argA);
Chunk14 *func_806303C4(Chunk14 *arg0, u8 arg1, Model2Model *arg2, f32 arg3, f32 arg4, f32 arg5, s16 arg6, s16 arg7, u8 arg8, s16 arg9, u8 argA);
void func_80666280(u8 arg0);
void func_80666290(Actor *arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, u8 arg5);
void func_806663F8(void);

View File

@ -1366,10 +1366,238 @@ typedef struct {
u8 unk2EF;
} CharacterChange;
typedef struct global_asm_struct_83 GlobalASMStruct83;
struct global_asm_struct_83 {
Actor* unk0;
u32 unk4;
Actor* unk8;
GlobalASMStruct83 *next;
};
typedef struct model_2_model_50_b8 Model2Model50_B8;
struct model_2_model_50_b8 {
s32 unk0[4];
s32 unk10[4];
s32 unk20[4];
s32 unk30;
s32 unk34;
s16 unk38; // Used
s16 unk3A; // Used
s32 unk3C;
s32 unk40;
s32 unk44;
u8 unk48; // Used
u8 unk49; // used
u8 unk4A;
u8 unk4B;
s32 unk4C;
s32 unk50; // Used
s32 unk54; // Used
s32 unk58;
s32 unk5C;
s32 unk60[4];
s32 unk70[4];
s32 unk80[4];
s32 unk90[4];
s32 unkA0[4];
s32 unkB0[4];
s32 unkC0[4];
u8 unkD0;
u8 unkD1;
u8 unkD2;
u8 unkD3;
Model2Model50_B8 *next; // unkD4
};
typedef struct {
s32 unk0;
f32 unk4;
s32 unk8;
s32 unkC;
s32 unk10;
s32 unk14;
s32 unk18;
s32 unk1C;
s16 unk20;
s16 unk22;
} Model2Model54_BC;
typedef struct {
s32 unk0[4];
s32 unk10[4];
s32 unk20[4];
s32 unk30[4];
s32 unk40;
s32 unk44;
s32 unk48;
s16 unk4C;
u8 unk4E; // Used
u8 unk4F; // Used
Model2Model50_B8 *unk50; // Used, pointer
Model2Model54_BC *unk54;
s32 unk58;
s32 unk5C;
s32 unk60[4];
s32 unk70[4];
s32 unk80[4];
s32 unk90[4];
s32 unkA0[4];
s32 unkB0;
s32 unkB4;
Model2Model50_B8 *unkB8; // Used, pointer
Model2Model54_BC *unkBC; // Used
} Model2Model;
typedef struct {
s32 unk0;
s32 unk4;
s32 unk8;
s32 unkC;
s16 unk10;
s16 unk12;
s32 unk14;
s32 unk18;
s32 unk1C;
s32 unk20;
s32 unk24;
s32 unk28;
s32 unk2C;
s32 unk30;
s32 unk34;
s32 unk38;
s32 unk3C;
s32 unk40;
s32 unk44;
s8 unk48[1]; // TODO: How many elements?
s8 unk49;
s8 unk4A;
s8 unk4B;
s32 unk4C;
s32 unk50;
s8 unk54;
s8 unk55;
s8 unk56;
s8 unk57;
s32 unk58;
s32 unk5C;
u8 unk60;
u8 unk61;
u8 unk62;
u8 unk63;
s16 unk64;
s16 unk66;
s32 unk68;
s32 unk6C;
s32 unk70;
s32 unk74;
s32 unk78;
s32 unk7C;
s32 unk80;
s32 unk84;
s32 unk88;
s32 unk8C;
s32 unk90;
s32 unk94;
s32 unk98;
s32 unk9C;
s32 unkA0;
} OM2_unk7C;
typedef struct {
s32 unk0;
s32 unk4;
s32 unk8;
s32 unkC;
s32 unk10;
s32 unk14;
s32 unk18;
u8 unk1C;
u8 unk1D;
u8 unk1E;
u8 unk1F;
s32 unk20;
s32 unk24;
s32 unk28;
s32 unk2C;
s32 unk30;
s32 unk34;
s32 unk38;
s16 unk3C;
s16 unk3E;
} OM2_unk24;
typedef struct OM2_unk74 OM2_unk74;
struct OM2_unk74 {
f32 unk0;
f32 unk4;
f32 unk8;
s32 next;
};
typedef struct {
s16 unk0;
u8 unk2;
u8 unk3;
u8 unk4;
s8 unk5;
u8 unk6;
u8 unk7;
s32 unk8;
f32 unkC;
s16 unk10;
s16 unk12;
} OM2_unk78;
typedef struct object_model2 {
f32 x_position; // at 0x00
f32 y_position; // at 0x04
f32 z_position; // at 0x08
f32 hitbox_scale; // at 0x0C
f32 x_rotation; // at 0x10
f32 y_rotation; // at 0x14
f32 z_rotation; // at 0x18
f32 unk1C;
Model2Model *model_pointer; // at 0x20
OM2_unk24 *unk24; // labelled behavior_type_pointer in ScriptHawk
s32 unk28;
s32 unk2C;
s32 unk30;
s32 unk34;
s32 unk38;
s32 unk3C;
s32 unk40;
s32 unk44;
s32 unk48;
s32 unk4C;
s32 unk50;
s32 unk54;
s32 unk58;
s32 unk5C;
s32 unk60;
s32 unk64;
s32 unk68;
s32 unk6C;
GlobalASMStruct83 *unk70;
OM2_unk74 *unk74;
OM2_unk78 *unk78; // used in func_80650AD8, weird format
OM2_unk7C *unk7C; // labelled behavior_pointer in ScriptHawk
s32 unk80;
s16 object_type; // at 0x84
s16 unk86;
s16 unk88;
s16 unk8A;
u8 unk8C; // bitfield, collectable state (u8)
u8 unk8D;
u8 unk8E;
u8 unk8F;
} ObjectModel2;
typedef struct chunk_14 Chunk14;
struct chunk_14 {
s32 unk0;
Model2Model *unk0;
f32 unk4;
f32 unk8;
f32 unkC;

View File

@ -201,223 +201,6 @@ typedef struct DKTVExtraData {
extern DKTVExtraData D_807ECE20;
typedef struct model_2_model_50_b8 Model2Model50_B8;
struct model_2_model_50_b8 {
s32 unk0[4];
s32 unk10[4];
s32 unk20[4];
s32 unk30;
s32 unk34;
s16 unk38; // Used
s16 unk3A; // Used
s32 unk3C;
s32 unk40;
s32 unk44;
u8 unk48; // Used
u8 unk49; // used
u8 unk4A;
u8 unk4B;
s32 unk4C;
s32 unk50; // Used
s32 unk54; // Used
s32 unk58;
s32 unk5C;
s32 unk60[4];
s32 unk70[4];
s32 unk80[4];
s32 unk90[4];
s32 unkA0[4];
s32 unkB0[4];
s32 unkC0[4];
s32 unkD0;
Model2Model50_B8 *next; // unkD4
};
typedef struct {
s32 unk0;
f32 unk4;
s32 unk8;
s32 unkC;
s32 unk10;
s32 unk14;
s32 unk18;
s32 unk1C;
s16 unk20;
s16 unk22;
} Model2Model54_BC;
typedef struct {
s32 unk0[4];
s32 unk10[4];
s32 unk20[4];
s32 unk30[4];
s32 unk40;
s32 unk44;
s32 unk48;
s16 unk4C;
u8 unk4E; // Used
u8 unk4F; // Used
Model2Model50_B8 *unk50; // Used, pointer
Model2Model54_BC *unk54;
s32 unk58;
s32 unk5C;
s32 unk60[4];
s32 unk70[4];
s32 unk80[4];
s32 unk90[4];
s32 unkA0[4];
s32 unkB0;
s32 unkB4;
Model2Model50_B8 *unkB8; // Used, pointer
Model2Model54_BC *unkBC; // Used
} Model2Model;
typedef struct {
s32 unk0;
s32 unk4;
s32 unk8;
s32 unkC;
s16 unk10;
s16 unk12;
s32 unk14;
s32 unk18;
s32 unk1C;
s32 unk20;
s32 unk24;
s32 unk28;
s32 unk2C;
s32 unk30;
s32 unk34;
s32 unk38;
s32 unk3C;
s32 unk40;
s32 unk44;
s8 unk48[1]; // TODO: How many elements?
s8 unk49;
s8 unk4A;
s8 unk4B;
s32 unk4C;
s32 unk50;
s8 unk54;
s8 unk55;
s8 unk56;
s8 unk57;
s32 unk58;
s32 unk5C;
u8 unk60;
u8 unk61;
u8 unk62;
u8 unk63;
s16 unk64;
s16 unk66;
s32 unk68;
s32 unk6C;
s32 unk70;
s32 unk74;
s32 unk78;
s32 unk7C;
s32 unk80;
s32 unk84;
s32 unk88;
s32 unk8C;
s32 unk90;
s32 unk94;
s32 unk98;
s32 unk9C;
s32 unkA0;
} OM2_unk7C;
typedef struct {
s32 unk0;
s32 unk4;
s32 unk8;
s32 unkC;
s32 unk10;
s32 unk14;
s32 unk18;
u8 unk1C;
u8 unk1D;
u8 unk1E;
u8 unk1F;
s32 unk20;
s32 unk24;
s32 unk28;
s32 unk2C;
s32 unk30;
s32 unk34;
s32 unk38;
s16 unk3C;
s16 unk3E;
} OM2_unk24;
typedef struct OM2_unk74 OM2_unk74;
struct OM2_unk74 {
f32 unk0;
f32 unk4;
f32 unk8;
s32 next;
};
typedef struct {
s16 unk0;
u8 unk2;
u8 unk3;
u8 unk4;
s8 unk5;
u8 unk6;
u8 unk7;
s32 unk8;
f32 unkC;
s16 unk10;
s16 unk12;
} OM2_unk78;
typedef struct object_model2 {
f32 x_position; // at 0x00
f32 y_position; // at 0x04
f32 z_position; // at 0x08
f32 hitbox_scale; // at 0x0C
f32 x_rotation; // at 0x10
f32 y_rotation; // at 0x14
f32 z_rotation; // at 0x18
s32 unk1C;
Model2Model *model_pointer; // at 0x20
OM2_unk24 *unk24; // labelled behavior_type_pointer in ScriptHawk
s32 unk28;
s32 unk2C;
s32 unk30;
s32 unk34;
s32 unk38;
s32 unk3C;
s32 unk40;
s32 unk44;
s32 unk48;
s32 unk4C;
s32 unk50;
s32 unk54;
s32 unk58;
s32 unk5C;
s32 unk60;
s32 unk64;
s32 unk68;
s32 unk6C;
s32 unk70;
OM2_unk74 *unk74;
OM2_unk78 *unk78; // used in func_80650AD8, weird format
OM2_unk7C *unk7C; // labelled behavior_pointer in ScriptHawk
s32 unk80;
s16 object_type; // at 0x84
s16 unk86;
s16 unk88;
s16 unk8A;
u8 unk8C; // bitfield, collectable state (u8)
u8 unk8D;
u8 unk8E;
u8 unk8F;
} ObjectModel2;
extern ObjectModel2 *D_807F6000;
extern u16 D_80744710[]; // = { // Permanent flag index lookup array

View File

@ -531,7 +531,7 @@ us,.code,func_806E61D0,100,yes
us,.code,func_8065E0CC,88,yes
us,.code,func_8072E7DC,140,no
us,.code,func_80672680,92,yes
us,.code,func_80636074,240,no
us,.code,func_80636074,240,yes
us,.code,func_806767B4,44,yes
us,.code,func_806D9FD0,848,no
us,.code,func_806FBEF0,1600,no
@ -1044,7 +1044,7 @@ us,.code,func_8064C814,484,no
us,.code,func_8066164C,12,yes
us,.code,func_806DF280,272,yes
us,.code,func_806D1E90,152,yes
us,.code,func_806355DC,540,no
us,.code,func_806355DC,540,yes
us,.code,func_806CC5DC,92,yes
us,.code,func_80679334,348,no
us,.code,func_8069D078,32,yes
@ -1417,7 +1417,7 @@ us,.code,func_806C71E0,8,yes
us,.code,func_80732DAC,64,yes
us,.code,func_8067A170,108,yes
us,.code,func_8060CB74,40,yes
us,.code,func_80636164,172,no
us,.code,func_80636164,172,yes
us,.code,func_8065054C,164,yes
us,.code,func_806C4E8C,40,yes
us,.code,func_806F4DC0,180,no
@ -1762,7 +1762,7 @@ us,.code,func_806FCC88,1036,no
us,.code,func_8062E67C,540,yes
us,.code,func_806CFC90,216,yes
us,.code,func_8067AF74,168,yes
us,.code,func_806357F8,240,no
us,.code,func_806357F8,240,yes
us,.code,func_8073AB00,584,no
us,.code,func_8066EBF4,120,yes
us,.code,func_806D8FCC,360,yes
@ -2211,7 +2211,7 @@ us,.code,func_8068AD7C,2704,no
us,.code,func_8072E320,556,no
us,.code,func_806CF4B8,200,yes
us,.code,func_806E41EC,916,yes
us,.code,func_80635548,64,no
us,.code,func_80635548,64,yes
us,.code,func_80670548,1812,no
us,.code,func_806C71C0,8,yes
us,.code,func_80604BE8,152,yes
@ -2828,7 +2828,7 @@ us,.code,func_806E186C,484,yes
us,.code,func_8060B968,104,no
us,.code,func_8064EA48,108,yes
us,.code,func_80685E78,232,no
us,.code,func_80633570,64,no
us,.code,func_80633570,64,yes
us,.code,func_80661EC4,72,yes
us,.code,func_80630B70,604,no
us,.code,func_80602D4C,120,yes

1 version section function length matching
531 us .code func_8065E0CC 88 yes
532 us .code func_8072E7DC 140 no
533 us .code func_80672680 92 yes
534 us .code func_80636074 240 no yes
535 us .code func_806767B4 44 yes
536 us .code func_806D9FD0 848 no
537 us .code func_806FBEF0 1600 no
1044 us .code func_8066164C 12 yes
1045 us .code func_806DF280 272 yes
1046 us .code func_806D1E90 152 yes
1047 us .code func_806355DC 540 no yes
1048 us .code func_806CC5DC 92 yes
1049 us .code func_80679334 348 no
1050 us .code func_8069D078 32 yes
1417 us .code func_80732DAC 64 yes
1418 us .code func_8067A170 108 yes
1419 us .code func_8060CB74 40 yes
1420 us .code func_80636164 172 no yes
1421 us .code func_8065054C 164 yes
1422 us .code func_806C4E8C 40 yes
1423 us .code func_806F4DC0 180 no
1762 us .code func_8062E67C 540 yes
1763 us .code func_806CFC90 216 yes
1764 us .code func_8067AF74 168 yes
1765 us .code func_806357F8 240 no yes
1766 us .code func_8073AB00 584 no
1767 us .code func_8066EBF4 120 yes
1768 us .code func_806D8FCC 360 yes
2211 us .code func_8072E320 556 no
2212 us .code func_806CF4B8 200 yes
2213 us .code func_806E41EC 916 yes
2214 us .code func_80635548 64 no yes
2215 us .code func_80670548 1812 no
2216 us .code func_806C71C0 8 yes
2217 us .code func_80604BE8 152 yes
2828 us .code func_8060B968 104 no
2829 us .code func_8064EA48 108 yes
2830 us .code func_80685E78 232 no
2831 us .code func_80633570 64 no yes
2832 us .code func_80661EC4 72 yes
2833 us .code func_80630B70 604 no
2834 us .code func_80602D4C 120 yes

View File

@ -531,7 +531,7 @@ us,.code,func_806E61D0,100,yes
us,.code,func_8065E0CC,88,yes
us,.code,func_8072E7DC,140,no
us,.code,func_80672680,92,yes
us,.code,func_80636074,240,no
us,.code,func_80636074,240,yes
us,.code,func_806767B4,44,yes
us,.code,func_806D9FD0,848,no
us,.code,func_806FBEF0,1600,no
@ -1044,7 +1044,7 @@ us,.code,func_8064C814,484,no
us,.code,func_8066164C,12,yes
us,.code,func_806DF280,272,yes
us,.code,func_806D1E90,152,yes
us,.code,func_806355DC,540,no
us,.code,func_806355DC,540,yes
us,.code,func_806CC5DC,92,yes
us,.code,func_80679334,348,no
us,.code,func_8069D078,32,yes
@ -1417,7 +1417,7 @@ us,.code,func_806C71E0,8,yes
us,.code,func_80732DAC,64,yes
us,.code,func_8067A170,108,yes
us,.code,func_8060CB74,40,yes
us,.code,func_80636164,172,no
us,.code,func_80636164,172,yes
us,.code,func_8065054C,164,yes
us,.code,func_806C4E8C,40,yes
us,.code,func_806F4DC0,180,no
@ -1762,7 +1762,7 @@ us,.code,func_806FCC88,1036,no
us,.code,func_8062E67C,540,yes
us,.code,func_806CFC90,216,yes
us,.code,func_8067AF74,168,yes
us,.code,func_806357F8,240,no
us,.code,func_806357F8,240,yes
us,.code,func_8073AB00,584,no
us,.code,func_8066EBF4,120,yes
us,.code,func_806D8FCC,360,yes
@ -2211,7 +2211,7 @@ us,.code,func_8068AD7C,2704,no
us,.code,func_8072E320,556,no
us,.code,func_806CF4B8,200,yes
us,.code,func_806E41EC,916,yes
us,.code,func_80635548,64,no
us,.code,func_80635548,64,yes
us,.code,func_80670548,1812,no
us,.code,func_806C71C0,8,yes
us,.code,func_80604BE8,152,yes
@ -2828,7 +2828,7 @@ us,.code,func_806E186C,484,yes
us,.code,func_8060B968,104,no
us,.code,func_8064EA48,108,yes
us,.code,func_80685E78,232,no
us,.code,func_80633570,64,no
us,.code,func_80633570,64,yes
us,.code,func_80661EC4,72,yes
us,.code,func_80630B70,604,no
us,.code,func_80602D4C,120,yes

1 version section function length matching
531 us .code func_8065E0CC 88 yes
532 us .code func_8072E7DC 140 no
533 us .code func_80672680 92 yes
534 us .code func_80636074 240 no yes
535 us .code func_806767B4 44 yes
536 us .code func_806D9FD0 848 no
537 us .code func_806FBEF0 1600 no
1044 us .code func_8066164C 12 yes
1045 us .code func_806DF280 272 yes
1046 us .code func_806D1E90 152 yes
1047 us .code func_806355DC 540 no yes
1048 us .code func_806CC5DC 92 yes
1049 us .code func_80679334 348 no
1050 us .code func_8069D078 32 yes
1417 us .code func_80732DAC 64 yes
1418 us .code func_8067A170 108 yes
1419 us .code func_8060CB74 40 yes
1420 us .code func_80636164 172 no yes
1421 us .code func_8065054C 164 yes
1422 us .code func_806C4E8C 40 yes
1423 us .code func_806F4DC0 180 no
1762 us .code func_8062E67C 540 yes
1763 us .code func_806CFC90 216 yes
1764 us .code func_8067AF74 168 yes
1765 us .code func_806357F8 240 no yes
1766 us .code func_8073AB00 584 no
1767 us .code func_8066EBF4 120 yes
1768 us .code func_806D8FCC 360 yes
2211 us .code func_8072E320 556 no
2212 us .code func_806CF4B8 200 yes
2213 us .code func_806E41EC 916 yes
2214 us .code func_80635548 64 no yes
2215 us .code func_80670548 1812 no
2216 us .code func_806C71C0 8 yes
2217 us .code func_80604BE8 152 yes
2828 us .code func_8060B968 104 no
2829 us .code func_8064EA48 108 yes
2830 us .code func_80685E78 232 no
2831 us .code func_80633570 64 no yes
2832 us .code func_80661EC4 72 yes
2833 us .code func_80630B70 604 no
2834 us .code func_80602D4C 120 yes

View File

@ -9,7 +9,7 @@
</mask>
<g mask="url(#anybadge_1)">
<path fill="#555" d="M0 0h77v20H0z"/>
<path fill="#c05700" d="M77 0h67v20H77z"/>
<path fill="#c05800" d="M77 0h67v20H77z"/>
<path fill="url(#b)" d="M0 0h144v20H0z"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
@ -17,7 +17,7 @@
<text x="38.5" y="14">global_asm</text>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="111.5" y="15" fill="#010101" fill-opacity=".3">22.7103%</text>
<text x="110.5" y="14">22.7103%</text>
<text x="111.5" y="15" fill="#010101" fill-opacity=".3">22.8175%</text>
<text x="110.5" y="14">22.8175%</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -9,7 +9,7 @@
</mask>
<g mask="url(#anybadge_1)">
<path fill="#555" d="M0 0h132v20H0z"/>
<path fill="#c05500" d="M132 0h67v20H132z"/>
<path fill="#c05600" d="M132 0h67v20H132z"/>
<path fill="url(#b)" d="M0 0h199v20H0z"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
@ -17,7 +17,7 @@
<text x="66.0" y="14">Donkey Kong 64 (US)</text>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="166.5" y="15" fill="#010101" fill-opacity=".3">22.2233%</text>
<text x="165.5" y="14">22.2233%</text>
<text x="166.5" y="15" fill="#010101" fill-opacity=".3">22.3035%</text>
<text x="165.5" y="14">22.3035%</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -68,9 +68,7 @@ u8 func_8072F4A8(Actor *arg0, u8 arg1, f32 *arg2, f32 *arg3, f32 *arg4) {
*arg2 = D_807F6000[model2ArrayIndex].x_position;
*arg3 = D_807F6000[model2ArrayIndex].y_position;
*arg4 = D_807F6000[model2ArrayIndex].z_position;
// TODO: Better way to match this once proper type is known
// It'll probably be D_807F6000[model2ArrayIndex].unk24->unk0
if (*((s32*)D_807F6000[model2ArrayIndex].unk24) & 1) {
if (D_807F6000[model2ArrayIndex].unk24->unk0 & 1) {
phi_t0 = TRUE;
}
break;

View File

@ -68,7 +68,7 @@ void func_8063039C(void) {
D_807F5FF4 = NULL;
}
Chunk14 *func_806303C4(Chunk14 *arg0, u8 arg1, s32 arg2, f32 arg3, f32 arg4, f32 arg5, s16 arg6, s16 arg7, u8 arg8, s16 arg9, u8 argA) {
Chunk14 *func_806303C4(Chunk14 *arg0, u8 arg1, Model2Model *arg2, f32 arg3, f32 arg4, f32 arg5, s16 arg6, s16 arg7, u8 arg8, s16 arg9, u8 argA) {
Chunk14 *temp_v0;
Chunk14 *phi_v1;
s32 phi_v0;
@ -143,7 +143,7 @@ Chunk14 *func_806303C4(Chunk14 *arg0, u8 arg1, s32 arg2, f32 arg3, f32 arg4, f32
return phi_a1;
}
Chunk14 *func_80630588(Chunk14 *arg0, s32 arg1, u8 arg2, u8 *arg3) {
Chunk14 *func_80630588(Chunk14 *arg0, Model2Model *arg1, u8 arg2, u8 *arg3) {
u8 phi_v0;
Chunk14 *phi_t0;
Chunk14 *phi_a2;
@ -240,7 +240,7 @@ void func_806307AC(Chunk14 *current) {
}
}
void func_806307CC(Chunk14 *arg0, s32 arg1, u8 arg2, u8 arg3, s8 *arg4) {
void func_806307CC(Chunk14 *arg0, Model2Model *arg1, u8 arg2, u8 arg3, s8 *arg4) {
s8 found = FALSE;
if (arg2 == 1) {

View File

@ -323,8 +323,15 @@ void func_80632FCC(s16 arg0, u8 arg1) {
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_36880/func_806333F8.s")
// Loop, struct arg1, doable
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_36880/func_80633570.s")
void func_80633570(GlobalASMStruct83 *arg0) {
GlobalASMStruct83 *next;
while (arg0 != NULL) {
next = arg0->next;
func_8061130C(arg0);
arg0 = next;
}
}
void func_806335B0(s32 arg0, u8 arg1, s32 arg2, f32 *arg3, f32 *arg4, f32 *arg5) {
s32 var_v0;
@ -496,18 +503,98 @@ void func_80635098(Model2Model50_B8 *arg0, s16 arg1, s32 arg2, s32 arg3) {
}
}
// Similar to below, loops over DL looking for specific commands (G_SETTIMG (0xFD), G_SETPRIMCOLOR (0xFA))
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_36880/func_80635114.s")
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_36880/func_80635214.s")
/*
// Aooears to find the offset of the first G_ENDDL command in a Display List
// TODO: Regalloc
s32 func_80635214(Gfx *arg0) {
s32 found;
s32 offset;
offset = 0;
found = FALSE;
while (!found) {
if (((arg0++)->words.w0 >> 0x18) == G_ENDDL) {
found = TRUE;
}
offset += 8;
}
return offset;
}
*/
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_36880/func_8063524C.s")
typedef struct {
s32 unk0; // TODO: proper members
} Struct80635548_unk24;
typedef struct {
s32 unk0;
s32 unk4;
s32 unk8;
s32 unkC;
s32 unk10;
s32 unk14;
s32 unk18;
s32 unk1C;
u8 unk20;
u8 unk21;
u8 unk22;
u8 unk23;
Struct80635548_unk24 *unk24[1]; // TODO: How many?
s32 unk28;
s32 unk2C;
s32 unk30;
void *unk34[1]; // TODO: How many?
} Struct80635548;
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_36880/func_80635468.s")
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_36880/func_80635548.s")
/*
// TODO: Hmm
void func_80635468(Struct80635548_unk24 *arg0, Struct80635548 *arg1) {
s16 temp_a1;
s32 i;
s32 var_v0;
void *var_s2;
var_s2 = arg0->unk70 + arg0 + 4;
if (*(arg0->unk6C + arg0) != 0) {
var_v0 = 7;
} else {
var_v0 = 0x19;
}
for (i = 0; i < arg1->unk20; i++) {
arg1->unk24[i] = getPointerTableFile(var_v0, var_s2->unk0, 1, 0);
temp_a1 = var_s2->unk2;
if (temp_a1 != -1) {
arg1->unk34[i] = getPointerTableFile(var_v0, temp_a1, 1, 0);
} else {
arg1->unk34[i] = NULL;
}
var_s2 += 0x30;
}
}
*/
void func_80635548(s32 arg0, Struct80635548 *arg1) {
s32 i;
for (i = 0; i < arg1->unk20; i++) {
arg1->unk24[i] = 0;
arg1->unk34[i] = 0;
}
}
extern s32 D_80747D70;
void func_806355DC(s32 arg0, u8 arg1);
void func_80635588(void) {
s32 temp_s1;
s32 i;
@ -519,14 +606,106 @@ void func_80635588(void) {
func_80659350();
}
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_36880/func_806355DC.s")
void func_80605380(s16);
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_36880/func_806357F8.s")
void func_8063DE68(void*);
void func_8072F09C(s32 arg0);
void func_806645B8(s16 arg0);
void func_806348B4(void *arg0);
void func_8066C904(void *arg0);
Chunk14 *func_80630588(Chunk14 *arg0, s32 arg1, u8 arg2, u8 *arg3);
void func_806338B4(void *arg0);
void func_8064F804(void *arg0);
void func_806593C8(s32 arg0, s32 arg1);
void func_80636074(ObjectModel2 *arg0);
void func_806355DC(s32 arg0, u8 arg1) {
s16 sp36;
s16 sp34;
u8 sp33;
if (arg1 == 1) {
arg0 = func_80659470(arg0);
}
func_8062D2AC(D_807F6000[arg0].model_pointer, &sp34, 0);
func_80630588(0, D_807F6000[arg0].model_pointer, 2, &sp33);
func_8066C904(&D_807F6000[arg0].unk28);
func_806348B4(&D_807F6000[arg0].unk48);
func_80633570(D_807F6000[arg0].unk70);
func_806338B4(D_807F6000[arg0].unk74);
func_8064F804(D_807F6000[arg0].unk78);
func_80636074(&D_807F6000[arg0]);
if (D_807F6000[arg0].unk7C != NULL) {
func_8063DE68(D_807F6000[arg0].unk7C);
}
D_807F6240[D_807F6000[arg0].unk8A] = -1;
func_806645B8(D_807F6000[arg0].unk88);
sp36 = D_807F6000[arg0].unk88;
func_806594C8(sp36);
func_8072F09C(sp36);
if (D_807F6000[arg0].unk7C != NULL) {
if (D_807F6000[arg0].unk7C->unk10 != -1) {
func_80605380(D_807F6000[arg0].unk7C->unk10);
}
if (D_807F6000[arg0].unk7C->unk12 != -1) {
func_80605380( D_807F6000[arg0].unk7C->unk12);
}
}
if ((arg0 + 1) != D_80747D70) {
func_806593C8(D_807F6000[D_80747D70 - 1].unk88, arg0);
}
memcpy(&D_807F6000[arg0], &D_807F6000[D_80747D70 - 1], sizeof(ObjectModel2));
D_80747D70 -= 1;
}
void func_806357F8(s32 arg0, f32 *arg1, f32 *arg2, f32 *arg3, f32 *arg4, f32 *arg5, f32 *arg6, f32 *arg7, f32 *arg8, u8 arg9) {
if (arg9 == 1) {
arg0 = func_80659470(arg0);
}
*arg1 = D_807F6000[arg0].x_position;
*arg2 = D_807F6000[arg0].y_position;
*arg3 = D_807F6000[arg0].z_position;
*arg4 = D_807F6000[arg0].x_rotation;
*arg5 = D_807F6000[arg0].y_rotation;
*arg6 = D_807F6000[arg0].z_rotation;
*arg7 = D_807F6000[arg0].hitbox_scale;
*arg8 = D_807F6000[arg0].unk1C;
}
// Jumptable
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_36880/func_806358E8.s")
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_36880/func_80635EF0.s")
extern u16 D_807FBB34;
/*
// TODO: Small stack problem and regalloc
s32 func_80635EF0(f32 arg0, f32 arg1, f32 arg2, s16 arg3, s16 arg4, s16 arg5, u16 arg6) {
Actor *temp_a2;
s32 i;
for (i = 0; i < D_807FBB34; i++) {
temp_a2 = D_807FB930[i].unk0;
if (temp_a2->interactable & arg6) {
if ((arg0 - arg3) <= temp_a2->x_position
&& (arg1 - arg4) <= temp_a2->y_position
&& (arg2 - arg5) <= temp_a2->z_position
&& temp_a2->x_position <= (arg3 + arg0)
&& temp_a2->y_position <= (arg4 + arg1)
&& temp_a2->z_position <= (arg5 + arg2)) {
return 1;
}
}
}
return 0;
}
*/
void func_80636014(s32 arg0, u8 arg1, u8 arg2) {
if (arg1 == 1) {
arg0 = func_80659470(arg0);
@ -534,9 +713,78 @@ void func_80636014(s32 arg0, u8 arg1, u8 arg2) {
func_8062D094(D_807F6000[arg0].model_pointer, arg2);
}
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_36880/func_80636074.s")
void func_80636380(s32 arg0, Struct80635548 *arg1);
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_36880/func_80636164.s")
void func_80636074(ObjectModel2 *arg0) {
Model2Model50_B8 *var_s0;
Model2Model50_B8 *temp_a0_3;
Model2Model54_BC *sp24;
s32 temp_a0;
switch (arg0->unk86) {
case 2:
var_s0 = arg0->model_pointer->unk50;
sp24 = arg0->model_pointer->unk54;
func_80636380(arg0->unk24, arg0->model_pointer);
break;
case 1:
var_s0 = arg0->model_pointer->unkB8;
sp24 = arg0->model_pointer->unkBC;
func_806365D0(arg0, arg0->unk24, arg0->model_pointer);
break;
}
while (var_s0 != NULL) {
temp_a0 = var_s0->unk3C;
if (temp_a0 != 0) {
func_8066B434(temp_a0, 0x9DB, 7);
}
temp_a0 = var_s0->unk40;
if (temp_a0 != 0) {
func_8066B434(temp_a0, 0x9DC, 7);
}
temp_a0_3 = var_s0;
var_s0 = var_s0->next;
func_8061130C(temp_a0_3);
}
if (sp24 != NULL) {
func_8066B434(sp24->unk0, 0x9E5, 7);
func_8061130C(sp24);
}
}
void func_80636164(Model2Model *arg0, u8 arg1) {
Model2Model50_B8 *temp_a0;
Model2Model50_B8 *var_s0;
switch (arg1) {
case 2:
var_s0 = arg0->unk50;
break;
case 1:
var_s0 = arg0->unkB8;
break;
default:
return;
}
while (var_s0 != NULL) {
temp_a0 = var_s0->unk3C;
if (temp_a0 != NULL) {
if (var_s0->unkD0 == 0) {
func_8066B434(temp_a0, 0xA09, 7);
var_s0->unk3C = NULL;
}
}
temp_a0 = var_s0->unk40;
if (temp_a0 != NULL) {
if (var_s0->unkD0 == 0) {
func_8066B434(temp_a0, 0xA0E, 7);
var_s0->unk40 = NULL;
}
}
var_s0 = var_s0->next;
}
}
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_36880/func_80636210.s")
@ -568,43 +816,18 @@ void func_806362C4(s32 arg0, u8 arg1) {
}
}
// TODO: Any overlap with documented structs?
typedef struct {
s32 unk0;
s32 unk4;
s32 unk8;
s32 unkC;
s32 unk10;
s32 unk14;
s32 unk18;
s32 unk1C;
u8 unk20;
u8 unk21;
s16 unk22;
void *unk24;
s32 unk28;
s32 unk2C;
s32 unk30;
void *unk34;
} Struct80636380;
void func_8061134C(void*);
void func_80636380(s32 arg0, Struct80636380 *arg1) {
Struct80636380 *phi_s0;
void func_80636380(s32 arg0, Struct80635548 *arg1) {
s32 i;
phi_s0 = arg1;
i = 0;
while (i < arg1->unk20) {
if (phi_s0->unk24 != 0) {
func_8066B434(phi_s0->unk24, 0xA69, 7);
for (i = 0; i < arg1->unk20; i++) {
if (arg1->unk24[i] != 0) {
func_8066B434(arg1->unk24[i], 0xA69, 7);
}
if (phi_s0->unk34 != 0) {
func_8066B434(phi_s0->unk34, 0xA6A, 7);
if (arg1->unk34[i] != 0) {
func_8066B434(arg1->unk34[i], 0xA6A, 7);
}
// TODO: Not good at all.
// I think arg1 is an array of pointers
((s32)phi_s0) += 4;
i++;
}
func_8066B434(arg0, 0xA6E, 7);
func_8061134C(arg1->unk1C);

View File

@ -8,17 +8,12 @@
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_54150/func_8064F6F8.s")
typedef struct {
s32 unk0;
s32 unk4;
} GlobalASMStruct9;
void func_80650684(GlobalASMStruct9*);
//display list struct ? idk
void func_8064F804(GlobalASMStruct9 *arg0) {
void func_80650684(OM2_unk78*);
void func_8064F804(OM2_unk78 *arg0) {
if (arg0) {
func_8061134C(arg0->unk0);
func_8061134C(arg0->unk4);
// TODO: Hmm...
func_8061134C(*((s32*)&arg0->unk0));
func_8061134C(*((s32*)&arg0->unk4));
func_80650684(arg0);
func_8061130C(arg0);
}
@ -40,7 +35,7 @@ void func_8064F954(s32 arg0) {
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_54150/func_806500E0.s")
typedef struct {
GlobalASMStruct9* unk0; // Used
OM2_unk78* unk0; // Used
void *unk4; // TODO: Which struct?
void *unk8; // TODO: Which struct?
u8 unkC; // Used
@ -60,7 +55,7 @@ void func_8065051C(void) {
}
}
void func_8065054C(GlobalASMStruct9 *arg0, void *arg1, void *arg2) {
void func_8065054C(OM2_unk78 *arg0, void *arg1, void *arg2) {
s32 found = FALSE;
s32 i = 0;
@ -81,7 +76,7 @@ void func_8065054C(GlobalASMStruct9 *arg0, void *arg1, void *arg2) {
}
}
void func_806505F0(GlobalASMStruct9 *arg0) {
void func_806505F0(OM2_unk78 *arg0) {
s32 i;
for (i = 0; i < 0x28; i++) {
if (D_807F6960[i].unk0 && arg0 == D_807F6960[i].unk8) {
@ -90,7 +85,7 @@ void func_806505F0(GlobalASMStruct9 *arg0) {
}
}
void func_80650684(GlobalASMStruct9 *arg0) {
void func_80650684(OM2_unk78 *arg0) {
s32 i;
for (i = 0; i < 0x28; i++) {
if (arg0 == D_807F6960[i].unk0) {
@ -99,7 +94,7 @@ void func_80650684(GlobalASMStruct9 *arg0) {
}
}
void func_806506E8(GlobalASMStruct9 *arg0) {
void func_806506E8(OM2_unk78 *arg0) {
s32 i;
for (i = 0; i < 0x28; i++) {
if (arg0 == D_807F6960[i].unk0 && D_807F6960[i].unkC == D_807444FC) {

View File

@ -1,15 +1,6 @@
#include <ultra64.h>
#include "functions.h"
typedef struct global_asm_struct_83 GlobalASMStruct83;
struct global_asm_struct_83 {
Actor* unk0;
u32 unk4;
Actor* unk8;
GlobalASMStruct83 *next;
};
typedef struct {
s16 min_x; // 0
s16 min_y; // 2