summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/decoration.c2
-rw-r--r--src/frontier_pass.c676
-rw-r--r--src/graphics.c14
-rw-r--r--src/international_string_util.c4
-rwxr-xr-xsrc/item_menu.c4
-rw-r--r--src/menu_helpers.c30
-rw-r--r--src/menu_specialized.c92
-rwxr-xr-xsrc/party_menu.c2
-rw-r--r--src/player_pc.c1173
-rw-r--r--src/region_map.c24
-rw-r--r--src/secret_base.c2
11 files changed, 1086 insertions, 937 deletions
diff --git a/src/decoration.c b/src/decoration.c
index 62d1966bf..4d1c79982 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -862,7 +862,7 @@ static void InitDecorationItemsMenuLimits(void)
static void InitDecorationItemsMenuScrollAndCursor(void)
{
- sub_812225C(&sDecorationsScrollOffset, &sDecorationsCursorPos, sDecorationItemsMenu->maxShownItems, sDecorationItemsMenu->numMenuItems);
+ SetCursorWithinListBounds(&sDecorationsScrollOffset, &sDecorationsCursorPos, sDecorationItemsMenu->maxShownItems, sDecorationItemsMenu->numMenuItems);
}
static void InitDecorationItemsMenuScrollAndCursor2(void)
diff --git a/src/frontier_pass.c b/src/frontier_pass.c
index 22a7695f2..e3e5ee1f2 100644
--- a/src/frontier_pass.c
+++ b/src/frontier_pass.c
@@ -38,14 +38,14 @@ enum
WINDOW_BATTLE_RECORD,
WINDOW_BATTLE_POINTS,
WINDOW_DESCRIPTION,
- WINDOW_4,
+ WINDOW_DUMMY,
WINDOW_COUNT
};
// Windows displayed in the facilities map view.
enum
{
- MAP_WINDOW_0,
+ MAP_WINDOW_UNUSED, // Overlaps the "Battle Frontier" title area of the map
MAP_WINDOW_NAME,
MAP_WINDOW_DESCRIPTION,
MAP_WINDOW_COUNT
@@ -59,9 +59,39 @@ enum
CURSOR_AREA_RECORD,
CURSOR_AREA_CANCEL,
CURSOR_AREA_POINTS,
- CURSOR_AREA_EARNED_SYMBOLS, // The window.
- CURSOR_AREA_SYMBOL, // All 7 symbols.
- CURSOR_AREA_COUNT = CURSOR_AREA_SYMBOL + NUM_FRONTIER_FACILITIES,
+ CURSOR_AREA_EARNED_SYMBOLS, // The window containing the symbols
+ CURSOR_AREA_SYMBOL_TOWER,
+ CURSOR_AREA_SYMBOL_DOME,
+ CURSOR_AREA_SYMBOL_PALACE,
+ CURSOR_AREA_SYMBOL_ARENA,
+ CURSOR_AREA_SYMBOL_FACTORY,
+ CURSOR_AREA_SYMBOL_PIKE,
+ CURSOR_AREA_SYMBOL_PYRAMID,
+ CURSOR_AREA_COUNT
+};
+
+// Start of symbol cursor areas
+#define CURSOR_AREA_SYMBOL CURSOR_AREA_SYMBOL_TOWER
+
+enum {
+ MAP_INDICATOR_RECTANGLE,
+ MAP_INDICATOR_SQUARE,
+};
+
+enum {
+ TAG_CURSOR,
+ TAG_MAP_INDICATOR,
+ TAG_MEDAL_SILVER,
+ TAG_MEDAL_GOLD,
+ TAG_HEAD_MALE,
+ TAG_HEAD_FEMALE,
+};
+
+// Error return codes. Never read
+enum {
+ SUCCESS,
+ ERR_ALREADY_DONE,
+ ERR_ALLOC_FAILED,
};
struct FrontierPassData
@@ -73,25 +103,26 @@ struct FrontierPassData
s16 cursorY;
u8 cursorArea;
u8 previousCursorArea;
- u8 hasBattleRecord:1;
- u8 unkE:3;
+ bool8 hasBattleRecord:1;
+ u8 areaToShow:3;
u8 trainerStars:4;
- u8 facilitySymbols[NUM_FRONTIER_FACILITIES];
+ u8 facilitySymbols[NUM_FRONTIER_FACILITIES]; // 0: no symbol, 1: silver, 2: gold
};
struct FrontierPassGfx
{
struct Sprite *cursorSprite;
struct Sprite *symbolSprites[NUM_FRONTIER_FACILITIES];
- u8 *unk20;
- u8 *unk24;
- u8 *unk28;
- bool8 setAffine;
- s16 unk2E;
- s16 unk30;
- u8 tilemapBuff1[0x1000];
- u8 tilemapBuff2[0x1000];
- u8 tilemapBuff3[0x400];
+ // These 3 tilemaps are used to overwrite the respective area when highlighted
+ u8 *mapAndCardZoomTilemap;
+ u8 *mapAndCardTilemap;
+ u8 *battleRecordTilemap;
+ bool8 zooming;
+ s16 scaleX;
+ s16 scaleY;
+ u8 tilemapBuff1[BG_SCREEN_SIZE * 2];
+ u8 tilemapBuff2[BG_SCREEN_SIZE * 2];
+ u8 tilemapBuff3[BG_SCREEN_SIZE / 2];
};
struct FrontierPassSaved
@@ -109,9 +140,9 @@ struct FrontierMapData
struct Sprite *mapIndicatorSprite;
u8 cursorPos;
u8 unused;
- u8 tilemapBuff0[0x1000];
- u8 tilemapBuff1[0x1000];
- u8 tilemapBuff2[0x1000];
+ u8 tilemapBuff0[BG_SCREEN_SIZE * 2];
+ u8 tilemapBuff1[BG_SCREEN_SIZE * 2];
+ u8 tilemapBuff2[BG_SCREEN_SIZE * 2];
};
static EWRAM_DATA struct FrontierPassData *sPassData = NULL;
@@ -119,37 +150,39 @@ static EWRAM_DATA struct FrontierPassGfx *sPassGfx = NULL;
static EWRAM_DATA struct FrontierMapData *sMapData = NULL;
static EWRAM_DATA struct FrontierPassSaved sSavedPassData = {0};
-// This file's functions.
static u32 AllocateFrontierPassData(void (*callback)(void));
static void ShowFrontierMap(void (*callback)(void));
static void CB2_InitFrontierPass(void);
-static void sub_80C629C(void);
+static void DrawFrontierPassBg(void);
static void FreeCursorAndSymbolSprites(void);
static void LoadCursorAndSymbolSprites(void);
static u32 FreeFrontierPassData(void);
static bool32 InitFrontierPass(void);
static bool32 HideFrontierPass(void);
-static void Task_HandleFrontierPassInput(u8 taskId);
-static void Task_DoFadeEffect(u8 taskId);
-static void sub_80C6104(u8 cursorArea, u8 previousCursorArea);
-static void PrintAreaDescription(u8 cursorArea);
-static void sub_80C5F58(bool8 arg0, bool8 arg1);
-static void SpriteCb_Dummy(struct Sprite *sprite);
-
-// Const rom data.
-static const u16 sMaleHeadPalette[] = INCBIN_U16("graphics/frontier_pass/map_heads.gbapal");
-static const u16 sFemaleHeadPalette[] = INCBIN_U16("graphics/frontier_pass/map_heads_female.gbapal");
-static const u32 gUnknown_0856FBBC[] = INCBIN_U32("graphics/frontier_pass/map_screen.4bpp.lz");
-static const u32 sCursorGfx[] = INCBIN_U32("graphics/frontier_pass/cursor.4bpp.lz");
-static const u32 sHeadsGfx[] = INCBIN_U32("graphics/frontier_pass/map_heads.4bpp.lz");
-static const u32 sMapCursorGfx[] = INCBIN_U32("graphics/frontier_pass/map_cursor.4bpp.lz");
-static const u32 gUnknown_08570E00[] = INCBIN_U32("graphics/frontier_pass/map_screen.bin.lz");
-static const u32 gUnknown_08571060[] = INCBIN_U32("graphics/frontier_pass/small_map_and_card.bin.lz");
-static const u32 gUnknown_08571298[] = INCBIN_U32("graphics/frontier_pass/unknown_571298.bin");
-static const u32 gUnknown_085712C0[] = INCBIN_U32("graphics/frontier_pass/record_frame.bin.lz");
-static const u32 gUnknown_085712F8[] = INCBIN_U32("graphics/frontier_pass/small_map_and_card_affine.bin.lz");
-
-static const s16 gUnknown_085713E0[][2] = {{216, 32}, {216, 128}};
+static void Task_HandleFrontierPassInput(u8);
+static void Task_PassAreaZoom(u8);
+static void UpdateAreaHighlight(u8, u8);
+static void PrintAreaDescription(u8);
+static void ShowHideZoomingArea(bool8, bool8);
+static void SpriteCB_PlayerHead(struct Sprite *);
+
+static const u16 sMaleHead_Pal[] = INCBIN_U16("graphics/frontier_pass/map_heads.gbapal");
+static const u16 sFemaleHead_Pal[] = INCBIN_U16("graphics/frontier_pass/map_heads_female.gbapal");
+static const u32 sMapScreen_Gfx[] = INCBIN_U32("graphics/frontier_pass/map_screen.4bpp.lz");
+static const u32 sCursor_Gfx[] = INCBIN_U32("graphics/frontier_pass/cursor.4bpp.lz");
+static const u32 sHeads_Gfx[] = INCBIN_U32("graphics/frontier_pass/map_heads.4bpp.lz");
+static const u32 sMapCursor_Gfx[] = INCBIN_U32("graphics/frontier_pass/map_cursor.4bpp.lz");
+static const u32 sMapScreen_Tilemap[] = INCBIN_U32("graphics/frontier_pass/map_screen.bin.lz");
+static const u32 sMapAndCard_ZoomedOut_Tilemap[] = INCBIN_U32("graphics/frontier_pass/small_map_and_card.bin.lz");
+static const u32 sUnusedData[] = INCBIN_U32("graphics/frontier_pass/unused.bin");
+static const u32 sBattleRecord_Tilemap[] = INCBIN_U32("graphics/frontier_pass/record_frame.bin.lz");
+static const u32 sMapAndCard_Zooming_Tilemap[] = INCBIN_U32("graphics/frontier_pass/small_map_and_card_affine.bin.lz");
+
+static const s16 sBgAffineCoords[][2] =
+{
+ [CURSOR_AREA_MAP - 1] = {216, 32},
+ [CURSOR_AREA_CARD - 1] = {216, 128}
+};
static const struct BgTemplate sPassBgTemplates[] =
{
@@ -213,9 +246,9 @@ static const struct BgTemplate sMapBgTemplates[] =
},
};
-static const struct WindowTemplate sPassWindowTemplates[] =
+static const struct WindowTemplate sPassWindowTemplates[WINDOW_COUNT] =
{
- {
+ [WINDOW_EARNED_SYMBOLS] = {
.bg = 0,
.tilemapLeft = 2,
.tilemapTop = 3,
@@ -224,7 +257,7 @@ static const struct WindowTemplate sPassWindowTemplates[] =
.paletteNum = 15,
.baseBlock = 0x1,
},
- {
+ [WINDOW_BATTLE_RECORD] = {
.bg = 0,
.tilemapLeft = 2,
.tilemapTop = 10,
@@ -233,7 +266,7 @@ static const struct WindowTemplate sPassWindowTemplates[] =
.paletteNum = 15,
.baseBlock = 0x26,
},
- {
+ [WINDOW_BATTLE_POINTS] = {
.bg = 0,
.tilemapLeft = 2,
.tilemapTop = 13,
@@ -242,7 +275,7 @@ static const struct WindowTemplate sPassWindowTemplates[] =
.paletteNum = 15,
.baseBlock = 0x4B,
},
- {
+ [WINDOW_DESCRIPTION] = {
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 18,
@@ -256,7 +289,7 @@ static const struct WindowTemplate sPassWindowTemplates[] =
static const struct WindowTemplate sMapWindowTemplates[] =
{
- {
+ [MAP_WINDOW_UNUSED] = {
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 1,
@@ -265,7 +298,7 @@ static const struct WindowTemplate sMapWindowTemplates[] =
.paletteNum = 15,
.baseBlock = 0x1,
},
- {
+ [MAP_WINDOW_NAME] = {
.bg = 0,
.tilemapLeft = 20,
.tilemapTop = 1,
@@ -274,7 +307,7 @@ static const struct WindowTemplate sMapWindowTemplates[] =
.paletteNum = 15,
.baseBlock = 0x4D,
},
- {
+ [MAP_WINDOW_DESCRIPTION] = {
.bg = 0,
.tilemapLeft = 2,
.tilemapTop = 16,
@@ -300,159 +333,162 @@ struct
s16 xStart;
s16 xEnd;
}
-static const sPassAreasLayout[] =
-{
- {28, 76, 132, 220},
- {84, 132, 132, 220},
- {80, 102, 20, 108},
- {0, 16, 152, 240},
- {108, 134, 20, 108},
- {24, 48, 20, 108},
- {50, 66, 20, 36},
- {66, 82, 32, 48},
- {50, 66, 44, 60},
- {66, 82, 56, 72},
- {50, 66, 68, 84},
- {66, 82, 80, 96},
- {50, 66, 92, 108},
+static const sPassAreasLayout[CURSOR_AREA_COUNT - 1] =
+{
+ [CURSOR_AREA_MAP - 1] = { 28, 76, 132, 220},
+ [CURSOR_AREA_CARD - 1] = { 84, 132, 132, 220},
+ [CURSOR_AREA_RECORD - 1] = { 80, 102, 20, 108},
+ [CURSOR_AREA_CANCEL - 1] = { 0, 16, 152, 240},
+ [CURSOR_AREA_POINTS - 1] = {108, 134, 20, 108},
+ [CURSOR_AREA_EARNED_SYMBOLS - 1] = { 24, 48, 20, 108},
+ [CURSOR_AREA_SYMBOL_TOWER - 1] = { 50, 66, 20, 36},
+ [CURSOR_AREA_SYMBOL_DOME - 1] = { 66, 82, 32, 48},
+ [CURSOR_AREA_SYMBOL_PALACE - 1] = { 50, 66, 44, 60},
+ [CURSOR_AREA_SYMBOL_ARENA - 1] = { 66, 82, 56, 72},
+ [CURSOR_AREA_SYMBOL_FACTORY - 1] = { 50, 66, 68, 84},
+ [CURSOR_AREA_SYMBOL_PIKE - 1] = { 66, 82, 80, 96},
+ [CURSOR_AREA_SYMBOL_PYRAMID - 1] = { 50, 66, 92, 108},
};
static const struct CompressedSpriteSheet sCursorSpriteSheets[] =
{
- {sCursorGfx, 0x100, 0},
- {sMapCursorGfx, 0x400, 1},
- {gFrontierPassMedals_Gfx, 0x380, 2},
+ {sCursor_Gfx, 0x100, TAG_CURSOR},
+ {sMapCursor_Gfx, 0x400, TAG_MAP_INDICATOR},
+ {gFrontierPassMedals_Gfx, 0x380, TAG_MEDAL_SILVER},
};
static const struct CompressedSpriteSheet sHeadsSpriteSheet[] =
{
- {sHeadsGfx, 0x100, 4},
+ {sHeads_Gfx, 0x100, TAG_HEAD_MALE},
{}
};
static const struct SpritePalette sSpritePalettes[] =
{
- {gFrontierPassCursor_Pal, 0},
- {gFrontierPassMapCursor_Pal, 1},
- {gFrontierPassMedalsSilver_Pal, 2},
- {gFrontierPassMedalsGold_Pal, 3},
- {sMaleHeadPalette, 4},
- {sFemaleHeadPalette, 5},
+ {gFrontierPassCursor_Pal, TAG_CURSOR},
+ {gFrontierPassMapCursor_Pal, TAG_MAP_INDICATOR},
+ {gFrontierPassMedalsSilver_Pal, TAG_MEDAL_SILVER},
+ {gFrontierPassMedalsGold_Pal, TAG_MEDAL_GOLD},
+ {sMaleHead_Pal, TAG_HEAD_MALE},
+ {sFemaleHead_Pal, TAG_HEAD_FEMALE},
{}
};
-static const union AnimCmd sSpriteAnim_857151C[] =
+static const union AnimCmd sAnim_Frame1_Unused[] =
{
ANIMCMD_FRAME(0, 0),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_8571524[] =
+static const union AnimCmd sAnim_Frame1[] =
{
ANIMCMD_FRAME(0, 0),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_857152C[] =
+static const union AnimCmd sAnim_Frame2[] =
{
ANIMCMD_FRAME(4, 0),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_8571534[] =
+static const union AnimCmd sAnim_Frame3[] =
{
ANIMCMD_FRAME(8, 0),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_857153C[] =
+static const union AnimCmd sAnim_Frame4[] =
{
ANIMCMD_FRAME(12, 0),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_8571544[] =
+static const union AnimCmd sAnim_Frame5[] =
{
ANIMCMD_FRAME(16, 0),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_857154C[] =
+static const union AnimCmd sAnim_Frame6[] =
{
ANIMCMD_FRAME(20, 0),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_8571554[] =
+static const union AnimCmd sAnim_Frame7[] =
{
ANIMCMD_FRAME(24, 0),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_857155C[] =
+static const union AnimCmd sAnim_MapIndicatorCursor_Rectangle[] =
{
ANIMCMD_FRAME(0, 45),
ANIMCMD_FRAME(8, 45),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd sSpriteAnim_8571568[] =
+static const union AnimCmd sAnim_MapIndicatorCursor_Square[] =
{
ANIMCMD_FRAME(16, 45),
ANIMCMD_FRAME(24, 45),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd *const sSpriteAnimTable_8571574[] =
+// Used both by the cursor and the map head icons
+static const union AnimCmd *const sAnims_TwoFrame[] =
{
- sSpriteAnim_8571524,
- sSpriteAnim_857152C
+ sAnim_Frame1,
+ sAnim_Frame2
};
-static const union AnimCmd *const sSpriteAnimTable_857157C[] =
+static const union AnimCmd *const sAnims_Medal[] =
{
- sSpriteAnim_8571524,
- sSpriteAnim_857152C,
- sSpriteAnim_8571534,
- sSpriteAnim_857153C,
- sSpriteAnim_8571544,
- sSpriteAnim_857154C,
- sSpriteAnim_8571554
+ [CURSOR_AREA_SYMBOL_TOWER - CURSOR_AREA_SYMBOL] = sAnim_Frame1,
+ [CURSOR_AREA_SYMBOL_DOME - CURSOR_AREA_SYMBOL] = sAnim_Frame2,
+ [CURSOR_AREA_SYMBOL_PALACE - CURSOR_AREA_SYMBOL] = sAnim_Frame3,
+ [CURSOR_AREA_SYMBOL_ARENA - CURSOR_AREA_SYMBOL] = sAnim_Frame4,
+ [CURSOR_AREA_SYMBOL_FACTORY - CURSOR_AREA_SYMBOL] = sAnim_Frame5,
+ [CURSOR_AREA_SYMBOL_PIKE - CURSOR_AREA_SYMBOL] = sAnim_Frame6,
+ [CURSOR_AREA_SYMBOL_PYRAMID - CURSOR_AREA_SYMBOL] = sAnim_Frame7
};
-static const union AnimCmd *const sSpriteAnimTable_8571598[] =
+static const union AnimCmd *const sAnims_MapIndicatorCursor[] =
{
- sSpriteAnim_857155C,
- sSpriteAnim_8571568
+ [MAP_INDICATOR_RECTANGLE] = sAnim_MapIndicatorCursor_Rectangle,
+ [MAP_INDICATOR_SQUARE] = sAnim_MapIndicatorCursor_Square
};
-static const union AffineAnimCmd sSpriteAffineAnim_85715A0[] =
+static const union AffineAnimCmd sAffineAnim_Unused[] =
{
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd *const sSpriteAffineAnimTable_85715B0[] =
+static const union AffineAnimCmd *const sAffineAnims_Unused[] =
{
- sSpriteAffineAnim_85715A0
+ sAffineAnim_Unused
};
static const struct SpriteTemplate sSpriteTemplates_Cursors[] =
{
+ // Triangular cursor
{
- .tileTag = 0,
- .paletteTag = 0,
+ .tileTag = TAG_CURSOR,
+ .paletteTag = TAG_CURSOR,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
- .anims = sSpriteAnimTable_8571574,
+ .anims = sAnims_TwoFrame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
+ // Map indicator cursor
{
- .tileTag = 1,
- .paletteTag = 1,
+ .tileTag = TAG_MAP_INDICATOR,
+ .paletteTag = TAG_MAP_INDICATOR,
.oam = &gOamData_AffineOff_ObjNormal_32x16,
- .anims = sSpriteAnimTable_8571598,
+ .anims = sAnims_MapIndicatorCursor,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
@@ -461,43 +497,43 @@ static const struct SpriteTemplate sSpriteTemplates_Cursors[] =
static const struct SpriteTemplate sSpriteTemplate_Medal =
{
- .tileTag = 2,
- .paletteTag = 2,
+ .tileTag = TAG_MEDAL_SILVER,
+ .paletteTag = TAG_MEDAL_SILVER,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
- .anims = sSpriteAnimTable_857157C,
+ .anims = sAnims_Medal,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const struct SpriteTemplate sSpriteTemplate_Head =
+static const struct SpriteTemplate sSpriteTemplate_PlayerHead =
{
- .tileTag = 4,
- .paletteTag = 4,
+ .tileTag = TAG_HEAD_MALE,
+ .paletteTag = TAG_HEAD_MALE,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
- .anims = sSpriteAnimTable_8571574,
+ .anims = sAnims_TwoFrame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCb_Dummy,
+ .callback = SpriteCB_PlayerHead,
};
-static const u8 *const sPassAreaDescriptions[] =
-{
- gText_ThereIsNoBattleRecord,
- gText_CheckFrontierMap,
- gText_CheckTrainerCard,
- gText_ViewRecordedBattle,
- gText_PutAwayFrontierPass,
- gText_CurrentBattlePoints,
- gText_CollectedSymbols,
- gText_BattleTowerAbilitySymbol,
- gText_BattleDomeTacticsSymbol,
- gText_BattlePalaceSpiritsSymbol,
- gText_BattleArenaGutsSymbol,
- gText_BattleFactoryKnowledgeSymbol,
- gText_BattlePikeLuckSymbol,
- gText_BattlePyramidBraveSymbol,
- gText_EmptyString7,
+static const u8 *const sPassAreaDescriptions[CURSOR_AREA_COUNT + 1] =
+{
+ [CURSOR_AREA_NOTHING] = gText_ThereIsNoBattleRecord, // NOTHING is re-used for CURSOR_AREA_RECORD when no Record is present
+ [CURSOR_AREA_MAP] = gText_CheckFrontierMap,
+ [CURSOR_AREA_CARD] = gText_CheckTrainerCard,
+ [CURSOR_AREA_RECORD] = gText_ViewRecordedBattle,
+ [CURSOR_AREA_CANCEL] = gText_PutAwayFrontierPass,
+ [CURSOR_AREA_POINTS] = gText_CurrentBattlePoints,
+ [CURSOR_AREA_EARNED_SYMBOLS] = gText_CollectedSymbols,
+ [CURSOR_AREA_SYMBOL_TOWER] = gText_BattleTowerAbilitySymbol,
+ [CURSOR_AREA_SYMBOL_DOME] = gText_BattleDomeTacticsSymbol,
+ [CURSOR_AREA_SYMBOL_PALACE] = gText_BattlePalaceSpiritsSymbol,
+ [CURSOR_AREA_SYMBOL_ARENA] = gText_BattleArenaGutsSymbol,
+ [CURSOR_AREA_SYMBOL_FACTORY] = gText_BattleFactoryKnowledgeSymbol,
+ [CURSOR_AREA_SYMBOL_PIKE] = gText_BattlePikeLuckSymbol,
+ [CURSOR_AREA_SYMBOL_PYRAMID] = gText_BattlePyramidBraveSymbol,
+ [CURSOR_AREA_COUNT] = gText_EmptyString7,
};
struct
@@ -507,18 +543,17 @@ struct
s16 x;
s16 y;
u8 animNum;
-} static const sMapLandmarks[] =
-{
- {gText_BattleTower3, gText_BattleTowerDesc, 0x59, 0x28, 1},
- {gText_BattleDome2, gText_BattleDomeDesc, 0x21, 0x2A, 1},
- {gText_BattlePalace2, gText_BattlePalaceDesc, 0x78, 0x56, 0},
- {gText_BattleArena2, gText_BattleArenaDesc, 0x72, 0x3B, 0},
- {gText_BattleFactory2, gText_BattleFactoryDesc, 0x19, 0x43, 0},
- {gText_BattlePike2, gText_BattlePikeDesc, 0x39, 0x39, 1},
- {gText_BattlePyramid2, gText_BattlePyramidDesc, 0x86, 0x29, 1},
+} static const sMapLandmarks[NUM_FRONTIER_FACILITIES] =
+{
+ [FRONTIER_FACILITY_TOWER] = {gText_BattleTower3, gText_BattleTowerDesc, 89, 40, MAP_INDICATOR_SQUARE},
+ [FRONTIER_FACILITY_DOME] = {gText_BattleDome2, gText_BattleDomeDesc, 33, 42, MAP_INDICATOR_SQUARE},
+ [FRONTIER_FACILITY_PALACE] = {gText_BattlePalace2, gText_BattlePalaceDesc, 120, 86, MAP_INDICATOR_RECTANGLE},
+ [FRONTIER_FACILITY_ARENA] = {gText_BattleArena2, gText_BattleArenaDesc, 114, 59, MAP_INDICATOR_RECTANGLE},
+ [FRONTIER_FACILITY_FACTORY] = {gText_BattleFactory2, gText_BattleFactoryDesc, 25, 67, MAP_INDICATOR_RECTANGLE},
+ [FRONTIER_FACILITY_PIKE] = {gText_BattlePike2, gText_BattlePikeDesc, 57, 57, MAP_INDICATOR_SQUARE},
+ [FRONTIER_FACILITY_PYRAMID] = {gText_BattlePyramid2, gText_BattlePyramidDesc, 134, 41, MAP_INDICATOR_SQUARE},
};
-// code
static void ResetGpuRegsAndBgs(void)
{
SetGpuReg(REG_OFFSET_DISPCNT, 0);
@@ -564,30 +599,34 @@ static u32 AllocateFrontierPassData(void (*callback)(void))
u8 i;
if (sPassData != NULL)
- return 1;
+ return ERR_ALREADY_DONE;
sPassData = AllocZeroed(sizeof(*sPassData));
if (sPassData == NULL)
- return 2;
+ return ERR_ALLOC_FAILED;
sPassData->callback = callback;
i = GetCurrentRegionMapSectionId();
if (i != MAPSEC_BATTLE_FRONTIER && i != MAPSEC_ARTISAN_CAVE)
{
+ // Player is not in the frontier, set
+ // cursor position to the Trainer Card
sPassData->cursorX = 176;
sPassData->cursorY = 104;
}
else
{
+ // Player is in the frontier, set
+ // cursor position to the frontier map
sPassData->cursorX = 176;
sPassData->cursorY = 48;
}
sPassData->battlePoints = gSaveBlock2Ptr->frontier.battlePoints;
sPassData->hasBattleRecord = CanCopyRecordedBattleSaveData();
- sPassData->unkE = 0;
+ sPassData->areaToShow = CURSOR_AREA_NOTHING;
sPassData->trainerStars = CountPlayerTrainerStars();
- for (i = 0; i < 7; i++)
+ for (i = 0; i < NUM_FRONTIER_FACILITIES; i++)
{
if (FlagGet(FLAG_SYS_TOWER_SILVER + i * 2))
sPassData->facilitySymbols[i]++;
@@ -595,60 +634,57 @@ static u32 AllocateFrontierPassData(void (*callback)(void))
sPassData->facilitySymbols[i]++;
}
- return 0;
+ return SUCCESS;
}
static u32 FreeFrontierPassData(void)
{
if (sPassData == NULL)
- return 1;
+ return ERR_ALREADY_DONE;
memset(sPassData, 0, sizeof(*sPassData)); // Why clear data, if it's going to be freed anyway?
FREE_AND_SET_NULL(sPassData);
- return 0;
+ return SUCCESS;
}
static u32 AllocateFrontierPassGfx(void)
{
if (sPassGfx != NULL)
- return 1;
+ return ERR_ALREADY_DONE;
sPassGfx = AllocZeroed(sizeof(*sPassGfx));
if (sPassGfx == NULL)
- return 2;
+ return ERR_ALLOC_FAILED;
- return 0;
+ return SUCCESS;
}
static u32 FreeFrontierPassGfx(void)
{
FreeAllWindowBuffers();
if (sPassGfx == NULL)
- return 1;
+ return ERR_ALREADY_DONE;
- if (sPassGfx->unk28 != NULL)
- FREE_AND_SET_NULL(sPassGfx->unk28);
- if (sPassGfx->unk24 != NULL)
- FREE_AND_SET_NULL(sPassGfx->unk24);
- if (sPassGfx->unk20 != NULL)
- FREE_AND_SET_NULL(sPassGfx->unk20);
+ TRY_FREE_AND_SET_NULL(sPassGfx->battleRecordTilemap);
+ TRY_FREE_AND_SET_NULL(sPassGfx->mapAndCardTilemap);
+ TRY_FREE_AND_SET_NULL(sPassGfx->mapAndCardZoomTilemap);
memset(sPassGfx, 0, sizeof(*sPassGfx)); // Why clear data, if it's going to be freed anyway?
FREE_AND_SET_NULL(sPassGfx);
- return 0;
+ return SUCCESS;
}
-static void VblankCb_FrontierPass(void)
+static void VBlankCB_FrontierPass(void)
{
- if (sPassGfx->setAffine)
+ if (sPassGfx->zooming)
{
SetBgAffine(2,
- gUnknown_085713E0[sPassData->unkE - 1][0] << 8,
- gUnknown_085713E0[sPassData->unkE - 1][1] << 8,
- gUnknown_085713E0[sPassData->unkE - 1][0],
- gUnknown_085713E0[sPassData->unkE - 1][1],
- sPassGfx->unk2E,
- sPassGfx->unk30,
+ sBgAffineCoords[sPassData->areaToShow - 1][0] << 8,
+ sBgAffineCoords[sPassData->areaToShow - 1][1] << 8,
+ sBgAffineCoords[sPassData->areaToShow - 1][0],
+ sBgAffineCoords[sPassData->areaToShow - 1][1],
+ sPassGfx->scaleX,
+ sPassGfx->scaleY,
0);
}
LoadOam();
@@ -716,11 +752,11 @@ static bool32 InitFrontierPass(void)
DeactivateAllTextPrinters();
break;
case 6:
- sPassGfx->unk20 = malloc_and_decompress(gUnknown_085712F8, &sizeOut);
- sPassGfx->unk24 = malloc_and_decompress(gUnknown_08571060, &sizeOut);
- sPassGfx->unk28 = malloc_and_decompress(gUnknown_085712C0, &sizeOut);
- DecompressAndCopyTileDataToVram(1, gUnknown_08DE08C8, 0, 0, 0);
- DecompressAndCopyTileDataToVram(2, gUnknown_08DE2084, 0, 0, 0);
+ sPassGfx->mapAndCardZoomTilemap = malloc_and_decompress(sMapAndCard_Zooming_Tilemap, &sizeOut);
+ sPassGfx->mapAndCardTilemap = malloc_and_decompress(sMapAndCard_ZoomedOut_Tilemap, &sizeOut);
+ sPassGfx->battleRecordTilemap = malloc_and_decompress(sBattleRecord_Tilemap, &sizeOut);
+ DecompressAndCopyTileDataToVram(1, gFrontierPassBg_Gfx, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(2, gFrontierPassMapAndCard_Gfx, 0, 0, 0);
break;
case 7:
if (FreeTempTileDataBuffersIfPossible())
@@ -733,12 +769,12 @@ static bool32 InitFrontierPass(void)
CopyBgTilemapBufferToVram(2);
break;
case 8:
- LoadPalette(gUnknown_08DE07C8[0], 0, 0x1A0);
- LoadPalette(gUnknown_08DE07C8[1 + sPassData->trainerStars], 0x10, 0x20);
+ LoadPalette(gFrontierPassBg_Pal[0], 0, 0x1A0);
+ LoadPalette(gFrontierPassBg_Pal[1 + sPassData->trainerStars], 0x10, 0x20);
LoadPalette(GetTextWindowPalette(0), 0xF0, 0x20);
- sub_80C629C();
- sub_80C6104(sPassData->cursorArea, sPassData->previousCursorArea);
- if (sPassData->unkE == 1 || sPassData->unkE == 2)
+ DrawFrontierPassBg();
+ UpdateAreaHighlight(sPassData->cursorArea, sPassData->previousCursorArea);
+ if (sPassData->areaToShow == CURSOR_AREA_MAP || sPassData->areaToShow == CURSOR_AREA_CARD)
{
sPassData->state = 0;
return TRUE;
@@ -750,9 +786,9 @@ static bool32 InitFrontierPass(void)
ShowBg(1);
ShowBg(2);
LoadCursorAndSymbolSprites();
- SetVBlankCallback(VblankCb_FrontierPass);
- BlendPalettes(PALETTES_ALL, 0x10, RGB_BLACK);
- BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK);
+ SetVBlankCallback(VBlankCB_FrontierPass);
+ BlendPalettes(PALETTES_ALL, 16, RGB_BLACK);
+ BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK);
break;
case 10:
AnimateSprites();
@@ -773,9 +809,9 @@ static bool32 HideFrontierPass(void)
switch (sPassData->state)
{
case 0:
- if (sPassData->unkE != 1 && sPassData->unkE != 2)
+ if (sPassData->areaToShow != CURSOR_AREA_MAP && sPassData->areaToShow != CURSOR_AREA_CARD)
{
- BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK);
+ BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
}
else
{
@@ -822,11 +858,11 @@ static u8 GetCursorAreaFromCoords(s16 x, s16 y)
{
u8 i;
- // Minus/Plus 1, because the table doesn't take into account the nothing field.
+ // Minus/Plus 1, because the table doesn't take CURSOR_AREA_NOTHING into account.
for (i = 0; i < CURSOR_AREA_COUNT - 1; i++)
{
if (sPassAreasLayout[i].yStart <= y && sPassAreasLayout[i].yEnd >= y
- && sPassAreasLayout[i].xStart <= x && sPassAreasLayout[i].xEnd >= x)
+ && sPassAreasLayout[i].xStart <= x && sPassAreasLayout[i].xEnd >= x)
{
if (i >= CURSOR_AREA_SYMBOL - 1 && sPassData->facilitySymbols[i - CURSOR_AREA_SYMBOL + 1] == 0)
break;
@@ -835,9 +871,12 @@ static u8 GetCursorAreaFromCoords(s16 x, s16 y)
}
}
- return 0;
+ return CURSOR_AREA_NOTHING;
}
+// For Task_PassAreaZoom
+#define tZoomOut data[0]
+
void CB2_ReshowFrontierPass(void)
{
u8 taskId;
@@ -845,16 +884,16 @@ void CB2_ReshowFrontierPass(void)
if (!InitFrontierPass())
return;
- switch (sPassData->unkE)
+ switch (sPassData->areaToShow)
{
- case 1:
- case 2:
- taskId = CreateTask(Task_DoFadeEffect, 0);
- gTasks[taskId].data[0] = TRUE;
+ case CURSOR_AREA_MAP:
+ case CURSOR_AREA_CARD:
+ taskId = CreateTask(Task_PassAreaZoom, 0);
+ gTasks[taskId].tZoomOut = TRUE;
break;
- case 3:
+ case CURSOR_AREA_RECORD:
default:
- sPassData->unkE = 0;
+ sPassData->areaToShow = CURSOR_AREA_NOTHING;
taskId = CreateTask(Task_HandleFrontierPassInput, 0);
break;
}
@@ -889,19 +928,19 @@ static void CB2_ShowFrontierPassFeature(void)
if (!HideFrontierPass())
return;
- switch (sPassData->unkE)
+ switch (sPassData->areaToShow)
{
- case 1:
+ case CURSOR_AREA_MAP:
ShowFrontierMap(CB2_ReshowFrontierPass);
break;
- case 3:
+ case CURSOR_AREA_RECORD:
sSavedPassData.callback = sPassData->callback;
sSavedPassData.cursorX = sPassData->cursorX;
sSavedPassData.cursorY = sPassData->cursorY;
FreeFrontierPassData();
PlayRecordedBattle(CB2_ReturnFromRecord);
break;
- case 2:
+ case CURSOR_AREA_CARD:
ShowPlayerTrainerCard(CB2_ReshowFrontierPass);
break;
}
@@ -914,15 +953,15 @@ static bool32 TryCallPassAreaFunction(u8 taskId, u8 cursorArea)
case CURSOR_AREA_RECORD:
if (!sPassData->hasBattleRecord)
return FALSE;
- sPassData->unkE = 3;
+ sPassData->areaToShow = CURSOR_AREA_RECORD;
DestroyTask(taskId);
SetMainCallback2(CB2_ShowFrontierPassFeature);
break;
case CURSOR_AREA_MAP:
case CURSOR_AREA_CARD:
- sPassData->unkE = cursorArea;
- gTasks[taskId].func = Task_DoFadeEffect;
- gTasks[taskId].data[0] = FALSE;
+ sPassData->areaToShow = cursorArea;
+ gTasks[taskId].func = Task_PassAreaZoom;
+ gTasks[taskId].tZoomOut = FALSE;
break;
default:
return FALSE;
@@ -1004,77 +1043,92 @@ static void Task_HandleFrontierPassInput(u8 taskId)
PrintAreaDescription(var);
sPassData->previousCursorArea = sPassData->cursorArea;
sPassData->cursorArea = var;
- sub_80C6104(sPassData->cursorArea, sPassData->previousCursorArea);
+ UpdateAreaHighlight(sPassData->cursorArea, sPassData->previousCursorArea);
}
}
}
-static void Task_DoFadeEffect(u8 taskId)
+#define tScaleX data[1]
+#define tScaleY data[2]
+#define tScaleSpeedX data[3]
+#define tScaleSpeedY data[4]
+
+// Zoom in/out for the Frontier map or the trainer card
+static void Task_PassAreaZoom(u8 taskId)
{
s16 *data = gTasks[taskId].data;
switch (sPassData->state)
{
case 0:
- if (!data[0])
+ // Initialize the zoom, start fading in/out
+ if (!tZoomOut)
{
- sub_80C5F58(TRUE, FALSE);
- data[1] = Q_8_8(1);
- data[2] = Q_8_8(1);
- data[3] = 0x15;
- data[4] = 0x15;
- BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_WHITE);
+ // Zooming in to map/card screen
+ ShowHideZoomingArea(TRUE, FALSE);
+ tScaleX = Q_8_8(1);
+ tScaleY = Q_8_8(1);
+ tScaleSpeedX = 0x15;
+ tScaleSpeedY = 0x15;
+ BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_WHITE);
}
else
{
- data[1] = Q_8_8(1.984375); // 1 and 63/64
- data[2] = Q_8_8(1.984375);
- data[3] = -0x15;
- data[4] = -0x15;
+ // Zooming out of map/card screen back to frontier pass
+ tScaleX = Q_8_8(1.984375); // 1 and 63/64
+ tScaleY = Q_8_8(1.984375);
+ tScaleSpeedX = -0x15;
+ tScaleSpeedY = -0x15;
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
ShowBg(0);
ShowBg(1);
ShowBg(2);
LoadCursorAndSymbolSprites();
- SetVBlankCallback(VblankCb_FrontierPass);
- BlendPalettes(PALETTES_ALL, 0x10, RGB_WHITE);
- BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_WHITE);
+ SetVBlankCallback(VBlankCB_FrontierPass);
+ BlendPalettes(PALETTES_ALL, 16, RGB_WHITE);
+ BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_WHITE);
}
- sPassGfx->setAffine = TRUE;
- sPassGfx->unk2E = MathUtil_Inv16(data[1]);
- sPassGfx->unk30 = MathUtil_Inv16(data[2]);
+ sPassGfx->zooming = TRUE;
+ sPassGfx->scaleX = MathUtil_Inv16(tScaleX);
+ sPassGfx->scaleY = MathUtil_Inv16(tScaleY);
break;
case 1:
+ // Update the fade and zoom
UpdatePaletteFade();
- data[1] += data[3];
- data[2] += data[4];
- sPassGfx->unk2E = MathUtil_Inv16(data[1]);
- sPassGfx->unk30 = MathUtil_Inv16(data[2]);
- if (!data[0])
+ tScaleX += tScaleSpeedX;
+ tScaleY += tScaleSpeedY;
+ sPassGfx->scaleX = MathUtil_Inv16(tScaleX);
+ sPassGfx->scaleY = MathUtil_Inv16(tScaleY);
+
+ // Check if zoom hasn't reached target
+ if (!tZoomOut)
{
- if (data[1] <= Q_8_8(1.984375))
+ if (tScaleX <= Q_8_8(1.984375))
return;
}
else
{
- if (data[1] != Q_8_8(1))
+ if (tScaleX != Q_8_8(1))
return;
}
break;
case 2:
- if (sPassGfx->setAffine) // Nonsensical check.
- sPassGfx->setAffine = FALSE;
+ if (sPassGfx->zooming)
+ sPassGfx->zooming = FALSE;
if (UpdatePaletteFade())
return;
- if (!data[0])
+
+ if (!tZoomOut)
{
+ // Zoomed in and faded out, switch to map or trainer card
DestroyTask(taskId);
SetMainCallback2(CB2_ShowFrontierPassFeature);
}
else
{
- sub_80C5F58(FALSE, FALSE);
- sPassData->unkE = 0;
+ // Zoomed out and faded in, return to frontier pass
+ ShowHideZoomingArea(FALSE, FALSE);
+ sPassData->areaToShow = CURSOR_AREA_NOTHING;
gTasks[taskId].func = Task_HandleFrontierPassInput;
}
SetBgAttribute(2, BG_ATTR_WRAPAROUND, 0);
@@ -1120,8 +1174,9 @@ static void ShowAndPrintWindows(void)
static void PrintAreaDescription(u8 cursorArea)
{
FillWindowPixelBuffer(WINDOW_DESCRIPTION, PIXEL_FILL(0));
+
if (cursorArea == CURSOR_AREA_RECORD && !sPassData->hasBattleRecord)
- AddTextPrinterParameterized3(WINDOW_DESCRIPTION, 1, 2, 0, sTextColors[1], 0, sPassAreaDescriptions[0]);
+ AddTextPrinterParameterized3(WINDOW_DESCRIPTION, 1, 2, 0, sTextColors[1], 0, sPassAreaDescriptions[CURSOR_AREA_NOTHING]);
else if (cursorArea != CURSOR_AREA_NOTHING)
AddTextPrinterParameterized3(WINDOW_DESCRIPTION, 1, 2, 0, sTextColors[1], 0, sPassAreaDescriptions[cursorArea]);
@@ -1129,19 +1184,19 @@ static void PrintAreaDescription(u8 cursorArea)
CopyBgTilemapBufferToVram(0);
}
-static void sub_80C5F58(bool8 arg0, bool8 arg1)
+static void ShowHideZoomingArea(bool8 show, bool8 zoomedIn)
{
- switch (sPassData->unkE)
+ switch (sPassData->areaToShow)
{
- case 1:
- if (arg0)
- CopyToBgTilemapBufferRect_ChangePalette(2, sPassGfx->unk20, 16, 3, 12, 7, 16);
+ case CURSOR_AREA_MAP:
+ if (show)
+ CopyToBgTilemapBufferRect_ChangePalette(2, sPassGfx->mapAndCardZoomTilemap, 16, 3, 12, 7, 16);
else
FillBgTilemapBufferRect(2, 0, 16, 3, 12, 7, 16);
break;
- case 2:
- if (arg0)
- CopyToBgTilemapBufferRect_ChangePalette(2, sPassGfx->unk20 + 84, 16, 10, 12, 7, 16);
+ case CURSOR_AREA_CARD:
+ if (show)
+ CopyToBgTilemapBufferRect_ChangePalette(2, sPassGfx->mapAndCardZoomTilemap + 84, 16, 10, 12, 7, 16);
else
FillBgTilemapBufferRect(2, 0, 16, 10, 12, 7, 16);
break;
@@ -1150,13 +1205,13 @@ static void sub_80C5F58(bool8 arg0, bool8 arg1)
}
CopyBgTilemapBufferToVram(2);
- if (arg1)
+ if (zoomedIn)
{
SetBgAffine(2,
- gUnknown_085713E0[sPassData->unkE - 1][0] << 8,
- gUnknown_085713E0[sPassData->unkE - 1][1] << 8,
- gUnknown_085713E0[sPassData->unkE - 1][0],
- gUnknown_085713E0[sPassData->unkE - 1][1],
+ sBgAffineCoords[sPassData->areaToShow - 1][0] << 8,
+ sBgAffineCoords[sPassData->areaToShow - 1][1] << 8,
+ sBgAffineCoords[sPassData->areaToShow - 1][0],
+ sBgAffineCoords[sPassData->areaToShow - 1][1],
MathUtil_Inv16(Q_8_8(1.984375)), // 1 and 63/64
MathUtil_Inv16(Q_8_8(1.984375)),
0);
@@ -1164,71 +1219,75 @@ static void sub_80C5F58(bool8 arg0, bool8 arg1)
else
{
SetBgAffine(2,
- gUnknown_085713E0[sPassData->unkE - 1][0] << 8,
- gUnknown_085713E0[sPassData->unkE - 1][1] << 8,
- gUnknown_085713E0[sPassData->unkE - 1][0],
- gUnknown_085713E0[sPassData->unkE - 1][1],
+ sBgAffineCoords[sPassData->areaToShow - 1][0] << 8,
+ sBgAffineCoords[sPassData->areaToShow - 1][1] << 8,
+ sBgAffineCoords[sPassData->areaToShow - 1][0],
+ sBgAffineCoords[sPassData->areaToShow - 1][1],
MathUtil_Inv16(Q_8_8(1)),
MathUtil_Inv16(Q_8_8(1)),
0);
}
}
-static void sub_80C6104(u8 cursorArea, u8 previousCursorArea)
+static void UpdateAreaHighlight(u8 cursorArea, u8 previousCursorArea)
{
+ #define NON_HIGHLIGHT_AREA(area)((area) == CURSOR_AREA_NOTHING || (area) > CURSOR_AREA_CANCEL)
+
+ // If moving off highlightable area, unhighlight it
switch (previousCursorArea)
{
case CURSOR_AREA_MAP:
- CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk24, 16, 3, 12, 7, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->mapAndCardTilemap, 16, 3, 12, 7, 17);
break;
case CURSOR_AREA_CARD:
- CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk24 + 336, 16, 10, 12, 7, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->mapAndCardTilemap + 336, 16, 10, 12, 7, 17);
break;
case CURSOR_AREA_RECORD:
if (sPassData->hasBattleRecord)
- CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk28, 2, 10, 12, 3, 17);
- else if (cursorArea == CURSOR_AREA_NOTHING || cursorArea > CURSOR_AREA_CANCEL)
+ CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->battleRecordTilemap, 2, 10, 12, 3, 17);
+ else if (NON_HIGHLIGHT_AREA(cursorArea))
return;
break;
case CURSOR_AREA_CANCEL:
- CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_08DE3350, 21, 0, 9, 2, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(1, gFrontierPassCancelButton_Tilemap, 21, 0, 9, 2, 17);
break;
default:
- if (cursorArea == CURSOR_AREA_NOTHING || cursorArea > CURSOR_AREA_CANCEL)
+ if (NON_HIGHLIGHT_AREA(cursorArea))
return;
break;
}
+ // If moving on to highlightable area, highlight it
switch (cursorArea)
{
case CURSOR_AREA_MAP:
- CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk24 + 168, 16, 3, 12, 7, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->mapAndCardTilemap + 168, 16, 3, 12, 7, 17);
break;
case CURSOR_AREA_CARD:
- CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk24 + 504, 16, 10, 12, 7, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->mapAndCardTilemap + 504, 16, 10, 12, 7, 17);
break;
case CURSOR_AREA_RECORD:
if (sPassData->hasBattleRecord)
- CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk28 + 72, 2, 10, 12, 3, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->battleRecordTilemap + 72, 2, 10, 12, 3, 17);
else
return;
- break; //needed to match
+ break;
case CURSOR_AREA_CANCEL:
- CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_08DE3374, 21, 0, 9, 2, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(1, gFrontierPassCancelButtonHighlighted_Tilemap, 21, 0, 9, 2, 17);
break;
default:
- if (previousCursorArea == CURSOR_AREA_NOTHING || previousCursorArea > CURSOR_AREA_CANCEL)
+ if (NON_HIGHLIGHT_AREA(previousCursorArea))
return;
}
CopyBgTilemapBufferToVram(1);
}
-static void sub_80C629C(void)
+static void DrawFrontierPassBg(void)
{
- CopyToBgTilemapBuffer(1, gUnknown_08DE3060, 0, 0);
- sub_80C6104(sPassData->cursorArea, sPassData->previousCursorArea);
- sub_80C5F58(TRUE, sPassData->unkE);
+ CopyToBgTilemapBuffer(1, gFrontierPassBg_Tilemap, 0, 0);
+ UpdateAreaHighlight(sPassData->cursorArea, sPassData->previousCursorArea);
+ ShowHideZoomingArea(TRUE, sPassData->areaToShow); // If returning to frontier pass from map/card (areaToShow will be != 0)
ShowAndPrintWindows();
CopyBgTilemapBufferToVram(1);
}
@@ -1253,7 +1312,7 @@ static void LoadCursorAndSymbolSprites(void)
{
struct SpriteTemplate sprite = sSpriteTemplate_Medal;
- sprite.paletteTag += sPassData->facilitySymbols[i] - 1;
+ sprite.paletteTag += sPassData->facilitySymbols[i] - 1; // Adds 1 if gold for TAG_MEDAL_GOLD
spriteId = CreateSprite(&sprite, sPassAreasLayout[i + CURSOR_AREA_SYMBOL - 1].xStart + 8, sPassAreasLayout[i + CURSOR_AREA_SYMBOL - 1].yStart + 6, i + 1);
sPassGfx->symbolSprites[i] = &gSprites[spriteId];
sPassGfx->symbolSprites[i]->oam.priority = 2;
@@ -1277,11 +1336,11 @@ static void FreeCursorAndSymbolSprites(void)
}
}
FreeAllSpritePalettes();
- FreeSpriteTilesByTag(2);
- FreeSpriteTilesByTag(0);
+ FreeSpriteTilesByTag(TAG_MEDAL_SILVER);
+ FreeSpriteTilesByTag(TAG_CURSOR);
}
-static void SpriteCb_Dummy(struct Sprite *sprite)
+static void SpriteCB_PlayerHead(struct Sprite *sprite)
{
}
@@ -1349,14 +1408,14 @@ static bool32 InitFrontierMap(void)
InitWindows(sMapWindowTemplates);
DeactivateAllTextPrinters();
PrintOnFrontierMap();
- DecompressAndCopyTileDataToVram(1, gUnknown_0856FBBC, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(1, sMapScreen_Gfx, 0, 0, 0);
break;
case 5:
if (FreeTempTileDataBuffersIfPossible())
return FALSE;
- LoadPalette(gUnknown_08DE07C8[0], 0, 0x1A0);
+ LoadPalette(gFrontierPassBg_Pal[0], 0, 0x1A0);
LoadPalette(GetTextWindowPalette(0), 0xF0, 0x20);
- CopyToBgTilemapBuffer(2, gUnknown_08570E00, 0, 0);
+ CopyToBgTilemapBuffer(2, sMapScreen_Tilemap, 0, 0);
CopyBgTilemapBufferToVram(2);
break;
case 6:
@@ -1365,9 +1424,9 @@ static bool32 InitFrontierMap(void)
ShowBg(1);
ShowBg(2);
InitFrontierMapSprites();
- SetVBlankCallback(VblankCb_FrontierPass);
- BlendPalettes(PALETTES_ALL, 0x10, RGB_WHITE);
- BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_WHITE);
+ SetVBlankCallback(VBlankCB_FrontierPass);
+ BlendPalettes(PALETTES_ALL, 16, RGB_WHITE);
+ BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_WHITE);
break;
case 7:
if (UpdatePaletteFade())
@@ -1385,7 +1444,7 @@ static bool32 ExitFrontierMap(void)
switch (sPassData->state)
{
case 0:
- BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_WHITE);
+ BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_WHITE);
break;
case 1:
if (UpdatePaletteFade())
@@ -1404,17 +1463,17 @@ static bool32 ExitFrontierMap(void)
if (sMapData->cursorSprite != NULL)
{
DestroySprite(sMapData->cursorSprite);
- FreeSpriteTilesByTag(0);
+ FreeSpriteTilesByTag(TAG_CURSOR);
}
if (sMapData->mapIndicatorSprite != NULL)
{
DestroySprite(sMapData->mapIndicatorSprite);
- FreeSpriteTilesByTag(1);
+ FreeSpriteTilesByTag(TAG_MAP_INDICATOR);
}
if (sMapData->playerHeadSprite != NULL)
{
DestroySprite(sMapData->playerHeadSprite);
- FreeSpriteTilesByTag(4);
+ FreeSpriteTilesByTag(TAG_HEAD_MALE);
}
FreeAllWindowBuffers();
break;
@@ -1435,11 +1494,14 @@ static bool32 ExitFrontierMap(void)
return FALSE;
}
+#define tState data[0]
+#define tMoveSteps data[1]
+
static void Task_HandleFrontierMap(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- switch (data[0])
+ switch (tState)
{
case 0:
if (InitFrontierMap())
@@ -1449,47 +1511,47 @@ static void Task_HandleFrontierMap(u8 taskId)
if (JOY_NEW(B_BUTTON))
{
PlaySE(SE_PC_OFF);
- data[0] = 4;
+ tState = 4;
}
else if (JOY_NEW(DPAD_DOWN))
{
if (sMapData->cursorPos >= NUM_FRONTIER_FACILITIES - 1)
HandleFrontierMapCursorMove(0);
else
- data[0] = 2;
+ tState = 2;
}
else if (JOY_NEW(DPAD_UP))
{
if (sMapData->cursorPos == 0)
HandleFrontierMapCursorMove(1);
else
- data[0] = 3;
+ tState = 3;
}
return;
case 2:
- if (data[1] > 3)
+ if (tMoveSteps > 3)
{
HandleFrontierMapCursorMove(0);
- data[1] = 0;
- data[0] = 1;
+ tMoveSteps = 0;
+ tState = 1;
}
else
{
sMapData->cursorSprite->y += 4;
- data[1]++;
+ tMoveSteps++;
}
return;
case 3:
- if (data[1] > 3)
+ if (tMoveSteps > 3)
{
HandleFrontierMapCursorMove(1);
- data[1] = 0;
- data[0] = 1;
+ tMoveSteps = 0;
+ tState = 1;
}
else
{
sMapData->cursorSprite->y -= 4;
- data[1]++;
+ tMoveSteps++;
}
return;
case 4:
@@ -1502,31 +1564,42 @@ static void Task_HandleFrontierMap(u8 taskId)
return;
}
- data[0]++;
+ tState++;
}
static u8 MapNumToFrontierFacilityId(u16 mapNum) // id + 1, zero means not a frontier map number
{
+ // In Battle Tower
if ((mapNum >= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_LOBBY) && mapNum <= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM))
- || (mapNum >= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_PARTNER_ROOM) && mapNum <= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM)))
+ || (mapNum >= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_PARTNER_ROOM) && mapNum <= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM)))
return FRONTIER_FACILITY_TOWER + 1;
+
+ // In Battle Dome
else if (mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_DOME_LOBBY)
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR)
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM)
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_DOME_BATTLE_ROOM))
return FRONTIER_FACILITY_DOME + 1;
+
+ // In Battle Palace
else if (mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PALACE_LOBBY)
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR)
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM))
return FRONTIER_FACILITY_PALACE + 1;
+
+ // In Battle Arena
else if (mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_ARENA_LOBBY)
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_ARENA_CORRIDOR)
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_ARENA_BATTLE_ROOM))
return FRONTIER_FACILITY_ARENA + 1;
+
+ // In Battle Factory
else if (mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY)
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM)
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_FACTORY_BATTLE_ROOM))
return FRONTIER_FACILITY_FACTORY + 1;
+
+ // In Battle Pike
else if (mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_LOBBY)
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR)
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM)
@@ -1534,10 +1607,13 @@ static u8 MapNumToFrontierFacilityId(u16 mapNum) // id + 1, zero means not a fro
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_ROOM_FINAL)
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS))
return FRONTIER_FACILITY_PIKE + 1;
+
+ // In Battle Pyramid
else if (mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY)
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR)
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PYRAMID_TOP))
return FRONTIER_FACILITY_PYRAMID + 1;
+
else
return 0;
}
@@ -1606,8 +1682,8 @@ static void InitFrontierMapSprites(void)
}
LoadCompressedSpriteSheet(sHeadsSpriteSheet);
- sprite = sSpriteTemplate_Head;
- sprite.paletteTag = gSaveBlock2Ptr->playerGender + 4;
+ sprite = sSpriteTemplate_PlayerHead;
+ sprite.paletteTag = gSaveBlock2Ptr->playerGender + TAG_HEAD_MALE; // TAG_HEAD_FEMALE if gender is FEMALE
if (id != 0)
{
spriteId = CreateSprite(&sprite, x, y, 0);
@@ -1678,7 +1754,7 @@ static void HandleFrontierMapCursorMove(u8 direction)
FillWindowPixelBuffer(MAP_WINDOW_DESCRIPTION, PIXEL_FILL(0));
AddTextPrinterParameterized3(MAP_WINDOW_DESCRIPTION, 1, 4, 0, sTextColors[0], 0, sMapLandmarks[sMapData->cursorPos].description);
- for (i = 0; i < 3; i++)
+ for (i = 0; i < MAP_WINDOW_COUNT; i++)
CopyWindowToVram(i, 3);
CopyBgTilemapBufferToVram(0);
diff --git a/src/graphics.c b/src/graphics.c
index c3ac6c2df..37d953313 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -1533,14 +1533,12 @@ const u32 gTitleScreenPressStartGfx[] = INCBIN_U32("graphics/title_screen/press_
const u32 gUnknown_08DE0644[] = INCBIN_U32("graphics/title_screen/title_screen2.bin.lz");
-// more trainer card stuff
-
-const u16 gUnknown_08DE07C8[][16] = INCBIN_U16("graphics/frontier_pass/tiles.gbapal");// size in LoadPalette calls is reported as 0xD0 << 1, which is 0x1A0, but palette is only 0x100 bytes long so it loads garbage as well
-const u32 gUnknown_08DE08C8[] = INCBIN_U32("graphics/frontier_pass/tiles.4bpp.lz");
-const u32 gUnknown_08DE2084[] = INCBIN_U32("graphics/frontier_pass/tiles2.8bpp.lz");
-const u32 gUnknown_08DE3060[] = INCBIN_U32("graphics/frontier_pass/tiles.bin.lz");
-const u16 gUnknown_08DE3350[] = INCBIN_U16("graphics/frontier_pass/tilemap1.bin");
-const u16 gUnknown_08DE3374[] = INCBIN_U16("graphics/frontier_pass/tilemap2.bin");
+const u16 gFrontierPassBg_Pal[][16] = INCBIN_U16("graphics/frontier_pass/bg.gbapal");// size in LoadPalette calls is reported as 0xD0 << 1, which is 0x1A0, but palette is only 0x100 bytes long so it loads garbage as well
+const u32 gFrontierPassBg_Gfx[] = INCBIN_U32("graphics/frontier_pass/bg.4bpp.lz");
+const u32 gFrontierPassMapAndCard_Gfx[] = INCBIN_U32("graphics/frontier_pass/map_and_card.8bpp.lz");
+const u32 gFrontierPassBg_Tilemap[] = INCBIN_U32("graphics/frontier_pass/bg.bin.lz");
+const u16 gFrontierPassCancelButton_Tilemap[] = INCBIN_U16("graphics/frontier_pass/cancel.bin");
+const u16 gFrontierPassCancelButtonHighlighted_Tilemap[] = INCBIN_U16("graphics/frontier_pass/cancel_highlighted.bin");
// Berry Crush
const u16 gBerryCrush_Crusher_Pal[] = INCBIN_U16("graphics/berry_crush/crusher.gbapal");
diff --git a/src/international_string_util.c b/src/international_string_util.c
index ab812de89..eb2ec16e7 100644
--- a/src/international_string_util.c
+++ b/src/international_string_util.c
@@ -34,11 +34,11 @@ int GetStringWidthDifference(int fontId, const u8 *str, int totalWidth, int lett
return 0;
}
-int GetMaxWidthInMenuTable(const struct MenuAction *str, int arg1)
+int GetMaxWidthInMenuTable(const struct MenuAction *str, int numActions)
{
int i, var;
- for (var = 0, i = 0; i < arg1; i++)
+ for (var = 0, i = 0; i < numActions; i++)
{
int stringWidth = GetStringWidth(1, str[i].text, 0);
if (stringWidth > var)
diff --git a/src/item_menu.c b/src/item_menu.c
index 39abf883a..4fc7cc06c 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -551,7 +551,7 @@ void CB2_GoToSellMenu(void)
void CB2_GoToItemDepositMenu(void)
{
- GoToBagMenu(ITEMMENULOCATION_ITEMPC, POCKETS_COUNT, sub_816B31C);
+ GoToBagMenu(ITEMMENULOCATION_ITEMPC, POCKETS_COUNT, CB2_PlayerPCExitBagMenu);
}
void ApprenticeOpenBagMenu(void)
@@ -1077,7 +1077,7 @@ void All_CalculateNItemsAndMaxShowed(void)
void SetInitialScrollAndCursorPositions(u8 pocketId)
{
- sub_812225C(&gBagPositionStruct.scrollPosition[pocketId], &gBagPositionStruct.cursorPosition[pocketId], gBagMenu->numShownItems[pocketId], gBagMenu->numItemStacks[pocketId]);
+ SetCursorWithinListBounds(&gBagPositionStruct.scrollPosition[pocketId], &gBagPositionStruct.cursorPosition[pocketId], gBagMenu->numShownItems[pocketId], gBagMenu->numItemStacks[pocketId]);
}
static void SetPocketListPositions(void)
diff --git a/src/menu_helpers.c b/src/menu_helpers.c
index dce00e51e..c5cbcddb6 100644
--- a/src/menu_helpers.c
+++ b/src/menu_helpers.c
@@ -323,36 +323,38 @@ bool8 MenuHelpers_CallLinkSomething(void)
return TRUE;
}
-void sub_812220C(struct ItemSlot *slots, u8 count, u8 *arg2, u8 *usedSlotsCount, u8 maxUsedSlotsCount)
+void SetItemListPerPageCount(struct ItemSlot *slots, u8 slotsCount, u8 *pageItems, u8 *totalItems, u8 maxPerPage)
{
u16 i;
struct ItemSlot *slots_ = slots;
- (*usedSlotsCount) = 0;
- for (i = 0; i < count; i++)
+ // Count the number of non-empty item slots
+ *totalItems = 0;
+ for (i = 0; i < slotsCount; i++)
{
if (slots_[i].itemId != ITEM_NONE)
- (*usedSlotsCount)++;
+ (*totalItems)++;
}
+ (*totalItems)++; // + 1 for 'Cancel'
- (*usedSlotsCount)++;
- if ((*usedSlotsCount) > maxUsedSlotsCount)
- *arg2 = maxUsedSlotsCount;
+ // Set number of items per page
+ if (*totalItems > maxPerPage)
+ *pageItems = maxPerPage;
else
- *arg2 = (*usedSlotsCount);
+ *pageItems = *totalItems;
}
-void sub_812225C(u16 *scrollOffset, u16 *cursorPos, u8 maxShownItems, u8 numItems)
+void SetCursorWithinListBounds(u16 *scrollOffset, u16 *cursorPos, u8 maxShownItems, u8 totalItems)
{
- if (*scrollOffset != 0 && *scrollOffset + maxShownItems > numItems)
- *scrollOffset = numItems - maxShownItems;
+ if (*scrollOffset != 0 && *scrollOffset + maxShownItems > totalItems)
+ *scrollOffset = totalItems - maxShownItems;
- if (*scrollOffset + *cursorPos >= numItems)
+ if (*scrollOffset + *cursorPos >= totalItems)
{
- if (numItems == 0)
+ if (totalItems == 0)
*cursorPos = 0;
else
- *cursorPos = numItems - 1;
+ *cursorPos = totalItems - 1;
}
}
diff --git a/src/menu_specialized.c b/src/menu_specialized.c
index eb8cae72f..2fd12f2fd 100644
--- a/src/menu_specialized.c
+++ b/src/menu_specialized.c
@@ -28,10 +28,10 @@
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
-EWRAM_DATA static u8 sUnknown_0203CF48[3] = {0};
-EWRAM_DATA static struct ListMenuItem *sUnknown_0203CF4C = NULL;
+EWRAM_DATA static u8 sMailboxWindowIds[MAILBOXWIN_COUNT] = {0};
+EWRAM_DATA static struct ListMenuItem *sMailboxList = NULL;
-static void sub_81D1E7C(s32 itemIndex, bool8 onInit, struct ListMenu *list);
+static void MailboxMenu_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list);
static void sub_81D24A4(struct ConditionGraph *a0);
static void sub_81D2634(struct ConditionGraph *a0);
static void MoveRelearnerCursorCallback(s32 itemIndex, bool8 onInit, struct ListMenu *list);
@@ -40,33 +40,33 @@ static void SetNextConditionSparkle(struct Sprite *sprite);
static void SpriteCB_ConditionSparkle(struct Sprite *sprite);
static void ShowAllConditionSparkles(struct Sprite *sprite);
-static const struct WindowTemplate sUnknown_086253E8[] =
+static const struct WindowTemplate sWindowTemplates_MailboxMenu[MAILBOXWIN_COUNT] =
{
- {
+ [MAILBOXWIN_TITLE] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 1,
.width = 8,
.height = 2,
- .paletteNum = 0xF,
+ .paletteNum = 15,
.baseBlock = 0x8
},
- {
+ [MAILBOXWIN_LIST] = {
.bg = 0,
.tilemapLeft = 21,
.tilemapTop = 1,
.width = 8,
.height = 18,
- .paletteNum = 0xF,
+ .paletteNum = 15,
.baseBlock = 0x18
},
- {
+ [MAILBOXWIN_OPTIONS] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 1,
.width = 11,
.height = 8,
- .paletteNum = 0xF,
+ .paletteNum = 15,
.baseBlock = 0x18
}
};
@@ -207,53 +207,55 @@ static const struct ListMenuTemplate sMoveRelearnerMovesListTemplate =
.cursorKind = 0
};
-bool8 sub_81D1C44(u8 count)
+bool8 MailboxMenu_Alloc(u8 count)
{
u8 i;
- sUnknown_0203CF4C = Alloc(count * sizeof(*sUnknown_0203CF4C) + sizeof(*sUnknown_0203CF4C));
- if (sUnknown_0203CF4C == NULL)
+ // + 1 to count for 'Cancel'
+ sMailboxList = Alloc((count + 1) * sizeof(*sMailboxList));
+ if (sMailboxList == NULL)
return FALSE;
- for (i = 0; i < ARRAY_COUNT(sUnknown_0203CF48); i++)
- sUnknown_0203CF48[i] = WINDOW_NONE;
+ for (i = 0; i < ARRAY_COUNT(sMailboxWindowIds); i++)
+ sMailboxWindowIds[i] = WINDOW_NONE;
return TRUE;
}
-u8 sub_81D1C84(u8 a0)
+u8 MailboxMenu_AddWindow(u8 windowIdx)
{
- if (sUnknown_0203CF48[a0] == WINDOW_NONE)
+ if (sMailboxWindowIds[windowIdx] == WINDOW_NONE)
{
- if (a0 == 2)
+ if (windowIdx == MAILBOXWIN_OPTIONS)
{
- struct WindowTemplate template = sUnknown_086253E8[2];
+ struct WindowTemplate template = sWindowTemplates_MailboxMenu[windowIdx];
template.width = GetMaxWidthInMenuTable(&gMailboxMailOptions[0], 4);
- sUnknown_0203CF48[2] = AddWindow(&template);
+ sMailboxWindowIds[windowIdx] = AddWindow(&template);
}
- else
+ else // MAILBOXWIN_TITLE or MAILBOXWIN_LIST
{
- sUnknown_0203CF48[a0] = AddWindow(&sUnknown_086253E8[a0]);
+ sMailboxWindowIds[windowIdx] = AddWindow(&sWindowTemplates_MailboxMenu[windowIdx]);
}
- SetStandardWindowBorderStyle(sUnknown_0203CF48[a0], 0);
+ SetStandardWindowBorderStyle(sMailboxWindowIds[windowIdx], 0);
}
- return sUnknown_0203CF48[a0];
+ return sMailboxWindowIds[windowIdx];
}
-void sub_81D1D04(u8 a0)
+void MailboxMenu_RemoveWindow(u8 windowIdx)
{
- ClearStdWindowAndFrameToTransparent(sUnknown_0203CF48[a0], 0);
- ClearWindowTilemap(sUnknown_0203CF48[a0]);
- RemoveWindow(sUnknown_0203CF48[a0]);
- sUnknown_0203CF48[a0] = WINDOW_NONE;
+ ClearStdWindowAndFrameToTransparent(sMailboxWindowIds[windowIdx], 0);
+ ClearWindowTilemap(sMailboxWindowIds[windowIdx]);
+ RemoveWindow(sMailboxWindowIds[windowIdx]);
+ sMailboxWindowIds[windowIdx] = WINDOW_NONE;
}
-static u8 sub_81D1D34(u8 a0)
+// Unused
+static u8 MailboxMenu_GetWindowId(u8 windowIdx)
{
- return sUnknown_0203CF48[a0];
+ return sMailboxWindowIds[windowIdx];
}
-static void sub_81D1D44(u8 windowId, u32 itemId, u8 y)
+static void MailboxMenu_ItemPrintFunc(u8 windowId, u32 itemId, u8 y)
{
u8 buffer[30];
u16 length;
@@ -269,21 +271,21 @@ static void sub_81D1D44(u8 windowId, u32 itemId, u8 y)
AddTextPrinterParameterized4(windowId, 1, 8, y, 0, 0, sPlayerNameTextColors, -1, buffer);
}
-u8 sub_81D1DC0(struct PlayerPCItemPageStruct *page)
+u8 MailboxMenu_CreateList(struct PlayerPCItemPageStruct *page)
{
u16 i;
for (i = 0; i < page->count; i++)
{
- sUnknown_0203CF4C[i].name = sEmptyItemName;
- sUnknown_0203CF4C[i].id = i;
+ sMailboxList[i].name = sEmptyItemName;
+ sMailboxList[i].id = i;
}
- sUnknown_0203CF4C[i].name = gText_Cancel2;
- sUnknown_0203CF4C[i].id = LIST_CANCEL;
+ sMailboxList[i].name = gText_Cancel2;
+ sMailboxList[i].id = LIST_CANCEL;
- gMultiuseListMenuTemplate.items = sUnknown_0203CF4C;
+ gMultiuseListMenuTemplate.items = sMailboxList;
gMultiuseListMenuTemplate.totalItems = page->count + 1;
- gMultiuseListMenuTemplate.windowId = sUnknown_0203CF48[1];
+ gMultiuseListMenuTemplate.windowId = sMailboxWindowIds[MAILBOXWIN_LIST];
gMultiuseListMenuTemplate.header_X = 0;
gMultiuseListMenuTemplate.item_X = 8;
gMultiuseListMenuTemplate.cursor_X = 0;
@@ -292,8 +294,8 @@ u8 sub_81D1DC0(struct PlayerPCItemPageStruct *page)
gMultiuseListMenuTemplate.cursorPal = 2;
gMultiuseListMenuTemplate.fillValue = 1;
gMultiuseListMenuTemplate.cursorShadowPal = 3;
- gMultiuseListMenuTemplate.moveCursorFunc = sub_81D1E7C;
- gMultiuseListMenuTemplate.itemPrintFunc = sub_81D1D44;
+ gMultiuseListMenuTemplate.moveCursorFunc = MailboxMenu_MoveCursorFunc;
+ gMultiuseListMenuTemplate.itemPrintFunc = MailboxMenu_ItemPrintFunc;
gMultiuseListMenuTemplate.fontId = 1;
gMultiuseListMenuTemplate.cursorKind = 0;
gMultiuseListMenuTemplate.lettersSpacing = 0;
@@ -302,20 +304,20 @@ u8 sub_81D1DC0(struct PlayerPCItemPageStruct *page)
return ListMenuInit(&gMultiuseListMenuTemplate, page->itemsAbove, page->cursorPos);
}
-static void sub_81D1E7C(s32 itemIndex, bool8 onInit, struct ListMenu *list)
+static void MailboxMenu_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list)
{
if (onInit != TRUE)
PlaySE(SE_SELECT);
}
-void sub_81D1E90(struct PlayerPCItemPageStruct *page)
+void MailboxMenu_AddScrollArrows(struct PlayerPCItemPageStruct *page)
{
page->scrollIndicatorTaskId = AddScrollIndicatorArrowPairParameterized(2, 0xC8, 12, 0x94, page->count - page->pageItems + 1, 0x6E, 0x6E, &page->itemsAbove);
}
-void sub_81D1EC0(void)
+void MailboxMenu_Free(void)
{
- Free(sUnknown_0203CF4C);
+ Free(sMailboxList);
}
void InitConditionGraphData(struct ConditionGraph *graph)
diff --git a/src/party_menu.c b/src/party_menu.c
index f77703328..80012623f 100755
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -5471,7 +5471,7 @@ static void TryGiveMailToSelectedMon(u8 taskId)
struct MailStruct *mail;
gPartyMenuUseExitCallback = FALSE;
- mail = &gSaveBlock1Ptr->mail[playerPCItemPageInfo.itemsAbove + 6 + playerPCItemPageInfo.cursorPos];
+ mail = &gSaveBlock1Ptr->mail[gPlayerPCItemPageInfo.itemsAbove + PARTY_SIZE + gPlayerPCItemPageInfo.cursorPos];
if (GetMonData(mon, MON_DATA_HELD_ITEM) != ITEM_NONE)
{
DisplayPartyMenuMessage(gText_PkmnHoldingItemCantHoldMail, TRUE);
diff --git a/src/player_pc.c b/src/player_pc.c
index f44a111b3..228c3ae10 100644
--- a/src/player_pc.c
+++ b/src/player_pc.c
@@ -30,24 +30,79 @@
#include "window.h"
#include "menu_specialized.h"
-// structures
-struct Struct203BCC4
+// Top level PC menu options
+enum {
+ MENU_ITEMSTORAGE,
+ MENU_MAILBOX,
+ MENU_DECORATION,
+ MENU_TURNOFF
+};
+
+// Item storage menu options
+enum {
+ MENU_WITHDRAW,
+ MENU_DEPOSIT,
+ MENU_TOSS,
+ MENU_EXIT
+};
+
+// Windows for the main menus (top level menu, and item storage menu)
+enum {
+ WIN_MAIN_MENU,
+ WIN_MAIN_MENU_BEDROOM,
+ WIN_ITEM_STORAGE_MENU,
+};
+
+// Windows for item storage (while viewing the PC's item inventory)
+enum {
+ ITEMWIN_LIST,
+ ITEMWIN_MESSAGE,
+ ITEMWIN_ICON,
+ ITEMWIN_TITLE,
+ ITEMWIN_QUANTITY,
+ ITEMWIN_YESNO,
+ ITEMWIN_COUNT
+};
+ // When showing the main list, the first window to this window are drawn
+#define ITEMWIN_LIST_END ITEMWIN_TITLE
+
+// Message IDs for Item Storage
+enum {
+ MSG_SWITCH_WHICH_ITEM = 0xFFF7,
+ MSG_OKAY_TO_THROW_AWAY,
+ MSG_TOO_IMPORTANT,
+ MSG_NO_MORE_ROOM,
+ MSG_THREW_AWAY_ITEM,
+ MSG_HOW_MANY_TO_TOSS,
+ MSG_WITHDREW_ITEM,
+ MSG_HOW_MANY_TO_WITHDRAW,
+ MSG_GO_BACK_TO_PREV
+};
+
+#define TAG_ITEM_ICON 5110
+#define TAG_SCROLL_ARROW 5112
+
+// Item list ID for toSwapPos to indicate an item is not currently being swapped
+#define NOT_SWAPPING 0xFF
+
+#define SWAP_LINE_LENGTH 7
+
+struct ItemStorageMenu
{
- struct ListMenuItem unk0[51];
- u8 unk198[51][0x18];
- u8 windowIds[6];
- u8 unk666;
+ struct ListMenuItem listItems[PC_ITEMS_COUNT + 1];
+ u8 itemNames[PC_ITEMS_COUNT + 1][ITEM_NAME_LENGTH + 10];
+ u8 windowIds[ITEMWIN_COUNT];
+ u8 toSwapPos;
u8 spriteId;
- u8 spriteIds[7];
+ u8 swapLineSpriteIds[SWAP_LINE_LENGTH];
};
-// static functions
static void InitPlayerPCMenu(u8 taskId);
static void PlayerPCProcessMenuInput(u8 taskId);
static void InitItemStorageMenu(u8 taskId, u8 var);
static u8 GetMailboxMailCount(void);
-static void Mailbox_UpdateMailList(void);
+static void Mailbox_CompactMailList(void);
static void Mailbox_DrawMailboxMenu(u8 taskId);
static void Mailbox_ProcessInput(u8 taskId);
static void Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId);
@@ -67,15 +122,14 @@ static void Mailbox_Give(u8 taskId);
static void Mailbox_Cancel(u8 taskId);
static void Mailbox_CancelMoveToBag(u8 taskId);
-static void Mailbox_MoveToBagYesNoPrompt(u8 taskId);
-static void Mailbox_DrawYesNoBeforeMove(u8 taskId);
+static void Mailbox_HandleConfirmMoveToBag(u8 taskId);
+static void Mailbox_AskConfirmMoveToBag(u8 taskId);
static void Mailbox_DoGiveMailPokeMenu(u8 taskId);
static void Mailbox_NoPokemonForMail(u8 taskId);
static void Mailbox_FadeAndReadMail(u8 taskId);
static void Mailbox_ReturnToFieldFromReadMail(void);
-static void Mailbox_DoRedrawMailboxMenuAfterReturn(void);
-static void pal_fill_for_maplights_or_black(void);
+static void Mailbox_ReshowAfterMail(void);
static void Mailbox_HandleReturnToProcessInput(u8 taskId);
static void Mailbox_UpdateMailListAfterDeposit(void);
@@ -83,91 +137,92 @@ static void ItemStorage_Withdraw(u8 taskId);
static void ItemStorage_Deposit(u8 taskId);
static void ItemStorage_Toss(u8 taskId);
static void ItemStorage_Exit(u8 taskId);
-static void ItemStorage_ResumeInputFromYesToss(u8 taskId);
-static void ItemStorage_ResumeInputFromNoToss(u8 taskId);
+static void ItemStorage_TossItemYes(u8 taskId);
+static void ItemStorage_TossItemNo(u8 taskId);
static void ItemStorageMenuPrint(const u8 *);
static void ItemStorageMenuProcessInput(u8 taskId);
-static void ItemStorage_ProcessWithdrawTossInput(u8 taskId);
-static void ItemStorage_SetItemAndMailCount(u8);
+static void SetPlayerPCListCount(u8);
static void ItemStorage_HandleReturnToProcessInput(u8 taskId);
-static void ItemStorage_WithdrawToss_Helper(u8 taskId, bool8 toss);
+static void ItemStorage_Enter(u8 taskId, bool8 toss);
+static void ItemStorage_CreateListMenu(u8 taskId);
+static void ItemStorage_ProcessInput(u8 taskId);
static void Task_ItemStorage_Deposit(u8 taskId);
+static void ItemStorage_ReshowAfterBagMenu(void);
static void ItemStorage_DoItemWithdraw(u8 taskId);
static void ItemStorage_DoItemToss(u8 taskid);
static void ItemStorage_HandleQuantityRolling(u8 taskid);
-static void ItemStorage_GoBackToPlayerPCMenu(u8 taskId);
-static void ItemStorage_ItemSwapChoosePrompt(u8 taskId);
+static void ItemStorage_ExitItemList(u8 taskId);
+static void ItemStorage_StartItemSwap(u8 taskId);
static void ItemStorage_DoItemAction(u8 taskId);
-static void ItemStorage_ProcessInput(u8 taskId);
-static void ItemStorage_DoItemSwap(u8 taskId, bool8 a);
+static void ItemStorage_FinishItemSwap(u8 taskId, bool8 a);
static void ItemStorage_HandleRemoveItem(u8 taskId);
-static void ItemStorage_WaitPressHandleResumeProcessInput(u8 taskId);
-static void ItemStorage_StartScrollIndicatorAndProcessInput(u8 taskId);
+static void ItemStorage_HandleErrorMessageInput(u8 taskId);
+static void ItemStorage_ReturnToListInput(u8 taskId);
-static const u8* ItemStorage_GetItemPcResponse(u16);
+static const u8* ItemStorage_GetMessage(u16);
static void CopyItemName_PlayerPC(u8 *string, u16 itemId);
-static void sub_816BC14(void);
-static void sub_816BFE0(u8 y, u8, u8 speed);
-static void sub_816BCC4(u8);
-static void UpdateSwapLinePos(u8);
-static void sub_816C4FC(u8 taskId);
-static void sub_816C0C8(void);
-static void sub_816C060(u16 itemId);
-static void sub_816BEF0(s32 id);
-static void sub_816B4DC(u8 taskId);
+static void ItemStorage_Init(void);
+static void ItemStorage_DrawSwapArrow(u8 y, u8, u8 speed);
+static void ItemStorage_RemoveWindow(u8);
+static void ItemStorage_UpdateSwapLinePos(u8);
+static void ItemStorage_ProcessItemSwapInput(u8 taskId);
+static void ItemStorage_EraseItemIcon(void);
+static void ItemStorage_DrawItemIcon(u16 itemId);
+static void ItemStorage_PrintDescription(s32 id);
+static void ItemStorage_EraseMainMenu(u8 taskId);
static void ItemStorage_MoveCursor(s32 id, bool8 b, struct ListMenu * thisMenu);
-static void fish4_goto_x5_or_x6(u8 windowId, u32 id, u8 yOffset);
+static void ItemStorage_PrintMenuItem(u8 windowId, u32 id, u8 yOffset);
-// EWRAM
-static EWRAM_DATA const u8 *gPcItemMenuOptionOrder = NULL;
-static EWRAM_DATA u8 gPcItemMenuOptionsNum = 0;
-EWRAM_DATA struct PlayerPCItemPageStruct playerPCItemPageInfo = {0, 0, 0, 0, {0, 0, 0}, 0};
-static EWRAM_DATA struct Struct203BCC4 *gUnknown_0203BCC4 = NULL;
+static EWRAM_DATA const u8 *sTopMenuOptionOrder = NULL;
+static EWRAM_DATA u8 sTopMenuNumOptions = 0;
+EWRAM_DATA struct PlayerPCItemPageStruct gPlayerPCItemPageInfo = {};
+static EWRAM_DATA struct ItemStorageMenu *sItemStorageMenu = NULL;
-// .rodata
-static const u8 *const gPCText_OptionDescList[] =
+static const u8 *const sItemStorage_OptionDescriptions[] =
{
- gText_TakeOutItemsFromPC,
- gText_StoreItemsInPC,
- gText_ThrowAwayItemsInPC,
- gText_GoBackPrevMenu,
+ [MENU_WITHDRAW] = gText_TakeOutItemsFromPC,
+ [MENU_DEPOSIT] = gText_StoreItemsInPC,
+ [MENU_TOSS] = gText_ThrowAwayItemsInPC,
+ [MENU_EXIT] = gText_GoBackPrevMenu,
};
static const struct MenuAction sPlayerPCMenuActions[] =
{
- { gText_ItemStorage, PlayerPC_ItemStorage },
- { gText_Mailbox, PlayerPC_Mailbox },
- { gText_Decoration, PlayerPC_Decoration },
- { gText_TurnOff, PlayerPC_TurnOff }
+ [MENU_ITEMSTORAGE] = { gText_ItemStorage, PlayerPC_ItemStorage },
+ [MENU_MAILBOX] = { gText_Mailbox, PlayerPC_Mailbox },
+ [MENU_DECORATION] = { gText_Decoration, PlayerPC_Decoration },
+ [MENU_TURNOFF] = { gText_TurnOff, PlayerPC_TurnOff }
};
-static const u8 gBedroomPC_OptionOrder[] =
+static const u8 sBedroomPC_OptionOrder[] =
{
- PLAYERPC_MENU_ITEMSTORAGE,
- PLAYERPC_MENU_MAILBOX,
- PLAYERPC_MENU_DECORATION,
- PLAYERPC_MENU_TURNOFF
+ MENU_ITEMSTORAGE,
+ MENU_MAILBOX,
+ MENU_DECORATION,
+ MENU_TURNOFF
};
+#define NUM_BEDROOM_PC_OPTIONS ARRAY_COUNT(sBedroomPC_OptionOrder)
-static const u8 gPlayerPC_OptionOrder[] =
+static const u8 sPlayerPC_OptionOrder[] =
{
- PLAYERPC_MENU_ITEMSTORAGE,
- PLAYERPC_MENU_MAILBOX,
- PLAYERPC_MENU_TURNOFF
+ MENU_ITEMSTORAGE,
+ MENU_MAILBOX,
+ MENU_TURNOFF
};
+#define NUM_PLAYER_PC_OPTIONS ARRAY_COUNT(sPlayerPC_OptionOrder)
-static const struct MenuAction gPCText_ItemPCOptionsText[] =
+static const struct MenuAction sItemStorage_MenuActions[] =
{
- { gText_WithdrawItem, ItemStorage_Withdraw },
- { gText_DepositItem, ItemStorage_Deposit },
- { gText_TossItem, ItemStorage_Toss },
- { gText_Cancel, ItemStorage_Exit }
+ [MENU_WITHDRAW] = { gText_WithdrawItem, ItemStorage_Withdraw },
+ [MENU_DEPOSIT] = { gText_DepositItem, ItemStorage_Deposit },
+ [MENU_TOSS] = { gText_TossItem, ItemStorage_Toss },
+ [MENU_EXIT] = { gText_Cancel, ItemStorage_Exit }
};
-static const struct ItemSlot gNewGamePCItems[] =
+static const struct ItemSlot sNewGamePCItems[] =
{
{ ITEM_POTION, 1 },
{ ITEM_NONE, 0 }
@@ -175,15 +230,15 @@ static const struct ItemSlot gNewGamePCItems[] =
const struct MenuAction gMailboxMailOptions[] =
{
- { gText_Read, Mailbox_DoMailRead },
+ { gText_Read, Mailbox_DoMailRead },
{ gText_MoveToBag, Mailbox_MoveToBag },
- { gText_Give2, Mailbox_Give },
- { gText_Cancel2, Mailbox_Cancel }
+ { gText_Give2, Mailbox_Give },
+ { gText_Cancel2, Mailbox_Cancel }
};
-static const struct WindowTemplate gUnknown_085DFF24[3] =
+static const struct WindowTemplate sWindowTemplates_MainMenus[] =
{
- {
+ [WIN_MAIN_MENU] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 1,
@@ -192,7 +247,7 @@ static const struct WindowTemplate gUnknown_085DFF24[3] =
.paletteNum = 15,
.baseBlock = 1
},
- {
+ [WIN_MAIN_MENU_BEDROOM] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 1,
@@ -201,7 +256,7 @@ static const struct WindowTemplate gUnknown_085DFF24[3] =
.paletteNum = 15,
.baseBlock = 1
},
- {
+ [WIN_ITEM_STORAGE_MENU] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 1,
@@ -212,17 +267,17 @@ static const struct WindowTemplate gUnknown_085DFF24[3] =
}
};
-static const struct YesNoFuncTable ResumeFromWithdrawYesNoFuncList = // ResumeFromWithdrawYesNoFuncList
+static const struct YesNoFuncTable ItemTossYesNoFuncs =
{
- ItemStorage_ResumeInputFromYesToss,
- ItemStorage_ResumeInputFromNoToss
+ ItemStorage_TossItemYes,
+ ItemStorage_TossItemNo
};
-static const struct ListMenuTemplate gUnknown_085DFF44 =
+static const struct ListMenuTemplate sListMenuTemplate_ItemStorage =
{
.items = NULL,
.moveCursorFunc = ItemStorage_MoveCursor,
- .itemPrintFunc = fish4_goto_x5_or_x6,
+ .itemPrintFunc = ItemStorage_PrintMenuItem,
.totalItems = 0,
.maxShowed = 0,
.windowId = 0,
@@ -239,9 +294,9 @@ static const struct ListMenuTemplate gUnknown_085DFF44 =
.fontId = 7
};
-static const struct WindowTemplate gUnknown_085DFF5C[5] =
+static const struct WindowTemplate sWindowTemplates_ItemStorage[ITEMWIN_COUNT] =
{
- {
+ [ITEMWIN_LIST] = {
.bg = 0,
.tilemapLeft = 16,
.tilemapTop = 1,
@@ -250,7 +305,7 @@ static const struct WindowTemplate gUnknown_085DFF5C[5] =
.paletteNum = 15,
.baseBlock = 0x0001
},
- {
+ [ITEMWIN_MESSAGE] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 13,
@@ -259,7 +314,7 @@ static const struct WindowTemplate gUnknown_085DFF5C[5] =
.paletteNum = 15,
.baseBlock = 0x00EB
},
- {
+ [ITEMWIN_ICON] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 8,
@@ -268,7 +323,7 @@ static const struct WindowTemplate gUnknown_085DFF5C[5] =
.paletteNum = 15,
.baseBlock = 0x0153
},
- {
+ [ITEMWIN_TITLE] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 1,
@@ -277,7 +332,7 @@ static const struct WindowTemplate gUnknown_085DFF5C[5] =
.paletteNum = 15,
.baseBlock = 0x0139
},
- {
+ [ITEMWIN_QUANTITY] = {
.bg = 0,
.tilemapLeft = 8,
.tilemapTop = 9,
@@ -285,61 +340,67 @@ static const struct WindowTemplate gUnknown_085DFF5C[5] =
.height = 2,
.paletteNum = 15,
.baseBlock = 0x015C
+ },
+ [ITEMWIN_YESNO] = {
+ .bg = 0,
+ .tilemapLeft = 9,
+ .tilemapTop = 7,
+ .width = 5,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 0x0168
}
};
-static const struct WindowTemplate gUnknown_085DFF84 =
-{
- .bg = 0,
- .tilemapLeft = 9,
- .tilemapTop = 7,
- .width = 5,
- .height = 4,
- .paletteNum = 15,
- .baseBlock = 0x0168
-};
-
-static const u8 gUnknown_085DFF8C[] = {0x01, 0x03, 0x02, 0x00};
+static const u8 sSwapArrowTextColors[] = {TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY, TEXT_COLOR_DARK_GRAY};
-// text
+// Macro below is likely a fakematch, equivalent to sNewGamePCItems[i].quantity
+#define GET_QUANTITY(i) ((u16)((u16 *)sNewGamePCItems + 1)[i * 2])
void NewGameInitPCItems(void)
{
- u8 i;
-
- // because Game Freak don't know how to use a struct or a 2d array
- for(i = 0, ClearItemSlots(gSaveBlock1Ptr->pcItems, ARRAY_COUNT(gSaveBlock1Ptr->pcItems)); NEW_GAME_PC_ITEMS(i, PC_ITEM_ID) && NEW_GAME_PC_ITEMS(i, PC_QUANTITY) &&
- AddPCItem(NEW_GAME_PC_ITEMS(i, PC_ITEM_ID), NEW_GAME_PC_ITEMS(i, PC_QUANTITY)) == TRUE; i++);
+ u8 i = 0;
+ ClearItemSlots(gSaveBlock1Ptr->pcItems, PC_ITEMS_COUNT);
+ for(; sNewGamePCItems[i].itemId != ITEM_NONE && GET_QUANTITY(i) &&
+ AddPCItem(sNewGamePCItems[i].itemId, GET_QUANTITY(i)) == TRUE; i++);
}
+#undef GET_QUANTITY
void BedroomPC(void)
{
- gPcItemMenuOptionOrder = gBedroomPC_OptionOrder;
- gPcItemMenuOptionsNum = 4;
+ sTopMenuOptionOrder = sBedroomPC_OptionOrder;
+ sTopMenuNumOptions = NUM_BEDROOM_PC_OPTIONS;
DisplayItemMessageOnField(CreateTask(TaskDummy, 0), gText_WhatWouldYouLike, InitPlayerPCMenu);
}
void PlayerPC(void)
{
- gPcItemMenuOptionOrder = gPlayerPC_OptionOrder;
- gPcItemMenuOptionsNum = 3;
+ sTopMenuOptionOrder = sPlayerPC_OptionOrder;
+ sTopMenuNumOptions = NUM_PLAYER_PC_OPTIONS;
DisplayItemMessageOnField(CreateTask(TaskDummy, 0), gText_WhatWouldYouLike, InitPlayerPCMenu);
}
+#define tUsedSlots data[1]
+#define tQuantity data[2]
+#define tInTossMenu data[3]
+#define tWindowId data[4]
+#define tListTaskId data[5]
+
static void InitPlayerPCMenu(u8 taskId)
{
u16 *data;
struct WindowTemplate windowTemplate;
-
data = gTasks[taskId].data;
- if (gPcItemMenuOptionsNum == 3)
- windowTemplate = gUnknown_085DFF24[0];
- else
- windowTemplate = gUnknown_085DFF24[1];
- windowTemplate.width = sub_81DB3D8(sPlayerPCMenuActions, gPcItemMenuOptionOrder, gPcItemMenuOptionsNum);
- data[4] = AddWindow(&windowTemplate);
- SetStandardWindowBorderStyle(data[4], 0);
- sub_81995E4(data[4], gPcItemMenuOptionsNum, sPlayerPCMenuActions, gPcItemMenuOptionOrder);
- InitMenuInUpperLeftCornerPlaySoundWhenAPressed(data[4], gPcItemMenuOptionsNum, 0);
+
+ if (sTopMenuNumOptions == NUM_PLAYER_PC_OPTIONS)
+ windowTemplate = sWindowTemplates_MainMenus[WIN_MAIN_MENU];
+ else // Bedroom PC
+ windowTemplate = sWindowTemplates_MainMenus[WIN_MAIN_MENU_BEDROOM];
+
+ windowTemplate.width = sub_81DB3D8(sPlayerPCMenuActions, sTopMenuOptionOrder, sTopMenuNumOptions);
+ tWindowId = AddWindow(&windowTemplate);
+ SetStandardWindowBorderStyle(tWindowId, 0);
+ sub_81995E4(tWindowId, sTopMenuNumOptions, sPlayerPCMenuActions, sTopMenuOptionOrder);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(tWindowId, sTopMenuNumOptions, 0);
ScheduleBgCopyTilemapToVram(0);
gTasks[taskId].func = PlayerPCProcessMenuInput;
}
@@ -350,30 +411,30 @@ static void PlayerPCProcessMenuInput(u8 taskId)
s8 inputOptionId;
data = gTasks[taskId].data;
- if (gPcItemMenuOptionsNum > 3)
+ if (sTopMenuNumOptions > 3)
inputOptionId = Menu_ProcessInput();
else
inputOptionId = Menu_ProcessInputNoWrap();
switch (inputOptionId)
{
- case MENU_NOTHING_CHOSEN:
- break;
- case MENU_B_PRESSED:
- PlaySE(SE_SELECT);
- ClearStdWindowAndFrameToTransparent(data[4], FALSE);
- ClearWindowTilemap(data[4]);
- RemoveWindow(data[4]);
- ScheduleBgCopyTilemapToVram(0);
- gTasks[taskId].func = PlayerPC_TurnOff;
- break;
- default:
- ClearStdWindowAndFrameToTransparent(data[4], FALSE);
- ClearWindowTilemap(data[4]);
- RemoveWindow(data[4]);
- ScheduleBgCopyTilemapToVram(0);
- gTasks[taskId].func = sPlayerPCMenuActions[gPcItemMenuOptionOrder[inputOptionId]].func.void_u8;
- break;
+ case MENU_NOTHING_CHOSEN:
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ ClearStdWindowAndFrameToTransparent(tWindowId, FALSE);
+ ClearWindowTilemap(tWindowId);
+ RemoveWindow(tWindowId);
+ ScheduleBgCopyTilemapToVram(0);
+ gTasks[taskId].func = PlayerPC_TurnOff;
+ break;
+ default:
+ ClearStdWindowAndFrameToTransparent(tWindowId, FALSE);
+ ClearWindowTilemap(tWindowId);
+ RemoveWindow(tWindowId);
+ ScheduleBgCopyTilemapToVram(0);
+ gTasks[taskId].func = sPlayerPCMenuActions[sTopMenuOptionOrder[inputOptionId]].func.void_u8;
+ break;
}
}
@@ -384,31 +445,37 @@ void ReshowPlayerPC(u8 var)
static void PlayerPC_ItemStorage(u8 taskId)
{
- InitItemStorageMenu(taskId, ITEMPC_MENU_WITHDRAW);
+ InitItemStorageMenu(taskId, MENU_WITHDRAW);
gTasks[taskId].func = ItemStorageMenuProcessInput;
}
static void PlayerPC_Mailbox(u8 taskId)
{
- playerPCItemPageInfo.count = GetMailboxMailCount();
+ gPlayerPCItemPageInfo.count = GetMailboxMailCount();
- if (playerPCItemPageInfo.count == 0)
+ if (gPlayerPCItemPageInfo.count == 0)
+ {
+ // Mailbox cannot be opened if no mail is in PC
DisplayItemMessageOnField(taskId, gText_NoMailHere, ReshowPlayerPC);
+ }
else
{
- playerPCItemPageInfo.cursorPos = 0;
- playerPCItemPageInfo.itemsAbove = 0;
- playerPCItemPageInfo.scrollIndicatorTaskId = TASK_NONE;
- Mailbox_UpdateMailList();
- ItemStorage_SetItemAndMailCount(taskId);
- if (sub_81D1C44(playerPCItemPageInfo.count) == TRUE)
+ gPlayerPCItemPageInfo.cursorPos = 0;
+ gPlayerPCItemPageInfo.itemsAbove = 0;
+ gPlayerPCItemPageInfo.scrollIndicatorTaskId = TASK_NONE;
+ Mailbox_CompactMailList();
+ SetPlayerPCListCount(taskId);
+ if (MailboxMenu_Alloc(gPlayerPCItemPageInfo.count) == TRUE)
{
ClearDialogWindowAndFrame(0, 0);
Mailbox_DrawMailboxMenu(taskId);
gTasks[taskId].func = Mailbox_ProcessInput;
}
- else
+ else
+ {
+ // Alloc failed, exit Mailbox
DisplayItemMessageOnField(taskId, gText_NoMailHere, ReshowPlayerPC);
+ }
}
}
@@ -419,7 +486,7 @@ static void PlayerPC_Decoration(u8 taskId)
static void PlayerPC_TurnOff(u8 taskId)
{
- if (gPcItemMenuOptionsNum == 4) // if the option count is 4, we are at the bedroom PC, so do gender specific handling.
+ if (sTopMenuNumOptions == NUM_BEDROOM_PC_OPTIONS) // Flimsy way to determine if Bedroom PC is in use
{
if (gSaveBlock2Ptr->playerGender == MALE)
ScriptContext1_SetupScript(LittlerootTown_BrendansHouse_2F_EventScript_TurnOffPlayerPC);
@@ -439,14 +506,14 @@ static void InitItemStorageMenu(u8 taskId, u8 var)
struct WindowTemplate windowTemplate;
data = gTasks[taskId].data;
- windowTemplate = gUnknown_085DFF24[2];
- windowTemplate.width = GetMaxWidthInMenuTable(gPCText_ItemPCOptionsText, 4);
- data[4] = AddWindow(&windowTemplate);
- SetStandardWindowBorderStyle(data[4], 0);
- PrintMenuTable(data[4], ARRAY_COUNT(gPCText_ItemPCOptionsText), gPCText_ItemPCOptionsText);
- InitMenuInUpperLeftCornerPlaySoundWhenAPressed(data[4], 4, var);
+ windowTemplate = sWindowTemplates_MainMenus[WIN_ITEM_STORAGE_MENU];
+ windowTemplate.width = GetMaxWidthInMenuTable(sItemStorage_MenuActions, ARRAY_COUNT(sItemStorage_MenuActions));
+ tWindowId = AddWindow(&windowTemplate);
+ SetStandardWindowBorderStyle(tWindowId, 0);
+ PrintMenuTable(tWindowId, ARRAY_COUNT(sItemStorage_MenuActions), sItemStorage_MenuActions);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(tWindowId, 4, var);
ScheduleBgCopyTilemapToVram(0);
- ItemStorageMenuPrint(gPCText_OptionDescList[var]);
+ ItemStorageMenuPrint(sItemStorage_OptionDescriptions[var]);
}
static void ItemStorageMenuPrint(const u8 *textPtr)
@@ -457,27 +524,26 @@ static void ItemStorageMenuPrint(const u8 *textPtr)
static void ItemStorageMenuProcessInput(u8 taskId)
{
- s8 r5;
- s8 r2;
+ s8 oldPos, newPos;
s8 inputOptionId;
- r5 = Menu_GetCursorPos();
+ oldPos = Menu_GetCursorPos();
inputOptionId = Menu_ProcessInput();
- r2 = Menu_GetCursorPos();
+ newPos = Menu_GetCursorPos();
switch (inputOptionId)
{
- case MENU_NOTHING_CHOSEN:
- if (r5 != r2)
- ItemStorageMenuPrint(gPCText_OptionDescList[r2]);
- break;
- case MENU_B_PRESSED:
- PlaySE(SE_SELECT);
- ItemStorage_Exit(taskId);
- break;
- default:
- PlaySE(SE_SELECT);
- gPCText_ItemPCOptionsText[inputOptionId].func.void_u8(taskId);
- break;
+ case MENU_NOTHING_CHOSEN:
+ if (oldPos != newPos)
+ ItemStorageMenuPrint(sItemStorage_OptionDescriptions[newPos]);
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ ItemStorage_Exit(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ sItemStorage_MenuActions[inputOptionId].func.void_u8(taskId);
+ break;
}
}
@@ -497,13 +563,13 @@ static void Task_ItemStorage_Deposit(u8 taskId)
}
}
-void sub_816B31C(void)
+void CB2_PlayerPCExitBagMenu(void)
{
- gFieldCallback = Mailbox_DoRedrawMailboxMenuAfterReturn;
+ gFieldCallback = ItemStorage_ReshowAfterBagMenu;
SetMainCallback2(CB2_ReturnToField);
}
-void Mailbox_DoRedrawMailboxMenuAfterReturn(void)
+static void ItemStorage_ReshowAfterBagMenu(void)
{
LoadMessageBoxAndBorderGfx();
DrawDialogueFrame(0, 1);
@@ -521,12 +587,15 @@ static void ItemStorage_Withdraw(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- NUM_ITEMS = CountUsedPCItemSlots();
- if (NUM_ITEMS != 0)
- ItemStorage_WithdrawToss_Helper(taskId, FALSE);
+ tUsedSlots = CountUsedPCItemSlots();
+ if (tUsedSlots != 0)
+ {
+ ItemStorage_Enter(taskId, FALSE);
+ }
else
{
- sub_816B4DC(taskId);
+ // Can't withdraw, no items in PC
+ ItemStorage_EraseMainMenu(taskId);
DisplayItemMessageOnField(taskId, gText_NoItems, PlayerPC_ItemStorage);
}
@@ -536,136 +605,133 @@ static void ItemStorage_Toss(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- NUM_ITEMS = CountUsedPCItemSlots();
- if (NUM_ITEMS != 0)
- ItemStorage_WithdrawToss_Helper(taskId, TRUE);
+ tUsedSlots = CountUsedPCItemSlots();
+ if (tUsedSlots != 0)
+ {
+ ItemStorage_Enter(taskId, TRUE);
+ }
else
{
- sub_816B4DC(taskId);
+ // Can't toss, no items in PC
+ ItemStorage_EraseMainMenu(taskId);
DisplayItemMessageOnField(taskId, gText_NoItems, PlayerPC_ItemStorage);
}
}
-static void ItemStorage_WithdrawToss_Helper(u8 taskId, bool8 toss)
+static void ItemStorage_Enter(u8 taskId, bool8 toss)
{
u16 *data = gTasks[taskId].data;
- data[3] = toss;
- sub_816B4DC(taskId);
- playerPCItemPageInfo.cursorPos = 0;
- playerPCItemPageInfo.itemsAbove = 0;
- playerPCItemPageInfo.scrollIndicatorTaskId = TASK_NONE;
- ItemStorage_SetItemAndMailCount(taskId);
- sub_816BC14();
+ tInTossMenu = toss;
+ ItemStorage_EraseMainMenu(taskId);
+ gPlayerPCItemPageInfo.cursorPos = 0;
+ gPlayerPCItemPageInfo.itemsAbove = 0;
+ gPlayerPCItemPageInfo.scrollIndicatorTaskId = TASK_NONE;
+ SetPlayerPCListCount(taskId);
+ ItemStorage_Init();
FreeAndReserveObjectSpritePalettes();
LoadListMenuSwapLineGfx();
- CreateSwapLineSprites(gUnknown_0203BCC4->spriteIds, 7);
+ CreateSwapLineSprites(sItemStorageMenu->swapLineSpriteIds, SWAP_LINE_LENGTH);
ClearDialogWindowAndFrame(0,0);
- gTasks[taskId].func = ItemStorage_ProcessWithdrawTossInput;
+ gTasks[taskId].func = ItemStorage_CreateListMenu;
}
static void ItemStorage_Exit(u8 taskId)
{
- sub_816B4DC(taskId);
+ ItemStorage_EraseMainMenu(taskId);
ReshowPlayerPC(taskId);
}
-
-static void ItemStorage_SetItemAndMailCount(u8 taskId)
+// Used by Item Storage and the Mailbox
+static void SetPlayerPCListCount(u8 taskId)
{
- if (playerPCItemPageInfo.count > 7)
- playerPCItemPageInfo.pageItems = 8;
+ if (gPlayerPCItemPageInfo.count > 7)
+ gPlayerPCItemPageInfo.pageItems = 8;
else
- playerPCItemPageInfo.pageItems = playerPCItemPageInfo.count + 1;
+ gPlayerPCItemPageInfo.pageItems = gPlayerPCItemPageInfo.count + 1;
}
-static void sub_816B4DC(u8 taskId)
+static void ItemStorage_EraseMainMenu(u8 taskId)
{
u16 *data = gTasks[taskId].data;
-
- ClearStdWindowAndFrameToTransparent(data[4], FALSE);
- ClearWindowTilemap(data[4]);
- RemoveWindow(data[4]);
+ ClearStdWindowAndFrameToTransparent(tWindowId, FALSE);
+ ClearWindowTilemap(tWindowId);
+ RemoveWindow(tWindowId);
ScheduleBgCopyTilemapToVram(0);
}
static u8 GetMailboxMailCount(void)
{
- u8 i, j;
+ u8 mailInPC, i;
- for(i = 0, j = PARTY_SIZE; j < MAIL_COUNT; j++)
- if (gSaveBlock1Ptr->mail[j].itemId != ITEM_NONE)
- i++;
+ // Count mail in PC (by first skipping over mail in party)
+ for (mailInPC = 0, i = PARTY_SIZE; i < MAIL_COUNT; i++)
+ if (gSaveBlock1Ptr->mail[i].itemId != ITEM_NONE)
+ mailInPC++;
- return i;
+ return mailInPC;
}
-static void Mailbox_UpdateMailList(void)
+static void Mailbox_CompactMailList(void)
{
- struct MailStruct mailBuffer;
+ struct MailStruct temp;
u8 i, j;
for (i = PARTY_SIZE; i < MAIL_COUNT - 1; i++)
{
for (j = i + 1; j < MAIL_COUNT; j++)
{
- if (gSaveBlock1Ptr->mail[i].itemId == 0)
- {
- mailBuffer = gSaveBlock1Ptr->mail[i];
- gSaveBlock1Ptr->mail[i] = gSaveBlock1Ptr->mail[j];
- gSaveBlock1Ptr->mail[j] = mailBuffer;
- }
+ if (gSaveBlock1Ptr->mail[i].itemId == ITEM_NONE)
+ SWAP(gSaveBlock1Ptr->mail[i], gSaveBlock1Ptr->mail[j], temp);
}
}
}
static void Mailbox_DrawMailboxMenu(u8 taskId)
{
- u8 windowId;
-
- windowId = sub_81D1C84(0);
- sub_81D1C84(1);
+ u8 windowId = MailboxMenu_AddWindow(MAILBOXWIN_TITLE);
+ MailboxMenu_AddWindow(MAILBOXWIN_LIST);
AddTextPrinterParameterized(windowId, 1, gText_Mailbox, GetStringCenterAlignXOffset(1, gText_Mailbox, 0x40), 1, 0, NULL);
ScheduleBgCopyTilemapToVram(0);
- gTasks[taskId].data[5] = sub_81D1DC0(&playerPCItemPageInfo);
- sub_81D1E90(&playerPCItemPageInfo);
+ gTasks[taskId].tListTaskId = MailboxMenu_CreateList(&gPlayerPCItemPageInfo);
+ MailboxMenu_AddScrollArrows(&gPlayerPCItemPageInfo);
}
static void Mailbox_ProcessInput(u8 taskId)
{
u16 *data = gTasks[taskId].data;
- s32 inputOptionId;
if (!gPaletteFade.active)
{
- inputOptionId = ListMenu_ProcessInput(data[5]);
- ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
+ s32 inputOptionId = ListMenu_ProcessInput(tListTaskId);
+ ListMenuGetScrollAndRow(tListTaskId, &gPlayerPCItemPageInfo.itemsAbove, &gPlayerPCItemPageInfo.cursorPos);
switch (inputOptionId)
{
- case LIST_NOTHING_CHOSEN:
- break;
- case LIST_CANCEL:
- PlaySE(SE_SELECT);
- RemoveScrollIndicatorArrowPair(playerPCItemPageInfo.scrollIndicatorTaskId);
- Mailbox_ReturnToPlayerPC(taskId);
- break;
- default:
- PlaySE(SE_SELECT);
- sub_81D1D04(0);
- sub_81D1D04(1);
- DestroyListMenuTask(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
- ScheduleBgCopyTilemapToVram(0);
- RemoveScrollIndicatorArrowPair(playerPCItemPageInfo.scrollIndicatorTaskId);
- gTasks[taskId].func = Mailbox_PrintWhatToDoWithPlayerMailText;
- break;
+ case LIST_NOTHING_CHOSEN:
+ break;
+ case LIST_CANCEL:
+ PlaySE(SE_SELECT);
+ RemoveScrollIndicatorArrowPair(gPlayerPCItemPageInfo.scrollIndicatorTaskId);
+ Mailbox_ReturnToPlayerPC(taskId);
+ break;
+ default:
+ // Selected mail, ask what to do with it
+ PlaySE(SE_SELECT);
+ MailboxMenu_RemoveWindow(MAILBOXWIN_TITLE);
+ MailboxMenu_RemoveWindow(MAILBOXWIN_LIST);
+ DestroyListMenuTask(tListTaskId, &gPlayerPCItemPageInfo.itemsAbove, &gPlayerPCItemPageInfo.cursorPos);
+ ScheduleBgCopyTilemapToVram(0);
+ RemoveScrollIndicatorArrowPair(gPlayerPCItemPageInfo.scrollIndicatorTaskId);
+ gTasks[taskId].func = Mailbox_PrintWhatToDoWithPlayerMailText;
+ break;
}
}
}
static void Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId)
{
- StringCopy(gStringVar1, gSaveBlock1Ptr->mail[playerPCItemPageInfo.itemsAbove + PARTY_SIZE + playerPCItemPageInfo.cursorPos].playerName);
+ StringCopy(gStringVar1, gSaveBlock1Ptr->mail[gPlayerPCItemPageInfo.itemsAbove + PARTY_SIZE + gPlayerPCItemPageInfo.cursorPos].playerName);
ConvertInternationalPlayerNameStripChar(gStringVar1, CHAR_SPACE);
StringExpandPlaceholders(gStringVar4, gText_WhatToDoWithVar1sMail);
DisplayItemMessageOnField(taskId, gStringVar4, Mailbox_PrintMailOptions);
@@ -675,19 +741,19 @@ static void Mailbox_ReturnToPlayerPC(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- sub_81D1D04(0);
- sub_81D1D04(1);
- DestroyListMenuTask(data[5], NULL, NULL);
+ MailboxMenu_RemoveWindow(MAILBOXWIN_TITLE);
+ MailboxMenu_RemoveWindow(MAILBOXWIN_LIST);
+ DestroyListMenuTask(tListTaskId, NULL, NULL);
ScheduleBgCopyTilemapToVram(0);
- sub_81D1EC0();
+ MailboxMenu_Free();
ReshowPlayerPC(taskId);
}
static void Mailbox_PrintMailOptions(u8 taskId)
{
- u8 r4 = sub_81D1C84(2);
- PrintMenuTable(r4, ARRAY_COUNT(gMailboxMailOptions), gMailboxMailOptions);
- InitMenuInUpperLeftCornerPlaySoundWhenAPressed(r4, 4, 0);
+ u8 windowId = MailboxMenu_AddWindow(MAILBOXWIN_OPTIONS);
+ PrintMenuTable(windowId, ARRAY_COUNT(gMailboxMailOptions), gMailboxMailOptions);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, 4, 0);
ScheduleBgCopyTilemapToVram(0);
gTasks[taskId].func = Mailbox_MailOptionsProcessInput;
}
@@ -696,19 +762,18 @@ static void Mailbox_MailOptionsProcessInput(u8 taskId)
{
s8 inputOptionId = ProcessMenuInput_other();
- switch(inputOptionId)
+ switch (inputOptionId)
{
- case -2:
- break;
- case -1:
- PlaySE(SE_SELECT);
- Mailbox_Cancel(taskId);
- break;
-
- default:
- PlaySE(SE_SELECT);
- gMailboxMailOptions[inputOptionId].func.void_u8(taskId);
- break;
+ case MENU_NOTHING_CHOSEN:
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ Mailbox_Cancel(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ gMailboxMailOptions[inputOptionId].func.void_u8(taskId);
+ break;
}
}
@@ -722,26 +787,26 @@ static void Mailbox_FadeAndReadMail(u8 taskId)
{
if (!gPaletteFade.active)
{
- sub_81D1EC0();
+ MailboxMenu_Free();
CleanupOverworldWindowsAndTilemaps();
- ReadMail(&(gSaveBlock1Ptr->mail[playerPCItemPageInfo.itemsAbove + PARTY_SIZE + playerPCItemPageInfo.cursorPos]), Mailbox_ReturnToFieldFromReadMail, TRUE);
+ ReadMail(&gSaveBlock1Ptr->mail[gPlayerPCItemPageInfo.itemsAbove + PARTY_SIZE + gPlayerPCItemPageInfo.cursorPos], Mailbox_ReturnToFieldFromReadMail, TRUE);
DestroyTask(taskId);
}
}
static void Mailbox_ReturnToFieldFromReadMail(void)
{
- gFieldCallback = pal_fill_for_maplights_or_black;
+ gFieldCallback = Mailbox_ReshowAfterMail;
SetMainCallback2(CB2_ReturnToField);
}
-static void pal_fill_for_maplights_or_black(void)
+static void Mailbox_ReshowAfterMail(void)
{
u8 taskId;
LoadMessageBoxAndBorderGfx();
taskId = CreateTask(Mailbox_HandleReturnToProcessInput, 0);
- if (sub_81D1C44(playerPCItemPageInfo.count) == TRUE)
+ if (MailboxMenu_Alloc(gPlayerPCItemPageInfo.count) == TRUE)
Mailbox_DrawMailboxMenu(taskId);
else
DestroyTask(taskId);
@@ -756,49 +821,49 @@ static void Mailbox_HandleReturnToProcessInput(u8 taskId)
static void Mailbox_MoveToBag(u8 taskId)
{
- DisplayItemMessageOnField(taskId, gText_MessageWillBeLost, Mailbox_DrawYesNoBeforeMove);
+ DisplayItemMessageOnField(taskId, gText_MessageWillBeLost, Mailbox_AskConfirmMoveToBag);
}
-static void Mailbox_DrawYesNoBeforeMove(u8 taskId)
+static void Mailbox_AskConfirmMoveToBag(u8 taskId)
{
DisplayYesNoMenuDefaultYes();
- gTasks[taskId].func = Mailbox_MoveToBagYesNoPrompt;
+ gTasks[taskId].func = Mailbox_HandleConfirmMoveToBag;
}
-static void Mailbox_MoveToBagYesNoPrompt(u8 taskId)
+static void Mailbox_HandleConfirmMoveToBag(u8 taskId)
{
- switch(Menu_ProcessInputNoWrapClearOnChoose())
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
{
- case 0:
- Mailbox_DoMailMoveToBag(taskId);
- break;
- case -1:
- PlaySE(SE_SELECT);
- case 1:
- Mailbox_CancelMoveToBag(taskId);
- break;
- case -2:
- default:
- break;
+ case 0: // Yes
+ Mailbox_DoMailMoveToBag(taskId);
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ case 1: // No
+ Mailbox_CancelMoveToBag(taskId);
+ break;
+ case MENU_NOTHING_CHOSEN:
+ default:
+ break;
}
}
static void Mailbox_DoMailMoveToBag(u8 taskId)
{
- struct MailStruct *mailStruct = &(gSaveBlock1Ptr->mail[playerPCItemPageInfo.itemsAbove + PARTY_SIZE + playerPCItemPageInfo.cursorPos]);
- if (!AddBagItem(mailStruct->itemId, 1))
+ struct MailStruct *mail = &gSaveBlock1Ptr->mail[gPlayerPCItemPageInfo.itemsAbove + PARTY_SIZE + gPlayerPCItemPageInfo.cursorPos];
+ if (!AddBagItem(mail->itemId, 1))
{
DisplayItemMessageOnField(taskId, gText_BagIsFull, Mailbox_Cancel);
}
else
{
DisplayItemMessageOnField(taskId, gText_MailToBagMessageErased, Mailbox_Cancel);
- ClearMailStruct(mailStruct);
- Mailbox_UpdateMailList();
- playerPCItemPageInfo.count--;
- if (playerPCItemPageInfo.count < (playerPCItemPageInfo.pageItems + playerPCItemPageInfo.itemsAbove) && playerPCItemPageInfo.itemsAbove != 0)
- playerPCItemPageInfo.itemsAbove--;
- ItemStorage_SetItemAndMailCount(taskId);
+ ClearMailStruct(mail);
+ Mailbox_CompactMailList();
+ gPlayerPCItemPageInfo.count--;
+ if (gPlayerPCItemPageInfo.count < (gPlayerPCItemPageInfo.pageItems + gPlayerPCItemPageInfo.itemsAbove) && gPlayerPCItemPageInfo.itemsAbove != 0)
+ gPlayerPCItemPageInfo.itemsAbove--;
+ SetPlayerPCListCount(taskId);
}
}
@@ -822,7 +887,7 @@ static void Mailbox_DoGiveMailPokeMenu(u8 taskId)
{
if (!gPaletteFade.active)
{
- sub_81D1EC0();
+ MailboxMenu_Free();
CleanupOverworldWindowsAndTilemaps();
ChooseMonToGiveMailFromMailbox();
DestroyTask(taskId);
@@ -840,15 +905,15 @@ static void Mailbox_UpdateMailListAfterDeposit(void)
u8 taskId;
u8 prevCount;
taskId = CreateTask(Mailbox_HandleReturnToProcessInput, 0);
- prevCount = playerPCItemPageInfo.count;
- playerPCItemPageInfo.count = GetMailboxMailCount();
- Mailbox_UpdateMailList();
- if (prevCount != playerPCItemPageInfo.count && (playerPCItemPageInfo.count < (playerPCItemPageInfo.pageItems + playerPCItemPageInfo.itemsAbove))
- && playerPCItemPageInfo.itemsAbove != 0)
- playerPCItemPageInfo.itemsAbove--;
- ItemStorage_SetItemAndMailCount(taskId);
+ prevCount = gPlayerPCItemPageInfo.count;
+ gPlayerPCItemPageInfo.count = GetMailboxMailCount();
+ Mailbox_CompactMailList();
+ if (prevCount != gPlayerPCItemPageInfo.count && (gPlayerPCItemPageInfo.count < (gPlayerPCItemPageInfo.pageItems + gPlayerPCItemPageInfo.itemsAbove))
+ && gPlayerPCItemPageInfo.itemsAbove != 0)
+ gPlayerPCItemPageInfo.itemsAbove--;
+ SetPlayerPCListCount(taskId);
LoadMessageBoxAndBorderGfx();
- if (sub_81D1C44(playerPCItemPageInfo.count) == TRUE)
+ if (MailboxMenu_Alloc(gPlayerPCItemPageInfo.count) == TRUE)
Mailbox_DrawMailboxMenu(taskId);
else
DestroyTask(taskId);
@@ -862,45 +927,44 @@ static void Mailbox_NoPokemonForMail(u8 taskId)
static void Mailbox_Cancel(u8 taskId)
{
- sub_81D1D04(2);
+ MailboxMenu_RemoveWindow(MAILBOXWIN_OPTIONS);
ClearDialogWindowAndFrame(0, 0);
Mailbox_DrawMailboxMenu(taskId);
ScheduleBgCopyTilemapToVram(0);
gTasks[taskId].func = Mailbox_ProcessInput;
}
-static void sub_816BC14(void)
+static void ItemStorage_Init(void)
{
- gUnknown_0203BCC4 = AllocZeroed(sizeof(struct Struct203BCC4));
- memset(gUnknown_0203BCC4->windowIds, 0xFF, 0x6);
- gUnknown_0203BCC4->unk666 = 0xFF;
- gUnknown_0203BCC4->spriteId = SPRITE_NONE;
+ sItemStorageMenu = AllocZeroed(sizeof(*sItemStorageMenu));
+ memset(sItemStorageMenu->windowIds, WINDOW_NONE, ITEMWIN_COUNT);
+ sItemStorageMenu->toSwapPos = NOT_SWAPPING;
+ sItemStorageMenu->spriteId = SPRITE_NONE;
}
-static void sub_816BC58(void)
+static void ItemStorage_Free(void)
{
u32 i;
-
- for(i = 0; i < 6; i++)
- sub_816BCC4(i);
- Free(gUnknown_0203BCC4);
+ for (i = 0; i < ITEMWIN_COUNT; i++)
+ ItemStorage_RemoveWindow(i);
+ Free(sItemStorageMenu);
}
-static u8 sub_816BC7C(u8 a)
+static u8 ItemStorage_AddWindow(u8 i)
{
- u8 *windowIdLoc = &(gUnknown_0203BCC4->windowIds[a]);
+ u8 *windowIdLoc = &sItemStorageMenu->windowIds[i];
if (*windowIdLoc == WINDOW_NONE)
{
- *windowIdLoc = AddWindow(&gUnknown_085DFF5C[a]);
+ *windowIdLoc = AddWindow(&sWindowTemplates_ItemStorage[i]);
DrawStdFrameWithCustomTileAndPalette(*windowIdLoc, FALSE, 0x214, 0xE);
ScheduleBgCopyTilemapToVram(0);
}
return *windowIdLoc;
}
-static void sub_816BCC4(u8 a)
+static void ItemStorage_RemoveWindow(u8 i)
{
- u8 *windowIdLoc = &(gUnknown_0203BCC4->windowIds[a]);
+ u8 *windowIdLoc = &sItemStorageMenu->windowIds[i];
if (*windowIdLoc != WINDOW_NONE)
{
ClearStdWindowAndFrameToTransparent(*windowIdLoc, FALSE);
@@ -915,20 +979,25 @@ void ItemStorage_RefreshListMenu(void)
{
u16 i;
- for(i = 0; i < playerPCItemPageInfo.count - 1; i++)
+ // Copy item names for all entries but the last (which is Cancel)
+ for(i = 0; i < gPlayerPCItemPageInfo.count - 1; i++)
{
- CopyItemName_PlayerPC(&(gUnknown_0203BCC4->unk198[i][0]), gSaveBlock1Ptr->pcItems[i].itemId);
- gUnknown_0203BCC4->unk0[i].name = &(gUnknown_0203BCC4->unk198[i][0]);
- gUnknown_0203BCC4->unk0[i].id = i;
+ CopyItemName_PlayerPC(&sItemStorageMenu->itemNames[i][0], gSaveBlock1Ptr->pcItems[i].itemId);
+ sItemStorageMenu->listItems[i].name = &sItemStorageMenu->itemNames[i][0];
+ sItemStorageMenu->listItems[i].id = i;
}
- StringCopy(&(gUnknown_0203BCC4->unk198[i][0]) ,gText_Cancel2);
- gUnknown_0203BCC4->unk0[i].name = &(gUnknown_0203BCC4->unk198[i][0]);
- gUnknown_0203BCC4->unk0[i].id = -2;
- gMultiuseListMenuTemplate = gUnknown_085DFF44;
- gMultiuseListMenuTemplate.windowId = sub_816BC7C(0);
- gMultiuseListMenuTemplate.totalItems = playerPCItemPageInfo.count;
- gMultiuseListMenuTemplate.items = gUnknown_0203BCC4->unk0;
- gMultiuseListMenuTemplate.maxShowed = playerPCItemPageInfo.pageItems;
+
+ // Set up Cancel entry
+ StringCopy(&sItemStorageMenu->itemNames[i][0], gText_Cancel2);
+ sItemStorageMenu->listItems[i].name = &sItemStorageMenu->itemNames[i][0];
+ sItemStorageMenu->listItems[i].id = LIST_CANCEL;
+
+ // Set list menu data
+ gMultiuseListMenuTemplate = sListMenuTemplate_ItemStorage;
+ gMultiuseListMenuTemplate.windowId = ItemStorage_AddWindow(ITEMWIN_LIST);
+ gMultiuseListMenuTemplate.totalItems = gPlayerPCItemPageInfo.count;
+ gMultiuseListMenuTemplate.items = sItemStorageMenu->listItems;
+ gMultiuseListMenuTemplate.maxShowed = gPlayerPCItemPageInfo.pageItems;
}
void CopyItemName_PlayerPC(u8 *string, u16 itemId)
@@ -936,31 +1005,31 @@ void CopyItemName_PlayerPC(u8 *string, u16 itemId)
CopyItemName(itemId, string);
}
-static void ItemStorage_MoveCursor(s32 id, bool8 b, struct ListMenu *thisMenu)
+static void ItemStorage_MoveCursor(s32 id, bool8 onInit, struct ListMenu *list)
{
- if (b != TRUE)
+ if (onInit != TRUE)
PlaySE(SE_SELECT);
- if (gUnknown_0203BCC4->unk666 == 0xFF)
+ if (sItemStorageMenu->toSwapPos == NOT_SWAPPING)
{
- sub_816C0C8();
+ ItemStorage_EraseItemIcon();
if (id != LIST_CANCEL)
- sub_816C060(gSaveBlock1Ptr->pcItems[id].itemId);
+ ItemStorage_DrawItemIcon(gSaveBlock1Ptr->pcItems[id].itemId);
else
- sub_816C060(ITEMPC_GO_BACK_TO_PREV);
- sub_816BEF0(id);
+ ItemStorage_DrawItemIcon(MSG_GO_BACK_TO_PREV);
+ ItemStorage_PrintDescription(id);
}
}
-static void fish4_goto_x5_or_x6(u8 windowId, u32 id, u8 yOffset)
+static void ItemStorage_PrintMenuItem(u8 windowId, u32 id, u8 yOffset)
{
if (id != LIST_CANCEL)
{
- if (gUnknown_0203BCC4->unk666 != 0xFF)
+ if (sItemStorageMenu->toSwapPos != NOT_SWAPPING)
{
- if (gUnknown_0203BCC4->unk666 == (u8)id)
- sub_816BFE0(yOffset, 0, 0xFF);
+ if (sItemStorageMenu->toSwapPos == (u8)id)
+ ItemStorage_DrawSwapArrow(yOffset, 0, TEXT_SPEED_FF);
else
- sub_816BFE0(yOffset, 0xFF, 0xFF);
+ ItemStorage_DrawSwapArrow(yOffset, 0xFF, TEXT_SPEED_FF);
}
ConvertIntToDecimalStringN(gStringVar1, gSaveBlock1Ptr->pcItems[id].quantity, STR_CONV_MODE_RIGHT_ALIGN, 3);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
@@ -968,58 +1037,64 @@ static void fish4_goto_x5_or_x6(u8 windowId, u32 id, u8 yOffset)
}
}
-static void sub_816BEF0(s32 id)
+static void ItemStorage_PrintDescription(s32 id)
{
const u8* description;
- u8 windowId = gUnknown_0203BCC4->windowIds[1];
+ u8 windowId = sItemStorageMenu->windowIds[ITEMWIN_MESSAGE];
- if (id != -2)
+ // Get item description (or Cancel text)
+ if (id != LIST_CANCEL)
description = (u8 *)ItemId_GetDescription(gSaveBlock1Ptr->pcItems[id].itemId);
else
- description = ItemStorage_GetItemPcResponse(ITEMPC_GO_BACK_TO_PREV);
+ description = ItemStorage_GetMessage(MSG_GO_BACK_TO_PREV);
+
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
AddTextPrinterParameterized(windowId, 1, description, 0, 1, 0, NULL);
}
-static void ItemStorage_StartScrollIndicator(void)
+static void ItemStorage_AddScrollIndicator(void)
{
- if (playerPCItemPageInfo.scrollIndicatorTaskId == TASK_NONE)
- playerPCItemPageInfo.scrollIndicatorTaskId = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0xB0, 0xC, 0x94, playerPCItemPageInfo.count - playerPCItemPageInfo.pageItems, 0x13F8, 0x13F8, &(playerPCItemPageInfo.itemsAbove));
+ if (gPlayerPCItemPageInfo.scrollIndicatorTaskId == TASK_NONE)
+ gPlayerPCItemPageInfo.scrollIndicatorTaskId = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 176, 12, 148,
+ gPlayerPCItemPageInfo.count - gPlayerPCItemPageInfo.pageItems,
+ TAG_SCROLL_ARROW,
+ TAG_SCROLL_ARROW,
+ &gPlayerPCItemPageInfo.itemsAbove);
}
static void ItemStorage_RemoveScrollIndicator(void)
{
- if (playerPCItemPageInfo.scrollIndicatorTaskId != TASK_NONE)
+ if (gPlayerPCItemPageInfo.scrollIndicatorTaskId != TASK_NONE)
{
- RemoveScrollIndicatorArrowPair(playerPCItemPageInfo.scrollIndicatorTaskId);
- playerPCItemPageInfo.scrollIndicatorTaskId = TASK_NONE;
+ RemoveScrollIndicatorArrowPair(gPlayerPCItemPageInfo.scrollIndicatorTaskId);
+ gPlayerPCItemPageInfo.scrollIndicatorTaskId = TASK_NONE;
}
}
-static void sub_816BFB8(u8 a, u8 b, u8 speed)
+static void ItemStorage_SetSwapArrow(u8 listTaskId, u8 b, u8 speed)
{
- sub_816BFE0(ListMenuGetYCoordForPrintingArrowCursor(a), b, speed);
+ ItemStorage_DrawSwapArrow(ListMenuGetYCoordForPrintingArrowCursor(listTaskId), b, speed);
}
-static void sub_816BFE0(u8 y, u8 b, u8 speed)
+static void ItemStorage_DrawSwapArrow(u8 y, u8 b, u8 speed)
{
- u8 windowId = gUnknown_0203BCC4->windowIds[0];
+ u8 windowId = sItemStorageMenu->windowIds[ITEMWIN_LIST];
if (b == 0xFF)
FillWindowPixelRect(windowId, PIXEL_FILL(1), 0, y, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1));
else
- AddTextPrinterParameterized4(windowId, 1, 0, y, 0, 0, gUnknown_085DFF8C, speed, gText_SelectorArrow2);
+ AddTextPrinterParameterized4(windowId, 1, 0, y, 0, 0, sSwapArrowTextColors, speed, gText_SelectorArrow2);
}
-static void sub_816C060(u16 itemId)
+static void ItemStorage_DrawItemIcon(u16 itemId)
{
u8 spriteId;
- u8* spriteIdLoc = &(gUnknown_0203BCC4->spriteId);
+ u8* spriteIdLoc = &sItemStorageMenu->spriteId;
if (*spriteIdLoc == SPRITE_NONE)
{
- FreeSpriteTilesByTag(0x13F6);
- FreeSpritePaletteByTag(0x13F6);
- spriteId = AddItemIconSprite(0x13F6, 0x13F6, itemId);
+ FreeSpriteTilesByTag(TAG_ITEM_ICON);
+ FreeSpritePaletteByTag(TAG_ITEM_ICON);
+ spriteId = AddItemIconSprite(TAG_ITEM_ICON, TAG_ITEM_ICON, itemId);
if (spriteId != MAX_SPRITES)
{
*spriteIdLoc = spriteId;
@@ -1030,30 +1105,30 @@ static void sub_816C060(u16 itemId)
}
}
-static void sub_816C0C8(void)
+static void ItemStorage_EraseItemIcon(void)
{
- u8* spriteIdLoc = &(gUnknown_0203BCC4->spriteId);
+ u8* spriteIdLoc = &sItemStorageMenu->spriteId;
if (*spriteIdLoc != SPRITE_NONE)
{
- FreeSpriteTilesByTag(0x13F6);
- FreeSpritePaletteByTag(0x13F6);
- DestroySprite(&(gSprites[*spriteIdLoc]));
+ FreeSpriteTilesByTag(TAG_ITEM_ICON);
+ FreeSpritePaletteByTag(TAG_ITEM_ICON);
+ DestroySprite(&gSprites[*spriteIdLoc]);
*spriteIdLoc = SPRITE_NONE;
}
}
-static void sub_816C110(void)
+static void ItemStorage_CompactList(void)
{
CompactPCItems();
- sub_812220C(gSaveBlock1Ptr->pcItems, 50, &(playerPCItemPageInfo.pageItems), &(playerPCItemPageInfo.count), 0x8);
+ SetItemListPerPageCount(gSaveBlock1Ptr->pcItems, PC_ITEMS_COUNT, &gPlayerPCItemPageInfo.pageItems, &gPlayerPCItemPageInfo.count, 8);
}
-static void sub_816C140(void)
+static void ItemStorage_CompactCursor(void)
{
- sub_812225C(&(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos), playerPCItemPageInfo.pageItems, playerPCItemPageInfo.count);
+ SetCursorWithinListBounds(&gPlayerPCItemPageInfo.itemsAbove, &gPlayerPCItemPageInfo.cursorPos, gPlayerPCItemPageInfo.pageItems, gPlayerPCItemPageInfo.count);
}
-static void ItemStorage_ProcessWithdrawTossInput(u8 taskId)
+static void ItemStorage_CreateListMenu(u8 taskId)
{
s16 *data;
bool32 toss;
@@ -1061,98 +1136,97 @@ static void ItemStorage_ProcessWithdrawTossInput(u8 taskId)
const u8* text;
data = gTasks[taskId].data;
- for(i = 0; i <=3; i++)
- sub_816BC7C(i);
- toss = data[3];
+ for (i = 0; i <= ITEMWIN_LIST_END; i++)
+ ItemStorage_AddWindow(i);
+ toss = tInTossMenu;
text = gText_TossItem;
if (!toss)
text = gText_WithdrawItem;
x = GetStringCenterAlignXOffset(1, text, 104);
- AddTextPrinterParameterized(gUnknown_0203BCC4->windowIds[3], 1, text, x, 1, 0, NULL);
- CopyWindowToVram(gUnknown_0203BCC4->windowIds[2], 2);
- sub_816C110();
- sub_816C140();
+ AddTextPrinterParameterized(sItemStorageMenu->windowIds[ITEMWIN_TITLE], 1, text, x, 1, 0, NULL);
+ CopyWindowToVram(sItemStorageMenu->windowIds[ITEMWIN_ICON], 2);
+ ItemStorage_CompactList();
+ ItemStorage_CompactCursor();
ItemStorage_RefreshListMenu();
- data[5] = ListMenuInit(&gMultiuseListMenuTemplate, playerPCItemPageInfo.itemsAbove, playerPCItemPageInfo.cursorPos);
- ItemStorage_StartScrollIndicator();
+ tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, gPlayerPCItemPageInfo.itemsAbove, gPlayerPCItemPageInfo.cursorPos);
+ ItemStorage_AddScrollIndicator();
ScheduleBgCopyTilemapToVram(0);
gTasks[taskId].func = ItemStorage_ProcessInput;
}
-static const u8* ItemStorage_GetItemPcResponse(u16 itemId)
+static const u8* ItemStorage_GetMessage(u16 itemId)
{
const u8 *string;
switch(itemId)
{
- case ITEMPC_GO_BACK_TO_PREV:
- string = gText_GoBackPrevMenu;
- break;
- case ITEMPC_HOW_MANY_TO_WITHDRAW:
- string = gText_WithdrawHowManyItems;
- break;
- case ITEMPC_WITHDREW_THING:
- string = gText_WithdrawXItems;
- break;
- case ITEMPC_HOW_MANY_TO_TOSS:
- string = gText_TossHowManyVar1s;
- break;
- case ITEMPC_THREW_AWAY_ITEM:
- string = gText_ThrewAwayVar2Var1s;
- break;
- case ITEMPC_NO_MORE_ROOM:
- string = gText_NoRoomInBag;
- break;
- case ITEMPC_TOO_IMPORTANT:
- string = gText_TooImportantToToss;
- break;
- case ITEMPC_OKAY_TO_THROW_AWAY:
- string = gText_ConfirmTossItems;
- break;
- case ITEMPC_SWITCH_WHICH_ITEM:
- string = gText_MoveVar1Where;
- break;
- default:
- string = ItemId_GetDescription(itemId);
- break;
+ case MSG_GO_BACK_TO_PREV:
+ string = gText_GoBackPrevMenu;
+ break;
+ case MSG_HOW_MANY_TO_WITHDRAW:
+ string = gText_WithdrawHowManyItems;
+ break;
+ case MSG_WITHDREW_ITEM:
+ string = gText_WithdrawXItems;
+ break;
+ case MSG_HOW_MANY_TO_TOSS:
+ string = gText_TossHowManyVar1s;
+ break;
+ case MSG_THREW_AWAY_ITEM:
+ string = gText_ThrewAwayVar2Var1s;
+ break;
+ case MSG_NO_MORE_ROOM:
+ string = gText_NoRoomInBag;
+ break;
+ case MSG_TOO_IMPORTANT:
+ string = gText_TooImportantToToss;
+ break;
+ case MSG_OKAY_TO_THROW_AWAY:
+ string = gText_ConfirmTossItems;
+ break;
+ case MSG_SWITCH_WHICH_ITEM:
+ string = gText_MoveVar1Where;
+ break;
+ default:
+ string = ItemId_GetDescription(itemId);
+ break;
}
return string;
}
-static void ItemStorage_PrintItemPcResponse(const u8 *string)
+static void ItemStorage_PrintMessage(const u8 *string)
{
- u8 windowId = gUnknown_0203BCC4->windowIds[1];
+ u8 windowId = sItemStorageMenu->windowIds[ITEMWIN_MESSAGE];
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
StringExpandPlaceholders(gStringVar4, string);
AddTextPrinterParameterized(windowId, 1, gStringVar4, 0, 1, 0, NULL);
}
+// Process input while on the item storage's item list
static void ItemStorage_ProcessInput(u8 taskId)
{
- s16 *data;
- s32 id;
-
- data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (JOY_NEW(SELECT_BUTTON))
{
- ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
- if ((playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos) != (playerPCItemPageInfo.count - 1))
+ // 'Select' starts input for swapping items if not on Cancel
+ ListMenuGetScrollAndRow(tListTaskId, &gPlayerPCItemPageInfo.itemsAbove, &gPlayerPCItemPageInfo.cursorPos);
+ if (gPlayerPCItemPageInfo.itemsAbove + gPlayerPCItemPageInfo.cursorPos != gPlayerPCItemPageInfo.count - 1)
{
PlaySE(SE_SELECT);
- ItemStorage_ItemSwapChoosePrompt(taskId);
+ ItemStorage_StartItemSwap(taskId);
}
}
else
{
- id = ListMenu_ProcessInput(data[5]);
- ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
- switch(id)
+ s32 id = ListMenu_ProcessInput(tListTaskId);
+ ListMenuGetScrollAndRow(tListTaskId, &gPlayerPCItemPageInfo.itemsAbove, &gPlayerPCItemPageInfo.cursorPos);
+ switch (id)
{
case LIST_NOTHING_CHOSEN:
break;
case LIST_CANCEL:
PlaySE(SE_SELECT);
- ItemStorage_GoBackToPlayerPCMenu(taskId);
+ ItemStorage_ExitItemList(taskId);
break;
default:
PlaySE(SE_SELECT);
@@ -1162,50 +1236,46 @@ static void ItemStorage_ProcessInput(u8 taskId)
}
}
-static void ItemStorage_GoBackToPlayerPCMenu_InitStorage(u8 taskId)
+static void ItemStorage_ReturnToMenuSelect(u8 taskId)
{
- s16 *data;
-
- data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (!IsDma3ManagerBusyWithBgCopy())
{
DrawDialogueFrame(0, 0);
- if (!data[3])
- InitItemStorageMenu(taskId, ITEMPC_MENU_WITHDRAW);
+
+ // Select Withdraw/Toss by default depending on which was just exited
+ if (!tInTossMenu)
+ InitItemStorageMenu(taskId, MENU_WITHDRAW);
else
- InitItemStorageMenu(taskId, ITEMPC_MENU_TOSS);
+ InitItemStorageMenu(taskId, MENU_TOSS);
gTasks[taskId].func = ItemStorageMenuProcessInput;
}
}
-static void ItemStorage_GoBackToPlayerPCMenu(u8 taskId)
+static void ItemStorage_ExitItemList(u8 taskId)
{
- s16 *data;
-
- data = gTasks[taskId].data;
- sub_816C0C8();
+ s16 *data = gTasks[taskId].data;
+ ItemStorage_EraseItemIcon();
ItemStorage_RemoveScrollIndicator();
- DestroyListMenuTask(data[5], NULL, NULL);
- DestroySwapLineSprites(gUnknown_0203BCC4->spriteIds, 7);
- sub_816BC58();
- gTasks[taskId].func = ItemStorage_GoBackToPlayerPCMenu_InitStorage;
+ DestroyListMenuTask(tListTaskId, NULL, NULL);
+ DestroySwapLineSprites(sItemStorageMenu->swapLineSpriteIds, SWAP_LINE_LENGTH);
+ ItemStorage_Free();
+ gTasks[taskId].func = ItemStorage_ReturnToMenuSelect;
}
-static void ItemStorage_ItemSwapChoosePrompt(u8 taskId)
+static void ItemStorage_StartItemSwap(u8 taskId)
{
- s16 *data;
-
- data = gTasks[taskId].data;
- ListMenuSetUnkIndicatorsStructField(data[5], 16, 1);
- gUnknown_0203BCC4->unk666 = (playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos);
- sub_816BFB8(data[5], 0, 0);
- UpdateSwapLinePos(gUnknown_0203BCC4->unk666);
- CopyItemName(gSaveBlock1Ptr->pcItems[gUnknown_0203BCC4->unk666].itemId, gStringVar1);
- ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_SWITCH_WHICH_ITEM));
- gTasks[taskId].func = sub_816C4FC;
+ s16 *data = gTasks[taskId].data;
+ ListMenuSetUnkIndicatorsStructField(tListTaskId, 16, 1);
+ sItemStorageMenu->toSwapPos = gPlayerPCItemPageInfo.itemsAbove + gPlayerPCItemPageInfo.cursorPos;
+ ItemStorage_SetSwapArrow(tListTaskId, 0, 0);
+ ItemStorage_UpdateSwapLinePos(sItemStorageMenu->toSwapPos);
+ CopyItemName(gSaveBlock1Ptr->pcItems[sItemStorageMenu->toSwapPos].itemId, gStringVar1);
+ ItemStorage_PrintMessage(ItemStorage_GetMessage(MSG_SWITCH_WHICH_ITEM));
+ gTasks[taskId].func = ItemStorage_ProcessItemSwapInput;
}
-static void sub_816C4FC(u8 taskId)
+static void ItemStorage_ProcessItemSwapInput(u8 taskId)
{
s16 *data;
s32 id;
@@ -1213,225 +1283,220 @@ static void sub_816C4FC(u8 taskId)
data = gTasks[taskId].data;
if (JOY_NEW(SELECT_BUTTON))
{
- ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
- ItemStorage_DoItemSwap(taskId, FALSE);
+ ListMenuGetScrollAndRow(tListTaskId, &gPlayerPCItemPageInfo.itemsAbove, &gPlayerPCItemPageInfo.cursorPos);
+ ItemStorage_FinishItemSwap(taskId, FALSE);
return;
}
- id = ListMenu_ProcessInput(data[5]);
- ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
- SetSwapLineSpritesInvisibility(gUnknown_0203BCC4->spriteIds, 7, FALSE);
- UpdateSwapLinePos(playerPCItemPageInfo.cursorPos);
- switch(id)
+ id = ListMenu_ProcessInput(tListTaskId);
+ ListMenuGetScrollAndRow(tListTaskId, &gPlayerPCItemPageInfo.itemsAbove, &gPlayerPCItemPageInfo.cursorPos);
+ SetSwapLineSpritesInvisibility(sItemStorageMenu->swapLineSpriteIds, SWAP_LINE_LENGTH, FALSE);
+ ItemStorage_UpdateSwapLinePos(gPlayerPCItemPageInfo.cursorPos);
+ switch (id)
{
case LIST_NOTHING_CHOSEN:
break;
case LIST_CANCEL:
if (JOY_NEW(A_BUTTON))
- {
- ItemStorage_DoItemSwap(taskId, FALSE);
- }
+ ItemStorage_FinishItemSwap(taskId, FALSE);
else
- {
- ItemStorage_DoItemSwap(taskId, TRUE);
- }
+ ItemStorage_FinishItemSwap(taskId, TRUE);
break;
default:
- ItemStorage_DoItemSwap(taskId, FALSE);
+ ItemStorage_FinishItemSwap(taskId, FALSE);
break;
}
}
-static void ItemStorage_DoItemSwap(u8 taskId, bool8 a)
+static void ItemStorage_FinishItemSwap(u8 taskId, bool8 canceled)
{
- s16 *data;
- u16 b;
-
- data = gTasks[taskId].data;
- b = (playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos);
+ s16 *data = gTasks[taskId].data;
+ u16 newPos = gPlayerPCItemPageInfo.itemsAbove + gPlayerPCItemPageInfo.cursorPos;
PlaySE(SE_SELECT);
- DestroyListMenuTask(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
- if (!a)
+ DestroyListMenuTask(tListTaskId, &gPlayerPCItemPageInfo.itemsAbove, &gPlayerPCItemPageInfo.cursorPos);
+
+ if (!canceled && sItemStorageMenu->toSwapPos != newPos && sItemStorageMenu->toSwapPos != newPos - 1)
{
- if (gUnknown_0203BCC4->unk666 != b)
- {
- if (gUnknown_0203BCC4->unk666 != b - 1)
- {
- MoveItemSlotInList(gSaveBlock1Ptr->pcItems, gUnknown_0203BCC4->unk666, b);
- ItemStorage_RefreshListMenu();
- }
- }
+ MoveItemSlotInList(gSaveBlock1Ptr->pcItems, sItemStorageMenu->toSwapPos, newPos);
+ ItemStorage_RefreshListMenu();
}
- if (gUnknown_0203BCC4->unk666 < b)
- playerPCItemPageInfo.cursorPos--;
- SetSwapLineSpritesInvisibility(gUnknown_0203BCC4->spriteIds, 7, TRUE);
- gUnknown_0203BCC4->unk666 = 0xFF;
- data[5] = ListMenuInit(&gMultiuseListMenuTemplate, playerPCItemPageInfo.itemsAbove, playerPCItemPageInfo.cursorPos);
+ if (sItemStorageMenu->toSwapPos < newPos)
+ gPlayerPCItemPageInfo.cursorPos--;
+
+ SetSwapLineSpritesInvisibility(sItemStorageMenu->swapLineSpriteIds, SWAP_LINE_LENGTH, TRUE);
+ sItemStorageMenu->toSwapPos = NOT_SWAPPING;
+ tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, gPlayerPCItemPageInfo.itemsAbove, gPlayerPCItemPageInfo.cursorPos);
ScheduleBgCopyTilemapToVram(0);
gTasks[taskId].func = ItemStorage_ProcessInput;
}
-static void UpdateSwapLinePos(u8 y)
+static void ItemStorage_UpdateSwapLinePos(u8 y)
{
- UpdateSwapLineSpritesPos(gUnknown_0203BCC4->spriteIds, 7, 128, ((y+1) * 16));
+ UpdateSwapLineSpritesPos(sItemStorageMenu->swapLineSpriteIds, SWAP_LINE_LENGTH, 128, (y+1) * 16);
}
-static void sub_816C6BC(u8 windowId, u16 value, u32 mode, u8 x, u8 y, u8 n)
+static void ItemStorage_PrintItemQuantity(u8 windowId, u16 value, u32 mode, u8 x, u8 y, u8 n)
{
ConvertIntToDecimalStringN(gStringVar1, value, mode, n);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
AddTextPrinterParameterized(windowId, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 48), y, 0, NULL);
}
+// Start an item Withdraw/Toss
static void ItemStorage_DoItemAction(u8 taskId)
{
- s16 *data;
- u16 b;
-
- data = gTasks[taskId].data;
- b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove);
+ s16 *data = gTasks[taskId].data;
+ u16 pos = gPlayerPCItemPageInfo.cursorPos + gPlayerPCItemPageInfo.itemsAbove;
ItemStorage_RemoveScrollIndicator();
- data[2] = 1;
- if (!data[3])
+ tQuantity = 1;
+
+ if (!tInTossMenu)
{
- if (gSaveBlock1Ptr->pcItems[b].quantity == 1)
+ if (gSaveBlock1Ptr->pcItems[pos].quantity == 1)
{
+ // Withdrawing 1 item, do it automatically
ItemStorage_DoItemWithdraw(taskId);
return;
}
- CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1);
- ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_HOW_MANY_TO_WITHDRAW));
+
+ // Withdrawing multiple items, show "how many" message
+ CopyItemName(gSaveBlock1Ptr->pcItems[pos].itemId, gStringVar1);
+ ItemStorage_PrintMessage(ItemStorage_GetMessage(MSG_HOW_MANY_TO_WITHDRAW));
}
else
{
- if (gSaveBlock1Ptr->pcItems[b].quantity == 1)
+ if (gSaveBlock1Ptr->pcItems[pos].quantity == 1)
{
+ // Tossing 1 item, do it automatically
ItemStorage_DoItemToss(taskId);
return;
}
- CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1);
- ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_HOW_MANY_TO_TOSS));
+
+ // Tossing multiple items, show "how many" message
+ CopyItemName(gSaveBlock1Ptr->pcItems[pos].itemId, gStringVar1);
+ ItemStorage_PrintMessage(ItemStorage_GetMessage(MSG_HOW_MANY_TO_TOSS));
}
- sub_816C6BC(sub_816BC7C(4), data[2], STR_CONV_MODE_LEADING_ZEROS, 8, 1, 3);
+
+ // Set up "how many" prompt
+ ItemStorage_PrintItemQuantity(ItemStorage_AddWindow(ITEMWIN_QUANTITY), tQuantity, STR_CONV_MODE_LEADING_ZEROS, 8, 1, 3);
gTasks[taskId].func = ItemStorage_HandleQuantityRolling;
}
static void ItemStorage_HandleQuantityRolling(u8 taskId)
{
- s16 *data;
- u16 b;
+ s16 *data = gTasks[taskId].data;
+ u16 pos = gPlayerPCItemPageInfo.cursorPos + gPlayerPCItemPageInfo.itemsAbove;
- data = gTasks[taskId].data;
- b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove);
- if (AdjustQuantityAccordingToDPadInput(&(data[2]), gSaveBlock1Ptr->pcItems[b].quantity) == TRUE)
- sub_816C6BC(sub_816BC7C(4), data[2], STR_CONV_MODE_LEADING_ZEROS, 8, 1, 3);
+ if (AdjustQuantityAccordingToDPadInput(&tQuantity, gSaveBlock1Ptr->pcItems[pos].quantity) == TRUE)
+ {
+ ItemStorage_PrintItemQuantity(ItemStorage_AddWindow(ITEMWIN_QUANTITY), tQuantity, STR_CONV_MODE_LEADING_ZEROS, 8, 1, 3);
+ }
else
{
if (JOY_NEW(A_BUTTON))
{
+ // Quantity confirmed, perform action
PlaySE(SE_SELECT);
- sub_816BCC4(4);
- if (!data[3])
+ ItemStorage_RemoveWindow(ITEMWIN_QUANTITY);
+ if (!tInTossMenu)
ItemStorage_DoItemWithdraw(taskId);
else
ItemStorage_DoItemToss(taskId);
}
else if (JOY_NEW(B_BUTTON))
{
+ // Canceled action
PlaySE(SE_SELECT);
- sub_816BCC4(4);
- ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(gSaveBlock1Ptr->pcItems[b].itemId));
- ItemStorage_StartScrollIndicatorAndProcessInput(taskId);
+ ItemStorage_RemoveWindow(ITEMWIN_QUANTITY);
+ ItemStorage_PrintMessage(ItemStorage_GetMessage(gSaveBlock1Ptr->pcItems[pos].itemId));
+ ItemStorage_ReturnToListInput(taskId);
}
}
}
static void ItemStorage_DoItemWithdraw(u8 taskId)
{
- s16 *data;
- u16 b;
+ s16 *data = gTasks[taskId].data;
+ u16 pos = gPlayerPCItemPageInfo.cursorPos + gPlayerPCItemPageInfo.itemsAbove;
- data = gTasks[taskId].data;
- b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove);
- if (AddBagItem(gSaveBlock1Ptr->pcItems[b].itemId, data[2]) == TRUE)
+ if (AddBagItem(gSaveBlock1Ptr->pcItems[pos].itemId, tQuantity) == TRUE)
{
- CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1);
- ConvertIntToDecimalStringN(gStringVar2, data[2], STR_CONV_MODE_LEFT_ALIGN, 3);
- ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_WITHDREW_THING));
+ // Item withdrawn
+ CopyItemName(gSaveBlock1Ptr->pcItems[pos].itemId, gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, tQuantity, STR_CONV_MODE_LEFT_ALIGN, 3);
+ ItemStorage_PrintMessage(ItemStorage_GetMessage(MSG_WITHDREW_ITEM));
gTasks[taskId].func = ItemStorage_HandleRemoveItem;
}
else
{
- data[2] = 0;
- ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_NO_MORE_ROOM));
- gTasks[taskId].func = ItemStorage_WaitPressHandleResumeProcessInput;
+ // No room to withdraw items
+ tQuantity = 0;
+ ItemStorage_PrintMessage(ItemStorage_GetMessage(MSG_NO_MORE_ROOM));
+ gTasks[taskId].func = ItemStorage_HandleErrorMessageInput;
}
}
static void ItemStorage_DoItemToss(u8 taskId)
{
- s16 *data;
- u16 b;
+ s16 *data = gTasks[taskId].data;
+ u16 pos = gPlayerPCItemPageInfo.cursorPos + gPlayerPCItemPageInfo.itemsAbove;
- data = gTasks[taskId].data;
- b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove);
- if (!ItemId_GetImportance(gSaveBlock1Ptr->pcItems[b].itemId))
+ if (!ItemId_GetImportance(gSaveBlock1Ptr->pcItems[pos].itemId))
{
- CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1);
- ConvertIntToDecimalStringN(gStringVar2, data[2], STR_CONV_MODE_LEFT_ALIGN, 3);
- ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_OKAY_TO_THROW_AWAY));
- CreateYesNoMenuWithCallbacks(taskId, &gUnknown_085DFF84, 1, 0, 1, 0x214, 0xE, &ResumeFromWithdrawYesNoFuncList);
+ // Show toss confirmation prompt
+ CopyItemName(gSaveBlock1Ptr->pcItems[pos].itemId, gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, tQuantity, STR_CONV_MODE_LEFT_ALIGN, 3);
+ ItemStorage_PrintMessage(ItemStorage_GetMessage(MSG_OKAY_TO_THROW_AWAY));
+ CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates_ItemStorage[ITEMWIN_YESNO], 1, 0, 1, 0x214, 0xE, &ItemTossYesNoFuncs);
}
else
{
- data[2] = 0;
- ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_TOO_IMPORTANT));
- gTasks[taskId].func = ItemStorage_WaitPressHandleResumeProcessInput;
+ // Can't toss important items
+ tQuantity = 0;
+ ItemStorage_PrintMessage(ItemStorage_GetMessage(MSG_TOO_IMPORTANT));
+ gTasks[taskId].func = ItemStorage_HandleErrorMessageInput;
}
}
-static void ItemStorage_ResumeInputFromYesToss(u8 taskId)
+static void ItemStorage_TossItemYes(u8 taskId)
{
- ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_THREW_AWAY_ITEM));
+ ItemStorage_PrintMessage(ItemStorage_GetMessage(MSG_THREW_AWAY_ITEM));
gTasks[taskId].func = ItemStorage_HandleRemoveItem;
}
-static void ItemStorage_ResumeInputFromNoToss(u8 taskId)
+static void ItemStorage_TossItemNo(u8 taskId)
{
- ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(gSaveBlock1Ptr->pcItems[(playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos)].itemId));
- ItemStorage_StartScrollIndicatorAndProcessInput(taskId);
+ ItemStorage_PrintMessage(ItemStorage_GetMessage(gSaveBlock1Ptr->pcItems[gPlayerPCItemPageInfo.itemsAbove + gPlayerPCItemPageInfo.cursorPos].itemId));
+ ItemStorage_ReturnToListInput(taskId);
}
+// Remove item from PC (was either Tossed or Withdrawn)
static void ItemStorage_HandleRemoveItem(u8 taskId)
{
- s16 *data;
-
- data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (JOY_NEW(A_BUTTON | B_BUTTON))
{
- RemovePCItem((playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove), data[2]);
- DestroyListMenuTask(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
- sub_816C110();
- sub_816C140();
+ RemovePCItem(gPlayerPCItemPageInfo.cursorPos + gPlayerPCItemPageInfo.itemsAbove, tQuantity);
+ DestroyListMenuTask(tListTaskId, &gPlayerPCItemPageInfo.itemsAbove, &gPlayerPCItemPageInfo.cursorPos);
+ ItemStorage_CompactList();
+ ItemStorage_CompactCursor();
ItemStorage_RefreshListMenu();
- data[5] = ListMenuInit(&gMultiuseListMenuTemplate, playerPCItemPageInfo.itemsAbove, playerPCItemPageInfo.cursorPos);
- ItemStorage_StartScrollIndicatorAndProcessInput(taskId);
+ tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, gPlayerPCItemPageInfo.itemsAbove, gPlayerPCItemPageInfo.cursorPos);
+ ItemStorage_ReturnToListInput(taskId);
}
}
-static void ItemStorage_WaitPressHandleResumeProcessInput(u8 taskId)
+static void ItemStorage_HandleErrorMessageInput(u8 taskId)
{
- s16 *data;
-
- data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (JOY_NEW(A_BUTTON | B_BUTTON))
{
- ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(gSaveBlock1Ptr->pcItems[(playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos)].itemId));
- ItemStorage_StartScrollIndicatorAndProcessInput(taskId);
+ ItemStorage_PrintMessage(ItemStorage_GetMessage(gSaveBlock1Ptr->pcItems[gPlayerPCItemPageInfo.itemsAbove + gPlayerPCItemPageInfo.cursorPos].itemId));
+ ItemStorage_ReturnToListInput(taskId);
}
}
-static void ItemStorage_StartScrollIndicatorAndProcessInput(u8 taskId)
+static void ItemStorage_ReturnToListInput(u8 taskId)
{
- ItemStorage_StartScrollIndicator();
+ ItemStorage_AddScrollIndicator();
gTasks[taskId].func = ItemStorage_ProcessInput;
}
diff --git a/src/region_map.c b/src/region_map.c
index 1a25d140c..4e547b5fb 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -48,6 +48,12 @@
#define FLYDESTICON_RED_OUTLINE 6
+enum {
+ TAG_CURSOR,
+ TAG_PLAYER_ICON,
+ TAG_FLY_ICON,
+};
+
// Static type declarations
struct MultiNameFlyDest
@@ -237,13 +243,13 @@ static const union AnimCmd *const sRegionMapCursorAnimTable[] =
static const struct SpritePalette sRegionMapCursorSpritePalette =
{
.data = sRegionMapCursorPal,
- .tag = 0
+ .tag = TAG_CURSOR
};
static const struct SpriteTemplate sRegionMapCursorSpriteTemplate =
{
- .tileTag = 0,
- .paletteTag = 0,
+ .tileTag = TAG_CURSOR,
+ .paletteTag = TAG_CURSOR,
.oam = &sRegionMapCursorOam,
.anims = sRegionMapCursorAnimTable,
.images = NULL,
@@ -419,7 +425,7 @@ static const struct WindowTemplate sFlyMapWindowTemplates[] =
static const struct SpritePalette sFlyTargetIconsSpritePalette =
{
.data = sFlyTargetIcons_Pal,
- .tag = 2
+ .tag = TAG_FLY_ICON
};
static const u16 sRedOutlineFlyDestinations[][2] =
@@ -497,8 +503,8 @@ static const union AnimCmd *const sFlyDestIcon_Anims[] =
static const struct SpriteTemplate sFlyDestIconSpriteTemplate =
{
- .tileTag = 2,
- .paletteTag = 2,
+ .tileTag = TAG_FLY_ICON,
+ .paletteTag = TAG_FLY_ICON,
.oam = &sFlyDestIcon_OamData,
.anims = sFlyDestIcon_Anims,
.images = NULL,
@@ -1692,8 +1698,8 @@ void CB2_OpenFlyMap(void)
break;
case 4:
InitRegionMap(&sFlyMap->regionMap, FALSE);
- CreateRegionMapCursor(0, 0);
- CreateRegionMapPlayerIcon(1, 1);
+ CreateRegionMapCursor(TAG_CURSOR, TAG_CURSOR);
+ CreateRegionMapPlayerIcon(TAG_PLAYER_ICON, TAG_PLAYER_ICON);
sFlyMap->mapSecId = sFlyMap->regionMap.mapSecId;
StringFill(sFlyMap->nameBuffer, CHAR_SPACE, MAP_NAME_LENGTH);
sDrawFlyDestTextWindow = TRUE;
@@ -1827,7 +1833,7 @@ static void LoadFlyDestIcons(void)
LZ77UnCompWram(sFlyTargetIcons_Gfx, sFlyMap->tileBuffer);
sheet.data = sFlyMap->tileBuffer;
sheet.size = sizeof(sFlyMap->tileBuffer);
- sheet.tag = 2;
+ sheet.tag = TAG_FLY_ICON;
LoadSpriteSheet(&sheet);
LoadSpritePalette(&sFlyTargetIconsSpritePalette);
CreateFlyDestIcons();
diff --git a/src/secret_base.c b/src/secret_base.c
index e1c62e2f2..ce455642b 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -1074,7 +1074,7 @@ void DeleteRegistry_Yes_Callback(u8 taskId)
DestroyListMenuTask(tListTaskId, &tScrollOffset, &tSelectedRow);
gSaveBlock1Ptr->secretBases[tSelectedBaseId].registryStatus = UNREGISTERED;
BuildRegistryMenuItems(taskId);
- sub_812225C(&tScrollOffset, &tSelectedRow, tMaxShownItems, tNumBases);
+ SetCursorWithinListBounds(&tScrollOffset, &tSelectedRow, tMaxShownItems, tNumBases);
FinalizeRegistryMenu(taskId);
gTasks[taskId].func = HandleRegistryMenuInput;
}