Files
pmd-red/src/code_8099360.c
T
2025-05-28 15:32:39 +02:00

1132 lines
26 KiB
C

#include "global.h"
#include "bg_palette_buffer.h"
#include "code_8009804.h"
#include "game_options.h"
#include "code_800558C.h"
#include "code_80A26CC.h"
#include "def_filearchives.h"
#include "event_flag.h"
#include "file_system.h"
#include "text_1.h"
#include "text_2.h"
extern u8 gUnknown_20398B8;
extern const u8 gUnknown_811601C[];
extern void sub_8003600(void);
extern s32 sub_800388C(u16, const u8 *, u8);
extern void sub_8099690(u32);
extern void sub_80A4B38(void);
extern void sub_80A4B54(void);
bool8 sub_8099360(u8 *dungeonId) {
s16 script_disc;
DungeonInfo* dungeonInfo;
script_disc = GetScriptVarValue(NULL, DUNGEON_ENTER);
if (script_disc == 0x52) {
script_disc = GetScriptVarValue(NULL, DUNGEON_ENTER_INDEX);
dungeonInfo = (DungeonInfo *)GetDungeonInfo_80A2608(script_disc);
*dungeonId = dungeonInfo->dungeonIndex;
return TRUE;
}
return FALSE;
}
bool8 sub_8099394(u8 *param) {
s16 script_disc;
script_disc = GetScriptVarValue(NULL, DUNGEON_ENTER);
if (script_disc == 0x50) {
script_disc = GetScriptVarValue(NULL, DUNGEON_ENTER_INDEX);
*param = script_disc;
return TRUE;
}
return FALSE;
}
void sub_80993C0(bool8 param) {
gUnknown_20398B8 = (param == FALSE);
}
void sub_80993D8(void) {
sub_80A4B38();
}
void sub_80993E4(void) {
sub_80A4B54();
}
/*
TODO: this is a function that is never called
and is very long. I didn't want to split up the
file or spend time decomping so here it is in
asm();
*/
NAKED
UNUSED static void sub_80993F0(void)
{
asm_unified(" .text\n"
" push {r4-r7,lr}\n"
" mov r7, r10\n"
" mov r6, r9\n"
" mov r5, r8\n"
" push {r5-r7}\n"
" sub sp, 0x28\n"
" movs r0, 0\n"
" mov r10, r0\n"
" bl sub_801180C\n"
" movs r0, 0x10\n"
" bl FadeOutAllMusic\n"
" ldr r1, _0809948C\n"
" ldr r2, _08099490\n"
" adds r0, r2, 0\n"
" strh r0, [r1]\n"
" movs r0, 0\n"
" bl UpdateFadeInTile\n"
" movs r0, 0\n"
" movs r1, 0x14\n"
" bl sub_80095CC\n"
" movs r0, 0\n"
" movs r1, 0x1\n"
" movs r2, 0x1\n"
" bl ShowWindows\n"
" movs r0, 0\n"
" movs r1, 0x14\n"
" bl sub_8009408\n"
" bl sub_8099648\n"
" bl sub_809975C\n"
" bl sub_809D0AC\n"
" bl sub_8014144\n"
" movs r0, 0\n"
" movs r1, 0\n"
" bl sub_8005838\n"
" bl AllocGroundMapAction\n"
" mov r7, sp\n"
" add r0, sp, 0x8\n"
" mov r8, r0\n"
"_08099454:\n"
" bl sub_801D9E4\n"
" lsls r0, 24\n"
" cmp r0, 0\n"
" beq _0809949C\n"
" mov r0, r10\n"
" bl sub_801DA58\n"
"_08099464:\n"
" movs r0, 0\n"
" movs r1, 0\n"
" bl sub_8005838\n"
" movs r0, 0\n"
" bl sub_8012A18\n"
" bl sub_801DA78\n"
" cmp r0, 0x2\n"
" beq _08099494\n"
" cmp r0, 0x3\n"
" bne _08099464\n"
" bl sub_801DAC0\n"
" lsls r0, 16\n"
" asrs r0, 16\n"
" mov r10, r0\n"
" b _080994A2\n"
" .align 2, 0\n"
"_0809948C: .4byte gUnknown_2026E4E\n"
"_08099490: .4byte 0x00000808\n"
"_08099494:\n"
" movs r1, 0x1\n"
" negs r1, r1\n"
" mov r10, r1\n"
" b _080994A2\n"
"_0809949C:\n"
" movs r2, 0x1\n"
" negs r2, r2\n"
" mov r10, r2\n"
"_080994A2:\n"
" bl sub_801DB0C\n"
" movs r0, 0x1\n"
" negs r0, r0\n"
" cmp r10, r0\n"
" bne _080994B0\n"
" b _08099624\n"
"_080994B0:\n"
" movs r0, 0\n"
" movs r1, 0x1\n"
" movs r2, 0x1\n"
" bl ShowWindows\n"
" bl GroundMap_Reset\n"
" bl sub_809D0BC\n"
" mov r0, r10\n"
" bl GroundMap_Select\n"
" mov r0, sp\n"
" mov r1, r8\n"
" bl sub_80A579C\n"
" ldr r0, [r7, 0x4]\n"
" movs r1, 0xC0\n"
" lsls r1, 4\n"
" adds r0, r1\n"
" str r0, [r7, 0x4]\n"
" mov r2, r8\n"
" ldr r0, [r2, 0x4]\n"
" adds r0, r1\n"
" str r0, [r2, 0x4]\n"
" ldr r0, [sp]\n"
" ldr r1, _08099520\n"
" adds r0, r1\n"
" str r0, [sp]\n"
" ldr r0, [r7, 0x4]\n"
" adds r0, r1\n"
" str r0, [r7, 0x4]\n"
" ldr r0, [sp, 0x8]\n"
" movs r2, 0x80\n"
" lsls r2, 3\n"
" adds r0, r2\n"
" str r0, [sp, 0x8]\n"
" mov r0, r8\n"
" ldr r1, [r0, 0x4]\n"
" adds r1, r2\n"
" str r1, [r0, 0x4]\n"
" ldr r2, [sp, 0x8]\n"
" ldr r0, [sp]\n"
" subs r0, r2, r0\n"
" str r0, [sp, 0x20]\n"
" ldr r0, [r7, 0x4]\n"
" subs r0, r1, r0\n"
" str r0, [sp, 0x24]\n"
" movs r4, 0\n"
" movs r5, 0\n"
" movs r0, 0x4\n"
" bl sub_80999E8\n"
" mov r9, r5\n"
" b _08099604\n"
" .align 2, 0\n"
"_08099520: .4byte 0xfffffc00\n"
"_08099524:\n"
" ldr r0, _0809953C\n"
" ldrh r1, [r0, 0x2]\n"
" ldrh r6, [r0]\n"
" movs r0, 0x4\n"
" ands r1, r0\n"
" cmp r1, 0\n"
" beq _08099540\n"
" bl sub_80999FC\n"
" movs r1, 0x1\n"
" mov r9, r1\n"
" b _080995AE\n"
" .align 2, 0\n"
"_0809953C: .4byte gRealInputs\n"
"_08099540:\n"
" adds r0, r6, 0\n"
" bl sub_809CFE8\n"
" lsls r0, 24\n"
" asrs r1, r0, 24\n"
" movs r2, 0x1\n"
" negs r2, r2\n"
" cmp r1, r2\n"
" beq _0809959A\n"
" add r0, sp, 0x10\n"
" movs r2, 0x80\n"
" lsls r2, 1\n"
" bl SetVecFromDirectionSpeed\n"
" ldr r2, [sp, 0x10]\n"
" ldr r3, [sp, 0x14]\n"
" movs r0, 0x2\n"
" ands r6, r0\n"
" cmp r6, 0\n"
" beq _0809956A\n"
" movs r0, 0x4\n"
"_0809956A:\n"
" adds r1, r0, 0\n"
" muls r1, r2\n"
" adds r1, r4\n"
" adds r4, r1, 0\n"
" muls r0, r3\n"
" adds r5, r0\n"
" cmp r1, 0\n"
" bge _0809957E\n"
" movs r4, 0\n"
" b _08099588\n"
"_0809957E:\n"
" ldr r0, [sp, 0x20]\n"
" cmp r4, r0\n"
" blt _08099588\n"
" adds r4, r0, 0\n"
" subs r4, 0x1\n"
"_08099588:\n"
" cmp r5, 0\n"
" bge _08099590\n"
" movs r5, 0\n"
" b _0809959A\n"
"_08099590:\n"
" ldr r1, [sp, 0x24]\n"
" cmp r5, r1\n"
" blt _0809959A\n"
" adds r5, r1, 0\n"
" subs r5, 0x1\n"
"_0809959A:\n"
" ldr r0, [sp]\n"
" adds r0, r4\n"
" str r0, [sp, 0x18]\n"
" ldr r0, [r7, 0x4]\n"
" adds r0, r5\n"
" add r1, sp, 0x18\n"
" str r0, [r1, 0x4]\n"
" movs r0, 0\n"
" bl sub_809D158\n"
"_080995AE:\n"
" bl sub_809D25C\n"
" bl sub_80A59DC\n"
" bl DrawDialogueBoxString\n"
" movs r0, 0\n"
" movs r1, 0\n"
" bl sub_8005838\n"
" bl sub_80060EC\n"
" ldr r0, _08099620\n"
" ldr r0, [r0]\n"
" ldrb r0, [r0, 0xA]\n"
" bl nullsub_8\n"
" bl sub_8005180\n"
" bl sub_8099BE4\n"
" bl sub_8099744\n"
" bl sub_8011860\n"
" bl WaitForNextFrameAndAdvanceRNG\n"
" bl LoadBufferedInputs\n"
" bl nullsub_120\n"
" bl sub_80A5E70\n"
" bl xxx_call_update_bg_vram\n"
" bl CopySpritesToOam\n"
" bl sub_8005304\n"
" bl sub_8099750\n"
" bl sub_8009908\n"
"_08099604:\n"
" bl xxx_call_update_bg_sound_input\n"
" movs r0, 0\n"
" bl ResetSprites\n"
" mov r2, r9\n"
" cmp r2, 0\n"
" beq _08099524\n"
" bl sub_8099B94\n"
" lsls r0, 24\n"
" cmp r0, 0\n"
" bne _080995AE\n"
" b _08099454\n"
" .align 2, 0\n"
"_08099620: .4byte gGameOptionsRef\n"
"_08099624:\n"
" movs r0, 0x10\n"
" bl FadeOutAllMusic\n"
" bl FreeGroundMapAction\n"
" bl sub_8099768\n"
" bl nullsub_103\n"
" add sp, 0x28\n"
" pop {r3-r5}\n"
" mov r8, r3\n"
" mov r9, r4\n"
" mov r10, r5\n"
" pop {r4-r7}\n"
" pop {r0}\n"
" bx r0\n");
}
void sub_809965C(void);
void sub_8099648(void)
{
sub_8003600();
sub_809965C();
}
void nullsub_103(void)
{
}
void sub_809965C(void)
{
OpenedFile *temp;
sub_8099690(0);
// gUnknown_811601C -> "fontsppa" string
temp = OpenFileAndGetFileDataPtr(gUnknown_811601C, &gSystemFileArchive);
sub_800388C(0x1f0, temp->data, 0x10);
CloseFile(temp);
}
extern const u8 gUnknown_8116028[];
void sub_8099690(u32 param_1)
{
OpenedFile *temp;
RGB *pal;
RGB *var2;
u8 gender;
s32 index;
temp = OpenFileAndGetFileDataPtr(gUnknown_8116028, &gSystemFileArchive);
switch(param_1)
{
default:
gender = gGameOptionsRef->playerGender;
pal = &gFontPalette[0x10];
if(gender != 0)
pal += 0x40;
break;
case 1:
pal = &gFontPalette[0x60];
break;
case 2:
pal = &gFontPalette[0x70];
break;
}
sub_800388C(0xF0, (u8 *)pal, 0x10);
var2 = pal;
for(index = 0; index < 0x10; index++)
{
nullsub_5(index + 0xF0, var2++);
}
CloseFile(temp);
}
// TODO: figure out if a new file starts here...
typedef struct unkStruct_3000400
{
// size: 0x4
u8 unk0[0x4];
} unkStruct_3000400;
extern void sub_8003810(u16 idx, unkStruct_3000400 param_2);
extern void sub_80039B8(void);
extern void TransferBGPaletteBuffer(void);
extern void sub_80037C8(u16, u32, unkStruct_3000400);
extern void sub_8003664(u16 param_1, u16 param_2);
extern void sub_80036AC(u16, u32, unkStruct_3000400);
extern void sub_80036F4(u16, u32, unkStruct_3000400);
extern void sub_8003780(u16, u32, unkStruct_3000400);
void sub_809977C(void);
UNUSED static void sub_8099708(u16 a0, unkStruct_3000400 a1)
{
sub_8003810(a0, a1);
}
void sub_809971C(u16 idx, unkStruct_3000400 *strPtrs, s32 n)
{
s32 i;
for (i = 0; i < n; i++) {
sub_8003810(idx++, *strPtrs++);
}
}
void sub_8099744(void)
{
sub_80039B8();
}
void sub_8099750(void)
{
TransferBGPaletteBuffer();
}
void sub_809975C(void)
{
sub_809977C();
}
void sub_8099768(void)
{
sub_809977C();
sub_8099744();
sub_8099750();
}
struct UnkStruct_2039958
{
s32 unk0;
s16 unk4;
s16 unk6;
u16 unk8;
u16 unkA;
u16 unkC;
};
struct UnkStruct_2039978
{
u32 unk0;
unkStruct_3000400 unk4;
struct UnkStruct_2039958 unk8;
};
static EWRAM_DATA struct UnkStruct_2039958 gUnknown_2039958 = {0};
static EWRAM_DATA struct UnkStruct_2039958 gUnknown_2039968 = {0};
static EWRAM_DATA struct UnkStruct_2039978 gUnknown_2039978 = {0};
static EWRAM_DATA u8 gUnknown_2039990 = FALSE;
static EWRAM_DATA s16 gUnknown_2039992 = 0;
UNUSED static EWRAM_DATA s32 sUnused = 0;
#define ARR_COUNT_2039998 33
static EWRAM_DATA u16 gUnknown_2039998[ARR_COUNT_2039998] = {0};
void sub_8099838(struct UnkStruct_2039958 *a0);
void sub_8099848(struct UnkStruct_2039958 *a0);
void sub_8099DD0(u16 a0);
void sub_8099E58(u16 a0);
void sub_8099E80(u16 a0, unkStruct_3000400 a1);
void sub_809977C(void)
{
s32 i;
gUnknown_2039990 = FALSE;
gUnknown_2039992 = 0;
sub_8099838(&gUnknown_2039958);
sub_8099838(&gUnknown_2039968);
sub_8099838(&gUnknown_2039978.unk8);
gUnknown_2039978.unk0 = 0;
gUnknown_2039978.unk8.unkC = 0x100;
gUnknown_2039958.unkC = 0;
sub_8099DD0(0);
gUnknown_2039968.unkC = 0x100;
sub_8099E58(0x100);
for (i = 0; i < ARR_COUNT_2039998; i++) {
gUnknown_2039998[i] = 0;
}
}
void sub_80997F4(u16 a0, u32 a1)
{
gUnknown_2039998[a0] = a1;
sub_8099848(&gUnknown_2039958);
sub_8099848(&gUnknown_2039968);
sub_8099848(&gUnknown_2039978.unk8);
}
UNUSED static u32 sub_8099828(u16 a0)
{
return gUnknown_2039998[a0];
}
void sub_8099838(struct UnkStruct_2039958 *a0)
{
a0->unk0 = 1;
a0->unkC = 0;
a0->unk4 = 0;
a0->unk6 = 0;
}
void sub_8099848(struct UnkStruct_2039958 *a0)
{
if (a0->unk0 == 0) {
a0->unk0 = 1;
}
}
void sub_809985C(struct UnkStruct_2039958 *a0, s32 a1)
{
if (a1 >= 0) {
if (a1 == 0) {
a0->unkC = 0x100;
a0->unk0 = 1;
}
else {
a0->unk0 = 2;
}
}
else {
a1 = 30;
a0->unk0 = 2;
}
a0->unk4 = a1;
a0->unk6 = a1;
}
void sub_8099880(struct UnkStruct_2039958 *a0, s32 a1)
{
if (a1 >= 0) {
if (a1 == 0) {
a0->unkC = a1;
a0->unk0 = 1;
}
else {
a0->unk0 = 3;
}
}
else {
a1 = 30;
a0->unk0 = 3;
}
a0->unk4 = a1;
a0->unk6 = a1;
}
void sub_80998A0(struct UnkStruct_2039958 *a0, s32 a1, u16 a2, u16 a3)
{
if (a1 < 0) a1 = 30;
if (a2 > a3) {
a0->unk0 = 5;
a0->unkA = a2 - a3;
}
else if (a2 < a3) {
a0->unk0 = 4;
a0->unkA = a3 - a2;
}
else {
a0->unk0 = 1;
a0->unkA = 0;
}
a0->unk4 = a1;
a0->unk6 = a1;
a0->unkC = a2;
a0->unk8 = a3;
}
bool8 sub_80998E0(struct UnkStruct_2039958 *a0)
{
switch (a0->unk0) {
case 0:
break;
case 1:
a0->unk0 = 0;
return TRUE;
case 2:
if (--a0->unk4 > 0) {
u16 var = 0x100 - ((a0->unk4 << 8) / a0->unk6);
if (a0->unkC < var) {
a0->unkC = var;
}
}
else {
a0->unkC = 0x100;
a0->unk0 = 0;
}
return TRUE;
case 3:
if (--a0->unk4 > 0) {
u16 var = (a0->unk4 << 8) / a0->unk6;
if (a0->unkC > var) {
a0->unkC = var;
}
}
else {
a0->unkC = 0;
a0->unk0 = 0;
}
return TRUE;
case 4:
if (--a0->unk4 > 0) {
a0->unkC = a0->unk8 - ((a0->unk4 * a0->unkA) / a0->unk6);
}
else {
a0->unkC = a0->unk8;
a0->unk0 = 0;
}
return TRUE;
case 5:
if (--a0->unk4 > 0) {
a0->unkC = a0->unk8 + ((a0->unk4 * a0->unkA) / a0->unk6);
}
else {
a0->unkC = a0->unk8;
a0->unk0 = 0;
}
return TRUE;
}
return FALSE;
}
void sub_80999D4(s32 a0)
{
gUnknown_2039990 = TRUE;
gUnknown_2039992 = a0;
}
void sub_80999E8(s32 a0)
{
sub_809985C(&gUnknown_2039958, a0);
}
void sub_80999FC(s32 a0)
{
sub_8099880(&gUnknown_2039958, a0);
}
void sub_8099A10(s32 a1, u16 a2, u16 a3)
{
sub_80998A0(&gUnknown_2039958, a1, a2, a3);
}
void sub_8099A34(s32 a0)
{
sub_809985C(&gUnknown_2039968, a0);
}
void sub_8099A48(s32 a0)
{
sub_8099880(&gUnknown_2039968, a0);
}
void sub_8099A5C(s32 a0, s32 a1, unkStruct_3000400 a2)
{
gUnknown_2039978.unk0 = a0;
gUnknown_2039978.unk4 = a2;
gUnknown_2039978.unk8.unkC = 0;
sub_809985C(&gUnknown_2039978.unk8, a1);
switch (a0) {
case 1:
case 3:
gUnknown_2039968.unkC = 0x100;
gUnknown_2039958.unkC = 0x100;
break;
case 9:
case 11:
gUnknown_2039968.unkC = 0x100;
break;
case 5:
case 7:
case 13:
case 14:
gUnknown_2039958.unkC = 0x100;
break;
}
}
void sub_8099AFC(s32 a0, s32 a1, unkStruct_3000400 a2)
{
gUnknown_2039978.unk0 = a0;
gUnknown_2039978.unk4 = a2;
gUnknown_2039978.unk8.unkC = 0x100;
sub_8099880(&gUnknown_2039978.unk8, a1);
switch (a0) {
case 2:
case 4:
gUnknown_2039968.unkC = 0;
gUnknown_2039958.unkC = 0;
break;
case 10:
case 12:
gUnknown_2039968.unkC = 0;
break;
case 6:
case 8:
case 13:
case 14:
gUnknown_2039958.unkC = 0;
break;
}
}
bool8 sub_8099B94(void)
{
if (gUnknown_2039990)
return TRUE;
if (gUnknown_2039978.unk0 != 0) {
return (gUnknown_2039978.unk8.unk0 != 0);
}
return (gUnknown_2039958.unk0 != 0 || gUnknown_2039968.unk0 != 0);
}
void sub_8099BE4(void)
{
if (gUnknown_2039978.unk0 != 0 || gUnknown_2039978.unk8.unk0 != 0) {
if (sub_80998E0(&gUnknown_2039978.unk8)) {
sub_8099E80(gUnknown_2039978.unk8.unkC, gUnknown_2039978.unk4);
}
else if (gUnknown_2039978.unk8.unk0 == 0) {
switch (gUnknown_2039978.unk0) {
case 0:
break;
case 1:
case 3:
case 5:
case 7:
case 9:
case 11:
if (gUnknown_2039978.unk8.unkC >= 256) {
gUnknown_2039978.unk0 = 0;
}
else if (gUnknown_2039990) {
s32 var = 0;
switch (gUnknown_2039978.unk0) {
case 1: var = 2; break;
case 3: var = 4; break;
case 5: var = 6; break;
case 7: var = 8; break;
}
if (var != 0) {
sub_8099AFC(var, gUnknown_2039992, gUnknown_2039978.unk4);
}
else {
gUnknown_2039978.unk0 = 0;
}
}
break;
case 2:
case 4:
case 6:
case 8:
case 10:
case 12:
case 13:
case 14:
if (gUnknown_2039978.unk8.unkC == 0) {
gUnknown_2039978.unk0 = 0;
}
else if (gUnknown_2039990) {
sub_8099AFC(gUnknown_2039978.unk0, gUnknown_2039992, gUnknown_2039978.unk4);
}
break;
}
}
}
else if (gUnknown_2039990) {
bool8 r5 = TRUE;
if (gUnknown_2039958.unkC != 0 || gUnknown_2039958.unk0 != 0) {
r5 = FALSE;
if (gUnknown_2039958.unk0 != 3) {
sub_8099880(&gUnknown_2039958, gUnknown_2039992);
}
if (sub_80998E0(&gUnknown_2039958)) {
sub_8099DD0(gUnknown_2039958.unkC);
}
}
if (gUnknown_2039968.unkC != 0 || gUnknown_2039968.unk0 != 0) {
r5 = FALSE;
if (gUnknown_2039968.unk0 != 3) {
sub_8099880(&gUnknown_2039968, gUnknown_2039992);
}
if (sub_80998E0(&gUnknown_2039968)) {
sub_8099E58(gUnknown_2039968.unkC);
}
}
if (r5) {
gUnknown_2039990 = FALSE;
}
}
else {
if (sub_80998E0(&gUnknown_2039958)) {
sub_8099DD0(gUnknown_2039958.unkC);
}
if (sub_80998E0(&gUnknown_2039968)) {
sub_8099E58(gUnknown_2039968.unkC);
}
}
}
void sub_8099DD0(u16 a0)
{
s32 i;
for (i = 0; i < 14; i++) {
if (gUnknown_2039998[i] & 1) {
sub_8003664(i, 0x100);
}
else {
sub_8003664(i, a0);
}
}
for (i = 16; i < 31; i++) {
if (gUnknown_2039998[i] & 1) {
sub_8003664(i, 0x100);
}
else {
sub_8003664(i, a0);
}
}
sub_8003664(32, a0);
}
void sub_8099E58(u16 a0)
{
sub_8003664(15, a0);
sub_8003664(14, a0);
sub_8003664(31, a0);
}
void sub_8099E80(u16 param_1,unkStruct_3000400 param_2)
{
s32 i;
switch (gUnknown_2039978.unk0) {
case 0:
break;
case 1:
for (i = 0; i < 16; i++) {
if (gUnknown_2039998[i] & 2) {
sub_8003664(i,0x100);
}
else {
sub_80036AC(i,param_1,param_2);
}
}
for (i = 16; i < 32; i++) {
if (gUnknown_2039998[i] & 2) {
sub_8003664(i,0x100);
}
else {
sub_80036AC(i,param_1,param_2);
}
}
break;
case 9:
for (i = 14; i < 16; i++) {
if (gUnknown_2039998[i] & 2) {
sub_8003664(i,0x100);
}
else {
sub_80036AC(i,param_1,param_2);
}
}
for (i = 31; i < 32; i++) {
if (gUnknown_2039998[i] & 2) {
sub_8003664(i,0x100);
}
else {
sub_80036AC(i,param_1,param_2);
}
}
break;
case 5:
for (i = 0; i < 14; i++) {
if (gUnknown_2039998[i] & 2) {
sub_8003664(i,0x100);
}
else {
sub_80036AC(i,param_1,param_2);
}
}
for (i = 16; i < 31; i++) {
if (gUnknown_2039998[i] & 2) {
sub_8003664(i,0x100);
}
else {
sub_80036AC(i,param_1,param_2);
}
}
break;
case 2:
for (i = 0; i < 16; i++) {
if (gUnknown_2039998[i] & 2) {
sub_8003664(i,0x100);
}
else {
sub_80036F4(i,param_1,param_2);
}
}
for (i = 16; i < 32; i++) {
if (gUnknown_2039998[i] & 2) {
sub_8003664(i,0x100);
}
else {
sub_80036F4(i,param_1,param_2);
}
}
break;
case 10:
for (i = 14; i < 16; i++) {
if (gUnknown_2039998[i] & 2) {
sub_8003664(i,0x100);
}
else {
sub_80036F4(i,param_1,param_2);
}
}
for (i = 31; i < 32; i++) {
if (gUnknown_2039998[i] & 2) {
sub_8003664(i,0x100);
}
else {
sub_80036F4(i,param_1,param_2);
}
}
break;
case 6:
for (i = 0; i < 14; i++) {
if (gUnknown_2039998[i] & 2) {
sub_8003664(i,0x100);
}
else {
sub_80036F4(i,param_1,param_2);
}
}
for (i = 16; i < 31; i++) {
if (gUnknown_2039998[i] & 2) {
sub_8003664(i,0x100);
}
else {
sub_80036F4(i,param_1,param_2);
}
}
break;
case 3:
for (i = 0; i < 16; i++) {
if (gUnknown_2039998[i] & 2) {
sub_8003664(i,0x100);
}
else {
sub_8003780(i,param_1,param_2);
}
}
for (i = 16; i < 32; i++) {
if (gUnknown_2039998[i] & 2) {
sub_8003664(i,0x100);
}
else {
sub_8003780(i,param_1,param_2);
}
}
break;
case 11:
for (i = 14; i < 16; i++) {
if (gUnknown_2039998[i] & 2) {
sub_8003664(i,0x100);
}
else {
sub_8003780(i,param_1,param_2);
}
}
for (i = 31; i < 32; i++) {
if (gUnknown_2039998[i] & 2) {
sub_8003664(i,0x100);
}
else {
sub_8003780(i,param_1,param_2);
}
}
break;
case 7:
for (i = 0; i < 14; i++) {
if (gUnknown_2039998[i] & 2) {
sub_8003664(i,0x100);
}
else {
sub_8003780(i,param_1,param_2);
}
}
for (i = 16; i < 31; i++) {
if (gUnknown_2039998[i] & 2) {
sub_8003664(i,0x100);
}
else {
sub_8003780(i,param_1,param_2);
}
}
break;
case 4:
for (i = 0; i < 16; i ++) {
if (gUnknown_2039998[i] & 1) {
sub_8003664(i,0x100);
}
else if (gUnknown_2039998[i] & 2) {
sub_8003664(i,param_1);
}
else {
sub_80037C8(i,param_1,param_2);
}
}
for (i = 16; i < 32; i ++) {
if (gUnknown_2039998[i] & 1) {
sub_8003664(i,0x100);
}
else if (gUnknown_2039998[i] & 2) {
sub_8003664(i,param_1);
}
else {
sub_80037C8(i,param_1,param_2);
}
}
break;
case 12:
for (i = 14; i < 16; i ++) {
if (gUnknown_2039998[i] & 1) {
sub_8003664(i,0x100);
}
else if (gUnknown_2039998[i] & 2) {
sub_8003664(i,param_1);
}
else {
sub_80037C8(i,param_1,param_2);
}
}
for (i = 31; i < 32; i ++) {
if (gUnknown_2039998[i] & 1) {
sub_8003664(i,0x100);
}
else if (gUnknown_2039998[i] & 2) {
sub_8003664(i,param_1);
}
else {
sub_80037C8(i,param_1,param_2);
}
}
break;
case 13:
case 14:
switch (gUnknown_2039978.unk0) {
case 13:
param_2.unk0[0] = 0x90;
param_2.unk0[1] = 0x90;
param_2.unk0[2] = 0xFF;
param_2.unk0[3] = 0xFF;
break;
case 14:
param_2.unk0[0] = 0xFF;
param_2.unk0[1] = 0xC0;
param_2.unk0[2] = 0x80;
param_2.unk0[3] = 0xFF;
break;
}
// NOTE: fallthrough needed here
case 8:
for (i = 0; i < 14; i ++) {
if (gUnknown_2039998[i] & 1) {
sub_8003664(i,0x100);
}
else if (gUnknown_2039998[i] & 2) {
sub_8003664(i,param_1);
}
else {
sub_80037C8(i,param_1,param_2);
}
}
for (i = 16; i < 31; i ++) {
if (gUnknown_2039998[i] & 1) {
sub_8003664(i,0x100);
}
else if (gUnknown_2039998[i] & 2) {
sub_8003664(i,param_1);
}
else {
sub_80037C8(i,param_1,param_2);
}
}
break;
}
}