Ability status immunity

This commit is contained in:
Eduardo Quezada 2025-06-26 17:44:29 -04:00
parent cf85abc270
commit 57da4617da
9 changed files with 7 additions and 59 deletions

View File

@ -2801,14 +2801,6 @@ BattleScript_AromaVeilProtects:
setmoveresultflags MOVE_RESULT_FAILED
goto BattleScript_MoveEnd
BattleScript_PastelVeilProtects:
pause B_WAIT_TIME_SHORT
call BattleScript_AbilityPopUp
printstring STRINGID_PASTELVEILPROTECTED
waitmessage B_WAIT_TIME_LONG
setmoveresultflags MOVE_RESULT_FAILED
goto BattleScript_MoveEnd
BattleScript_AbilityProtectsDoesntAffectRet::
pause B_WAIT_TIME_SHORT
call BattleScript_AbilityPopUp
@ -3164,10 +3156,7 @@ BattleScript_AlreadyPoisoned::
BattleScript_ImmunityProtected::
call BattleScript_AbilityPopUp
pause B_WAIT_TIME_SHORT
printfromtable gStatusPreventionStringIds
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
goto BattleScript_ButItFailed
BattleScript_EffectAuroraVeil::
attackcanceler

View File

@ -197,9 +197,7 @@ enum StringID
STRINGID_PKMNPREVENTSUSAGE,
STRINGID_PKMNRESTOREDHPUSING,
STRINGID_PKMNCHANGEDTYPEWITH,
STRINGID_PKMNPREVENTSPARALYSISWITH,
STRINGID_PKMNPREVENTSROMANCEWITH,
STRINGID_PKMNPREVENTSPOISONINGWITH,
STRINGID_PKMNPREVENTSCONFUSIONWITH,
STRINGID_PKMNRAISEDFIREPOWERWITH,
STRINGID_PKMNANCHORSITSELFWITH,
@ -302,7 +300,6 @@ enum StringID
STRINGID_ITEMALLOWSONLYYMOVE,
STRINGID_PKMNHUNGONWITHX,
STRINGID_EMPTYSTRING3,
STRINGID_PKMNSXPREVENTSBURNS,
STRINGID_PKMNSXBLOCKSY,
STRINGID_PKMNSXRESTOREDHPALITTLE2,
STRINGID_PKMNSXWHIPPEDUPSANDSTORM,
@ -348,14 +345,12 @@ enum StringID
STRINGID_PKMNSXBLOCKSY2,
STRINGID_PKMNSXWOREOFF,
STRINGID_THEWALLSHATTERED,
STRINGID_PKMNSXPREVENTSYSZ,
STRINGID_PKMNSXCUREDITSYPROBLEM,
STRINGID_ATTACKERCANTESCAPE,
STRINGID_PKMNOBTAINEDX,
STRINGID_PKMNOBTAINEDX2,
STRINGID_PKMNOBTAINEDXYOBTAINEDZ,
STRINGID_BUTNOEFFECT,
STRINGID_PKMNSXHADNOEFFECTONY,
STRINGID_TWOENEMIESDEFEATED,
STRINGID_TRAINER2LOSETEXT,
STRINGID_PKMNINCAPABLEOFPOWER,
@ -588,7 +583,6 @@ enum StringID
STRINGID_BROKETHROUGHPROTECTION,
STRINGID_ABILITYALLOWSONLYMOVE,
STRINGID_SWAPPEDABILITIES,
STRINGID_PASTELVEILPROTECTED,
STRINGID_PASTELVEILENTERS,
STRINGID_BATTLERTYPECHANGEDTO,
STRINGID_BOTHCANNOLONGERESCAPE,
@ -1040,17 +1034,6 @@ enum GotStatusedStringID
B_MSG_STATUSED_BY_ABILITY,
};
// gStatusPreventionStringIds
enum StatusPreventionStringID
{
B_MSG_ABILITY_PREVENTS_MOVE_BURN,
B_MSG_ABILITY_PREVENTS_MOVE_PARALYSIS,
B_MSG_ABILITY_PREVENTS_MOVE_POISON,
B_MSG_ABILITY_PREVENTS_ABILITY_STATUS,
B_MSG_STATUS_HAD_NO_EFFECT,
B_MSG_ABILITY_PASTEL_VEIL,
};
// gGotDefrostedStringIds
enum GotDefrostedStringID
{

View File

@ -427,14 +427,11 @@ void BattleArena_DeductSkillPoints(u8 battler, enum StringID stringId)
case STRINGID_PKMNSXBLOCKSY2:
case STRINGID_PKMNSXPREVENTSYLOSS:
case STRINGID_PKMNSXMADEYINEFFECTIVE:
case STRINGID_PKMNSXPREVENTSBURNS:
case STRINGID_PKMNSXBLOCKSY:
case STRINGID_PKMNPROTECTEDBY:
case STRINGID_PKMNPREVENTSUSAGE:
case STRINGID_PKMNRESTOREDHPUSING:
case STRINGID_PKMNPREVENTSPARALYSISWITH:
case STRINGID_PKMNPREVENTSROMANCEWITH:
case STRINGID_PKMNPREVENTSPOISONINGWITH:
case STRINGID_PKMNPREVENTSCONFUSIONWITH:
case STRINGID_PKMNRAISEDFIREPOWERWITH:
case STRINGID_PKMNANCHORSITSELFWITH:

View File

@ -356,9 +356,7 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] =
[STRINGID_PKMNPREVENTSUSAGE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents {B_ATK_NAME_WITH_PREFIX2} from using {B_CURRENT_MOVE}!"), //I don't see this in SV text
[STRINGID_PKMNRESTOREDHPUSING] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} restored HP using its {B_DEF_ABILITY}!"), //not in gen 5+, ability popup
[STRINGID_PKMNCHANGEDTYPEWITH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} made it the {B_BUFF1} type!"), //not in gen 5+, ability popup
[STRINGID_PKMNPREVENTSPARALYSISWITH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ABILITY} prevents paralysis!"), //not in gen 5+, ability popup
[STRINGID_PKMNPREVENTSROMANCEWITH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents romance!"), //not in gen 5+, ability popup
[STRINGID_PKMNPREVENTSPOISONINGWITH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ABILITY} prevents poisoning!"), //not in gen 5+, ability popup
[STRINGID_PKMNPREVENTSCONFUSIONWITH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents confusion!"), //not in gen 5+, ability popup
[STRINGID_PKMNRAISEDFIREPOWERWITH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} raised the power of Fire-type moves!"), //not in gen 5+, ability popup
[STRINGID_PKMNANCHORSITSELFWITH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} anchors itself with {B_DEF_ABILITY}!"), //not in gen 5+, ability popup
@ -461,7 +459,6 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] =
[STRINGID_ITEMALLOWSONLYYMOVE] = COMPOUND_STRING("{B_LAST_ITEM} only allows the use of {B_CURRENT_MOVE}!\p"),
[STRINGID_PKMNHUNGONWITHX] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} hung on using its {B_LAST_ITEM}!"),
[STRINGID_EMPTYSTRING3] = gText_EmptyString3,
[STRINGID_PKMNSXPREVENTSBURNS] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ABILITY} prevents burns!"), //not in gen 5+, ability popup
[STRINGID_PKMNSXBLOCKSY] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} blocks {B_CURRENT_MOVE}!"), //not in gen 5+, ability popup
[STRINGID_PKMNSXRESTOREDHPALITTLE2] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} restored its HP a little!"), //not in gen 5+, ability popup
[STRINGID_PKMNSXWHIPPEDUPSANDSTORM] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} whipped up a sandstorm!"), //not in gen 5+, ability popup
@ -507,14 +504,12 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] =
[STRINGID_PKMNSXBLOCKSY2] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} blocks {B_CURRENT_MOVE}!"), //not in gen 5+, ability popup
[STRINGID_PKMNSXWOREOFF] = COMPOUND_STRING("{B_ATK_TEAM1} team's {B_BUFF1} wore off!"),
[STRINGID_THEWALLSHATTERED] = COMPOUND_STRING("The wall shattered!"), //not in gen5+, uses "your teams light screen wore off!" etc instead
[STRINGID_PKMNSXPREVENTSYSZ] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} prevents {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY} from working!"),
[STRINGID_PKMNSXCUREDITSYPROBLEM] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} cured its {B_BUFF1} problem!"), //not in gen 5+, ability popup
[STRINGID_ATTACKERCANTESCAPE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} can't escape!"),
[STRINGID_PKMNOBTAINEDX] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} obtained {B_BUFF1}."),
[STRINGID_PKMNOBTAINEDX2] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} obtained {B_BUFF2}."),
[STRINGID_PKMNOBTAINEDXYOBTAINEDZ] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} obtained {B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained {B_BUFF2}."),
[STRINGID_BUTNOEFFECT] = COMPOUND_STRING("But it had no effect!"),
[STRINGID_PKMNSXHADNOEFFECTONY] = COMPOUND_STRING("Target protected by {B_LAST_ABILITY}!"), //not in gen 5+, ability popup
[STRINGID_TWOENEMIESDEFEATED] = sText_TwoInGameTrainersDefeated,
[STRINGID_TRAINER2LOSETEXT] = COMPOUND_STRING("{B_TRAINER2_LOSE_TEXT}"),
[STRINGID_PKMNINCAPABLEOFPOWER] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} appears incapable of using its power!"),
@ -748,7 +743,6 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] =
[STRINGID_BROKETHROUGHPROTECTION] = COMPOUND_STRING("It broke through {B_DEF_NAME_WITH_PREFIX2}'s protection!"),
[STRINGID_ABILITYALLOWSONLYMOVE] = COMPOUND_STRING("{B_ATK_ABILITY} only allows the use of {B_CURRENT_MOVE}!\p"),
[STRINGID_SWAPPEDABILITIES] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} swapped Abilities with its target!"),
[STRINGID_PASTELVEILPROTECTED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} is protected by a pastel veil!"),
[STRINGID_PASTELVEILENTERS] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} was cured of its poisoning!"),
[STRINGID_BATTLERTYPECHANGEDTO] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s type changed to {B_BUFF1}!"),
[STRINGID_BOTHCANNOLONGERESCAPE] = COMPOUND_STRING("Neither Pokémon can run away!"),
@ -1323,16 +1317,6 @@ const u16 gBerryEffectStringIds[] =
[B_MSG_NORMALIZED_STATUS] = STRINGID_PKMNSITEMNORMALIZEDSTATUS
};
const u16 gStatusPreventionStringIds[] =
{
[B_MSG_ABILITY_PREVENTS_MOVE_BURN] = STRINGID_PKMNSXPREVENTSBURNS,
[B_MSG_ABILITY_PREVENTS_MOVE_PARALYSIS] = STRINGID_PKMNPREVENTSPARALYSISWITH,
[B_MSG_ABILITY_PREVENTS_MOVE_POISON] = STRINGID_PKMNPREVENTSPOISONINGWITH,
[B_MSG_ABILITY_PREVENTS_ABILITY_STATUS] = STRINGID_PKMNSXPREVENTSYSZ,
[B_MSG_STATUS_HAD_NO_EFFECT] = STRINGID_PKMNSXHADNOEFFECTONY,
[B_MSG_ABILITY_PASTEL_VEIL] = STRINGID_PASTELVEILPROTECTED
};
const u16 gItemSwapStringIds[] =
{
[B_MSG_ITEM_SWAP_TAKEN] = STRINGID_PKMNOBTAINEDX,

View File

@ -5645,13 +5645,11 @@ bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u
abilityAffected = TRUE;
battlerDef = sideBattler - 1;
abilityDef = ABILITY_PASTEL_VEIL;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABILITY_PASTEL_VEIL;
battleScript = BattleScript_ImmunityProtected;
}
else if (abilityDef == ABILITY_IMMUNITY)
{
abilityAffected = TRUE;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABILITY_PREVENTS_MOVE_POISON;
battleScript = BattleScript_ImmunityProtected;
}
break;
@ -5673,7 +5671,6 @@ bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u
else if (abilityDef == ABILITY_LIMBER)
{
abilityAffected = TRUE;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABILITY_PREVENTS_MOVE_PARALYSIS;
battleScript = BattleScript_ImmunityProtected;
}
break;
@ -5689,7 +5686,6 @@ bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u
else if (abilityDef == ABILITY_WATER_VEIL || abilityDef == ABILITY_WATER_BUBBLE)
{
abilityAffected = TRUE;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABILITY_PREVENTS_MOVE_BURN;
battleScript = BattleScript_ImmunityProtected;
}
else if (abilityDef == ABILITY_THERMAL_EXCHANGE)
@ -5720,7 +5716,6 @@ bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u
abilityAffected = TRUE;
battlerDef = sideBattler - 1;
abilityDef = ABILITY_SWEET_VEIL;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STATUS_HAD_NO_EFFECT;
battleScript = BattleScript_ImmunityProtected;
}
else if (abilityDef == ABILITY_VITAL_SPIRIT || abilityDef == ABILITY_INSOMNIA)

