diff --git a/charmap.txt b/charmap.txt index cd0972f84a..a35709d652 100644 --- a/charmap.txt +++ b/charmap.txt @@ -424,6 +424,8 @@ B_TRAINER1_NAME_WITH_CLASS = FD 42 B_TRAINER2_NAME_WITH_CLASS = FD 43 B_PARTNER_NAME_WITH_CLASS = FD 44 B_ATK_TRAINER_NAME_WITH_CLASS = FD 45 +B_SCR_TEAM1 = FD 46 +B_SCR_TEAM2 = FD 47 @ indicates the end of a town/city name (before " TOWN" or " CITY") NAME_END = FC 00 diff --git a/include/battle_message.h b/include/battle_message.h index adc399dd3c..18f80bb3fd 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -83,6 +83,8 @@ #define B_TXT_TRAINER2_NAME_WITH_CLASS 0x43 #define B_TXT_PARTNER_NAME_WITH_CLASS 0x44 #define B_TXT_ATK_TRAINER_NAME_WITH_CLASS 0x45 +#define B_TXT_SCR_TEAM1 0x46 +#define B_TXT_SCR_TEAM2 0x47 #define B_BUFF_STRING 0 #define B_BUFF_NUMBER 1 diff --git a/src/battle_message.c b/src/battle_message.c index c463474d40..995f7756c6 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -636,7 +636,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PROTEANTYPECHANGE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} transformed it into the {B_BUFF1} type!"), [STRINGID_SYMBIOSISITEMPASS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} passed its {B_LAST_ITEM} to {B_EFF_NAME_WITH_PREFIX2} through {B_LAST_ABILITY}!"), [STRINGID_STEALTHROCKDMG] = COMPOUND_STRING("Pointed stones dug into {B_SCR_NAME_WITH_PREFIX2}!"), - [STRINGID_TOXICSPIKESABSORBED] = COMPOUND_STRING("The poison spikes disappeared from the ground around {B_ATK_TEAM2} team!"), + [STRINGID_TOXICSPIKESABSORBED] = COMPOUND_STRING("The poison spikes disappeared from the ground around {B_SCR_TEAM2} team!"), [STRINGID_TOXICSPIKESPOISONED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} was poisoned!"), [STRINGID_STICKYWEBSWITCHIN] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} was caught in a sticky web!"), [STRINGID_HEALINGWISHCAMETRUE] = COMPOUND_STRING("The healing wish came true for {B_ATK_NAME_WITH_PREFIX2}!"), @@ -3112,6 +3112,18 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) else toCpy = sText_Opposing2; break; + case B_TXT_SCR_TEAM1: + if (GetBattlerSide(gBattleScripting.battler) == B_SIDE_PLAYER) + toCpy = sText_Your1; + else + toCpy = sText_Opposing1; + break; + case B_TXT_SCR_TEAM2: + if (GetBattlerSide(gBattleScripting.battler) == B_SIDE_PLAYER) + toCpy = sText_Your2; + else + toCpy = sText_Opposing2; + break; case B_TXT_ATK_NAME_WITH_PREFIX2: HANDLE_NICKNAME_STRING_LOWERCASE(gBattlerAttacker) break; diff --git a/test/battle/move_effect/hit_switch_target.c b/test/battle/move_effect/hit_switch_target.c index 61c92d227e..e0d6548ec3 100644 --- a/test/battle/move_effect/hit_switch_target.c +++ b/test/battle/move_effect/hit_switch_target.c @@ -119,3 +119,48 @@ SINGLE_BATTLE_TEST("Dragon Tail effect fails against target with Suction Cups") NOT MESSAGE("The opposing Charmander was dragged out!"); } } + +SINGLE_BATTLE_TEST("Dragon Tail switches target out and incoming mon has Immunity negated by Mold Breaker") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_TOXIC_SPIKES) == EFFECT_TOXIC_SPIKES); + PLAYER(SPECIES_PANCHAM) { Ability(ABILITY_MOLD_BREAKER); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SNORLAX) { Ability(ABILITY_IMMUNITY); } + } WHEN { + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } + TURN { MOVE(player, MOVE_DRAGON_TAIL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); + HP_BAR(opponent); + MESSAGE("The opposing Snorlax was dragged out!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, poison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Dragon Tail switches target out and incoming mon has Levitate negated by Mold Breaker") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_TOXIC_SPIKES) == EFFECT_TOXIC_SPIKES); + ASSUME(GetMoveEffect(MOVE_SPIKES) == EFFECT_SPIKES); + ASSUME(gSpeciesInfo[SPECIES_WEEZING].types[0] == TYPE_POISON || gSpeciesInfo[SPECIES_WEEZING].types[1] == TYPE_POISON); + PLAYER(SPECIES_PANCHAM) { Ability(ABILITY_MOLD_BREAKER); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WEEZING) { Ability(ABILITY_LEVITATE); } + } WHEN { + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } + TURN { MOVE(player, MOVE_SPIKES); } + TURN { MOVE(player, MOVE_DRAGON_TAIL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); + HP_BAR(opponent); + MESSAGE("The opposing Weezing was dragged out!"); + HP_BAR(opponent); + NOT STATUS_ICON(opponent, poison: TRUE); + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); + } +} diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 40e8b31f41..1c137558a4 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -2038,8 +2038,7 @@ s32 MoveGetTarget(s32 battlerId, u32 moveId, struct MoveContext *ctx, u32 source || move->target == MOVE_TARGET_BOTH || move->target == MOVE_TARGET_DEPENDS || move->target == MOVE_TARGET_FOES_AND_ALLY - || move->target == MOVE_TARGET_OPPONENTS_FIELD - || move->target == MOVE_TARGET_ALL_BATTLERS) + || move->target == MOVE_TARGET_OPPONENTS_FIELD) { target = BATTLE_OPPOSITE(battlerId); } @@ -2053,7 +2052,7 @@ s32 MoveGetTarget(s32 battlerId, u32 moveId, struct MoveContext *ctx, u32 source target = BATTLE_OPPOSITE(battlerId); } - else if (move->target == MOVE_TARGET_USER) + else if (move->target == MOVE_TARGET_USER || move->target == MOVE_TARGET_ALL_BATTLERS) { target = battlerId; }