From 9c183ae48e1616efbda9e698a94579e395db0c41 Mon Sep 17 00:00:00 2001 From: Unnunu Date: Sun, 22 Jan 2023 18:35:15 +0300 Subject: [PATCH] two audio functions (#918) * 2 audio functions * cleaning up * PR comments --- src/audio.h | 4 +- src/audio/2d9a0_len_890.c | 43 +- src/audio/sfx_player.c | 241 ++++++++- .../audio/2d9a0_len_890/func_80052CFC.s | 85 ---- .../audio/sfx_player/func_8004BA74.s | 472 ------------------ 5 files changed, 283 insertions(+), 562 deletions(-) delete mode 100644 ver/us/asm/nonmatchings/audio/2d9a0_len_890/func_80052CFC.s delete mode 100644 ver/us/asm/nonmatchings/audio/sfx_player/func_8004BA74.s diff --git a/src/audio.h b/src/audio.h index 47b47f8ca0..72633aeefe 100644 --- a/src/audio.h +++ b/src/audio.h @@ -391,7 +391,7 @@ typedef struct AuSynDriver { typedef struct SoundSFXEntry { /* 0x0 */ u16 soundID; - /* 0x2 */ s16 upperSoundID; + /* 0x2 */ u16 upperSoundID; /* 0x4 */ s16 volume; /* 0x6 */ s16 pitchShift; /* 0x8 */ s8 pan; @@ -533,7 +533,7 @@ typedef struct SoundManagerA0 { typedef struct SoundManager { /* 0x000 */ struct AuGlobals* globals; /* 0x004 */ struct AlUnkVoice* currentVoice; - /* 0x008 */ struct SEFHeader* sefData; + /* 0x008 */ u8* sefData; /* 0x00C */ s32* normalSounds[8]; /* 0x02C */ s32* soundsWithBit2000; /* 0x030 */ s32 playCounter; //? diff --git a/src/audio/2d9a0_len_890.c b/src/audio/2d9a0_len_890.c index d09a04a240..563f8eee0f 100644 --- a/src/audio/2d9a0_len_890.c +++ b/src/audio/2d9a0_len_890.c @@ -196,7 +196,48 @@ void func_80052BF8(AlUnkVoice* voice, AlUnkInstrumentData* arg1) { voice->unk_3F = 0x80; } -INCLUDE_ASM(u8, "audio/2d9a0_len_890", func_80052CFC, AlUnkVoice* arg0); +u8 func_80052CFC(AlUnkVoice* voice) { + u32 op; + u8 arg; + + while (TRUE) { + if (((s8)(op = *voice->unk_1C++)) >= 0) { + break; + } + switch ((u8)op) { + case 0xFE: + arg = *voice->unk_1C++; + if (arg > 0x80) { + arg = 0x80; + } + voice->unk_30 = arg; + break; + case 0xFD: + voice->unk_30 += (s8) *voice->unk_1C++; + if (voice->unk_30 > 0x80) { + voice->unk_30 = 0x80; + } else if (voice->unk_30 < 0) { + voice->unk_30 = 0; + } + break; + case 0xFC: + voice->unk_38 = *voice->unk_1C++; + voice->unk_34 = voice->unk_1C; + break; + case 0xFB: + voice->unk_1C++; + if (voice->unk_38 == 0 || --voice->unk_38 != 0) { + voice->unk_1C = voice->unk_34; + } + break; + default: + voice->unk_1C++; + break; + } + } + return op; +} + void func_80052E18(AlUnkVoice* arg0) { arg0->unk_flags_3D |= AU_VOICE_3D_FLAG_VOL_CHANGED; diff --git a/src/audio/sfx_player.c b/src/audio/sfx_player.c index 1a1df1b838..d5ef495646 100644 --- a/src/audio/sfx_player.c +++ b/src/audio/sfx_player.c @@ -460,7 +460,7 @@ void au_sfx_load_groups_from_SEF(SoundManager* manager) { s32 sections = ARRAY_COUNT(sefData->sections); u32 i; - manager->sefData = sefData; + manager->sefData = (u8*)sefData; for (i = 0; i < sections; i++) { if (sefData->sections[i] != 0) { @@ -638,7 +638,244 @@ void func_8004BA54(SoundManager* manager, s32 arg1) { } } -INCLUDE_ASM(s32, "audio/sfx_player", func_8004BA74); +void func_8004BA74(SoundManager* manager, SoundSFXEntry* entry, SoundManagerA0* arg2) { + SoundPlayer* player; + s32 playerIndex; + u16* cmdList; + s32 s1; + s32 cond = FALSE; + u32 unk_99; + s32 sectionIndex; + u16 soundInfo; + u32 unk_98, s0, s3; + s32 v1; + s32* normalSounds; + + #define NEXT_CMD s1--; if (s1 <= 0 ) { break; } cmdList += 2; + + u32 soundIndex = (entry->soundID - 1) & 0xFF; + u16 soundIDMasked = entry->soundID & SOUND_ID_LOWER; + u16 soundID = entry->soundID; + + if (soundID & 0x2000) { + soundIndex = (entry->soundID - 1) & 0x1FF; + if (soundIndex < 0x140) { + cmdList = (u16*)&manager->soundsWithBit2000[soundIndex]; + if (*cmdList != 0) { + // check if any player is playing this sound + for (playerIndex = 7; playerIndex >= 0; playerIndex--) { + player = &manager->players[playerIndex]; + if (player->currentSoundID == soundIDMasked) { + cond = TRUE; + break; + } + } + + if (!cond) { + //find free player + for (playerIndex = 7; playerIndex >= 0; playerIndex--) { + player = &manager->players[playerIndex]; + if (player->sefDataReadPos == NULL) { + cond = TRUE; + break; + } + } + } + + if (cond) { + func_8004C0E4(manager, player, (s8*)cmdList, entry, 0, 0); + } + } + } + } else { + if (soundIndex >= 0xC0) { + if (arg2 != NULL) { + cmdList = (u16*)arg2; + } else { + sectionIndex = ((soundIDMasked - 1) >> 8) + 4; + normalSounds = manager->normalSounds[sectionIndex]; + v1 = soundIndex - 0xC0; + cmdList = (u16*)&manager->normalSounds[sectionIndex][v1]; + } + + if (*cmdList != 0) { + // check if any player is playing this sound + for (playerIndex = 7; playerIndex >= 0; playerIndex--) { + player = &manager->players[playerIndex]; + if (player->currentSoundID == soundIDMasked) { + cond = TRUE; + break; + } + } + + if (!cond) { + //find free player + for (playerIndex = 7; playerIndex >= 0; playerIndex--) { + player = &manager->players[playerIndex]; + if (player->sefDataReadPos == NULL) { + cond = TRUE; + break; + } + } + } + + if (cond) { + func_8004C0E4(manager, player, (u8*)cmdList, entry, 0, 0); + } + } + } else { + if (arg2 != NULL) { + cmdList = (u16*)arg2; + } else { + sectionIndex = ((soundID) >> 8) & 3; + cmdList = (u16*)&manager->normalSounds[sectionIndex][soundIndex]; + } + + if (*cmdList != 0) { + soundInfo = cmdList[1]; + + unk_98 = (soundInfo & 0x300) >> 8; // bits 8, 9 + s0 = (soundInfo & 0x60) >> 5; // bits 5, 6 + s3 = soundInfo; + s3 = (s3 & 0x80) >> 7; // bit 7 + + if (s0 == 0) { + if (entry->upperSoundID != 0) { + for (playerIndex = 0; playerIndex < 8; playerIndex++) { + player = &manager->players[playerIndex]; + if (player->currentSoundID == entry->upperSoundID) { + cond = TRUE; + break; + } + } + } + + if (s3 == 0) { + if (!cond) { + playerIndex = soundInfo & 0x7; + player = &manager->players[playerIndex]; + if (player->sefDataReadPos == NULL || unk_98 >= player->unk_98) { + func_8004C0E4(manager, player, AU_FILE_RELATIVE(manager->sefData, *cmdList), entry, unk_98, 0); + } + return; + } + } + + if (!cond) { + for (playerIndex = soundInfo & 0x7; playerIndex >= 0; playerIndex--) { + player = &manager->players[playerIndex]; + if (player->currentSoundID == soundIDMasked) { + cond = TRUE; + break; + } + } + } + + if (!cond) { + for (playerIndex = soundInfo & 0x7; playerIndex >= 0; playerIndex--) { + player = &manager->players[playerIndex]; + if (player->sefDataReadPos == NULL) { + cond = TRUE; + break; + } + } + } + + if (!cond) { + for (playerIndex = soundInfo & 0x7; playerIndex >= 0; playerIndex--) { + player = &manager->players[playerIndex]; + if (player->unk_98 < unk_98) { + cond = TRUE; + break; + } + } + } + + if (!cond) { + playerIndex = soundInfo & 0x7; + player = &manager->players[playerIndex]; + if (player->unk_98 <= unk_98) { + cond = TRUE; + } + } + + if (cond) { + func_8004C0E4(manager, player, AU_FILE_RELATIVE(manager->sefData, *cmdList), entry, unk_98, 0); + } + } else { + cmdList = AU_FILE_RELATIVE(manager->sefData, *cmdList); + unk_99 = (soundInfo & 0x1800) >> 11; // bits 11, 12, 13 + if (unk_99 != 0) { + func_8004C300(manager, unk_99); + } else { + au_sfx_stop_by_id(manager, entry->soundID); + } + + s1 = 2 << (s0 - 1); // 2 or 4 or 8 + + if (s3 != 0) { + for (playerIndex = 7; playerIndex >= 0; playerIndex--) { + if (*cmdList != 0) { + player = &manager->players[playerIndex]; + if (player->sefDataReadPos == BlankSEFData) { + func_8004C0E4(manager, player, AU_FILE_RELATIVE(manager->sefData, *cmdList), entry, unk_98, unk_99); + NEXT_CMD; + } + } else { + NEXT_CMD; + } + + } + + if (s1 != 0) { + for (playerIndex = 7; playerIndex >= 0;){ + if (*cmdList != 0) { + player = &manager->players[playerIndex]; + if (player->sefDataReadPos == NULL) { + func_8004C0E4(manager, player, AU_FILE_RELATIVE(manager->sefData, *cmdList), entry, unk_98, unk_99); + NEXT_CMD; + } + playerIndex--; + } else { + NEXT_CMD; + } + } + } + + if (s1 != 0) { + for (playerIndex = 7; playerIndex >= 0; playerIndex--) { + if (*cmdList) { + player = &manager->players[playerIndex]; + if (unk_99 > player->unk_99 && unk_98 >= player->unk_98) { + func_8004C0E4(manager, player, AU_FILE_RELATIVE(manager->sefData, *cmdList), entry, unk_98, unk_99); + NEXT_CMD; + } + } else { + NEXT_CMD; + } + } + } + } else { + s32 i; + for (i = 0; i < s1; i++) { + if (*cmdList != 0) { + soundInfo = cmdList[1]; + playerIndex = soundInfo & 7; + player = &manager->players[playerIndex]; + unk_98 = (soundInfo & 0x300) >> 8; + if (player->sefDataReadPos == NULL || unk_98 >= player->unk_98) { + func_8004C0E4(manager, player, AU_FILE_RELATIVE(manager->sefData, *cmdList), entry, unk_98, unk_99); + } + cmdList += 2; + } + } + } + } + } + } + } + #undef NEXT_CMD +} static void func_8004C0E4(SoundManager* manager, SoundPlayer* player, s8* readPos, SoundSFXEntry* sfxEntry, s32 arg4, s32 arg5) { if (manager->unk_C0 == 0) { diff --git a/ver/us/asm/nonmatchings/audio/2d9a0_len_890/func_80052CFC.s b/ver/us/asm/nonmatchings/audio/2d9a0_len_890/func_80052CFC.s deleted file mode 100644 index ebe1437033..0000000000 --- a/ver/us/asm/nonmatchings/audio/2d9a0_len_890/func_80052CFC.s +++ /dev/null @@ -1,85 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80052CFC -/* 2E0FC 80052CFC 240A00FC */ addiu $t2, $zero, 0xfc -/* 2E100 80052D00 240900FB */ addiu $t1, $zero, 0xfb -/* 2E104 80052D04 240800FD */ addiu $t0, $zero, 0xfd -/* 2E108 80052D08 240700FE */ addiu $a3, $zero, 0xfe -/* 2E10C 80052D0C 24060080 */ addiu $a2, $zero, 0x80 -.L80052D10: -/* 2E110 80052D10 8C85001C */ lw $a1, 0x1c($a0) -/* 2E114 80052D14 90A30000 */ lbu $v1, ($a1) -/* 2E118 80052D18 80A20000 */ lb $v0, ($a1) -/* 2E11C 80052D1C 24A50001 */ addiu $a1, $a1, 1 -/* 2E120 80052D20 0441003B */ bgez $v0, .L80052E10 -/* 2E124 80052D24 AC85001C */ sw $a1, 0x1c($a0) -/* 2E128 80052D28 306300FF */ andi $v1, $v1, 0xff -/* 2E12C 80052D2C 106A0023 */ beq $v1, $t2, .L80052DBC -/* 2E130 80052D30 286200FD */ slti $v0, $v1, 0xfd -/* 2E134 80052D34 10400005 */ beqz $v0, .L80052D4C -/* 2E138 80052D38 00000000 */ nop -/* 2E13C 80052D3C 10690025 */ beq $v1, $t1, .L80052DD4 -/* 2E140 80052D40 24A20001 */ addiu $v0, $a1, 1 -/* 2E144 80052D44 08014B80 */ j .L80052E00 -/* 2E148 80052D48 00000000 */ nop -.L80052D4C: -/* 2E14C 80052D4C 1068000B */ beq $v1, $t0, .L80052D7C -/* 2E150 80052D50 00000000 */ nop -/* 2E154 80052D54 1467002A */ bne $v1, $a3, .L80052E00 -/* 2E158 80052D58 24A20001 */ addiu $v0, $a1, 1 -/* 2E15C 80052D5C 90A30000 */ lbu $v1, ($a1) -/* 2E160 80052D60 AC82001C */ sw $v0, 0x1c($a0) -/* 2E164 80052D64 306200FF */ andi $v0, $v1, 0xff -/* 2E168 80052D68 2C420081 */ sltiu $v0, $v0, 0x81 -/* 2E16C 80052D6C 50400001 */ beql $v0, $zero, .L80052D74 -/* 2E170 80052D70 24030080 */ addiu $v1, $zero, 0x80 -.L80052D74: -/* 2E174 80052D74 08014B44 */ j .L80052D10 -/* 2E178 80052D78 AC830030 */ sw $v1, 0x30($a0) -.L80052D7C: -/* 2E17C 80052D7C 80A30000 */ lb $v1, ($a1) -/* 2E180 80052D80 8C820030 */ lw $v0, 0x30($a0) -/* 2E184 80052D84 00431021 */ addu $v0, $v0, $v1 -/* 2E188 80052D88 AC820030 */ sw $v0, 0x30($a0) -/* 2E18C 80052D8C 0040182D */ daddu $v1, $v0, $zero -/* 2E190 80052D90 24A20001 */ addiu $v0, $a1, 1 -/* 2E194 80052D94 AC82001C */ sw $v0, 0x1c($a0) -/* 2E198 80052D98 28620081 */ slti $v0, $v1, 0x81 -/* 2E19C 80052D9C 14400003 */ bnez $v0, .L80052DAC -/* 2E1A0 80052DA0 00000000 */ nop -/* 2E1A4 80052DA4 08014B44 */ j .L80052D10 -/* 2E1A8 80052DA8 AC860030 */ sw $a2, 0x30($a0) -.L80052DAC: -/* 2E1AC 80052DAC 0462FFD8 */ bltzl $v1, .L80052D10 -/* 2E1B0 80052DB0 AC800030 */ sw $zero, 0x30($a0) -/* 2E1B4 80052DB4 08014B44 */ j .L80052D10 -/* 2E1B8 80052DB8 00000000 */ nop -.L80052DBC: -/* 2E1BC 80052DBC 90A30000 */ lbu $v1, ($a1) -/* 2E1C0 80052DC0 24A20001 */ addiu $v0, $a1, 1 -/* 2E1C4 80052DC4 AC82001C */ sw $v0, 0x1c($a0) -/* 2E1C8 80052DC8 AC820034 */ sw $v0, 0x34($a0) -/* 2E1CC 80052DCC 08014B44 */ j .L80052D10 -/* 2E1D0 80052DD0 A0830038 */ sb $v1, 0x38($a0) -.L80052DD4: -/* 2E1D4 80052DD4 90830038 */ lbu $v1, 0x38($a0) -/* 2E1D8 80052DD8 10600006 */ beqz $v1, .L80052DF4 -/* 2E1DC 80052DDC AC82001C */ sw $v0, 0x1c($a0) -/* 2E1E0 80052DE0 2462FFFF */ addiu $v0, $v1, -1 -/* 2E1E4 80052DE4 A0820038 */ sb $v0, 0x38($a0) -/* 2E1E8 80052DE8 304200FF */ andi $v0, $v0, 0xff -/* 2E1EC 80052DEC 1040FFC8 */ beqz $v0, .L80052D10 -/* 2E1F0 80052DF0 00000000 */ nop -.L80052DF4: -/* 2E1F4 80052DF4 8C820034 */ lw $v0, 0x34($a0) -/* 2E1F8 80052DF8 08014B44 */ j .L80052D10 -/* 2E1FC 80052DFC AC82001C */ sw $v0, 0x1c($a0) -.L80052E00: -/* 2E200 80052E00 8C82001C */ lw $v0, 0x1c($a0) -/* 2E204 80052E04 24420001 */ addiu $v0, $v0, 1 -/* 2E208 80052E08 08014B44 */ j .L80052D10 -/* 2E20C 80052E0C AC82001C */ sw $v0, 0x1c($a0) -.L80052E10: -/* 2E210 80052E10 03E00008 */ jr $ra -/* 2E214 80052E14 0060102D */ daddu $v0, $v1, $zero diff --git a/ver/us/asm/nonmatchings/audio/sfx_player/func_8004BA74.s b/ver/us/asm/nonmatchings/audio/sfx_player/func_8004BA74.s deleted file mode 100644 index c3af06b03a..0000000000 --- a/ver/us/asm/nonmatchings/audio/sfx_player/func_8004BA74.s +++ /dev/null @@ -1,472 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_8004BA74 -/* 26E74 8004BA74 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 26E78 8004BA78 AFB40028 */ sw $s4, 0x28($sp) -/* 26E7C 8004BA7C 0080A02D */ daddu $s4, $a0, $zero -/* 26E80 8004BA80 AFB70034 */ sw $s7, 0x34($sp) -/* 26E84 8004BA84 00A0B82D */ daddu $s7, $a1, $zero -/* 26E88 8004BA88 AFBF003C */ sw $ra, 0x3c($sp) -/* 26E8C 8004BA8C AFBE0038 */ sw $fp, 0x38($sp) -/* 26E90 8004BA90 AFB60030 */ sw $s6, 0x30($sp) -/* 26E94 8004BA94 AFB5002C */ sw $s5, 0x2c($sp) -/* 26E98 8004BA98 AFB30024 */ sw $s3, 0x24($sp) -/* 26E9C 8004BA9C AFB20020 */ sw $s2, 0x20($sp) -/* 26EA0 8004BAA0 AFB1001C */ sw $s1, 0x1c($sp) -/* 26EA4 8004BAA4 AFB00018 */ sw $s0, 0x18($sp) -/* 26EA8 8004BAA8 96E20000 */ lhu $v0, ($s7) -/* 26EAC 8004BAAC 0000402D */ daddu $t0, $zero, $zero -/* 26EB0 8004BAB0 2445FFFF */ addiu $a1, $v0, -1 -/* 26EB4 8004BAB4 304923FF */ andi $t1, $v0, 0x23ff -/* 26EB8 8004BAB8 0040182D */ daddu $v1, $v0, $zero -/* 26EBC 8004BABC 30422000 */ andi $v0, $v0, 0x2000 -/* 26EC0 8004BAC0 10400020 */ beqz $v0, .L8004BB44 -/* 26EC4 8004BAC4 30A400FF */ andi $a0, $a1, 0xff -/* 26EC8 8004BAC8 30A401FF */ andi $a0, $a1, 0x1ff -/* 26ECC 8004BACC 2C820140 */ sltiu $v0, $a0, 0x140 -/* 26ED0 8004BAD0 10400178 */ beqz $v0, .L8004C0B4 -/* 26ED4 8004BAD4 00041880 */ sll $v1, $a0, 2 -/* 26ED8 8004BAD8 8E82002C */ lw $v0, 0x2c($s4) -/* 26EDC 8004BADC 00439021 */ addu $s2, $v0, $v1 -/* 26EE0 8004BAE0 96420000 */ lhu $v0, ($s2) -/* 26EE4 8004BAE4 10400173 */ beqz $v0, .L8004C0B4 -/* 26EE8 8004BAE8 24100007 */ addiu $s0, $zero, 7 -/* 26EEC 8004BAEC 3124FFFF */ andi $a0, $t1, 0xffff -/* 26EF0 8004BAF0 24030620 */ addiu $v1, $zero, 0x620 -.L8004BAF4: -/* 26EF4 8004BAF4 02833821 */ addu $a3, $s4, $v1 -/* 26EF8 8004BAF8 94E20096 */ lhu $v0, 0x96($a3) -/* 26EFC 8004BAFC 1044000F */ beq $v0, $a0, .L8004BB3C -/* 26F00 8004BB00 2610FFFF */ addiu $s0, $s0, -1 -/* 26F04 8004BB04 0601FFFB */ bgez $s0, .L8004BAF4 -/* 26F08 8004BB08 2463FF54 */ addiu $v1, $v1, -0xac -.L8004BB0C: -/* 26F0C 8004BB0C 55000038 */ bnel $t0, $zero, .L8004BBF0 -/* 26F10 8004BB10 0280202D */ daddu $a0, $s4, $zero -/* 26F14 8004BB14 24100007 */ addiu $s0, $zero, 7 -/* 26F18 8004BB18 24030620 */ addiu $v1, $zero, 0x620 -.L8004BB1C: -/* 26F1C 8004BB1C 02833821 */ addu $a3, $s4, $v1 -/* 26F20 8004BB20 8CE20000 */ lw $v0, ($a3) -/* 26F24 8004BB24 10400010 */ beqz $v0, .L8004BB68 -/* 26F28 8004BB28 2610FFFF */ addiu $s0, $s0, -1 -/* 26F2C 8004BB2C 0601FFFB */ bgez $s0, .L8004BB1C -/* 26F30 8004BB30 2463FF54 */ addiu $v1, $v1, -0xac -/* 26F34 8004BB34 08012EFA */ j .L8004BBE8 -/* 26F38 8004BB38 00000000 */ nop -.L8004BB3C: -/* 26F3C 8004BB3C 08012EC3 */ j .L8004BB0C -/* 26F40 8004BB40 24080001 */ addiu $t0, $zero, 1 -.L8004BB44: -/* 26F44 8004BB44 2C8200C0 */ sltiu $v0, $a0, 0xc0 -/* 26F48 8004BB48 14400031 */ bnez $v0, .L8004BC10 -/* 26F4C 8004BB4C 00000000 */ nop -/* 26F50 8004BB50 10C00007 */ beqz $a2, .L8004BB70 -/* 26F54 8004BB54 00C0902D */ daddu $s2, $a2, $zero -/* 26F58 8004BB58 08012EE5 */ j .L8004BB94 -/* 26F5C 8004BB5C 00000000 */ nop -.L8004BB60: -/* 26F60 8004BB60 08012EF0 */ j .L8004BBC0 -/* 26F64 8004BB64 24080001 */ addiu $t0, $zero, 1 -.L8004BB68: -/* 26F68 8004BB68 08012EFA */ j .L8004BBE8 -/* 26F6C 8004BB6C 24080001 */ addiu $t0, $zero, 1 -.L8004BB70: -/* 26F70 8004BB70 2522FFFF */ addiu $v0, $t1, -1 -/* 26F74 8004BB74 00021203 */ sra $v0, $v0, 8 -/* 26F78 8004BB78 24420004 */ addiu $v0, $v0, 4 -/* 26F7C 8004BB7C 00021080 */ sll $v0, $v0, 2 -/* 26F80 8004BB80 02821021 */ addu $v0, $s4, $v0 -/* 26F84 8004BB84 2483FF40 */ addiu $v1, $a0, -0xc0 -/* 26F88 8004BB88 8C42000C */ lw $v0, 0xc($v0) -/* 26F8C 8004BB8C 00031880 */ sll $v1, $v1, 2 -/* 26F90 8004BB90 00439021 */ addu $s2, $v0, $v1 -.L8004BB94: -/* 26F94 8004BB94 96420000 */ lhu $v0, ($s2) -/* 26F98 8004BB98 10400146 */ beqz $v0, .L8004C0B4 -/* 26F9C 8004BB9C 24100007 */ addiu $s0, $zero, 7 -/* 26FA0 8004BBA0 3124FFFF */ andi $a0, $t1, 0xffff -/* 26FA4 8004BBA4 24030620 */ addiu $v1, $zero, 0x620 -.L8004BBA8: -/* 26FA8 8004BBA8 02833821 */ addu $a3, $s4, $v1 -/* 26FAC 8004BBAC 94E20096 */ lhu $v0, 0x96($a3) -/* 26FB0 8004BBB0 1044FFEB */ beq $v0, $a0, .L8004BB60 -/* 26FB4 8004BBB4 2610FFFF */ addiu $s0, $s0, -1 -/* 26FB8 8004BBB8 0601FFFB */ bgez $s0, .L8004BBA8 -/* 26FBC 8004BBBC 2463FF54 */ addiu $v1, $v1, -0xac -.L8004BBC0: -/* 26FC0 8004BBC0 5500000B */ bnel $t0, $zero, .L8004BBF0 -/* 26FC4 8004BBC4 0280202D */ daddu $a0, $s4, $zero -/* 26FC8 8004BBC8 24100007 */ addiu $s0, $zero, 7 -/* 26FCC 8004BBCC 24030620 */ addiu $v1, $zero, 0x620 -.L8004BBD0: -/* 26FD0 8004BBD0 02833821 */ addu $a3, $s4, $v1 -/* 26FD4 8004BBD4 8CE20000 */ lw $v0, ($a3) -/* 26FD8 8004BBD8 1040FFE3 */ beqz $v0, .L8004BB68 -/* 26FDC 8004BBDC 2610FFFF */ addiu $s0, $s0, -1 -/* 26FE0 8004BBE0 0601FFFB */ bgez $s0, .L8004BBD0 -/* 26FE4 8004BBE4 2463FF54 */ addiu $v1, $v1, -0xac -.L8004BBE8: -/* 26FE8 8004BBE8 11000132 */ beqz $t0, .L8004C0B4 -/* 26FEC 8004BBEC 0280202D */ daddu $a0, $s4, $zero -.L8004BBF0: -/* 26FF0 8004BBF0 00E0282D */ daddu $a1, $a3, $zero -/* 26FF4 8004BBF4 0240302D */ daddu $a2, $s2, $zero -/* 26FF8 8004BBF8 02E0382D */ daddu $a3, $s7, $zero -/* 26FFC 8004BBFC AFA00010 */ sw $zero, 0x10($sp) -/* 27000 8004BC00 0C013039 */ jal func_8004C0E4 -/* 27004 8004BC04 AFA00014 */ sw $zero, 0x14($sp) -/* 27008 8004BC08 0801302D */ j .L8004C0B4 -/* 2700C 8004BC0C 00000000 */ nop -.L8004BC10: -/* 27010 8004BC10 10C00005 */ beqz $a2, .L8004BC28 -/* 27014 8004BC14 00C0902D */ daddu $s2, $a2, $zero -/* 27018 8004BC18 08012F10 */ j .L8004BC40 -/* 2701C 8004BC1C 00000000 */ nop -.L8004BC20: -/* 27020 8004BC20 08012F28 */ j .L8004BCA0 -/* 27024 8004BC24 24080001 */ addiu $t0, $zero, 1 -.L8004BC28: -/* 27028 8004BC28 00031182 */ srl $v0, $v1, 6 -/* 2702C 8004BC2C 3042000C */ andi $v0, $v0, 0xc -/* 27030 8004BC30 02821021 */ addu $v0, $s4, $v0 -/* 27034 8004BC34 8C43000C */ lw $v1, 0xc($v0) -/* 27038 8004BC38 00041080 */ sll $v0, $a0, 2 -/* 2703C 8004BC3C 00629021 */ addu $s2, $v1, $v0 -.L8004BC40: -/* 27040 8004BC40 96420000 */ lhu $v0, ($s2) -/* 27044 8004BC44 1040011B */ beqz $v0, .L8004C0B4 -/* 27048 8004BC48 00000000 */ nop -/* 2704C 8004BC4C 96440002 */ lhu $a0, 2($s2) -/* 27050 8004BC50 30820300 */ andi $v0, $a0, 0x300 -/* 27054 8004BC54 0002AA02 */ srl $s5, $v0, 8 -/* 27058 8004BC58 30820060 */ andi $v0, $a0, 0x60 -/* 2705C 8004BC5C 00028142 */ srl $s0, $v0, 5 -/* 27060 8004BC60 30820080 */ andi $v0, $a0, 0x80 -/* 27064 8004BC64 1600007F */ bnez $s0, .L8004BE64 -/* 27068 8004BC68 000299C2 */ srl $s3, $v0, 7 -/* 2706C 8004BC6C 96E20002 */ lhu $v0, 2($s7) -/* 27070 8004BC70 1040000B */ beqz $v0, .L8004BCA0 -/* 27074 8004BC74 00000000 */ nop -/* 27078 8004BC78 0000802D */ daddu $s0, $zero, $zero -/* 2707C 8004BC7C 0040282D */ daddu $a1, $v0, $zero -/* 27080 8004BC80 2403016C */ addiu $v1, $zero, 0x16c -.L8004BC84: -/* 27084 8004BC84 02833821 */ addu $a3, $s4, $v1 -/* 27088 8004BC88 94E20096 */ lhu $v0, 0x96($a3) -/* 2708C 8004BC8C 1045FFE4 */ beq $v0, $a1, .L8004BC20 -/* 27090 8004BC90 26100001 */ addiu $s0, $s0, 1 -/* 27094 8004BC94 2A020008 */ slti $v0, $s0, 8 -/* 27098 8004BC98 1440FFFA */ bnez $v0, .L8004BC84 -/* 2709C 8004BC9C 246300AC */ addiu $v1, $v1, 0xac -.L8004BCA0: -/* 270A0 8004BCA0 1660001C */ bnez $s3, .L8004BD14 -/* 270A4 8004BCA4 00000000 */ nop -/* 270A8 8004BCA8 55000064 */ bnel $t0, $zero, .L8004BE3C -/* 270AC 8004BCAC 0280202D */ daddu $a0, $s4, $zero -/* 270B0 8004BCB0 30900007 */ andi $s0, $a0, 7 -/* 270B4 8004BCB4 00101040 */ sll $v0, $s0, 1 -/* 270B8 8004BCB8 00501021 */ addu $v0, $v0, $s0 -/* 270BC 8004BCBC 00021080 */ sll $v0, $v0, 2 -/* 270C0 8004BCC0 00501023 */ subu $v0, $v0, $s0 -/* 270C4 8004BCC4 00021080 */ sll $v0, $v0, 2 -/* 270C8 8004BCC8 00501023 */ subu $v0, $v0, $s0 -/* 270CC 8004BCCC 00021080 */ sll $v0, $v0, 2 -/* 270D0 8004BCD0 2442016C */ addiu $v0, $v0, 0x16c -/* 270D4 8004BCD4 02823821 */ addu $a3, $s4, $v0 -/* 270D8 8004BCD8 8CE20000 */ lw $v0, ($a3) -/* 270DC 8004BCDC 10400057 */ beqz $v0, .L8004BE3C -/* 270E0 8004BCE0 0280202D */ daddu $a0, $s4, $zero -/* 270E4 8004BCE4 90E20098 */ lbu $v0, 0x98($a3) -/* 270E8 8004BCE8 02A2102B */ sltu $v0, $s5, $v0 -/* 270EC 8004BCEC 10400054 */ beqz $v0, .L8004BE40 -/* 270F0 8004BCF0 00E0282D */ daddu $a1, $a3, $zero -/* 270F4 8004BCF4 0801302D */ j .L8004C0B4 -/* 270F8 8004BCF8 00000000 */ nop -.L8004BCFC: -/* 270FC 8004BCFC 08012F58 */ j .L8004BD60 -/* 27100 8004BD00 24080001 */ addiu $t0, $zero, 1 -.L8004BD04: -/* 27104 8004BD04 08012F6A */ j .L8004BDA8 -/* 27108 8004BD08 24080001 */ addiu $t0, $zero, 1 -.L8004BD0C: -/* 2710C 8004BD0C 08012F7D */ j .L8004BDF4 -/* 27110 8004BD10 24080001 */ addiu $t0, $zero, 1 -.L8004BD14: -/* 27114 8004BD14 55000049 */ bnel $t0, $zero, .L8004BE3C -/* 27118 8004BD18 0280202D */ daddu $a0, $s4, $zero -/* 2711C 8004BD1C 30900007 */ andi $s0, $a0, 7 -/* 27120 8004BD20 0600000F */ bltz $s0, .L8004BD60 -/* 27124 8004BD24 00101040 */ sll $v0, $s0, 1 -/* 27128 8004BD28 3125FFFF */ andi $a1, $t1, 0xffff -/* 2712C 8004BD2C 00501021 */ addu $v0, $v0, $s0 -/* 27130 8004BD30 00021080 */ sll $v0, $v0, 2 -/* 27134 8004BD34 00501023 */ subu $v0, $v0, $s0 -/* 27138 8004BD38 00021080 */ sll $v0, $v0, 2 -/* 2713C 8004BD3C 00501023 */ subu $v0, $v0, $s0 -/* 27140 8004BD40 00021080 */ sll $v0, $v0, 2 -/* 27144 8004BD44 2443016C */ addiu $v1, $v0, 0x16c -.L8004BD48: -/* 27148 8004BD48 02833821 */ addu $a3, $s4, $v1 -/* 2714C 8004BD4C 94E20096 */ lhu $v0, 0x96($a3) -/* 27150 8004BD50 1045FFEA */ beq $v0, $a1, .L8004BCFC -/* 27154 8004BD54 2610FFFF */ addiu $s0, $s0, -1 -/* 27158 8004BD58 0601FFFB */ bgez $s0, .L8004BD48 -/* 2715C 8004BD5C 2463FF54 */ addiu $v1, $v1, -0xac -.L8004BD60: -/* 27160 8004BD60 55000036 */ bnel $t0, $zero, .L8004BE3C -/* 27164 8004BD64 0280202D */ daddu $a0, $s4, $zero -/* 27168 8004BD68 30900007 */ andi $s0, $a0, 7 -/* 2716C 8004BD6C 0600000E */ bltz $s0, .L8004BDA8 -/* 27170 8004BD70 00101040 */ sll $v0, $s0, 1 -/* 27174 8004BD74 00501021 */ addu $v0, $v0, $s0 -/* 27178 8004BD78 00021080 */ sll $v0, $v0, 2 -/* 2717C 8004BD7C 00501023 */ subu $v0, $v0, $s0 -/* 27180 8004BD80 00021080 */ sll $v0, $v0, 2 -/* 27184 8004BD84 00501023 */ subu $v0, $v0, $s0 -/* 27188 8004BD88 00021080 */ sll $v0, $v0, 2 -/* 2718C 8004BD8C 2443016C */ addiu $v1, $v0, 0x16c -.L8004BD90: -/* 27190 8004BD90 02833821 */ addu $a3, $s4, $v1 -/* 27194 8004BD94 8CE20000 */ lw $v0, ($a3) -/* 27198 8004BD98 1040FFDA */ beqz $v0, .L8004BD04 -/* 2719C 8004BD9C 2610FFFF */ addiu $s0, $s0, -1 -/* 271A0 8004BDA0 0601FFFB */ bgez $s0, .L8004BD90 -/* 271A4 8004BDA4 2463FF54 */ addiu $v1, $v1, -0xac -.L8004BDA8: -/* 271A8 8004BDA8 55000024 */ bnel $t0, $zero, .L8004BE3C -/* 271AC 8004BDAC 0280202D */ daddu $a0, $s4, $zero -/* 271B0 8004BDB0 30900007 */ andi $s0, $a0, 7 -/* 271B4 8004BDB4 0600000F */ bltz $s0, .L8004BDF4 -/* 271B8 8004BDB8 00101040 */ sll $v0, $s0, 1 -/* 271BC 8004BDBC 00501021 */ addu $v0, $v0, $s0 -/* 271C0 8004BDC0 00021080 */ sll $v0, $v0, 2 -/* 271C4 8004BDC4 00501023 */ subu $v0, $v0, $s0 -/* 271C8 8004BDC8 00021080 */ sll $v0, $v0, 2 -/* 271CC 8004BDCC 00501023 */ subu $v0, $v0, $s0 -/* 271D0 8004BDD0 00021080 */ sll $v0, $v0, 2 -/* 271D4 8004BDD4 2443016C */ addiu $v1, $v0, 0x16c -.L8004BDD8: -/* 271D8 8004BDD8 02833821 */ addu $a3, $s4, $v1 -/* 271DC 8004BDDC 90E20098 */ lbu $v0, 0x98($a3) -/* 271E0 8004BDE0 0055102B */ sltu $v0, $v0, $s5 -/* 271E4 8004BDE4 1440FFC9 */ bnez $v0, .L8004BD0C -/* 271E8 8004BDE8 2610FFFF */ addiu $s0, $s0, -1 -/* 271EC 8004BDEC 0601FFFA */ bgez $s0, .L8004BDD8 -/* 271F0 8004BDF0 2463FF54 */ addiu $v1, $v1, -0xac -.L8004BDF4: -/* 271F4 8004BDF4 55000011 */ bnel $t0, $zero, .L8004BE3C -/* 271F8 8004BDF8 0280202D */ daddu $a0, $s4, $zero -/* 271FC 8004BDFC 30900007 */ andi $s0, $a0, 7 -/* 27200 8004BE00 00101040 */ sll $v0, $s0, 1 -/* 27204 8004BE04 00501021 */ addu $v0, $v0, $s0 -/* 27208 8004BE08 00021080 */ sll $v0, $v0, 2 -/* 2720C 8004BE0C 00501023 */ subu $v0, $v0, $s0 -/* 27210 8004BE10 00021080 */ sll $v0, $v0, 2 -/* 27214 8004BE14 00501023 */ subu $v0, $v0, $s0 -/* 27218 8004BE18 00021080 */ sll $v0, $v0, 2 -/* 2721C 8004BE1C 2442016C */ addiu $v0, $v0, 0x16c -/* 27220 8004BE20 02823821 */ addu $a3, $s4, $v0 -/* 27224 8004BE24 90E20098 */ lbu $v0, 0x98($a3) -/* 27228 8004BE28 02A2102B */ sltu $v0, $s5, $v0 -/* 2722C 8004BE2C 50400001 */ beql $v0, $zero, .L8004BE34 -/* 27230 8004BE30 24080001 */ addiu $t0, $zero, 1 -.L8004BE34: -/* 27234 8004BE34 1100009F */ beqz $t0, .L8004C0B4 -/* 27238 8004BE38 0280202D */ daddu $a0, $s4, $zero -.L8004BE3C: -/* 2723C 8004BE3C 00E0282D */ daddu $a1, $a3, $zero -.L8004BE40: -/* 27240 8004BE40 96420000 */ lhu $v0, ($s2) -/* 27244 8004BE44 8C860008 */ lw $a2, 8($a0) -/* 27248 8004BE48 02E0382D */ daddu $a3, $s7, $zero -/* 2724C 8004BE4C AFB50010 */ sw $s5, 0x10($sp) -/* 27250 8004BE50 AFA00014 */ sw $zero, 0x14($sp) -/* 27254 8004BE54 0C013039 */ jal func_8004C0E4 -/* 27258 8004BE58 00463021 */ addu $a2, $v0, $a2 -/* 2725C 8004BE5C 0801302D */ j .L8004C0B4 -/* 27260 8004BE60 00000000 */ nop -.L8004BE64: -/* 27264 8004BE64 96420000 */ lhu $v0, ($s2) -/* 27268 8004BE68 8E830008 */ lw $v1, 8($s4) -/* 2726C 8004BE6C 00439021 */ addu $s2, $v0, $v1 -/* 27270 8004BE70 30821800 */ andi $v0, $a0, 0x1800 -/* 27274 8004BE74 0002B2C2 */ srl $s6, $v0, 0xb -/* 27278 8004BE78 12C00005 */ beqz $s6, .L8004BE90 -/* 2727C 8004BE7C 0280202D */ daddu $a0, $s4, $zero -/* 27280 8004BE80 0C0130C0 */ jal func_8004C300 -/* 27284 8004BE84 02C0282D */ daddu $a1, $s6, $zero -/* 27288 8004BE88 08012FA8 */ j .L8004BEA0 -/* 2728C 8004BE8C 2603FFFF */ addiu $v1, $s0, -1 -.L8004BE90: -/* 27290 8004BE90 96E50000 */ lhu $a1, ($s7) -/* 27294 8004BE94 0C0130A9 */ jal au_sfx_stop_by_id -/* 27298 8004BE98 0280202D */ daddu $a0, $s4, $zero -/* 2729C 8004BE9C 2603FFFF */ addiu $v1, $s0, -1 -.L8004BEA0: -/* 272A0 8004BEA0 24020002 */ addiu $v0, $zero, 2 -/* 272A4 8004BEA4 1260005D */ beqz $s3, .L8004C01C -/* 272A8 8004BEA8 00628804 */ sllv $s1, $v0, $v1 -/* 272AC 8004BEAC 24100007 */ addiu $s0, $zero, 7 -/* 272B0 8004BEB0 3C1E8008 */ lui $fp, %hi(BlankSEFData) -/* 272B4 8004BEB4 27DE8464 */ addiu $fp, $fp, %lo(BlankSEFData) -/* 272B8 8004BEB8 24130620 */ addiu $s3, $zero, 0x620 -.L8004BEBC: -/* 272BC 8004BEBC 96420000 */ lhu $v0, ($s2) -/* 272C0 8004BEC0 10400010 */ beqz $v0, .L8004BF04 -/* 272C4 8004BEC4 02933821 */ addu $a3, $s4, $s3 -/* 272C8 8004BEC8 8CE20000 */ lw $v0, ($a3) -/* 272CC 8004BECC 545E0011 */ bnel $v0, $fp, .L8004BF14 -/* 272D0 8004BED0 2610FFFF */ addiu $s0, $s0, -1 -/* 272D4 8004BED4 0280202D */ daddu $a0, $s4, $zero -/* 272D8 8004BED8 00E0282D */ daddu $a1, $a3, $zero -/* 272DC 8004BEDC 02E0382D */ daddu $a3, $s7, $zero -/* 272E0 8004BEE0 96420000 */ lhu $v0, ($s2) -/* 272E4 8004BEE4 8E860008 */ lw $a2, 8($s4) -/* 272E8 8004BEE8 2631FFFF */ addiu $s1, $s1, -1 -/* 272EC 8004BEEC AFB50010 */ sw $s5, 0x10($sp) -/* 272F0 8004BEF0 AFB60014 */ sw $s6, 0x14($sp) -/* 272F4 8004BEF4 0C013039 */ jal func_8004C0E4 -/* 272F8 8004BEF8 00463021 */ addu $a2, $v0, $a2 -/* 272FC 8004BEFC 08012FC2 */ j .L8004BF08 -/* 27300 8004BF00 00000000 */ nop -.L8004BF04: -/* 27304 8004BF04 2631FFFF */ addiu $s1, $s1, -1 -.L8004BF08: -/* 27308 8004BF08 1A200004 */ blez $s1, .L8004BF1C -/* 2730C 8004BF0C 2610FFFF */ addiu $s0, $s0, -1 -/* 27310 8004BF10 26520004 */ addiu $s2, $s2, 4 -.L8004BF14: -/* 27314 8004BF14 0601FFE9 */ bgez $s0, .L8004BEBC -/* 27318 8004BF18 2673FF54 */ addiu $s3, $s3, -0xac -.L8004BF1C: -/* 2731C 8004BF1C 12200065 */ beqz $s1, .L8004C0B4 -/* 27320 8004BF20 24100007 */ addiu $s0, $zero, 7 -/* 27324 8004BF24 24130620 */ addiu $s3, $zero, 0x620 -.L8004BF28: -/* 27328 8004BF28 96420000 */ lhu $v0, ($s2) -/* 2732C 8004BF2C 10400013 */ beqz $v0, .L8004BF7C -/* 27330 8004BF30 02933821 */ addu $a3, $s4, $s3 -/* 27334 8004BF34 8CE20000 */ lw $v0, ($a3) -/* 27338 8004BF38 5440000E */ bnel $v0, $zero, .L8004BF74 -/* 2733C 8004BF3C 2673FF54 */ addiu $s3, $s3, -0xac -/* 27340 8004BF40 0280202D */ daddu $a0, $s4, $zero -/* 27344 8004BF44 00E0282D */ daddu $a1, $a3, $zero -/* 27348 8004BF48 02E0382D */ daddu $a3, $s7, $zero -/* 2734C 8004BF4C 96420000 */ lhu $v0, ($s2) -/* 27350 8004BF50 8E860008 */ lw $a2, 8($s4) -/* 27354 8004BF54 2631FFFF */ addiu $s1, $s1, -1 -/* 27358 8004BF58 AFB50010 */ sw $s5, 0x10($sp) -/* 2735C 8004BF5C AFB60014 */ sw $s6, 0x14($sp) -/* 27360 8004BF60 0C013039 */ jal func_8004C0E4 -/* 27364 8004BF64 00463021 */ addu $a2, $v0, $a2 -/* 27368 8004BF68 1A20000A */ blez $s1, .L8004BF94 -/* 2736C 8004BF6C 2673FF54 */ addiu $s3, $s3, -0xac -/* 27370 8004BF70 26520004 */ addiu $s2, $s2, 4 -.L8004BF74: -/* 27374 8004BF74 08012FE3 */ j .L8004BF8C -/* 27378 8004BF78 2610FFFF */ addiu $s0, $s0, -1 -.L8004BF7C: -/* 2737C 8004BF7C 2631FFFF */ addiu $s1, $s1, -1 -/* 27380 8004BF80 1A200004 */ blez $s1, .L8004BF94 -/* 27384 8004BF84 00000000 */ nop -/* 27388 8004BF88 26520004 */ addiu $s2, $s2, 4 -.L8004BF8C: -/* 2738C 8004BF8C 0601FFE6 */ bgez $s0, .L8004BF28 -/* 27390 8004BF90 00000000 */ nop -.L8004BF94: -/* 27394 8004BF94 12200047 */ beqz $s1, .L8004C0B4 -/* 27398 8004BF98 24100007 */ addiu $s0, $zero, 7 -/* 2739C 8004BF9C 24130620 */ addiu $s3, $zero, 0x620 -.L8004BFA0: -/* 273A0 8004BFA0 96420000 */ lhu $v0, ($s2) -/* 273A4 8004BFA4 10400015 */ beqz $v0, .L8004BFFC -/* 273A8 8004BFA8 02933821 */ addu $a3, $s4, $s3 -/* 273AC 8004BFAC 90E20099 */ lbu $v0, 0x99($a3) -/* 273B0 8004BFB0 0056102B */ sltu $v0, $v0, $s6 -/* 273B4 8004BFB4 50400015 */ beql $v0, $zero, .L8004C00C -/* 273B8 8004BFB8 2610FFFF */ addiu $s0, $s0, -1 -/* 273BC 8004BFBC 90E20098 */ lbu $v0, 0x98($a3) -/* 273C0 8004BFC0 02A2102B */ sltu $v0, $s5, $v0 -/* 273C4 8004BFC4 54400011 */ bnel $v0, $zero, .L8004C00C -/* 273C8 8004BFC8 2610FFFF */ addiu $s0, $s0, -1 -/* 273CC 8004BFCC 0280202D */ daddu $a0, $s4, $zero -/* 273D0 8004BFD0 00E0282D */ daddu $a1, $a3, $zero -/* 273D4 8004BFD4 02E0382D */ daddu $a3, $s7, $zero -/* 273D8 8004BFD8 96420000 */ lhu $v0, ($s2) -/* 273DC 8004BFDC 8E860008 */ lw $a2, 8($s4) -/* 273E0 8004BFE0 2631FFFF */ addiu $s1, $s1, -1 -/* 273E4 8004BFE4 AFB50010 */ sw $s5, 0x10($sp) -/* 273E8 8004BFE8 AFB60014 */ sw $s6, 0x14($sp) -/* 273EC 8004BFEC 0C013039 */ jal func_8004C0E4 -/* 273F0 8004BFF0 00463021 */ addu $a2, $v0, $a2 -/* 273F4 8004BFF4 08013000 */ j .L8004C000 -/* 273F8 8004BFF8 00000000 */ nop -.L8004BFFC: -/* 273FC 8004BFFC 2631FFFF */ addiu $s1, $s1, -1 -.L8004C000: -/* 27400 8004C000 1A20002C */ blez $s1, .L8004C0B4 -/* 27404 8004C004 26520004 */ addiu $s2, $s2, 4 -/* 27408 8004C008 2610FFFF */ addiu $s0, $s0, -1 -.L8004C00C: -/* 2740C 8004C00C 0601FFE4 */ bgez $s0, .L8004BFA0 -/* 27410 8004C010 2673FF54 */ addiu $s3, $s3, -0xac -/* 27414 8004C014 0801302D */ j .L8004C0B4 -/* 27418 8004C018 00000000 */ nop -.L8004C01C: -/* 2741C 8004C01C 1A200025 */ blez $s1, .L8004C0B4 -/* 27420 8004C020 0000982D */ daddu $s3, $zero, $zero -.L8004C024: -/* 27424 8004C024 96420000 */ lhu $v0, ($s2) -/* 27428 8004C028 5040001F */ beql $v0, $zero, .L8004C0A8 -/* 2742C 8004C02C 26730001 */ addiu $s3, $s3, 1 -/* 27430 8004C030 96440002 */ lhu $a0, 2($s2) -/* 27434 8004C034 30900007 */ andi $s0, $a0, 7 -/* 27438 8004C038 00101040 */ sll $v0, $s0, 1 -/* 2743C 8004C03C 00501021 */ addu $v0, $v0, $s0 -/* 27440 8004C040 00021080 */ sll $v0, $v0, 2 -/* 27444 8004C044 00501023 */ subu $v0, $v0, $s0 -/* 27448 8004C048 00021080 */ sll $v0, $v0, 2 -/* 2744C 8004C04C 00501023 */ subu $v0, $v0, $s0 -/* 27450 8004C050 00021080 */ sll $v0, $v0, 2 -/* 27454 8004C054 2442016C */ addiu $v0, $v0, 0x16c -/* 27458 8004C058 02823821 */ addu $a3, $s4, $v0 -/* 2745C 8004C05C 30820300 */ andi $v0, $a0, 0x300 -/* 27460 8004C060 8CE30000 */ lw $v1, ($a3) -/* 27464 8004C064 10600005 */ beqz $v1, .L8004C07C -/* 27468 8004C068 0002AA02 */ srl $s5, $v0, 8 -/* 2746C 8004C06C 90E20098 */ lbu $v0, 0x98($a3) -/* 27470 8004C070 02A2102B */ sltu $v0, $s5, $v0 -/* 27474 8004C074 5440000B */ bnel $v0, $zero, .L8004C0A4 -/* 27478 8004C078 26520004 */ addiu $s2, $s2, 4 -.L8004C07C: -/* 2747C 8004C07C 0280202D */ daddu $a0, $s4, $zero -/* 27480 8004C080 00E0282D */ daddu $a1, $a3, $zero -/* 27484 8004C084 96420000 */ lhu $v0, ($s2) -/* 27488 8004C088 8E860008 */ lw $a2, 8($s4) -/* 2748C 8004C08C 02E0382D */ daddu $a3, $s7, $zero -/* 27490 8004C090 AFB50010 */ sw $s5, 0x10($sp) -/* 27494 8004C094 AFB60014 */ sw $s6, 0x14($sp) -/* 27498 8004C098 0C013039 */ jal func_8004C0E4 -/* 2749C 8004C09C 00463021 */ addu $a2, $v0, $a2 -/* 274A0 8004C0A0 26520004 */ addiu $s2, $s2, 4 -.L8004C0A4: -/* 274A4 8004C0A4 26730001 */ addiu $s3, $s3, 1 -.L8004C0A8: -/* 274A8 8004C0A8 0271102A */ slt $v0, $s3, $s1 -/* 274AC 8004C0AC 1440FFDD */ bnez $v0, .L8004C024 -/* 274B0 8004C0B0 00000000 */ nop -.L8004C0B4: -/* 274B4 8004C0B4 8FBF003C */ lw $ra, 0x3c($sp) -/* 274B8 8004C0B8 8FBE0038 */ lw $fp, 0x38($sp) -/* 274BC 8004C0BC 8FB70034 */ lw $s7, 0x34($sp) -/* 274C0 8004C0C0 8FB60030 */ lw $s6, 0x30($sp) -/* 274C4 8004C0C4 8FB5002C */ lw $s5, 0x2c($sp) -/* 274C8 8004C0C8 8FB40028 */ lw $s4, 0x28($sp) -/* 274CC 8004C0CC 8FB30024 */ lw $s3, 0x24($sp) -/* 274D0 8004C0D0 8FB20020 */ lw $s2, 0x20($sp) -/* 274D4 8004C0D4 8FB1001C */ lw $s1, 0x1c($sp) -/* 274D8 8004C0D8 8FB00018 */ lw $s0, 0x18($sp) -/* 274DC 8004C0DC 03E00008 */ jr $ra -/* 274E0 8004C0E0 27BD0040 */ addiu $sp, $sp, 0x40