This commit is contained in:
Donkey Kong 2024-05-04 10:07:29 +09:30
parent 70db9f651e
commit 35ff7f1d7e
14 changed files with 586 additions and 106 deletions

View File

@ -899,7 +899,7 @@ s32 func_global_asm_806D0964(s32 arg0, u8 playerIndex);
void func_global_asm_806D09E8(Actor *arg0);
void func_global_asm_806D0A54(Actor *arg0, s32 arg1, s32 arg2);
void func_global_asm_806D0A84(void);
void func_global_asm_806D0EBC(s32 arg0);
void func_global_asm_806D0EBC(Actor *arg0);
s16 func_global_asm_806D1080(f32 arg0, f32 arg1);
s32 func_global_asm_806D10D0(Actor *arg0);
void func_global_asm_806D1110(void);
@ -2349,7 +2349,7 @@ s32 func_global_asm_80631EB8(u16);
Gfx *func_global_asm_8070068C(Gfx *);
void func_bonus_800264E0(u8 arg0, u8 arg1);
void func_bonus_800265C0(u8 arg0, u8 arg1);
s32 func_global_asm_8072D714(Actor*, s32);
void func_global_asm_8072D714(Actor*, s32);
void func_global_asm_8072B7CC(s32);
Gfx *func_race_8002CAC8(Gfx *dl, Actor *arg1, RaceAdditionalActorData *arg2);
void func_global_asm_806BFBF4(void);
@ -2444,6 +2444,7 @@ void func_global_asm_8066466C(void);
// TODO: Where is the best place to put this so it's available everywhere and doesn't conflict with internal libultra/gu stuff?
#define ABS(d) (((d) > 0) ? (d) : -(d))
#define ABS_DIFF(a, b) (((b) < (a)) ? ((a) - (b)) : (-((a) - (b))))
#define TWO_PI 6.28318548202514648
#endif

View File

@ -2133,7 +2133,7 @@ us,asm,func_global_asm_8060042C,40,yes
us,asm,func_global_asm_806E8BA4,88,yes
us,asm,func_global_asm_8071F660,248,no
us,asm,func_global_asm_806DC410,1644,yes
us,asm,func_global_asm_806BE8BC,2396,no
us,asm,func_global_asm_806BE8BC,2396,yes
us,asm,func_global_asm_8064D1E8,560,no
us,asm,func_global_asm_8069DA54,444,yes
us,asm,func_global_asm_80676D00,460,yes

1 version section function length matching
2133 us asm func_global_asm_806E8BA4 88 yes
2134 us asm func_global_asm_8071F660 248 no
2135 us asm func_global_asm_806DC410 1644 yes
2136 us asm func_global_asm_806BE8BC 2396 no yes
2137 us asm func_global_asm_8064D1E8 560 no
2138 us asm func_global_asm_8069DA54 444 yes
2139 us asm func_global_asm_80676D00 460 yes

View File

@ -2133,7 +2133,7 @@ us,asm,func_global_asm_8060042C,40,yes
us,asm,func_global_asm_806E8BA4,88,yes
us,asm,func_global_asm_8071F660,248,no
us,asm,func_global_asm_806DC410,1644,yes
us,asm,func_global_asm_806BE8BC,2396,no
us,asm,func_global_asm_806BE8BC,2396,yes
us,asm,func_global_asm_8064D1E8,560,no
us,asm,func_global_asm_8069DA54,444,yes
us,asm,func_global_asm_80676D00,460,yes

1 version section function length matching
2133 us asm func_global_asm_806E8BA4 88 yes
2134 us asm func_global_asm_8071F660 248 no
2135 us asm func_global_asm_806DC410 1644 yes
2136 us asm func_global_asm_806BE8BC 2396 no yes
2137 us asm func_global_asm_8064D1E8 560 no
2138 us asm func_global_asm_8069DA54 444 yes
2139 us asm func_global_asm_80676D00 460 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">39.2006%</text>
<text x="110.5" y="14">39.2006%</text>
<text x="111.5" y="15" fill="#010101" fill-opacity=".3">39.3952%</text>
<text x="110.5" y="14">39.3952%</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="#c09900" d="M132 0h67v20H132z"/>
<path fill="#c09a00" 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">39.8412%</text>
<text x="165.5" y="14">39.8412%</text>
<text x="166.5" y="15" fill="#010101" fill-opacity=".3">39.9866%</text>
<text x="165.5" y="14">39.9866%</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -674,6 +674,7 @@ void func_bonus_80029E54(Actor *arg0) {
// rodata, doable
#pragma GLOBAL_ASM("asm/nonmatchings/bonus/code_2690/func_bonus_8002A010.s")
// rodata, doable
#pragma GLOBAL_ASM("asm/nonmatchings/bonus/code_2690/func_bonus_8002A398.s")
extern s16 D_bonus_8002D900;

View File

@ -151,7 +151,7 @@ void func_global_asm_8068ECF4(s32 arg0, u8 arg1) {
}
}
// Jumptable
// Jumptable, matrix
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_936B0/func_global_asm_8068EF54.s")
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_936B0/func_global_asm_8068F72C.s")
@ -1121,7 +1121,7 @@ s32 func_global_asm_806951B0(Actor *arg0) {
return FALSE;
}
// doable
// doable, matrix
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_936B0/func_global_asm_806951E8.s")
void func_global_asm_80695724(f32, u8);

View File

