summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-06-16 12:36:34 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-06-16 12:36:34 -0400
commit4f4b03af6077787ceef226d9085242966c69b6bd (patch)
tree9df26defae89203e8b7d8dade37c038fecf837dd /src
parent7e1c966eb36db080c43d9aad2419ee68356656ef (diff)
item_pc: sub_810D878
Diffstat (limited to 'src')
-rw-r--r--src/item_pc.c156
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;
+}