diff --git a/charmap.txt b/charmap.txt index 220ff2ed5..4c2b1ed97 100644 --- a/charmap.txt +++ b/charmap.txt @@ -367,7 +367,7 @@ B_ATK_PARTNER_NAME = FD 0E B_ATK_NAME_WITH_PREFIX = FD 0F B_DEF_NAME_WITH_PREFIX = FD 10 B_EFF_NAME_WITH_PREFIX = FD 11 @ EFF = short for gEffectBattler -B_ACTIVE_NAME_WITH_PREFIX = FD 12 +B_SELECTION_NAME_WITH_PREFIX = FD 12 B_SCR_ACTIVE_NAME_WITH_PREFIX = FD 13 B_CURRENT_MOVE = FD 14 B_LAST_MOVE = FD 15 @@ -409,8 +409,8 @@ B_ATK_TEAM2 = FD 38 B_DEF_NAME = FD 39 B_DEF_TEAM1 = FD 3A B_DEF_TEAM2 = FD 3B -B_ACTIVE_NAME = FD 3C -B_ACTIVE_NAME2 = FD 3D @ no Illusion check +B_SELECTION_NAME = FD 3C +B_SELECTION_NAME2 = FD 3D @ no Illusion check @ indicates the end of a town/city name (before " TOWN" or " CITY") NAME_END = FC 00 diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index 0c6c133b5..5b0827ade 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -112,6 +112,7 @@ BattleScript_ItemSetFocusEnergy:: setfocusenergy playmoveanimation BS_ATTACKER, MOVE_FOCUS_ENERGY waitanimation + copybyte sBATTLER, gBattlerAttacker printstring STRINGID_PKMNUSEDXTOGETPUMPED waitmessage B_WAIT_TIME_LONG end diff --git a/include/battle.h b/include/battle.h index d7ab162a4..35efb09e4 100644 --- a/include/battle.h +++ b/include/battle.h @@ -910,7 +910,7 @@ extern u8 gBattleTerrain; extern u32 gUnusedFirstBattleVar1; extern u8 *gBattleAnimBgTileBuffer; extern u8 *gBattleAnimBgTilemapBuffer; -extern u8 gActiveBattler; +extern u8 gSelectionBattler; extern u32 gBattleControllerExecFlags; extern u8 gBattlersCount; extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT]; diff --git a/include/battle_message.h b/include/battle_message.h index 24442b36b..45604932e 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -26,7 +26,7 @@ #define B_TXT_ATK_NAME_WITH_PREFIX 0xF #define B_TXT_DEF_NAME_WITH_PREFIX 0x10 #define B_TXT_EFF_NAME_WITH_PREFIX 0x11 // EFF = short for gEffectBank -#define B_TXT_ACTIVE_NAME_WITH_PREFIX 0x12 +#define B_TXT_SELECTION_NAME_WITH_PREFIX 0x12 #define B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX 0x13 #define B_TXT_CURRENT_MOVE 0x14 #define B_TXT_LAST_MOVE 0x15 @@ -68,8 +68,8 @@ #define B_TXT_DEF_NAME 0x39 #define B_TXT_DEF_TEAM1 0x3A // Your/The opposing #define B_TXT_DEF_TEAM2 0x3B // your/the opposing -#define B_TXT_ACTIVE_NAME 0x3C -#define B_TXT_ACTIVE_NAME2 0x3D // no Illusion check +#define B_TXT_SELECTION_NAME 0x3C +#define B_TXT_SELECTION_NAME2 0x3D // no Illusion check // for B_TXT_BUFF1, B_TXT_BUFF2 and B_TXT_BUFF3 diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 62a5f77d5..81f4521ae 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -306,9 +306,7 @@ #define MAX_MON_PIC_FRAMES 2 #define BATTLE_ALIVE_EXCEPT_BATTLER 0 -#define BATTLE_ALIVE_ATK_SIDE 1 -#define BATTLE_ALIVE_DEF_SIDE 2 -#define BATTLE_ALIVE_EXCEPT_ATTACKER 3 +#define BATTLE_ALIVE_SIDE 1 #define SKIP_FRONT_ANIM (1 << 7) diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 85bc009c7..b45da7585 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -525,7 +525,7 @@ static void OpponentHandleChooseMove(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, ChooseMoveAndTargetInBattlePalace()); + BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, ChooseMoveAndTargetInBattlePalace(battler)); } else { diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 07f752ffe..439ffa6ef 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1890,6 +1890,7 @@ static void PlayerHandleChooseAction(u32 battler) TryRestoreLastUsedBall(); ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); + gSelectionBattler = battler; BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo); BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_ACTION_PROMPT); } diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index be7f20209..2443b56f7 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -468,7 +468,7 @@ static void RecordedOpponentHandleChooseMove(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, ChooseMoveAndTargetInBattlePalace()); + BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, ChooseMoveAndTargetInBattlePalace(battler)); } else { diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index a36776ccb..9c8acdbd1 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -474,7 +474,7 @@ static void RecordedPlayerHandleChooseMove(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, ChooseMoveAndTargetInBattlePalace()); + BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, ChooseMoveAndTargetInBattlePalace(battler)); } else { diff --git a/src/battle_main.c b/src/battle_main.c index 188732534..98ed8be04 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -151,7 +151,7 @@ EWRAM_DATA struct MultiPartnerMenuPokemon gMultiPartnerParty[MULTI_PARTY_SIZE] = EWRAM_DATA static struct MultiPartnerMenuPokemon* sMultiPartnerPartyBuffer = NULL; EWRAM_DATA u8 *gBattleAnimBgTileBuffer = NULL; EWRAM_DATA u8 *gBattleAnimBgTilemapBuffer = NULL; -EWRAM_DATA u8 gActiveBattler = 0; +EWRAM_DATA u8 gSelectionBattler = 0; EWRAM_DATA u32 gBattleControllerExecFlags = 0; EWRAM_DATA u8 gBattlersCount = 0; EWRAM_DATA u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT] = {0}; @@ -4091,6 +4091,7 @@ static void HandleTurnActionSelectionState(void) } break; case STATE_BEFORE_ACTION_CHOSEN: // Choose an action. + gSelectionBattler = battler; *(gBattleStruct->monToSwitchIntoId + battler) = PARTY_SIZE; if (gBattleTypeFlags & BATTLE_TYPE_MULTI || (position & BIT_FLANK) == B_FLANK_LEFT diff --git a/src/battle_message.c b/src/battle_message.c index de3af28d6..eedec74ac 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -265,17 +265,17 @@ static const u8 sText_XFoundOneY[] = _("{B_ATK_NAME_WITH_PREFIX} found\none {B_L static const u8 sText_SoothingAroma[] = _("A soothing aroma wafted\nthrough the area!"); static const u8 sText_ItemsCantBeUsedNow[] = _("Items can't be used now.{PAUSE 64}"); static const u8 sText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX},\n{B_LAST_ITEM} {B_BUFF1}"); -static const u8 sText_PkmnUsedXToGetPumped[] = _("{B_ACTIVE_NAME_WITH_PREFIX} used\n{B_LAST_ITEM} to get pumped!"); +static const u8 sText_PkmnUsedXToGetPumped[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used\n{B_LAST_ITEM} to get pumped!"); static const u8 sText_PkmnLostFocus[] = _("{B_ATK_NAME_WITH_PREFIX} lost its\nfocus and couldn't move!"); static const u8 sText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndragged out!\p"); static const u8 sText_TheWallShattered[] = _("The wall shattered!"); static const u8 sText_ButNoEffect[] = _("But it had no effect!"); -static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ACTIVE_NAME_WITH_PREFIX} has no\nmoves left!\p"); -static const u8 sText_PkmnMoveIsDisabled[] = _("{B_ACTIVE_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nis disabled!\p"); -static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use the same\nmove in a row due to the Torment!\p"); -static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} after the Taunt!\p"); -static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use the\nsealed {B_CURRENT_MOVE}!\p"); -static const u8 sText_PkmnCantUseMoveThroatChop[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} due to Throat Chop!\p"); +static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_SELECTION_NAME_WITH_PREFIX} has no\nmoves left!\p"); +static const u8 sText_PkmnMoveIsDisabled[] = _("{B_SELECTION_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nis disabled!\p"); +static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_SELECTION_NAME_WITH_PREFIX} can't use the same\nmove in a row due to the Torment!\p"); +static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_SELECTION_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} after the Taunt!\p"); +static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_SELECTION_NAME_WITH_PREFIX} can't use the\nsealed {B_CURRENT_MOVE}!\p"); +static const u8 sText_PkmnCantUseMoveThroatChop[] = _("{B_SELECTION_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} due to Throat Chop!\p"); static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it rain!"); static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its SPEED!"); static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected\nby {B_DEF_ABILITY}!"); @@ -1945,7 +1945,7 @@ const u8 gText_PkmnIsEvolving[] = _("What?\n{STR_VAR_1} is evolving!"); const u8 gText_CongratsPkmnEvolved[] = _("Congratulations! Your {STR_VAR_1}\nevolved into {STR_VAR_2}!{WAIT_SE}\p"); const u8 gText_PkmnStoppedEvolving[] = _("Huh? {STR_VAR_1}\nstopped evolving!\p"); const u8 gText_EllipsisQuestionMark[] = _("……?\p"); -const u8 gText_WhatWillPkmnDo[] = _("What will\n{B_ACTIVE_NAME2} do?"); +const u8 gText_WhatWillPkmnDo[] = _("What will\n{B_SELECTION_NAME2} do?"); const u8 gText_WhatWillPkmnDo2[] = _("What will\n{B_PLAYER_NAME} do?"); const u8 gText_WhatWillWallyDo[] = _("What will\nWALLY do?"); const u8 gText_LinkStandby[] = _("{PAUSE 16}Link standby…"); @@ -3244,23 +3244,23 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) GetBattlerNick(gBattlerTarget, text); toCpy = text; break; - case B_TXT_ACTIVE_NAME: // active name - GetBattlerNick(gActiveBattler, text); + case B_TXT_SELECTION_NAME: // selection name + GetBattlerNick(gSelectionBattler, text); toCpy = text; break; - case B_TXT_ACTIVE_NAME2: // active battler name with prefix, no illusion - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_NICKNAME, text); + case B_TXT_SELECTION_NAME2: // selection battler name with prefix, no illusion + if (GetBattlerSide(gSelectionBattler) == B_SIDE_PLAYER) + GetMonData(&gPlayerParty[gBattlerPartyIndexes[gSelectionBattler]], MON_DATA_NICKNAME, text); else - GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_NICKNAME, text); + GetMonData(&gEnemyParty[gBattlerPartyIndexes[gSelectionBattler]], MON_DATA_NICKNAME, text); StringGet_Nickname(text); toCpy = text; break; case B_TXT_EFF_NAME_WITH_PREFIX: // effect battler name with prefix HANDLE_NICKNAME_STRING_CASE(gEffectBattler) break; - case B_TXT_ACTIVE_NAME_WITH_PREFIX: // active battler name with prefix - HANDLE_NICKNAME_STRING_CASE(gActiveBattler) + case B_TXT_SELECTION_NAME_WITH_PREFIX: // selection battler name with prefix + HANDLE_NICKNAME_STRING_CASE(gSelectionBattler) break; case B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX: // scripting active battler name with prefix HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 4fdeb3186..59eb1426e 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -9909,7 +9909,7 @@ static void Cmd_various(void) gSideTimers[GET_BATTLER_SIDE(battler)].auroraVeilTimer = 5; gSideTimers[GET_BATTLER_SIDE(battler)].auroraVeilBattlerId = battler; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_ATK_SIDE) == 2) + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) gBattleCommunication[MULTISTRING_CHOOSER] = 5; else gBattleCommunication[MULTISTRING_CHOOSER] = 5; @@ -11132,7 +11132,7 @@ static void Cmd_setreflect(void) gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].reflectTimer = 5; gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].reflectBattlerId = gBattlerAttacker; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_ATK_SIDE) == 2) + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_DOUBLE; else gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_SINGLE; @@ -12190,7 +12190,7 @@ static void Cmd_setlightscreen(void) gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].lightscreenTimer = 5; gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].lightscreenBattlerId = gBattlerAttacker; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_ATK_SIDE) == 2) + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_DOUBLE; else gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_SINGLE; @@ -15898,12 +15898,12 @@ bool8 IsMoveAffectedByParentalBond(u16 move, u8 battler) { // Both foes are alive, spread move strikes once case MOVE_TARGET_BOTH: - if (CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) >= 2) + if (CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerTarget) >= 2) return FALSE; break; // Either both foes or one foe and its ally are alive; spread move strikes once case MOVE_TARGET_FOES_AND_ALLY: - if (CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_ATTACKER) >= 2) + if (CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_BATTLER, gBattlerAttacker) >= 2) return FALSE; break; default: diff --git a/src/pokemon.c b/src/pokemon.c index 9181ed08d..fdd5a074f 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -4422,24 +4422,10 @@ u8 CountAliveMonsInBattle(u8 caseId, u32 battler) retVal++; } break; - case BATTLE_ALIVE_ATK_SIDE: + case BATTLE_ALIVE_SIDE: for (i = 0; i < MAX_BATTLERS_COUNT; i++) { - if (GetBattlerSide(i) == GetBattlerSide(gBattlerAttacker) && !(gAbsentBattlerFlags & gBitTable[i])) - retVal++; - } - break; - case BATTLE_ALIVE_DEF_SIDE: - for (i = 0; i < MAX_BATTLERS_COUNT; i++) - { - if (GetBattlerSide(i) == GetBattlerSide(gBattlerTarget) && !(gAbsentBattlerFlags & gBitTable[i])) - retVal++; - } - break; - case BATTLE_ALIVE_EXCEPT_ATTACKER: - for (i = 0; i < MAX_BATTLERS_COUNT; i++) - { - if (i != gBattlerAttacker && !(gAbsentBattlerFlags & gBitTable[i])) + if (GetBattlerSide(i) == GetBattlerSide(battler) && !(gAbsentBattlerFlags & gBitTable[i])) retVal++; } break;