@ -107,9 +107,10 @@ void func_global_asm_8072C918(s16, s16, s16);
void func_global_asm_8072A450(void); // extern
u8 func_global_asm_8072D13C(u8, s32); // extern
void func_global_asm_806A5C60(Actor *); // extern
/*
void func_global_asm_806AE588(void) {
s32 temp;
initializeCharacterSpawnerActor();
if (!(current_actor_pointer->object_properties_bitfield & 0x10)) {
func_global_asm_8072B79C(0x1FD, 0x1FB, 0x1FC);
@ -225,24 +226,14 @@ void func_global_asm_806AE588(void) {
}
// fallthrough
case 0x10:
if (current_actor_pointer->control_state == 1) {
temp = 2;
} else {
temp = 0;
}
func_global_asm_80724E48(temp);
func_global_asm_80724E48(current_actor_pointer->control_state == 1 ? 2 : 0);
func_global_asm_8072AB74(current_actor_pointer->control_state, D_global_asm_807FDC94->x_position, D_global_asm_807FDC94->z_position, 0, 0.0f);
break;
case 0x2:
case 0x3:
case 0x7:
case 0x35:
if (current_actor_pointer->control_state == 0x35) {
temp = 2;
} else {
temp = 3;
}
func_global_asm_80724E48(temp);
func_global_asm_80724E48(current_actor_pointer->control_state == 0x35 ? 2 : 3);
func_global_asm_8072AB74(current_actor_pointer->control_state, D_global_asm_807FDC90->unkA, D_global_asm_807FDC90->unkE, 0, 0.0f);
break;
case 0x37:
@ -403,9 +394,164 @@ void func_global_asm_806AFA60(u8 arg0) {
}
}
// Jumptable
// Jumptable, close, regalloc
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_B2CE0/func_global_asm_806AFB58.s")
/*
void func_global_asm_806AFB58(void) {
s32 cs;
initializeCharacterSpawnerActor();
if (!(current_actor_pointer->object_properties_bitfield & 0x10)) {
current_actor_pointer->unk146_s16 = -1;
func_global_asm_8072B79C(0x2D9, 0x2D7, 0x2D8);
func_global_asm_80724CA4(2, 1);
current_actor_pointer->unkEC = 0x1770;
}
if (((D_global_asm_807FBB70.unk200 == 9) || (D_global_asm_807FBB70.unk15 != 0)) && (current_actor_pointer->control_state != 0x37)) {
func_global_asm_8072D714(D_global_asm_807FBB70.unk1FC, 0x2DD);
D_global_asm_807FDC90->unk35 = 2;
current_actor_pointer->unk138 &= ~0x8000;
} else if ((D_global_asm_807FBB70.unk200 == 4) || (D_global_asm_807FBB70.unk200 == 5)) {
if (current_actor_pointer->unk146_s16 & 1) {
D_global_asm_807FDC90->unk1E = 0xF;
D_global_asm_807FDC90->unk1F = 0xF;
current_actor_pointer->unkEC = -1;
func_global_asm_806AE2B0(0xC2, 0x800, 1, 0x190);
last_spawned_actor->unk15F = 1;
func_global_asm_806AFA60(1);
} else if (current_actor_pointer->unk146_s16 & 2) {
func_global_asm_806AFA60(2);
}
current_actor_pointer->unk146_s16 *= 2;
func_global_asm_8072DEA8(0x2DC, 0x31, D_global_asm_807FBB70.unk1FC);
D_global_asm_807FDC90->unk26 = 0;
current_actor_pointer->unkB8 = 0.0f;
}
switch (current_actor_pointer->control_state) {
case 0x31:
if ((current_actor_pointer->control_state_progress != 0) || (current_actor_pointer->animation_state->unk0->unk24 == 0.0f)) {
func_global_asm_8072DE44(0x2D7);
}
func_global_asm_8072AB74(0, 0.0f, 0.0f, 0x4200, 0.0f);
cs = current_actor_pointer->control_state;
break;
case 0x11:
func_global_asm_80724E48(5);
switch (current_actor_pointer->control_state_progress) {
case 0:
func_global_asm_8072B324(current_actor_pointer, 0);
playActorAnimation(current_actor_pointer, 0x2D9);
current_actor_pointer->control_state_progress++;
// fallthrough
case 1:
func_global_asm_8072AB74(current_actor_pointer->control_state, D_global_asm_807FDC94->x_position, D_global_asm_807FDC94->z_position, 0x200, 0.0f);
if (current_actor_pointer->unkB8 < 1.0f) {
current_actor_pointer->control_state_progress++;
}
break;
case 2:
func_global_asm_8072A450();
if (((rand() >> 0xF) % 1000) >= 0x3E4) {
func_global_asm_8072DE44(0x2D7);
}
break;
}
cs = current_actor_pointer->control_state;
break;
case 0x27:
if (current_actor_pointer->unkEC < 0xFFFF) {
func_global_asm_8072E1A4(0xA, D_global_asm_807FDC94);
}
func_global_asm_8072AB74(current_actor_pointer->control_state, D_global_asm_807FDC94->x_position, D_global_asm_807FDC94->z_position, 0x200, 0.0f);
switch (current_actor_pointer->control_state_progress) {
case 0:
func_global_asm_8072B324(current_actor_pointer, 0);
if ((current_actor_pointer->animation_state->scale[1] > 0.18) && (((rand() >> 0xF) % 1000) >= 0x1F5)) {
playActorAnimation(current_actor_pointer, 0x2DB);
} else {
playActorAnimation(current_actor_pointer, 0x2DA);
}
current_actor_pointer->control_state_progress = 1;
break;
case 2:
current_actor_pointer->unk132 = 2;
break;
case 3:
current_actor_pointer->unk132 = 1;
break;
case 4:
func_global_asm_8072DE44(0x2D7);
break;
}
cs = current_actor_pointer->control_state;
break;
case 0x1:
if (func_global_asm_8072E54C() != 0) {
current_actor_pointer->control_state = 0x11;
current_actor_pointer->control_state_progress = 0;
}
// fallthrough
case 0x23:
if ((D_global_asm_807FBB70.unk200 == 2) && (func_global_asm_8072DE10(current_actor_pointer->unkEC) != 0)) {
current_actor_pointer->control_state = 0x27;
current_actor_pointer->control_state_progress = 0;
}
// fallthrough
case 0x10:
func_global_asm_80724E48(current_actor_pointer->control_state == 1 ? 2 : 0);
func_global_asm_8072AB74(current_actor_pointer->control_state, D_global_asm_807FDC94->x_position, D_global_asm_807FDC94->z_position, 0, 0.0f);
cs = current_actor_pointer->control_state;
break;
case 0x2:
case 0x3:
case 0x7:
case 0x35:
func_global_asm_80724E48(current_actor_pointer->control_state == 0x35 ? 2 : 3);
func_global_asm_8072AB74(current_actor_pointer->control_state, D_global_asm_807FDC90->unkA, D_global_asm_807FDC90->unkE, 0, 0.0f);
cs = current_actor_pointer->control_state;
break;
case 0x37:
current_actor_pointer->y_rotation = func_global_asm_806CC190(current_actor_pointer->y_rotation, current_actor_pointer->unkEE, 7.0f);
switch (current_actor_pointer->control_state_progress) {
case 0:
func_global_asm_8072AB74(0x37, 0.0f, 0.0f, 0x202, 0.0f);
break;
case 1:
func_global_asm_806A5C60(current_actor_pointer);
current_actor_pointer->control_state_progress++;
// fallthrough
case 2:
func_global_asm_8072DC7C(8);
break;
case 3:
current_actor_pointer->control_state = 0x40;
break;
}
cs = current_actor_pointer->control_state;
break;
default:
func_global_asm_8072B7CC(0x2D7);
cs = current_actor_pointer->control_state;
break;
}
switch (current_actor_pointer->control_state) {
case 0x31:
case 0x37:
case 0x40:
break;
case 0x2:
case 0x3:
func_global_asm_8072D13C(1, cs);
// fallthrough
default:
func_global_asm_8072C918(0x6400, 0x2D7, 0x2D8);
break;
}
renderActor(current_actor_pointer, 0);
}
*/
void func_global_asm_806B02EC(void) {
initializeCharacterSpawnerActor();
if (!(current_actor_pointer->object_properties_bitfield & 0x10)) {

View File

@ -80,7 +80,7 @@ void func_global_asm_806B3420(void) {
renderActor(current_actor_pointer, 0);
}
// close
// close, switch case woes
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_B7490/func_global_asm_806B3680.s")
s32 func_global_asm_8072AB74(u8, f32, f32, s32, f32);
@ -91,9 +91,9 @@ extern s32 D_global_asm_8071ABDC;
extern f32 D_global_asm_8075B5C4;
extern f32 D_global_asm_8075B5C8;
extern f32 D_global_asm_8075B5CC;
extern f32 D_global_asm_8075B5D0;
extern f64 D_global_asm_8075B5D0;
extern f32 D_global_asm_8075B5D8;
extern s32 D_global_asm_8075B5DC;
extern f32 D_global_asm_8075B5DC;
void func_global_asm_8066E9EC(Actor*, s32, f32);
u8 func_global_asm_8072D13C(u8 arg0, s32 arg1);
@ -151,43 +151,37 @@ void func_global_asm_806B3680(void) {
func_global_asm_8072E1A4(0xA, D_global_asm_807FDC94);
break;
default:
if (current_actor_pointer->control_state != 0x27) {
func_global_asm_8072B7CC(0x32E);
} else {
switch (current_actor_pointer->control_state) {
case 0:
playSoundAtActorPosition(current_actor_pointer, 0x1C2, 0xFF, 0x7F, 0);
D_global_asm_807FDC90->unk30 = 2.0 * current_actor_pointer->animation_state->scale_y;
current_actor_pointer->control_state_progress++;
// fallthrough
case 1:
// i = 0;
if (current_actor_pointer->animation_state->scale_y < D_global_asm_807FDC90->unk30) {
func_global_asm_807248B0(current_actor_pointer, current_actor_pointer->animation_state->scale_y * D_global_asm_8075B5D0);
} else {
for (i = 0; i != 0xC; i++) {
func_global_asm_807149B8(1);
func_global_asm_807149FC(2);
func_global_asm_80714950(i + 0x0B020000);
func_global_asm_8071498C(func_global_asm_8071ABDC);
func_global_asm_80714998(1);
drawSpriteAtPosition(&D_global_asm_8072073C, 2.0 * current_actor_pointer->animation_state->scale_y, current_actor_pointer->x_position, current_actor_pointer->y_position, current_actor_pointer->z_position);
}
playSoundAtActorPosition(current_actor_pointer, 0x3D, 0xFF, 0x7F, 0);
playSoundAtPosition(current_actor_pointer->x_position, current_actor_pointer->y_position, current_actor_pointer->z_position, 0x35C, 0xFF, 0x7F, 0, 0x32, D_global_asm_8075B5D8, 0);
func_global_asm_8067E278(0, 1);
func_global_asm_8066E9EC(current_actor_pointer, 1, current_actor_pointer->ledge_info_pointer->unkC * sp54);
func_global_asm_8066EB40(current_actor_pointer, current_actor_pointer->ledge_info_pointer->unkC * sp54);
current_actor_pointer->object_properties_bitfield &= ~4;
current_actor_pointer->control_state_progress++;
switch (current_actor_pointer->control_state) {
case 0:
playSoundAtActorPosition(current_actor_pointer, 0x1C2, 0xFF, 0x7F, 0);
D_global_asm_807FDC90->unk30 = 2.0 * current_actor_pointer->animation_state->scale_y;
default:
current_actor_pointer->control_state_progress++;
break;
case 1:
if (current_actor_pointer->animation_state->scale_y < D_global_asm_807FDC90->unk30) {
func_global_asm_807248B0(current_actor_pointer, current_actor_pointer->animation_state->scale_y * D_global_asm_8075B5D0);
} else {
for (i = 0; i < 0xC; i++) {
func_global_asm_807149B8(1);
func_global_asm_807149FC(2);
func_global_asm_80714950(i + 0x0B020000);
func_global_asm_8071498C(func_global_asm_8071ABDC);
func_global_asm_80714998(1);
drawSpriteAtPosition(&D_global_asm_8072073C, 2.0 * current_actor_pointer->animation_state->scale_y, current_actor_pointer->x_position, current_actor_pointer->y_position, current_actor_pointer->z_position);
}
break;
case 5:
current_actor_pointer->control_state = 0x40;
break;
default:
playSoundAtActorPosition(current_actor_pointer, 0x3D, 0xFF, 0x7F, 0);
playSoundAtPosition(current_actor_pointer->x_position, current_actor_pointer->y_position, current_actor_pointer->z_position, 0x35C, 0xFF, 0x7F, 0, 0x32, D_global_asm_8075B5D8, 0);
func_global_asm_8067E278(0, 1);
func_global_asm_8066E9EC(current_actor_pointer, 1, current_actor_pointer->ledge_info_pointer->unkC * sp54);
func_global_asm_8066EB40(current_actor_pointer, current_actor_pointer->ledge_info_pointer->unkC * sp54);
current_actor_pointer->object_properties_bitfield &= ~4;
current_actor_pointer->control_state_progress++;
}
}
break;
case 5:
current_actor_pointer->control_state = 0x40;
break;
}
break;
case 2:
@ -195,6 +189,9 @@ void func_global_asm_806B3680(void) {
var_f12 = MIN(D_global_asm_807FDC90->unkC, current_actor_pointer->unkAC - current_actor_pointer->unk15E);
func_global_asm_8072A920(current_actor_pointer->control_state, 0, D_global_asm_807FDC90->unkA, var_f12, D_global_asm_807FDC90->unkE, 0x1E, D_global_asm_8075B5DC, 100.0f, 0x2040);
break;
case 0x27:
func_global_asm_8072B7CC(0x32E);
break;
}
switch (current_actor_pointer->control_state) {
case 2:

View File

@ -2,7 +2,7 @@
#include "functions.h"
// Jumptable
// Jumptable, doable, switch case is not detected by mips2c
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_BA790/func_global_asm_806B5A90.s")
void func_global_asm_806B63E0(void) {

View File

@ -26,6 +26,17 @@ extern u8 D_global_asm_807FBDC4;
extern s32 D_global_asm_807FBDC8[];
extern u16 D_global_asm_807FC930[];
void func_global_asm_8061CAD8(void); // extern
void func_global_asm_8061CB08(void);
void func_global_asm_8061F510(s32, s32); // extern
void func_global_asm_8062217C(Actor *, s32); // extern
void func_global_asm_806A5DF0(s16 arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4, u8 arg5, s16 arg6, s32 arg7);
u8 func_global_asm_8072881C(u8 arg0, u32 *arg1);
void func_global_asm_8072A450(void);
u8 func_global_asm_8072D13C(u8 arg0, s32 arg1);
extern int func_global_asm_8068E474(); // TODO: Signature
extern int func_global_asm_806BE6F0(); // TODO: Signature
void func_global_asm_8061C518(Actor*, Actor*, s32, s32, s32, s32, s32, s32, s32, s32, f32);
void func_global_asm_8061C600(Actor*, Actor*, s32, s32, s32, s32, s32, s32, s32, s32, f32);
void func_global_asm_806BF920(void);
@ -247,8 +258,212 @@ Gfx *func_global_asm_806BE6F0(Gfx *dl, Actor *arg1) {
}
*/
// Jumptable
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_C2A90/func_global_asm_806BE8BC.s")
void func_global_asm_806BE8BC(void) {
u8 sp37;
s16 j;
s16 i;
s16 var_v0;
sp37 = isFlagSet(0xF8, FLAG_TYPE_PERMANENT);
initializeCharacterSpawnerActor();
if (extra_player_info_pointer->unk1F0 & 0x100000) {
current_actor_pointer->control_state = 0x40;
return;
}
if (!(current_actor_pointer->object_properties_bitfield & 0x10)) {
func_global_asm_80724CA4(2, 1);
D_global_asm_807FDC98->unk46 |= 0x20;
playActorAnimation(current_actor_pointer, 0x306);
func_global_asm_80728950(0);
current_actor_pointer->control_state = 0x1E;
current_actor_pointer->control_state_progress = 0;
current_actor_pointer->unk15F = 0;
}
switch (current_actor_pointer->control_state) {
case 0x26:
playActorAnimation(current_actor_pointer, 0x307);
current_actor_pointer->control_state = 0x27;
current_actor_pointer->control_state_progress = 0;
break;
case 0x1E:
func_global_asm_80684850(1);
if (current_actor_pointer->shadow_opacity < 0xFF) {
current_actor_pointer->shadow_opacity += 5;
}
if (func_global_asm_80629148()) {
func_global_asm_8063DA40(0x1F, 3);
func_global_asm_80672C30(player_pointer);
func_global_asm_80726EE0(1);
D_global_asm_807FDC98->unk46 |= 4;
func_global_asm_806BE674(1);
func_global_asm_807289B0(0, 0);
if (sp37) {
func_global_asm_80641874(0x17, 0x14);
loadText(current_actor_pointer, 0x14, 1);
} else {
loadText(current_actor_pointer, 0x14, 0);
}
playActorAnimation(current_actor_pointer, 0x309);
current_actor_pointer->control_state = 0x1F;
current_actor_pointer->control_state_progress = 0;
}
break;
case 0x1F:
switch (current_actor_pointer->control_state_progress) {
case 0:
if (func_global_asm_80629148()) {
func_global_asm_8061CAD8();
func_global_asm_8061CAD8();
current_actor_pointer->control_state_progress++;
current_actor_pointer->unk168 = 0x78;
}
break;
case 1:
addActorToTextOverlayRenderArray(&func_global_asm_806BE6F0, current_actor_pointer, 3);
break;
case 2:
playSong(0xA9, 1.0f);
D_global_asm_807FBB64 |= 4;
func_global_asm_8061CB08();
func_global_asm_8062217C(D_global_asm_807F5D10, 3);
playActorAnimation(current_actor_pointer, 0x302);
func_global_asm_8072B324(current_actor_pointer, (sp37 ? 1.5 : 1.0) * D_global_asm_807FDC9C->unkD);
current_actor_pointer->control_state = 2;
current_actor_pointer->control_state_progress = 0;
func_global_asm_8061F510(1, 0xA);
extra_player_info_pointer->unk1F4 |= 0x40;
break;
}
break;
case 0x27:
if (current_actor_pointer->control_state_progress == 0) {
func_global_asm_80602B60(0xA9, 0);
current_actor_pointer->object_properties_bitfield &= ~0x8000;
current_actor_pointer->shadow_opacity = 0xFF;
func_global_asm_806BE674(0);
playCutscene(current_actor_pointer, 0xF, 5);
current_actor_pointer->y_rotation = func_global_asm_80665DE0(player_pointer->x_position, player_pointer->z_position, current_actor_pointer->x_position, current_actor_pointer->z_position);
loadText(current_actor_pointer, 0x14, 4);
current_actor_pointer->control_state = 0x37;
current_actor_pointer->control_state_progress = 0;
current_actor_pointer->y_position = current_actor_pointer->floor;
}
break;
case 0x28:
switch (current_actor_pointer->control_state_progress) {
case 0:
func_global_asm_80602B60(0xA9, 0);
current_actor_pointer->object_properties_bitfield &= ~0x8000;
current_actor_pointer->shadow_opacity = 0xFF;
func_global_asm_806BE674(0);
playCutscene(current_actor_pointer, 0x1F, 1);
current_actor_pointer->y_rotation = func_global_asm_80665DE0(player_pointer->x_position, player_pointer->z_position, current_actor_pointer->x_position, current_actor_pointer->z_position);
playActorAnimation(current_actor_pointer, 0x308);
func_global_asm_8070E8DC(1);
if (sp37) {
loadText(current_actor_pointer, 0x14, 3);
} else {
loadText(current_actor_pointer, 0x14, 2);
}
current_actor_pointer->control_state_progress = 1;
current_actor_pointer->y_position = current_actor_pointer->floor;
break;
case 1:
if (func_global_asm_80629148()) {
if (sp37) {
func_global_asm_8063DA40(0x57, 0xA);
D_global_asm_807FDC90->unk1A |= 0x8000;
} else {
// Problem here
var_v0 = current_actor_pointer->y_rotation - 0x12C;
playSong(0x2F, 1.0f);
for (i = 0; i < 3; i++, var_v0 += 0x12C) {
func_global_asm_806A5DF0(
0x35,
current_actor_pointer->x_position,
current_actor_pointer->y_position,
current_actor_pointer->z_position,
var_v0,
0x63,
-1,
0
);
}
}
setFlag(0xF8, TRUE, FLAG_TYPE_PERMANENT);
current_actor_pointer->control_state = 0x37;
current_actor_pointer->control_state_progress = 0;
current_actor_pointer->y_position = current_actor_pointer->floor;
}
break;
}
break;
case 0x37:
if (!(current_actor_pointer->object_properties_bitfield & 0x02000000)) {
func_global_asm_8072DC7C(2);
if (current_actor_pointer->control_state_progress != 0) {
D_global_asm_807FBB64 &= ~4;
extra_player_info_pointer->unk23F = 2;
func_global_asm_8061F510(1, 0);
extra_player_info_pointer->unk1F4 &= ~0x40;
func_global_asm_8072EC94(0x16, 0);
func_global_asm_80726EE0(2);
if (D_global_asm_807FDC90->unk1A & 0x8000) {
current_actor_pointer->control_state = 0x40;
} else {
if (current_actor_pointer->animation_state->unk64 != 0x308) {
func_global_asm_806ACC00(2);
}
func_global_asm_8063DA40(0x1F, 1);
current_actor_pointer->control_state = 0x3C;
}
}
}
break;
case 0x13:
playActorAnimation(current_actor_pointer, 0x305);
current_actor_pointer->y_velocity = 200.0f;
current_actor_pointer->control_state = 2;
current_actor_pointer->control_state_progress = 0;
// fallthrough
default:
if (current_actor_pointer->unk15F < 0x10U) {
addActorToTextOverlayRenderArray(&func_global_asm_8068E474, current_actor_pointer, 3);
}
if ((((rand() >> 0xF) % 1000) >= 0x3DF) && (current_actor_pointer->animation_state->unk64 == 0x302)) {
playActorAnimation(current_actor_pointer, (object_timer & 1) ? 0x303 : 0x304);
}
if (D_global_asm_807FBB70.unk0 != 0) {
if ((D_global_asm_807FBB70.unk1 >= D_global_asm_807506C0[current_actor_pointer->unk15F]) && (current_actor_pointer->unk15F < 0x10U)) {
if (D_global_asm_807FBB70.unk1 != D_global_asm_807506C0[current_actor_pointer->unk15F]) {
playActorAnimation(current_actor_pointer, 0x301);
current_actor_pointer->control_state = 0x27;
current_actor_pointer->control_state_progress = 0;
} else {
current_actor_pointer->unk15F++;
if (current_actor_pointer->unk15F >= 0x10U) {
func_global_asm_8072EC94(0x16, 1);
}
}
}
}
for (j = 0; j < D_global_asm_807FBB70.unk254; j++) {
if (D_global_asm_807FBB70.unk258[j] == 3) {
current_actor_pointer->control_state = 0x28;
current_actor_pointer->control_state_progress = 0;
}
}
func_global_asm_8072881C(0, &D_global_asm_807FDC90->unk28);
func_global_asm_8072AB74(current_actor_pointer->control_state, D_global_asm_807FDC90->unkA, D_global_asm_807FDC90->unkE, 0x10, 0.0f);
func_global_asm_8072D13C(current_actor_pointer->control_state, 0);
break;
}
if ((current_actor_pointer->animation_state->unk64 == 0x301) || (current_actor_pointer->animation_state->unk64 == 0x302)) {
func_global_asm_80724E48(0);
}
func_global_asm_8072A450();
renderActor(current_actor_pointer, 0);
}
// Jumptable
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_C2A90/func_global_asm_806BF218.s")

View File

@ -2099,7 +2099,7 @@ u8 func_global_asm_806D0DE4(Actor *arg0, Actor *arg1) {
return var_v0 < var_v1 && var_a2;
}
void func_global_asm_806D0EBC(s32 arg0) {
void func_global_asm_806D0EBC(Actor *arg0) {
f32 phi_f12;
f32 phi_f0;

View File

@ -2053,11 +2053,10 @@ extern f32 D_global_asm_80753AE0[];
/*
void func_global_asm_806D8B08(void) {
f32 temp_f0;
f32 temp_f14;
f32 temp_f2;
f32 temp_f0;
extra_player_info_pointer->unk24 += 1;
extra_player_info_pointer->unk24++;
extra_player_info_pointer->unk2C = D_global_asm_80753AFC[D_global_asm_807FD584];
switch (current_actor_pointer->control_state_progress) {
case 0:
@ -2065,7 +2064,7 @@ void func_global_asm_806D8B08(void) {
temp_f14 = D_global_asm_80753A5C[D_global_asm_807FD584];
current_actor_pointer->y_velocity = func_global_asm_806CD898(current_actor_pointer->y_velocity, temp_f14, extra_player_info_pointer->unk1C);
if (temp_f14 <= current_actor_pointer->y_velocity) {
if ((current_actor_pointer->unkB8 != 0.0f) || (extra_player_info_pointer->unk10 != 0)) {
if ((current_actor_pointer->unkB8 != 0) || (extra_player_info_pointer->unk10 != 0)) {
current_actor_pointer->control_state_progress = 3;
} else {
current_actor_pointer->control_state_progress = 2;
@ -2077,27 +2076,25 @@ void func_global_asm_806D8B08(void) {
break;
case 1:
handleInputsForControlState(0x4F);
func_global_asm_806CC638(0.0f);
func_global_asm_806CC638(0);
if (extra_player_info_pointer->unk10 == 0) {
current_actor_pointer->control_state_progress = 3;
}
temp_f14 = (extra_player_info_pointer->unk10 / 7.5) + 1.0;
temp_f14 = (extra_player_info_pointer->unk10 / 7.5) + 1;
if (current_actor_pointer->animation_state->unk48 < temp_f14) {
func_global_asm_80614D00(current_actor_pointer, temp_f14, 0.0f);
func_global_asm_80614D00(current_actor_pointer, temp_f14, 0);
} else {
func_global_asm_80614D00(current_actor_pointer, temp_f14, 15.0f);
}
func_global_asm_80684D98(2);
temp_f0 = current_actor_pointer->unkAC;
temp_f2 = D_global_asm_807538C8[D_global_asm_807FD584];
if (temp_f0 < (temp_f2 + current_actor_pointer->y_position)) {
current_actor_pointer->y_position = temp_f0 - temp_f2;
if (current_actor_pointer->unkAC < (D_global_asm_807538C8[D_global_asm_807FD584] + current_actor_pointer->y_position)) {
current_actor_pointer->y_position = current_actor_pointer->unkAC - D_global_asm_807538C8[D_global_asm_807FD584];
}
break;
default:
handleInputsForControlState(0x54);
func_global_asm_806CC638(D_global_asm_80753A5C[D_global_asm_807FD584]);
if (current_actor_pointer->unkB8 != 0.0f) {
if (current_actor_pointer->unkB8 != 0) {
extra_player_info_pointer->unk18 = 0;
current_actor_pointer->control_state_progress = 3;
} else {
@ -2112,7 +2109,7 @@ void func_global_asm_806D8B08(void) {
break;
case 3:
handleInputsForControlState(0x50);
func_global_asm_806CC638(0.0f);
func_global_asm_806CC638(0);
break;
case 4:
handleInputsForControlState(0x51);
@ -2120,27 +2117,27 @@ void func_global_asm_806D8B08(void) {
extra_player_info_pointer->unk14 = current_actor_pointer->y_rotation;
extra_player_info_pointer->unk38 = D_global_asm_80753AE0[D_global_asm_807FD584];
extra_player_info_pointer->unk10 = D_global_asm_80753A88[D_global_asm_807FD584];
func_global_asm_806CC638(0.0f);
current_actor_pointer->control_state_progress += 1;
func_global_asm_806CC638(0);
current_actor_pointer->control_state_progress++;
break;
case 5:
handleInputsForControlState(0x51);
func_global_asm_806CC638(0.0f);
func_global_asm_806CC638(0);
break;
case 6:
handleInputsForControlState(0x52);
func_global_asm_806CC638(0.0f);
func_global_asm_806CC638(0);
break;
case 7:
handleInputsForControlState(0x51);
func_global_asm_806CC638(0.0f);
func_global_asm_806CC638(0);
break;
case 8:
handleInputsForControlState(0x53);
func_global_asm_806CC638(0.0f);
func_global_asm_806CC638(0);
break;
}
if ((current_actor_pointer->unkB8 == 0.0f) || (extra_player_info_pointer->unk18 != 0)) {
if ((current_actor_pointer->unkB8 == 0) || (extra_player_info_pointer->unk18 != 0)) {
extra_player_info_pointer->unk50 = D_global_asm_80753A78[D_global_asm_807FD584];
func_global_asm_80614D00(current_actor_pointer, 0.5f, extra_player_info_pointer->unk50);
current_actor_pointer->control_state_progress = 2;
@ -3325,23 +3322,23 @@ void func_global_asm_806DC410(void) {
func_global_asm_806CC970();
}
// doable, switch case woes, float
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_D78D0/func_global_asm_806DCA7C.s")
/*
// TODO: Doable, made good progress, not sure what's going on with case 1
void func_global_asm_806DCA7C(Actor **arg0, s32 arg1) {
f32 sp50;
f32 sp4C;
f32 sp44;
f32 sp40;
f32 sp3C;
f32 d;
f32 dy;
f32 x;
f32 y;
f32 z;
f32 dx;
f32 dz;
s32 var_v0;
s32 var_v1;
current_actor_pointer->object_properties_bitfield &= 0xFFBFFFFF;
current_actor_pointer->unk6A &= 0xFFBF;
current_actor_pointer->object_properties_bitfield &= ~0x400000;
current_actor_pointer->unk6A &= ~0x40;
current_actor_pointer->z_rotation += (-current_actor_pointer->z_rotation * 0.1);
switch (current_actor_pointer->control_state_progress) {
case 0:
@ -3367,7 +3364,7 @@ void func_global_asm_806DCA7C(Actor **arg0, s32 arg1) {
}
func_global_asm_806DF5A0(&current_actor_pointer->y_rotation, current_actor_pointer->unkEE, 0x78, 0x600);
current_actor_pointer->y_velocity = extra_player_info_pointer->unk150;
current_actor_pointer->control_state_progress += 1;
current_actor_pointer->control_state_progress++;
handleInputsForControlState(0x27);
extra_player_info_pointer->unk30 /= 2;
func_global_asm_806CC948();
@ -3391,17 +3388,17 @@ void func_global_asm_806DCA7C(Actor **arg0, s32 arg1) {
extra_player_info_pointer->unk4 = 150.0f;
extra_player_info_pointer->unk38 = 150.0f;
if (extra_player_info_pointer->unk158 != 0) {
getBonePosition(extra_player_info_pointer->unk158, 1, &sp44, &sp40, &sp3C);
dx = sp44 - current_player->x_position;
dz = sp3C - current_player->z_position;
sp4C = (sp40 - current_player->y_position) / (current_player->animation_state->scale_y * 0.166666666749999998);
sp50 = ((sqrtf((dx * dx) + (dz * dz)) / (current_player->animation_state->scale_y * 0.166666666749999998)) / current_player->unkB8) - 1.0f;
if (sp50 < 1.0f) {
sp50 = 1.0f;
getBonePosition(extra_player_info_pointer->unk158, 1, &x, &y, &z);
dx = x - current_player->x_position;
dz = z - current_player->z_position;
dy = (y - current_player->y_position) / (current_player->animation_state->scale_y * 0.166666666749999998);
d = ((sqrtf((dx * dx) + (dz * dz)) / (current_player->animation_state->scale_y * 0.166666666749999998)) / current_player->unkB8) - 1.0f;
if (d < 1.0f) {
d = 1.0f;
}
}
if ((extra_player_info_pointer->unk158 != 0) && (sp50 < 30.0f)) {
current_player->y_velocity = (((0.0 - (D_global_asm_80753CD0[D_global_asm_807FD584]) * 0.5 * (sp50 * sp50)) - sp4C)) / sp50;
if ((extra_player_info_pointer->unk158 != 0) && (d < 30.0f)) {
current_player->y_velocity = (((0.0 - (D_global_asm_80753CD0[D_global_asm_807FD584]) * 0.5 * (d * d)) - dy)) / d;
current_player->y_acceleration = -0.001f;
} else {
extra_player_info_pointer->unk158 = 0;
@ -3795,6 +3792,129 @@ void func_global_asm_806DDAB0(void) {
// Jumptable
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_D78D0/func_global_asm_806DE264.s")
/*
void func_global_asm_80614A64(Actor *); // extern
void func_global_asm_806DE264(void) {
f32 z;
f32 y;
f32 x;
f32 var_f2;
f32 sp3C;
current_actor_pointer->y_velocity = 0.0f;
current_actor_pointer->unkB8 = 0.0f;
handleInputsForControlState(1);
if (func_global_asm_806CFC90(current_actor_pointer, &sp3C, 1, 15.0f)) {
extra_player_info_pointer->unkF0_f32 = sp3C;
}
if (ABS_DIFF(extra_player_info_pointer->unkF4_f32, extra_player_info_pointer->unkF0_f32) > 20.0) {
func_global_asm_806CFF1C(current_actor_pointer);
renderActor(current_actor_pointer, 0);
return;
}
extra_player_info_pointer->unkF4_f32 = extra_player_info_pointer->unkF0_f32;
current_actor_pointer->object_properties_bitfield |= 0x08000000;
renderActor(current_actor_pointer, 0);
func_global_asm_80678DD8(current_actor_pointer);
switch (current_actor_pointer->control_state_progress) {
case 0:
switch (current_actor_pointer->unk58) {
case ACTOR_LANKY:
if (current_actor_pointer->animation_state->unk0->unk4 < 25.0f) {
getBonePosition(current_actor_pointer, 7, &x, &y, &z);
current_actor_pointer->y_position = extra_player_info_pointer->unkF0_f32 - (y - current_actor_pointer->y_position);
}
if (current_actor_pointer->animation_state->unk0->unk4 < 25.0f) {
current_actor_pointer->x_position = extra_player_info_pointer->unkE0;
current_actor_pointer->z_position = extra_player_info_pointer->unkE4;
} else if (current_actor_pointer->animation_state->unk0->unk4 < 31.0f) {
current_actor_pointer->unkEE = current_actor_pointer->y_rotation;
current_actor_pointer->unkB8 = 70.0f;
current_actor_pointer->y_position = extra_player_info_pointer->unkF0_f32;
} else {
current_actor_pointer->y_position = extra_player_info_pointer->unkF0_f32;
}
break;
case ACTOR_TINY:
if (current_actor_pointer->animation_state->unk0->unk4 < 17.0f) {
getBonePosition(current_actor_pointer, 7, &x, &y, &z);
current_actor_pointer->y_position = extra_player_info_pointer->unkF0_f32 - (y - current_actor_pointer->y_position);
}
if (current_actor_pointer->animation_state->unk0->unk4 < 19.0f) {
current_actor_pointer->x_position = extra_player_info_pointer->unkE0;
current_actor_pointer->z_position = extra_player_info_pointer->unkE4;
} else if (current_actor_pointer->animation_state->unk0->unk4 < 29.0f) {
current_actor_pointer->unkEE = current_actor_pointer->y_rotation;
current_actor_pointer->unkB8 = 40.0f;
current_actor_pointer->y_position = extra_player_info_pointer->unkF0_f32;
} else {
current_actor_pointer->y_position = extra_player_info_pointer->unkF0_f32;
}
break;
case ACTOR_DK:
getBonePosition(current_actor_pointer, 7, &x, &y, &z);
current_actor_pointer->y_position = extra_player_info_pointer->unkF0_f32 - (y - current_actor_pointer->y_position);
if (current_actor_pointer->animation_state->unk0->unk4 > 16.0f) {
current_actor_pointer->unkEE = current_actor_pointer->y_rotation;
current_actor_pointer->y_position = extra_player_info_pointer->unkF0_f32;
current_actor_pointer->unkB8 = 30.0f;
} else {
current_actor_pointer->x_position = extra_player_info_pointer->unkE0;
current_actor_pointer->z_position = extra_player_info_pointer->unkE4;
}
break;
case ACTOR_CHUNKY:
case ACTOR_KRUSHA:
if (current_actor_pointer->animation_state->unk0->unk4 < 18.0f) {
getBonePosition(current_actor_pointer, 7, &x, &y, &z);
current_actor_pointer->y_position = extra_player_info_pointer->unkF0_f32 - (y - current_actor_pointer->y_position);
current_actor_pointer->x_position = extra_player_info_pointer->unkE0;
current_actor_pointer->z_position = extra_player_info_pointer->unkE4;
} else if (current_actor_pointer->animation_state->unk0->unk4 < 26.0f) {
current_actor_pointer->unkEE = current_actor_pointer->y_rotation;
current_actor_pointer->unkB8 = 50.0f;
current_actor_pointer->y_position = extra_player_info_pointer->unkF0_f32;
} else {
if (ABS_DIFF(current_actor_pointer->floor, extra_player_info_pointer->unkF0_f32) >= 20.0) {
func_global_asm_806CFF1C(current_actor_pointer);
} else {
current_actor_pointer->y_position = current_actor_pointer->floor;
}
}
break;
default:
getBonePosition(current_actor_pointer, 7, &x, &y, &z);
current_actor_pointer->y_position = extra_player_info_pointer->unkF0_f32 - (y - current_actor_pointer->y_position);
if (current_actor_pointer->animation_state->unk0->unk4 > 14.0f) {
current_actor_pointer->unkEE = current_actor_pointer->y_rotation;
current_actor_pointer->unkB8 = 10.0f;
current_actor_pointer->y_position = extra_player_info_pointer->unkF0_f32;
} else {
current_actor_pointer->x_position = extra_player_info_pointer->unkE0;
current_actor_pointer->z_position = extra_player_info_pointer->unkE4;
}
break;
}
func_global_asm_806CC970();
break;
case 1: // switch 1
func_global_asm_806CC970();
if (ABS_DIFF(current_actor_pointer->floor, extra_player_info_pointer->unkF0_f32) < 20.0) {
current_actor_pointer->y_position = current_actor_pointer->floor;
current_actor_pointer->unk6A |= 1;
current_actor_pointer->y_velocity = -50.0f;
func_global_asm_806CFF9C(current_actor_pointer);
} else {
func_global_asm_806CFF1C(current_actor_pointer);
}
break;
}
renderActor(current_actor_pointer, 0);
func_global_asm_80614A64(current_actor_pointer);
}
*/
void func_global_asm_806DE930(void) {
extra_player_info_pointer->unk4 = 0.0f;
if (!handleInputsForControlState(1)) {

View File

@ -788,7 +788,7 @@ void func_menu_800270E0(void) {
break;
case 5:
if (!(current_actor_pointer->object_properties_bitfield & 0x02000000)) {
func_global_asm_8061CB08(current_actor_pointer);
func_global_asm_8061CB08();
current_actor_pointer->control_state = 6;
}
break;