Add Wonder Guard ability and remove test code

pull/1/head
Flashfyre 2023-04-27 14:56:30 -04:00
parent 005cc9b7d5
commit 2062d44026
3 changed files with 29 additions and 10 deletions

View File

@ -1,5 +1,5 @@
import Pokemon, { PokemonMove } from "../pokemon"; import Pokemon, { PokemonMove } from "../pokemon";
import { Type } from "./type"; import { Type, getTypeDamageMultiplier } from "./type";
import * as Utils from "../utils"; import * as Utils from "../utils";
import { BattleStat, getBattleStatName } from "./battle-stat"; import { BattleStat, getBattleStatName } from "./battle-stat";
import { PokemonHealPhase, ShowAbilityPhase, StatChangePhase } from "../battle-phases"; import { PokemonHealPhase, ShowAbilityPhase, StatChangePhase } from "../battle-phases";
@ -51,7 +51,7 @@ export abstract class AbAttr {
return false; return false;
} }
getTriggerMessage(pokemon: Pokemon, ...args: any[]) { getTriggerMessage(pokemon: Pokemon, ...args: any[]): string {
return null; return null;
} }
@ -149,6 +149,26 @@ class TypeImmunityAddBattlerTagAbAttr extends TypeImmunityAbAttr {
} }
} }
export class NonSuperEffectiveImmunityAbAttr extends TypeImmunityAbAttr {
constructor(condition?: AbAttrCondition) {
super(null, condition);
}
applyPreDefend(pokemon: Pokemon, attacker: Pokemon, move: PokemonMove, cancelled: Utils.BooleanHolder, args: any[]): boolean {
if (pokemon.getAttackMoveEffectiveness(move.getMove().type) < 2) {
cancelled.value = true;
(args[0] as Utils.NumberHolder).value = 0;
return true;
}
return false;
}
getTriggerMessage(pokemon: Pokemon, ...args: any[]): string {
return getPokemonMessage(pokemon, ` avoided damage\nwith ${pokemon.getAbility().name}!`);
}
}
export class PreAttackAbAttr extends AbAttr { export class PreAttackAbAttr extends AbAttr {
applyPreAttack(pokemon: Pokemon, defender: Pokemon, move: PokemonMove, args: any[]): boolean { applyPreAttack(pokemon: Pokemon, defender: Pokemon, move: PokemonMove, args: any[]): boolean {
return false; return false;
@ -222,7 +242,7 @@ export class ProtectStatAttr extends PreStatChangeAbAttr {
return false; return false;
} }
getTriggerMessage(pokemon: Pokemon, ...args: any[]) { getTriggerMessage(pokemon: Pokemon, ...args: any[]): string {
return getPokemonMessage(pokemon, `'s ${pokemon.getAbility().name}\nprevents lowering its ${this.protectedStat !== undefined ? getBattleStatName(this.protectedStat) : 'stats'}!`); return getPokemonMessage(pokemon, `'s ${pokemon.getAbility().name}\nprevents lowering its ${this.protectedStat !== undefined ? getBattleStatName(this.protectedStat) : 'stats'}!`);
} }
} }
@ -704,7 +724,8 @@ export function initAbilities() {
new Ability(Abilities.WATER_VEIL, "Water Veil (N)", "Prevents the POKéMON from getting a burn.", 3), new Ability(Abilities.WATER_VEIL, "Water Veil (N)", "Prevents the POKéMON from getting a burn.", 3),
new Ability(Abilities.WHITE_SMOKE, "White Smoke", "Prevents other POKéMON from lowering its stats.", 3) new Ability(Abilities.WHITE_SMOKE, "White Smoke", "Prevents other POKéMON from lowering its stats.", 3)
.attr(ProtectStatAttr), .attr(ProtectStatAttr),
new Ability(Abilities.WONDER_GUARD, "Wonder Guard (N)", "Only supereffective moves will hit.", 3), new Ability(Abilities.WONDER_GUARD, "Wonder Guard", "Only super effective moves will hit.", 3)
.attr(NonSuperEffectiveImmunityAbAttr),
new Ability(Abilities.ADAPTABILITY, "Adaptability (N)", "Powers up moves of the same type.", 4), new Ability(Abilities.ADAPTABILITY, "Adaptability (N)", "Powers up moves of the same type.", 4),
new Ability(Abilities.AFTERMATH, "Aftermath (N)", "Damages the attacker landing the finishing hit.", 4), new Ability(Abilities.AFTERMATH, "Aftermath (N)", "Damages the attacker landing the finishing hit.", 4),
new Ability(Abilities.ANGER_POINT, "Anger Point (N)", "Maxes ATTACK after taking a critical hit.", 4), new Ability(Abilities.ANGER_POINT, "Anger Point (N)", "Maxes ATTACK after taking a critical hit.", 4),

View File

@ -812,7 +812,6 @@ export class RecoilAttr extends MoveEffectAttr {
const cancelled = new Utils.BooleanHolder(false); const cancelled = new Utils.BooleanHolder(false);
applyAbAttrs(BlockRecoilDamageAttr, user, cancelled); applyAbAttrs(BlockRecoilDamageAttr, user, cancelled);
console.log('test?');
if (cancelled.value) if (cancelled.value)
return false; return false;

View File

@ -427,9 +427,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
console.log(allMoves[movePool[moveIndex]]); console.log(allMoves[movePool[moveIndex]]);
movePool.splice(moveIndex, 1); movePool.splice(moveIndex, 1);
} }
if (this.isPlayer())
this.moveset[1].moveId = Moves.TAKE_DOWN;
} }
trySelectMove(moveIndex: integer): boolean { trySelectMove(moveIndex: integer): boolean {
@ -499,8 +496,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
: 1); : 1);
if (typeless) if (typeless)
typeMultiplier.value = 1; typeMultiplier.value = 1;
applyPreAttackAbAttrs(VariableMovePowerAbAttr, source, this, battlerMove, power) applyPreAttackAbAttrs(VariableMovePowerAbAttr, source, this, battlerMove, power);
applyPreDefendAbAttrs(TypeImmunityAbAttr, this, source, battlerMove, cancelled, typeMultiplier);
if (!typeless)
applyPreDefendAbAttrs(TypeImmunityAbAttr, this, source, battlerMove, cancelled, typeMultiplier);
if (cancelled.value) if (cancelled.value)
result = MoveResult.NO_EFFECT; result = MoveResult.NO_EFFECT;