diff --git a/src/game/lv.c b/src/game/lv.c index f5580372e..50b7dd904 100644 --- a/src/game/lv.c +++ b/src/game/lv.c @@ -8117,7 +8117,7 @@ glabel var7f1b8ed0pf .PF0f16d82c: /* f16d82c: 0fc5a302 */ jal lvUpdateMiscSfx /* f16d830: 00000000 */ nop -/* f16d834: 0c003f01 */ jal snd0000fe88 +/* f16d834: 0c003f01 */ jal sndTick /* f16d838: 00000000 */ nop /* f16d83c: 0fc474a7 */ jal pakExecuteDebugOperations /* f16d840: 00000000 */ nop @@ -8505,7 +8505,7 @@ void lvTick(void) } lvUpdateMiscSfx(); - snd0000fe88(); + sndTick(); pakExecuteDebugOperations(); lightingTick(); func0f0b2904(); @@ -9717,7 +9717,7 @@ glabel lvTick .NB0f167798: /* f167798: 0fc58971 */ jal lvUpdateMiscSfx /* f16779c: 00000000 */ sll $zero,$zero,0x0 -/* f1677a0: 0c0040f6 */ jal snd0000fe88 +/* f1677a0: 0c0040f6 */ jal sndTick /* f1677a4: 00000000 */ sll $zero,$zero,0x0 /* f1677a8: 0fc45920 */ jal pakExecuteDebugOperations /* f1677ac: 00000000 */ sll $zero,$zero,0x0 diff --git a/src/include/lib/snd.h b/src/include/lib/snd.h index 558adaea7..d30e5eff8 100644 --- a/src/include/lib/snd.h +++ b/src/include/lib/snd.h @@ -29,18 +29,18 @@ void snd0000fd9c(struct var80094ed8 *arg0, u16 volume); void snd0000fe18(void); void snd0000fe20(void); void snd0000fe50(void); -void snd0000fe88(void); +void sndTick(void); u32 snd00010360(void); u32 snd0001036c(void); -void sndAdjust(struct audiohandle **handle, u32 arg1, u32 arg2, s32 speakerweight, s16 arg4, f32 arg5, s32 arg6, s32 arg7, s32 arg8); +void sndAdjust(struct audiohandle **handle, s32 arg1, s32 arg2, s32 speakerweight, s16 arg4, f32 arg5, s32 arg6, s32 arg7, s32 arg8); struct audiohandle *snd00010718(struct audiohandle **handle, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6, s32 arg7, s32 arg8); struct audiohandle *sndStart(s32 arg0, s16 sound, struct audiohandle **handle, s32 arg3, s32 arg4, f32 arg5, s32 arg6, s32 arg7); u32 snd00010ae4(void); -void sndPlayNosedive(s32 value); +void sndPlayNosedive(s32 seconds); void sndStopNosedive(void); -u32 snd00010e10(void); +void sndTickNosedive(void); void sndPlayUfoHum(s32 value); void sndStopUfoHum(void); -u32 snd0001111c(void); +u32 sndTickUfoHum(void); #endif diff --git a/src/include/sfx.h b/src/include/sfx.h index 2a404b34f..fae74d75d 100644 --- a/src/include/sfx.h +++ b/src/include/sfx.h @@ -366,6 +366,7 @@ #define SFX_MAIAN_05E5 0x05e5 #define SFX_MAIAN_05E6 0x05e6 #define SFX_MAIAN_05E7 0x05e7 +#define SFX_NOSEDIVE 0x0608 #define SFX_CASS_HOW_DARE_YOU_DISTURB_ME 0x0af2 #define SFX_CASS_YOU_WILL_REGRET 0x0af3 #define SFX_CASS_LEAVE_NOW 0x0af8 diff --git a/src/lib/snd.c b/src/lib/snd.c index 404ab16c3..98f37c09a 100644 --- a/src/lib/snd.c +++ b/src/lib/snd.c @@ -47,13 +47,13 @@ const char var70053b3c[] = "Snd: SoundHeaderCacheInit\n"; bool g_Silent = false; u32 var8005dda4 = 0x00000000; -u32 var8005dda8 = 0x00000000; -u32 var8005ddac = 0xffffffff; -u32 var8005ddb0 = 0x00000000; +s32 g_SndNosediveVolume = 0; +s32 g_SndNosediveAge240 = -1; +s32 g_SndNosediveDuration240 = 0; u32 var8005ddb4 = 0x00000000; u32 var8005ddb8 = 0xffffffff; u32 var8005ddbc = 0x00000000; -u32 var8005ddc0 = 0x00000000; +struct audiohandle *g_SndNosediveHandle = NULL; u32 var8005ddc4 = 0x00000000; u16 g_SfxVolume = 32767; s32 g_SoundMode = SOUNDMODE_STEREO; @@ -2336,13 +2336,6 @@ const char var70053c10[] = "Snd_Play_Mpeg : SYSTEM IS DISABLED\n"; const char var70053c34[] = "Snd_Play_Mpeg : Lib called -> Adr=%x\n"; const char var70053c5c[] = "Snd_Play_Mpeg : Chunk size -> Adr=%x\n"; -const u32 var70053c84[] = {0x3ee147ae}; -const u32 var70053c88[] = {0x3f266666}; -const u32 var70053c8c[] = {0x3e99999a}; -const u32 var70053c90[] = {0x3f333333}; -const u32 var70053c94[] = {0x3eb33333}; -const u32 var70053c98[] = {0x3f4ccccd}; - GLOBAL_ASM( glabel snd0000fba0 /* fba0: 27bdfff8 */ addiu $sp,$sp,-8 @@ -2708,7 +2701,7 @@ glabel snd0000fe50 #if PAL GLOBAL_ASM( -glabel snd0000fe88 +glabel sndTick /* fe88: 27bdeb98 */ addiu $sp,$sp,-5224 /* fe8c: afbf002c */ sw $ra,0x2c($sp) /* fe90: 0c003b45 */ jal snd0000ed14 @@ -2815,7 +2808,7 @@ glabel snd0000fe88 /* 10004: 24010031 */ addiu $at,$zero,0x31 /* 10008: 54410006 */ bnel $v0,$at,.L00010024 /* 1000c: 24010019 */ addiu $at,$zero,0x19 -/* 10010: 0c004384 */ jal snd00010e10 +/* 10010: 0c004384 */ jal sndTickNosedive /* 10014: 00000000 */ nop /* 10018: 10000006 */ b .L00010034 /* 1001c: 00000000 */ nop @@ -2823,7 +2816,7 @@ glabel snd0000fe88 .L00010024: /* 10024: 14410003 */ bne $v0,$at,.L00010034 /* 10028: 00000000 */ nop -/* 1002c: 0c004447 */ jal snd0001111c +/* 1002c: 0c004447 */ jal sndTickUfoHum /* 10030: 00000000 */ nop .L00010034: /* 10034: 3c0a800a */ lui $t2,%hi(g_Vars+0x2ac) @@ -3056,7 +3049,7 @@ glabel snd0000fe88 ); #elif VERSION >= VERSION_NTSC_1_0 GLOBAL_ASM( -glabel snd0000fe88 +glabel sndTick /* fe88: 27bdeb98 */ addiu $sp,$sp,-5224 /* fe8c: afbf002c */ sw $ra,0x2c($sp) /* fe90: 0c003b45 */ jal snd0000ed14 @@ -3163,7 +3156,7 @@ glabel snd0000fe88 /* 10004: 24010031 */ addiu $at,$zero,0x31 /* 10008: 54410006 */ bnel $v0,$at,.L00010024 /* 1000c: 24010019 */ addiu $at,$zero,0x19 -/* 10010: 0c004384 */ jal snd00010e10 +/* 10010: 0c004384 */ jal sndTickNosedive /* 10014: 00000000 */ nop /* 10018: 10000006 */ b .L00010034 /* 1001c: 00000000 */ nop @@ -3171,7 +3164,7 @@ glabel snd0000fe88 .L00010024: /* 10024: 14410003 */ bne $v0,$at,.L00010034 /* 10028: 00000000 */ nop -/* 1002c: 0c004447 */ jal snd0001111c +/* 1002c: 0c004447 */ jal sndTickUfoHum /* 10030: 00000000 */ nop .L00010034: /* 10034: 3c0a800a */ lui $t2,%hi(g_Vars+0x2ac) @@ -3404,7 +3397,7 @@ glabel snd0000fe88 ); #else GLOBAL_ASM( -glabel snd0000fe88 +glabel sndTick /* 103d8: 3c0e8006 */ lui $t6,0x8006 /* 103dc: 8dcef6c0 */ lw $t6,-0x940($t6) /* 103e0: 27bdffc0 */ addiu $sp,$sp,-64 @@ -3420,7 +3413,7 @@ glabel snd0000fe88 /* 10408: 24010031 */ addiu $at,$zero,0x31 /* 1040c: 54410006 */ bnel $v0,$at,.NB00010428 /* 10410: 24010019 */ addiu $at,$zero,0x19 -/* 10414: 0c004474 */ jal snd00010e10 +/* 10414: 0c004474 */ jal sndTickNosedive /* 10418: 00000000 */ sll $zero,$zero,0x0 /* 1041c: 10000006 */ beqz $zero,.NB00010438 /* 10420: 00000000 */ sll $zero,$zero,0x0 @@ -3428,7 +3421,7 @@ glabel snd0000fe88 .NB00010428: /* 10428: 14410003 */ bne $v0,$at,.NB00010438 /* 1042c: 00000000 */ sll $zero,$zero,0x0 -/* 10430: 0c004537 */ jal snd0001111c +/* 10430: 0c004537 */ jal sndTickUfoHum /* 10434: 00000000 */ sll $zero,$zero,0x0 .NB00010438: /* 10438: 3c18800a */ lui $t8,0x800a @@ -4938,392 +4931,85 @@ glabel snd00010ae4 /* 10dac: 00000000 */ nop ); -void sndPlayNosedive(s32 arg0) +void sndPlayNosedive(s32 seconds) { - var8005ddb0 = arg0 * PALDOWN(240); - var8005ddac = 0; - var8005dda8 = 0; - var8005ddc0 = 0; + g_SndNosediveDuration240 = seconds * PALDOWN(240); + g_SndNosediveAge240 = 0; + g_SndNosediveVolume = 0; + g_SndNosediveHandle = NULL; } void sndStopNosedive(void) { - if (var8005ddac != -1) { - var8005ddac = var8005ddb0 + 1; + if (g_SndNosediveAge240 != -1) { + g_SndNosediveAge240 = g_SndNosediveDuration240 + 1; } } -#if VERSION >= VERSION_PAL_FINAL -GLOBAL_ASM( -glabel snd00010e10 -/* 10e10: 3c038006 */ lui $v1,%hi(var8005ddac) -/* 10e14: 2463ddac */ addiu $v1,$v1,%lo(var8005ddac) -/* 10e18: 8c620000 */ lw $v0,0x0($v1) -/* 10e1c: 27bdffc8 */ addiu $sp,$sp,-56 -/* 10e20: 2401ffff */ addiu $at,$zero,-1 -/* 10e24: 104100a1 */ beq $v0,$at,.L000110ac -/* 10e28: afbf002c */ sw $ra,0x2c($sp) -/* 10e2c: 3c08800a */ lui $t0,%hi(g_Vars) -/* 10e30: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* 10e34: 8d0e0034 */ lw $t6,0x34($t0) -/* 10e38: 3c198006 */ lui $t9,%hi(var8005ddb0) -/* 10e3c: 3c013f80 */ lui $at,0x3f80 -/* 10e40: 004ec021 */ addu $t8,$v0,$t6 -/* 10e44: ac780000 */ sw $t8,0x0($v1) -/* 10e48: 8f39ddb0 */ lw $t9,%lo(var8005ddb0)($t9) -/* 10e4c: 44982000 */ mtc1 $t8,$f4 -/* 10e50: 44818000 */ mtc1 $at,$f16 -/* 10e54: 44994000 */ mtc1 $t9,$f8 -/* 10e58: 468021a0 */ cvt.s.w $f6,$f4 -/* 10e5c: 3c028006 */ lui $v0,%hi(var8005dda8) -/* 10e60: 3c017005 */ lui $at,%hi(var70053c84) -/* 10e64: 2442dda8 */ addiu $v0,$v0,%lo(var8005dda8) -/* 10e68: 468042a0 */ cvt.s.w $f10,$f8 -/* 10e6c: 460a3003 */ div.s $f0,$f6,$f10 -/* 10e70: 4610003c */ c.lt.s $f0,$f16 -/* 10e74: 00000000 */ nop -/* 10e78: 45020067 */ bc1fl .L00011018 -/* 10e7c: 8c460000 */ lw $a2,0x0($v0) -/* 10e80: c4323c84 */ lwc1 $f18,%lo(var70053c84)($at) -/* 10e84: 46120000 */ add.s $f0,$f0,$f18 -/* 10e88: 0fc5b364 */ jal lvIsPaused -/* 10e8c: e7a00034 */ swc1 $f0,0x34($sp) -/* 10e90: 3c08800a */ lui $t0,%hi(g_Vars) -/* 10e94: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* 10e98: 10400028 */ beqz $v0,.L00010f3c -/* 10e9c: c7a00034 */ lwc1 $f0,0x34($sp) -/* 10ea0: 3c028006 */ lui $v0,%hi(var8005dda8) -/* 10ea4: 2442dda8 */ addiu $v0,$v0,%lo(var8005dda8) -/* 10ea8: 8c460000 */ lw $a2,0x0($v0) -/* 10eac: 00002825 */ or $a1,$zero,$zero -/* 10eb0: 24070040 */ addiu $a3,$zero,0x40 -/* 10eb4: 18c0000b */ blez $a2,.L00010ee4 -/* 10eb8: 3c048006 */ lui $a0,%hi(var8005ddc0) -/* 10ebc: 8d090040 */ lw $t1,0x40($t0) -/* 10ec0: 00095080 */ sll $t2,$t1,0x2 -/* 10ec4: 01495023 */ subu $t2,$t2,$t1 -/* 10ec8: 000a5140 */ sll $t2,$t2,0x5 -/* 10ecc: 00ca5823 */ subu $t3,$a2,$t2 -/* 10ed0: ac4b0000 */ sw $t3,0x0($v0) -/* 10ed4: 05610003 */ bgez $t3,.L00010ee4 -/* 10ed8: 01603025 */ or $a2,$t3,$zero -/* 10edc: ac400000 */ sw $zero,0x0($v0) -/* 10ee0: 00003025 */ or $a2,$zero,$zero -.L00010ee4: -/* 10ee4: 10c0000d */ beqz $a2,.L00010f1c -/* 10ee8: 240cffff */ addiu $t4,$zero,-1 -/* 10eec: 3c048006 */ lui $a0,%hi(var8005ddc0) -/* 10ef0: 240dffff */ addiu $t5,$zero,-1 -/* 10ef4: 240e0001 */ addiu $t6,$zero,0x1 -/* 10ef8: afae0020 */ sw $t6,0x20($sp) -/* 10efc: afad001c */ sw $t5,0x1c($sp) -/* 10f00: 2484ddc0 */ addiu $a0,$a0,%lo(var8005ddc0) -/* 10f04: afac0010 */ sw $t4,0x10($sp) -/* 10f08: e7a00014 */ swc1 $f0,0x14($sp) -/* 10f0c: 0c004128 */ jal sndAdjust -/* 10f10: afa00018 */ sw $zero,0x18($sp) -/* 10f14: 10000066 */ b .L000110b0 -/* 10f18: 8fbf002c */ lw $ra,0x2c($sp) -.L00010f1c: -/* 10f1c: 8c84ddc0 */ lw $a0,%lo(var8005ddc0)($a0) -/* 10f20: 50800063 */ beqzl $a0,.L000110b0 -/* 10f24: 8fbf002c */ lw $ra,0x2c($sp) -/* 10f28: 0c00cec9 */ jal audioStop -/* 10f2c: 00000000 */ nop -/* 10f30: 3c018006 */ lui $at,%hi(var8005ddc0) -/* 10f34: 1000005d */ b .L000110ac -/* 10f38: ac20ddc0 */ sw $zero,%lo(var8005ddc0)($at) -.L00010f3c: -/* 10f3c: 3c0f8006 */ lui $t7,%hi(var8005ddc0) -/* 10f40: 8defddc0 */ lw $t7,%lo(var8005ddc0)($t7) -/* 10f44: 3c048009 */ lui $a0,%hi(var80095200) -/* 10f48: 24050608 */ addiu $a1,$zero,0x608 -/* 10f4c: 15e00012 */ bnez $t7,.L00010f98 -/* 10f50: 3c068006 */ lui $a2,%hi(var8005ddc0) -/* 10f54: 3c01bf80 */ lui $at,0xbf80 -/* 10f58: 44812000 */ mtc1 $at,$f4 -/* 10f5c: 2418ffff */ addiu $t8,$zero,-1 -/* 10f60: 2419ffff */ addiu $t9,$zero,-1 -/* 10f64: 2409ffff */ addiu $t1,$zero,-1 -/* 10f68: afa9001c */ sw $t1,0x1c($sp) -/* 10f6c: afb90018 */ sw $t9,0x18($sp) -/* 10f70: afb80010 */ sw $t8,0x10($sp) -/* 10f74: 8c845200 */ lw $a0,%lo(var80095200)($a0) -/* 10f78: 24c6ddc0 */ addiu $a2,$a2,%lo(var8005ddc0) -/* 10f7c: 2407ffff */ addiu $a3,$zero,-1 -/* 10f80: e7a00034 */ swc1 $f0,0x34($sp) -/* 10f84: 0c004241 */ jal sndStart -/* 10f88: e7a40014 */ swc1 $f4,0x14($sp) -/* 10f8c: 3c08800a */ lui $t0,%hi(g_Vars) -/* 10f90: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* 10f94: c7a00034 */ lwc1 $f0,0x34($sp) -.L00010f98: -/* 10f98: 3c028006 */ lui $v0,%hi(var8005dda8) -/* 10f9c: 2442dda8 */ addiu $v0,$v0,%lo(var8005dda8) -/* 10fa0: 8c460000 */ lw $a2,0x0($v0) -/* 10fa4: 3c048006 */ lui $a0,%hi(var8005ddc0) -/* 10fa8: 2484ddc0 */ addiu $a0,$a0,%lo(var8005ddc0) -/* 10fac: 28c14e20 */ slti $at,$a2,0x4e20 -/* 10fb0: 1020000c */ beqz $at,.L00010fe4 -/* 10fb4: 00002825 */ or $a1,$zero,$zero -/* 10fb8: 8d0a0040 */ lw $t2,0x40($t0) -/* 10fbc: 000a5880 */ sll $t3,$t2,0x2 -/* 10fc0: 016a5823 */ subu $t3,$t3,$t2 -/* 10fc4: 000b5900 */ sll $t3,$t3,0x4 -/* 10fc8: 00cb6021 */ addu $t4,$a2,$t3 -/* 10fcc: 29814e21 */ slti $at,$t4,0x4e21 -/* 10fd0: ac4c0000 */ sw $t4,0x0($v0) -/* 10fd4: 14200003 */ bnez $at,.L00010fe4 -/* 10fd8: 01803025 */ or $a2,$t4,$zero -/* 10fdc: 24064e20 */ addiu $a2,$zero,0x4e20 -/* 10fe0: ac460000 */ sw $a2,0x0($v0) -.L00010fe4: -/* 10fe4: 240effff */ addiu $t6,$zero,-1 -/* 10fe8: 240fffff */ addiu $t7,$zero,-1 -/* 10fec: 24180001 */ addiu $t8,$zero,0x1 -/* 10ff0: afb80020 */ sw $t8,0x20($sp) -/* 10ff4: afaf001c */ sw $t7,0x1c($sp) -/* 10ff8: afae0010 */ sw $t6,0x10($sp) -/* 10ffc: 24070040 */ addiu $a3,$zero,0x40 -/* 11000: e7a00014 */ swc1 $f0,0x14($sp) -/* 11004: 0c004128 */ jal sndAdjust -/* 11008: afa00018 */ sw $zero,0x18($sp) -/* 1100c: 10000028 */ b .L000110b0 -/* 11010: 8fbf002c */ lw $ra,0x2c($sp) -/* 11014: 8c460000 */ lw $a2,0x0($v0) -.L00011018: -/* 11018: 00002825 */ or $a1,$zero,$zero -/* 1101c: 24070040 */ addiu $a3,$zero,0x40 -/* 11020: 18c0000b */ blez $a2,.L00011050 -/* 11024: 3c048006 */ lui $a0,%hi(var8005ddc0) -/* 11028: 8d190040 */ lw $t9,0x40($t0) -/* 1102c: 00194880 */ sll $t1,$t9,0x2 -/* 11030: 01394823 */ subu $t1,$t1,$t9 -/* 11034: 00094940 */ sll $t1,$t1,0x5 -/* 11038: 00c95023 */ subu $t2,$a2,$t1 -/* 1103c: ac4a0000 */ sw $t2,0x0($v0) -/* 11040: 05410003 */ bgez $t2,.L00011050 -/* 11044: 01403025 */ or $a2,$t2,$zero -/* 11048: ac400000 */ sw $zero,0x0($v0) -/* 1104c: 00003025 */ or $a2,$zero,$zero -.L00011050: -/* 11050: 10c0000f */ beqz $a2,.L00011090 -/* 11054: 240bffff */ addiu $t3,$zero,-1 -/* 11058: 3c01bf80 */ lui $at,0xbf80 -/* 1105c: 44814000 */ mtc1 $at,$f8 -/* 11060: 3c048006 */ lui $a0,%hi(var8005ddc0) -/* 11064: 240cffff */ addiu $t4,$zero,-1 -/* 11068: 240d0001 */ addiu $t5,$zero,0x1 -/* 1106c: afad0020 */ sw $t5,0x20($sp) -/* 11070: afac001c */ sw $t4,0x1c($sp) -/* 11074: 2484ddc0 */ addiu $a0,$a0,%lo(var8005ddc0) -/* 11078: afab0010 */ sw $t3,0x10($sp) -/* 1107c: afa00018 */ sw $zero,0x18($sp) -/* 11080: 0c004128 */ jal sndAdjust -/* 11084: e7a80014 */ swc1 $f8,0x14($sp) -/* 11088: 10000009 */ b .L000110b0 -/* 1108c: 8fbf002c */ lw $ra,0x2c($sp) -.L00011090: -/* 11090: 8c84ddc0 */ lw $a0,%lo(var8005ddc0)($a0) -/* 11094: 50800006 */ beqzl $a0,.L000110b0 -/* 11098: 8fbf002c */ lw $ra,0x2c($sp) -/* 1109c: 0c00cec9 */ jal audioStop -/* 110a0: 00000000 */ nop -/* 110a4: 3c018006 */ lui $at,%hi(var8005ddc0) -/* 110a8: ac20ddc0 */ sw $zero,%lo(var8005ddc0)($at) -.L000110ac: -/* 110ac: 8fbf002c */ lw $ra,0x2c($sp) -.L000110b0: -/* 110b0: 27bd0038 */ addiu $sp,$sp,0x38 -/* 110b4: 03e00008 */ jr $ra -/* 110b8: 00000000 */ nop -); -#else -GLOBAL_ASM( -glabel snd00010e10 -/* 10e10: 3c038006 */ lui $v1,%hi(var8005ddac) -/* 10e14: 2463ddac */ addiu $v1,$v1,%lo(var8005ddac) -/* 10e18: 8c620000 */ lw $v0,0x0($v1) -/* 10e1c: 27bdffc8 */ addiu $sp,$sp,-56 -/* 10e20: 2401ffff */ addiu $at,$zero,-1 -/* 10e24: 104100a1 */ beq $v0,$at,.L000110ac -/* 10e28: afbf002c */ sw $ra,0x2c($sp) -/* 10e2c: 3c08800a */ lui $t0,%hi(g_Vars) -/* 10e30: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* 10e34: 8d0e0034 */ lw $t6,0x34($t0) -/* 10e38: 3c198006 */ lui $t9,%hi(var8005ddb0) -/* 10e3c: 3c013f80 */ lui $at,0x3f80 -/* 10e40: 004ec021 */ addu $t8,$v0,$t6 -/* 10e44: ac780000 */ sw $t8,0x0($v1) -/* 10e48: 8f39ddb0 */ lw $t9,%lo(var8005ddb0)($t9) -/* 10e4c: 44982000 */ mtc1 $t8,$f4 -/* 10e50: 44818000 */ mtc1 $at,$f16 -/* 10e54: 44994000 */ mtc1 $t9,$f8 -/* 10e58: 468021a0 */ cvt.s.w $f6,$f4 -/* 10e5c: 3c028006 */ lui $v0,%hi(var8005dda8) -/* 10e60: 3c017005 */ lui $at,%hi(var70053c84) -/* 10e64: 2442dda8 */ addiu $v0,$v0,%lo(var8005dda8) -/* 10e68: 468042a0 */ cvt.s.w $f10,$f8 -/* 10e6c: 460a3003 */ div.s $f0,$f6,$f10 -/* 10e70: 4610003c */ c.lt.s $f0,$f16 -/* 10e74: 00000000 */ nop -/* 10e78: 45020067 */ bc1fl .L00011018 -/* 10e7c: 8c460000 */ lw $a2,0x0($v0) -/* 10e80: c4323c84 */ lwc1 $f18,%lo(var70053c84)($at) -/* 10e84: 46120000 */ add.s $f0,$f0,$f18 -/* 10e88: 0fc5b364 */ jal lvIsPaused -/* 10e8c: e7a00034 */ swc1 $f0,0x34($sp) -/* 10e90: 3c08800a */ lui $t0,%hi(g_Vars) -/* 10e94: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* 10e98: 10400028 */ beqz $v0,.L00010f3c -/* 10e9c: c7a00034 */ lwc1 $f0,0x34($sp) -/* 10ea0: 3c028006 */ lui $v0,%hi(var8005dda8) -/* 10ea4: 2442dda8 */ addiu $v0,$v0,%lo(var8005dda8) -/* 10ea8: 8c460000 */ lw $a2,0x0($v0) -/* 10eac: 00002825 */ or $a1,$zero,$zero -/* 10eb0: 24070040 */ addiu $a3,$zero,0x40 -/* 10eb4: 18c0000b */ blez $a2,.L00010ee4 -/* 10eb8: 3c048006 */ lui $a0,%hi(var8005ddc0) -/* 10ebc: 8d090040 */ lw $t1,0x40($t0) -/* 10ec0: 00095080 */ sll $t2,$t1,0x2 -/* 10ec4: 01495021 */ addu $t2,$t2,$t1 -/* 10ec8: 000a5100 */ sll $t2,$t2,0x4 -/* 10ecc: 00ca5823 */ subu $t3,$a2,$t2 -/* 10ed0: ac4b0000 */ sw $t3,0x0($v0) -/* 10ed4: 05610003 */ bgez $t3,.L00010ee4 -/* 10ed8: 01603025 */ or $a2,$t3,$zero -/* 10edc: ac400000 */ sw $zero,0x0($v0) -/* 10ee0: 00003025 */ or $a2,$zero,$zero -.L00010ee4: -/* 10ee4: 10c0000d */ beqz $a2,.L00010f1c -/* 10ee8: 240cffff */ addiu $t4,$zero,-1 -/* 10eec: 3c048006 */ lui $a0,%hi(var8005ddc0) -/* 10ef0: 240dffff */ addiu $t5,$zero,-1 -/* 10ef4: 240e0001 */ addiu $t6,$zero,0x1 -/* 10ef8: afae0020 */ sw $t6,0x20($sp) -/* 10efc: afad001c */ sw $t5,0x1c($sp) -/* 10f00: 2484ddc0 */ addiu $a0,$a0,%lo(var8005ddc0) -/* 10f04: afac0010 */ sw $t4,0x10($sp) -/* 10f08: e7a00014 */ swc1 $f0,0x14($sp) -/* 10f0c: 0c004128 */ jal sndAdjust -/* 10f10: afa00018 */ sw $zero,0x18($sp) -/* 10f14: 10000066 */ b .L000110b0 -/* 10f18: 8fbf002c */ lw $ra,0x2c($sp) -.L00010f1c: -/* 10f1c: 8c84ddc0 */ lw $a0,%lo(var8005ddc0)($a0) -/* 10f20: 50800063 */ beqzl $a0,.L000110b0 -/* 10f24: 8fbf002c */ lw $ra,0x2c($sp) -/* 10f28: 0c00cec9 */ jal audioStop -/* 10f2c: 00000000 */ nop -/* 10f30: 3c018006 */ lui $at,%hi(var8005ddc0) -/* 10f34: 1000005d */ b .L000110ac -/* 10f38: ac20ddc0 */ sw $zero,%lo(var8005ddc0)($at) -.L00010f3c: -/* 10f3c: 3c0f8006 */ lui $t7,%hi(var8005ddc0) -/* 10f40: 8defddc0 */ lw $t7,%lo(var8005ddc0)($t7) -/* 10f44: 3c048009 */ lui $a0,%hi(var80095200) -/* 10f48: 24050608 */ addiu $a1,$zero,0x608 -/* 10f4c: 15e00012 */ bnez $t7,.L00010f98 -/* 10f50: 3c068006 */ lui $a2,%hi(var8005ddc0) -/* 10f54: 3c01bf80 */ lui $at,0xbf80 -/* 10f58: 44812000 */ mtc1 $at,$f4 -/* 10f5c: 2418ffff */ addiu $t8,$zero,-1 -/* 10f60: 2419ffff */ addiu $t9,$zero,-1 -/* 10f64: 2409ffff */ addiu $t1,$zero,-1 -/* 10f68: afa9001c */ sw $t1,0x1c($sp) -/* 10f6c: afb90018 */ sw $t9,0x18($sp) -/* 10f70: afb80010 */ sw $t8,0x10($sp) -/* 10f74: 8c845200 */ lw $a0,%lo(var80095200)($a0) -/* 10f78: 24c6ddc0 */ addiu $a2,$a2,%lo(var8005ddc0) -/* 10f7c: 2407ffff */ addiu $a3,$zero,-1 -/* 10f80: e7a00034 */ swc1 $f0,0x34($sp) -/* 10f84: 0c004241 */ jal sndStart -/* 10f88: e7a40014 */ swc1 $f4,0x14($sp) -/* 10f8c: 3c08800a */ lui $t0,%hi(g_Vars) -/* 10f90: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* 10f94: c7a00034 */ lwc1 $f0,0x34($sp) -.L00010f98: -/* 10f98: 3c028006 */ lui $v0,%hi(var8005dda8) -/* 10f9c: 2442dda8 */ addiu $v0,$v0,%lo(var8005dda8) -/* 10fa0: 8c460000 */ lw $a2,0x0($v0) -/* 10fa4: 3c048006 */ lui $a0,%hi(var8005ddc0) -/* 10fa8: 2484ddc0 */ addiu $a0,$a0,%lo(var8005ddc0) -/* 10fac: 28c14e20 */ slti $at,$a2,0x4e20 -/* 10fb0: 1020000c */ beqz $at,.L00010fe4 -/* 10fb4: 00002825 */ or $a1,$zero,$zero -/* 10fb8: 8d0a0040 */ lw $t2,0x40($t0) -/* 10fbc: 000a5880 */ sll $t3,$t2,0x2 -/* 10fc0: 016a5821 */ addu $t3,$t3,$t2 -/* 10fc4: 000b58c0 */ sll $t3,$t3,0x3 -/* 10fc8: 00cb6021 */ addu $t4,$a2,$t3 -/* 10fcc: 29814e21 */ slti $at,$t4,0x4e21 -/* 10fd0: ac4c0000 */ sw $t4,0x0($v0) -/* 10fd4: 14200003 */ bnez $at,.L00010fe4 -/* 10fd8: 01803025 */ or $a2,$t4,$zero -/* 10fdc: 24064e20 */ addiu $a2,$zero,0x4e20 -/* 10fe0: ac460000 */ sw $a2,0x0($v0) -.L00010fe4: -/* 10fe4: 240effff */ addiu $t6,$zero,-1 -/* 10fe8: 240fffff */ addiu $t7,$zero,-1 -/* 10fec: 24180001 */ addiu $t8,$zero,0x1 -/* 10ff0: afb80020 */ sw $t8,0x20($sp) -/* 10ff4: afaf001c */ sw $t7,0x1c($sp) -/* 10ff8: afae0010 */ sw $t6,0x10($sp) -/* 10ffc: 24070040 */ addiu $a3,$zero,0x40 -/* 11000: e7a00014 */ swc1 $f0,0x14($sp) -/* 11004: 0c004128 */ jal sndAdjust -/* 11008: afa00018 */ sw $zero,0x18($sp) -/* 1100c: 10000028 */ b .L000110b0 -/* 11010: 8fbf002c */ lw $ra,0x2c($sp) -/* 11014: 8c460000 */ lw $a2,0x0($v0) -.L00011018: -/* 11018: 00002825 */ or $a1,$zero,$zero -/* 1101c: 24070040 */ addiu $a3,$zero,0x40 -/* 11020: 18c0000b */ blez $a2,.L00011050 -/* 11024: 3c048006 */ lui $a0,%hi(var8005ddc0) -/* 11028: 8d190040 */ lw $t9,0x40($t0) -/* 1102c: 00194880 */ sll $t1,$t9,0x2 -/* 11030: 01394821 */ addu $t1,$t1,$t9 -/* 11034: 00094900 */ sll $t1,$t1,0x4 -/* 11038: 00c95023 */ subu $t2,$a2,$t1 -/* 1103c: ac4a0000 */ sw $t2,0x0($v0) -/* 11040: 05410003 */ bgez $t2,.L00011050 -/* 11044: 01403025 */ or $a2,$t2,$zero -/* 11048: ac400000 */ sw $zero,0x0($v0) -/* 1104c: 00003025 */ or $a2,$zero,$zero -.L00011050: -/* 11050: 10c0000f */ beqz $a2,.L00011090 -/* 11054: 240bffff */ addiu $t3,$zero,-1 -/* 11058: 3c01bf80 */ lui $at,0xbf80 -/* 1105c: 44814000 */ mtc1 $at,$f8 -/* 11060: 3c048006 */ lui $a0,%hi(var8005ddc0) -/* 11064: 240cffff */ addiu $t4,$zero,-1 -/* 11068: 240d0001 */ addiu $t5,$zero,0x1 -/* 1106c: afad0020 */ sw $t5,0x20($sp) -/* 11070: afac001c */ sw $t4,0x1c($sp) -/* 11074: 2484ddc0 */ addiu $a0,$a0,%lo(var8005ddc0) -/* 11078: afab0010 */ sw $t3,0x10($sp) -/* 1107c: afa00018 */ sw $zero,0x18($sp) -/* 11080: 0c004128 */ jal sndAdjust -/* 11084: e7a80014 */ swc1 $f8,0x14($sp) -/* 11088: 10000009 */ b .L000110b0 -/* 1108c: 8fbf002c */ lw $ra,0x2c($sp) -.L00011090: -/* 11090: 8c84ddc0 */ lw $a0,%lo(var8005ddc0)($a0) -/* 11094: 50800006 */ beqzl $a0,.L000110b0 -/* 11098: 8fbf002c */ lw $ra,0x2c($sp) -/* 1109c: 0c00cec9 */ jal audioStop -/* 110a0: 00000000 */ nop -/* 110a4: 3c018006 */ lui $at,%hi(var8005ddc0) -/* 110a8: ac20ddc0 */ sw $zero,%lo(var8005ddc0)($at) -.L000110ac: -/* 110ac: 8fbf002c */ lw $ra,0x2c($sp) -.L000110b0: -/* 110b0: 27bd0038 */ addiu $sp,$sp,0x38 -/* 110b4: 03e00008 */ jr $ra -/* 110b8: 00000000 */ nop -); -#endif +void sndTickNosedive(void) +{ + f32 percentage; + + if (g_SndNosediveAge240 != -1) { + g_SndNosediveAge240 += g_Vars.lvupdate240; + + percentage = (f32)g_SndNosediveAge240 / (f32)g_SndNosediveDuration240; + + if (percentage < 1.0f) { // less than 100% complete + percentage += 0.44f; + + if (lvIsPaused()) { + // Fade out volume during pause instead of stopping abruptly + if (g_SndNosediveVolume > 0) { + g_SndNosediveVolume -= g_Vars.diffframe240 * PALUP(80); + + if (g_SndNosediveVolume < 0) { + g_SndNosediveVolume = 0; + } + } + + if (g_SndNosediveVolume) { + sndAdjust(&g_SndNosediveHandle, 0, g_SndNosediveVolume, 64, -1, percentage, 0, -1, 1); + } else if (g_SndNosediveHandle != NULL) { + audioStop(g_SndNosediveHandle); + g_SndNosediveHandle = NULL; + } + } else { + // Not paused + if (g_SndNosediveHandle == NULL) { + sndStart(var80095200, SFX_NOSEDIVE, &g_SndNosediveHandle, -1, -1, -1, -1, -1); + } + + // Fade in over about 2 seconds + if (g_SndNosediveVolume < 20000) { + g_SndNosediveVolume += g_Vars.diffframe240 * PALUP(40); + + if (g_SndNosediveVolume > 20000) { + g_SndNosediveVolume = 20000; + } + } + + sndAdjust(&g_SndNosediveHandle, 0, g_SndNosediveVolume, 64, -1, percentage, 0, -1, 1); + } + } else { + // Reached the configured fade out point + if (g_SndNosediveVolume > 0) { + g_SndNosediveVolume -= g_Vars.diffframe240 * PALUP(80); + + if (g_SndNosediveVolume < 0) { + g_SndNosediveVolume = 0; + } + } + + if (g_SndNosediveVolume) { + sndAdjust(&g_SndNosediveHandle, 0, g_SndNosediveVolume, 64, -1, -1, 0, -1, 1); + } else if (g_SndNosediveHandle != NULL) { + audioStop(g_SndNosediveHandle); + g_SndNosediveHandle = NULL; + } + } + } +} void sndPlayUfoHum(s32 arg0) { @@ -5342,7 +5028,19 @@ void sndStopUfoHum(void) #if VERSION >= VERSION_PAL_FINAL GLOBAL_ASM( -glabel snd0001111c +glabel sndTickUfoHum +.late_rodata +glabel var70053c88 +.word 0x3f266666 +glabel var70053c8c +.word 0x3e99999a +glabel var70053c90 +.word 0x3f333333 +glabel var70053c94 +.word 0x3eb33333 +glabel var70053c98 +.word 0x3f4ccccd +.text /* 1111c: 3c038006 */ lui $v1,%hi(var8005ddb8) /* 11120: 2463ddb8 */ addiu $v1,$v1,%lo(var8005ddb8) /* 11124: 8c620000 */ lw $v0,0x0($v1) @@ -5549,7 +5247,19 @@ glabel snd0001111c ); #else GLOBAL_ASM( -glabel snd0001111c +glabel sndTickUfoHum +.late_rodata +glabel var70053c88 +.word 0x3f266666 +glabel var70053c8c +.word 0x3e99999a +glabel var70053c90 +.word 0x3f333333 +glabel var70053c94 +.word 0x3eb33333 +glabel var70053c98 +.word 0x3f4ccccd +.text /* 1111c: 3c038006 */ lui $v1,%hi(var8005ddb8) /* 11120: 2463ddb8 */ addiu $v1,$v1,%lo(var8005ddb8) /* 11124: 8c620000 */ lw $v0,0x0($v1)