Fix Innards Out doing dmg after Gastro Acid / vs Magic Guard (#3758)

* gastro acid stays for fainted mons

* Innards Out does not damage Magic Guard Pokemon
This commit is contained in:
DizzyEggg 2023-12-17 21:47:12 +01:00 committed by GitHub
parent 76a7513dcd
commit e22ac51617
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 69 additions and 1 deletions

View file

@ -7932,12 +7932,14 @@ BattleScript_AnticipationActivates::
BattleScript_AftermathDmg:: BattleScript_AftermathDmg::
pause B_WAIT_TIME_SHORT pause B_WAIT_TIME_SHORT
call BattleScript_AbilityPopUp call BattleScript_AbilityPopUp
jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_AftermathDmgRet
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
healthbarupdate BS_ATTACKER healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER datahpupdate BS_ATTACKER
printstring STRINGID_AFTERMATHDMG printstring STRINGID_AFTERMATHDMG
waitmessage B_WAIT_TIME_LONG waitmessage B_WAIT_TIME_LONG
tryfaintmon BS_ATTACKER tryfaintmon BS_ATTACKER
BattleScript_AftermathDmgRet:
return return
BattleScript_DampPreventsAftermath:: BattleScript_DampPreventsAftermath::

View file

@ -3262,7 +3262,7 @@ void FaintClearSetData(u32 battler)
gBattleMons[battler].statStages[i] = DEFAULT_STAT_STAGE; gBattleMons[battler].statStages[i] = DEFAULT_STAT_STAGE;
gBattleMons[battler].status2 = 0; gBattleMons[battler].status2 = 0;
gStatuses3[battler] = 0; gStatuses3[battler] &= STATUS3_GASTRO_ACID; // Edge case: Keep Gastro Acid if pokemon's ability can have effect after fainting, for example Innards Out.
gStatuses4[battler] = 0; gStatuses4[battler] = 0;
for (i = 0; i < gBattlersCount; i++) for (i = 0; i < gBattlersCount; i++)

View file

@ -0,0 +1,66 @@
#include "global.h"
#include "test/battle.h"
SINGLE_BATTLE_TEST("Innards Out deal dmg on fainting equal to the amount of dmg inflicted on the Innards Out mon")
{
u16 hp = 0;
PARAMETRIZE { hp = 5; }
PARAMETRIZE { hp = 15; }
PARAMETRIZE { hp = 50; }
PARAMETRIZE { hp = 100; } // This takes out Wobbuffet.
GIVEN {
PLAYER(SPECIES_PYUKUMUKU) { HP(hp); Ability(ABILITY_INNARDS_OUT); }
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET) { HP(70); SpAttack(1000); }
OPPONENT(SPECIES_WOBBUFFET);
ASSUME(gBattleMoves[MOVE_PSYCHIC].power != 0);
} WHEN {
TURN { MOVE(opponent, MOVE_PSYCHIC); SEND_OUT(player, 1); if (hp == 100) { SEND_OUT(opponent, 1); } }
} SCENE {
MESSAGE("Foe Wobbuffet used Psychic!");
HP_BAR(player, hp);
ABILITY_POPUP(player, ABILITY_INNARDS_OUT);
HP_BAR(opponent, hp);
}
}
SINGLE_BATTLE_TEST("Innards Out does not trigger after Gastro Acid has been used")
{
GIVEN {
PLAYER(SPECIES_PYUKUMUKU) { HP(1); Ability(ABILITY_INNARDS_OUT); }
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
ASSUME(gBattleMoves[MOVE_PSYCHIC].power != 0);
ASSUME(gBattleMoves[MOVE_GASTRO_ACID].effect == EFFECT_GASTRO_ACID);
} WHEN {
TURN { MOVE(opponent, MOVE_GASTRO_ACID); }
TURN { MOVE(opponent, MOVE_PSYCHIC); SEND_OUT(player, 1); }
} SCENE {
MESSAGE("Foe Wobbuffet used Gastro Acid!");
MESSAGE("Foe Wobbuffet used Psychic!");
HP_BAR(player);
NONE_OF {
ABILITY_POPUP(player, ABILITY_INNARDS_OUT);
HP_BAR(opponent);
}
}
}
// According to Showdown Innards Out triggers, but does nothing.
SINGLE_BATTLE_TEST("Innards Out does not damage Magic Guard Pokemon")
{
GIVEN {
PLAYER(SPECIES_PYUKUMUKU) { HP(1); Ability(ABILITY_INNARDS_OUT); }
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_CLEFABLE) { Ability(ABILITY_MAGIC_GUARD); }
ASSUME(gBattleMoves[MOVE_PSYCHIC].power != 0);
} WHEN {
TURN { MOVE(opponent, MOVE_PSYCHIC); SEND_OUT(player, 1); }
} SCENE {
MESSAGE("Foe Clefable used Psychic!");
HP_BAR(player);
ABILITY_POPUP(player, ABILITY_INNARDS_OUT);
NOT HP_BAR(opponent);
}
}