summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2020-12-30 17:35:33 -0500
committerGriffinR <griffin.g.richards@gmail.com>2020-12-30 17:56:31 -0500
commit7ae78dc7738168bebb74c1ac43f600d1fb3688ea (patch)
tree59fb6b3ffd6dde0d7f0f8bc9ea9980dbe284ac57 /src
parent0bf49198f62484284994f6f54c68597608013eb2 (diff)
Finish factory select screen doc
Diffstat (limited to 'src')
-rw-r--r--src/battle_factory_screen.c291
1 files changed, 169 insertions, 122 deletions
diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c
index 13edf6fef..0fc578b3f 100644
--- a/src/battle_factory_screen.c
+++ b/src/battle_factory_screen.c
@@ -43,21 +43,25 @@
#define SELECTABLE_MONS_COUNT 6
-#define PALTAG_BALL_GRAY 0x64
-#define PALTAG_BALL_SELECTED 0x65
-#define PALTAG_INTERFACE 0x66
-#define PALTAG_MON_PIC_BG 0x67
-
-#define GFXTAG_BALL 0x64
-#define GFXTAG_ARROW 0x65
-#define GFXTAG_MENU_HIGHLIGHT_LEFT 0x66
-#define GFXTAG_MENU_HIGHLIGHT_RIGHT 0x67
-#define GFXTAG_ACTION_BOX_LEFT 0x68
-#define GFXTAG_ACTION_BOX_RIGHT 0x69
-#define GFXTAG_ACTION_HIGHLIGHT_LEFT 0x6A
-#define GFXTAG_ACTION_HIGHLIGHT_MIDDLE 0x6B
-#define GFXTAG_ACTION_HIGHLIGHT_RIGHT 0x6C
-#define GFXTAG_MON_PIC_BG_ANIM 0x6D
+enum {
+ PALTAG_BALL_GRAY = 100,
+ PALTAG_BALL_SELECTED,
+ PALTAG_INTERFACE,
+ PALTAG_MON_PIC_BG,
+};
+
+enum {
+ GFXTAG_BALL = 100,
+ GFXTAG_ARROW,
+ GFXTAG_MENU_HIGHLIGHT_LEFT,
+ GFXTAG_MENU_HIGHLIGHT_RIGHT,
+ GFXTAG_ACTION_BOX_LEFT,
+ GFXTAG_ACTION_BOX_RIGHT,
+ GFXTAG_ACTION_HIGHLIGHT_LEFT,
+ GFXTAG_ACTION_HIGHLIGHT_MIDDLE,
+ GFXTAG_ACTION_HIGHLIGHT_RIGHT,
+ GFXTAG_MON_PIC_BG_ANIM,
+};
// Tasks in this file universally use data[0] as a state for switches
#define tState data[0]
@@ -69,6 +73,14 @@ enum {
FADESTATE_DELAY
};
+// Return states for the Select Actions
+enum {
+ SELECT_SUMMARY,
+ SELECT_CONTINUE_CHOOSING,
+ SELECT_CONFIRM_MONS,
+ SELECT_INVALID_MON,
+};
+
struct FactorySelectableMon
{
u16 monId;
@@ -129,7 +141,7 @@ struct FactorySwapScreen
u8 yesNoCursorPos;
u8 actionsCount;
const struct SwapScreenAction *actionsData;
- u8 unused1C[4];
+ u8 unused[4];
bool8 monSwapped;
u8 fadeSpeciesNameTaskId;
bool8 fadeSpeciesNameActive;
@@ -161,22 +173,22 @@ static void Select_PrintMonSpecies(void);
static void Select_PrintMonCategory(void);
static void Select_PrintRentalPkmnString(void);
static void Select_CopyMonsToPlayerParty(void);
-static void sub_819C4B4(void);
+static void Select_ShowChosenMons(void);
static void Select_ShowYesNoOptions(void);
-static void sub_819C568(void);
+static void Select_HideChosenMons(void);
static void Select_ShowMenuOptions(void);
static void Select_PrintMenuOptions(void);
static void Select_PrintYesNoOptions(void);
static void Select_Task_FadeSpeciesName(u8);
-static void sub_819C1D0(u8);
+static void Select_Task_OpenChosenMonPics(u8);
static void Select_Task_HandleChooseMons(u8);
static void Select_Task_HandleMenu(u8);
static void CreateFrontierFactorySelectableMons(u8);
static void CreateSlateportTentSelectableMons(u8);
static void Select_SetBallSpritePaletteNum(u8);
-static void sub_819B958(u8);
+static void Select_ErasePopupMenu(u8);
static u8 Select_RunMenuOptionFunc(void);
-static u8 sub_819BC9C(void);
+static u8 Select_DeclineChosenMons(void);
static u8 Select_OptionSummary(void);
static u8 Select_OptionOthers(void);
static u8 Select_OptionRentDeselect(void);
@@ -226,7 +238,6 @@ static void Swap_ActionMon(u8);
static void Swap_ActionCancel(u8);
static void Swap_ActionPkmnForSwap(u8);
-// Ewram variables
static EWRAM_DATA u8 *sSelectMenuTilesetBuffer = NULL;
static EWRAM_DATA u8 *sSelectMonPicBgTilesetBuffer = NULL;
static EWRAM_DATA u8 *sSelectMenuTilemapBuffer = NULL;
@@ -1092,6 +1103,26 @@ void DoBattleFactorySelectScreen(void)
SetMainCallback2(CB2_InitSelectScreen);
}
+// States for the main tasks of the Select_ functions after initialization, including:
+// Select_Task_OpenSummaryScreen, Select_Task_HandleYesNo, Select_Task_HandleMenu, and Select_Task_HandleChooseMons
+// Unnecessarily complicated, could easily have just kept states numbered in each task always starting at 0
+// There's only one instance (Select_Task_HandleChooseMons) where a non-initial case is used
+// Select_Task_Exit has its own straightforward states
+#define STATE_CHOOSE_MONS_INIT 0
+#define STATE_CHOOSE_MONS_HANDLE_INPUT 1
+#define STATE_MENU_INIT 2
+#define STATE_MENU_HANDLE_INPUT 3
+#define STATE_YESNO_SHOW_OPTIONS 4
+#define STATE_YESNO_HANDLE_INPUT 5
+#define STATE_SUMMARY_FADE 6
+#define STATE_SUMMARY_CLEAN 7
+#define STATE_SUMMARY_SHOW 8
+#define STATE_MENU_SHOW_OPTIONS 9
+#define STATE_YESNO_SHOW_MONS 10
+#define STATE_CHOOSE_MONS_INVALID 11
+#define STATE_MENU_REINIT 12
+#define STATE_MENU_RESHOW 13
+
static void CB2_InitSelectScreen(void)
{
u8 taskId;
@@ -1217,14 +1248,14 @@ static void CB2_InitSelectScreen(void)
{
gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].tState = 0;
taskId = CreateTask(Select_Task_HandleChooseMons, 0);
- gTasks[taskId].tState = 0;
+ gTasks[taskId].tState = STATE_CHOOSE_MONS_INIT;
}
else
{
gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].tState = 1;
sFactorySelectScreen->fadeSpeciesNameActive = FALSE;
taskId = CreateTask(Select_Task_HandleMenu, 0);
- gTasks[taskId].tState = 13;
+ gTasks[taskId].tState = STATE_MENU_RESHOW;
}
SetMainCallback2(CB2_SelectScreen);
break;
@@ -1360,11 +1391,12 @@ static void Select_HandleMonSelectionChange(void)
if (sFactorySelectScreen->mons[cursorPos].selectedId) // Deselect a mon.
{
paletteNum = IndexOfSpritePaletteTag(PALTAG_BALL_GRAY);
- if (sFactorySelectScreen->selectingMonsState == 3 && sFactorySelectScreen->mons[cursorPos].selectedId == 1)
+ if (sFactorySelectScreen->selectingMonsState == FRONTIER_PARTY_SIZE
+ && sFactorySelectScreen->mons[cursorPos].selectedId == 1)
{
for (i = 0; i < SELECTABLE_MONS_COUNT; i++)
{
- if (sFactorySelectScreen->mons[i].selectedId == 2)
+ if (sFactorySelectScreen->mons[i].selectedId == FRONTIER_PARTY_SIZE - 1)
break;
}
if (i == SELECTABLE_MONS_COUNT)
@@ -1404,12 +1436,12 @@ static void Select_Task_OpenSummaryScreen(u8 taskId)
switch (gTasks[taskId].tState)
{
- case 6:
+ case STATE_SUMMARY_FADE:
gPlttBufferUnfaded[228] = gPlttBufferFaded[228];
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gTasks[taskId].tState = 7;
+ gTasks[taskId].tState = STATE_SUMMARY_CLEAN;
break;
- case 7:
+ case STATE_SUMMARY_CLEAN:
if (!gPaletteFade.active)
{
DestroyTask(sFactorySelectScreen->fadeSpeciesNameTaskId);
@@ -1420,10 +1452,10 @@ static void Select_Task_OpenSummaryScreen(u8 taskId)
FREE_AND_SET_NULL(sSelectMenuTilemapBuffer);
FREE_AND_SET_NULL(sSelectMonPicBgTilemapBuffer);
FreeAllWindowBuffers();
- gTasks[taskId].tState = 8;
+ gTasks[taskId].tState = STATE_SUMMARY_SHOW;
}
break;
- case 8:
+ case STATE_SUMMARY_SHOW:
sFactorySelectScreen->speciesNameColorBackup = gPlttBufferUnfaded[228];
DestroyTask(taskId);
sFactorySelectScreen->fromSummaryScreen = TRUE;
@@ -1465,6 +1497,7 @@ static void Select_Task_Exit(u8 taskId)
}
}
+// Handles the Yes/No prompt when confirming the 3 selected rental pokemon
static void Select_Task_HandleYesNo(u8 taskId)
{
if (sFactorySelectScreen->monPicAnimating == TRUE)
@@ -1472,42 +1505,43 @@ static void Select_Task_HandleYesNo(u8 taskId)
switch (gTasks[taskId].tState)
{
- case 10:
- sub_819C4B4();
- gTasks[taskId].tState = 4;
+ case STATE_YESNO_SHOW_MONS:
+ Select_ShowChosenMons();
+ gTasks[taskId].tState = STATE_YESNO_SHOW_OPTIONS;
break;
- case 4:
+ case STATE_YESNO_SHOW_OPTIONS:
Select_ShowYesNoOptions();
- gTasks[taskId].tState = 5;
+ gTasks[taskId].tState = STATE_YESNO_HANDLE_INPUT;
break;
- case 5:
+ case STATE_YESNO_HANDLE_INPUT:
if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
if (sFactorySelectScreen->yesNoCursorPos == 0)
{
- // Selected Yes
- sub_819C568();
+ // Selected Yes, confirmed selected pokemon
+ Select_HideChosenMons();
gTasks[taskId].tState = 0;
gTasks[taskId].func = Select_Task_Exit;
}
else
{
- // Selected No
- sub_819B958(SELECT_WIN_YES_NO);
- sub_819BC9C();
+ // Selected No, continue choosing pokemon
+ Select_ErasePopupMenu(SELECT_WIN_YES_NO);
+ Select_DeclineChosenMons();
sFactorySelectScreen->fadeSpeciesNameActive = TRUE;
- gTasks[taskId].tState = 1;
+ gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT;
gTasks[taskId].func = Select_Task_HandleChooseMons;
}
}
else if (JOY_NEW(B_BUTTON))
{
+ // Pressed B, Continue choosing pokemon
PlaySE(SE_SELECT);
- sub_819B958(SELECT_WIN_YES_NO);
- sub_819BC9C();
+ Select_ErasePopupMenu(SELECT_WIN_YES_NO);
+ Select_DeclineChosenMons();
sFactorySelectScreen->fadeSpeciesNameActive = TRUE;
- gTasks[taskId].tState = 1;
+ gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT;
gTasks[taskId].func = Select_Task_HandleChooseMons;
}
else if (JOY_REPEAT(DPAD_UP))
@@ -1524,48 +1558,49 @@ static void Select_Task_HandleYesNo(u8 taskId)
}
}
+// Handles the popup menu that shows when a pokemon is selected
static void Select_Task_HandleMenu(u8 taskId)
{
switch (gTasks[taskId].tState)
{
- case 2:
+ case STATE_MENU_INIT:
if (!sFactorySelectScreen->fromSummaryScreen)
OpenMonPic(&sFactorySelectScreen->monPics[1].bgSpriteId, &sFactorySelectScreen->monPicAnimating, FALSE);
- gTasks[taskId].tState = 9;
+ gTasks[taskId].tState = STATE_MENU_SHOW_OPTIONS;
break;
- case 9:
+ case STATE_MENU_SHOW_OPTIONS:
if (sFactorySelectScreen->monPicAnimating != TRUE)
{
Select_ShowMenuOptions();
sFactorySelectScreen->fromSummaryScreen = FALSE;
- gTasks[taskId].tState = 3;
+ gTasks[taskId].tState = STATE_MENU_HANDLE_INPUT;
}
break;
- case 3:
+ case STATE_MENU_HANDLE_INPUT:
if (JOY_NEW(A_BUTTON))
{
u8 retVal;
PlaySE(SE_SELECT);
retVal = Select_RunMenuOptionFunc();
- if (retVal == 1)
+ if (retVal == SELECT_CONTINUE_CHOOSING)
{
sFactorySelectScreen->fadeSpeciesNameActive = TRUE;
- gTasks[taskId].tState = 1;
+ gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT;
gTasks[taskId].func = Select_Task_HandleChooseMons;
}
- else if (retVal == 2)
+ else if (retVal == SELECT_CONFIRM_MONS)
{
- gTasks[taskId].tState = 10;
+ gTasks[taskId].tState = STATE_YESNO_SHOW_MONS;
gTasks[taskId].func = Select_Task_HandleYesNo;
}
- else if (retVal == 3)
+ else if (retVal == SELECT_INVALID_MON)
{
- gTasks[taskId].tState = 11;
+ gTasks[taskId].tState = STATE_CHOOSE_MONS_INVALID;
gTasks[taskId].func = Select_Task_HandleChooseMons;
}
- else
+ else // SELECT_SUMMARY
{
- gTasks[taskId].tState = 6;
+ gTasks[taskId].tState = STATE_SUMMARY_FADE;
gTasks[taskId].func = Select_Task_OpenSummaryScreen;
}
}
@@ -1573,9 +1608,9 @@ static void Select_Task_HandleMenu(u8 taskId)
{
PlaySE(SE_SELECT);
CloseMonPic(sFactorySelectScreen->monPics[1], &sFactorySelectScreen->monPicAnimating, FALSE);
- sub_819B958(SELECT_WIN_OPTIONS);
+ Select_ErasePopupMenu(SELECT_WIN_OPTIONS);
sFactorySelectScreen->fadeSpeciesNameActive = TRUE;
- gTasks[taskId].tState = 1;
+ gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT;
gTasks[taskId].func = Select_Task_HandleChooseMons;
}
else if (JOY_REPEAT(DPAD_UP))
@@ -1589,7 +1624,7 @@ static void Select_Task_HandleMenu(u8 taskId)
Select_UpdateMenuCursorPosition(1);
}
break;
- case 12:
+ case STATE_MENU_REINIT:
if (!gPaletteFade.active)
{
if (sFactorySelectScreen->fromSummaryScreen == TRUE)
@@ -1598,16 +1633,17 @@ static void Select_Task_HandleMenu(u8 taskId)
gPlttBufferUnfaded[228] = gPlttBufferUnfaded[244];
}
sFactorySelectScreen->fromSummaryScreen = FALSE;
- gTasks[taskId].tState = 3;
+ gTasks[taskId].tState = STATE_MENU_HANDLE_INPUT;
}
break;
- case 13:
+ case STATE_MENU_RESHOW:
Select_ShowMenuOptions();
- gTasks[taskId].tState = 12;
+ gTasks[taskId].tState = STATE_MENU_REINIT;
break;
}
}
+// Handles input on the main selection screen, when no popup menu is open
static void Select_Task_HandleChooseMons(u8 taskId)
{
if (sFactorySelectScreen->monPicAnimating == TRUE)
@@ -1615,19 +1651,19 @@ static void Select_Task_HandleChooseMons(u8 taskId)
switch (gTasks[taskId].tState)
{
- case 0:
+ case STATE_CHOOSE_MONS_INIT:
if (!gPaletteFade.active)
{
- gTasks[taskId].tState = 1;
+ gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT;
sFactorySelectScreen->fadeSpeciesNameActive = TRUE;
}
break;
- case 1:
+ case STATE_CHOOSE_MONS_HANDLE_INPUT:
if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
sFactorySelectScreen->fadeSpeciesNameActive = FALSE;
- gTasks[taskId].tState = 2;
+ gTasks[taskId].tState = STATE_MENU_INIT;
gTasks[taskId].func = Select_Task_HandleMenu;
}
else if (JOY_REPEAT(DPAD_LEFT))
@@ -1645,14 +1681,14 @@ static void Select_Task_HandleChooseMons(u8 taskId)
Select_PrintMonSpecies();
}
break;
- case 11:
+ case STATE_CHOOSE_MONS_INVALID:
if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
CloseMonPic(sFactorySelectScreen->monPics[1], &sFactorySelectScreen->monPicAnimating, FALSE);
Select_PrintSelectMonString();
sFactorySelectScreen->fadeSpeciesNameActive = TRUE;
- gTasks[taskId].tState = 1;
+ gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT;
}
break;
}
@@ -1785,7 +1821,7 @@ static void Select_ShowYesNoOptions(void)
Select_PrintYesNoOptions();
}
-static void sub_819B958(u8 windowId)
+static void Select_ErasePopupMenu(u8 windowId)
{
gSprites[sFactorySelectScreen->menuCursor1SpriteId].invisible = TRUE;
gSprites[sFactorySelectScreen->menuCursor2SpriteId].invisible = TRUE;
@@ -1878,29 +1914,29 @@ static u8 Select_OptionRentDeselect(void)
if (selectedId == 0 && !Select_AreSpeciesValid(monId))
{
Select_PrintCantSelectSameMon();
- sub_819B958(SELECT_WIN_OPTIONS);
- return 3;
+ Select_ErasePopupMenu(SELECT_WIN_OPTIONS);
+ return SELECT_INVALID_MON;
}
else
{
CloseMonPic(sFactorySelectScreen->monPics[1], &sFactorySelectScreen->monPicAnimating, FALSE);
Select_HandleMonSelectionChange();
Select_PrintSelectMonString();
- sub_819B958(SELECT_WIN_OPTIONS);
- if (sFactorySelectScreen->selectingMonsState > 3)
- return 2;
+ Select_ErasePopupMenu(SELECT_WIN_OPTIONS);
+ if (sFactorySelectScreen->selectingMonsState > FRONTIER_PARTY_SIZE)
+ return SELECT_CONFIRM_MONS;
else
- return 1;
+ return SELECT_CONTINUE_CHOOSING;
}
}
-static u8 sub_819BC9C(void)
+static u8 Select_DeclineChosenMons(void)
{
- sub_819C568();
+ Select_HideChosenMons();
Select_HandleMonSelectionChange();
Select_PrintSelectMonString();
- sub_819B958(SELECT_WIN_OPTIONS);
- if (sFactorySelectScreen->selectingMonsState > 3)
+ Select_ErasePopupMenu(SELECT_WIN_OPTIONS);
+ if (sFactorySelectScreen->selectingMonsState > FRONTIER_PARTY_SIZE)
return 2;
else
return 1;
@@ -1908,14 +1944,14 @@ static u8 sub_819BC9C(void)
static u8 Select_OptionSummary(void)
{
- return 0;
+ return SELECT_SUMMARY;
}
static u8 Select_OptionOthers(void)
{
CloseMonPic(sFactorySelectScreen->monPics[1], &sFactorySelectScreen->monPicAnimating, FALSE);
- sub_819B958(SELECT_WIN_OPTIONS);
- return 1;
+ Select_ErasePopupMenu(SELECT_WIN_OPTIONS);
+ return SELECT_CONTINUE_CHOOSING;
}
static void Select_PrintMonCategory(void)
@@ -1977,7 +2013,7 @@ static void Select_ReshowMonSprite(void)
gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].invisible = TRUE;
}
-static void Select_ShowChosenMonsSprites(void)
+static void Select_CreateChosenMonsSprites(void)
{
u8 i, j;
@@ -2002,10 +2038,11 @@ static void Select_ShowChosenMonsSprites(void)
sFactorySelectScreen->monPicAnimating = FALSE;
}
-static void sub_819C040(struct Sprite *sprite)
+static void SpriteCB_OpenChosenMonPics(struct Sprite *sprite)
{
u8 taskId;
+ // Current sprite is monPics[1]
if (sprite->affineAnimEnded
&& gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].affineAnimEnded
&& gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].affineAnimEnded)
@@ -2014,15 +2051,16 @@ static void sub_819C040(struct Sprite *sprite)
gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].invisible = TRUE;
gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].invisible = TRUE;
- taskId = CreateTask(sub_819C1D0, 1);
+ taskId = CreateTask(Select_Task_OpenChosenMonPics, 1);
gTasks[taskId].func(taskId);
sprite->callback = SpriteCallbackDummy;
}
}
-static void sub_819C100(struct Sprite *sprite)
+static void SpriteCB_CloseChosenMonPics(struct Sprite *sprite)
{
+ // Current sprite is monPics[1]
if (sprite->affineAnimEnded
&& gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].affineAnimEnded
&& gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].affineAnimEnded)
@@ -2039,7 +2077,7 @@ static void sub_819C100(struct Sprite *sprite)
}
}
-// Task data for sub_819C1D0, sub_819C2D4, Task_CloseMonPic, and Task_OpenMonPic
+// Task data for Select_Task_OpenChosenMonPics, Select_Task_CloseChosenMonPics, Task_CloseMonPic, and Task_OpenMonPic
#define tWinLeft data[3]
#ifndef UBFIX
#define tWinRight data[24] // UB: Typo? Likely meant data[4], 24 is out of bounds
@@ -2051,7 +2089,7 @@ static void sub_819C100(struct Sprite *sprite)
#define tSpriteId data[6] // TODO: Clarify, what sprite
#define tIsSwapScreen data[7]
-static void sub_819C1D0(u8 taskId)
+static void Select_Task_OpenChosenMonPics(u8 taskId)
{
struct Task *task = &gTasks[taskId];
switch (task->tState)
@@ -2087,31 +2125,17 @@ static void sub_819C1D0(u8 taskId)
break;
default:
DestroyTask(taskId);
- Select_ShowChosenMonsSprites();
+ Select_CreateChosenMonsSprites();
return;
}
task->tState++;
}
-static void sub_819C2D4(u8 taskId)
+static void Select_Task_CloseChosenMonPics(u8 taskId)
{
struct Task *task = &gTasks[taskId];
switch (task->tState)
{
- default:
- HideBg(3);
- gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].invisible = FALSE;
- gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].callback = sub_819C100;
- gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].invisible = FALSE;
- gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].callback = SpriteCallbackDummy;
- gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].invisible = FALSE;
- gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].callback = SpriteCallbackDummy;
- StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[1].bgSpriteId], 1);
- StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[0].bgSpriteId], 1);
- StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[2].bgSpriteId], 1);
- ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
- DestroyTask(taskId);
- break;
case 0:
task->tWinLeft = 16;
task->tWinRight = DISPLAY_WIDTH - 16;
@@ -2136,23 +2160,37 @@ static void sub_819C2D4(u8 taskId)
if (task->tWinTop == 64)
task->tState++;
break;
+ default:
+ HideBg(3);
+ gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].invisible = FALSE;
+ gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].callback = SpriteCB_CloseChosenMonPics;
+ gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].invisible = FALSE;
+ gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].callback = SpriteCallbackDummy;
+ gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].invisible = FALSE;
+ gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].callback = SpriteCallbackDummy;
+ StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[1].bgSpriteId], 1);
+ StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[0].bgSpriteId], 1);
+ StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[2].bgSpriteId], 1);
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ DestroyTask(taskId);
+ break;
}
}
-static void sub_819C4B4(void)
+static void Select_ShowChosenMons(void)
{
sFactorySelectScreen->monPics[1].bgSpriteId = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 120, 64, 1);
sFactorySelectScreen->monPics[0].bgSpriteId = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 44, 64, 1);
sFactorySelectScreen->monPics[2].bgSpriteId = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 196, 64, 1);
- gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].callback = sub_819C040;
+ gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].callback = SpriteCB_OpenChosenMonPics;
gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].callback = SpriteCallbackDummy;
gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].callback = SpriteCallbackDummy;
sFactorySelectScreen->monPicAnimating = TRUE;
}
-static void sub_819C568(void)
+static void Select_HideChosenMons(void)
{
u8 taskId;
@@ -2160,7 +2198,7 @@ static void sub_819C568(void)
FreeAndDestroyMonPicSprite(sFactorySelectScreen->monPics[1].monSpriteId);
FreeAndDestroyMonPicSprite(sFactorySelectScreen->monPics[2].monSpriteId);
- taskId = CreateTask(sub_819C2D4, 1);
+ taskId = CreateTask(Select_Task_CloseChosenMonPics, 1);
gTasks[taskId].func(taskId);
sFactorySelectScreen->monPicAnimating = TRUE;
@@ -2194,7 +2232,6 @@ static bool32 Select_AreSpeciesValid(u16 monId)
}
}
}
-
return TRUE;
}
@@ -2494,6 +2531,9 @@ static void Swap_AskAcceptMon(u8 taskId)
}
}
+#undef STATE_SHOW_YES_NO
+#undef STATE_HANDLE_INPUT
+
static void Swap_Task_HandleMenu(u8 taskId)
{
switch (gTasks[taskId].tState)
@@ -2688,6 +2728,7 @@ static void Swap_Task_FadeSpeciesName2(u8 taskId)
}
}
+// TODO
static void sub_819D12C(u8 taskId)
{
s8 i;
@@ -4031,7 +4072,7 @@ static void SpriteCB_OpenMonPic(struct Sprite *sprite)
}
}
-static void sub_819F654(struct Sprite *sprite)
+static void SpriteCB_CloseMonPic(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
{
@@ -4050,6 +4091,7 @@ static void Task_OpenMonPic(u8 taskId)
switch (task->tState)
{
case 0:
+ // Init
task->tWinLeft = 88;
task->tWinRight = DISPLAY_WIDTH - 88;
task->tWinTop = 64;
@@ -4061,11 +4103,13 @@ static void Task_OpenMonPic(u8 taskId)
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ);
break;
case 1:
+ // Show mon pic bg
ShowBg(3);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4));
break;
case 2:
+ // Animate mon pic bg
task->tWinTop -= 4;
task->tWinBottom += 4;
if (task->tWinTop <= 32 || task->tWinBottom >= 96)
@@ -4094,16 +4138,8 @@ static void Task_CloseMonPic(u8 taskId)
struct Task *task = &gTasks[taskId];
switch (task->tState)
{
- default:
- HideBg(3);
- gSprites[task->tSpriteId].sIsSwapScreen = task->tIsSwapScreen;
- gSprites[task->tSpriteId].invisible = FALSE;
- gSprites[task->tSpriteId].callback = sub_819F654;
- StartSpriteAffineAnim(&gSprites[task->tSpriteId], 1);
- ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
- DestroyTask(taskId);
- break;
case 0:
+ // Init
task->tWinLeft = 88;
task->tWinRight = DISPLAY_WIDTH - 88;
task->tWinTop = 32;
@@ -4116,6 +4152,7 @@ static void Task_CloseMonPic(u8 taskId)
task->tState++;
break;
case 1:
+ // Animate bg
task->tWinTop += 4;
task->tWinBottom -= 4;
if (task->tWinTop >= 64 || task->tWinBottom <= 65)
@@ -4127,6 +4164,16 @@ static void Task_CloseMonPic(u8 taskId)
if (task->tWinTop == 64)
task->tState++;
break;
+ default:
+ // Hide bg
+ HideBg(3);
+ gSprites[task->tSpriteId].sIsSwapScreen = task->tIsSwapScreen;
+ gSprites[task->tSpriteId].invisible = FALSE;
+ gSprites[task->tSpriteId].callback = SpriteCB_CloseMonPic;
+ StartSpriteAffineAnim(&gSprites[task->tSpriteId], 1);
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ DestroyTask(taskId);
+ break;
}
}