diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/pokemon_storage_system.c | 382 |
1 files changed, 324 insertions, 58 deletions
diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index bce9d1801..9e0944257 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -1,11 +1,13 @@ #include "global.h" #include "alloc.h" #include "bg.h" +#include "decompress.h" #include "dma3.h" #include "event_data.h" #include "field_screen.h" #include "field_weather.h" #include "gpu_regs.h" +#include "graphics.h" #include "international_string_util.h" #include "item.h" #include "item_menu.h" @@ -83,6 +85,18 @@ enum SCREEN_CHANGE_ITEM_FROM_BAG, }; +#define TAG_PAL_WAVEFORM 0xDACA +#define TAG_PAL_DAC8 0xDAC8 +#define TAG_PAL_DAC6 0xDAC6 +#define TAG_PAL_DACE 0xDACE +#define TAG_PAL_DAC7 0xDAC7 + +#define TAG_TILE_WAVEFORM 0x5 +#define TAG_TILE_10 0x10 +#define TAG_TILE_2 0x2 +#define TAG_TILE_D 0xD +#define TAG_TILE_A 0xA + IWRAM_DATA u8 gUnknown_03000F78[0x188]; extern const u8 gText_PartyFull[]; @@ -117,22 +131,22 @@ void sub_80C7958(u8 curBox); void ResetWaldaWallpaper(void); void sub_80C7B14(void); void sub_80C7BB4(void); -void sub_80CA028(void); +void ScrollBackground(void); void sub_80C7B80(void); void sub_80D2AA4(void); void sub_80C7BE4(void); void sub_80CAA14(void); void sub_80CE790(void); void sub_80CE8E4(void); -void sub_80C9F6C(void); +void GiveChosenBagItem(void); void sub_80CA888(void); -void sub_80CA044(void); -void sub_80CA0C8(void); +void LoadPSSMenuGfx(void); +void LoadWaveformSpritePalette(void); void sub_80CDC18(void); void sub_80CD36C(void); void sub_80CD3EC(void); void sub_80CAC1C(void); -void sub_80C9FEC(void); +void SetScrollingBackground(void); void sub_80CABE0(void); void sub_80CAEAC(void); void sub_80D0C60(void); @@ -143,8 +157,13 @@ void sub_80CA0D8(void); void sub_80CFFD0(void); void sub_80CE250(void); void sub_80CE3A0(void); +void sub_80D01B8(void); void sub_80CE2D8(void); +void sub_80D25F0(void); void sub_80CA230(void); +void sub_80CA318(void); +void sub_80CA154(void); +void sub_80CA1C4(void); void sub_80CC064(void); void sub_80CE324(void); void ClearBottomWindow(void); @@ -167,7 +186,7 @@ void sub_80CB950(void); void sub_80CA9C0(void); void BoxSetMosaic(void); void sub_80C7CF4(struct Sprite *sprite); -bool8 sub_80CA0A4(void); +bool8 InitPSSWindows(void); bool8 sub_80CC0A0(void); bool8 sub_80CE2A8(void); bool8 sub_80D0164(void); @@ -192,10 +211,10 @@ bool8 CanShifMon(void); bool8 IsCursorOnCloseBox(void); bool8 IsMonBeingMoved(void); bool8 sub_80CE19C(u8 arg0); -void sub_80C7FA8(u8 taskId); +void Cb_InitPSS(u8 taskId); void Cb_PlaceMon(u8 taskId); void Cb_ChangeScreen(u8 taskId); -void sub_80C81AC(u8 taskId); +void Cb_ShowPSS(u8 taskId); void Cb_OnBPressed(u8 taskId); void Cb_HandleBoxOptions(u8 taskId); void Cb_OnSelectedMon(u8 taskId); @@ -217,7 +236,7 @@ void Cb_ShowMarkMenu(u8 taskId); void Cb_ShowMonSummary(u8 taskId); void Cb_ReleaseMon(u8 taskId); void task_pokemon_box_related(u8 taskId); -void sub_80C972C_2(u8 taskId); +void Cb_ReshowPSSAfterChoosingBagItem(u8 taskId); void Cb_MainPSS(u8 taskId); void Cb_JumpBox(u8 taskId); void Cb_HandleWallpapers(u8 taskId); @@ -249,6 +268,7 @@ struct Sprite *sub_80CD2E8(u16 x, u16 y, u8 animId, u8 priority, u8 subpriority) void SetWallpaperForCurrentBox(u8 wallpaperId); void sub_80CAE0C(u8 arg0); u16 GetMovingItem(void); +void SetCurrentBoxMonData(s32 monId, s32 request, const void *value); // const rom data const struct PSS_MenuStringPtrs gUnknown_085716C0[] = @@ -271,25 +291,25 @@ const struct WindowTemplate gUnknown_085716E8 = .baseBlock = 0x1, }; -static const union AnimCmd sSpriteAnim_85716F0[] = +const union AnimCmd sSpriteAnim_85716F0[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_85716F8[] = +const union AnimCmd sSpriteAnim_85716F8[] = { ANIMCMD_FRAME(4, 5), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_8571700[] = +const union AnimCmd sSpriteAnim_8571700[] = { ANIMCMD_FRAME(6, 5), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_8571708[] = +const union AnimCmd sSpriteAnim_8571708[] = { ANIMCMD_FRAME(10, 5), ANIMCMD_END @@ -303,13 +323,13 @@ const union AnimCmd *const sSpriteAnimTable_8571710[] = sSpriteAnim_8571708 }; -static const union AffineAnimCmd sSpriteAffineAnim_8571720[] = +const union AffineAnimCmd sSpriteAffineAnim_8571720[] = { AFFINEANIMCMD_FRAME(0xE0, 0xE0, 0, 0), AFFINEANIMCMD_END }; -static const union AffineAnimCmd *const sSpriteAffineAnimTable_8571730[] = +const union AffineAnimCmd *const sSpriteAffineAnimTable_8571730[] = { sSpriteAffineAnim_8571720 }; @@ -320,8 +340,8 @@ const u8 gUnknown_08571737[] = _("/30"); const u16 gBoxSelectionPopupPalette[] = INCBIN_U16("graphics/unknown/unknown_57173C.gbapal"); const u8 gBoxSelectionPopupCenterTiles[] = INCBIN_U8("graphics/pokemon_storage/box_selection_popup_center.4bpp"); const u8 gBoxSelectionPopupSidesTiles[] = INCBIN_U8("graphics/pokemon_storage/box_selection_popup_sides.4bpp"); -const u32 gUnknown_085720DC[] = INCBIN_U32("graphics/pokemon_storage/scrolling_bg.4bpp.lz"); -const u32 gUnknown_08572174[] = INCBIN_U32("graphics/pokemon_storage/scrolling_bg.bin.lz"); +const u32 gPokemonStorageScrollingBGTileset[] = INCBIN_U32("graphics/pokemon_storage/scrolling_bg.4bpp.lz"); +const u32 gPokemonStorageScrollingBGTilemap[] = INCBIN_U32("graphics/pokemon_storage/scrolling_bg.bin.lz"); const u32 gUnknown_08572280[] = INCBIN_U32("graphics/unknown/unknown_572280.gbapal"); const u32 gUnknown_085722A0[] = INCBIN_U32("graphics/unknown/unknown_5722A0.bin.lz"); @@ -331,7 +351,7 @@ const u16 gUnknown_0857239C[] = 0x2101, 0x2102, 0x2103, 0x2104, 0x2105, 0x2106, 0x2107, 0x2108, 0x2111, 0x2112, 0x2113, 0x2114, 0x2115, 0x2116, 0x2117, 0x2118, }; -const u16 gUnknown_085723DC[] = INCBIN_U16("graphics/unknown/unknown_5723DC.gbapal"); +const u16 gUnknown_085723DC[] = INCBIN_U16("graphics/unknown/unknown_5723DC.gbapal"); // Left-most part and Close Box. const u16 gUnknown_085723FC[] = INCBIN_U16("graphics/unknown/unknown_5723FC.gbapal"); const u16 gUnknown_0857241C[] = INCBIN_U16("graphics/unknown/unknown_57241C.gbapal"); const u16 gUnknown_0857243C[] = INCBIN_U16("graphics/unknown/unknown_57243C.gbapal"); @@ -430,20 +450,20 @@ const struct BgTemplate gUnknown_08572734[] = const struct SpritePalette gWaveformSpritePalette = { - gWaveformPalette, 0xDACA + gWaveformPalette, TAG_PAL_WAVEFORM }; const struct SpriteSheet gWaveformSpriteSheet = { - gWaveformTiles, sizeof(gWaveformTiles), 5 + gWaveformTiles, sizeof(gWaveformTiles), TAG_TILE_WAVEFORM }; -const struct OamData gOamData_857286C; +const struct OamData sOamData_857286C; const struct SpriteTemplate gUnknown_08572754 = { - .tileTag = 2, - .paletteTag = 0xDAC6, - .oam = &gOamData_857286C, + .tileTag = TAG_TILE_2, + .paletteTag = TAG_PAL_DAC6, + .oam = &sOamData_857286C, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -485,6 +505,146 @@ const struct StorageAction gPCStorageActionTexts[] = [PC_TEXT_CANT_STORE_MAIL] = {gText_MailCantBeStored, 0}, }; +const struct WindowTemplate gUnknown_08572864 = +{ + .bg = 0, + .tilemapLeft = 24, + .tilemapTop = 11, + .width = 5, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x5C, +}; + +const struct OamData sOamData_857286C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +const struct OamData sOamData_8572874 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +const union AnimCmd sSpriteAnim_857287C[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd sSpriteAnim_8572884[] = +{ + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(6, 8), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd sSpriteAnim_8572894[] = +{ + ANIMCMD_FRAME(8, 5), + ANIMCMD_END +}; + +const union AnimCmd sSpriteAnim_857289C[] = +{ + ANIMCMD_FRAME(10, 8), + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(12, 8), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd *const sSpriteAnimTable_85728AC[] = +{ + sSpriteAnim_857287C, + sSpriteAnim_8572884, + sSpriteAnim_8572894, + sSpriteAnim_857289C +}; + +const struct SpriteTemplate gUnknown_085728BC = +{ + .tileTag = 5, + .paletteTag = 0xDACA, + .oam = &sOamData_8572874, + .anims = sSpriteAnimTable_85728AC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const struct OamData sOamData_85728EC; +const struct SpriteTemplate gUnknown_085728D4 = +{ + .tileTag = 18, + .paletteTag = 0xDAC0, + .oam = &sOamData_85728EC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const struct OamData sOamData_85728EC = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +const union AffineAnimCmd gSpriteAffineAnim_85728F4[] = +{ + AFFINEANIMCMD_FRAME(-2, -2, 0, 120), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd gSpriteAffineAnim_8572904[] = +{ + AFFINEANIMCMD_FRAME(16, 16, 0, 0), + AFFINEANIMCMD_FRAME(16, 16, 0, 15), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_857291C[] = +{ + gSpriteAffineAnim_85728F4, + gSpriteAffineAnim_8572904 +}; + // code u8 CountMonsInBox(u8 boxId) { @@ -566,7 +726,7 @@ u8 CountPartyMons(void) return count; } -static u8 *StringCopyAndFillWithSpaces(u8 *dst, const u8 *src, u16 n) +u8 *StringCopyAndFillWithSpaces(u8 *dst, const u8 *src, u16 n) { u8 *str; @@ -577,7 +737,7 @@ static u8 *StringCopyAndFillWithSpaces(u8 *dst, const u8 *src, u16 n) return str; } -static void sub_80C7128(u16 *dest, u16 dest_left, u16 dest_top, const u16 *src, u16 src_left, u16 src_top, u16 dest_width, u16 dest_height, u16 src_width) +void sub_80C7128(u16 *dest, u16 dest_left, u16 dest_top, const u16 *src, u16 src_left, u16 src_top, u16 dest_width, u16 dest_height, u16 src_width) { u16 i; @@ -1030,7 +1190,7 @@ void sub_80C7CF4(struct Sprite *sprite) } } -void sub_80C7D28(void) +void VblankCb_PSS(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -1039,11 +1199,11 @@ void sub_80C7D28(void) SetGpuReg(REG_OFFSET_BG2HOFS, gUnknown_02039D08->bg2_X); } -void c2_Box(void) +void Cb2_PSS(void) { RunTasks(); do_scheduled_bg_tilemap_copies_to_vram(); - sub_80CA028(); + ScrollBackground(); sub_80CAA14(); AnimateSprites(); BuildOamBuffer(); @@ -1053,7 +1213,7 @@ void Cb2_EnterPSS(u8 boxOption) { ResetTasks(); sBoxOption = boxOption; - gUnknown_02039D08 = Alloc(0x62C4); + gUnknown_02039D08 = Alloc(sizeof(*gUnknown_02039D08)); if (gUnknown_02039D08 == NULL) { SetMainCallback2(Cb2_ExitPSS); @@ -1061,19 +1221,19 @@ void Cb2_EnterPSS(u8 boxOption) else { gUnknown_02039D08->boxOption = boxOption; - gUnknown_02039D08->unk_0003 = 0; + gUnknown_02039D08->isReshowingPSS = FALSE; gUnknown_02039D12 = 0; gUnknown_02039D08->state = 0; - gUnknown_02039D08->taskId = CreateTask(sub_80C7FA8, 3); + gUnknown_02039D08->taskId = CreateTask(Cb_InitPSS, 3); gUnknown_02039D10 = StorageGetCurrentBox(); - SetMainCallback2(c2_Box); + SetMainCallback2(Cb2_PSS); } } void Cb2_ReturnToPSS(void) { ResetTasks(); - gUnknown_02039D08 = Alloc(0x62C4); + gUnknown_02039D08 = Alloc(sizeof(*gUnknown_02039D08)); if (gUnknown_02039D08 == NULL) { SetMainCallback2(Cb2_ExitPSS); @@ -1081,14 +1241,14 @@ void Cb2_ReturnToPSS(void) else { gUnknown_02039D08->boxOption = sBoxOption; - gUnknown_02039D08->unk_0003 = 1; + gUnknown_02039D08->isReshowingPSS = TRUE; gUnknown_02039D08->state = 0; - gUnknown_02039D08->taskId = CreateTask(sub_80C7FA8, 3); - SetMainCallback2(c2_Box); + gUnknown_02039D08->taskId = CreateTask(Cb_InitPSS, 3); + SetMainCallback2(Cb2_PSS); } } -void sub_80C7E50(void) +void ResetAllBgCoords(void) { SetGpuReg(REG_OFFSET_BG0HOFS, 0); SetGpuReg(REG_OFFSET_BG0VOFS, 0); @@ -1140,7 +1300,7 @@ void SetPSSCallback(TaskFunc newFunc) gUnknown_02039D08->state = 0; } -void sub_80C7FA8(u8 taskId) +void Cb_InitPSS(u8 taskId) { switch (gUnknown_02039D08->state) { @@ -1148,7 +1308,7 @@ void sub_80C7FA8(u8 taskId) SetVBlankCallback(NULL); SetGpuReg(REG_OFFSET_DISPCNT, 0); sub_80C7E98(); - if (gUnknown_02039D08->unk_0003 != 0) + if (gUnknown_02039D08->isReshowingPSS) { switch (gUnknown_02039D0F) { @@ -1159,15 +1319,15 @@ void sub_80C7FA8(u8 taskId) sub_80CE8E4(); break; case 2: - sub_80C9F6C(); + GiveChosenBagItem(); break; } } - sub_80CA044(); - sub_80CA0C8(); + LoadPSSMenuGfx(); + LoadWaveformSpritePalette(); break; case 1: - if (!sub_80CA0A4()) + if (!InitPSSWindows()) { SetPSSCallback(Cb_ChangeScreen); return; @@ -1180,13 +1340,13 @@ void sub_80C7FA8(u8 taskId) LoadUserWindowBorderGfx(1, 0xB, 0xE0); break; case 3: - sub_80C7E50(); - if (gUnknown_02039D08->unk_0003 == 0) + ResetAllBgCoords(); + if (!gUnknown_02039D08->isReshowingPSS) sub_80C7F1C(); break; case 4: sub_80CAF04(); - if (gUnknown_02039D08->unk_0003 == 0) + if (!gUnknown_02039D08->isReshowingPSS) sub_80CD36C(); else sub_80CD3EC(); @@ -1199,7 +1359,7 @@ void sub_80C7FA8(u8 taskId) } else { - sub_80C9FEC(); + SetScrollingBackground(); sub_80CAC1C(); } break; @@ -1218,8 +1378,8 @@ void sub_80C7FA8(u8 taskId) if (gUnknown_02039D08->boxOption != BOX_OPTION_MOVE_ITEMS) { - gUnknown_02039D08->field_DA4.baseTileTag = 0xD; - gUnknown_02039D08->field_DA4.basePaletteTag = 0xDACE; + gUnknown_02039D08->field_DA4.baseTileTag = TAG_TILE_D; + gUnknown_02039D08->field_DA4.basePaletteTag = TAG_PAL_DACE; sub_811F90C(&gUnknown_02039D08->field_DA4); sub_811FA90(); } @@ -1231,17 +1391,17 @@ void sub_80C7FA8(u8 taskId) break; case 10: sub_80C7F4C(); - if (gUnknown_02039D08->unk_0003 == 0) + if (!gUnknown_02039D08->isReshowingPSS) { BlendPalettes(0xFFFFFFFF, 0x10, 0); - SetPSSCallback(sub_80C81AC); + SetPSSCallback(Cb_ShowPSS); } else { BlendPalettes(0xFFFFFFFF, 0x10, 0); - SetPSSCallback(sub_80C972C_2); + SetPSSCallback(Cb_ReshowPSSAfterChoosingBagItem); } - SetVBlankCallback(sub_80C7D28); + SetVBlankCallback(VblankCb_PSS); return; default: return; @@ -1250,7 +1410,7 @@ void sub_80C7FA8(u8 taskId) gUnknown_02039D08->state++; } -void sub_80C81AC(u8 taskId) +void Cb_ShowPSS(u8 taskId) { switch (gUnknown_02039D08->state) { @@ -1266,7 +1426,7 @@ void sub_80C81AC(u8 taskId) } } -void sub_80C972C_2(u8 taskId) +void Cb_ReshowPSSAfterChoosingBagItem(u8 taskId) { switch (gUnknown_02039D08->state) { @@ -1881,7 +2041,7 @@ void Cb_DepositMenu(u8 taskId) { case 0: PrintStorageActionText(PC_TEXT_DEPOSIT_IN_WHICH_BOX); - sub_80C77E8(&gUnknown_02039D08->field_1E5C, 10, 0xDAC7, 3, FALSE); + sub_80C77E8(&gUnknown_02039D08->field_1E5C, TAG_TILE_A, TAG_PAL_DAC7, 3, FALSE); sub_80C78D4(gUnknown_02039D0E); gUnknown_02039D08->state++; break; @@ -2529,7 +2689,7 @@ void Cb_JumpBox(u8 taskId) { case 0: PrintStorageActionText(PC_TEXT_JUMP_TO_WHICH_BOX); - sub_80C77E8(&gUnknown_02039D08->field_1E5C, 10, 0xDAC7, 3, FALSE); + sub_80C77E8(&gUnknown_02039D08->field_1E5C, TAG_TILE_A, TAG_PAL_DAC7, 3, FALSE); sub_80C78D4(StorageGetCurrentBox()); gUnknown_02039D08->state++; break; @@ -2791,3 +2951,109 @@ void Cb_ChangeScreen(u8 taskId) DestroyTask(taskId); } + +void GiveChosenBagItem(void) +{ + u16 item = gSpecialVar_ItemId; + + if (item != 0) + { + u8 id = GetBoxCursorPosition(); + + if (sInPartyMenu) + SetMonData(&gPlayerParty[id], MON_DATA_HELD_ITEM, &item); + else + SetCurrentBoxMonData(id, MON_DATA_HELD_ITEM, &item); + + RemoveBagItem(item, 1); + } +} + +void FreePSSData(void) +{ + sub_80D25F0(); + sub_80D01B8(); + FREE_AND_SET_NULL(gUnknown_02039D08); + FreeAllWindowBuffers(); +} + +void SetScrollingBackground(void) +{ + SetGpuReg(REG_OFFSET_BG3CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(3) | BGCNT_16COLOR | BGCNT_SCREENBASE(31)); + DecompressAndLoadBgGfxUsingHeap(3, gPokemonStorageScrollingBGTileset, 0, 0, 0); + LZ77UnCompVram(gPokemonStorageScrollingBGTilemap, (void *)VRAM + 0xF800); +} + +void ScrollBackground(void) +{ + ChangeBgX(3, 128, 1); + ChangeBgY(3, 128, 2); +} + +void LoadPSSMenuGfx(void) +{ + InitBgsFromTemplates(0, gUnknown_08572734, ARRAY_COUNT(gUnknown_08572734)); + DecompressAndLoadBgGfxUsingHeap(1, gPSSMenu_Gfx, 0, 0, 0); + LZ77UnCompWram(gUnknown_085722A0, gUnknown_02039D08->field_5AC4); + SetBgTilemapBuffer(1, gUnknown_02039D08->field_5AC4); + ShowBg(1); + schedule_bg_copy_tilemap_to_vram(1); +} + +bool8 InitPSSWindows(void) +{ + if (!InitWindows(gUnknown_08572714)) + { + return FALSE; + } + else + { + DeactivateAllTextPrinters(); + return TRUE; + } +} + +void LoadWaveformSpritePalette(void) +{ + LoadSpritePalette(&gWaveformSpritePalette); +} + +void sub_80CA0D8(void) +{ + LoadPalette(gUnknown_085723DC, 0, 0x20); + LoadPalette(gUnknown_085723FC, 0x20, 0x20); + LoadPalette(gUnknown_085726F4, 0xF0, 0x20); + if (gUnknown_02039D08->boxOption != BOX_OPTION_MOVE_ITEMS) + LoadPalette(gUnknown_0857241C, 0x30, 0x20); + else + LoadPalette(gUnknown_0857243C, 0x30, 0x20); + + SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_16COLOR | BGCNT_SCREENBASE(30)); + sub_80CA318(); + sub_80CA154(); + sub_80CA1C4(); + sub_80CA230(); +} + +void sub_80CA154(void) +{ + gUnknown_02039D08->field_D94 = sub_811FFB4(TAG_TILE_10, TAG_PAL_DAC8, NULL); + gUnknown_02039D08->field_D94->oam.priority = 1; + gUnknown_02039D08->field_D94->subpriority = 1; + gUnknown_02039D08->field_D94->pos1.x = 40; + gUnknown_02039D08->field_D94->pos1.y = 150; + gUnknown_02039D08->field_DA0 = (void*) OBJ_VRAM0 + 32 * GetSpriteTileStartByTag(TAG_TILE_10); +} + +void sub_80CA1C4(void) +{ + u16 i; + struct SpriteSheet sheet = gWaveformSpriteSheet; + + LoadSpriteSheet(&sheet); + for (i = 0; i < 2; i++) + { + u8 spriteId = CreateSprite(&gUnknown_085728BC, i * 63 + 8, 9, 2); + gUnknown_02039D08->field_D98[i] = &gSprites[spriteId]; + } +} |