Audio/external matches (#412)

* Match func_800C8920, func_800C8AE4, and..

Introduce struct Unk_800E9F7C and cleanup existing code

* Match func_800C40F0, add the likely other pos vars in the unk struct

* func_800C8CCC
This commit is contained in:
Joshua Peisach
2023-09-10 00:27:40 -04:00
committed by GitHub
parent 70207db13b
commit b0ca74ff0d
6 changed files with 84 additions and 407 deletions
+73 -123
View File
@@ -1545,25 +1545,17 @@ void func_800C4084(u16 bankMask) {
}
}
#ifdef MIPS_TO_C
//generated by m2c commit eefca95b040d7ee0c617bc58f9ac6cd1cf7bce87 on Aug-14-2023
extern ? D_801930D0;
static u16 D_800EA1C4 = 0;
extern u16 D_800EA1C4;
extern u8 D_801930D0[];
void func_800C40F0(s32 arg0) {
u16 temp_t1;
unksp-10.unk10 = arg0;
temp_t1 = D_800EA1C4 & ((1 << (arg0 & 0xFF)) ^ 0xFFFF);
D_800EA1C4 = temp_t1;
if (!(temp_t1 & 0xFFFF)) {
D_801930D0.unk12 = 1;
D_801930D0.unk10 = 0x7F;
void func_800C40F0(u8 arg0) {
D_800EA1C4 &= ((1 << (arg0)) ^ (u16) -1);
if (!D_800EA1C4) {
D_801930D0[18] = 1;
D_801930D0[16] = 0x7F;
}
}
#else
GLOBAL_ASM("asm/non_matchings/audio/external/func_800C40F0.s")
#endif
void play_sound(u32 soundBits, f32 *position, u8 arg2, f32 *arg3, f32 *arg4, u8 *arg5) {
u8 bank;
@@ -3805,19 +3797,20 @@ void func_800C8770(u8 playerId) {
}
}
#ifdef MIPS_TO_C
//generated by m2c commit eefca95b040d7ee0c617bc58f9ac6cd1cf7bce87 on Aug-14-2023
? func_800CAC08(); /* extern */
static u8 D_800EA168 = 0;
// Checks the same field for all players before doing something?
void func_800C8920(void) {
if ((D_800EA168 != 0) && ((gPlayers->unk_0BC & 0x40000000) != 0x40000000) && ((gPlayers->unkE94 & 0x40000000) != 0x40000000) && ((gPlayers->unk1C6C & 0x40000000) != 0x40000000) && ((gPlayers->unk2A44 & 0x40000000) != 0x40000000) && ((gPlayers->unk381C & 0x40000000) != 0x40000000) && ((gPlayers->unk45F4 & 0x40000000) != 0x40000000) && ((gPlayers->unk53CC & 0x40000000) != 0x40000000) && ((gPlayers->unk61A4 & 0x40000000) != 0x40000000)) {
func_800CAC08();
}
if (((u8) D_800EA168 != 0)
&& ((gPlayers[0].unk_0BC & 0x40000000) != 0x40000000)
&& ((gPlayers[1].unk_0BC & 0x40000000) != 0x40000000)
&& ((gPlayers[2].unk_0BC & 0x40000000) != 0x40000000)
&& ((gPlayers[3].unk_0BC & 0x40000000) != 0x40000000)
&& ((gPlayers[4].unk_0BC & 0x40000000) != 0x40000000)
&& ((gPlayers[5].unk_0BC & 0x40000000) != 0x40000000)
&& ((gPlayers[6].unk_0BC & 0x40000000) != 0x40000000)
&& ((gPlayers[7].unk_0BC & 0x40000000) != 0x40000000)) {
func_800CAC08();
}
}
#else
GLOBAL_ASM("asm/non_matchings/audio/external/func_800C8920.s")
#endif
void func_800C89E4(void) {
if (D_800EA180 != 0) {
@@ -3842,68 +3835,50 @@ void func_800C89E4(void) {
}
}
#ifdef MIPS_TO_C
//generated by m2c commit 0927f17aac197848d4ebdf0c6bbad74b01f0851c
static ? D_800E9F7C; /* unable to generate initializer; const */
static u8 D_800EA16C = 0; /* const */
static u16 D_800EA184 = 0; /* const */
static u8 D_800EA1C0 = 0; /* const */
s16 gCurrentCourseId; /* unable to generate initializer */
extern struct Unk_800E9F7C D_800E9F7C[];
extern u16 D_800EA184;
static f64 D_800F38B4 = 0.85;
void func_800C8AE4(void) {
u16 temp_t8;
u16 var_v0;
u8 temp_v0;
if (gCurrentCourseId == 8) {
var_v0 = D_800EA184;
if (var_v0 != 0) {
temp_t8 = var_v0 + 1;
if (D_800EA16C == 0) {
D_800EA184 = temp_t8;
var_v0 = temp_t8 & 0xFFFF;
if (D_800EA184 != 0) {
if ((u8) D_800EA16C == 0) {
D_800EA184 += 1;
}
if (var_v0 == 0x012C) {
D_800EA17C = 0.85f;
if (D_800EA184 == 0x12C) {
D_800EA17C = 0.85;
D_800EA184 = 0;
}
} else {
temp_v0 = D_800EA1C0;
switch (temp_v0) { /* irregular */
switch (D_800EA1C0) { /* irregular */
case 0:
if (D_800E9F7C.unk14 != 0) {
if (D_800E9F7C[0].unk14[0] != 0) {
D_800EA17C = 0.0f;
D_800EA184 = 1;
return;
}
break;
case 1:
if ((D_800E9F7C.unk14 != 0) || (D_800E9F7C.unk50 != 0)) {
if ((D_800E9F7C[0].unk14[0] != 0) || (D_800E9F7C[1].unk14[0] != 0)) {
D_800EA17C = 0.0f;
block_25:
D_800EA184 = 1;
}
break;
case 2:
if ((D_800E9F7C.unk14 != 0) || (D_800E9F7C.unk50 != 0) || (D_800E9F7C.unk8C != 0)) {
if ((D_800E9F7C[0].unk14[0] != 0) || (D_800E9F7C[1].unk14[0] != 0) || (D_800E9F7C[2].unk14[0] != 0)) {
D_800EA17C = 0.0f;
D_800EA184 = 1;
return;
}
break;
case 3:
if ((D_800E9F7C.unk14 != 0) || (D_800E9F7C.unk50 != 0) || (D_800E9F7C.unk8C != 0) || (D_800E9F7C.unkC8 != 0)) {
if ((D_800E9F7C[0].unk14[0] != 0) || (D_800E9F7C[1].unk14[0] != 0) || (D_800E9F7C[2].unk14[0] != 0) || (D_800E9F7C[3].unk14[0] != 0)) {
D_800EA17C = 0.0f;
goto block_25;
D_800EA184 = 1;
}
break;
}
}
}
}
#else
GLOBAL_ASM("asm/non_matchings/audio/external/func_800C8AE4.s")
#endif
extern f32 D_800EA130;
@@ -3911,70 +3886,47 @@ void func_800C8C7C(u8 arg0) {
*(&D_800EA06C[arg0].unk00[2]) = (1.0f - D_800E9F54[arg0]) - (&D_800EA130)[arg0];
}
#ifdef MIPS_TO_C
//generated by m2c commit eefca95b040d7ee0c617bc58f9ac6cd1cf7bce87 on Aug-14-2023
? func_800C5D04(s32); /* extern */
? func_800C5E38(s32); /* extern */
? func_800C6108(s32); /* extern */
? func_800C64A0(s32); /* extern */
? func_800C683C(s32); /* extern */
? func_800C70A8(s32); /* extern */
? func_800C76C0(s32); /* extern */
? func_800C847C(s32); /* extern */
? func_800C8920(); /* extern */
? func_800C8AE4(); /* extern */
? func_800C8C7C(s32); /* extern */
u8 D_800EA1C0 = 0;
extern void func_800C5D04(u8); /* extern */
extern void func_800C5E38(u8); /* extern */
extern void func_800C6108(u8); /* extern */
extern void func_800C64A0(u8); /* extern */
extern void func_800C683C(u8); /* extern */
extern void func_800C70A8(u8); /* extern */
extern void func_800C76C0(u8); /* extern */
extern void func_800C847C(u8); /* extern */
extern void func_800C8920(); /* extern */
extern void func_800C8AE4(); /* extern */
void func_800C8CCC(void) {
s32 temp_t6;
s32 temp_t8;
s32 temp_t9;
s32 var_s0;
s32 var_v0;
void func_800C8CCC() {
u8 i;
var_v0 = D_800EA1C0 + 1;
var_s0 = 0;
if (var_v0 > 0) {
do {
func_800C5D04(var_s0 & 0xFF);
func_800C5E38(var_s0 & 0xFF);
func_800C6108(var_s0 & 0xFF);
func_800C64A0(var_s0 & 0xFF);
func_800C6758(var_s0 & 0xFF);
func_800C683C(var_s0 & 0xFF);
func_800C70A8(var_s0 & 0xFF);
func_800C76C0(var_s0 & 0xFF);
func_800C847C(var_s0 & 0xFF);
func_800C86D8(var_s0 & 0xFF);
temp_t6 = (var_s0 + 1) & 0xFF;
var_v0 = D_800EA1C0 + 1;
var_s0 = temp_t6;
} while (temp_t6 < var_v0);
var_s0 = 0;
for (i = 0; i < D_800EA1C0 + 1; i++) {
func_800C5D04(i);
func_800C5E38(i);
func_800C6108(i);
func_800C64A0(i);
func_800C6758(i);
func_800C683C(i);
func_800C70A8(i);
func_800C76C0(i);
func_800C847C(i);
func_800C86D8(i);
}
if (gModeSelection == 0) {
do {
func_800C8770(var_s0 & 0xFF);
func_800C8C7C(var_s0 & 0xFF);
temp_t8 = (var_s0 + 1) & 0xFF;
var_s0 = temp_t8;
} while (temp_t8 < 8);
} else if (var_v0 > 0) {
do {
func_800C8770(var_s0 & 0xFF);
func_800C8C7C(var_s0 & 0xFF);
temp_t9 = (var_s0 + 1) & 0xFF;
var_s0 = temp_t9;
} while (temp_t9 < (D_800EA1C0 + 1));
for(i = 0; i < 8; i++) {
func_800C8770(i);
func_800C8C7C(i);
}
} else {
for(i = 0; i < D_800EA1C0 + 1; i++) {
func_800C8770(i);
func_800C8C7C(i);
}
}
func_800C8920();
func_800C89E4();
func_800C8AE4();
}
#else
GLOBAL_ASM("asm/non_matchings/audio/external/func_800C8CCC.s")
#endif
void play_sound2(s32 soundBits) {
@@ -4002,8 +3954,6 @@ void func_800C8F44(u8 arg0) {
func_800C36C4(0, 0, arg0, 1);
}
extern struct Unk_8018EFD8 D_800E9F7C[];
void func_800C8F80(u8 arg0, s32 arg1) {
u8 temp_v0;
u8* temp_v1;
@@ -4015,7 +3965,7 @@ void func_800C8F80(u8 arg0, s32 arg1) {
case 2:
*temp_v1 = 1;
case 0:
play_sound((u32) arg1, (f32* ) &D_800E9F7C[arg0], arg0, D_800EA1D4, D_800EA1D4, &D_800EA1DC);
play_sound((u32) arg1, &D_800E9F7C[arg0], arg0, D_800EA1D4, D_800EA1D4, &D_800EA1DC);
break;
}
}
@@ -4032,7 +3982,7 @@ void func_800C9060(u8 arg0, u32 arg1) {
case 2:
D_800EA0EC[arg0] = 1;
case 0:
play_sound(arg1, (f32*) &D_800E9F7C[arg0].posX, arg0, D_800EA1D4, D_800EA1D4, (u8*) &D_800E9F7C[arg0].velZ);
play_sound(arg1, &D_800E9F7C[arg0], arg0, D_800EA1D4, D_800EA1D4, (u8*) &D_800E9F7C[arg0].unk14[0]);
break;
}
}
@@ -4259,11 +4209,11 @@ GLOBAL_ASM("asm/non_matchings/audio/external/func_800C94A4.s")
#endif
void func_800C97C4(u8 arg0) {
func_800C5578((f32* ) &D_800E9F7C[arg0], gPlayers[arg0].characterId + 0x0104FF00);
func_800C5578((f32* ) &D_800E9F7C[arg0], gPlayers[arg0].characterId + 0x0104FF14);
func_800C5578((f32* ) &D_800E9F7C[arg0], gPlayers[arg0].characterId + 0x0104FF2E);
func_800C5578((f32* ) &D_800E9F7C[arg0], gPlayers[arg0].characterId + 0x0104FF36);
func_800C5578((f32* ) &D_800E9F7C[arg0], gPlayers[arg0].characterId + 0x0104FF3E);
func_800C5578(&D_800E9F7C[arg0], gPlayers[arg0].characterId + 0x0104FF00);
func_800C5578(&D_800E9F7C[arg0], gPlayers[arg0].characterId + 0x0104FF14);
func_800C5578(&D_800E9F7C[arg0], gPlayers[arg0].characterId + 0x0104FF2E);
func_800C5578(&D_800E9F7C[arg0], gPlayers[arg0].characterId + 0x0104FF36);
func_800C5578(&D_800E9F7C[arg0], gPlayers[arg0].characterId + 0x0104FF3E);
}
void func_800C98B8(f32* position, f32* velocity, u32 soundBits) {
+11
View File
@@ -88,6 +88,15 @@ struct Unk_800EA06C {
/* 0x0D */ // u8 compilerPadding0[3];
};
// Similar to Unk_8018EFD8
// Should look like 5 f32's, then 4 u8's, then 9 f32's.
struct Unk_800E9F7C {
Vec3f pos;
f32 unk4[2];
s8 unk14[4];
f32 unk18[9];
}; // Size is still 0x3C.
void func_800C94A4(u8);
void func_800CADD0(u8, f32);
void func_800C13F0(void);
@@ -134,6 +143,7 @@ void func_800C6758(u8);
void func_800C86D8(u8);
void func_800C8770(u8);
void func_800C8920(void);
void func_800C89E4(void);
void func_800C8CCC(void);
void play_sound2(s32);
@@ -169,6 +179,7 @@ void func_800CA388(u8);
void func_800CA414(u16, u16);
void func_800CA49C(u8);
void func_800CAACC(u8);
void func_800CAC08();
void func_800CAC60(s32);
void func_800CAD40(s32);
void func_800CAEC4(u8, f32);