File size: 3,263 Bytes
5c2ed06
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
"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 abilities_exports = {};
__export(abilities_exports, {
  Abilities: () => Abilities
});
module.exports = __toCommonJS(abilities_exports);
const Abilities = {
  anticipation: {
    inherit: true,
    onStart(pokemon) {
      for (const target of pokemon.foes()) {
        for (const moveSlot of target.moveSlots) {
          const move = this.dex.moves.get(moveSlot.move);
          if (move.category !== "Status" && (this.dex.getImmunity(move.type, pokemon) && this.dex.getEffectiveness(move.type, pokemon) > 0 || move.ohko)) {
            this.add("-ability", pokemon, "Anticipation");
            return;
          }
        }
      }
    }
  },
  frisk: {
    inherit: true,
    onStart(pokemon) {
      const target = pokemon.side.randomFoe();
      if (target?.item) {
        this.add("-item", "", target.getItem().name, "[from] ability: Frisk", `[of] ${pokemon}`);
      }
    }
  },
  infiltrator: {
    inherit: true,
    rating: 1.5
  },
  keeneye: {
    inherit: true,
    onModifyMove() {
    }
  },
  magicbounce: {
    inherit: true,
    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;
    }
  },
  oblivious: {
    inherit: true,
    onUpdate(pokemon) {
      if (pokemon.volatiles["attract"]) {
        pokemon.removeVolatile("attract");
        this.add("-end", pokemon, "move: Attract", "[from] ability: Oblivious");
      }
    },
    onTryHit(pokemon, target, move) {
      if (move.id === "captivate") {
        this.add("-immune", pokemon, "[from] Oblivious");
        return null;
      }
    },
    rating: 0.5
  },
  overcoat: {
    inherit: true,
    onTryHit() {
    },
    flags: {},
    rating: 0.5
  },
  sapsipper: {
    inherit: true,
    onAllyTryHitSide() {
    }
  },
  serenegrace: {
    inherit: true,
    onModifyMove(move) {
      if (move.secondaries && move.id !== "secretpower") {
        this.debug("doubling secondary chance");
        for (const secondary of move.secondaries) {
          if (secondary.chance)
            secondary.chance *= 2;
        }
      }
    }
  },
  soundproof: {
    inherit: true,
    onAllyTryHitSide() {
    }
  }
};
//# sourceMappingURL=abilities.js.map