#include "global.h" #include "asm.h" #include "decompress.h" #include "main.h" #include "menu.h" #include "palette.h" #include "rng.h" #include "sprite.h" #include "string_util.h" #include "text.h" #define MOSAIC_BIT_BG_HSIZE (0) #define MOSAIC_BIT_BG_VSIZE (4) #define MOSAIC_BIT_OBJ_HSIZE (8) #define MOSAIC_BIT_OBJ_VSIZE (12) enum { CONTEST_COOL, CONTEST_BEAUTY, CONTEST_CUTE, CONTEST_SMART, CONTEST_TOUGH, }; enum { CONTESTRESULT_COOL = 9, CONTESTRESULT_BEAUTY = 13, CONTESTRESULT_CUTE = 2, CONTESTRESULT_SMART = 36, CONTESTRESULT_TOUGH = 6, }; struct Unk2015E00 { u16 unk2015e00[128][32]; u16 unk2017e00[0]; }; struct ContestEntry { /*0x00*/ u8 var0; /*0x04*/ u32 var4; /*0x08*/ u16 var8; /*0x0A*/ u8 contestType; /*0x0B*/ u8 pokemon_name[POKEMON_NAME_LENGTH]; /*0x15*/ u8 pad15; /*0x16*/ u8 trainer_name[OT_NAME_LENGTH]; }; struct Unk3000756 { /*0x00*/ u8 var_0; }; struct LabelPair { u8 (*prefix)[]; u8 (*suffix)[]; }; struct Unk03005E20 { u8 var_0; u8 pad1[3]; u16 (*var_4)[][32]; u16 (*var_8)[]; u8 pad0C[4]; u32 var_10; u16 var_14; u16 var_16; u8 var_18; u8 var_19; u8 var_1A; u8 var_1B; u8 var_1C; u8 var_1D; u8 var_1E; u8 var_1F; }; extern u8 unk_2000000[]; extern struct ContestEntry unk_2015de0; extern struct Unk2015E00 unk_2015e00; extern u8 gUnknown_03000750; extern u16 gUnknown_03000752; extern u16 gUnknown_03000754; extern struct Unk3000756 gUnknown_03000756; extern u16 (*gUnknown_03005E10)[][32]; extern struct Unk03005E20 gUnknown_03005E20; extern u8 gUnknown_03005E40[]; extern struct ContestEntry *gUnknown_03005E8C; extern u16 (*gUnknown_03005E90)[]; extern const struct SpriteSheet gMonFrontPicTable[]; extern const struct MonCoords gMonFrontPicCoords[]; extern const struct SpriteSheet gMonBackPicTable[]; extern const struct MonCoords gMonBackPicCoords[]; extern void *gUnknown_081FAF4C[]; extern u16 gPictureFramePalettes[]; extern u8 gPictureFrameTiles_0[]; extern u8 gPictureFrameTiles_1[]; extern u8 gPictureFrameTiles_2[]; extern u8 gPictureFrameTiles_3[]; extern u8 gPictureFrameTiles_4[]; extern u8 gPictureFrameTiles_5[]; extern u8 gPictureFrameTilemap_0[]; extern u8 gPictureFrameTilemap_1[]; extern u8 gPictureFrameTilemap_2[]; extern u8 gPictureFrameTilemap_3[]; extern u8 gPictureFrameTilemap_4[]; extern u8 gPictureFrameTilemap_5[]; extern u8 *gUnknown_083F60AC[]; extern struct LabelPair gUnknown_083F60C0[]; extern struct OamData gOamData_83F6138; extern u16 gUnknown_083F6140[]; extern u8 gContestText_ContestWinner[]; extern u8 gOtherText_Unknown1[]; static void ShowContestPainting(); static void CB2_HoldContestPainting(void); static void HoldContestPainting(void); static void ContestPaintingInitWindow(u8 arg0); static void ContestPaintingPrintCaption(u8 arg0, u8 arg1); static void ContestPaintingInitBG(void); static void ContestPaintingInitVars(u8 arg0); static void VBlankCB_ContestPainting(void); void sub_8106B90(); //should be static static void sub_8107090(u8 arg0, u8 arg1); extern void sub_80FC7A0(struct Unk03005E20*); extern void sub_80FDA18(struct Unk03005E20*); extern void sub_80FD8CC(struct Unk03005E20*); extern void *species_and_otid_get_pal(); __attribute__((naked)) void sub_8106630(u32 arg0) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ ldr r2, _0810665C @ =0x02015de0\n\ subs r4, r2, 0x2\n\ subs r5, r2, 0x1\n\ ldr r3, _08106660 @ =gSaveBlock1\n\ subs r0, 0x1\n\ lsls r1, r0, 5\n\ adds r1, r3\n\ ldr r3, _08106664 @ =0x00002dfc\n\ adds r1, r3\n\ ldm r1!, {r3,r6,r7}\n\ stm r2!, {r3,r6,r7}\n\ ldm r1!, {r3,r6,r7}\n\ stm r2!, {r3,r6,r7}\n\ ldm r1!, {r6,r7}\n\ stm r2!, {r6,r7}\n\ strb r0, [r4]\n\ movs r0, 0\n\ strb r0, [r5]\n\ pop {r4-r7}\n\ pop {r0}\n\ bx r0\n\ .align 2, 0\n\ _0810665C: .4byte 0x02015de0\n\ _08106660: .4byte gSaveBlock1\n\ _08106664: .4byte 0x00002dfc\n\ .syntax divided\n"); } void CB2_ContestPainting(void) { ShowContestPainting(); } static void ShowContestPainting(void) { switch (gMain.state) { case 0: remove_some_task(); SetVBlankCallback(NULL); gUnknown_03005E8C = &unk_2015de0; ContestPaintingInitVars(TRUE); ContestPaintingInitBG(); gMain.state++; break; case 1: { u8 *addr; size_t size; ResetPaletteFade(); addr = (void *)VRAM; size = 0x18000; while (1) { DmaFill32(3, 0, addr, 0x1000); addr += 0x1000; size -= 0x1000; if (size <= 0x1000) { DmaFill32(3, 0, addr, size); break; } } ResetSpriteData(); gMain.state++; break; } case 2: SeedRng(gMain.vblankCounter1); InitKeys(); ContestPaintingInitWindow(unk_2000000[0x15DDF]); gMain.state++; break; case 3: sub_8107090(unk_2000000[0x15DDE], unk_2000000[0x15DDF]); gMain.state++; break; case 4: ContestPaintingPrintCaption(unk_2000000[0x15DDE], unk_2000000[0x15DDF]); LoadPalette(gUnknown_083F6140, 0, 1 * 2); DmaClear32(3, PLTT, 0x400); BeginFastPaletteFade(2); SetVBlankCallback(VBlankCB_ContestPainting); gUnknown_03000750 = 0; REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON; SetMainCallback2(CB2_HoldContestPainting); break; } } static void CB2_HoldContestPainting(void) { HoldContestPainting(); UpdatePaletteFade(); } static void CB2_QuitContestPainting(void) { SetMainCallback2(gMain.savedCallback); } static void HoldContestPainting(void) { switch (gUnknown_03000750) { case 0: if (!gPaletteFade.active) gUnknown_03000750 = 1; if (gUnknown_03000756.var_0 != 0 && gUnknown_03000754 != 0) gUnknown_03000754--; break; case 1: if ((gMain.newKeys & 1) || (gMain.newKeys & 2)) { u8 two = 2; //needed to make the asm match gUnknown_03000750 = two; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); } if (gUnknown_03000756.var_0 != 0) gUnknown_03000754 = 0; break; case 2: if (!gPaletteFade.active) SetMainCallback2(CB2_QuitContestPainting); if (gUnknown_03000756.var_0 != 0 && gUnknown_03000754 <= 0x1D) gUnknown_03000754++; break; } } static void ContestPaintingInitWindow(u8 arg0) { InitMenuWindow(&gWindowConfig_81E7160); SetUpWindowConfig(&gWindowConfig_81E7160); } static void ContestPaintingPrintCaption(u8 contestType, u8 arg1) { u8 xPos, yPos; u8 *ptr; u8 type; if (arg1 == TRUE) return; ptr = gUnknown_03005E40; type = gUnknown_03005E8C->contestType; if (contestType < 8) { ptr = StringCopy(ptr, gUnknown_083F60AC[type]); ptr = StringCopy(ptr, gContestText_ContestWinner); ptr = StringCopy(ptr, gUnknown_03005E8C->trainer_name); // {ENG} ptr[0] = 0xFC; ptr[1] = 0x16; ptr += 2; ptr = StringCopy(ptr, gOtherText_Unknown1); ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name); xPos = 6; yPos = 14; } else { ptr = StringCopy(ptr, *gUnknown_083F60C0[type].prefix); ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name); ptr = StringCopy(ptr, *gUnknown_083F60C0[type].suffix); xPos = 3; yPos = 14; } MenuPrint_PixelCoords(gUnknown_03005E40, xPos * 8 + 1, yPos * 8, 1); } static void ContestPaintingInitBG(void) { REG_DISPCNT = 0; REG_IE |= INTR_FLAG_VBLANK; REG_BG0CNT = 0x0C42; REG_BG1CNT = 0x0A45; REG_BLDCNT = 0; REG_BLDALPHA = 0; REG_BLDY = 0; } static void ContestPaintingInitVars(bool8 arg0) { if (arg0 == FALSE) { gUnknown_03000756.var_0 = FALSE; gUnknown_03000752 = 0; gUnknown_03000754 = 0; } else { gUnknown_03000756.var_0 = TRUE; gUnknown_03000752 = 15; gUnknown_03000754 = 30; } } static void ContestPaintingMosaic(void) { if (gUnknown_03000756.var_0 == FALSE) { REG_MOSAIC = 0; return; } REG_BG1CNT = 0xA45; gUnknown_03000752 = gUnknown_03000754 / 2; REG_MOSAIC = (gUnknown_03000752 << 12) | (gUnknown_03000752 << 8) | (gUnknown_03000752 << 4) | (gUnknown_03000752 << 0); } static void VBlankCB_ContestPainting(void) { ContestPaintingMosaic(); LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } struct MonCoords { u8 x; u8 y; }; #ifdef NONMATCHING static void sub_8106AC4(u16 species, u8 arg1) { void *pal; // Unsure what gUnknown_03005E8C->var0 is supposed to be. pal = species_and_otid_get_pal(species, gUnknown_03005E8C->var4, gUnknown_03005E8C->var0); LZDecompressVram(pal, gUnknown_03005E90); if (arg1 == 1) { HandleLoadSpecialPokePic( &gMonFrontPicTable[species], gMonFrontPicCoords[species].x, gMonFrontPicCoords[species].y, 0x2000000, gUnknown_081FAF4C[1], species, (u32) gUnknown_03005E8C->var0 ); sub_8106B90(gUnknown_081FAF4C[1], gUnknown_03005E90, gUnknown_03005E10); } else { HandleLoadSpecialPokePic( &gMonBackPicTable[species], gMonBackPicCoords[species].x, gMonBackPicCoords[species].y, 0x2000000, gUnknown_081FAF4C[0], species, (u32) gUnknown_03005E8C->var0 ); sub_8106B90(gUnknown_081FAF4C[0], gUnknown_03005E90, gUnknown_03005E10); } } #else __attribute__((naked)) static void sub_8106AC4(u16 arg0, u8 arg2) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ mov r7, r8\n\ push {r7}\n\ sub sp, 0xC\n\ adds r4, r1, 0\n\ lsls r0, 16\n\ lsrs r6, r0, 16\n\ lsls r4, 24\n\ lsrs r4, 24\n\ ldr r7, _08106B28 @ =gUnknown_03005E8C\n\ ldr r0, [r7]\n\ ldr r1, [r0, 0x4]\n\ ldr r2, [r0]\n\ adds r0, r6, 0\n\ bl species_and_otid_get_pal\n\ ldr r1, _08106B2C @ =gUnknown_03005E90\n\ mov r8, r1\n\ ldr r1, [r1]\n\ bl LZDecompressVram\n\ cmp r4, 0\n\ bne _08106B40\n\ lsls r0, r6, 3\n\ ldr r1, _08106B30 @ =gMonFrontPicTable\n\ adds r0, r1\n\ ldr r1, _08106B34 @ =gMonFrontPicCoords\n\ lsls r2, r6, 2\n\ adds r2, r1\n\ ldrb r1, [r2]\n\ ldrb r2, [r2, 0x1]\n\ movs r3, 0x80\n\ lsls r3, 18\n\ ldr r4, _08106B38 @ =gUnknown_081FAF4C\n\ ldr r5, [r4, 0x4]\n\ str r5, [sp]\n\ str r6, [sp, 0x4]\n\ ldr r4, [r7]\n\ ldr r4, [r4]\n\ str r4, [sp, 0x8]\n\ bl HandleLoadSpecialPokePic\n\ mov r2, r8\n\ ldr r1, [r2]\n\ ldr r0, _08106B3C @ =gUnknown_03005E10\n\ ldr r2, [r0]\n\ adds r0, r5, 0\n\ bl sub_8106B90\n\ b _08106B74\n\ .align 2, 0\n\ _08106B28: .4byte gUnknown_03005E8C\n\ _08106B2C: .4byte gUnknown_03005E90\n\ _08106B30: .4byte gMonFrontPicTable\n\ _08106B34: .4byte gMonFrontPicCoords\n\ _08106B38: .4byte gUnknown_081FAF4C\n\ _08106B3C: .4byte gUnknown_03005E10\n\ _08106B40:\n\ lsls r0, r6, 3\n\ ldr r1, _08106B80 @ =gMonBackPicTable\n\ adds r0, r1\n\ ldr r1, _08106B84 @ =gMonBackPicCoords\n\ lsls r2, r6, 2\n\ adds r2, r1\n\ ldrb r1, [r2]\n\ ldrb r2, [r2, 0x1]\n\ movs r3, 0x80\n\ lsls r3, 18\n\ ldr r4, _08106B88 @ =gUnknown_081FAF4C\n\ ldr r5, [r4]\n\ str r5, [sp]\n\ str r6, [sp, 0x4]\n\ ldr r4, [r7]\n\ ldr r4, [r4]\n\ str r4, [sp, 0x8]\n\ bl HandleLoadSpecialPokePic\n\ mov r0, r8\n\ ldr r1, [r0]\n\ ldr r0, _08106B8C @ =gUnknown_03005E10\n\ ldr r2, [r0]\n\ adds r0, r5, 0\n\ bl sub_8106B90\n\ _08106B74:\n\ add sp, 0xC\n\ pop {r3}\n\ mov r8, r3\n\ pop {r4-r7}\n\ pop {r0}\n\ bx r0\n\ .align 2, 0\n\ _08106B80: .4byte gMonBackPicTable\n\ _08106B84: .4byte gMonBackPicCoords\n\ _08106B88: .4byte gUnknown_081FAF4C\n\ _08106B8C: .4byte gUnknown_03005E10\n\ .syntax divided\n"); } #endif #ifdef NONMATCHING void sub_8106B90(u8 a[][8][8][4], u16 b[], u16 c[][8][8][8]) { u16 i; u16 j; u16 k; u16 l; for (i = 0; i < 8; i++) { for (j = 0; j < 8; j++) { for (k = 0; k < 8; k++) { for (l = 0; l < 8; l++) { //u8 *arr = a[i][j][k]; //u8 r1 = arr[l / 2]; u8 r1 = a[i][j][k][l / 2]; if (l & 1) r1 /= 16; else r1 %= 16; //_08106BEA if (r1 == 0) c[i][k][j][l] = 0x8000; else c[i][k][j][l] = b[r1]; } } } } } #else __attribute__((naked)) void sub_8106B90() { asm(".syntax unified\n\ push {r4-r7,lr}\n\ mov r7, r10\n\ mov r6, r9\n\ mov r5, r8\n\ push {r5-r7}\n\ sub sp, 0xC\n\ mov r10, r0\n\ mov r9, r1\n\ str r2, [sp]\n\ movs r0, 0\n\ _08106BA4:\n\ movs r3, 0\n\ adds r1, r0, 0x1\n\ str r1, [sp, 0x4]\n\ lsls r0, 3\n\ str r0, [sp, 0x8]\n\ _08106BAE:\n\ movs r1, 0\n\ adds r2, r3, 0x1\n\ mov r8, r2\n\ ldr r7, [sp, 0x8]\n\ adds r0, r7, r3\n\ lsls r0, 5\n\ mov r12, r0\n\ lsls r4, r3, 3\n\ _08106BBE:\n\ movs r3, 0\n\ lsls r0, r1, 2\n\ adds r6, r1, 0x1\n\ mov r2, r12\n\ adds r5, r2, r0\n\ ldr r7, [sp, 0x8]\n\ adds r0, r7, r1\n\ lsls r0, 7\n\ ldr r1, [sp]\n\ adds r2, r0, r1\n\ _08106BD2:\n\ lsrs r0, r3, 1\n\ adds r0, r5, r0\n\ add r0, r10\n\ ldrb r1, [r0]\n\ movs r0, 0x1\n\ ands r0, r3\n\ cmp r0, 0\n\ beq _08106BE6\n\ lsrs r1, 4\n\ b _08106BEA\n\ _08106BE6:\n\ movs r0, 0xF\n\ ands r1, r0\n\ _08106BEA:\n\ cmp r1, 0\n\ bne _08106BFC\n\ adds r0, r4, r3\n\ lsls r0, 1\n\ adds r0, r2\n\ movs r7, 0x80\n\ lsls r7, 8\n\ adds r1, r7, 0\n\ b _08106C08\n\ _08106BFC:\n\ adds r0, r4, r3\n\ lsls r0, 1\n\ adds r0, r2\n\ lsls r1, 1\n\ add r1, r9\n\ ldrh r1, [r1]\n\ _08106C08:\n\ strh r1, [r0]\n\ adds r0, r3, 0x1\n\ lsls r0, 16\n\ lsrs r3, r0, 16\n\ cmp r3, 0x7\n\ bls _08106BD2\n\ lsls r0, r6, 16\n\ lsrs r1, r0, 16\n\ cmp r1, 0x7\n\ bls _08106BBE\n\ mov r1, r8\n\ lsls r0, r1, 16\n\ lsrs r3, r0, 16\n\ cmp r3, 0x7\n\ bls _08106BAE\n\ ldr r2, [sp, 0x4]\n\ lsls r0, r2, 16\n\ lsrs r0, 16\n\ cmp r0, 0x7\n\ bls _08106BA4\n\ add sp, 0xC\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\ .syntax divided\n"); } #endif static void sub_8106C40(u8 arg0, u8 arg1) { u8 x, y; LoadPalette(gPictureFramePalettes, 0, 128 * 2); if (arg1 == 1) { switch (gUnknown_03005E8C->contestType / 3) { case CONTEST_COOL: RLUnCompVram(gPictureFrameTiles_0, (void *) VRAM); RLUnCompWram(gPictureFrameTilemap_0, gUnknown_03005E10); break; case CONTEST_BEAUTY: RLUnCompVram(gPictureFrameTiles_1, (void *) VRAM); RLUnCompWram(gPictureFrameTilemap_1, gUnknown_03005E10); break; case CONTEST_CUTE: RLUnCompVram(gPictureFrameTiles_2, (void *) VRAM); RLUnCompWram(gPictureFrameTilemap_2, gUnknown_03005E10); break; case CONTEST_SMART: RLUnCompVram(gPictureFrameTiles_3, (void *) VRAM); RLUnCompWram(gPictureFrameTilemap_3, gUnknown_03005E10); break; case CONTEST_TOUGH: RLUnCompVram(gPictureFrameTiles_4, (void *) VRAM); RLUnCompWram(gPictureFrameTilemap_4, gUnknown_03005E10); break; } #define VRAM_PICTURE_DATA(x, y) (((u16 *)(VRAM + 0x6000))[(y) * 32 + (x)]) // Set the background for (y = 0; y < 20; y++) { for (x = 0; x < 32; x++) VRAM_PICTURE_DATA(x, y) = 0x1015; } // Copy the image frame for (y = 0; y < 10; y++) { for (x = 0; x < 18; x++) VRAM_PICTURE_DATA(x + 6, y + 2) = (*gUnknown_03005E10)[y + 2][x + 6]; } // Re-set the entire top row to the first top frame part for (x = 0; x < 16; x++) VRAM_PICTURE_DATA(x + 7, 2) = (*gUnknown_03005E10)[2][7]; #undef VRAM_PICTURE_DATA } else if (arg0 < 8) { RLUnCompVram(gPictureFrameTiles_5, (void *) VRAM); RLUnCompVram(gPictureFrameTilemap_5, (void *) (VRAM + 0x6000)); } else { switch (gUnknown_03005E8C->contestType / 3) { case CONTEST_COOL: RLUnCompVram(gPictureFrameTiles_0, (void *) VRAM); RLUnCompVram(gPictureFrameTilemap_0, (void *) (VRAM + 0x6000)); break; case CONTEST_BEAUTY: RLUnCompVram(gPictureFrameTiles_1, (void *) VRAM); RLUnCompVram(gPictureFrameTilemap_1, (void *) (VRAM + 0x6000)); break; case CONTEST_CUTE: RLUnCompVram(gPictureFrameTiles_2, (void *) VRAM); RLUnCompVram(gPictureFrameTilemap_2, (void *) (VRAM + 0x6000)); break; case CONTEST_SMART: RLUnCompVram(gPictureFrameTiles_3, (void *) VRAM); RLUnCompVram(gPictureFrameTilemap_3, (void *) (VRAM + 0x6000)); break; case CONTEST_TOUGH: RLUnCompVram(gPictureFrameTiles_4, (void *) VRAM); RLUnCompVram(gPictureFrameTilemap_4, (void *) (VRAM + 0x6000)); break; } } } static void sub_8106E98(u8 arg0) { //Some hacks just to get the asm to match #ifndef NONMATCHING asm(""::"r"(arg0)); #endif gMain.oamBuffer[0] = gOamData_83F6138; gMain.oamBuffer[0].tileNum = 0; #ifndef NONMATCHING if (arg0) arg0 = gMain.oamBuffer[0].tileNum; #endif gMain.oamBuffer[0].x = 88; gMain.oamBuffer[0].y = 24; } static u8 sub_8106EE0(u8 arg0) { u8 contestType; if (arg0 < 8) contestType = gUnknown_03005E8C->contestType; else contestType = gUnknown_03005E8C->contestType / 3; switch (contestType) { case CONTEST_COOL: return CONTESTRESULT_COOL; case CONTEST_BEAUTY: return CONTESTRESULT_BEAUTY; case CONTEST_CUTE: return CONTESTRESULT_CUTE; case CONTEST_SMART: return CONTESTRESULT_SMART; case CONTEST_TOUGH: return CONTESTRESULT_TOUGH; } return contestType; } static void sub_8106F4C(void) { gUnknown_03005E90 = &unk_2015e00.unk2017e00; gUnknown_03005E10 = &unk_2015e00.unk2015e00; } static void sub_8106F6C(u8 arg0) { gUnknown_03005E20.var_4 = gUnknown_03005E10; gUnknown_03005E20.var_8 = gUnknown_03005E90; gUnknown_03005E20.var_18 = 0; gUnknown_03005E20.var_1F = gUnknown_03005E8C->var0; gUnknown_03005E20.var_19 = 0; gUnknown_03005E20.var_1A = 0; gUnknown_03005E20.var_1B = 64; gUnknown_03005E20.var_1C = 64; gUnknown_03005E20.var_1D = 64; gUnknown_03005E20.var_1E = 64; switch (arg0) { case CONTESTRESULT_SMART: case CONTESTRESULT_TOUGH: gUnknown_03005E20.var_14 = 3; break; case CONTESTRESULT_COOL: case CONTESTRESULT_BEAUTY: case CONTESTRESULT_CUTE: default: gUnknown_03005E20.var_14 = 1; break; } gUnknown_03005E20.var_16 = 2; gUnknown_03005E20.var_0 = arg0; gUnknown_03005E20.var_10 = 0x6010000; sub_80FC7A0(&gUnknown_03005E20); sub_80FDA18(&gUnknown_03005E20); sub_80FD8CC(&gUnknown_03005E20); LoadPalette(gUnknown_03005E90, 256, 256 * 2); } static void sub_8107090(u8 arg0, u8 arg1) { sub_8106F4C(); sub_8106AC4(gUnknown_03005E8C->var8, 0); sub_8106F6C(sub_8106EE0(arg0)); sub_8106E98(arg0); sub_8106C40(arg0, arg1); }