"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
  for (var name in all)
    __defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    for (let key of __getOwnPropNames(from))
      if (!__hasOwnProp.call(to, key) && key !== except)
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  }
  return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var moves_exports = {};
__export(moves_exports, {
  Moves: () => Moves
});
module.exports = __toCommonJS(moves_exports);
const Moves = {
  absorb: {
    inherit: true,
    flags: { protect: 1, mirror: 1, metronome: 1 }
  },
  acidarmor: {
    inherit: true,
    pp: 40
  },
  aircutter: {
    inherit: true,
    basePower: 55
  },
  airslash: {
    inherit: true,
    pp: 20
  },
  aromatherapy: {
    inherit: true,
    onHit(target, source) {
      this.add("-activate", source, "move: Aromatherapy");
      const allies = [...target.side.pokemon, ...target.side.allySide?.pokemon || []];
      for (const ally of allies) {
        ally.cureStatus();
      }
    }
  },
  assurance: {
    inherit: true,
    basePower: 50
  },
  aurasphere: {
    inherit: true,
    basePower: 90
  },
  autotomize: {
    inherit: true,
    volatileStatus: "autotomize",
    onHit(pokemon) {
    },
    condition: {
      noCopy: true,
      // doesn't get copied by Baton Pass
      onStart(pokemon) {
        if (pokemon.species.weighthg > 1) {
          this.effectState.multiplier = 1;
          this.add("-start", pokemon, "Autotomize");
        }
      },
      onRestart(pokemon) {
        if (pokemon.species.weighthg - this.effectState.multiplier * 1e3 > 1) {
          this.effectState.multiplier++;
          this.add("-start", pokemon, "Autotomize");
        }
      },
      onModifyWeightPriority: 2,
      onModifyWeight(weighthg, pokemon) {
        if (this.effectState.multiplier) {
          weighthg -= this.effectState.multiplier * 1e3;
          if (weighthg < 1)
            weighthg = 1;
          return weighthg;
        }
      }
    }
  },
  barrier: {
    inherit: true,
    pp: 30
  },
  bestow: {
    inherit: true,
    flags: { protect: 1, mirror: 1, noassist: 1, failcopycat: 1 }
  },
  blizzard: {
    inherit: true,
    basePower: 120
  },
  block: {
    inherit: true,
    flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1 }
  },
  bounce: {
    inherit: true,
    flags: { contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, metronome: 1, nosleeptalk: 1 }
  },
  bubble: {
    inherit: true,
    basePower: 20
  },
  bugbuzz: {
    inherit: true,
    flags: { protect: 1, mirror: 1, sound: 1, metronome: 1 }
  },
  camouflage: {
    inherit: true,
    onHit(target) {
      if (!target.setType("Ground"))
        return false;
      this.add("-start", target, "typechange", "Ground");
    }
  },
  charm: {
    inherit: true,
    type: "Normal"
  },
  chatter: {
    inherit: true,
    basePower: 60,
    onModifyMove(move, pokemon) {
      if (pokemon.species.name !== "Chatot")
        delete move.secondaries;
    },
    secondary: {
      chance: 10,
      volatileStatus: "confusion"
    },
    flags: {
      protect: 1,
      sound: 1,
      distance: 1,
      noassist: 1,
      failcopycat: 1,
      failmefirst: 1,
      nosleeptalk: 1,
      failmimic: 1,
      nosketch: 1
    }
  },
  conversion: {
    inherit: true,
    onHit(target) {
      const possibleTypes = target.moveSlots.map((moveSlot) => {
        const move = this.dex.moves.get(moveSlot.id);
        if (move.id !== "conversion" && !target.hasType(move.type)) {
          return move.type;
        }
        return "";
      }).filter((type2) => type2);
      if (!possibleTypes.length) {
        return false;
      }
      const type = this.sample(possibleTypes);
      if (!target.setType(type))
        return false;
      this.add("-start", target, "typechange", type);
    }
  },
  copycat: {
    inherit: true,
    onHit(pokemon) {
      if (!this.lastMove || this.dex.moves.get(this.lastMove.id).flags["failcopycat"]) {
        return false;
      }
      this.actions.useMove(this.lastMove.id, pokemon);
    }
  },
  cottonspore: {
    inherit: true,
    onTryHit() {
    },
    target: "normal"
  },
  covet: {
    inherit: true,
    pp: 40
  },
  crabhammer: {
    inherit: true,
    basePower: 90
  },
  defog: {
    inherit: true,
    onHit(pokemon) {
      if (!pokemon.volatiles["substitute"])
        this.boost({ evasion: -1 });
      const sideConditions = ["reflect", "lightscreen", "safeguard", "mist", "spikes", "toxicspikes", "stealthrock"];
      for (const condition of sideConditions) {
        if (pokemon.side.removeSideCondition(condition)) {
          this.add("-sideend", pokemon.side, this.dex.conditions.get(condition).name, "[from] move: Defog", `[of] ${pokemon}`);
        }
      }
    }
  },
  dig: {
    inherit: true,
    flags: { contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1, nosleeptalk: 1 }
  },
  dive: {
    inherit: true,
    flags: { contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1, nosleeptalk: 1 }
  },
  dracometeor: {
    inherit: true,
    basePower: 140
  },
  dragonpulse: {
    inherit: true,
    basePower: 90
  },
  drainpunch: {
    inherit: true,
    flags: { contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1 }
  },
  dreameater: {
    inherit: true,
    flags: { protect: 1, mirror: 1, metronome: 1 }
  },
  echoedvoice: {
    inherit: true,
    flags: { protect: 1, mirror: 1, sound: 1, metronome: 1 }
  },
  electroball: {
    inherit: true,
    basePowerCallback(pokemon, target) {
      const ratio = Math.floor(pokemon.getStat("spe") / Math.max(1, target.getStat("spe")));
      const bp = [40, 60, 80, 120, 150][Math.min(ratio, 4)];
      this.debug(`BP: ${bp}`);
      return bp;
    }
  },
  energyball: {
    inherit: true,
    basePower: 80
  },
  extrasensory: {
    inherit: true,
    pp: 30
  },
  feint: {
    inherit: true,
    flags: { noassist: 1, failcopycat: 1 }
  },
  finalgambit: {
    inherit: true,
    flags: { contact: 1, protect: 1, metronome: 1 }
  },
  fireblast: {
    inherit: true,
    basePower: 120
  },
  firepledge: {
    inherit: true,
    basePower: 50,
    basePowerCallback(target, source, move) {
      if (["grasspledge", "waterpledge"].includes(move.sourceEffect)) {
        this.add("-combine");
        return 150;
      }
      return 50;
    }
  },
  flamethrower: {
    inherit: true,
    basePower: 95
  },
  fly: {
    inherit: true,
    flags: { contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, metronome: 1 }
  },
  followme: {
    inherit: true,
    priority: 3
  },
  frostbreath: {
    inherit: true,
    basePower: 40
  },
  furycutter: {
    inherit: true,
    basePower: 20,
    condition: {
      duration: 2,
      onStart() {
        this.effectState.multiplier = 1;
      },
      onRestart() {
        if (this.effectState.multiplier < 8) {
          this.effectState.multiplier <<= 1;
        }
        this.effectState.duration = 2;
      }
    }
  },
  futuresight: {
    inherit: true,
    basePower: 100,
    onTry(source, target) {
      if (!target.side.addSlotCondition(target, "futuremove"))
        return false;
      Object.assign(target.side.slotConditions[target.position]["futuremove"], {
        duration: 3,
        move: "futuresight",
        source,
        moveData: {
          id: "futuresight",
          name: "Future Sight",
          accuracy: 100,
          basePower: 100,
          category: "Special",
          priority: 0,
          flags: { metronome: 1, futuremove: 1 },
          ignoreImmunity: false,
          effectType: "Move",
          type: "Psychic"
        }
      });
      this.add("-start", source, "move: Future Sight");
      return null;
    }
  },
  gigadrain: {
    inherit: true,
    flags: { protect: 1, mirror: 1, metronome: 1 }
  },
  glare: {
    inherit: true,
    accuracy: 90
  },
  grasswhistle: {
    inherit: true,
    flags: { protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1 }
  },
  grasspledge: {
    inherit: true,
    basePower: 50,
    basePowerCallback(target, source, move) {
      if (["waterpledge", "firepledge"].includes(move.sourceEffect)) {
        this.add("-combine");
        return 150;
      }
      return 50;
    }
  },
  growl: {
    inherit: true,
    flags: { protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1 }
  },
  growth: {
    inherit: true,
    pp: 40
  },
  gunkshot: {
    inherit: true,
    accuracy: 70
  },
  gyroball: {
    inherit: true,
    basePowerCallback(pokemon, target) {
      let power = Math.floor(25 * target.getStat("spe") / Math.max(1, pokemon.getStat("spe"))) + 1;
      if (power > 150)
        power = 150;
      this.debug(`BP: ${power}`);
      return power;
    }
  },
  healbell: {
    inherit: true,
    flags: { snatch: 1, sound: 1, metronome: 1 },
    onHit(target, source) {
      this.add("-activate", source, "move: Heal Bell");
      const allies = [...target.side.pokemon, ...target.side.allySide?.pokemon || []];
      for (const ally of allies) {
        ally.cureStatus();
      }
    }
  },
  healpulse: {
    inherit: true,
    heal: [1, 2],
    onHit() {
    }
  },
  heatwave: {
    inherit: true,
    basePower: 100
  },
  hex: {
    inherit: true,
    basePower: 50
  },
  hiddenpower: {
    inherit: true,
    basePower: 0,
    basePowerCallback(pokemon) {
      const bp = pokemon.hpPower || 70;
      this.debug(`BP: ${bp}`);
      return bp;
    }
  },
  hiddenpowerbug: {
    inherit: true,
    basePower: 70
  },
  hiddenpowerdark: {
    inherit: true,
    basePower: 70
  },
  hiddenpowerdragon: {
    inherit: true,
    basePower: 70
  },
  hiddenpowerelectric: {
    inherit: true,
    basePower: 70
  },
  hiddenpowerfighting: {
    inherit: true,
    basePower: 70
  },
  hiddenpowerfire: {
    inherit: true,
    basePower: 70
  },
  hiddenpowerflying: {
    inherit: true,
    basePower: 70
  },
  hiddenpowerghost: {
    inherit: true,
    basePower: 70
  },
  hiddenpowergrass: {
    inherit: true,
    basePower: 70
  },
  hiddenpowerground: {
    inherit: true,
    basePower: 70
  },
  hiddenpowerice: {
    inherit: true,
    basePower: 70
  },
  hiddenpowerpoison: {
    inherit: true,
    basePower: 70
  },
  hiddenpowerpsychic: {
    inherit: true,
    basePower: 70
  },
  hiddenpowerrock: {
    inherit: true,
    basePower: 70
  },
  hiddenpowersteel: {
    inherit: true,
    basePower: 70
  },
  hiddenpowerwater: {
    inherit: true,
    basePower: 70
  },
  hornleech: {
    inherit: true,
    flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }
  },
  hurricane: {
    inherit: true,
    basePower: 120
  },
  hydropump: {
    inherit: true,
    basePower: 120
  },
  hypervoice: {
    inherit: true,
    flags: { protect: 1, mirror: 1, sound: 1, metronome: 1 }
  },
  icebeam: {
    inherit: true,
    basePower: 95
  },
  incinerate: {
    inherit: true,
    basePower: 30,
    onHit(pokemon, source) {
      const item = pokemon.getItem();
      if (item.isBerry && pokemon.takeItem(source)) {
        this.add("-enditem", pokemon, item.name, "[from] move: Incinerate");
      }
    }
  },
  knockoff: {
    inherit: true,
    basePower: 20,
    onBasePower() {
    }
  },
  leafstorm: {
    inherit: true,
    basePower: 140
  },
  leechlife: {
    inherit: true,
    flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }
  },
  lick: {
    inherit: true,
    basePower: 20
  },
  lightscreen: {
    inherit: true,
    condition: {
      duration: 5,
      durationCallback(target, source, effect) {
        if (source?.hasItem("lightclay")) {
          return 8;
        }
        return 5;
      },
      onAnyModifyDamage(damage, source, target, move) {
        if (target !== source && this.effectState.target.hasAlly(target) && this.getCategory(move) === "Special") {
          if (!target.getMoveHitData(move).crit && !move.infiltrates) {
            this.debug("Light Screen weaken");
            if (this.activePerHalf > 1)
              return this.chainModify([2703, 4096]);
            return this.chainModify(0.5);
          }
        }
      },
      onSideStart(side) {
        this.add("-sidestart", side, "move: Light Screen");
      },
      onSideResidualOrder: 26,
      onSideResidualSubOrder: 2,
      onSideEnd(side) {
        this.add("-sideend", side, "move: Light Screen");
      }
    }
  },
  lowsweep: {
    inherit: true,
    basePower: 60
  },
  magiccoat: {
    inherit: true,
    condition: {
      duration: 1,
      onStart(target, source, effect) {
        this.add("-singleturn", target, "move: Magic Coat");
        if (effect?.effectType === "Move") {
          this.effectState.pranksterBoosted = effect.pranksterBoosted;
        }
      },
      onTryHitPriority: 2,
      onTryHit(target, source, move) {
        if (target === source || move.hasBounced || !move.flags["reflectable"] || target.isSemiInvulnerable()) {
          return;
        }
        const newMove = this.dex.getActiveMove(move.id);
        newMove.hasBounced = true;
        newMove.pranksterBoosted = this.effectState.pranksterBoosted;
        this.actions.useMove(newMove, target, { target: source });
        return null;
      },
      onAllyTryHitSide(target, source, move) {
        if (target.isAlly(source) || move.hasBounced || !move.flags["reflectable"]) {
          return;
        }
        const newMove = this.dex.getActiveMove(move.id);
        newMove.hasBounced = true;
        newMove.pranksterBoosted = false;
        this.actions.useMove(newMove, this.effectState.target, { target: source });
        return null;
      }
    }
  },
  magicroom: {
    inherit: true,
    priority: -7
  },
  magmastorm: {
    inherit: true,
    basePower: 120
  },
  meanlook: {
    inherit: true,
    flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1 }
  },
  megadrain: {
    inherit: true,
    flags: { protect: 1, mirror: 1, metronome: 1 }
  },
  metalsound: {
    inherit: true,
    flags: { protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1 }
  },
  meteormash: {
    inherit: true,
    accuracy: 85,
    basePower: 100
  },
  minimize: {
    inherit: true,
    pp: 20,
    condition: {
      noCopy: true,
      onSourceModifyDamage(damage, source, target, move) {
        if (["stomp", "steamroller"].includes(move.id)) {
          return this.chainModify(2);
        }
      }
    }
  },
  moonlight: {
    inherit: true,
    type: "Normal"
  },
  mudsport: {
    inherit: true,
    pseudoWeather: void 0,
    volatileStatus: "mudsport",
    condition: {
      noCopy: true,
      onStart(pokemon) {
        this.add("-start", pokemon, "Mud Sport");
      },
      onAnyBasePowerPriority: 1,
      onAnyBasePower(basePower, user, target, move) {
        if (move.type === "Electric") {
          this.debug("mud sport weaken");
          return this.chainModify([1352, 4096]);
        }
      }
    }
  },
  muddywater: {
    inherit: true,
    basePower: 95
  },
  naturepower: {
    inherit: true,
    onTryHit() {
    },
    onHit(pokemon) {
      this.actions.useMove("earthquake", pokemon);
    },
    target: "self"
  },
  overheat: {
    inherit: true,
    basePower: 140
  },
  perishsong: {
    inherit: true,
    flags: { sound: 1, distance: 1, metronome: 1 }
  },
  pinmissile: {
    inherit: true,
    accuracy: 85,
    basePower: 14
  },
  poisonfang: {
    inherit: true,
    secondary: {
      chance: 30,
      status: "tox"
    }
  },
  poisongas: {
    inherit: true,
    accuracy: 80
  },
  poisonpowder: {
    inherit: true,
    onTryHit() {
    }
  },
  powergem: {
    inherit: true,
    basePower: 70
  },
  psychup: {
    inherit: true,
    onHit(target, source) {
      let i;
      for (i in target.boosts) {
        source.boosts[i] = target.boosts[i];
      }
      this.add("-copyboost", source, target, "[from] move: Psych Up");
    }
  },
  psychoshift: {
    inherit: true,
    accuracy: 90
  },
  psywave: {
    inherit: true,
    accuracy: 80
  },
  quickguard: {
    inherit: true,
    stallingMove: true,
    onTry(source) {
      return this.queue.willAct() && this.runEvent("StallMove", source);
    },
    onHitSide(side, source) {
      source.addVolatile("stall");
    },
    condition: {
      duration: 1,
      onSideStart(target, source) {
        this.add("-singleturn", source, "Quick Guard");
      },
      onTryHitPriority: 4,
      onTryHit(target, source, effect) {
        if (effect && (effect.id === "feint" || this.dex.moves.get(effect.id).priority <= 0)) {
          return;
        }
        this.add("-activate", target, "Quick Guard");
        const lockedmove = source.getVolatile("lockedmove");
        if (lockedmove) {
          if (source.volatiles["lockedmove"].duration === 2) {
            delete source.volatiles["lockedmove"];
          }
        }
        return null;
      }
    }
  },
  ragepowder: {
    inherit: true,
    priority: 3,
    flags: { noassist: 1, failcopycat: 1 }
  },
  reflect: {
    inherit: true,
    condition: {
      duration: 5,
      durationCallback(target, source, effect) {
        if (source?.hasItem("lightclay")) {
          return 8;
        }
        return 5;
      },
      onAnyModifyDamage(damage, source, target, move) {
        if (target !== source && this.effectState.target.hasAlly(target) && this.getCategory(move) === "Physical") {
          if (!target.getMoveHitData(move).crit && !move.infiltrates) {
            this.debug("Reflect weaken");
            if (this.activePerHalf > 1)
              return this.chainModify([2703, 4096]);
            return this.chainModify(0.5);
          }
        }
      },
      onSideStart(side) {
        this.add("-sidestart", side, "Reflect");
      },
      onSideResidualOrder: 26,
      onSideResidualSubOrder: 1,
      onSideEnd(side) {
        this.add("-sideend", side, "Reflect");
      }
    }
  },
  relicsong: {
    inherit: true,
    flags: { protect: 1, mirror: 1, sound: 1 }
  },
  roar: {
    inherit: true,
    accuracy: 100,
    flags: { protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1 }
  },
  rocktomb: {
    inherit: true,
    accuracy: 80,
    basePower: 50,
    pp: 10
  },
  round: {
    inherit: true,
    flags: { protect: 1, mirror: 1, sound: 1, metronome: 1 }
  },
  sacredsword: {
    inherit: true,
    pp: 20
  },
  scald: {
    inherit: true,
    thawsTarget: false
  },
  screech: {
    inherit: true,
    flags: { protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1 }
  },
  secretpower: {
    inherit: true,
    secondary: {
      chance: 30,
      boosts: {
        accuracy: -1
      }
    }
  },
  shadowforce: {
    inherit: true,
    flags: { contact: 1, charge: 1, mirror: 1, metronome: 1, nosleeptalk: 1 }
  },
  sing: {
    inherit: true,
    flags: { protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1 }
  },
  skillswap: {
    inherit: true,
    onHit(target, source) {
      const targetAbility = target.ability;
      const sourceAbility = source.ability;
      if (targetAbility === sourceAbility) {
        return false;
      }
      this.add("-activate", source, "move: Skill Swap", this.dex.abilities.get(targetAbility), this.dex.abilities.get(sourceAbility), `[of] ${target}`);
      source.setAbility(targetAbility);
      target.setAbility(sourceAbility);
    }
  },
  skullbash: {
    inherit: true,
    basePower: 100,
    pp: 15
  },
  skydrop: {
    inherit: true,
    flags: { contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, metronome: 1, nosleeptalk: 1 },
    onTryHit(target, source, move) {
      if (target.fainted)
        return false;
      if (source.removeVolatile(move.id)) {
        if (target !== source.volatiles["twoturnmove"].source)
          return false;
        if (target.hasType("Flying")) {
          this.add("-immune", target);
          this.add("-end", target, "Sky Drop");
          return null;
        }
      } else {
        if (target.volatiles["substitute"] || target.isAlly(source)) {
          return false;
        }
        this.add("-prepare", source, move.name, target);
        source.addVolatile("twoturnmove", target);
        return null;
      }
    }
  },
  sleeppowder: {
    inherit: true,
    onTryHit() {
    }
  },
  smellingsalts: {
    inherit: true,
    basePower: 60
  },
  smog: {
    inherit: true,
    basePower: 20
  },
  snarl: {
    inherit: true,
    flags: { protect: 1, mirror: 1, sound: 1 }
  },
  snore: {
    inherit: true,
    basePower: 40,
    flags: { protect: 1, mirror: 1, sound: 1 }
  },
  soak: {
    inherit: true,
    onHit(target) {
      if (!target.setType("Water")) {
        this.add("-fail", target);
        return null;
      }
      this.add("-start", target, "typechange", "Water");
    }
  },
  spore: {
    inherit: true,
    onTryHit() {
    }
  },
  stormthrow: {
    inherit: true,
    basePower: 40
  },
  stringshot: {
    inherit: true,
    boosts: {
      spe: -1
    }
  },
  strugglebug: {
    inherit: true,
    basePower: 30
  },
  stunspore: {
    inherit: true,
    onTryHit() {
    }
  },
  substitute: {
    inherit: true,
    condition: {
      onStart(target) {
        this.add("-start", target, "Substitute");
        this.effectState.hp = Math.floor(target.maxhp / 4);
        delete target.volatiles["partiallytrapped"];
      },
      onTryPrimaryHitPriority: -1,
      onTryPrimaryHit(target, source, move) {
        if (target === source || move.flags["bypasssub"]) {
          return;
        }
        let damage = this.actions.getDamage(source, target, move);
        if (!damage && damage !== 0) {
          this.add("-fail", source);
          this.attrLastMove("[still]");
          return null;
        }
        damage = this.runEvent("SubDamage", target, source, move, damage);
        if (!damage) {
          return damage;
        }
        if (damage > target.volatiles["substitute"].hp) {
          damage = target.volatiles["substitute"].hp;
        }
        target.volatiles["substitute"].hp -= damage;
        source.lastDamage = damage;
        if (target.volatiles["substitute"].hp <= 0) {
          if (move.ohko)
            this.add("-ohko");
          target.removeVolatile("substitute");
        } else {
          this.add("-activate", target, "Substitute", "[damage]");
        }
        if (move.recoil && damage) {
          this.damage(this.actions.calcRecoilDamage(damage, move, source), source, target, "recoil");
        }
        if (move.drain) {
          this.heal(Math.ceil(damage * move.drain[0] / move.drain[1]), source, target, "drain");
        }
        this.singleEvent("AfterSubDamage", move, null, target, source, move, damage);
        this.runEvent("AfterSubDamage", target, source, move, damage);
        return this.HIT_SUBSTITUTE;
      },
      onEnd(target) {
        this.add("-end", target, "Substitute");
      }
    }
  },
  submission: {
    inherit: true,
    pp: 25
  },
  supersonic: {
    inherit: true,
    flags: { protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1 }
  },
  surf: {
    inherit: true,
    basePower: 95
  },
  sweetkiss: {
    inherit: true,
    type: "Normal"
  },
  sweetscent: {
    inherit: true,
    boosts: {
      evasion: -1
    }
  },
  swordsdance: {
    inherit: true,
    pp: 30
  },
  synchronoise: {
    inherit: true,
    basePower: 70,
    pp: 15
  },
  tailwind: {
    inherit: true,
    pp: 30
  },
  technoblast: {
    inherit: true,
    basePower: 85
  },
  thief: {
    inherit: true,
    basePower: 40,
    pp: 10
  },
  thunder: {
    inherit: true,
    basePower: 120
  },
  thunderbolt: {
    inherit: true,
    basePower: 95
  },
  toxic: {
    inherit: true,
    onPrepareHit() {
    }
  },
  uproar: {
    inherit: true,
    flags: { protect: 1, mirror: 1, sound: 1, metronome: 1, nosleeptalk: 1 }
  },
  vinewhip: {
    inherit: true,
    basePower: 35,
    pp: 15
  },
  wakeupslap: {
    inherit: true,
    basePower: 60
  },
  waterpledge: {
    inherit: true,
    basePower: 50,
    basePowerCallback(target, source, move) {
      if (["firepledge", "grasspledge"].includes(move.sourceEffect)) {
        this.add("-combine");
        return 150;
      }
      return 50;
    }
  },
  watersport: {
    inherit: true,
    pseudoWeather: void 0,
    volatileStatus: "watersport",
    condition: {
      noCopy: true,
      onStart(pokemon) {
        this.add("-start", pokemon, "move: Water Sport");
      },
      onAnyBasePowerPriority: 1,
      onAnyBasePower(basePower, user, target, move) {
        if (move.type === "Fire") {
          this.debug("water sport weaken");
          return this.chainModify([1352, 4096]);
        }
      }
    }
  },
  whirlwind: {
    inherit: true,
    accuracy: 100,
    flags: { protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1 }
  },
  wideguard: {
    inherit: true,
    stallingMove: true,
    onTry(source) {
      return this.queue.willAct() && this.runEvent("StallMove", source);
    },
    onHitSide(side, source) {
      source.addVolatile("stall");
    }
  },
  willowisp: {
    inherit: true,
    accuracy: 75
  },
  wonderroom: {
    inherit: true,
    priority: -7
  }
};
//# sourceMappingURL=moves.js.map