From 52054e4bfefde6572fa19a74240a9187d4147b64 Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Sat, 30 Oct 2021 21:12:18 +1300 Subject: [PATCH 1/7] Fix Corrosion, Poison Touch - CanBePoisoned now calls CanPoisonType instead of overriding it. Poison Touch now activates only if the attacker actually damaged the target. Partially implemented Pastel Veil. --- include/battle_util.h | 2 +- src/battle_ai_util.c | 2 +- src/battle_script_commands.c | 14 ++++---------- src/battle_util.c | 24 +++++++++++++----------- 4 files changed, 19 insertions(+), 23 deletions(-) diff --git a/include/battle_util.h b/include/battle_util.h index d98c511e23..6caa939b90 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -167,7 +167,7 @@ bool32 IsEntrainmentBannedAbilityAttacker(u16 ability); bool32 IsEntrainmentTargetOrSimpleBeamBannedAbility(u16 ability); bool32 CanSleep(u8 battlerId); -bool32 CanBePoisoned(u8 battlerId); +bool32 CanBePoisoned(u8 gBattlerAttacker, u8 battlerTarget); bool32 CanBeBurned(u8 battlerId); bool32 CanBeParalyzed(u8 battlerId); bool32 CanBeFrozen(u8 battlerId); diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index fef6e6c6ff..9640df2b40 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -2616,7 +2616,7 @@ bool32 AI_CanPutToSleep(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, bool32 AI_CanBePoisoned(u8 battler, u16 ability) { if (ability == ABILITY_IMMUNITY - || ability == ABILITY_PASTEL_VEIL + || IsAbilityOnSide(battler, ABILITY_PASTEL_VEIL) || gBattleMons[battler].status1 & STATUS1_ANY || IsAbilityStatusProtected(battler) || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index c5c922d8e5..49cc8540ef 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2682,9 +2682,7 @@ void SetMoveEffect(bool32 primary, u32 certain) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STATUS_HAD_NO_EFFECT; RESET_RETURN } - if (!CanPoisonType(gBattleScripting.battler, gEffectBattler)) - break; - if (!CanBePoisoned(gEffectBattler)) + if (!CanBePoisoned(gBattleScripting.battler, gEffectBattler)) break; statusChanged = TRUE; @@ -2809,11 +2807,8 @@ void SetMoveEffect(bool32 primary, u32 certain) } if (gBattleMons[gEffectBattler].status1) break; - if (CanPoisonType(gBattleScripting.battler, gEffectBattler)) + if (CanBePoisoned(gBattleScripting.battler, gEffectBattler)) { - if (!CanBePoisoned(gEffectBattler)) - break; - // It's redundant, because at this point we know the status1 value is 0. gBattleMons[gEffectBattler].status1 &= ~(STATUS1_TOXIC_POISON); gBattleMons[gEffectBattler].status1 &= ~(STATUS1_POISON); @@ -7257,9 +7252,8 @@ static void HandleTerrainMove(u32 moveEffect) bool32 CanPoisonType(u8 battlerAttacker, u8 battlerTarget) { - return (GetBattlerAbility(battlerAttacker) == ABILITY_CORROSION - || !(IS_BATTLER_OF_TYPE(battlerTarget, TYPE_POISON) - || IS_BATTLER_OF_TYPE(battlerTarget, TYPE_STEEL))); + return ((GetBattlerAbility(battlerAttacker) == ABILITY_CORROSION && gBattleMoves[gCurrentMove].split == SPLIT_STATUS) + || !(IS_BATTLER_OF_TYPE(battlerTarget, TYPE_POISON) || IS_BATTLER_OF_TYPE(battlerTarget, TYPE_STEEL))); } bool32 CanParalyzeType(u8 battlerAttacker, u8 battlerTarget) diff --git a/src/battle_util.c b/src/battle_util.c index fe957e4645..5dbe42227c 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4961,7 +4961,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move && gBattleMons[gBattlerAttacker].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && TARGET_TURN_DAMAGED - && CanBePoisoned(gBattlerAttacker) + && CanBePoisoned(gBattlerAttacker, gBattlerTarget) && IsMoveMakingContact(move, gBattlerAttacker) && (Random() % 3) == 0) { @@ -5148,8 +5148,9 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMons[gBattlerTarget].hp != 0 && !gProtectStructs[gBattlerTarget].confusionSelfDmg - && CanBePoisoned(gBattlerTarget) + && CanBePoisoned(gBattlerAttacker, gBattlerTarget) && IsMoveMakingContact(move, gBattlerAttacker) + && TARGET_TURN_DAMAGED // Need to actually hit the target && (Random() % 3) == 0) { gBattleScripting.moveEffect = MOVE_EFFECT_POISON; @@ -5589,18 +5590,19 @@ bool32 CanSleep(u8 battlerId) return TRUE; } -bool32 CanBePoisoned(u8 battlerId) +bool32 CanBePoisoned(u8 battlerAttacker, u8 battlerTarget) { - u16 ability = GetBattlerAbility(battlerId); - if (IS_BATTLER_OF_TYPE(battlerId, TYPE_POISON) - || IS_BATTLER_OF_TYPE(battlerId, TYPE_STEEL) - || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_SAFEGUARD - || gBattleMons[battlerId].status1 & STATUS1_ANY + u16 ability = GetBattlerAbility(battlerTarget); + + if (!(CanPoisonType(battlerAttacker, battlerTarget)) + || gSideStatuses[GetBattlerSide(battlerTarget)] & SIDE_STATUS_SAFEGUARD + || gBattleMons[battlerTarget].status1 & STATUS1_ANY || ability == ABILITY_IMMUNITY || ability == ABILITY_COMATOSE - || gBattleMons[battlerId].status1 & STATUS1_ANY - || IsAbilityStatusProtected(battlerId) - || IsBattlerTerrainAffected(battlerId, STATUS_FIELD_MISTY_TERRAIN)) + || IsAbilityOnSide(battlerTarget, ABILITY_PASTEL_VEIL) + || gBattleMons[battlerTarget].status1 & STATUS1_ANY + || IsAbilityStatusProtected(battlerTarget) + || IsBattlerTerrainAffected(battlerTarget, STATUS_FIELD_MISTY_TERRAIN)) return FALSE; return TRUE; } From 40bced517a9a66292cea932da1360bc3e02a1161 Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Tue, 2 Nov 2021 20:00:57 +1300 Subject: [PATCH 2/7] Pastel Veil blocks poison for whole side Tested vs Toxic, Toxic Thread and Sludge with 100% effect chance. --- data/battle_scripts_1.s | 15 +++++++++++++++ include/constants/battle_string_ids.h | 3 ++- src/battle_message.c | 2 ++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index dd6af61e55..dc0a1900e8 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -2581,6 +2581,18 @@ BattleScript_AromaVeilProtects: orhalfword gMoveResultFlags, MOVE_RESULT_FAILED goto BattleScript_MoveEnd +BattleScript_PastelVeilProtectsRet:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_PASTELVEILPROTECTED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_PastelVeilProtects: + call BattleScript_PastelVeilProtectsRet + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + BattleScript_LeafGuardProtectsRet:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp @@ -3053,6 +3065,7 @@ BattleScript_EffectToxic:: ppreduce jumpifability BS_TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects + jumpifability BS_TARGET_SIDE, ABILITY_PASTEL_VEIL, BattleScript_PastelVeilProtects jumpifflowerveil BattleScript_FlowerVeilProtects jumpifleafguard BattleScript_LeafGuardProtects jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects @@ -3080,6 +3093,7 @@ BattleScript_AlreadyPoisoned:: BattleScript_ImmunityProtected:: copybyte gEffectBattler, gBattlerTarget + call BattleScript_AbilityPopUp setbyte cMULTISTRING_CHOOSER, B_MSG_ABILITY_PREVENTS_MOVE_STATUS call BattleScript_PSNPrevention goto BattleScript_MoveEnd @@ -3408,6 +3422,7 @@ BattleScript_EffectPoison:: ppreduce jumpifability BS_TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects + jumpifability BS_TARGET_SIDE, ABILITY_PASTEL_VEIL, BattleScript_PastelVeilProtects jumpifflowerveil BattleScript_FlowerVeilProtects jumpifleafguard BattleScript_LeafGuardProtects jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 1d461e2a00..a84f0ff34e 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -597,8 +597,9 @@ #define STRINGID_BUTPOKEMONCANTUSETHEMOVE 594 #define STRINGID_BUTHOOPACANTUSEIT 595 #define STRINGID_BROKETHROUGHPROTECTION 596 +#define STRINGID_PASTELVEILPROTECTED 597 -#define BATTLESTRINGS_COUNT 597 +#define BATTLESTRINGS_COUNT 598 // The below IDs are all indexes into battle message tables, // used to determine which of a set of messages to print. diff --git a/src/battle_message.c b/src/battle_message.c index f26726a69a..f6569f039c 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -723,9 +723,11 @@ static const u8 sText_PkmnRevertedToPrimal[] = _("{B_ATK_NAME_WITH_PREFIX}'s Pri static const u8 sText_ButPokemonCantUseTheMove[] = _("But {B_ATK_NAME_WITH_PREFIX} can't\nuse the move!"); static const u8 sText_ButHoopaCantUseIt[] = _("But Hoopa can't use it\nthe way it is now!"); static const u8 sText_BrokeThroughProtection[] = _("It broke through the\n{B_DEF_NAME_WITH_PREFIX}'s protection!"); +static const u8 sText_PastelVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby a pastel veil!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_PASTELVEILPROTECTED -12] = sText_PastelVeilProtected, [STRINGID_BROKETHROUGHPROTECTION - 12] = sText_BrokeThroughProtection, [STRINGID_BUTPOKEMONCANTUSETHEMOVE - 12] = sText_ButPokemonCantUseTheMove, [STRINGID_BUTHOOPACANTUSEIT - 12] = sText_ButHoopaCantUseIt, From 95435b5f7f132da3d0d36464e8726ad132fd7008 Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Tue, 2 Nov 2021 23:06:10 +1300 Subject: [PATCH 3/7] Pastel Veil switchin effect attempt Battle script isn't working for partner for some reason. --- data/battle_scripts_1.s | 8 ++++++++ include/battle_scripts.h | 1 + include/constants/battle_string_ids.h | 4 +++- src/battle_message.c | 3 +++ src/battle_util.c | 19 +++++++++++++++++++ 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index dc0a1900e8..d627008da6 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8926,3 +8926,11 @@ BattleScript_DarkTypePreventsPrankster:: waitmessage B_WAIT_TIME_LONG orhalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT goto BattleScript_MoveEnd + +BattleScript_PastelVeilActivates:: + call BattleScript_AbilityPopUp + printfromtable gSwitchInAbilityStringIds + curestatus BS_SCRIPTING + updatestatusicon BS_SCRIPTING + waitmessage B_WAIT_TIME_LONG + end3 diff --git a/include/battle_scripts.h b/include/battle_scripts.h index ec95a45497..5875eaa686 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -402,5 +402,6 @@ extern const u8 BattleScript_BlockedByPrimalWeatherEnd3[]; extern const u8 BattleScript_BlockedByPrimalWeatherRet[]; extern const u8 BattleScript_PrimalReversion[]; extern const u8 BattleScript_HyperspaceFuryRemoveProtect[]; +extern const u8 BattleScript_PastelVeilActivates[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index a84f0ff34e..95a37223dd 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -598,8 +598,9 @@ #define STRINGID_BUTHOOPACANTUSEIT 595 #define STRINGID_BROKETHROUGHPROTECTION 596 #define STRINGID_PASTELVEILPROTECTED 597 +#define STRINGID_PASTELVEILENTERS 598 -#define BATTLESTRINGS_COUNT 598 +#define BATTLESTRINGS_COUNT 599 // The below IDs are all indexes into battle message tables, // used to determine which of a set of messages to print. @@ -834,6 +835,7 @@ #define B_MSG_SWITCHIN_SCREENCLEANER 12 #define B_MSG_SWITCHIN_ASONE 13 #define B_MSG_SWITCHIN_CURIOUS_MEDICINE 14 +#define B_MSG_SWITCHIN_PASTEL_VEIL 15 // gMentalHerbCureStringIds #define B_MSG_MENTALHERBCURE_INFATUATION 0 diff --git a/src/battle_message.c b/src/battle_message.c index f6569f039c..3a17a72406 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -724,9 +724,11 @@ static const u8 sText_ButPokemonCantUseTheMove[] = _("But {B_ATK_NAME_WITH_PREFI static const u8 sText_ButHoopaCantUseIt[] = _("But Hoopa can't use it\nthe way it is now!"); static const u8 sText_BrokeThroughProtection[] = _("It broke through the\n{B_DEF_NAME_WITH_PREFIX}'s protection!"); static const u8 sText_PastelVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby a pastel veil!"); +static const u8 sText_PastelVeilEnters[] = _("{B_EFF_NAME_WITH_PREFIX}'s poisoning\nwas cured!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_PASTELVEILENTERS - 12] = sText_PastelVeilEnters, [STRINGID_PASTELVEILPROTECTED -12] = sText_PastelVeilProtected, [STRINGID_BROKETHROUGHPROTECTION - 12] = sText_BrokeThroughProtection, [STRINGID_BUTPOKEMONCANTUSETHEMOVE - 12] = sText_ButPokemonCantUseTheMove, @@ -1373,6 +1375,7 @@ const u16 gSwitchInAbilityStringIds[] = [B_MSG_SWITCHIN_SCREENCLEANER] = STRINGID_SCREENCLEANERENTERS, [B_MSG_SWITCHIN_ASONE] = STRINGID_ASONEENTERS, [B_MSG_SWITCHIN_CURIOUS_MEDICINE] = STRINGID_CURIOUSMEDICINEENTERS, + [B_MSG_SWITCHIN_PASTEL_VEIL] = STRINGID_PASTELVEILENTERS, }; const u16 gMissStringIds[] = diff --git a/src/battle_util.c b/src/battle_util.c index 5dbe42227c..0600d37e81 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4061,6 +4061,25 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move effect++; } break; + case ABILITY_PASTEL_VEIL: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + u32 side = GetBattlerSide(battler); + + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (IsBattlerAlive(i) && GetBattlerSide(i) == side + && (gBattleMons[i].status1 & STATUS1_POISON || gBattleMons[i].status1 & STATUS1_TOXIC_POISON)) + { + gActiveBattler = gBattleScripting.battler = gEffectBattler = i; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_PASTEL_VEIL; + BattleScriptPushCursorAndCallback(BattleScript_PastelVeilActivates); + effect++; + } + } + gSpecialStatuses[battler].switchInAbilityDone = 1; + } + break; case ABILITY_ANTICIPATION: if (!gSpecialStatuses[battler].switchInAbilityDone) { From 4668e11765c644e1e621275fae215c36a9fa2484 Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Wed, 3 Nov 2021 00:45:24 +1300 Subject: [PATCH 4/7] Looping battlescript version 1 Would be better if it simply updated the target, cured the status and returned I think, needs testing. --- data/battle_scripts_1.s | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index d627008da6..37b5923657 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8927,10 +8927,30 @@ BattleScript_DarkTypePreventsPrankster:: orhalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT goto BattleScript_MoveEnd -BattleScript_PastelVeilActivates:: +BattleScript_PastelVeilActivatesOld:: call BattleScript_AbilityPopUp printfromtable gSwitchInAbilityStringIds curestatus BS_SCRIPTING updatestatusicon BS_SCRIPTING waitmessage B_WAIT_TIME_LONG end3 + +BattleScript_PastelVeilActivates:: + call BattleScript_AbilityPopUp + printfromtable gSwitchInAbilityStringIds + waitmessage B_WAIT_TIME_LONG + copybyte gBattlerTarget, gBattlerAttacker + setbyte gBattleCommunication, 0 +BattleScript_PastelVeil_TryCurePoison: + jumpifstatus BS_TARGET, STATUS1_POISON | STATUS1_TOXIC_POISON, BattleScript_PastelVeilCurePoison + goto BattleScript_PastelVeilEnd +BattleScript_PastelVeilCurePoison: + curestatus BS_TARGET + updatestatusicon BS_TARGET + jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0x0, BattleScript_PastelVeilEnd + addbyte gBattleCommunication, 1 + jumpifnoally BS_TARGET, BattleScript_PastelVeilEnd + setallytonexttarget BattleScript_PastelVeil_TryCurePoison + goto BattleScript_MoveEnd +BattleScript_PastelVeilEnd: + end3 From d99fd30e4d60533e46d59e872cac542786a8d929 Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Wed, 3 Nov 2021 11:51:20 +1300 Subject: [PATCH 5/7] Looping battle script, correct message Testing in Sword showed that the pop up should happen once if two mons are cured, and that the correct message is "X was cured of its poisoning!" --- data/battle_scripts_1.s | 24 ++++++++++-------------- src/battle_message.c | 2 +- src/battle_util.c | 17 ++++------------- 3 files changed, 15 insertions(+), 28 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 37b5923657..5bd37cf04c 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8927,30 +8927,26 @@ BattleScript_DarkTypePreventsPrankster:: orhalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT goto BattleScript_MoveEnd -BattleScript_PastelVeilActivatesOld:: - call BattleScript_AbilityPopUp - printfromtable gSwitchInAbilityStringIds - curestatus BS_SCRIPTING - updatestatusicon BS_SCRIPTING - waitmessage B_WAIT_TIME_LONG - end3 - BattleScript_PastelVeilActivates:: - call BattleScript_AbilityPopUp - printfromtable gSwitchInAbilityStringIds - waitmessage B_WAIT_TIME_LONG - copybyte gBattlerTarget, gBattlerAttacker setbyte gBattleCommunication, 0 + setbyte gBattleCommunication + 1, 0 BattleScript_PastelVeil_TryCurePoison: jumpifstatus BS_TARGET, STATUS1_POISON | STATUS1_TOXIC_POISON, BattleScript_PastelVeilCurePoison - goto BattleScript_PastelVeilEnd + goto BattleScript_PastelVeilLoopIncrement BattleScript_PastelVeilCurePoison: + jumpifbyte CMP_NOT_EQUAL, gBattleCommunication + 1, 0x0, BattleScript_PastelVeilCurePoisonNoPopUp + call BattleScript_AbilityPopUp + setbyte gBattleCommunication + 1, 1 +BattleScript_PastelVeilCurePoisonNoPopUp: @ Only show Pastel Veil pop up once if it cures two mons + printfromtable gSwitchInAbilityStringIds + waitmessage B_WAIT_TIME_LONG curestatus BS_TARGET updatestatusicon BS_TARGET +BattleScript_PastelVeilLoopIncrement: jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0x0, BattleScript_PastelVeilEnd addbyte gBattleCommunication, 1 jumpifnoally BS_TARGET, BattleScript_PastelVeilEnd setallytonexttarget BattleScript_PastelVeil_TryCurePoison - goto BattleScript_MoveEnd + goto BattleScript_PastelVeilEnd BattleScript_PastelVeilEnd: end3 diff --git a/src/battle_message.c b/src/battle_message.c index 3a17a72406..61889a2b7f 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -724,7 +724,7 @@ static const u8 sText_ButPokemonCantUseTheMove[] = _("But {B_ATK_NAME_WITH_PREFI static const u8 sText_ButHoopaCantUseIt[] = _("But Hoopa can't use it\nthe way it is now!"); static const u8 sText_BrokeThroughProtection[] = _("It broke through the\n{B_DEF_NAME_WITH_PREFIX}'s protection!"); static const u8 sText_PastelVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby a pastel veil!"); -static const u8 sText_PastelVeilEnters[] = _("{B_EFF_NAME_WITH_PREFIX}'s poisoning\nwas cured!"); +static const u8 sText_PastelVeilEnters[] = _("{B_DEF_NAME_WITH_PREFIX} was cured\nof its poisoning!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { diff --git a/src/battle_util.c b/src/battle_util.c index 0600d37e81..25bfde382d 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4064,19 +4064,10 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move case ABILITY_PASTEL_VEIL: if (!gSpecialStatuses[battler].switchInAbilityDone) { - u32 side = GetBattlerSide(battler); - - for (i = 0; i < MAX_BATTLERS_COUNT; i++) - { - if (IsBattlerAlive(i) && GetBattlerSide(i) == side - && (gBattleMons[i].status1 & STATUS1_POISON || gBattleMons[i].status1 & STATUS1_TOXIC_POISON)) - { - gActiveBattler = gBattleScripting.battler = gEffectBattler = i; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_PASTEL_VEIL; - BattleScriptPushCursorAndCallback(BattleScript_PastelVeilActivates); - effect++; - } - } + gBattlerTarget = battler; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_PASTEL_VEIL; + BattleScriptPushCursorAndCallback(BattleScript_PastelVeilActivates); + effect++; gSpecialStatuses[battler].switchInAbilityDone = 1; } break; From d33bcc335bd6e9beca0a94346098be89b6bffff6 Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Wed, 3 Nov 2021 14:49:14 +1300 Subject: [PATCH 6/7] Revert Poison Touch target check This would prevent Poison Touch activating if the target hurt itself. --- src/battle_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_util.c b/src/battle_util.c index 843ed16a71..7d955ee844 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5208,7 +5208,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move case ABILITY_POISON_TOUCH: if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMons[gBattlerTarget].hp != 0 - && !gProtectStructs[gBattlerTarget].confusionSelfDmg + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && CanBePoisoned(gBattlerAttacker, gBattlerTarget) && IsMoveMakingContact(move, gBattlerAttacker) && TARGET_TURN_DAMAGED // Need to actually hit the target From 5a855db4ad97a8bebfd3c1eb7135162c2c1c3997 Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Thu, 4 Nov 2021 11:08:37 +1300 Subject: [PATCH 7/7] Fix prototype of CanBePoisoned --- include/battle_util.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/battle_util.h b/include/battle_util.h index 86fe789f08..d0a9d8f87f 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -168,7 +168,7 @@ bool32 IsEntrainmentBannedAbilityAttacker(u16 ability); bool32 IsEntrainmentTargetOrSimpleBeamBannedAbility(u16 ability); bool32 CanSleep(u8 battlerId); -bool32 CanBePoisoned(u8 gBattlerAttacker, u8 battlerTarget); +bool32 CanBePoisoned(u8 battlerAttacker, u8 battlerTarget); bool32 CanBeBurned(u8 battlerId); bool32 CanBeParalyzed(u8 battlerId); bool32 CanBeFrozen(u8 battlerId);