Advertisement
Guest User

formats.js

a guest
Nov 11th, 2014
11
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.86 KB | None | 0 0
  1. // Note: This is the list of formats
  2. // The rules that formats use are stored in data/rulesets.js
  3.  
  4. exports.Formats = [
  5.  
  6. // XY Singles
  7. ///////////////////////////////////////////////////////////////////
  8.  
  9. {
  10. name: "Random Battle",
  11. section: "XY Singles",
  12.  
  13. team: 'random',
  14. ruleset: ['PotD', 'Pokemon', 'Sleep Clause Mod', 'HP Percentage Mod']
  15. },
  16. {
  17. name: "Unrated Random Battle",
  18. section: "XY Singles",
  19.  
  20. team: 'random',
  21. challengeShow: false,
  22. rated: false,
  23. ruleset: ['PotD', 'Pokemon', 'Sleep Clause Mod', 'HP Percentage Mod']
  24. },
  25. {
  26. name: "OU",
  27. section: "XY Singles",
  28.  
  29. ruleset: ['Pokemon', 'Standard', 'Team Preview', 'Swagger Clause', 'Baton Pass Clause'],
  30. banlist: ['Uber', 'Soul Dew', 'Gengarite', 'Kangaskhanite', 'Lucarionite', 'Mawilite']
  31. },
  32. {
  33. name: "Ubers",
  34. section: "XY Singles",
  35.  
  36. searchShow: false,
  37. ruleset: ['Pokemon', 'Standard Ubers', 'Swagger Clause', 'Team Preview'],
  38. banlist: []
  39. },
  40. {
  41. name: "Ubers (suspect test)",
  42. section: "XY Singles",
  43.  
  44. challengeShow: false,
  45. ruleset: ['Pokemon', 'Standard Ubers', 'Swagger Clause', 'Team Preview'],
  46. banlist: []
  47. },
  48. {
  49. name: "UU",
  50. section: "XY Singles",
  51.  
  52. ruleset: ['OU'],
  53. banlist: ['OU', 'BL', 'Heracronite', 'Gardevoirite', 'Medichamite', 'Drizzle', 'Drought', 'Shadow Tag']
  54. },
  55. {
  56. name: "RU",
  57. section: "XY Singles",
  58.  
  59. ruleset: ['UU'],
  60. banlist: ['UU', 'BL2']
  61. },
  62. {
  63. name: "NU",
  64. section: "XY Singles",
  65.  
  66. ruleset: ['RU'],
  67. banlist: ['RU', 'BL3']
  68. },
  69. {
  70. name: "LC",
  71. section: "XY Singles",
  72.  
  73. maxLevel: 5,
  74. ruleset: ['Pokemon', 'Standard', 'Team Preview', 'Little Cup'],
  75. banlist: ['Dragon Rage', 'Sonic Boom', 'Swagger', 'LC Uber', 'Gligar']
  76. },
  77. {
  78. name: "CAP Plasmanta Playtest",
  79. section: "XY Singles",
  80.  
  81. ruleset: ['CAP Pokemon', 'Standard', 'Team Preview', 'Swagger Clause', 'Baton Pass Clause'],
  82. banlist: ['Uber', 'Gengarite', 'Kangaskhanite', 'Lucarionite', 'Soul Dew',
  83. 'Tomohawk', 'Necturna', 'Mollux', 'Aurumoth', 'Malaconda', 'Cawmodore', 'Volkraken', 'Syclant', 'Revenankh', 'Pyroak', 'Fidgit', 'Stratagem', 'Arghonaut', 'Kitsunoh', 'Cyclohm', 'Colossoil', 'Krilowatt', 'Voodoom'
  84. ]
  85. },
  86. {
  87. name: "Battle Spot Singles",
  88. section: "XY Singles",
  89.  
  90. onBegin: function () {
  91. this.debug('cutting down to 3');
  92. this.p1.pokemon = this.p1.pokemon.slice(0, 3);
  93. this.p1.pokemonLeft = this.p1.pokemon.length;
  94. this.p2.pokemon = this.p2.pokemon.slice(0, 3);
  95. this.p2.pokemonLeft = this.p2.pokemon.length;
  96. },
  97. maxForcedLevel: 50,
  98. ruleset: ['Pokemon', 'Standard GBU', 'Team Preview GBU'],
  99. banlist: [], // The necessary bans are in Standard GBU
  100. validateTeam: function (team, format) {
  101. if (team.length < 3) return ['You must bring at least three Pokémon.'];
  102. }
  103. },
  104. {
  105. name: "Custom Game",
  106. section: "XY Singles",
  107.  
  108. searchShow: false,
  109. canUseRandomTeam: true,
  110. debug: true,
  111. maxLevel: 9999,
  112. defaultLevel: 100,
  113. // no restrictions, for serious (other than team preview)
  114. ruleset: ['Team Preview']
  115. },
  116.  
  117. // XY Doubles
  118. ///////////////////////////////////////////////////////////////////
  119.  
  120. {
  121. name: "Random Doubles Battle",
  122. section: "XY Doubles",
  123.  
  124. gameType: 'doubles',
  125. team: 'randomDoubles',
  126. ruleset: ['PotD', 'Pokemon', 'Sleep Clause Mod', 'HP Percentage Mod']
  127. },
  128. {
  129. name: "Smogon Doubles",
  130. section: "XY Doubles",
  131.  
  132. gameType: 'doubles',
  133. ruleset: ['Pokemon', 'Standard Doubles', 'Team Preview'],
  134. banlist: ['Soul Dew', 'Dark Void',
  135. 'Mewtwo', 'Lugia', 'Ho-Oh', 'Kyogre', 'Groudon', 'Rayquaza', 'Dialga', 'Palkia', 'Giratina', 'Giratina-Origin',
  136. 'Arceus', 'Reshiram', 'Zekrom', 'Kyurem-White', 'Xerneas', 'Yveltal'
  137. ]
  138. },
  139. {
  140. name: "Smogon Doubles Ubers",
  141. section: "XY Doubles",
  142.  
  143. gameType: 'doubles',
  144. ruleset: ['Pokemon', 'Species Clause', 'Moody Clause', 'OHKO Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Team Preview'],
  145. banlist: ['Unreleased', 'Illegal', 'Dark Void']
  146. },
  147. {
  148. name: "Smogon Doubles UU",
  149. section: "XY Doubles",
  150.  
  151. gameType: 'doubles',
  152. ruleset: ['Smogon Doubles'],
  153. banlist: ['Abomasnow', 'Aegislash', 'Amoonguss', 'Aromatisse', 'Azumarill', 'Bisharp', 'Breloom', 'Chandelure', 'Charizard', 'Conkeldurr',
  154. 'Cresselia', 'Diancie', 'Dragonite', 'Dusclops', 'Excadrill', 'Ferrothorn', 'Garchomp', 'Gardevoir', 'Gengar', 'Greninja',
  155. 'Gyarados', 'Heatran', 'Hitmontop', 'Hydreigon', 'Jellicent', 'Kangaskhan', 'Keldeo', 'Kyurem-Black', 'Landorus-Therian', 'Latios',
  156. 'Ludicolo', 'Mamoswine', 'Manectric', 'Mawile', 'Politoed', 'Rhyperior', 'Rotom-Heat', 'Rotom-Wash', 'Sableye', 'Salamence',
  157. 'Scizor', 'Scrafty', 'Shaymin-Sky', 'Sylveon', 'Talonflame', 'Terrakion', 'Thundurus', 'Thundurus-Therian', 'Togekiss', 'Tyranitar',
  158. 'Venusaur', 'Weavile', 'Whimsicott', 'Zapdos'
  159. ]
  160. },
  161. {
  162. name: "Battle Spot Doubles",
  163. section: "XY Doubles",
  164.  
  165. gameType: 'doubles',
  166. onBegin: function () {
  167. this.debug('cutting down to 4');
  168. this.p1.pokemon = this.p1.pokemon.slice(0, 4);
  169. this.p1.pokemonLeft = this.p1.pokemon.length;
  170. this.p2.pokemon = this.p2.pokemon.slice(0, 4);
  171. this.p2.pokemonLeft = this.p2.pokemon.length;
  172. },
  173. maxForcedLevel: 50,
  174. ruleset: ['Pokemon', 'Standard GBU', 'Team Preview VGC'],
  175. validateTeam: function (team, format) {
  176. if (team.length < 4) return ['You must bring at least four Pokémon.'];
  177. }
  178. },
  179. {
  180. name: "Battle Spot Special 6",
  181. section: "XY Doubles",
  182.  
  183. gameType: 'doubles',
  184. onBegin: function () {
  185. this.debug('cutting down to 4');
  186. this.p1.pokemon = this.p1.pokemon.slice(0, 4);
  187. this.p1.pokemonLeft = this.p1.pokemon.length;
  188. this.p2.pokemon = this.p2.pokemon.slice(0, 4);
  189. this.p2.pokemonLeft = this.p2.pokemon.length;
  190. },
  191. maxForcedLevel: 50,
  192. ruleset: ['Pokemon', 'Standard GBU', 'Team Preview VGC'],
  193. banlist: ['Aegislash', 'Amoonguss', 'Charizard', 'Cresselia', 'Garchomp', 'Gengar', 'Greninja', 'Gyarados', 'Kangaskhan', 'Landorus',
  194. 'Landorus-Therian', 'Mawile', 'Meowstic', 'Meowstic-F', 'Rotom', 'Rotom-Fan', 'Rotom-Frost', 'Rotom-Heat', 'Rotom-Mow', 'Rotom-Wash',
  195. 'Salamence', 'Sylveon', 'Talonflame', 'Thundurus', 'Thundurus-Therian', 'Togekiss', 'Tyranitar'
  196. ],
  197. validateTeam: function (team, format) {
  198. if (team.length < 4) return ['You must bring at least four Pokémon.'];
  199. }
  200. },
  201. {
  202. name: "VGC 2014",
  203. section: "XY Doubles",
  204.  
  205. gameType: 'doubles',
  206. onBegin: function () {
  207. this.debug('cutting down to 4');
  208. this.p1.pokemon = this.p1.pokemon.slice(0, 4);
  209. this.p1.pokemonLeft = this.p1.pokemon.length;
  210. this.p2.pokemon = this.p2.pokemon.slice(0, 4);
  211. this.p2.pokemonLeft = this.p2.pokemon.length;
  212. },
  213. maxForcedLevel: 50,
  214. ruleset: ['Pokemon', 'Standard GBU', 'Team Preview VGC', 'Kalos Pokedex'],
  215. requirePentagon: true,
  216. banlist: [], // The necessary bans are in Standard GBU
  217. validateTeam: function (team, format) {
  218. if (team.length < 4) return ['You must bring at least four Pokémon.'];
  219. }
  220. },
  221. {
  222. name: "Doubles Challenge Cup",
  223. section: 'XY Doubles',
  224.  
  225. gameType: 'doubles',
  226. team: 'randomCC',
  227. searchShow: false,
  228. ruleset: ['Pokemon', 'HP Percentage Mod']
  229. },
  230. {
  231. name: "Doubles Custom Game",
  232. section: "XY Doubles",
  233.  
  234. gameType: 'doubles',
  235. searchShow: false,
  236. canUseRandomTeam: true,
  237. maxLevel: 9999,
  238. defaultLevel: 100,
  239. debug: true,
  240. // no restrictions, for serious (other than team preview)
  241. ruleset: ['Team Preview']
  242. },
  243.  
  244. // XY Triples
  245. ///////////////////////////////////////////////////////////////////
  246.  
  247. {
  248. name: "Random Triples Battle",
  249. section: "XY Triples",
  250.  
  251. gameType: 'triples',
  252. team: 'randomDoubles',
  253. ruleset: ['PotD', 'Pokemon', 'Sleep Clause Mod', 'HP Percentage Mod']
  254. },
  255. {
  256. name: "Smogon Triples",
  257. section: "XY Triples",
  258.  
  259. gameType: 'triples',
  260. ruleset: ['Pokemon', 'Species Clause', 'OHKO Clause', 'Moody Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Team Preview'],
  261. banlist: ['Illegal', 'Unreleased', 'Arceus', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-White',
  262. 'Lugia', 'Mewtwo', 'Palkia', 'Rayquaza', 'Reshiram', 'Xerneas', 'Yveltal', 'Zekrom',
  263. 'Soul Dew', 'Dark Void', 'Perish Song'
  264. ]
  265. },
  266. {
  267. name: "Battle Spot Triples",
  268. section: "XY Triples",
  269.  
  270. gameType: 'triples',
  271. maxForcedLevel: 50,
  272. ruleset: ['Pokemon', 'Standard GBU', 'Team Preview'],
  273. validateTeam: function (team, format) {
  274. if (team.length < 6) return ['You must have six Pokémon.'];
  275. }
  276. },
  277. {
  278. name: "Triples Challenge Cup",
  279. section: "XY Triples",
  280.  
  281. gameType: 'triples',
  282. team: 'randomCC',
  283. searchShow: false,
  284. ruleset: ['Pokemon', 'HP Percentage Mod']
  285. },
  286. {
  287. name: "Triples Custom Game",
  288. section: "XY Triples",
  289.  
  290. gameType: 'triples',
  291. searchShow: false,
  292. canUseRandomTeam: true,
  293. maxLevel: 9999,
  294. defaultLevel: 100,
  295. debug: true,
  296. // no restrictions, for serious (other than team preview)
  297. ruleset: ['Team Preview']
  298. },
  299.  
  300. // Other Metagames
  301. ///////////////////////////////////////////////////////////////////
  302.  
  303. {
  304. name: "350 Cup",
  305. section: "OM of the Month",
  306. column: 2,
  307.  
  308. mod: '350cup',
  309. ruleset: ['Ubers', 'Evasion Moves Clause'],
  310. banlist: ['Darumaka', 'Pawniard', 'Spritzee', 'DeepSeaScale', 'DeepSeaTooth', 'Light Ball', 'Thick Club'],
  311. validateSet: function (set) {
  312. var template = Tools.getTemplate(set.species);
  313. var item = this.getItem(set.item);
  314. if (item.name === 'Eviolite' && Object.values(template.baseStats).sum() <= 350) {
  315. return ['Eviolite is banned on Pokémon with 350 or lower BST.'];
  316. }
  317. }
  318. },
  319. {
  320. name: "ORAS OU",
  321. section: "OM of the Month",
  322.  
  323. mod: 'oras',
  324. ruleset: ['Pokemon', 'Sleep Clause Mod', 'Species Clause', 'OHKO Clause', 'Moody Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Team Preview', 'Swagger Clause', 'Baton Pass Clause'],
  325. banlist: ['Illegal', 'Uber', 'Floette-Eternal-Flower', 'Hoopa', 'Volcanion', 'Gengarite', 'Kangaskhanite', 'Lucarionite', 'Mawilite', 'Soul Dew',
  326. 'Bug Gem', 'Custap Berry', 'Dark Gem', 'Dragon Gem', 'Electric Gem', 'Fairy Gem', 'Fighting Gem', 'Fire Gem', 'Flying Gem', 'Ghost Gem',
  327. 'Grass Gem', 'Ground Gem', 'Ice Gem', 'Mail', 'Poison Gem', 'Psychic Gem', 'Rock Gem', 'Steel Gem', 'Water Gem'
  328. ]
  329. },
  330. {
  331. name: "[Seasonal] Strikes Back",
  332. section: "OM of the Month",
  333.  
  334. gameType: 'triples',
  335. team: 'randomSeasonalSB',
  336. ruleset: ['HP Percentage Mod', 'Sleep Clause Mod'],
  337. onBegin: function() {
  338. this.add('-message', "V4 is a big poo-poo!");
  339. },
  340. onModifyMove: function (move) {
  341. // Change present mechanics
  342. if (move.id === 'present') {
  343. move.category = 'Status';
  344. move.basePower = 0;
  345. delete move.heal;
  346. move.accuracy = 100;
  347. switch (this.random(16)) {
  348. case 0:
  349. move.onTryHit = function() {
  350. this.add('-message', "The present was a bomb!");
  351. };
  352. move.category = 'Physical';
  353. move.basePower = 250;
  354. break;
  355. case 1:
  356. move.onTryHit = function() {
  357. this.add('-message', "The present was confusion!");
  358. };
  359. move.volatileStatus = 'confusion';
  360. break;
  361. case 2:
  362. move.onTryHit = function() {
  363. this.add('-message', "The present was Disable!");
  364. };
  365. move.volatileStatus = 'disable';
  366. break;
  367. case 3:
  368. move.onTryHit = function() {
  369. this.add('-message', "The present was a taunt!");
  370. };
  371. move.volatileStatus = 'taunt';
  372. break;
  373. case 4:
  374. move.onTryHit = function() {
  375. this.add('-message', "The present was some seeds!");
  376. };
  377. move.volatileStatus = 'leechseed';
  378. break;
  379. case 5:
  380. move.onTryHit = function() {
  381. this.add('-message', "The present was an embargo!");
  382. };
  383. move.volatileStatus = 'embargo';
  384. break;
  385. case 6:
  386. move.onTryHit = function() {
  387. this.add('-message', "The present was a music box!");
  388. };
  389. move.volatileStatus = 'perishsong';
  390. break;
  391. case 7:
  392. move.onTryHit = function() {
  393. this.add('-message', "The present was a curse!");
  394. };
  395. move.volatileStatus = 'curse';
  396. break;
  397. case 8:
  398. move.onTryHit = function() {
  399. this.add('-message', "The present was Torment!");
  400. };
  401. move.volatileStatus = 'torment';
  402. break;
  403. case 9:
  404. move.onTryHit = function() {
  405. this.add('-message', "The present was a trap!");
  406. };
  407. move.volatileStatus = 'partiallytrapped';
  408. break;
  409. case 10:
  410. move.onTryHit = function() {
  411. this.add('-message', "The present was a root!");
  412. };
  413. move.volatileStatus = 'ingrain';
  414. break;
  415. case 11:
  416. move.onTryHit = function() {
  417. this.add('-message', "The present was a makeover!");
  418. };
  419. var boosts = {};
  420. var possibleBoosts = ['atk','def','spa','spd','spe','accuracy','evasion'].randomize();
  421. boosts[possibleBoosts[0]] = 1;
  422. boosts[possibleBoosts[1]] = -1;
  423. boosts[possibleBoosts[2]] = -1;
  424. move.boosts = boosts;
  425. break;
  426. case 12:
  427. move.onTryHit = function() {
  428. this.add('-message', "The present was psychic powers!");
  429. };
  430. move.volatileStatus = 'telekinesis';
  431. break;
  432. case 13:
  433. move.onTryHit = function() {
  434. this.add('-message', "The present was fatigue!");
  435. };
  436. move.volatileStatus = 'mustrecharge';
  437. break;
  438. case 14:
  439. case 15:
  440. move.onTryHit = function() {
  441. this.add('-message', "The present was a snowball hit!");
  442. };
  443. move.category = 'Ice';
  444. move.basePower = 250;
  445. break;
  446. }
  447. } else {
  448. // Change move type time to time only when the move is not present.
  449. if (this.random(100) < 40 && move.target !== 'self') {
  450. var type = '';
  451. switch (move.type.toLowerCase()){
  452. case 'rock':
  453. case 'ground':
  454. type = 'Grass';
  455. break;
  456. case 'fire':
  457. case 'bug':
  458. type = 'Water';
  459. break;
  460. case 'water':
  461. case 'grass':
  462. type = 'Fire';
  463. break;
  464. case 'flying':
  465. type = 'Fighting';
  466. break;
  467. case 'fighting':
  468. type = 'Flying';
  469. break;
  470. case 'dark':
  471. type = 'Bug';
  472. break;
  473. case 'dragon':
  474. case 'electric':
  475. type = 'Ice';
  476. break;
  477. case 'ghost':
  478. type = 'Normal';
  479. break;
  480. case 'ice':
  481. type = 'Electric';
  482. break;
  483. case 'normal':
  484. case 'poison':
  485. type = 'Ghost';
  486. break;
  487. case 'psychic':
  488. type = 'Dark';
  489. break;
  490. case 'steel':
  491. type = 'Poison';
  492. break;
  493. }
  494.  
  495. move.type = type;
  496. this.add('-message', 'lol trolled I changed yer move type hahaha');
  497. }
  498. }
  499. },
  500. onSwitchIn: function (pokemon) {
  501. if (this.random(100) < 33) {
  502. this.add('-message', pokemon.name + " drank way too much!");
  503. pokemon.addVolatile('confusion');
  504. pokemon.statusData.time = 0;
  505. }
  506. },
  507. onFaint: function (pokemon) {
  508. // A poem every time a Pokemon faints
  509. var haikus = ["You suck a lot / You are a bad trainer / let a mon faint", "they see me driving / round town with the girl i love / and I'm like, haikou",
  510. "Ain't no Pokemon tough enough / ain't no bulk decent enough / ain't no recovery good enough / to keep me from fainting you, babe",
  511. "Roses are red / violets are blue / you must be on some med / 'coz as a trainer you suck",
  512. "You're gonna be the very worst / like no one ever was / to lose all the battles is your test / to faint them all is your cause",
  513. 'Twinkle twinkle little star / screw you that was my best sweeper', "I'm wheezy and I'm sleezy / but as a trainer you're measly",
  514. "You're sharp as a rock / you're bright as a hole / you're one to mock / you could be beaten by a maimed mole",
  515. "Alas, poor trainer! I knew him, your Pokémon, a fellow of infinite jest, of most excellent fancy."];
  516. haikus = haikus.randomize();
  517. this.add('-message', haikus[0]);
  518. }
  519. },
  520. {
  521. name: "CAP",
  522. section: "Other Metagames",
  523. column: 2,
  524.  
  525. searchShow: false,
  526. ruleset: ['CAP Pokemon', 'Standard', 'Baton Pass Clause', 'Swagger Clause', 'Team Preview'],
  527. banlist: ['Uber', 'Soul Dew', 'Gengarite', 'Kangaskhanite', 'Lucarionite', 'Mawilite']
  528. },
  529. {
  530. name: "Challenge Cup",
  531. section: "Other Metagames",
  532.  
  533. team: 'randomCC',
  534. ruleset: ['Pokemon', 'HP Percentage Mod']
  535. },
  536. {
  537. name: "Balanced Hackmons Challenge Cup",
  538. section: 'Other Metagames',
  539.  
  540. team: 'randomCCBH',
  541. searchShow: false,
  542. ruleset: ['Pokemon', 'HP Percentage Mod']
  543. },
  544. {
  545. name: "Challenge Cup 1-vs-1",
  546. section: "Other Metagames",
  547.  
  548. team: 'randomCC',
  549. ruleset: ['Pokemon', 'Team Preview 1v1', 'HP Percentage Mod'],
  550. onBegin: function () {
  551. this.debug('Cutting down to 1');
  552. this.p1.pokemon = this.p1.pokemon.slice(0, 1);
  553. this.p1.pokemonLeft = this.p1.pokemon.length;
  554. this.p2.pokemon = this.p2.pokemon.slice(0, 1);
  555. this.p2.pokemonLeft = this.p2.pokemon.length;
  556. }
  557. },
  558. {
  559. name: "Balanced Hackmons",
  560. section: "Other Metagames",
  561.  
  562. ruleset: ['Pokemon', 'Ability Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Team Preview', 'HP Percentage Mod'],
  563. banlist: ['Arena Trap', 'Huge Power', 'Parental Bond', 'Pure Power', 'Shadow Tag', 'Wonder Guard']
  564. },
  565. {
  566. name: "1v1",
  567. section: 'Other Metagames',
  568.  
  569. ruleset: ['Pokemon', 'Standard', 'Swagger Clause', 'Team Preview 1v1'],
  570. banlist: ['Arceus', 'Blaziken', 'Darkrai', 'Deoxys', 'Deoxys-Attack', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh',
  571. 'Kyogre', 'Kyurem-White', 'Lugia', 'Mewtwo', 'Palkia', 'Rayquaza', 'Reshiram', 'Shaymin-Sky', 'Xerneas', 'Yveltal',
  572. 'Zekrom', 'Focus Sash', 'Kangaskhanite', 'Soul Dew'
  573. ],
  574. validateTeam: function (team, format) {
  575. if (team.length > 3) return ['You may only bring up to three Pokémon.'];
  576. },
  577. onBegin: function () {
  578. this.p1.pokemon = this.p1.pokemon.slice(0, 1);
  579. this.p1.pokemonLeft = this.p1.pokemon.length;
  580. this.p2.pokemon = this.p2.pokemon.slice(0, 1);
  581. this.p2.pokemonLeft = this.p2.pokemon.length;
  582. }
  583. },
  584. {
  585. name: "Monotype",
  586. section: "Other Metagames",
  587.  
  588. ruleset: ['Pokemon', 'Standard', 'Baton Pass Clause', 'Swagger Clause', 'Same Type Clause', 'Team Preview'],
  589. banlist: ['Arceus', 'Blaziken', 'Darkrai', 'Deoxys', 'Deoxys-Attack', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh',
  590. 'Kyogre', 'Lugia', 'Mewtwo', 'Palkia', 'Rayquaza', 'Reshiram', 'Talonflame', 'Xerneas', 'Yveltal', 'Zekrom',
  591. 'Gengarite', 'Kangaskhanite', 'Lucarionite'
  592. ]
  593. },
  594. {
  595. name: "Tier Shift",
  596. section: "Other Metagames",
  597.  
  598. mod: 'tiershift',
  599. ruleset: ['OU']
  600. },
  601. {
  602. name: "PU",
  603. section: "Other Metagames",
  604.  
  605. ruleset: ['NU'],
  606. banlist: ['NU']
  607. },
  608. {
  609. name: "Inverse Battle",
  610. section: "Other Metagames",
  611.  
  612. ruleset: ['OU'],
  613. banlist: ['Kyurem-Black', 'Snorlax'],
  614. onModifyPokemon: function (pokemon) {
  615. pokemon.negateImmunity['Type'] = true;
  616. },
  617. onEffectiveness: function (typeMod, target, type, move) {
  618. // The effectiveness of Freeze Dry on Water isn't reverted
  619. if (move && move.id === 'freezedry' && type === 'Water') return;
  620. if (move && !this.getImmunity(move, target)) return 1;
  621. return -typeMod;
  622. }
  623. },
  624. {
  625. name: "Almost Any Ability",
  626. section: "Other Metagames",
  627.  
  628. ruleset: ['Pokemon', 'Standard', 'Baton Pass Clause', 'Swagger Clause', 'Team Preview'],
  629. banlist: ['Ignore Illegal Abilities', 'Arceus', 'Archeops', 'Darkrai', 'Deoxys', 'Deoxys-Attack', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon',
  630. 'Ho-Oh', 'Keldeo', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Mewtwo', 'Palkia', 'Rayquaza', 'Regigigas',
  631. 'Reshiram', 'Shedinja + Sturdy', 'Slaking', 'Smeargle + Prankster', 'Weavile', 'Xerneas', 'Yveltal', 'Zekrom',
  632. 'Gengarite', 'Kangaskhanite', 'Lucarionite', 'Soul Dew'
  633. ],
  634. validateSet: function (set) {
  635. var bannedAbilities = {'Aerilate': 1, 'Arena Trap': 1, 'Contrary': 1, 'Fur Coat': 1, 'Huge Power': 1, 'Imposter': 1, 'Parental Bond': 1, 'Protean': 1, 'Pure Power': 1, 'Shadow Tag': 1, 'Simple':1, 'Speed Boost': 1, 'Wonder Guard': 1};
  636. if (set.ability in bannedAbilities) {
  637. var template = this.getTemplate(set.species || set.name);
  638. var legalAbility = false;
  639. for (var i in template.abilities) {
  640. if (set.ability === template.abilities[i]) legalAbility = true;
  641. }
  642. if (!legalAbility) return ['The ability ' + set.ability + ' is banned on Pokémon that do not naturally have it.'];
  643. }
  644. }
  645. },
  646. {
  647. name: "STABmons",
  648. section: "Other Metagames",
  649.  
  650. ruleset: ['Pokemon', 'Standard', 'Baton Pass Clause', 'Swagger Clause', 'Team Preview'],
  651. banlist: ['Ignore STAB Moves', 'Arceus', 'Blaziken', 'Deoxys', 'Deoxys-Attack', 'Dialga', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon',
  652. 'Ho-Oh', 'Kyogre', 'Kyurem-White', 'Lugia', 'Mewtwo', 'Palkia', 'Porygon-Z', 'Rayquaza', 'Reshiram', 'Shaymin-Sky',
  653. 'Sylveon', 'Xerneas', 'Yveltal', 'Zekrom', 'Gengarite', 'Kangaskhanite', 'Lucarionite', 'Mawilite', 'Soul Dew'
  654. ]
  655. },
  656. {
  657. name: "LC UU",
  658. section: "Other Metagames",
  659.  
  660. maxLevel: 5,
  661. ruleset: ['LC'],
  662. banlist: ['Abra', 'Aipom', 'Archen', 'Bellsprout', 'Bunnelby', 'Carvanha', 'Chinchou', 'Corphish', 'Cottonee', 'Cranidos',
  663. 'Croagunk', 'Diglett', 'Drilbur', 'Dwebble', 'Ferroseed', 'Fletchling', 'Foongus', 'Gastly', 'Honedge', 'Houndour',
  664. 'Larvesta', 'Lileep', 'Magnemite', 'Mienfoo', 'Misdreavus', 'Munchlax', 'Onix', 'Pawniard', 'Ponyta', 'Porygon',
  665. 'Scraggy', 'Snubbull', 'Spritzee', 'Staryu', 'Timburr', 'Tirtouga', 'Trubbish', 'Vullaby', 'Vulpix', 'Zigzagoon',
  666. 'Omanyte'
  667. ]
  668. },
  669. {
  670. name: "Averagemons",
  671. section: "Other Metagames",
  672.  
  673. mod: 'averagemons',
  674. searchShow: false,
  675. ruleset: ['Pokemon', 'Standard', 'Baton Pass Clause', 'Evasion Abilities Clause', 'Swagger Clause', 'Team Preview'],
  676. banlist: ['Shedinja', 'Smeargle', 'DeepSeaScale', 'DeepSeaTooth', 'Eviolite', 'Light Ball', 'Mawilite', 'Medichamite', 'Soul Dew', 'Thick Club', 'Huge Power', 'Pure Power']
  677. },
  678. {
  679. name: "Classic Hackmons",
  680. section: "Other Metagames",
  681.  
  682. searchShow: false,
  683. ruleset: ['HP Percentage Mod'],
  684. validateSet: function (set) {
  685. var template = this.getTemplate(set.species);
  686. var item = this.getItem(set.item);
  687. var problems = [];
  688.  
  689. if (set.species === set.name) delete set.name;
  690. if (template.isNonstandard) {
  691. problems.push(set.species + ' is not a real Pokemon.');
  692. }
  693. if (item.isNonstandard) {
  694. problems.push(item.name + ' is not a real item.');
  695. }
  696. var ability = {};
  697. if (set.ability) ability = this.getAbility(set.ability);
  698. if (ability.isNonstandard) {
  699. problems.push(ability.name + ' is not a real ability.');
  700. }
  701. if (set.moves) {
  702. for (var i = 0; i < set.moves.length; i++) {
  703. var move = this.getMove(set.moves[i]);
  704. if (move.isNonstandard) {
  705. problems.push(move.name + ' is not a real move.');
  706. }
  707. }
  708. if (set.moves.length > 4) {
  709. problems.push((set.name || set.species) + ' has more than four moves.');
  710. }
  711. }
  712. if (set.level && set.level > 100) {
  713. problems.push((set.name || set.species) + ' is higher than level 100.');
  714. }
  715. return problems;
  716. }
  717. },
  718. {
  719. name: "Hidden Type",
  720. section: "Other Metagames",
  721.  
  722. searchShow: false,
  723. mod: 'hiddentype',
  724. ruleset: ['OU']
  725. },
  726. {
  727. name: "Middle Cup",
  728. section: "Other Metagames",
  729.  
  730. searchShow: false,
  731. maxLevel: 50,
  732. defaultLevel: 50,
  733. validateSet: function (set) {
  734. var template = this.getTemplate(set.species || set.name);
  735. if (!template.evos || template.evos.length === 0 || !template.prevo) {
  736. return [set.species + " is not the middle Pokémon in an evolution chain."];
  737. }
  738. },
  739. ruleset: ['Pokemon', 'Standard', 'Team Preview'],
  740. banlist: ['Eviolite']
  741. },
  742. {
  743. name: "Sky Battle",
  744. section: "Other Metagames",
  745.  
  746. searchShow: false,
  747. validateSet: function (set) {
  748. var template = this.getTemplate(set.species || set.name);
  749. if (template.types.indexOf('Flying') === -1 && set.ability !== 'Levitate') {
  750. return [set.species + " is not a Flying type and does not have the ability Levitate."];
  751. }
  752. },
  753. ruleset: ['Pokemon', 'Standard', 'Evasion Abilities Clause', 'Team Preview'],
  754. banlist: ['Uber', 'Archen', 'Chatot', 'Delibird', 'Dodrio', 'Doduo', 'Ducklett', "Farfetch'd", 'Fletchling', 'Gastly',
  755. 'Gengar', 'Hawlucha', 'Hoothoot', 'Murkrow', 'Natu', 'Pidgey', 'Pidove', 'Rufflet', 'Shaymin-Sky', 'Spearow',
  756. 'Starly', 'Taillow', 'Vullaby', 'Iron Ball', 'Pinsirite', 'Soul Dew',
  757. 'Body Slam', 'Bulldoze', 'Dig', 'Dive', 'Earth Power', 'Earthquake', 'Electric Terrain', 'Fire Pledge', 'Fissure', 'Flying Press',
  758. 'Frenzy Plant', 'Geomancy', 'Grass Knot', 'Grass Pledge', 'Grassy Terrain', 'Gravity', 'Heat Crash', 'Heavy Slam', 'Ingrain', "Land's Wrath",
  759. 'Magnitude', 'Mat Block', 'Misty Terrain', 'Mud Sport', 'Muddy Water', 'Rototiller', 'Seismic Toss', 'Slam', 'Smack Down', 'Spikes',
  760. 'Stomp', 'Substitute', 'Surf', 'Toxic Spikes', 'Water Pledge', 'Water Sport'
  761. ]
  762. },
  763. {
  764. name: "Gen-NEXT OU",
  765. section: "Other Metagames",
  766.  
  767. mod: 'gennext',
  768. searchShow: false,
  769. ruleset: ['Pokemon', 'Standard NEXT', 'Team Preview'],
  770. banlist: ['Uber']
  771. },
  772. {
  773. name: "Stat Switch",
  774. section: "New Other Metagames",
  775. column: 3,
  776. mod: "statswitch",
  777. ruleset: ['OU'],
  778. banlist: []
  779. },
  780. {
  781. name: "Reliablemons",
  782. section: "New Other Metagames",
  783.  
  784. ruleset: ['Pokemon', 'Standard', 'Team Preview'],
  785. banlist: ['Uber', 'Soul Dew', 'Gengarite', 'Kangaskhanite', 'Lucarionite'],
  786. onModifyMove: function(move, pokemon) {
  787. var moves = pokemon.moves;
  788. if (move.id === moves[0]) {
  789. var cheese = 0;
  790. var crackers = true;
  791. } else if (move.id === moves[1] && pokemon.typesData[1]) {
  792. var cheese = 1;
  793. var crackers = true;
  794. } else {
  795. var crackers = false;
  796. }
  797. if (crackers) {
  798. move.type = pokemon.typesData[cheese].type;
  799. }
  800. }
  801. },
  802. {
  803. name: "Immunimons",
  804. section: "New Other Metagames",
  805.  
  806. ruleset: ['OU'],
  807. banlist: [],
  808. onTryHit: function (target, source, move) {
  809. if (target === source || move.type === '???' || move.id === 'struggle') return;
  810. if (target.hasType(move.type)) {
  811. this.add('-debug','immunimons immunity [' + move.id + ']');
  812. return null;
  813. }
  814. },
  815. onDamage: function (damage, target, source, effect) {
  816. if ((source.hasType('Rock') && effect.id === 'stealthrock') || (source.hasType('Ground') && effect.id === 'spikes')) {
  817. this.add('-debug','immunimons immunity [' + effect.id + ']');
  818. return false;
  819. }
  820. },
  821. },
  822. {
  823. name: "Playstyle Reversal",
  824. section: "New Other Metagames",
  825.  
  826. ruleset: ['Pokemon', 'Standard', 'Team Preview', 'Swagger Clause', 'Baton Pass Clause'],
  827. banlist: ['Uber', 'Soul Dew', 'Gengarite', 'Kangaskhanite', 'Lucarionite', 'Mawilite'],
  828. onModifyMove: function (move) {
  829. if (move && move.self) {
  830. if (move.category === "Status") {
  831. move.onHit = function(source) {
  832. return this.boost({atk: 1, spa: 1, def: -1, spd: -1});
  833. }
  834. } else {
  835. move.onHit = function(attacker, defender) {
  836. return this.boost({atk: -1, spa: -1, def: 1, spd: 1}, defender, attacker);
  837. }
  838. }
  839. } else if (move && move.category === "Status") {
  840. if (move.target === "self" && move.boosts) {
  841. move.self = {boosts: {atk: -1, spa: -1, def: 1, spd: 1}};
  842. } else {
  843. move.self = {boosts: {atk: 1, spa: 1, def: -1, spd: -1}};
  844. }
  845. } else if (move) {
  846. move.self = {boosts: {atk: -1, spa: -1, def: 1, spd: 1}};
  847. }
  848. }
  849. }
  850. ];
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement