SHARE
TWEET

Abilities for Gen SD

Brodaha Sep 25th, 2018 (edited) 106 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. "quickflash": {
  2.         shortDesc: "If this Pokemon is at more than 50% HP, its Light-type moves have their priority increased by 1.",
  3.         onModifyPriority: function (priority, pokemon, target, move) {
  4.             if (move && move.type === 'Light' && (pokemon.hp => pokemon.maxhp / 2) return priority + 1;
  5.         },
  6.         id: "quickflash",
  7.         name: "Quick Flash",
  8.         rating: 3,
  9.         num: 177,
  10.     },
  11.  
  12. "lightabsorb": {
  13.         desc: "This Pokemon is immune to Light-type moves and restores 1/4 of its maximum HP, rounded down, when hit by a Light-type move.",
  14.         shortDesc: "This Pokemon heals 1/4 of its max HP when hit by Light moves; Light immunity.",
  15.         onTryHit: function (target, source, move) {
  16.             if (target !== source && move.type === 'Light') {
  17.                 if (!this.heal(target.maxhp / 4)) {
  18.                     this.add('-immune', target, '[msg]', '[from] ability: Light Absorb');
  19.                 }
  20.                 return null;
  21.             }
  22.         },
  23.         id: "lightabsorb",
  24.         name: "Light Absorb",
  25.         rating: 3.5,
  26.         num: 11,
  27.     },
  28.  
  29. "cacophony": {
  30.         desc: "This Pokemon's sound-based attacks have their power multiplied by 1.33.",
  31.         shortDesc: "This Pokemon's sound-based attacks have 1.33x power.",
  32.         onBasePowerPriority: 8,
  33.         onBasePower: function (basePower, attacker, defender, move) {
  34.             if (move.flags['sound']) {
  35.                 this.debug('Cacophony boost');
  36.                 return this.chainModify([0x1547, 0x1000]);
  37.             }
  38.         },
  39.         id: "cacophony",
  40.         name: "Cacophony",
  41.         rating: 3,
  42.         num: 89,
  43.     },
  44.  
  45. "relaxed": {
  46.         shortDesc: "This Pokemon's Sp. Defense is raised 2 stages after it is damaged by a Sound-type move.",
  47.         onAfterDamage: function (damage, target, source, effect) {
  48.             if (effect && effect.type === 'Sound') {
  49.                 this.boost({spd: 2});
  50.             }
  51.         },
  52.         id: "relaxed",
  53.         name: "Relaxed",
  54.         rating: 2,
  55.         num: 195,
  56.     },
  57.  
  58. "harmonize": {
  59.         desc: "This Pokemon's Normal-type moves become Sound-type moves and have their power multiplied by 1.2. This effect comes after other effects that change a move's type, but before Ion Deluge and Electrify's effects.",
  60.         shortDesc: "This Pokemon's Normal-type moves become Sound type and have 1.2x power.",
  61.         onModifyMovePriority: -1,
  62.         onModifyMove: function (move, pokemon) {
  63.             if (move.type === 'Normal' && !['judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'weatherball'].includes(move.id) && !(move.isZ && move.category !== 'Status')) {
  64.                 move.type = 'Sound';
  65.                 move.harmonizeBoosted = true;
  66.             }
  67.         },
  68.         onBasePowerPriority: 8,
  69.         onBasePower: function (basePower, pokemon, target, move) {
  70.             if (move.harmonizeBoosted) return this.chainModify([0x1333, 0x1000]);
  71.         },
  72.         id: "harmonize",
  73.         name: "Harmonize",
  74.         rating: 4,
  75.         num: 185,
  76.     },
  77.  
  78. "gormandize": {
  79.         desc: "This Pokemon's Normal-type moves become Food-type moves and have their power multiplied by 1.2. This effect comes after other effects that change a move's type, but before Ion Deluge and Electrify's effects.",
  80.         shortDesc: "This Pokemon's Normal-type moves become Food type and have 1.2x power.",
  81.         onModifyMovePriority: -1,
  82.         onModifyMove: function (move, pokemon) {
  83.             if (move.type === 'Normal' && !['judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'weatherball'].includes(move.id) && !(move.isZ && move.category !== 'Status')) {
  84.                 move.type = 'Food';
  85.                 move.gormandizeBoosted = true;
  86.             }
  87.         },
  88.         onBasePowerPriority: 8,
  89.         onBasePower: function (basePower, pokemon, target, move) {
  90.             if (move.gormandizeBoosted) return this.chainModify([0x1333, 0x1000]);
  91.         },
  92.         id: "gormandize",
  93.         name: "Gormandize",
  94.         rating: 4,
  95.         num: 185,
  96.     },
  97.  
  98. "greedyeater": {
  99.         desc: "This Pokemon is immune to Food-type moves and restores 1/4 of its maximum HP, rounded down, when hit by a Food-type move.",
  100.         shortDesc: "This Pokemon heals 1/4 of its max HP when hit by Food moves; Food immunity.",
  101.         onTryHit: function (target, source, move) {
  102.             if (target !== source && move.type === 'Food') {
  103.                 if (!this.heal(target.maxhp / 4)) {
  104.                     this.add('-immune', target, '[msg]', '[from] ability: Greedy Eater');
  105.                 }
  106.                 return null;
  107.             }
  108.         },
  109.         id: "greedyeater",
  110.         name: "Greedy Eater",
  111.         rating: 3.5,
  112.         num: 11,
  113.     },
  114.  
  115. "violate": {
  116.         desc: "This Pokemon's Normal-type moves become Blood-type moves and have their power multiplied by 1.2. This effect comes after other effects that change a move's type, but before Ion Deluge and Electrify's effects.",
  117.         shortDesc: "This Pokemon's Normal-type moves become Blood type and have 1.2x power.",
  118.         onModifyMovePriority: -1,
  119.         onModifyMove: function (move, pokemon) {
  120.             if (move.type === 'Normal' && !['judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'weatherball'].includes(move.id) && !(move.isZ && move.category !== 'Status')) {
  121.                 move.type = 'Blood';
  122.                 move.violateBoosted = true;
  123.             }
  124.         },
  125.         onBasePowerPriority: 8,
  126.         onBasePower: function (basePower, pokemon, target, move) {
  127.             if (move.violateBoosted) return this.chainModify([0x1333, 0x1000]);
  128.         },
  129.         id: "violate",
  130.         name: "Violate",
  131.         rating: 4,
  132.         num: 185,
  133.     },
  134.  
  135. "peaceful": {
  136.         desc: "This Pokemon is immune to Blood-type moves and raises its Accuracy by 2 stages when hit by a Blood-type move.",
  137.         shortDesc: "This Pokemon's Accuracy is raised 2 stages if hit by a Blood move; Blood immunity.",
  138.         onTryHitPriority: 1,
  139.         onTryHit: function (target, source, move) {
  140.             if (target !== source && move.type === 'Blood') {
  141.                 if (!this.boost({accuracy: 2})) {
  142.                     this.add('-immune', target, '[msg]', '[from] ability: Peaceful');
  143.                 }
  144.                 return null;
  145.             }
  146.         },
  147.         onAllyTryHitSide: function (target, source, move) {
  148.             if (target === this.effectData.target || target.side !== source.side) return;
  149.             if (move.type === 'Blood') {
  150.                 this.boost({atk: 1}, this.effectData.target);
  151.             }
  152.         },
  153.         id: "peaceful",
  154.         name: "Peaceful",
  155.         rating: 3.5,
  156.         num: 157,
  157.     },
  158.  
  159.     "herbivore": {
  160.         desc: "If a Pokemon uses a Grass- or Food-type attack against this Pokemon, that Pokemon's attacking stat is halved when calculating the damage to this Pokemon.",
  161.         shortDesc: "Grass/Food-type moves against this Pokemon deal damage with a halved attacking stat.",
  162.         onModifyAtkPriority: 6,
  163.         onSourceModifyAtk: function (atk, attacker, defender, move) {
  164.             if (move.type === 'Grass' || move.type === 'Food') {
  165.                 this.debug('Herbivore weaken');
  166.                 return this.chainModify(0.5);
  167.             }
  168.         },
  169.         onModifySpAPriority: 5,
  170.         onSourceModifySpA: function (atk, attacker, defender, move) {
  171.             if (move.type === 'Grass' || move.type === 'Food') {
  172.                 this.debug('Herbivore weaken');
  173.                 return this.chainModify(0.5);
  174.             }
  175.         },
  176.         id: "herbivore",
  177.         name: "Herbivore",
  178.         rating: 3.5,
  179.         num: 47,
  180.     },
  181.  
  182. "predatory": {
  183.         desc: "This Pokemon's drain-based attacks have their power multiplied by 1.33.",
  184.         shortDesc: "This Pokemon's drain-based attacks have 1.33x power.",
  185.         onBasePowerPriority: 8,
  186.         onBasePower: function (basePower, attacker, defender, move) {
  187.             if (move.flags['heal']) {
  188.                 this.debug('Predatory boost');
  189.                 return this.chainModify([0x1547, 0x1000]);
  190.             }
  191.         },
  192.         id: "predatory",
  193.         name: "Predatory",
  194.         rating: 3,
  195.         num: 89,
  196.     },
  197.  
  198. "gammaheal": {
  199.         desc: "The user's HP is recovered by 25% if it knocked an opponent out.",
  200.         shortDesc: "The user's HP is recovered by 25% if it knocked an opponent out.",
  201.         onSourceFaint: function (target, source, effect) {
  202.             this.heal(pokemon.maxhp / 4);
  203.         },
  204.         id: "gammaheal",
  205.         name: "Gamma Heal",
  206.         rating: 3.5,
  207.         num: 224,
  208.     },
  209.  
  210.     "battlearmor": {
  211.         shortDesc: "This Pokemon cannot be struck by a critical hit.",
  212.         onCriticalHit: false,
  213.     }
  214.         if (target === this.activePokemon && source === this.activeTarget) {
  215.                 boosts['atk'] = 0;
  216.                 boosts['spa'] = 0;
  217.                 boosts['accuracy'] = 0;
  218.             }
  219.         },
  220.         id: "battlearmor",
  221.         name: "Battle Armor",
  222.         rating: 1,
  223.         num: 4,
  224.     },
  225.  
  226.     "berserk": {
  227.         desc: "When this Pokemon has more than 1/2 its maximum HP and takes damage from an attack bringing it to 1/2 or less of its maximum HP, its Special Attack is raised by 2 stages. This effect applies after all hits from a multi-hit move; Sheer Force prevents it from activating if the move has a secondary effect.",
  228.         shortDesc: "This Pokemon's Sp. Atk is raised by 2 when it reaches 1/2 or less of its max HP.",
  229.         onAfterMoveSecondary: function (target, source, move) {
  230.             if (!source || source === target || !target.hp || !move.totalDamage) return;
  231.             if (target.hp <= target.maxhp / 2 && target.hp + move.totalDamage > target.maxhp / 2) {
  232.                 this.boost({spa: 2});
  233.             }
  234.         },
  235.         id: "berserk",
  236.         name: "Berserk",
  237.         rating: 2.5,
  238.         num: 201,
  239.     },
  240.  
  241. "blaze": {
  242.         desc: "When this Pokemon has 1/2 or less of its maximum HP, rounded down, its attacking stat is multiplied by 1.5 while using a Fire-type attack.",
  243.         shortDesc: "At 1/2 or less of its max HP, this Pokemon's attacking stat is 1.5x with Fire attacks.",
  244.         onModifyAtkPriority: 5,
  245.         onModifyAtk: function (atk, attacker, defender, move) {
  246.             if (move.type === 'Fire' && attacker.hp <= attacker.maxhp / 2) {
  247.                 this.debug('Blaze boost');
  248.                 return this.chainModify(1.5);
  249.             }
  250.         },
  251.         onModifySpAPriority: 5,
  252.         onModifySpA: function (atk, attacker, defender, move) {
  253.             if (move.type === 'Fire' && attacker.hp <= attacker.maxhp / 2) {
  254.                 this.debug('Blaze boost');
  255.                 return this.chainModify(1.5);
  256.             }
  257.         },
  258.         id: "blaze",
  259.         name: "Blaze",
  260.         rating: 2,
  261.         num: 66,
  262.     },
  263.  
  264.     "overgrow": {
  265.         desc: "When this Pokemon has 1/2 or less of its maximum HP, rounded down, its attacking stat is multiplied by 1.5 while using a Grass-type attack.",
  266.         shortDesc: "At 1/2 or less of its max HP, this Pokemon's attacking stat is 1.5x with Grass attacks.",
  267.         onModifyAtkPriority: 5,
  268.         onModifyAtk: function (atk, attacker, defender, move) {
  269.             if (move.type === 'Grass' && attacker.hp <= attacker.maxhp / 2) {
  270.                 this.debug('Overgrow boost');
  271.                 return this.chainModify(1.5);
  272.             }
  273.         },
  274.         onModifySpAPriority: 5,
  275.         onModifySpA: function (atk, attacker, defender, move) {
  276.             if (move.type === 'Grass' && attacker.hp <= attacker.maxhp / 2) {
  277.                 this.debug('Overgrow boost');
  278.                 return this.chainModify(1.5);
  279.             }
  280.         },
  281.         id: "overgrow",
  282.         name: "Overgrow",
  283.         rating: 2,
  284.         num: 65,
  285.     },
  286.  
  287. "torrent": {
  288.         desc: "When this Pokemon has 1/2 or less of its maximum HP, rounded down, its attacking stat is multiplied by 1.5 while using a Water-type attack.",
  289.         shortDesc: "At 1/2 or less of its max HP, this Pokemon's attacking stat is 1.5x with Water attacks.",
  290.         onModifyAtkPriority: 5,
  291.         onModifyAtk: function (atk, attacker, defender, move) {
  292.             if (move.type === 'Water' && attacker.hp <= attacker.maxhp / 2) {
  293.                 this.debug('Torrent boost');
  294.                 return this.chainModify(1.5);
  295.             }
  296.         },
  297.         onModifySpAPriority: 5,
  298.         onModifySpA: function (atk, attacker, defender, move) {
  299.             if (move.type === 'Water' && attacker.hp <= attacker.maxhp / 2) {
  300.                 this.debug('Torrent boost');
  301.                 return this.chainModify(1.5);
  302.             }
  303.         },
  304.         id: "torrent",
  305.         name: "Torrent",
  306.         rating: 2,
  307.         num: 67,
  308.     },
  309.  
  310.     "swarm": {
  311.         desc: "When this Pokemon has 1/2 or less of its maximum HP, rounded down, its attacking stat is multiplied by 1.5 while using a Bug-type attack.",
  312.         shortDesc: "At 1/2 or less of its max HP, this Pokemon's attacking stat is 1.5x with Bug attacks.",
  313.         onModifyAtkPriority: 5,
  314.         onModifyAtk: function (atk, attacker, defender, move) {
  315.             if (move.type === 'Bug' && attacker.hp <= attacker.maxhp / 2) {
  316.                 this.debug('Swarm boost');
  317.                 return this.chainModify(1.5);
  318.             }
  319.         },
  320.         onModifySpAPriority: 5,
  321.         onModifySpA: function (atk, attacker, defender, move) {
  322.             if (move.type === 'Bug' && attacker.hp <= attacker.maxhp / 2) {
  323.                 this.debug('Swarm boost');
  324.                 return this.chainModify(1.5);
  325.             }
  326.         },
  327.         id: "swarm",
  328.         name: "Swarm",
  329.         rating: 2,
  330.         num: 68,
  331.     },
  332.  
  333.     "defeatist": {
  334.         desc: "While this Pokemon has 1/3 or less of its maximum HP, its Attack and Special Attack are 0.75.",
  335.         shortDesc: "While this Pokemon has 1/3 or less of its max HP, its Attack and Sp. Atk are 0.75.",
  336.         onModifyAtkPriority: 5,
  337.         onModifyAtk: function (atk, pokemon) {
  338.             if (pokemon.hp <= pokemon.maxhp / 3) {
  339.                 return this.chainModify(0.5);
  340.             }
  341.         },
  342.         onModifySpAPriority: 5,
  343.         onModifySpA: function (atk, pokemon) {
  344.             if (pokemon.hp <= pokemon.maxhp / 3) {
  345.                 return this.chainModify(0.75);
  346.             }
  347.         },
  348.         id: "defeatist",
  349.         name: "Defeatist",
  350.         rating: -1,
  351.         num: 129,
  352.     },
  353.  
  354. onModifyAtkPriority: 5,
  355.         onModifyAtk: function (atk, attacker, defender, move) {
  356.             if (move.type === 'Grass') {
  357.                 this.debug('Flower Veil boost');
  358.                 return this.chainModify(1.5);
  359.             }
  360.         },
  361.         onModifySpAPriority: 5,
  362.         onModifySpA: function (atk, attacker, defender, move) {
  363.             if (move.type === 'Grass') {
  364.                 this.debug('Flower Veil boost');
  365.                 return this.chainModify(1.5);
  366.             }
  367.         },
  368.  
  369.  
  370.     "flowerveil": {
  371.         desc: "Grass-type Pokemon on this Pokemon's side cannot have their stat stages lowered by other Pokemon or have a major status condition inflicted on them by other Pokemon. Grass type moves have 1.5x power",
  372.         shortDesc: "This side's Grass types can't have stats lowered or status inflicted by other Pokemon.",
  373.         onAllyBoost: function (boost, target, source, effect) {
  374.             if ((source && target === source) || !target.hasType('Grass')) return;
  375.             let showMsg = false;
  376.             for (let i in boost) {
  377.                 // @ts-ignore
  378.                 if (boost[i] < 0) {
  379.                     // @ts-ignore
  380.                     delete boost[i];
  381.                     showMsg = true;
  382.                 }
  383.             }
  384.             if (showMsg && !effect.secondaries) this.add('-fail', this.effectData.target, 'unboost', '[from] ability: Flower Veil', '[of] ' + target);
  385.         },
  386.         onAllySetStatus: function (status, target, source, effect) {
  387.             if (target.hasType('Grass')) {
  388.                 if (!effect || !effect.status) return false;
  389.                 this.add('-activate', this.effectData.target, 'ability: Flower Veil', '[of] ' + target);
  390.                 return null;
  391.             }
  392.         }
  393.         onModifyAtkPriority: 5,
  394.         onModifyAtk: function (atk, attacker, defender, move) {
  395.             if (move.type === 'Grass') {
  396.                 this.debug('Flower Veil boost');
  397.                 return this.chainModify(1.5);
  398.             }
  399.         },
  400.         onModifySpAPriority: 5,
  401.         onModifySpA: function (atk, attacker, defender, move) {
  402.             if (move.type === 'Grass') {
  403.                 this.debug('Flower Veil boost');
  404.                 return this.chainModify(1.5);
  405.             }
  406.         },
  407.         id: "flowerveil",
  408.         name: "Flower Veil",
  409.         rating: 0,
  410.         num: 166,
  411.     },
  412.  
  413.     onStart: function (pokemon) {
  414.             for (const target of pokemon.side.foe.active) {
  415.                 if (!target || target.fainted) continue;
  416.                 if (target.item) {
  417.                     this.add('-item', target, target.getItem().name, '[from] ability: Frisk', '[of] ' + pokemon, '[identify]');
  418.                 }
  419.             }
  420.         },
  421.  
  422.     "forewarn": {
  423.         desc: "On switch-in, this Pokemon is alerted to the move with the highest power, at random, known by an opposing Pokemon. ",
  424.         shortDesc: "On switch-in, this Pokemon is alerted to the foes' move with the highest power, ability, and item.",
  425.         onStart: function (pokemon) {
  426.             /**@type {(Move|Pokemon)[][]} */
  427.             let warnMoves = [];
  428.             let warnBp = 1;
  429.             for (const target of pokemon.side.foe.active) {
  430.                 if (target.fainted) continue;
  431.                 for (const moveSlot of target.moveSlots) {
  432.                     let move = this.getMove(moveSlot.move);
  433.                     let bp = move.basePower;
  434.                     if (move.ohko) bp = 160;
  435.                     if (move.id === 'counter' || move.id === 'metalburst' || move.id === 'mirrorcoat') bp = 120;
  436.                     if (!bp && move.category !== 'Status') bp = 80;
  437.                     if (bp > warnBp) {
  438.                         warnMoves = [[move, target]];
  439.                         warnBp = bp;
  440.                     } else if (bp === warnBp) {
  441.                         warnMoves.push([move, target]);
  442.                     }
  443.                 }
  444.             }
  445.             if (!warnMoves.length) return;
  446.             const [warnMoveName, warnTarget] = this.sample(warnMoves);
  447.             this.add('-activate', pokemon, 'ability: Forewarn', warnMoveName, '[of] ' + warnTarget);
  448.         }
  449.         onStart: function (pokemon) {
  450.             for (const target of pokemon.side.foe.active) {
  451.                 if (!target || target.fainted) continue;
  452.                 if (target.item) {
  453.                     this.add('-item', target, target.getItem().name, '[from] ability: Frisk', '[of] ' + pokemon, '[identify]');
  454.                 }
  455.             }
  456.         }
  457.         onStart: function (pokemon) {
  458.             for (const target of pokemon.side.foe.active) {
  459.                 if (!target || target.fainted) continue;
  460.                 if (target.ability) {
  461.                     this.add('-ability', target, target.getAbility().name, '[from] ability: Frisk', '[of] ' + pokemon, '[identify]');
  462.                 }
  463.             }
  464.         },
  465.         id: "forewarn",
  466.         name: "Forewarn",
  467.         rating: 1,
  468.         num: 108,
  469.     },
  470.  
  471. "galewings": {
  472.         shortDesc: "If this Pokemon is at more than 50% HP, its Flying-type moves have their priority increased by 1.",
  473.         onModifyPriority: function (priority, pokemon, target, move) {
  474.             if (move && move.type === 'Flying' && pokemon.hp <= pokemon.maxhp / 2) return priority + 1;
  475.         },
  476.         id: "galewings",
  477.         name: "Gale Wings",
  478.         rating: 3,
  479.         num: 177,
  480.     },
  481.  
  482. "gooey": {
  483.         desc: "If Rain is active, this Pokemon's Def is multiplied by 1.5.",
  484.         shortDesc: "If Rain is active, this Pokemon's Def is 1.5x.",
  485.         onModifySpAPriority: 5,
  486.         onModifySpA: function (def, pokemon) {
  487.             if (this.isWeather(['raindance', 'primordialsea'])) {
  488.                 return this.chainModify(1.5);
  489.             }
  490.         },
  491.         id: "gooey",
  492.         name: "Gooey",
  493.         rating: 1.5,
  494.         num: 94,
  495.     },
  496.  
  497. "heatproof": {
  498.         desc: "This Pokemon is immune to Fire-type moves and raises its Sp. Def by 1 stage when hit by a Fire-type move.",
  499.         shortDesc: "This Pokemon's Sp. Def is raised 1 stage if hit by a Fire move; Fire immunity.",
  500.         onTryHitPriority: 1,
  501.         onTryHit: function (target, source, move) {
  502.             if (target !== source && move.type === 'Fire') {
  503.                 if (!this.boost({spd: 1})) {
  504.                     this.add('-immune', target, '[msg]', '[from] ability: Heatproof');
  505.                 }
  506.                 return null;
  507.             }
  508.         },
  509.         onAllyTryHitSide: function (target, source, move) {
  510.             if (target === this.effectData.target || target.side !== source.side) return;
  511.             if (move.type === 'Fire') {
  512.                 this.boost({spd: 1}, this.effectData.target);
  513.             }
  514.         },
  515.         id: "heatproof",
  516.         name: "Heatproof",
  517.         rating: 3.5,
  518.         num: 157,
  519.     },
  520.  
  521.     "icebody": {
  522.         desc: "If Hail is active, this Pokemon restores 1/8 of its maximum HP, rounded down, at the end of each turn. This Pokemon takes no damage from Hail.",
  523.         shortDesc: "If Hail is active, this Pokemon heals 1/8 of its max HP each turn; immunity to Hail.",
  524.         onWeather: function (target, source, effect) {
  525.             if (effect.id === 'hail') {
  526.                 this.heal(target.maxhp / 8);
  527.             }
  528.         },
  529.         onImmunity: function (type, pokemon) {
  530.             if (type === 'hail') return false;
  531.         },
  532.         id: "icebody",
  533.         name: "Ice Body",
  534.         rating: 1.5,
  535.         num: 115,
  536.  
  537. "raindish": {
  538.         desc: "If Rain Dance is active, this Pokemon restores 1/8 of its maximum HP, rounded down, at the end of each turn.",
  539.         shortDesc: "If Rain Dance is active, this Pokemon heals 1/8 of its max HP each turn.",
  540.         onWeather: function (target, source, effect) {
  541.             if (effect.id === 'raindance' || effect.id === 'primordialsea') {
  542.                 this.heal(target.maxhp / 8);
  543.             }
  544.         },
  545.         id: "raindish",
  546.         name: "Rain Dish",
  547.         rating: 1.5,
  548.         num: 44,
  549.     },
  550.  
  551.     "illuminate": {
  552.         desc: "This Pokemon's Normal-type moves become Light-type moves and have their power multiplied by 1.2. This effect comes after other effects that change a move's type, but before Ion Deluge and Electrify's effects.",
  553.         shortDesc: "This Pokemon's Normal-type moves become Light type and have 1.2x power.",
  554.         onModifyMovePriority: -1,
  555.         onModifyMove: function (move, pokemon) {
  556.             if (move.type === 'Normal' && !['judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'weatherball'].includes(move.id) && !(move.isZ && move.category !== 'Status')) {
  557.                 move.type = 'Light';
  558.                 move.illuminateBoosted = true;
  559.             }
  560.         },
  561.         onBasePowerPriority: 8,
  562.         onBasePower: function (basePower, pokemon, target, move) {
  563.             if (move.illuminateBoosted) return this.chainModify([0x1333, 0x1000]);
  564.         },
  565.         id: "illuminate",
  566.         name: "Illuminate",
  567.         rating: 4,
  568.         num: 182,
  569.     },
  570.  
  571. "immunity": {
  572.         desc: "This Pokemon is immune to Poison-type moves and raises its Def by 1 stage when hit by a Grass-type move.",
  573.         shortDesc: "This Pokemon's Def is raised 1 stage if hit by a Poison move; Poison immunity.",
  574.         onTryHitPriority: 1,
  575.         onTryHit: function (target, source, move) {
  576.             if (target !== source && move.type === 'Poison') {
  577.                 if (!this.boost({def: 1})) {
  578.                     this.add('-immune', target, '[msg]', '[from] ability: Immunity');
  579.                 }
  580.                 return null;
  581.             }
  582.         },
  583.         onAllyTryHitSide: function (target, source, move) {
  584.             if (target === this.effectData.target || target.side !== source.side) return;
  585.             if (move.type === 'Poison') {
  586.                 this.boost({def: 1}, this.effectData.target);
  587.             }
  588.         },
  589.         id: "immunity",
  590.         name: "Immunity",
  591.         rating: 3.5,
  592.         num: 157,
  593.     },
  594.  
  595. "justified": {
  596.         desc: "This Pokemon is immune to Dark-type moves and raises its Attack by 1 stage when hit by a Dark-type move.",
  597.         shortDesc: "This Pokemon's Attack is raised 1 stage if hit by a Dark move; Dark immunity.",
  598.         onTryHitPriority: 1,
  599.         onTryHit: function (target, source, move) {
  600.             if (target !== source && move.type === 'Dark') {
  601.                 if (!this.boost({atk: 1})) {
  602.                     this.add('-immune', target, '[msg]', '[from] ability: Sap Sipper');
  603.                 }
  604.                 return null;
  605.             }
  606.         },
  607.         onAllyTryHitSide: function (target, source, move) {
  608.             if (target === this.effectData.target || target.side !== source.side) return;
  609.             if (move.type === 'Dark') {
  610.                 this.boost({atk: 1}, this.effectData.target);
  611.             }
  612.         },
  613.         id: "justified",
  614.         name: "Justified",
  615.         rating: 3.5,
  616.         num: 157,
  617.     },
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top