diff --git a/src/game/data/data_00e460.c b/src/game/data/data_00e460.c index 0d0822462..da9898c55 100644 --- a/src/game/data/data_00e460.c +++ b/src/game/data/data_00e460.c @@ -1064,7 +1064,7 @@ u32 var8006ae00 = 0x00000000; u32 var8006ae04 = 0x00000000; u32 var8006ae08 = 0x00000000; u32 var8006ae0c = 0x00000000; -u32 var8006ae10 = 0x00000000; +struct var8006ae10 *var8006ae10 = NULL; u32 var8006ae14 = 0x00000000; s8 var8006ae18 = 0; s8 var8006ae1c = 0; diff --git a/src/game/game_0150a0.c b/src/game/game_0150a0.c index fb6356aa6..04dee3e7e 100644 --- a/src/game/game_0150a0.c +++ b/src/game/game_0150a0.c @@ -12,98 +12,18 @@ #include "lib/lib_317f0.h" #include "types.h" -GLOBAL_ASM( -glabel func0f0150a0 -/* f0150a0: 27bdffc8 */ addiu $sp,$sp,-56 -/* f0150a4: afb70030 */ sw $s7,0x30($sp) -/* f0150a8: 3c178009 */ lui $s7,%hi(g_Is4Mb) -/* f0150ac: 26f70af0 */ addiu $s7,$s7,%lo(g_Is4Mb) -/* f0150b0: 92ee0000 */ lbu $t6,0x0($s7) -/* f0150b4: afb6002c */ sw $s6,0x2c($sp) -/* f0150b8: 24160001 */ addiu $s6,$zero,0x1 -/* f0150bc: afb30020 */ sw $s3,0x20($sp) -/* f0150c0: afbf0034 */ sw $ra,0x34($sp) -/* f0150c4: afb50028 */ sw $s5,0x28($sp) -/* f0150c8: afb40024 */ sw $s4,0x24($sp) -/* f0150cc: afb2001c */ sw $s2,0x1c($sp) -/* f0150d0: afb10018 */ sw $s1,0x18($sp) -/* f0150d4: afb00014 */ sw $s0,0x14($sp) -/* f0150d8: 16ce0003 */ bne $s6,$t6,.L0f0150e8 -/* f0150dc: 00009825 */ or $s3,$zero,$zero -/* f0150e0: 10000002 */ b .L0f0150ec -/* f0150e4: 2402001e */ addiu $v0,$zero,0x1e -.L0f0150e8: -/* f0150e8: 24020028 */ addiu $v0,$zero,0x28 -.L0f0150ec: -/* f0150ec: 18400034 */ blez $v0,.L0f0151c0 -/* f0150f0: 00138900 */ sll $s1,$s3,0x4 -/* f0150f4: 02338823 */ subu $s1,$s1,$s3 -/* f0150f8: 3c128007 */ lui $s2,%hi(var8006ae10) -/* f0150fc: 2652ae10 */ addiu $s2,$s2,%lo(var8006ae10) -/* f015100: 001188c0 */ sll $s1,$s1,0x3 -/* f015104: 2415ffef */ addiu $s5,$zero,-17 -/* f015108: 2414fffd */ addiu $s4,$zero,-3 -/* f01510c: 8e4f0000 */ lw $t7,0x0($s2) -.L0f015110: -/* f015110: 01f18021 */ addu $s0,$t7,$s1 -/* f015114: 96180030 */ lhu $t8,0x30($s0) -/* f015118: 33190010 */ andi $t9,$t8,0x10 -/* f01511c: 5320000f */ beqzl $t9,.L0f01515c -/* f015120: 8e040000 */ lw $a0,0x0($s0) -/* f015124: 0c003ef1 */ jal func0000fbc4 -/* f015128: 86040026 */ lh $a0,0x26($s0) -/* f01512c: 8e480000 */ lw $t0,0x0($s2) -/* f015130: 01118021 */ addu $s0,$t0,$s1 -/* f015134: 96090030 */ lhu $t1,0x30($s0) -/* f015138: 01355024 */ and $t2,$t1,$s5 -/* f01513c: a60a0030 */ sh $t2,0x30($s0) -/* f015140: 8e4b0000 */ lw $t3,0x0($s2) -/* f015144: 01718021 */ addu $s0,$t3,$s1 -/* f015148: 960c0030 */ lhu $t4,0x30($s0) -/* f01514c: 01946824 */ and $t5,$t4,$s4 -/* f015150: 10000011 */ b .L0f015198 -/* f015154: a60d0030 */ sh $t5,0x30($s0) -/* f015158: 8e040000 */ lw $a0,0x0($s0) -.L0f01515c: -/* f01515c: 5080000f */ beqzl $a0,.L0f01519c -/* f015160: 92e90000 */ lbu $t1,0x0($s7) -/* f015164: 0c00cdfc */ jal audioIsPlaying -/* f015168: 00000000 */ nop -/* f01516c: 5040000b */ beqzl $v0,.L0f01519c -/* f015170: 92e90000 */ lbu $t1,0x0($s7) -/* f015174: 8e4e0000 */ lw $t6,0x0($s2) -/* f015178: 01d17821 */ addu $t7,$t6,$s1 -/* f01517c: 0c00cec9 */ jal audioStop -/* f015180: 8de40000 */ lw $a0,0x0($t7) -/* f015184: 8e580000 */ lw $t8,0x0($s2) -/* f015188: 03118021 */ addu $s0,$t8,$s1 -/* f01518c: 96190030 */ lhu $t9,0x30($s0) -/* f015190: 03344024 */ and $t0,$t9,$s4 -/* f015194: a6080030 */ sh $t0,0x30($s0) -.L0f015198: -/* f015198: 92e90000 */ lbu $t1,0x0($s7) -.L0f01519c: -/* f01519c: 26730001 */ addiu $s3,$s3,0x1 -/* f0151a0: 26310078 */ addiu $s1,$s1,0x78 -/* f0151a4: 16c90003 */ bne $s6,$t1,.L0f0151b4 -/* f0151a8: 24020028 */ addiu $v0,$zero,0x28 -/* f0151ac: 10000001 */ b .L0f0151b4 -/* f0151b0: 2402001e */ addiu $v0,$zero,0x1e -.L0f0151b4: -/* f0151b4: 0262082a */ slt $at,$s3,$v0 -/* f0151b8: 5420ffd5 */ bnezl $at,.L0f015110 -/* f0151bc: 8e4f0000 */ lw $t7,0x0($s2) -.L0f0151c0: -/* f0151c0: 8fbf0034 */ lw $ra,0x34($sp) -/* f0151c4: 8fb00014 */ lw $s0,0x14($sp) -/* f0151c8: 8fb10018 */ lw $s1,0x18($sp) -/* f0151cc: 8fb2001c */ lw $s2,0x1c($sp) -/* f0151d0: 8fb30020 */ lw $s3,0x20($sp) -/* f0151d4: 8fb40024 */ lw $s4,0x24($sp) -/* f0151d8: 8fb50028 */ lw $s5,0x28($sp) -/* f0151dc: 8fb6002c */ lw $s6,0x2c($sp) -/* f0151e0: 8fb70030 */ lw $s7,0x30($sp) -/* f0151e4: 03e00008 */ jr $ra -/* f0151e8: 27bd0038 */ addiu $sp,$sp,0x38 -/* f0151ec: 00000000 */ nop -); +void func0f0150a0(void) +{ + s32 i; + + for (i = 0; i < (IS4MB() ? 30 : 40); i++) { + if (var8006ae10[i].unk30 & 0x0010) { + func0000fbc4(var8006ae10[i].unk26); + var8006ae10[i].unk30 &= ~0x0010; + var8006ae10[i].unk30 &= ~0x0002; + } else if (var8006ae10[i].audiohandle && audioIsPlaying(var8006ae10[i].audiohandle)) { + audioStop(var8006ae10[i].audiohandle); + var8006ae10[i].unk30 &= ~0x0002; + } + } +} diff --git a/src/include/game/data/data_00e460.h b/src/include/game/data/data_00e460.h index 645cb1583..579d9f635 100644 --- a/src/include/game/data/data_00e460.h +++ b/src/include/game/data/data_00e460.h @@ -137,7 +137,7 @@ extern u32 var8006ad24; extern u32 var8006ad8c; extern u32 var8006ad90; extern u32 var8006adf8; -extern u32 var8006ae10; +extern struct var8006ae10 *var8006ae10; extern u32 var8006ae14; extern s8 var8006ae18; extern s8 var8006ae1c; diff --git a/src/include/lib/lib_0e9d0.h b/src/include/lib/lib_0e9d0.h index 1ed38763a..29c6ecd75 100644 --- a/src/include/lib/lib_0e9d0.h +++ b/src/include/lib/lib_0e9d0.h @@ -21,7 +21,7 @@ u32 func0000f49c(void); u32 func0000f67c(void); u32 func0000f804(void); u32 func0000fba0(void); -u32 func0000fbc4(void); +void func0000fbc4(s16 arg0); u32 func0000fc48(void); u32 func0000fd74(void); void func0000fd9c(struct var80094ed8 *arg0, u16 volume); diff --git a/src/include/types.h b/src/include/types.h index 4fd36bffb..02e222326 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -6696,4 +6696,38 @@ struct var800a45c4 { /*0x68*/ u32 unk68; }; +struct var8006ae10 { + /*0x00*/ struct audiohandle *audiohandle; + /*0x04*/ u32 unk04; + /*0x08*/ u32 unk08; + /*0x0c*/ u32 unk0c; + /*0x10*/ u32 unk10; + /*0x14*/ u32 unk14; + /*0x18*/ u32 unk18; + /*0x1c*/ u32 unk1c; + /*0x20*/ u32 unk20; + /*0x24*/ u16 unk24; + /*0x26*/ s16 unk26; + /*0x28*/ u32 unk28; + /*0x2c*/ u32 unk2c; + /*0x30*/ u16 unk30; + /*0x34*/ u32 unk34; + /*0x38*/ u32 unk38; + /*0x3c*/ u32 unk3c; + /*0x40*/ u32 unk40; + /*0x44*/ u32 unk44; + /*0x48*/ u32 unk48; + /*0x4c*/ u32 unk4c; + /*0x50*/ u32 unk50; + /*0x54*/ u32 unk54; + /*0x58*/ u32 unk58; + /*0x5c*/ u32 unk5c; + /*0x60*/ u32 unk60; + /*0x64*/ u32 unk64; + /*0x68*/ u32 unk68; + /*0x6c*/ u32 unk6c; + /*0x70*/ u32 unk70; + /*0x74*/ u32 unk74; +}; + #endif