diff --git a/src/data/move.ts b/src/data/move.ts index b76d08218c9..ba7c4d0a5d5 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -10398,7 +10398,7 @@ export function initMoves() { new AttackMove(Moves.SHELL_SIDE_ARM, Type.POISON, MoveCategory.SPECIAL, 90, 100, 10, 20, 0, 8) .attr(ShellSideArmCategoryAttr) .attr(StatusEffectAttr, StatusEffect.POISON) - .partial(), // Physical version of the move does not make contact + .makesContact(false), new AttackMove(Moves.MISTY_EXPLOSION, Type.FAIRY, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 8) .attr(SacrificialAttr) .target(MoveTarget.ALL_NEAR_OTHERS) diff --git a/src/test/moves/shell_side_arm.test.ts b/src/test/moves/shell_side_arm.test.ts index e6be0f9f2ad..566b5c1d42b 100644 --- a/src/test/moves/shell_side_arm.test.ts +++ b/src/test/moves/shell_side_arm.test.ts @@ -26,7 +26,7 @@ describe("Moves - Shell Side Arm", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.SHELL_SIDE_ARM, Moves.SPLASH ]) + .moveset([ Moves.SHELL_SIDE_ARM ]) .battleType("single") .startingLevel(100) .enemyLevel(100) @@ -93,4 +93,21 @@ describe("Moves - Shell Side Arm", () => { expect(shellSideArmAttr.apply).toHaveLastReturnedWith(false); }); + + /** The move should stay special (which it does) and make no contact but the MAKES_CONTACT flag is set */ + it.skip("should not make contact if the move stays special", async () => { + game.override.enemySpecies(Species.SLOWBRO).enemyAbility(Abilities.ROUGH_SKIN); + + await game.classicMode.startBattle([ Species.XURKITREE ]); + + const player = game.scene.getPlayerPokemon()!; + + vi.spyOn(shellSideArmAttr, "apply"); + + game.move.select(Moves.SHELL_SIDE_ARM); + await game.toNextTurn(); + + expect(shellSideArmAttr.apply).toHaveLastReturnedWith(false); + expect(player.getMaxHp()).toBe(player.hp); + }); });