diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-06-16 12:36:34 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-06-16 12:36:34 -0400 |
commit | 4f4b03af6077787ceef226d9085242966c69b6bd (patch) | |
tree | 9df26defae89203e8b7d8dade37c038fecf837dd /src | |
parent | 7e1c966eb36db080c43d9aad2419ee68356656ef (diff) |
item_pc: sub_810D878
Diffstat (limited to 'src')
-rw-r--r-- | src/item_pc.c | 156 |
1 files changed, 151 insertions, 5 deletions
diff --git a/src/item_pc.c b/src/item_pc.c index 8e4502430..2b63651e7 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -1,5 +1,10 @@ #include "global.h" +#include "bg.h" +#include "decompress.h" +#include "gpu_regs.h" +#include "graphics.h" #include "help_system.h" +#include "item.h" #include "item_menu_icons.h" #include "list_menu.h" #include "main.h" @@ -10,6 +15,7 @@ #include "pc_screen_effect.h" #include "scanline_effect.h" #include "sound.h" +#include "strings.h" #include "task.h" #include "constants/songs.h" @@ -18,10 +24,11 @@ struct ItemPcResources u32 field_00; u8 field_04; u8 field_05; - u8 filler_06[2]; + u8 field_06; + u8 field_07; u8 field_08; u8 filler_09[3]; - u16 field_0C[3]; + s16 field_0C[3]; }; struct ItemPcStaticResources @@ -33,27 +40,48 @@ struct ItemPcStaticResources }; EWRAM_DATA struct ItemPcResources * gUnknown_203ADBC = NULL; -EWRAM_DATA u32 gUnknown_203ADC0 = 0; -EWRAM_DATA u32 gUnknown_203ADC4 = 0; -EWRAM_DATA u32 gUnknown_203ADC8 = 0; +EWRAM_DATA u8 * gUnknown_203ADC0 = NULL; +EWRAM_DATA struct ListMenuItem * gUnknown_203ADC4 = NULL; +EWRAM_DATA void * gUnknown_203ADC8 = NULL; EWRAM_DATA struct ItemPcStaticResources gUnknown_203ADCC = {}; +extern const struct CompressedSpriteSheet gUnknown_83D4240; +extern const struct CompressedSpritePalette gUnknown_83D4248; + void sub_810D4A0(void); bool8 sub_810D4C0(void); void sub_810D6AC(void); +void sub_810D6E8(u8 taskId); bool8 sub_810D71C(void); bool8 sub_810D78C(void); bool8 sub_810D83C(void); void sub_810D878(void); +void sub_810D954(s32 itemIndex, bool8 onInit, struct ListMenu * list); +void sub_810DA20(u8 windowId, s32 itemId, u8 y); void sub_810E8F0(void); void sub_810DB34(void); void sub_810DB5C(void); void sub_810DBF0(void); +void sub_810DC40(void); void sub_810DDA4(void); void sub_810DE08(void); void sub_810DE94(u8); void sub_810DEA0(u8 taskId); +const struct BgTemplate gUnknown_8453F6C[2] = { + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 31, + .priority = 0 + }, { + .bg = 1, + .charBaseIndex = 3, + .mapBaseIndex = 30, + .priority = 1 + } +}; + void sub_810D3F4(u8 a0, MainCallback callback) { u8 i; @@ -236,3 +264,121 @@ bool8 sub_810D4C0(void) } return FALSE; } + +void sub_810D6AC(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + CreateTask(sub_810D6E8, 0); + SetVBlankCallback(sub_810D48C); + SetMainCallback2(sub_810D470); +} + +void sub_810D6E8(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(gUnknown_203ADCC.field_0); + sub_810DC40(); + DestroyTask(taskId); + } +} + +bool8 sub_810D71C(void) +{ + InitBgReg(); + gUnknown_203ADC0 = Alloc(0x800); + if (gUnknown_203ADC0 == NULL) + return FALSE; + memset(gUnknown_203ADC0, 0, 0x800); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_8453F6C, NELEMS(gUnknown_8453F6C)); + SetBgTilemapBuffer(1, gUnknown_203ADC0); + schedule_bg_copy_tilemap_to_vram(1); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BLDCNT , 0); + ShowBg(0); + ShowBg(1); + return TRUE; +} + +bool8 sub_810D78C(void) +{ + switch (gUnknown_203ADBC->field_0C[0]) + { + case 0: + reset_temp_tile_data_buffers(); + decompress_and_copy_tile_data_to_vram(1, gUnknown_8E85090, 0, 0, 0); + gUnknown_203ADBC->field_0C[0]++; + break; + case 1: + if (free_temp_tile_data_buffers_if_possible() != TRUE) + { + LZDecompressWram(gUnknown_8E85458, gUnknown_203ADC0); + gUnknown_203ADBC->field_0C[0]++; + } + break; + case 2: + LoadCompressedPalette(gUnknown_8E85408, 0x00, 0x60); + gUnknown_203ADBC->field_0C[0]++; + break; + case 3: + LoadCompressedObjectPic(&gUnknown_83D4240); + gUnknown_203ADBC->field_0C[0]++; + break; + default: + LoadCompressedObjectPalette(&gUnknown_83D4248); + gUnknown_203ADBC->field_0C[0] = 0; + return TRUE; + } + return FALSE; +} + +#define sub_810D83C_sub(ptr__, size) ({ \ + void ** ptr = (void **)&(ptr__); \ + *ptr = Alloc(size); \ + if (*ptr == NULL) \ + { \ + sub_810DC40(); \ + sub_810D6AC(); \ + return FALSE; \ + } \ +}) + +bool8 sub_810D83C(void) +{ + sub_810D83C_sub(gUnknown_203ADC4, 0x0F8); + sub_810D83C_sub(gUnknown_203ADC8, 0x1B2); + return TRUE; +} + +void sub_810D878(void) +{ + u16 i; + + for (i = 0; i < gUnknown_203ADBC->field_07; i++) + { + gUnknown_203ADC4[i].label = ItemId_GetItem(gSaveBlock1Ptr->pcItems[i].itemId)->name; + gUnknown_203ADC4[i].index = i; + } + gUnknown_203ADC4[i].label = gFameCheckerText_Cancel; + gUnknown_203ADC4[i].index = -2; + + gMultiuseListMenuTemplate.items = gUnknown_203ADC4; + gMultiuseListMenuTemplate.totalItems = gUnknown_203ADBC->field_07 + 1; + gMultiuseListMenuTemplate.windowId = 0; + gMultiuseListMenuTemplate.header_X = 0; + gMultiuseListMenuTemplate.item_X = 9; + gMultiuseListMenuTemplate.cursor_X = 1; + gMultiuseListMenuTemplate.lettersSpacing = 1; + gMultiuseListMenuTemplate.itemVerticalPadding = 2; + gMultiuseListMenuTemplate.upText_Y = 2; + gMultiuseListMenuTemplate.maxShowed = gUnknown_203ADBC->field_06; + gMultiuseListMenuTemplate.fontId = 2; + gMultiuseListMenuTemplate.cursorPal = 2; + gMultiuseListMenuTemplate.fillValue = 0; + gMultiuseListMenuTemplate.cursorShadowPal = 3; + gMultiuseListMenuTemplate.moveCursorFunc = sub_810D954; + gMultiuseListMenuTemplate.itemPrintFunc = sub_810DA20; + gMultiuseListMenuTemplate.scrollMultiple = 0; + gMultiuseListMenuTemplate.cursorKind = 0; +} |