From 874a90450f200920c6dd13ffba91261d0d782dc1 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Mon, 29 Mar 2021 22:31:59 +1000 Subject: [PATCH] Decompile sndTickUfo --- src/game/chr/chraicommands.c | 4 +- src/include/lib/snd.h | 6 +- src/include/sfx.h | 1 + src/lib/snd.c | 541 ++++++----------------------------- 4 files changed, 93 insertions(+), 459 deletions(-) diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index 9c32a72e5..9fb7b1da2 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -12496,10 +12496,10 @@ bool aiConfigureEnvironment(void) sndStopNosedive(); break; case AIENVCMD_PLAYUFOHUM: - sndPlayUfoHum(value); + sndPlayUfo(value); break; case AIENVCMD_STOPUFOHUM: - sndStopUfoHum(); + sndStopUfo(); break; } diff --git a/src/include/lib/snd.h b/src/include/lib/snd.h index d30e5eff8..04b7ba1c6 100644 --- a/src/include/lib/snd.h +++ b/src/include/lib/snd.h @@ -39,8 +39,8 @@ u32 snd00010ae4(void); void sndPlayNosedive(s32 seconds); void sndStopNosedive(void); void sndTickNosedive(void); -void sndPlayUfoHum(s32 value); -void sndStopUfoHum(void); -u32 sndTickUfoHum(void); +void sndPlayUfo(s32 seconds); +void sndStopUfo(void); +void sndTickUfo(void); #endif diff --git a/src/include/sfx.h b/src/include/sfx.h index fae74d75d..049ee5ec9 100644 --- a/src/include/sfx.h +++ b/src/include/sfx.h @@ -367,6 +367,7 @@ #define SFX_MAIAN_05E6 0x05e6 #define SFX_MAIAN_05E7 0x05e7 #define SFX_NOSEDIVE 0x0608 +#define SFX_UFOHUM 0x0609 #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 98f37c09a..eebb90953 100644 --- a/src/lib/snd.c +++ b/src/lib/snd.c @@ -47,14 +47,18 @@ const char var70053b3c[] = "Snd: SoundHeaderCacheInit\n"; bool g_Silent = false; u32 var8005dda4 = 0x00000000; + s32 g_SndNosediveVolume = 0; s32 g_SndNosediveAge240 = -1; s32 g_SndNosediveDuration240 = 0; -u32 var8005ddb4 = 0x00000000; -u32 var8005ddb8 = 0xffffffff; -u32 var8005ddbc = 0x00000000; + +s32 g_SndUfoVolume = 0; +s32 g_SndUfoAge240 = -1; +s32 g_SndUfoDuration240 = 0; + struct audiohandle *g_SndNosediveHandle = NULL; -u32 var8005ddc4 = 0x00000000; +struct audiohandle *g_SndUfoHandle = NULL; + u16 g_SfxVolume = 32767; s32 g_SoundMode = SOUNDMODE_STEREO; bool g_SndMp3Enabled = false; @@ -2816,7 +2820,7 @@ glabel sndTick .L00010024: /* 10024: 14410003 */ bne $v0,$at,.L00010034 /* 10028: 00000000 */ nop -/* 1002c: 0c004447 */ jal sndTickUfoHum +/* 1002c: 0c004447 */ jal sndTickUfo /* 10030: 00000000 */ nop .L00010034: /* 10034: 3c0a800a */ lui $t2,%hi(g_Vars+0x2ac) @@ -3164,7 +3168,7 @@ glabel sndTick .L00010024: /* 10024: 14410003 */ bne $v0,$at,.L00010034 /* 10028: 00000000 */ nop -/* 1002c: 0c004447 */ jal sndTickUfoHum +/* 1002c: 0c004447 */ jal sndTickUfo /* 10030: 00000000 */ nop .L00010034: /* 10034: 3c0a800a */ lui $t2,%hi(g_Vars+0x2ac) @@ -3421,7 +3425,7 @@ glabel sndTick .NB00010428: /* 10428: 14410003 */ bne $v0,$at,.NB00010438 /* 1042c: 00000000 */ sll $zero,$zero,0x0 -/* 10430: 0c004537 */ jal sndTickUfoHum +/* 10430: 0c004537 */ jal sndTickUfo /* 10434: 00000000 */ sll $zero,$zero,0x0 .NB00010438: /* 10438: 3c18800a */ lui $t8,0x800a @@ -5011,457 +5015,86 @@ void sndTickNosedive(void) } } -void sndPlayUfoHum(s32 arg0) +void sndPlayUfo(s32 seconds) { - var8005ddbc = arg0 * PALDOWN(240); - var8005ddb8 = 0; - var8005ddb4 = 0; - var8005ddc4 = 0; + g_SndUfoDuration240 = seconds * PALDOWN(240); + g_SndUfoAge240 = 0; + g_SndUfoVolume = 0; + g_SndUfoHandle = NULL; } -void sndStopUfoHum(void) +void sndStopUfo(void) { - if (var8005ddb8 != -1) { - var8005ddb8 = var8005ddbc + 1; + if (g_SndUfoAge240 != -1) { + g_SndUfoAge240 = g_SndUfoDuration240 + 1; } } -#if VERSION >= VERSION_PAL_FINAL -GLOBAL_ASM( -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) -/* 11128: 27bdffc8 */ addiu $sp,$sp,-56 -/* 1112c: 2401ffff */ addiu $at,$zero,-1 -/* 11130: 104100b5 */ beq $v0,$at,.L00011408 -/* 11134: afbf002c */ sw $ra,0x2c($sp) -/* 11138: 3c08800a */ lui $t0,%hi(g_Vars) -/* 1113c: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* 11140: 8d0e0034 */ lw $t6,0x34($t0) -/* 11144: 3c198006 */ lui $t9,%hi(var8005ddbc) -/* 11148: 3c013f80 */ lui $at,0x3f80 -/* 1114c: 004ec021 */ addu $t8,$v0,$t6 -/* 11150: ac780000 */ sw $t8,0x0($v1) -/* 11154: 8f39ddbc */ lw $t9,%lo(var8005ddbc)($t9) -/* 11158: 44982000 */ mtc1 $t8,$f4 -/* 1115c: 44816000 */ mtc1 $at,$f12 -/* 11160: 44994000 */ mtc1 $t9,$f8 -/* 11164: 468021a0 */ cvt.s.w $f6,$f4 -/* 11168: 3c028006 */ lui $v0,%hi(var8005ddb4) -/* 1116c: 3c017005 */ lui $at,%hi(var70053c88) -/* 11170: 2442ddb4 */ addiu $v0,$v0,%lo(var8005ddb4) -/* 11174: 468042a0 */ cvt.s.w $f10,$f8 -/* 11178: 460a3003 */ div.s $f0,$f6,$f10 -/* 1117c: 460c003c */ c.lt.s $f0,$f12 -/* 11180: 00000000 */ nop -/* 11184: 4502007b */ bc1fl .L00011374 -/* 11188: 8c460000 */ lw $a2,0x0($v0) -/* 1118c: c4223c88 */ lwc1 $f2,%lo(var70053c88)($at) -/* 11190: 3c017005 */ lui $at,%hi(var70053c94) -/* 11194: 4602003c */ c.lt.s $f0,$f2 -/* 11198: 00000000 */ nop -/* 1119c: 4502000a */ bc1fl .L000111c8 -/* 111a0: 46020181 */ sub.s $f6,$f0,$f2 -/* 111a4: 46020403 */ div.s $f16,$f0,$f2 -/* 111a8: 3c017005 */ lui $at,%hi(var70053c8c) -/* 111ac: c4323c8c */ lwc1 $f18,%lo(var70053c8c)($at) -/* 111b0: 3c017005 */ lui $at,%hi(var70053c90) -/* 111b4: c4283c90 */ lwc1 $f8,%lo(var70053c90)($at) -/* 111b8: 46128102 */ mul.s $f4,$f16,$f18 -/* 111bc: 10000008 */ b .L000111e0 -/* 111c0: 46082000 */ add.s $f0,$f4,$f8 -/* 111c4: 46020181 */ sub.s $f6,$f0,$f2 -.L000111c8: -/* 111c8: c42a3c94 */ lwc1 $f10,%lo(var70053c94)($at) -/* 111cc: 3c017005 */ lui $at,%hi(var70053c98) -/* 111d0: c4323c98 */ lwc1 $f18,%lo(var70053c98)($at) -/* 111d4: 460a3403 */ div.s $f16,$f6,$f10 -/* 111d8: 46128102 */ mul.s $f4,$f16,$f18 -/* 111dc: 460c2000 */ add.s $f0,$f4,$f12 -.L000111e0: -/* 111e0: 0fc5b364 */ jal lvIsPaused -/* 111e4: e7a00034 */ swc1 $f0,0x34($sp) -/* 111e8: 3c08800a */ lui $t0,%hi(g_Vars) -/* 111ec: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* 111f0: 10400028 */ beqz $v0,.L00011294 -/* 111f4: c7a00034 */ lwc1 $f0,0x34($sp) -/* 111f8: 3c028006 */ lui $v0,%hi(var8005ddb4) -/* 111fc: 2442ddb4 */ addiu $v0,$v0,%lo(var8005ddb4) -/* 11200: 8c460000 */ lw $a2,0x0($v0) -/* 11204: 00002825 */ or $a1,$zero,$zero -/* 11208: 24070040 */ addiu $a3,$zero,0x40 -/* 1120c: 18c0000b */ blez $a2,.L0001123c -/* 11210: 3c048006 */ lui $a0,%hi(var8005ddc4) -/* 11214: 8d090040 */ lw $t1,0x40($t0) -/* 11218: 000950c0 */ sll $t2,$t1,0x3 -/* 1121c: 01495021 */ addu $t2,$t2,$t1 -/* 11220: 000a5100 */ sll $t2,$t2,0x4 -/* 11224: 00ca5823 */ subu $t3,$a2,$t2 -/* 11228: ac4b0000 */ sw $t3,0x0($v0) -/* 1122c: 05610003 */ bgez $t3,.L0001123c -/* 11230: 01603025 */ or $a2,$t3,$zero -/* 11234: ac400000 */ sw $zero,0x0($v0) -/* 11238: 00003025 */ or $a2,$zero,$zero -.L0001123c: -/* 1123c: 10c0000d */ beqz $a2,.L00011274 -/* 11240: 240cffff */ addiu $t4,$zero,-1 -/* 11244: 3c048006 */ lui $a0,%hi(var8005ddc4) -/* 11248: 240dffff */ addiu $t5,$zero,-1 -/* 1124c: 240e0001 */ addiu $t6,$zero,0x1 -/* 11250: afae0020 */ sw $t6,0x20($sp) -/* 11254: afad001c */ sw $t5,0x1c($sp) -/* 11258: 2484ddc4 */ addiu $a0,$a0,%lo(var8005ddc4) -/* 1125c: afac0010 */ sw $t4,0x10($sp) -/* 11260: e7a00014 */ swc1 $f0,0x14($sp) -/* 11264: 0c004128 */ jal sndAdjust -/* 11268: afa00018 */ sw $zero,0x18($sp) -/* 1126c: 10000067 */ b .L0001140c -/* 11270: 8fbf002c */ lw $ra,0x2c($sp) -.L00011274: -/* 11274: 8c84ddc4 */ lw $a0,%lo(var8005ddc4)($a0) -/* 11278: 50800064 */ beqzl $a0,.L0001140c -/* 1127c: 8fbf002c */ lw $ra,0x2c($sp) -/* 11280: 0c00cec9 */ jal audioStop -/* 11284: 00000000 */ nop -/* 11288: 3c018006 */ lui $at,%hi(var8005ddc4) -/* 1128c: 1000005e */ b .L00011408 -/* 11290: ac20ddc4 */ sw $zero,%lo(var8005ddc4)($at) -.L00011294: -/* 11294: 3c0f8006 */ lui $t7,%hi(var8005ddc4) -/* 11298: 8defddc4 */ lw $t7,%lo(var8005ddc4)($t7) -/* 1129c: 3c048009 */ lui $a0,%hi(var80095200) -/* 112a0: 24050609 */ addiu $a1,$zero,0x609 -/* 112a4: 15e00012 */ bnez $t7,.L000112f0 -/* 112a8: 3c068006 */ lui $a2,%hi(var8005ddc4) -/* 112ac: 3c01bf80 */ lui $at,0xbf80 -/* 112b0: 44814000 */ mtc1 $at,$f8 -/* 112b4: 2418ffff */ addiu $t8,$zero,-1 -/* 112b8: 2419ffff */ addiu $t9,$zero,-1 -/* 112bc: 2409ffff */ addiu $t1,$zero,-1 -/* 112c0: afa9001c */ sw $t1,0x1c($sp) -/* 112c4: afb90018 */ sw $t9,0x18($sp) -/* 112c8: afb80010 */ sw $t8,0x10($sp) -/* 112cc: 8c845200 */ lw $a0,%lo(var80095200)($a0) -/* 112d0: 24c6ddc4 */ addiu $a2,$a2,%lo(var8005ddc4) -/* 112d4: 2407ffff */ addiu $a3,$zero,-1 -/* 112d8: e7a00034 */ swc1 $f0,0x34($sp) -/* 112dc: 0c004241 */ jal sndStart -/* 112e0: e7a80014 */ swc1 $f8,0x14($sp) -/* 112e4: 3c08800a */ lui $t0,%hi(g_Vars) -/* 112e8: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* 112ec: c7a00034 */ lwc1 $f0,0x34($sp) -.L000112f0: -/* 112f0: 3c028006 */ lui $v0,%hi(var8005ddb4) -/* 112f4: 2442ddb4 */ addiu $v0,$v0,%lo(var8005ddb4) -/* 112f8: 8c460000 */ lw $a2,0x0($v0) -/* 112fc: 3c048006 */ lui $a0,%hi(var8005ddc4) -/* 11300: 2484ddc4 */ addiu $a0,$a0,%lo(var8005ddc4) -/* 11304: 28c17fff */ slti $at,$a2,0x7fff -/* 11308: 1020000d */ beqz $at,.L00011340 -/* 1130c: 00002825 */ or $a1,$zero,$zero -/* 11310: 8d0a0040 */ lw $t2,0x40($t0) -/* 11314: 34018000 */ dli $at,0x8000 -/* 11318: 000a5880 */ sll $t3,$t2,0x2 -/* 1131c: 016a5823 */ subu $t3,$t3,$t2 -/* 11320: 000b5900 */ sll $t3,$t3,0x4 -/* 11324: 00cb6021 */ addu $t4,$a2,$t3 -/* 11328: 0181082a */ slt $at,$t4,$at -/* 1132c: ac4c0000 */ sw $t4,0x0($v0) -/* 11330: 14200003 */ bnez $at,.L00011340 -/* 11334: 01803025 */ or $a2,$t4,$zero -/* 11338: 24067fff */ addiu $a2,$zero,0x7fff -/* 1133c: ac460000 */ sw $a2,0x0($v0) -.L00011340: -/* 11340: 240effff */ addiu $t6,$zero,-1 -/* 11344: 240fffff */ addiu $t7,$zero,-1 -/* 11348: 24180001 */ addiu $t8,$zero,0x1 -/* 1134c: afb80020 */ sw $t8,0x20($sp) -/* 11350: afaf001c */ sw $t7,0x1c($sp) -/* 11354: afae0010 */ sw $t6,0x10($sp) -/* 11358: 24070040 */ addiu $a3,$zero,0x40 -/* 1135c: e7a00014 */ swc1 $f0,0x14($sp) -/* 11360: 0c004128 */ jal sndAdjust -/* 11364: afa00018 */ sw $zero,0x18($sp) -/* 11368: 10000028 */ b .L0001140c -/* 1136c: 8fbf002c */ lw $ra,0x2c($sp) -/* 11370: 8c460000 */ lw $a2,0x0($v0) -.L00011374: -/* 11374: 00002825 */ or $a1,$zero,$zero -/* 11378: 24070040 */ addiu $a3,$zero,0x40 -/* 1137c: 18c0000b */ blez $a2,.L000113ac -/* 11380: 3c048006 */ lui $a0,%hi(var8005ddc4) -/* 11384: 8d190040 */ lw $t9,0x40($t0) -/* 11388: 001948c0 */ sll $t1,$t9,0x3 -/* 1138c: 01394821 */ addu $t1,$t1,$t9 -/* 11390: 00094900 */ sll $t1,$t1,0x4 -/* 11394: 00c95023 */ subu $t2,$a2,$t1 -/* 11398: ac4a0000 */ sw $t2,0x0($v0) -/* 1139c: 05410003 */ bgez $t2,.L000113ac -/* 113a0: 01403025 */ or $a2,$t2,$zero -/* 113a4: ac400000 */ sw $zero,0x0($v0) -/* 113a8: 00003025 */ or $a2,$zero,$zero -.L000113ac: -/* 113ac: 10c0000f */ beqz $a2,.L000113ec -/* 113b0: 240bffff */ addiu $t3,$zero,-1 -/* 113b4: 3c01bf80 */ lui $at,0xbf80 -/* 113b8: 44813000 */ mtc1 $at,$f6 -/* 113bc: 3c048006 */ lui $a0,%hi(var8005ddc4) -/* 113c0: 240cffff */ addiu $t4,$zero,-1 -/* 113c4: 240d0001 */ addiu $t5,$zero,0x1 -/* 113c8: afad0020 */ sw $t5,0x20($sp) -/* 113cc: afac001c */ sw $t4,0x1c($sp) -/* 113d0: 2484ddc4 */ addiu $a0,$a0,%lo(var8005ddc4) -/* 113d4: afab0010 */ sw $t3,0x10($sp) -/* 113d8: afa00018 */ sw $zero,0x18($sp) -/* 113dc: 0c004128 */ jal sndAdjust -/* 113e0: e7a60014 */ swc1 $f6,0x14($sp) -/* 113e4: 10000009 */ b .L0001140c -/* 113e8: 8fbf002c */ lw $ra,0x2c($sp) -.L000113ec: -/* 113ec: 8c84ddc4 */ lw $a0,%lo(var8005ddc4)($a0) -/* 113f0: 50800006 */ beqzl $a0,.L0001140c -/* 113f4: 8fbf002c */ lw $ra,0x2c($sp) -/* 113f8: 0c00cec9 */ jal audioStop -/* 113fc: 00000000 */ nop -/* 11400: 3c018006 */ lui $at,%hi(var8005ddc4) -/* 11404: ac20ddc4 */ sw $zero,%lo(var8005ddc4)($at) -.L00011408: -/* 11408: 8fbf002c */ lw $ra,0x2c($sp) -.L0001140c: -/* 1140c: 27bd0038 */ addiu $sp,$sp,0x38 -/* 11410: 03e00008 */ jr $ra -/* 11414: 00000000 */ nop -); -#else -GLOBAL_ASM( -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) -/* 11128: 27bdffc8 */ addiu $sp,$sp,-56 -/* 1112c: 2401ffff */ addiu $at,$zero,-1 -/* 11130: 104100b5 */ beq $v0,$at,.L00011408 -/* 11134: afbf002c */ sw $ra,0x2c($sp) -/* 11138: 3c08800a */ lui $t0,%hi(g_Vars) -/* 1113c: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* 11140: 8d0e0034 */ lw $t6,0x34($t0) -/* 11144: 3c198006 */ lui $t9,%hi(var8005ddbc) -/* 11148: 3c013f80 */ lui $at,0x3f80 -/* 1114c: 004ec021 */ addu $t8,$v0,$t6 -/* 11150: ac780000 */ sw $t8,0x0($v1) -/* 11154: 8f39ddbc */ lw $t9,%lo(var8005ddbc)($t9) -/* 11158: 44982000 */ mtc1 $t8,$f4 -/* 1115c: 44816000 */ mtc1 $at,$f12 -/* 11160: 44994000 */ mtc1 $t9,$f8 -/* 11164: 468021a0 */ cvt.s.w $f6,$f4 -/* 11168: 3c028006 */ lui $v0,%hi(var8005ddb4) -/* 1116c: 3c017005 */ lui $at,%hi(var70053c88) -/* 11170: 2442ddb4 */ addiu $v0,$v0,%lo(var8005ddb4) -/* 11174: 468042a0 */ cvt.s.w $f10,$f8 -/* 11178: 460a3003 */ div.s $f0,$f6,$f10 -/* 1117c: 460c003c */ c.lt.s $f0,$f12 -/* 11180: 00000000 */ nop -/* 11184: 4502007b */ bc1fl .L00011374 -/* 11188: 8c460000 */ lw $a2,0x0($v0) -/* 1118c: c4223c88 */ lwc1 $f2,%lo(var70053c88)($at) -/* 11190: 3c017005 */ lui $at,%hi(var70053c94) -/* 11194: 4602003c */ c.lt.s $f0,$f2 -/* 11198: 00000000 */ nop -/* 1119c: 4502000a */ bc1fl .L000111c8 -/* 111a0: 46020181 */ sub.s $f6,$f0,$f2 -/* 111a4: 46020403 */ div.s $f16,$f0,$f2 -/* 111a8: 3c017005 */ lui $at,%hi(var70053c8c) -/* 111ac: c4323c8c */ lwc1 $f18,%lo(var70053c8c)($at) -/* 111b0: 3c017005 */ lui $at,%hi(var70053c90) -/* 111b4: c4283c90 */ lwc1 $f8,%lo(var70053c90)($at) -/* 111b8: 46128102 */ mul.s $f4,$f16,$f18 -/* 111bc: 10000008 */ b .L000111e0 -/* 111c0: 46082000 */ add.s $f0,$f4,$f8 -/* 111c4: 46020181 */ sub.s $f6,$f0,$f2 -.L000111c8: -/* 111c8: c42a3c94 */ lwc1 $f10,%lo(var70053c94)($at) -/* 111cc: 3c017005 */ lui $at,%hi(var70053c98) -/* 111d0: c4323c98 */ lwc1 $f18,%lo(var70053c98)($at) -/* 111d4: 460a3403 */ div.s $f16,$f6,$f10 -/* 111d8: 46128102 */ mul.s $f4,$f16,$f18 -/* 111dc: 460c2000 */ add.s $f0,$f4,$f12 -.L000111e0: -/* 111e0: 0fc5b364 */ jal lvIsPaused -/* 111e4: e7a00034 */ swc1 $f0,0x34($sp) -/* 111e8: 3c08800a */ lui $t0,%hi(g_Vars) -/* 111ec: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* 111f0: 10400028 */ beqz $v0,.L00011294 -/* 111f4: c7a00034 */ lwc1 $f0,0x34($sp) -/* 111f8: 3c028006 */ lui $v0,%hi(var8005ddb4) -/* 111fc: 2442ddb4 */ addiu $v0,$v0,%lo(var8005ddb4) -/* 11200: 8c460000 */ lw $a2,0x0($v0) -/* 11204: 00002825 */ or $a1,$zero,$zero -/* 11208: 24070040 */ addiu $a3,$zero,0x40 -/* 1120c: 18c0000b */ blez $a2,.L0001123c -/* 11210: 3c048006 */ lui $a0,%hi(var8005ddc4) -/* 11214: 8d090040 */ lw $t1,0x40($t0) -/* 11218: 00095100 */ sll $t2,$t1,0x4 -/* 1121c: 01495023 */ subu $t2,$t2,$t1 -/* 11220: 000a50c0 */ sll $t2,$t2,0x3 -/* 11224: 00ca5823 */ subu $t3,$a2,$t2 -/* 11228: ac4b0000 */ sw $t3,0x0($v0) -/* 1122c: 05610003 */ bgez $t3,.L0001123c -/* 11230: 01603025 */ or $a2,$t3,$zero -/* 11234: ac400000 */ sw $zero,0x0($v0) -/* 11238: 00003025 */ or $a2,$zero,$zero -.L0001123c: -/* 1123c: 10c0000d */ beqz $a2,.L00011274 -/* 11240: 240cffff */ addiu $t4,$zero,-1 -/* 11244: 3c048006 */ lui $a0,%hi(var8005ddc4) -/* 11248: 240dffff */ addiu $t5,$zero,-1 -/* 1124c: 240e0001 */ addiu $t6,$zero,0x1 -/* 11250: afae0020 */ sw $t6,0x20($sp) -/* 11254: afad001c */ sw $t5,0x1c($sp) -/* 11258: 2484ddc4 */ addiu $a0,$a0,%lo(var8005ddc4) -/* 1125c: afac0010 */ sw $t4,0x10($sp) -/* 11260: e7a00014 */ swc1 $f0,0x14($sp) -/* 11264: 0c004128 */ jal sndAdjust -/* 11268: afa00018 */ sw $zero,0x18($sp) -/* 1126c: 10000067 */ b .L0001140c -/* 11270: 8fbf002c */ lw $ra,0x2c($sp) -.L00011274: -/* 11274: 8c84ddc4 */ lw $a0,%lo(var8005ddc4)($a0) -/* 11278: 50800064 */ beqzl $a0,.L0001140c -/* 1127c: 8fbf002c */ lw $ra,0x2c($sp) -/* 11280: 0c00cec9 */ jal audioStop -/* 11284: 00000000 */ nop -/* 11288: 3c018006 */ lui $at,%hi(var8005ddc4) -/* 1128c: 1000005e */ b .L00011408 -/* 11290: ac20ddc4 */ sw $zero,%lo(var8005ddc4)($at) -.L00011294: -/* 11294: 3c0f8006 */ lui $t7,%hi(var8005ddc4) -/* 11298: 8defddc4 */ lw $t7,%lo(var8005ddc4)($t7) -/* 1129c: 3c048009 */ lui $a0,%hi(var80095200) -/* 112a0: 24050609 */ addiu $a1,$zero,0x609 -/* 112a4: 15e00012 */ bnez $t7,.L000112f0 -/* 112a8: 3c068006 */ lui $a2,%hi(var8005ddc4) -/* 112ac: 3c01bf80 */ lui $at,0xbf80 -/* 112b0: 44814000 */ mtc1 $at,$f8 -/* 112b4: 2418ffff */ addiu $t8,$zero,-1 -/* 112b8: 2419ffff */ addiu $t9,$zero,-1 -/* 112bc: 2409ffff */ addiu $t1,$zero,-1 -/* 112c0: afa9001c */ sw $t1,0x1c($sp) -/* 112c4: afb90018 */ sw $t9,0x18($sp) -/* 112c8: afb80010 */ sw $t8,0x10($sp) -/* 112cc: 8c845200 */ lw $a0,%lo(var80095200)($a0) -/* 112d0: 24c6ddc4 */ addiu $a2,$a2,%lo(var8005ddc4) -/* 112d4: 2407ffff */ addiu $a3,$zero,-1 -/* 112d8: e7a00034 */ swc1 $f0,0x34($sp) -/* 112dc: 0c004241 */ jal sndStart -/* 112e0: e7a80014 */ swc1 $f8,0x14($sp) -/* 112e4: 3c08800a */ lui $t0,%hi(g_Vars) -/* 112e8: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* 112ec: c7a00034 */ lwc1 $f0,0x34($sp) -.L000112f0: -/* 112f0: 3c028006 */ lui $v0,%hi(var8005ddb4) -/* 112f4: 2442ddb4 */ addiu $v0,$v0,%lo(var8005ddb4) -/* 112f8: 8c460000 */ lw $a2,0x0($v0) -/* 112fc: 3c048006 */ lui $a0,%hi(var8005ddc4) -/* 11300: 2484ddc4 */ addiu $a0,$a0,%lo(var8005ddc4) -/* 11304: 28c17fff */ slti $at,$a2,0x7fff -/* 11308: 1020000d */ beqz $at,.L00011340 -/* 1130c: 00002825 */ or $a1,$zero,$zero -/* 11310: 8d0a0040 */ lw $t2,0x40($t0) -/* 11314: 34018000 */ dli $at,0x8000 -/* 11318: 000a5880 */ sll $t3,$t2,0x2 -/* 1131c: 016a5821 */ addu $t3,$t3,$t2 -/* 11320: 000b58c0 */ sll $t3,$t3,0x3 -/* 11324: 00cb6021 */ addu $t4,$a2,$t3 -/* 11328: 0181082a */ slt $at,$t4,$at -/* 1132c: ac4c0000 */ sw $t4,0x0($v0) -/* 11330: 14200003 */ bnez $at,.L00011340 -/* 11334: 01803025 */ or $a2,$t4,$zero -/* 11338: 24067fff */ addiu $a2,$zero,0x7fff -/* 1133c: ac460000 */ sw $a2,0x0($v0) -.L00011340: -/* 11340: 240effff */ addiu $t6,$zero,-1 -/* 11344: 240fffff */ addiu $t7,$zero,-1 -/* 11348: 24180001 */ addiu $t8,$zero,0x1 -/* 1134c: afb80020 */ sw $t8,0x20($sp) -/* 11350: afaf001c */ sw $t7,0x1c($sp) -/* 11354: afae0010 */ sw $t6,0x10($sp) -/* 11358: 24070040 */ addiu $a3,$zero,0x40 -/* 1135c: e7a00014 */ swc1 $f0,0x14($sp) -/* 11360: 0c004128 */ jal sndAdjust -/* 11364: afa00018 */ sw $zero,0x18($sp) -/* 11368: 10000028 */ b .L0001140c -/* 1136c: 8fbf002c */ lw $ra,0x2c($sp) -/* 11370: 8c460000 */ lw $a2,0x0($v0) -.L00011374: -/* 11374: 00002825 */ or $a1,$zero,$zero -/* 11378: 24070040 */ addiu $a3,$zero,0x40 -/* 1137c: 18c0000b */ blez $a2,.L000113ac -/* 11380: 3c048006 */ lui $a0,%hi(var8005ddc4) -/* 11384: 8d190040 */ lw $t9,0x40($t0) -/* 11388: 00194900 */ sll $t1,$t9,0x4 -/* 1138c: 01394823 */ subu $t1,$t1,$t9 -/* 11390: 000948c0 */ sll $t1,$t1,0x3 -/* 11394: 00c95023 */ subu $t2,$a2,$t1 -/* 11398: ac4a0000 */ sw $t2,0x0($v0) -/* 1139c: 05410003 */ bgez $t2,.L000113ac -/* 113a0: 01403025 */ or $a2,$t2,$zero -/* 113a4: ac400000 */ sw $zero,0x0($v0) -/* 113a8: 00003025 */ or $a2,$zero,$zero -.L000113ac: -/* 113ac: 10c0000f */ beqz $a2,.L000113ec -/* 113b0: 240bffff */ addiu $t3,$zero,-1 -/* 113b4: 3c01bf80 */ lui $at,0xbf80 -/* 113b8: 44813000 */ mtc1 $at,$f6 -/* 113bc: 3c048006 */ lui $a0,%hi(var8005ddc4) -/* 113c0: 240cffff */ addiu $t4,$zero,-1 -/* 113c4: 240d0001 */ addiu $t5,$zero,0x1 -/* 113c8: afad0020 */ sw $t5,0x20($sp) -/* 113cc: afac001c */ sw $t4,0x1c($sp) -/* 113d0: 2484ddc4 */ addiu $a0,$a0,%lo(var8005ddc4) -/* 113d4: afab0010 */ sw $t3,0x10($sp) -/* 113d8: afa00018 */ sw $zero,0x18($sp) -/* 113dc: 0c004128 */ jal sndAdjust -/* 113e0: e7a60014 */ swc1 $f6,0x14($sp) -/* 113e4: 10000009 */ b .L0001140c -/* 113e8: 8fbf002c */ lw $ra,0x2c($sp) -.L000113ec: -/* 113ec: 8c84ddc4 */ lw $a0,%lo(var8005ddc4)($a0) -/* 113f0: 50800006 */ beqzl $a0,.L0001140c -/* 113f4: 8fbf002c */ lw $ra,0x2c($sp) -/* 113f8: 0c00cec9 */ jal audioStop -/* 113fc: 00000000 */ nop -/* 11400: 3c018006 */ lui $at,%hi(var8005ddc4) -/* 11404: ac20ddc4 */ sw $zero,%lo(var8005ddc4)($at) -.L00011408: -/* 11408: 8fbf002c */ lw $ra,0x2c($sp) -.L0001140c: -/* 1140c: 27bd0038 */ addiu $sp,$sp,0x38 -/* 11410: 03e00008 */ jr $ra -/* 11414: 00000000 */ nop -); -#endif +void sndTickUfo(void) +{ + f32 percentage; + + if (g_SndUfoAge240 != -1) { + g_SndUfoAge240 += g_Vars.lvupdate240; + + percentage = (f32)g_SndUfoAge240 / (f32)g_SndUfoDuration240; + + if (percentage < 1.0f) { // less than 100% complete + if (percentage < 0.65f) { + percentage = percentage / 0.65f * 0.3f + 0.7f; + } else { + percentage = (percentage - 0.65f) / 0.35f * 0.8f + 1.0f; + } + + if (lvIsPaused()) { + // Fade out volume during pause instead of stopping abruptly + if (g_SndUfoVolume > 0) { + g_SndUfoVolume -= g_Vars.diffframe240 * PALUP(120); + + if (g_SndUfoVolume < 0) { + g_SndUfoVolume = 0; + } + } + + if (g_SndUfoVolume) { + sndAdjust(&g_SndUfoHandle, 0, g_SndUfoVolume, 64, -1, percentage, 0, -1, 1); + } else if (g_SndUfoHandle != NULL) { + audioStop(g_SndUfoHandle); + g_SndUfoHandle = NULL; + } + } else { + // Not paused + if (g_SndUfoHandle == NULL) { + sndStart(var80095200, SFX_UFOHUM, &g_SndUfoHandle, -1, -1, -1, -1, -1); + } + + // Fade in over about 2.4 seconds + if (g_SndUfoVolume < 32767) { + g_SndUfoVolume += g_Vars.diffframe240 * PALUP(40); + + if (g_SndUfoVolume > 32767) { + g_SndUfoVolume = 32767; + } + } + + sndAdjust(&g_SndUfoHandle, 0, g_SndUfoVolume, 64, -1, percentage, 0, -1, 1); + } + } else { + // Reached the configured fade out point + if (g_SndUfoVolume > 0) { + g_SndUfoVolume -= g_Vars.diffframe240 * PALUP(120); + + if (g_SndUfoVolume < 0) { + g_SndUfoVolume = 0; + } + } + + if (g_SndUfoVolume) { + sndAdjust(&g_SndUfoHandle, 0, g_SndUfoVolume, 64, -1, -1, 0, -1, 1); + } else if (g_SndUfoHandle != NULL) { + audioStop(g_SndUfoHandle); + g_SndUfoHandle = NULL; + } + } + } +}