Advertisement
Brodaha

Abilities for Gen SD

Sep 25th, 2018
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.18 KB | None | 0 0
  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. },
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement