This commit is contained in:
Donkey Kong 2023-03-11 23:33:23 +10:30
parent d0c49e387f
commit 22f0554732
11 changed files with 280 additions and 19 deletions

View File

@ -33,6 +33,8 @@ void func_80729B00(void);
s16 func_80665DE0(f32, f32, f32, f32);
void func_80679200(Actor*, Actor*, s32, u8, s32, s32);
// Heap stuff???
void func_8061130C(void *);

View File

@ -1963,7 +1963,7 @@ us,.code,func_806EE6B0,80,yes
us,.code,func_8063162C,424,no
us,.code,func_806896D0,32,yes
us,.code,func_80678BBC,268,yes
us,.code,func_806CF42C,140,yes
us,.code,func_806CF42C,140,no
us,.code,func_806EB4F8,76,yes
us,.code,func_80676260,32,yes
us,.code,func_806115A8,108,no
@ -2489,7 +2489,7 @@ us,.code,func_806DF1A0,224,yes
us,.code,func_80712830,276,yes
us,.code,func_806E208C,180,yes
us,.code,func_8071F8E4,412,no
us,.code,func_8064199C,92,no
us,.code,func_8064199C,92,yes
us,.code,func_80737924,108,no
us,.code,func_80661B84,108,yes
us,.code,func_806F397C,108,yes
@ -2713,7 +2713,7 @@ us,.code,func_806E3C38,180,yes
us,.code,func_80688C84,64,no
us,.code,func_806F0184,84,yes
us,.code,func_80611408,300,no
us,.code,func_80644E2C,156,no
us,.code,func_80644E2C,156,yes
us,.code,func_80656E58,188,no
us,.code,func_8066F84C,960,no
us,.code,func_80642480,128,yes
@ -3202,7 +3202,7 @@ us,.code,func_8073A518,376,no
us,.code,func_806EF944,196,yes
us,.code,func_8070835C,536,no
us,.code,func_8060BA14,260,yes
us,.code,func_80641C98,264,no
us,.code,func_80641C98,264,yes
us,.code,func_806919E0,2044,no
us,.code,func_8065E124,20,yes
us,.code,func_8062A808,60,yes

1 version section function length matching
1963 us .code func_8063162C 424 no
1964 us .code func_806896D0 32 yes
1965 us .code func_80678BBC 268 yes
1966 us .code func_806CF42C 140 yes no
1967 us .code func_806EB4F8 76 yes
1968 us .code func_80676260 32 yes
1969 us .code func_806115A8 108 no
2489 us .code func_80712830 276 yes
2490 us .code func_806E208C 180 yes
2491 us .code func_8071F8E4 412 no
2492 us .code func_8064199C 92 no yes
2493 us .code func_80737924 108 no
2494 us .code func_80661B84 108 yes
2495 us .code func_806F397C 108 yes
2713 us .code func_80688C84 64 no
2714 us .code func_806F0184 84 yes
2715 us .code func_80611408 300 no
2716 us .code func_80644E2C 156 no yes
2717 us .code func_80656E58 188 no
2718 us .code func_8066F84C 960 no
2719 us .code func_80642480 128 yes
3202 us .code func_806EF944 196 yes
3203 us .code func_8070835C 536 no
3204 us .code func_8060BA14 260 yes
3205 us .code func_80641C98 264 no yes
3206 us .code func_806919E0 2044 no
3207 us .code func_8065E124 20 yes
3208 us .code func_8062A808 60 yes

View File

@ -1963,7 +1963,7 @@ us,.code,func_806EE6B0,80,yes
us,.code,func_8063162C,424,no
us,.code,func_806896D0,32,yes
us,.code,func_80678BBC,268,yes
us,.code,func_806CF42C,140,yes
us,.code,func_806CF42C,140,no
us,.code,func_806EB4F8,76,yes
us,.code,func_80676260,32,yes
us,.code,func_806115A8,108,no
@ -2489,7 +2489,7 @@ us,.code,func_806DF1A0,224,yes
us,.code,func_80712830,276,yes
us,.code,func_806E208C,180,yes
us,.code,func_8071F8E4,412,no
us,.code,func_8064199C,92,no
us,.code,func_8064199C,92,yes
us,.code,func_80737924,108,no
us,.code,func_80661B84,108,yes
us,.code,func_806F397C,108,yes
@ -2713,7 +2713,7 @@ us,.code,func_806E3C38,180,yes
us,.code,func_80688C84,64,no
us,.code,func_806F0184,84,yes
us,.code,func_80611408,300,no
us,.code,func_80644E2C,156,no
us,.code,func_80644E2C,156,yes
us,.code,func_80656E58,188,no
us,.code,func_8066F84C,960,no
us,.code,func_80642480,128,yes
@ -3202,7 +3202,7 @@ us,.code,func_8073A518,376,no
us,.code,func_806EF944,196,yes
us,.code,func_8070835C,536,no
us,.code,func_8060BA14,260,yes
us,.code,func_80641C98,264,no
us,.code,func_80641C98,264,yes
us,.code,func_806919E0,2044,no
us,.code,func_8065E124,20,yes
us,.code,func_8062A808,60,yes

1 version section function length matching
1963 us .code func_8063162C 424 no
1964 us .code func_806896D0 32 yes
1965 us .code func_80678BBC 268 yes
1966 us .code func_806CF42C 140 yes no
1967 us .code func_806EB4F8 76 yes
1968 us .code func_80676260 32 yes
1969 us .code func_806115A8 108 no
2489 us .code func_80712830 276 yes
2490 us .code func_806E208C 180 yes
2491 us .code func_8071F8E4 412 no
2492 us .code func_8064199C 92 no yes
2493 us .code func_80737924 108 no
2494 us .code func_80661B84 108 yes
2495 us .code func_806F397C 108 yes
2713 us .code func_80688C84 64 no
2714 us .code func_806F0184 84 yes
2715 us .code func_80611408 300 no
2716 us .code func_80644E2C 156 no yes
2717 us .code func_80656E58 188 no
2718 us .code func_8066F84C 960 no
2719 us .code func_80642480 128 yes
3202 us .code func_806EF944 196 yes
3203 us .code func_8070835C 536 no
3204 us .code func_8060BA14 260 yes
3205 us .code func_80641C98 264 no yes
3206 us .code func_806919E0 2044 no
3207 us .code func_8065E124 20 yes
3208 us .code func_8062A808 60 yes

View File

@ -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">16.0673%</text>
<text x="110.5" y="14">16.0673%</text>
<text x="111.5" y="15" fill="#010101" fill-opacity=".3">16.0975%</text>
<text x="110.5" y="14">16.0975%</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -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">16.5787%</text>
<text x="165.5" y="14">16.5787%</text>
<text x="166.5" y="15" fill="#010101" fill-opacity=".3">16.6013%</text>
<text x="165.5" y="14">16.6013%</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -40,6 +40,38 @@ Temp8070D6D8 *func_8070D6D8(void *arg0) {
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_112080/func_8070D754.s")
/*
? *func_8070D754(? *arg0) {
? **var_s0;
? *temp_v0;
? *var_v1;
var_s0 = &D_807550C4;
if ((D_807550C4 != NULL) && (arg0 != *D_807550C4)) {
var_v1 = D_807550C4;
loop_3:
var_s0 = &*(var_v1 + 0xC);
var_v1 = *var_s0;
if (var_v1 != NULL) {
if (arg0 != *var_v1) {
goto loop_3;
}
}
}
if (*var_s0 == NULL) {
temp_v0 = malloc(0x10);
*var_s0 = temp_v0;
func_80611690(temp_v0);
(*var_s0)->unk0 = arg0;
func_80677FA8(0x12B, 0, arg0);
D_807FBB44->control_state = 0;
(*var_s0)->unk4 = D_807FBB44;
D_807FBB44->additional_actor_data->unk4 = arg0;
}
return *var_s0;
}
*/
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_112080/func_8070D82C.s")
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_112080/func_8070D8C0.s")
@ -63,6 +95,28 @@ void func_8070D8C0(Actor *arg0, u16 arg1, u8 arg2) {
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_112080/func_8070D928.s")
/*
extern u16 *D_807550C0;
u16 *func_8070D928(s32 arg0) {
s32 temp_t6;
u16 *var_v1;
var_v1 = D_807550C0;
temp_t6 = arg0 & 0xFFFF;
if ((var_v1 != NULL) && (temp_t6 != *var_v1)) {
loop_2:
var_v1 = var_v1->unkC;
if (var_v1 != NULL) {
if (temp_t6 != *var_v1) {
goto loop_2;
}
}
}
return var_v1;
}
*/
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_112080/func_8070D970.s")
/*
@ -79,8 +133,52 @@ void func_8070D970(s32 arg0) {
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_112080/func_8070D9AC.s")
/*
void func_8070D9AC(void *arg0) {
s32 temp_a0;
s32 temp_s2;
void *temp_s0;
void *var_s1;
var_s1 = arg0->unkC;
temp_s2 = arg0->unk0 & 2;
if (var_s1 != NULL) {
do {
temp_s0 = var_s1;
var_s1 = var_s1->unkA0;
if (temp_s2 != 0) {
temp_a0 = temp_s0->unk14;
if (temp_a0 != 0) {
func_80715908(temp_a0);
}
}
func_8061134C(temp_s0);
} while (var_s1 != NULL);
}
func_8061134C(arg0);
}
*/
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_112080/func_8070DA28.s")
/*
void func_8070DA28(void *arg0) {
void *temp_a0;
void *var_s0;
var_s0 = arg0->unkC;
if (var_s0 != NULL) {
do {
temp_a0 = var_s0;
var_s0 = var_s0->unk1C;
func_8070D9AC(temp_a0);
} while (var_s0 != NULL);
}
arg0->unkC = NULL;
arg0->unk10 = 0;
}
*/
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_112080/func_8070DA74.s")
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_112080/func_8070DB7C.s")
@ -183,7 +281,7 @@ s32 func_8070DDDC(u16 arg0, s32 arg1) {
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_112080/func_8070E808.s")
extern s32 D_807550C0;
extern s32 D_807550C0; // TODO: Some kind of struct pointer, possibly Temp8070D6D8
extern s32 D_807550C4;
extern u8 D_807550CC;

View File

@ -218,7 +218,47 @@ void func_80641874(s16 arg0, s16 arg1) {
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_42630/func_806418E8.s")
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_42630/func_8064199C.s")
/*
s32 func_806418E8(s16 arg0, s16 arg1, s16 arg2) {
s16 temp_a3;
s16 temp_v0;
temp_a3 = D_807F6240[arg0];
if (temp_a3 != -1) {
temp_v0 = func_80659470(temp_a3);
if ((temp_v0 != -1) && (D_807F6000[temp_v0].unk7C != NULL)) {
(D_807F6000[temp_v0].unk7C + arg2)->unk48 = arg1;
return TRUE;
}
}
return FALSE;
}
*/
// TODO: Which struct is this?
typedef struct {
s32 unk0[21];
s8 unk54; // Used
s8 unk55;
s8 unk56;
s8 unk57;
s32 unk58; // Used
s32 unk5C;
} Struct8064199C_arg0;
void func_8064199C(Struct8064199C_arg0 *arg0, s8 arg1, s16 arg2) {
arg0->unk54 = arg1;
switch (arg1 & 0xFF) {
case 3:
case 4:
case 6:
arg0->unk58 = arg2 * arg2;
break;
case 5:
arg0->unk58 = arg2;
break;
}
}
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_42630/func_806419F8.s")
@ -290,7 +330,50 @@ void func_80641B00(s16 arg0, s16 arg1, s16 arg2) {
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_42630/func_80641BCC.s")
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_42630/func_80641C98.s")
extern u16 D_807FBB34;
/*
// TODO: Regalloc a0 a1, boo
void func_80641BCC(s16 arg0, s16 arg1, s16 arg2) {
s32 i;
for (i = 0; i < D_807FBB34; i++) {
if (!(D_807FB930[i].unk0->object_properties_bitfield & 0x2000)
&& (arg0 == D_807FB930[i].unk0->unk58)
&& (arg2 == D_807FB930[i].unk0->unk10C)) {
if (arg1 != 0) {
D_807FB930[i].unk0->unk68 |= 4;
} else {
D_807FB930[i].unk0->unk68 &= ~4;
}
}
}
}
*/
void func_80641C98(s16 arg0, s16 arg1, s16 arg2) {
s32 var_s2;
s32 i;
switch (arg1) {
case 0:
var_s2 = 1;
break;
case 1:
var_s2 = 2;
break;
case 2:
var_s2 = 0x3C;
break;
}
for (i = 0; i < D_807FBB34; i++) {
if (!(D_807FB930[i].unk0->object_properties_bitfield & 0x2000)
&& (arg0 == D_807FB930[i].unk0->unk58)
&& (arg2 == D_807FB930[i].unk0->unk10C)) {
func_80679200(D_807FB930[i].unk0, NULL, 0x800, var_s2, 0, 0);
}
}
}
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_42630/func_80641DA0.s")
@ -561,6 +644,28 @@ void func_806449C0(s32 arg0, s16 arg1, s16 arg2, s32 arg3) {
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_42630/func_80644CC0.s")
void func_80644A18(s32, s32, s32, f32);
/*
void func_80644CC0(void **arg0, s32 arg1, s32 arg2, s32 arg3) {
void *sp1C;
void *temp_v0;
void *var_v1;
var_v1 = *arg0;
if (var_v1 == NULL) {
temp_v0 = malloc(8);
*arg0 = temp_v0;
temp_v0->unk0 = 0.0f;
temp_v0->unk4 = 0.0f;
var_v1 = *arg0;
}
sp1C = var_v1;
func_80644A18(var_v1, 2, 0x16, 1.0f);
func_80644A18(sp1C + 4, 4, 0x18, 0.8f);
}
*/
void func_8065A660(f32, f32);
void func_80644D50(s32 arg0, s16 arg1, s32 arg2, s32 arg3) {
@ -577,7 +682,19 @@ void func_80644D50(s32 arg0, s16 arg1, s32 arg2, s32 arg3) {
func_8065A708(sp48, sp40, sp38, sp4C, sp44, sp3C, 0.0f, 1, D_807480D0, D_807480D4, D_807480D8);
}
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_42630/func_80644E2C.s")
extern f32 D_807F621C;
extern f32 D_807F6220;
extern f32 D_807F6224;
extern s32 D_8074E880[];
extern s32 D_80717760;
void func_80644E2C(s32 arg0, s32 arg1, s32 arg2, s32 arg3) {
func_807149FC(-1);
func_8071498C(&D_80717760);
func_80714950(0x50);
func_80714CC0(D_8074E880[((rand() >> 0xF) % 1000) % 3], 0.5f, D_807F621C, D_807F6220, D_807F6224);
}
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_42630/func_80644EC8.s")

View File

@ -32,9 +32,7 @@ void func_8062D26C(Actor*);
void func_806783BC();
void func_806136B4();
void func_8066E21C(LedgeInfo*);
// void func_80679200(s32, Actor *, s32, s32, s32, s32);
// Note: The pointer can be to any one of the above 10 structs, maybe more
void func_80679200(Actor *arg0, Actor *arg1, s32 arg2, u8 arg3, s32 arg4, s32 arg5);
void func_8067AEFC(Actor*);
void func_8068C2F8(void *);
void func_8070DA74(void *);

View File

@ -19,7 +19,6 @@ extern u8 D_807506C0[];
f32 func_80665AE4(s32, s32, s32, s32);
void func_80688370(Actor*, s32, f32);
void func_806883F4(Actor*, s32, s32, f32);
void func_80679200(Actor*, Actor*, s32, u8, s32, s32);
/*
// TODO: Everything matches, but the stack is too big

View File

@ -475,7 +475,47 @@ void func_806C2A64(u8 arg0, u8 arg1, u8 arg2, f32 arg3, f32 arg4, f32 arg5, s32
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_C2A90/func_806C2B2C.s")
typedef struct {
s8 unk0;
s8 unk1;
s8 unk2;
} Struct80747B00;
extern Struct80747B00 D_80747B00[];
extern f64 D_8075BEE0;
/*
void func_806C2B2C(s32 arg0, s32 arg1, u8 arg2, s32 arg3) {
f32 spA8;
f32 spA4;
f32 spA0;
f32 sp9C;
f32 sp98;
f32 sp94;
f32 temp_f20;
f32 temp_f24;
s16 i;
Struct80747B00 *temp_s0;
temp_f24 = (current_actor_pointer->animation_state->scale_y / D_8075BEE0) / 1.5;
while (arg1 >= arg0) {
for (i = 0; i < 3.0; i++) {
temp_s0 = &D_80747B00[arg2];
temp_f20 = i / 3.0;
func_80671C0C(current_actor_pointer, arg0, &spA8, &spA4, &spA0);
if (arg0 < arg1) {
func_80671C0C(current_actor_pointer, arg0 + 1, &sp9C, &sp98, &sp94);
} else {
func_80671C0C(current_actor_pointer, arg0, &sp9C, &sp98, &sp94);
}
func_806C2A64(spA0, temp_s0->unk0, temp_s0->unk1, temp_s0->unk2, ((sp9C - spA8) * temp_f20) + spA8, ((sp98 - spA4) * temp_f20) + spA4, ((sp94 - spA0) * temp_f20) + spA0, arg3);
}
}
}
*/
extern s32 D_8071FFA0;
void func_806C2D7C() {
func_806C2B2C(1, 0xB, 6, &D_8071FFA0);
func_806C2B2C(0x20, 0x30, 6, &D_8071FFA0);

View File

@ -1080,6 +1080,12 @@ void func_806CF398(Actor *arg0) {
}
}
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_CEAE0/func_806CF42C.s")
/*
// TODO: Why doesn't this match anymore?
// Ever since I added func_80679200 to functions.h there's a regalloc here
// It's possible they forgot to include a header in this file and fell back onto C's default int() overload for this function
void func_806CF42C(Actor *arg0) {
PlayerAdditionalActorData *PaaD;
@ -1094,6 +1100,7 @@ void func_806CF42C(Actor *arg0) {
PaaD->unk1B0 = 0;
}
}
*/
// Probably doable, character_change loop with cc_number_of_players, PaaD
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_CEAE0/func_806CF4B8.s")