summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mailbox_pc.c143
-rw-r--r--src/string_util.c4
2 files changed, 147 insertions, 0 deletions
diff --git a/src/mailbox_pc.c b/src/mailbox_pc.c
new file mode 100644
index 000000000..0ebffc67e
--- /dev/null
+++ b/src/mailbox_pc.c
@@ -0,0 +1,143 @@
+#include "global.h"
+#include "malloc.h"
+#include "window.h"
+#include "menu.h"
+#include "string_util.h"
+#include "new_menu_helpers.h"
+#include "list_menu.h"
+#include "player_pc.h"
+#include "strings.h"
+#include "menu_indicators.h"
+#include "sound.h"
+#include "constants/songs.h"
+
+static EWRAM_DATA u8 sWindowIds[3] = {};
+static EWRAM_DATA struct ListMenuItem * sListMenuItems = NULL;
+
+static void MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu * list);
+
+static const struct WindowTemplate sWindowTemplates[] = {
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 1,
+ .width = 10,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x008
+ }, {
+ .bg = 0,
+ .tilemapLeft = 19,
+ .tilemapTop = 1,
+ .width = 10,
+ .height = 18,
+ .paletteNum = 15,
+ .baseBlock = 0x01c
+ }, {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 1,
+ .width = 15,
+ .height = 8,
+ .paletteNum = 15,
+ .baseBlock = 0x01c
+ }
+};
+
+static const u8 sTextColor[3] = {1, 2, 3};
+static const u8 sString_Dummy[] = _("");
+
+bool8 MailboxPC_InitBuffers(u8 num)
+{
+ u8 i;
+
+ sListMenuItems = Alloc(sizeof(struct ListMenuItem) * (num + 1));
+ if (sListMenuItems == NULL)
+ return FALSE;
+ for (i = 0; i < NELEMS(sWindowIds); i++)
+ sWindowIds[i] = 0xFF;
+ return TRUE;
+}
+
+u8 MailboxPC_GetAddWindow(u8 winIdx)
+{
+ if (sWindowIds[winIdx] == 0xFF)
+ {
+ sWindowIds[winIdx] = AddWindow(&sWindowTemplates[winIdx]);
+ SetStdWindowBorderStyle(sWindowIds[winIdx], 0);
+ }
+ return sWindowIds[winIdx];
+}
+
+void MailboxPC_RemoveWindow(u8 winIdx)
+{
+ ClearStdWindowAndFrameToTransparent(sWindowIds[winIdx], FALSE);
+ ClearWindowTilemap(sWindowIds[winIdx]);
+ RemoveWindow(sWindowIds[winIdx]);
+ sWindowIds[winIdx] = 0xFF;
+}
+
+u8 MailboxPC_GetWindowId(u8 winIdx)
+{
+ return sWindowIds[winIdx];
+}
+
+static void ItemPrintFunc(u8 windowId, s32 itemId, u8 y)
+{
+ u8 strbuf[30];
+ if (itemId != -2)
+ {
+ StringCopy(strbuf, gSaveBlock1Ptr->mail[itemId + PARTY_SIZE].playerName);
+ if (StringLength(strbuf) <= 5)
+ ConvertInternationalString(strbuf, LANGUAGE_JAPANESE);
+ AddTextPrinterParameterized4(windowId, 2, 8, y, 0, 0, sTextColor, -1, strbuf);
+ }
+}
+
+u8 MailboxPC_InitListMenu(struct PlayerPC_Unk_203AAC4 * playerPcStruct)
+{
+ u16 i;
+ for (i = 0; i < playerPcStruct->unk_5; i++)
+ {
+ sListMenuItems[i].label = sString_Dummy;
+ sListMenuItems[i].index = i;
+ }
+ sListMenuItems[i].label = gFameCheckerText_Cancel;
+ sListMenuItems[i].index = -2;
+
+ gMultiuseListMenuTemplate.items = sListMenuItems;
+ gMultiuseListMenuTemplate.totalItems = playerPcStruct->unk_5 + 1;
+ gMultiuseListMenuTemplate.windowId = sWindowIds[1];
+ gMultiuseListMenuTemplate.header_X = 0;
+ gMultiuseListMenuTemplate.item_X = GetMenuCursorDimensionByFont(2, 0);
+ gMultiuseListMenuTemplate.cursor_X = 0;
+ gMultiuseListMenuTemplate.lettersSpacing = 0;
+ gMultiuseListMenuTemplate.itemVerticalPadding = 2;
+ gMultiuseListMenuTemplate.maxShowed = 8;
+ gMultiuseListMenuTemplate.fontId = 2;
+ gMultiuseListMenuTemplate.upText_Y = 10;
+ gMultiuseListMenuTemplate.cursorPal = 2;
+ gMultiuseListMenuTemplate.fillValue = 1;
+ gMultiuseListMenuTemplate.cursorShadowPal = 3;
+ gMultiuseListMenuTemplate.moveCursorFunc = MoveCursorFunc;
+ gMultiuseListMenuTemplate.itemPrintFunc = ItemPrintFunc;
+ gMultiuseListMenuTemplate.cursorKind = 0;
+ gMultiuseListMenuTemplate.scrollMultiple = 0;
+ return ListMenuInit(&gMultiuseListMenuTemplate, playerPcStruct->scrollOffset, playerPcStruct->selectedRow);
+}
+
+static void MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu * list)
+{
+ if (onInit != TRUE)
+ PlaySE(SE_SELECT);
+}
+
+void MailboxPC_AddScrollIndicatorArrows(struct PlayerPC_Unk_203AAC4 * playerPcStruct)
+{
+ playerPcStruct->unk_A = AddScrollIndicatorArrowPairParameterized(2, 0xC2, 0xC, 0x94, playerPcStruct->unk_5 - playerPcStruct->unk_4 + 1, 110, 110, &playerPcStruct->scrollOffset);
+}
+
+void MailboxPC_DestroyListMenuBuffer(void)
+{
+ Free(sListMenuItems);
+}
diff --git a/src/string_util.c b/src/string_util.c
index e1129a5a5..d5b5202df 100644
--- a/src/string_util.c
+++ b/src/string_util.c
@@ -2,6 +2,10 @@
#include "string_util.h"
#include "text.h"
+EWRAM_DATA u8 gStringVar1[32] = {};
+EWRAM_DATA u8 gStringVar2[20] = {};
+EWRAM_DATA u8 gStringVar3[20] = {};
+EWRAM_DATA u8 gStringVar4[1000] = {};
EWRAM_DATA u8 gUnknownStringVar[16] = {0};
static const u8 sDigits[] = __("0123456789ABCDEF");