diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 53ed13f9b6..7a47fff5b5 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -6223,6 +6223,14 @@ BattleScript_ToxicSpikesPoisoned:: waitstate return +BattleScript_ToxicSpikesBadlyPoisoned:: + printstring STRINGID_TOXICSPIKESBADLYPOISONED + waitmessage B_WAIT_TIME_LONG + statusanimation BS_SCRIPTING + updatestatusicon BS_SCRIPTING + waitstate + return + BattleScript_StickyWebOnSwitchIn:: savetarget saveattacker diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 20ea1ccd49..d840ab5666 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -286,6 +286,7 @@ extern const u8 BattleScript_BadDreamsActivates[]; extern const u8 BattleScript_SwitchInAbilityMsg[]; extern const u8 BattleScript_SwitchInAbilityMsgRet[]; extern const u8 BattleScript_ToxicSpikesPoisoned[]; +extern const u8 BattleScript_ToxicSpikesBadlyPoisoned[]; extern const u8 BattleScript_ToxicSpikesAbsorbed[]; extern const u8 BattleScript_StickyWebOnSwitchIn[]; extern const u8 BattleScript_SolarPowerActivates[]; diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 3ba637c690..7c7e023fa3 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -729,8 +729,9 @@ #define STRINGID_ITDOESNTAFFECTTWOFOES 727 #define STRINGID_SENDCAUGHTMONPARTYORBOX 728 #define STRINGID_PKMNSENTTOPCAFTERCATCH 729 +#define STRINGID_TOXICSPIKESBADLYPOISONED 730 -#define BATTLESTRINGS_COUNT 730 +#define BATTLESTRINGS_COUNT 731 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/src/battle_message.c b/src/battle_message.c index 7b02496ac7..ff887d7f38 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -638,6 +638,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [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_SCR_TEAM2} team!"), [STRINGID_TOXICSPIKESPOISONED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} was poisoned!"), + [STRINGID_TOXICSPIKESBADLYPOISONED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} was badly 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}!"), [STRINGID_HEALINGWISHHEALED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} regained health!"), diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 39e23021fa..cd3ef5a232 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8253,8 +8253,11 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler) i = GetBattlerAbility(battler); if (CanBePoisoned(gBattlerAttacker, battler, i)) { - if (gSideTimers[GetBattlerSide(battler)].toxicSpikesAmount >= 2) + u32 tspikes = 0; + if (gSideTimers[GetBattlerSide(battler)].toxicSpikesAmount >= 2) { + tspikes = 1; gBattleMons[battler].status1 |= STATUS1_TOXIC_POISON; + } else gBattleMons[battler].status1 |= STATUS1_POISON; @@ -8262,7 +8265,10 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler) MarkBattlerForControllerExec(battler); gBattleScripting.battler = battler; BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ToxicSpikesPoisoned; + if (tspikes == 0) + gBattlescriptCurrInstr = BattleScript_ToxicSpikesPoisoned; + else + gBattlescriptCurrInstr = BattleScript_ToxicSpikesBadlyPoisoned; } } } diff --git a/test/battle/move_effect/toxic_spikes.c b/test/battle/move_effect/toxic_spikes.c index 641fc0520c..5452f66a8b 100644 --- a/test/battle/move_effect/toxic_spikes.c +++ b/test/battle/move_effect/toxic_spikes.c @@ -235,3 +235,34 @@ SINGLE_BATTLE_TEST("Toxic Spikes inflicts poison on switch in after Primal Rever STATUS_ICON(player, poison: TRUE); } } + +SINGLE_BATTLE_TEST("Toxic Spikes print normal poison for 1 layer") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } + TURN { SWITCH(opponent, 1); } + TURN {} + } SCENE { + MESSAGE("The opposing Wynaut was poisoned!"); + } +} + +SINGLE_BATTLE_TEST("Toxic Spikes print bad poison for 2 layers") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } + TURN { SWITCH(opponent, 1); } + TURN {} + } SCENE { + MESSAGE("The opposing Wynaut was badly poisoned!"); + } +}