Skip to content

Commit

Permalink
FIx mummy and lingering aroma abilities (#4731)
Browse files Browse the repository at this point in the history
* FIx mummy ability

..and lingering aroma.
Adds tests for both.

* merge the tests

* new line

* add 2 more tests

Mummy and Lingering Aroma don't replace each other
Mummy doesn't replace abilities that can't be suppressed
  • Loading branch information
Sneed69 authored Jun 7, 2024
1 parent 7fd0239 commit 1241cbe
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 3 deletions.
6 changes: 3 additions & 3 deletions src/battle_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -5315,9 +5315,9 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
&& IsMoveMakingContact(move, gBattlerAttacker)
&& gBattleStruct->overwrittenAbilities[gBattlerAttacker] != GetBattlerAbility(gBattlerTarget)
&& gBattleMons[gBattlerTarget].ability != ABILITY_MUMMY
&& gBattleMons[gBattlerTarget].ability != ABILITY_LINGERING_AROMA
&& !gAbilitiesInfo[gBattleMons[gBattlerTarget].ability].cantBeSuppressed)
&& gBattleMons[gBattlerAttacker].ability != ABILITY_MUMMY
&& gBattleMons[gBattlerAttacker].ability != ABILITY_LINGERING_AROMA
&& !gAbilitiesInfo[gBattleMons[gBattlerAttacker].ability].cantBeSuppressed)
{
if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD)
{
Expand Down
4 changes: 4 additions & 0 deletions test/battle/ability/lingering_aroma.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"

// Tests for Lingering Aroma are handled in test/battle/ability/mummy.c
98 changes: 98 additions & 0 deletions test/battle/ability/mummy.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
#include "global.h"
#include "test/battle.h"

SINGLE_BATTLE_TEST("Mummy/Lingering Aroma replace the attacker's ability on contact")
{
u32 move, ability, species;

PARAMETRIZE { move = MOVE_AQUA_JET; ability = ABILITY_MUMMY; species = SPECIES_YAMASK; }
PARAMETRIZE { move = MOVE_WATER_GUN; ability = ABILITY_MUMMY; species = SPECIES_YAMASK;}
PARAMETRIZE { move = MOVE_AQUA_JET; ability = ABILITY_LINGERING_AROMA; species = SPECIES_OINKOLOGNE; }
PARAMETRIZE { move = MOVE_WATER_GUN; ability = ABILITY_LINGERING_AROMA; species = SPECIES_OINKOLOGNE; }
GIVEN {
ASSUME(gMovesInfo[MOVE_AQUA_JET].makesContact);
ASSUME(!gMovesInfo[MOVE_WATER_GUN].makesContact);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(species) { Ability(ability); }
} WHEN {
TURN { MOVE(player, move); }
} SCENE {
if (gMovesInfo[move].makesContact) {
ABILITY_POPUP(opponent, ability);
if (ability == ABILITY_MUMMY)
MESSAGE("Wobbuffet acquired Mummy!");
else
MESSAGE("Wobbuffet acquired Lingering Aroma!");
} else {
NONE_OF {
ABILITY_POPUP(opponent, ability);
if (ability == ABILITY_MUMMY)
MESSAGE("Wobbuffet acquired Mummy!");
else
MESSAGE("Wobbuffet acquired Lingering Aroma!");
}
}
}
}

SINGLE_BATTLE_TEST("Mummy and Lingering Aroma don't replace each other")
{
u32 ability1, species1, ability2, species2;

PARAMETRIZE { ability1 = ability2 = ABILITY_MUMMY; species1 = species2 = SPECIES_YAMASK; }
PARAMETRIZE { ability1 = ABILITY_MUMMY; species1 = SPECIES_YAMASK; ability2 = ABILITY_LINGERING_AROMA; species2 = SPECIES_OINKOLOGNE; }
PARAMETRIZE { ability1 = ability2 = ABILITY_LINGERING_AROMA; species1 = species2 = SPECIES_OINKOLOGNE; }
GIVEN {
ASSUME(gMovesInfo[MOVE_AQUA_JET].makesContact);
PLAYER(species1) { Ability(ability1); Speed(2); }
OPPONENT(species2) { Ability(ability2); Speed(1); }
} WHEN {
TURN { MOVE(player, MOVE_AQUA_JET); MOVE(opponent, MOVE_AQUA_JET); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_AQUA_JET, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_AQUA_JET, opponent);
NONE_OF {
ABILITY_POPUP(player, ability1);
ABILITY_POPUP(player, ability2);
ABILITY_POPUP(opponent, ability1);
ABILITY_POPUP(opponent, ability2);
MESSAGE("Yamask acquired Mummy!");
MESSAGE("Yamask acquired Lingering Aroma!");
MESSAGE("Oinkologne acquired Mummy!");
MESSAGE("Oinkologne acquired Lingering Aroma!");
}
}
}

SINGLE_BATTLE_TEST("Mummy doesn't replace abilities that can't be suppressed")
{
u32 species, ability;

PARAMETRIZE { species = SPECIES_ARCEUS; ability = ABILITY_MULTITYPE; }
PARAMETRIZE { species = SPECIES_AEGISLASH; ability = ABILITY_STANCE_CHANGE; }
PARAMETRIZE { species = SPECIES_WISHIWASHI; ability = ABILITY_SCHOOLING; }
PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; }
PARAMETRIZE { species = SPECIES_MINIOR; ability = ABILITY_SHIELDS_DOWN; }
PARAMETRIZE { species = SPECIES_MIMIKYU; ability = ABILITY_DISGUISE; }
PARAMETRIZE { species = SPECIES_SILVALLY; ability = ABILITY_RKS_SYSTEM; }
PARAMETRIZE { species = SPECIES_GRENINJA_BATTLE_BOND; ability = ABILITY_BATTLE_BOND; }
PARAMETRIZE { species = SPECIES_ZYGARDE; ability = ABILITY_POWER_CONSTRUCT; }
PARAMETRIZE { species = SPECIES_EISCUE; ability = ABILITY_ICE_FACE; }
PARAMETRIZE { species = SPECIES_CRAMORANT; ability = ABILITY_GULP_MISSILE; }
PARAMETRIZE { species = SPECIES_PALAFIN_ZERO; ability = ABILITY_ZERO_TO_HERO; }
PARAMETRIZE { species = SPECIES_TATSUGIRI; ability = ABILITY_COMMANDER; }
PARAMETRIZE { species = SPECIES_CALYREX_SHADOW_RIDER; ability = ABILITY_AS_ONE_SHADOW_RIDER; }
PARAMETRIZE { species = SPECIES_CALYREX_ICE_RIDER; ability = ABILITY_AS_ONE_ICE_RIDER; }

GIVEN {
PLAYER(SPECIES_YAMASK);
OPPONENT(species) { Ability(ability); }
} WHEN {
TURN { MOVE(opponent, MOVE_AQUA_JET); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_AQUA_JET, opponent);
NONE_OF {
ABILITY_POPUP(opponent, ABILITY_MUMMY);
}
}
}

0 comments on commit 1241cbe

Please sign in to comment.