two audio functions (#918)

* 2 audio functions

* cleaning up

* PR comments
This commit is contained in:
Unnunu 2023-01-22 18:35:15 +03:00 committed by GitHub
parent 858eb4c19e
commit 9c183ae48e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 283 additions and 562 deletions

View File

@ -391,7 +391,7 @@ typedef struct AuSynDriver {
typedef struct SoundSFXEntry { typedef struct SoundSFXEntry {
/* 0x0 */ u16 soundID; /* 0x0 */ u16 soundID;
/* 0x2 */ s16 upperSoundID; /* 0x2 */ u16 upperSoundID;
/* 0x4 */ s16 volume; /* 0x4 */ s16 volume;
/* 0x6 */ s16 pitchShift; /* 0x6 */ s16 pitchShift;
/* 0x8 */ s8 pan; /* 0x8 */ s8 pan;
@ -533,7 +533,7 @@ typedef struct SoundManagerA0 {
typedef struct SoundManager { typedef struct SoundManager {
/* 0x000 */ struct AuGlobals* globals; /* 0x000 */ struct AuGlobals* globals;
/* 0x004 */ struct AlUnkVoice* currentVoice; /* 0x004 */ struct AlUnkVoice* currentVoice;
/* 0x008 */ struct SEFHeader* sefData; /* 0x008 */ u8* sefData;
/* 0x00C */ s32* normalSounds[8]; /* 0x00C */ s32* normalSounds[8];
/* 0x02C */ s32* soundsWithBit2000; /* 0x02C */ s32* soundsWithBit2000;
/* 0x030 */ s32 playCounter; //? /* 0x030 */ s32 playCounter; //?

View File

@ -196,7 +196,48 @@ void func_80052BF8(AlUnkVoice* voice, AlUnkInstrumentData* arg1) {
voice->unk_3F = 0x80; 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) { void func_80052E18(AlUnkVoice* arg0) {
arg0->unk_flags_3D |= AU_VOICE_3D_FLAG_VOL_CHANGED; arg0->unk_flags_3D |= AU_VOICE_3D_FLAG_VOL_CHANGED;

View File

@ -460,7 +460,7 @@ void au_sfx_load_groups_from_SEF(SoundManager* manager) {
s32 sections = ARRAY_COUNT(sefData->sections); s32 sections = ARRAY_COUNT(sefData->sections);
u32 i; u32 i;
manager->sefData = sefData; manager->sefData = (u8*)sefData;
for (i = 0; i < sections; i++) { for (i = 0; i < sections; i++) {
if (sefData->sections[i] != 0) { 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) { static void func_8004C0E4(SoundManager* manager, SoundPlayer* player, s8* readPos, SoundSFXEntry* sfxEntry, s32 arg4, s32 arg5) {
if (manager->unk_C0 == 0) { if (manager->unk_C0 == 0) {

View File

@ -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

View File

@ -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