View File

@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Immunity prevents Toxic bad poison")
} SCENE {
MESSAGE("Wobbuffet used Toxic!");
ABILITY_POPUP(opponent, ABILITY_IMMUNITY);
MESSAGE("The opposing Snorlax's Immunity prevents poisoning!");
MESSAGE("But it failed!");
NOT STATUS_ICON(opponent, poison: TRUE);
}
}

View File

@ -29,7 +29,7 @@ SINGLE_BATTLE_TEST("Limber prevents paralysis from Thunder Wave")
} WHEN {
TURN { MOVE(opponent, MOVE_THUNDER_WAVE); }
} SCENE {
MESSAGE("Persian's Limber prevents paralysis!");
MESSAGE("But it failed!");
NONE_OF {
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player);
STATUS_ICON(player, paralysis: TRUE);

View File

@ -80,7 +80,7 @@ SINGLE_BATTLE_TEST("Pastel Veil prevents Toxic bad poison")
} SCENE {
MESSAGE("Wobbuffet used Toxic!");
ABILITY_POPUP(opponent, ABILITY_PASTEL_VEIL);
MESSAGE("The opposing Ponyta is protected by a pastel veil!");
MESSAGE("But it failed!");
NOT STATUS_ICON(opponent, badPoison: TRUE);
}
}
@ -97,7 +97,7 @@ DOUBLE_BATTLE_TEST("Pastel Veil prevents Toxic bad poison on partner - right tar
} SCENE {
MESSAGE("Wobbuffet used Toxic!");
ABILITY_POPUP(opponentLeft, ABILITY_PASTEL_VEIL);
MESSAGE("The opposing Wynaut is protected by a pastel veil!");
MESSAGE("But it failed!");
NOT STATUS_ICON(opponentRight, badPoison: TRUE);
}
}
@ -114,7 +114,7 @@ DOUBLE_BATTLE_TEST("Pastel Veil prevents Toxic bad poison on partner - left targ
} SCENE {
MESSAGE("Wobbuffet used Toxic!");
ABILITY_POPUP(opponentRight, ABILITY_PASTEL_VEIL);
MESSAGE("The opposing Wynaut is protected by a pastel veil!");
MESSAGE("But it failed!");
NOT STATUS_ICON(opponentLeft, badPoison: TRUE);
}
}

View File

@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Water Bubble prevents burn from Will-o-Wisp")
TURN { MOVE(opponent, MOVE_WILL_O_WISP); }
} SCENE {
ABILITY_POPUP(player, ABILITY_WATER_BUBBLE);
MESSAGE("Dewpider's Water Bubble prevents burns!");
MESSAGE("But it failed!");
NONE_OF {
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, player);
STATUS_ICON(player, burn: TRUE);