mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-02-04 10:20:01 +01:00
Finish factory select screen doc
This commit is contained in:
parent
0bf49198f6
commit
7ae78dc773
@ -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
|
||||
enum {
|
||||
PALTAG_BALL_GRAY = 100,
|
||||
PALTAG_BALL_SELECTED,
|
||||
PALTAG_INTERFACE,
|
||||
PALTAG_MON_PIC_BG,
|
||||
};
|
||||
|
||||
#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 {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user