move_relearner_state_machine_defines

This commit is contained in:
Petuuuhhh
2020-04-12 22:21:16 -04:00
parent 6001e10799
commit d715106cc2
+119 -26
View File
@@ -17,6 +17,99 @@
#include "constants/songs.h" #include "constants/songs.h"
#include "constants/moves.h" #include "constants/moves.h"
/*
* Move relearner state machine
* ------------------------
*
* MoveRelearnerStateMachine: MENU_STATE_FADE_TO_BLACK
* MoveRelearnerStateMachine: MENU_STATE_WAIT_FOR_FADE
* - Go to MENU_STATE_IDLE_BATTLE_MODE
*
* MoveRelearnerStateMachine: MENU_STATE_SETUP_BATTLE_MODE
* MoveRelearnerStateMachine: MENU_STATE_IDLE_BATTLE_MODE
* - If the player selected a move (pressed A), go to MENU_STATE_PRINT_TEACH_MOVE_PROMPT.
* - If the player cancelled (pressed B), go to MENU_STATE_PRINT_GIVE_UP_PROMPT.
*
* MoveRelearnerStateMachine: MENU_STATE_PRINT_TEACH_MOVE_PROMPT
* MoveRelearnerStateMachine: MENU_STATE_TEACH_MOVE_CONFIRM
* - Wait for the player to confirm.
* - If cancelled, go to MENU_STATE_SETUP_BATTLE_MODE.
* - If confirmed and the pokemon had an empty move slot, set VAR_0x8004 to TRUE and go to
* MENU_STATE_PRINT_TEXT_THEN_FANFARE.
* - If confirmed and the pokemon doesn't have an empty move slot, go to
* MENU_STATE_PRINT_TRYING_TO_LEARN_PROMPT.
*
* MoveRelearnerStateMachine: MENU_STATE_PRINT_TRYING_TO_LEARN_PROMPT
* MoveRelearnerStateMachine: MENU_STATE_WAIT_FOR_TRYING_TO_LEARN
* MoveRelearnerStateMachine: MENU_STATE_CONFIRM_DELETE_OLD_MOVE
* - If the player confirms, go to MENU_STATE_PRINT_WHICH_MOVE_PROMPT.
* - If the player cancels, go to MENU_STATE_PRINT_STOP_TEACHING
*
* MoveRelearnerStateMachine: MENU_STATE_PRINT_STOP_TEACHING
* MoveRelearnerStateMachine: MENU_STATE_WAIT_FOR_STOP_TEACHING
* MoveRelearnerStateMachine: MENU_STATE_CONFIRM_STOP_TEACHING
* - If the player confirms, go to MENU_STATE_CHOOSE_SETUP_STATE.
* - If the player cancels, go back to MENU_STATE_PRINT_TRYING_TO_LEARN_PROMPT.
*
* MoveRelearnerStateMachine: MENU_STATE_PRINT_WHICH_MOVE_PROMPT
* MoveRelearnerStateMachine: MENU_STATE_SHOW_MOVE_SUMMARY_SCREEN
* - Go to ShowSelectMovePokemonSummaryScreen. When done, control returns to
* CB2_InitLearnMoveReturnFromSelectMove.
*
* MoveRelearnerStateMachine: MENU_STATE_DOUBLE_FANFARE_FORGOT_MOVE
* MoveRelearnerStateMachine: MENU_STATE_PRINT_TEXT_THEN_FANFARE
* MoveRelearnerStateMachine: MENU_STATE_WAIT_FOR_FANFARE
* MoveRelearnerStateMachine: MENU_STATE_WAIT_FOR_A_BUTTON
* MoveRelearnerStateMachine: MENU_STATE_FADE_AND_RETURN
* MoveRelearnerStateMachine: MENU_STATE_RETURN_TO_FIELD
* - Clean up and go to CB2_ReturnToField.
*
* MoveRelearnerStateMachine: MENU_STATE_PRINT_GIVE_UP_PROMPT
* MoveRelearnerStateMachine: MENU_STATE_GIVE_UP_CONFIRM
* - If the player confirms, go to MENU_STATE_FADE_AND_RETURN, and set VAR_0x8004 to FALSE.
* - If the player cancels, go to MENU_STATE_SETUP_BATTLE_MODE.
*
* CB2_InitLearnMoveReturnFromSelectMove:
* - Do most of the same stuff as CB2_InitLearnMove.
* MoveRelearnerStateMachine: MENU_STATE_FADE_FROM_SUMMARY_SCREEN
* MoveRelearnerStateMachine: MENU_STATE_TRY_OVERWRITE_MOVE
* - If any of the pokemon's existing moves were chosen, overwrite the move and
* go to MENU_STATE_DOUBLE_FANFARE_FORGOT_MOVE and set VAR_0x8004 to TRUE.
* - If the chosen move is the one the player selected before the summary screen,
* go to MENU_STATE_PRINT_STOP_TEACHING.
*
*/
#define MENU_STATE_FADE_TO_BLACK 0
#define MENU_STATE_WAIT_FOR_FADE 1
#define MENU_STATE_UNREACHABLE 2
#define MENU_STATE_SETUP_BATTLE_MODE 3
#define MENU_STATE_IDLE_BATTLE_MODE 4
// States 5, 6, and 7 are skipped.
#define MENU_STATE_PRINT_TEACH_MOVE_PROMPT 8
#define MENU_STATE_TEACH_MOVE_CONFIRM 9
// States 10 and 11 are skipped.
#define MENU_STATE_PRINT_GIVE_UP_PROMPT 12
#define MENU_STATE_GIVE_UP_CONFIRM 13
#define MENU_STATE_FADE_AND_RETURN 14
#define MENU_STATE_RETURN_TO_FIELD 15
#define MENU_STATE_PRINT_TRYING_TO_LEARN_PROMPT 16
#define MENU_STATE_WAIT_FOR_TRYING_TO_LEARN 17
#define MENU_STATE_CONFIRM_DELETE_OLD_MOVE 18
#define MENU_STATE_PRINT_WHICH_MOVE_PROMPT 19
#define MENU_STATE_SHOW_MOVE_SUMMARY_SCREEN 20
// States 21, 22, and 23 are skipped.
#define MENU_STATE_PRINT_STOP_TEACHING 24
#define MENU_STATE_WAIT_FOR_STOP_TEACHING 25
#define MENU_STATE_CONFIRM_STOP_TEACHING 26
#define MENU_STATE_CHOOSE_SETUP_STATE 27
#define MENU_STATE_FADE_FROM_SUMMARY_SCREEN 28
#define MENU_STATE_TRY_OVERWRITE_MOVE 29
#define MENU_STATE_DOUBLE_FANFARE_FORGOT_MOVE 30
#define MENU_STATE_PRINT_TEXT_THEN_FANFARE 31
#define MENU_STATE_WAIT_FOR_FANFARE 32
#define MENU_STATE_WAIT_FOR_A_BUTTON 33
struct MoveTutorMoveInfoHeaders struct MoveTutorMoveInfoHeaders
{ {
const u8 *text; const u8 *text;
@@ -383,7 +476,7 @@ static void MoveRelearnerStateMachine(void)
switch (sMoveRelearner->state) switch (sMoveRelearner->state)
{ {
case 0: case MENU_STATE_FADE_TO_BLACK:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
ShowBg(0); ShowBg(0);
ShowBg(1); ShowBg(1);
@@ -394,26 +487,26 @@ static void MoveRelearnerStateMachine(void)
MoveLearnerInitListMenu(); MoveLearnerInitListMenu();
sMoveRelearner->scheduleMoveInfoUpdate = TRUE; sMoveRelearner->scheduleMoveInfoUpdate = TRUE;
break; break;
case 1: case MENU_STATE_WAIT_FOR_FADE:
if (!gPaletteFade.active) if (!gPaletteFade.active)
sMoveRelearner->state = 4; sMoveRelearner->state = 4;
break; break;
case 2: case MENU_STATE_UNREACHABLE:
sMoveRelearner->state++; sMoveRelearner->state++;
break; break;
case 3: case MENU_STATE_SETUP_BATTLE_MODE:
PrintTeachWhichMoveToStrVar1(FALSE); PrintTeachWhichMoveToStrVar1(FALSE);
sMoveRelearner->scheduleMoveInfoUpdate = TRUE; sMoveRelearner->scheduleMoveInfoUpdate = TRUE;
sMoveRelearner->state++; sMoveRelearner->state++;
break; break;
case 4: case MENU_STATE_IDLE_BATTLE_MODE:
MoveRelearnerMenuHandleInput(); MoveRelearnerMenuHandleInput();
break; break;
case 8: case MENU_STATE_PRINT_TEACH_MOVE_PROMPT:
CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0); CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0);
sMoveRelearner->state++; sMoveRelearner->state++;
break; break;
case 9: case MENU_STATE_TEACH_MOVE_CONFIRM :
switch (YesNoMenuProcessInput()) switch (YesNoMenuProcessInput())
{ {
case 0: case 0:
@@ -434,11 +527,11 @@ static void MoveRelearnerStateMachine(void)
break; break;
} }
break; break;
case 12: case MENU_STATE_PRINT_GIVE_UP_PROMPT:
CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0); CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0);
sMoveRelearner->state++; sMoveRelearner->state++;
break; break;
case 13: case MENU_STATE_GIVE_UP_CONFIRM:
switch (YesNoMenuProcessInput()) switch (YesNoMenuProcessInput())
{ {
case 0: case 0:
@@ -451,15 +544,15 @@ static void MoveRelearnerStateMachine(void)
break; break;
} }
break; break;
case 16: case MENU_STATE_PRINT_TRYING_TO_LEARN_PROMPT:
StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_MonIsTryingToLearnMove); StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_MonIsTryingToLearnMove);
sMoveRelearner->state++; sMoveRelearner->state++;
break; break;
case 17: case MENU_STATE_WAIT_FOR_TRYING_TO_LEARN:
CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0); CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0);
sMoveRelearner->state = 18; sMoveRelearner->state = 18;
break; break;
case 18: case MENU_STATE_CONFIRM_DELETE_OLD_MOVE:
switch (YesNoMenuProcessInput()) switch (YesNoMenuProcessInput())
{ {
case 0: case 0:
@@ -472,15 +565,15 @@ static void MoveRelearnerStateMachine(void)
break; break;
} }
break; break;
case 24: case MENU_STATE_PRINT_STOP_TEACHING:
StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_StopLearningMove); StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_StopLearningMove);
sMoveRelearner->state++; sMoveRelearner->state++;
break; break;
case 25: case MENU_STATE_WAIT_FOR_STOP_TEACHING:
CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0); CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0);
sMoveRelearner->state = 26; sMoveRelearner->state = 26;
break; break;
case 26: case MENU_STATE_CONFIRM_STOP_TEACHING:
switch (YesNoMenuProcessInput()) switch (YesNoMenuProcessInput())
{ {
case 0: case 0:
@@ -492,14 +585,14 @@ static void MoveRelearnerStateMachine(void)
break; break;
} }
break; break;
case 27: case MENU_STATE_CHOOSE_SETUP_STATE :
sMoveRelearner->state = 3; sMoveRelearner->state = 3;
break; break;
case 19: case MENU_STATE_PRINT_WHICH_MOVE_PROMPT:
sMoveRelearner->state = 20; sMoveRelearner->state = 20;
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
break; break;
case 20: case MENU_STATE_SHOW_MOVE_SUMMARY_SCREEN:
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
ListMenuGetScrollAndRow(sMoveRelearner->listMenuTaskId, &sMoveRelearner->listMenuScrollPos, &sMoveRelearner->listMenuScrollRow); ListMenuGetScrollAndRow(sMoveRelearner->listMenuTaskId, &sMoveRelearner->listMenuScrollPos, &sMoveRelearner->listMenuScrollRow);
@@ -514,11 +607,11 @@ static void MoveRelearnerStateMachine(void)
case 22: case 22:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
break; break;
case 14: case MENU_STATE_FADE_AND_RETURN:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
sMoveRelearner->state++; sMoveRelearner->state++;
break; break;
case 15: case MENU_STATE_RETURN_TO_FIELD:
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
FreeAllWindowBuffers(); FreeAllWindowBuffers();
@@ -526,7 +619,7 @@ static void MoveRelearnerStateMachine(void)
SetMainCallback2(CB2_ReturnToField); SetMainCallback2(CB2_ReturnToField);
} }
break; break;
case 28: case MENU_STATE_FADE_FROM_SUMMARY_SCREEN:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
ShowBg(0); ShowBg(0);
ShowBg(1); ShowBg(1);
@@ -537,7 +630,7 @@ static void MoveRelearnerStateMachine(void)
PrintTeachWhichMoveToStrVar1(TRUE); PrintTeachWhichMoveToStrVar1(TRUE);
PrintMoveInfoHandleCancel_CopyToVram(); PrintMoveInfoHandleCancel_CopyToVram();
break; break;
case 29: case MENU_STATE_TRY_OVERWRITE_MOVE:
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
if (sMoveRelearner->selectedMoveSlot == 4) if (sMoveRelearner->selectedMoveSlot == 4)
@@ -557,20 +650,20 @@ static void MoveRelearnerStateMachine(void)
} }
} }
break; break;
case 30: case MENU_STATE_DOUBLE_FANFARE_FORGOT_MOVE:
StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_MonForgotOldMoveAndMonLearnedNewMove); StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_MonForgotOldMoveAndMonLearnedNewMove);
sMoveRelearner->state = 31; sMoveRelearner->state = 31;
PlayFanfare(MUS_FANFA1); PlayFanfare(MUS_FANFA1);
break; break;
case 31: case MENU_STATE_PRINT_TEXT_THEN_FANFARE:
PlayFanfare(MUS_FANFA1); PlayFanfare(MUS_FANFA1);
sMoveRelearner->state = 32; sMoveRelearner->state = 32;
break; break;
case 32: case MENU_STATE_WAIT_FOR_FANFARE:
if (IsFanfareTaskInactive()) if (IsFanfareTaskInactive())
sMoveRelearner->state = 33; sMoveRelearner->state = 33;
break; break;
case 33: case MENU_STATE_WAIT_FOR_A_BUTTON:
if (JOY_NEW(A_BUTTON)) if (JOY_NEW(A_BUTTON))
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);