-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Instead of Asking to Stop learning a New Move, You'll be Asked to Continue Learning
voloved edited this page Mar 18, 2023
·
4 revisions
By devolov
Goal: It's annoying that when you press B when you don't want to learn a move, it asks you if you want to stop learning and if you press B again, it'll loop through asking again. This change will instead ask if you'd like to continue learning, so the move won't be learned if B is pressed or if No is chosen.
I wrote a tutorial to make B cancel learning while leaving the rest of the logic the same, but this hack seems more logical.
-------------------------------- src/strings.c --------------------------------
index a81d3e4d1..0baf55ac6 100644
@@ -419,9 +419,9 @@ const u8 gText_MailTransferredFromMailbox[] = _("MAIL was transferred from\nthe
const u8 gText_BagFullCouldNotRemoveItem[] = _("The BAG is full. The POKéMON's\nitem could not be removed.{PAUSE_UNTIL_PRESS}");
const u8 gText_PkmnLearnedMove3[] = _("{STR_VAR_1} learned\n{STR_VAR_2}!");
const u8 gText_PkmnCantLearnMove[] = _("{STR_VAR_1} and {STR_VAR_2}\nare not compatible.\p{STR_VAR_2} can't be\nlearned.{PAUSE_UNTIL_PRESS}");
const u8 gText_PkmnNeedsToReplaceMove[] = _("{STR_VAR_1} wants to learn the\nmove {STR_VAR_2}.\pHowever, {STR_VAR_1} already\nknows four moves.\pShould a move be deleted and\nreplaced with {STR_VAR_2}?");
-const u8 gText_StopLearningMove2[] = _("Stop trying to teach\n{STR_VAR_2}?");
+const u8 gText_StopLearningMove2[] = _("Continue trying to teach\n{STR_VAR_2}?");
const u8 gText_MoveNotLearned[] = _("{STR_VAR_1} did not learn the\nmove {STR_VAR_2}.{PAUSE_UNTIL_PRESS}");
const u8 gText_WhichMoveToForget[] = _("Which move should be forgotten?{PAUSE_UNTIL_PRESS}");
const u8 gText_12PoofForgotMove[] = _("1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE SE_BALL_BOUNCE_1}Poof!\p{STR_VAR_1} forgot how to\nuse {STR_VAR_2}.\pAnd…{PAUSE_UNTIL_PRESS}");
const u8 gText_PkmnAlreadyKnows[] = _("{STR_VAR_1} already knows\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}");
@@ -1776,9 +1776,9 @@ const u8 gText_TrainerHill4F[] = _("4F");
const u8 gText_TeachWhichMoveToPkmn[] = _("Teach which move to {STR_VAR_1}?");
const u8 gText_MoveRelearnerTeachMoveConfirm[] = _("Teach {STR_VAR_2}?");
const u8 gText_MoveRelearnerPkmnLearnedMove[] = _("{STR_VAR_1} learned\n{STR_VAR_2}!");
const u8 gText_MoveRelearnerPkmnTryingToLearnMove[] = _("{STR_VAR_1} is trying to learn\n{STR_VAR_2}.\pBut {STR_VAR_1} can't learn more\nthan four moves.\pDelete an older move to make\nroom for {STR_VAR_2}?");
-const u8 gText_MoveRelearnerStopTryingToTeachMove[] = _("Stop trying to teach\n{STR_VAR_2}?");
+const u8 gText_MoveRelearnerStopTryingToTeachMove[] = _("Continue trying to teach\n{STR_VAR_2}?");
const u8 gText_MoveRelearnerAndPoof[] = _("{PAUSE 32}1, {PAUSE 15}2, and {PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE SE_BALL_BOUNCE_1}Poof!\p");
const u8 gText_MoveRelearnerPkmnForgotMoveAndLearnedNew[] = _("{STR_VAR_1} forgot {STR_VAR_3}.\pAnd…\p{STR_VAR_1} learned {STR_VAR_2}.");
const u8 gText_MoveRelearnedPkmnDidNotLearnMove[] = _("{STR_VAR_1} did not learn the\nmove {STR_VAR_2}."); // Unused
-const u8 gText_MoveRelearnerGiveUp[] = _("Give up trying to teach a new\nmove to {STR_VAR_1}?");
+const u8 gText_MoveRelearnerGiveUp[] = _("Continue trying to teach a new\nmove to {STR_VAR_1}?");
----------------------------- src/battle_message.c -----------------------------
index 49945f251..b059e5642 100644
@@ -66,9 +66,9 @@ static const u8 sText_PkmnLearnedMove[] = _("{B_BUFF1} learned\n{B_BUFF2}!{WAIT_
static const u8 sText_TryToLearnMove1[] = _("{B_BUFF1} is trying to\nlearn {B_BUFF2}.\p");
static const u8 sText_TryToLearnMove2[] = _("But, {B_BUFF1} can't learn\nmore than four moves.\p");
static const u8 sText_TryToLearnMove3[] = _("Delete a move to make\nroom for {B_BUFF2}?");
static const u8 sText_PkmnForgotMove[] = _("{B_BUFF1} forgot\n{B_BUFF2}.\p");
-static const u8 sText_StopLearningMove[] = _("{PAUSE 32}Stop learning\n{B_BUFF2}?");
+static const u8 sText_StopLearningMove[] = _("{PAUSE 32}Continue learning\n{B_BUFF2}?");
static const u8 sText_DidNotLearnMove[] = _("{B_BUFF1} did not learn\n{B_BUFF2}.\p");
static const u8 sText_UseNextPkmn[] = _("Use next POKéMON?");
static const u8 sText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}'s\nattack missed!");
static const u8 sText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX}\nprotected itself!");
------------------------- src/battle_script_commands.c -------------------------
index be49bd10e..adda994e0 100644
@@ -5498,9 +5498,9 @@ static void Cmd_yesnoboxstoplearningmove(void)
if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- if (gBattleCommunication[1] != 0)
+ if (gBattleCommunication[1] == 0)
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else
gBattlescriptCurrInstr += 5;
@@ -5508,9 +5508,9 @@ static void Cmd_yesnoboxstoplearningmove(void)
}
else if (JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
- gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr += 5;
HandleBattleWindow(0x18, 0x8, 0x1D, 0xD, WINDOW_CLEAR);
}
break;
}
Change logic for learning new move in party menu (such as using TMs or levelling up with Rare Candy):
------------------------------- src/party_menu.c -------------------------------
index c61b129ac..63b1f0fb5 100644
@@ -4883,8 +4883,17 @@ static void Task_HandleStopLearningMoveYesNoInput(u8 taskId)
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case 0:
+ GetMonNickname(mon, gStringVar1);
+ StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]);
+ DisplayLearnMoveMessage(gText_PkmnNeedsToReplaceMove);
+ gTasks[taskId].func = Task_ReplaceMoveYesNo;
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ // fallthrough
+ case 1:
GetMonNickname(mon, gStringVar1);
StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]);
StringExpandPlaceholders(gStringVar4, gText_MoveNotLearned);
DisplayPartyMenuMessage(gStringVar4, TRUE);
@@ -4898,17 +4907,8 @@ static void Task_HandleStopLearningMoveYesNoInput(u8 taskId)
gSpecialVar_Result = FALSE;
gTasks[taskId].func = Task_ClosePartyMenuAfterText;
}
break;
- case MENU_B_PRESSED:
- PlaySE(SE_SELECT);
- // fallthrough
- case 1:
- GetMonNickname(mon, gStringVar1);
- StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]);
- DisplayLearnMoveMessage(gText_PkmnNeedsToReplaceMove);
- gTasks[taskId].func = Task_ReplaceMoveYesNo;
- break;
}
}
static void Task_TryLearningNextMoveAfterText(u8 taskId)
----------------------------- src/move_relearner.c -----------------------------
index 3007aece0..cdd55c94c 100644
@@ -547,14 +554,14 @@ static void DoMoveRelearnerMain(void)
case MENU_STATE_GIVE_UP_CONFIRM:
{
s8 selection = Menu_ProcessInputNoWrapClearOnChoose();
- if (selection == 0)
+ if (selection == MENU_B_PRESSED || selection == 1)
{
gSpecialVar_0x8004 = FALSE;
sMoveRelearnerStruct->state = MENU_STATE_FADE_AND_RETURN;
}
- else if (selection == MENU_B_PRESSED || selection == 1)
+ else if (selection == 0)
{
if (sMoveRelearnerMenuSate.showContestInfo == FALSE)
{
sMoveRelearnerStruct->state = MENU_STATE_SETUP_BATTLE_MODE;
@@ -608,12 +608,8 @@ static void DoMoveRelearnerMain(void)
{
s8 var = Menu_ProcessInputNoWrapClearOnChoose();
if (var == 0)
- {
- sMoveRelearnerStruct->state = MENU_STATE_CHOOSE_SETUP_STATE;
- }
- else if (var == MENU_B_PRESSED || var == 1)
{
// What's the point? It gets set to MENU_STATE_PRINT_TRYING_TO_LEARN_PROMPT, anyway.
if (sMoveRelearnerMenuSate.showContestInfo == FALSE)
{
@@ -624,8 +620,13 @@ static void DoMoveRelearnerMain(void)
sMoveRelearnerStruct->state = MENU_STATE_SETUP_CONTEST_MODE;
}
sMoveRelearnerStruct->state = MENU_STATE_PRINT_TRYING_TO_LEARN_PROMPT;
}
+ else if (var == MENU_B_PRESSED || var == 1)
+ {
+ sMoveRelearnerStruct->state = MENU_STATE_CHOOSE_SETUP_STATE;
+ }
+
}
break;
case MENU_STATE_CHOOSE_SETUP_STATE:
if (!MoveRelearnerRunTextPrinters())
Change logic at evolution scene where a move is learned right after evolving (including during trades):
---------------------------- src/evolution_scene.c ----------------------------
index f15869c20..e344f9542 100644
@@ -1018,10 +1018,10 @@ static void Task_EvolutionScene(u8 taskId)
break;
case MVSTATE_ASK_CANCEL:
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_ID_ADDER]);
BattlePutTextOnWindow(gDisplayedStringBattle, 0);
- gTasks[taskId].tLearnMoveYesState = MVSTATE_CANCEL;
- gTasks[taskId].tLearnMoveNoState = MVSTATE_INTRO_MSG_1;
+ gTasks[taskId].tLearnMoveYesState = MVSTATE_INTRO_MSG_1;
+ gTasks[taskId].tLearnMoveNoState = MVSTATE_CANCEL;
gTasks[taskId].tLearnMoveState = MVSTATE_PRINT_YES_NO;
break;
case MVSTATE_CANCEL:
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_ID_ADDER]);