SHARE
TWEET

SSB:OM Code

Pikachuun Apr 4th, 2015 (edited) 397 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. [You may want to replace all "    " with "      ".]
  2.  
  3.  
  4. data/scripts.js
  5. ------------------------------------------------------------------------------------
  6.         randomOMAuthTeam: function (side) {
  7.                  var team = [];
  8.                  var variant = this.random(5);
  9.                  // Hardcoded sets of the available Pokémon.
  10.                  var sets = {
  11.                           // RO/Admins.
  12.                           '#Eevee General': {
  13.                                    species: 'Eevee', ability: 'Magic Guard', item: 'Eviolite', gender: 'M', shiny: true,
  14.                                    moves: [['shiftgear', 'shiftgear', 'shiftgear', 'shiftgear', 'quiverdance', 'quiverdance', 'quiverdance', 'quiverdance', 'quiverdance'][this.random(9)], 'healorder', 'swift'],
  15.                                    baseSignatureMove: 'babydolleyes', signatureMove: "War Crimes",
  16.                                    evs: {hp:252, atk:88, spa:168}, nature: 'Relaxed'
  17.                           },
  18.                           '#hollywood': {
  19.                                    species: 'Mr. Mime', ability: 'Prankster', item: 'Leftovers', gender: 'M', shiny: true,
  20.                                    moves: ['batonpass', ['substitute', 'milkdrink'][this.random(2)], 'encore'],
  21.                                    baseSignatureMove: 'geomancy', signatureMove: "Meme Mime",
  22.                                    evs: {hp:252, def:4, spe:252}, nature: 'Timid'
  23.                           },
  24.                           '#Joim': {
  25.                                    species: 'Zapdos', ability: 'Download', item: 'Leftovers', gender: 'M', shiny: true,
  26.                                    moves: ['thunderbolt', 'hurricane', ['earthpower', 'roost', 'flamethrower', 'worryseed', 'haze', 'spore'][this.random(6)]],
  27.                                    baseSignatureMove: 'milkdrink', signatureMove: "Red Bull Drink",
  28.                                    evs: {hp:4, spa:252, spe:252}, nature: 'Modest'
  29.                           },
  30.                           '~The Immortal': {
  31.                                    species: 'Hoopa-Unbound', ability: 'Prankster', item: 'Dread Plate', gender: 'M', shiny: true,
  32.                                    moves: ['substitute', 'copycat', 'encore'],
  33.                                    baseSignatureMove: 'nightslash', signatureMove: "Primordial Force",
  34.                                    evs: {hp:248, atk:252, spd:8}, ivs: {spe:0}, nature: 'Brave'
  35.                           },
  36.                           // Leaders.
  37.                           '&verbatim': {
  38.                                    species: 'Archeops', ability: 'Reckless', item: 'Life Orb', gender: 'M',
  39.                                    moves: ['headsmash', 'highjumpkick', 'flareblitz', 'volttackle', 'woodhammer'],
  40.                                    baseSignatureMove: 'bravebird', signatureMove: "Glass Cannon",
  41.                                    evs: {hp:4, atk:252, spe:252}, nature: 'Jolly'
  42.                           },
  43.                           '&xfix': {
  44.                                    species: 'Xatu', ability: 'Magic Bounce', item: 'Focus Sash', gender: 'M',
  45.                                    moves: ['thunderwave', 'substitute', 'roost'],
  46.                                    baseSignatureMove: 'metronome', signatureMove: "(Super Glitch)",
  47.                                    evs: {hp:252, spd:252, def:4}, nature: 'Calm'
  48.                           },
  49.                           // Mods.
  50.                           '@Adrian Marin BH': {
  51.                                    species: 'Mr. Mime', ability: 'Poison Heal', item: 'Leftovers', gender: 'M',
  52.                                    moves: [['partingshot','batonpass','voltswitch','uturn'][this.random(4)], 'topsyturvy', ['kingsshield','spikyshield'][this.random(2)], 'defog', 'stealthrock', 'willowisp', 'metalburst', 'destinybond'],
  53.                                    baseSignatureMove: 'milkdrink', signatureMove: "Paranoid Stall",
  54.                                    evs: {hp:248, def:252, spd:8}, ivs: {atk:0}, nature: 'Bold'
  55.                           },
  56.                           '@Arcticblast': {
  57.                                    species: 'Cresselia', ability: 'Levitate', item: 'Sitrus Berry', gender: 'M',
  58.                                    moves: [
  59.                                                 ['fakeout', 'icywind', 'trickroom', 'safeguard', 'thunderwave', 'tailwind', 'knockoff'][this.random(7)],
  60.                                                 ['sunnyday', 'moonlight', 'calmmind', 'protect', 'taunt'][this.random(5)],
  61.                                                 ['originpulse', 'heatwave', 'hypervoice', 'icebeam', 'moonblast'][this.random(5)]
  62.                                    ],
  63.                                    baseSignatureMove: 'psychoboost', signatureMove: "Doubles Purism",
  64.                                    evs: {hp:252, def:120, spa:56, spd:80}, nature: 'Sassy'
  65.                           },
  66.                           '@BetaHousing': {
  67.                                    species: 'Azumarill', ability: 'Poison Heal', item: 'Toxic Orb', gender: 'M',
  68.                                    moves: ['protect', ['perishsong','knockoff','toxic'][this.random(3)], ['scald','whirlpool','moonblast'][this.random(3)]],
  69.                                    baseSignatureMove: 'calmmind', signatureMove: "Drink's Up!",
  70.                                    evs: {hp:252, def:252, spe:4}, nature: 'Bold'
  71.                           },
  72.                           '@Dell': {
  73.                                    species: 'Lucario', ability: 'Simple', item: 'Lucarionite', gender: 'M',
  74.                                    moves: ['jumpkick', ['flashcannon', 'bulletpunch'][this.random(2)], 'batonpass'],
  75.                                    baseSignatureMove: 'detect', signatureMove: "Aura Parry",
  76.                                    evs: {hp:4, atk:216, spa:36, spe:252}, nature: 'Naive'
  77.                           },
  78.                           '@imas234': {
  79.                                    species: 'Swirlix', ability: 'Run Away', item: 'Brightpowder', gender: 'M',
  80.                                    moves: [['bodyslam', 'glare', 'bodyslam', 'bodyslam'][this.random(4)], ['playrough', 'foulplay'][this.random(2)], 'swagger'],
  81.                                    baseSignatureMove: 'defensecurl', signatureMove: "Defense Swirl",
  82.                                    evs: {hp:248, def:128, spd:128}, nature: 'Impish'
  83.                           },
  84.                           '@manu 11': {
  85.                                    species: 'Surskit', ability: 'Torrent', item: 'Life Orb', gender: 'M',
  86.                                    moves: ['steameruption', 'bugbuzz', 'quiverdance'],
  87.                                    baseSignatureMove: 'hydropump', signatureMove: "Surskit Energy",
  88.                                    evs: {spa:252, spe:252, def:4}, nature: 'Mild'
  89.                           },
  90.                           '@piccolo': {
  91.                                    species: 'Xerneas', ability: 'White Smoke', item: 'Weed', gender: 'M',
  92.                                    moves: ['fusionflare', 'moonblast', 'synthesis'],
  93.                                    baseSignatureMove: 'leafstorm', signatureMove: "dank kush",
  94.                                    evs: {hp:248, spa:252, def:8}, nature: 'Rash'
  95.                           },
  96.                           '@rekeri': {
  97.                                    species: 'Tyrantrum', ability: 'Tough Claws', item: 'Life Orb', gender: 'M',
  98.                                    moves: ['outrage', 'extremespeed', 'stoneedge', 'closecombat'],
  99.                                    baseSignatureMove: 'headcharge', signatureMove: "Land Before Time",
  100.                                    evs: {hp:252, atk:252, def:4}, nature: 'Adamant'
  101.                           },
  102.                           '@RosieTheVenusaur': {
  103.                                    species: 'Venusaur', ability: 'Moxie', item: 'Leftovers', gender: 'F',
  104.                                    moves: ['flamethrower', 'extremespeed', 'sacredfire', 'knockoff', 'closecombat'],
  105.                                    baseSignatureMove: 'frenzyplant', signatureMove: "Swag Plant",
  106.                                    evs: {hp:252, atk:252, def:4}, nature: 'Adamant'
  107.                           },
  108.                           '@Snaquaza': {
  109.                                    species: 'Rayquaza', ability: 'Air Lock', item: ['redorb', 'blueorb'][this.random(2)], gender: 'M',
  110.                                    moves: ['dragonascent', 'earthquake', ['outrage', 'extremespeed'][this.random(2)]],
  111.                                    baseSignatureMove: 'selfdestruct', signatureMove: "Ascension",
  112.                                    evs: {hp:4, atk:252, spe:252}, nature: 'Jolly'
  113.                           },
  114.                           '@unfixable': {
  115.                                    species: 'Cacnea', ability: 'Iron Barbs', item: 'Eviolite', gender: 'M',
  116.                                    moves: ['gigadrain', 'spikes', 'icebeam'],
  117.                                    baseSignatureMove: 'growl', signatureMove: "Wrath of Cacnea",
  118.                                    evs: {hp:252, spa:252, atk:4}, nature: 'Quiet'
  119.                           },
  120.                           '@uselesscrab': {
  121.                                    species: 'Krabby', ability: 'Illuminate', item: 'Poke Ball', gender: 'M',
  122.                                    moves: ['celebrate', 'holdhands', 'happyhour'],
  123.                                    baseSignatureMove: 'splash', signatureMove: "Splash",
  124.                                    evs: {hp:1}, ivs: {hp:0, atk:0, def:0, spa:0, spd:0, spe:0}, nature: 'Quirky'
  125.                           },
  126.                           // Drivers.
  127.                           '%E4 Flint': {
  128.                                    species: 'Deoxys-Attack', ability: 'Tough Claws', item: 'Expert Belt', gender: 'M',
  129.                                    moves: ['psychoboost', 'superpower', 'leafstorm', 'overheat', 'dracometeor', 'dragonascent', 'vcreate'],
  130.                                    baseSignatureMove: 'psystrike', signatureMove: "Hyper Offense",
  131.                                    evs: {spa:252, atk:4, spe:252}, nature: "Hasty"
  132.                           },
  133.                           '%Hack Guy': {
  134.                                    species: 'Victini', ability: 'Victory Star', item: 'Choice Scarf', gender: 'M',
  135.                                    moves: ['vcreate', 'fusionbolt', 'switcheroo'],
  136.                                    baseSignatureMove: 'agility', signatureMove: "GOTTA GO FAST",
  137.                                    evs: {atk:252, spa:4, spe:252}, ivs: {spe:8}, nature: "Jolly"
  138.                           },
  139.                           '%Kid Wizard': {
  140.                                    species: 'Delphox', ability: 'Magic Guard', item: 'Life Orb', gender: 'M',
  141.                                    moves: ['lavaplume', 'psystrike', 'healorder', 'steameruption'],
  142.                                    baseSignatureMove: 'tailwhip', signatureMove: "Broken Wand",
  143.                                    evs: {spa:252, spd:4, spe:252}, nature: "Timid"
  144.                           },
  145.                           '%Kl4ng': {
  146.                                    species: 'Klang', ability: 'Technician', item: 'Eviolite', gender: 'M',
  147.                                    moves: ['shiftgear', 'flareblitz', 'healorder'],
  148.                                    baseSignatureMove: 'geargrind', signatureMove: "Flint Grinder",
  149.                                    evs: {hp:252, atk:252, def:4}, nature: "Adamant"
  150.                           },
  151.                           '%Peef Rimgar': {
  152.                                    species: 'Beartic', ability: 'Refrigerate', item: 'Chill Drive', gender: 'M',
  153.                                    moves: ['extremespeed', ['wildcharge','flamecharge','petalblizzard','wildcharge','flamecharge','petalblizzard','swordsdance'][this.random(7)], 'kingsshield'],
  154.                                    baseSignatureMove: 'attract', signatureMove: "Gay Agenda",
  155.                                    evs: {hp:248, atk:252, def:8}, nature: 'Naughty'
  156.                           },
  157.                           '%Pikachuun': {
  158.                                    species: 'Pikachu', ability: 'Magic Guard', item: 'Life Orb', gender: 'M',
  159.                                    moves: ['volttackle', ['moonblast', 'icebeam', 'flamethrower', 'psychic'][this.random(4)], ['playrough', 'knockoff', 'ironhead', 'closecombat'][this.random(4)]],
  160.                                    baseSignatureMove: 'metronome', signatureMove: "Moonspeak",
  161.                                    evs: {atk:252, spa:4, spe:252}, nature: 'Hasty'
  162.                           },
  163.                           '%QuoteCS': {
  164.                                    species: 'Skarmory', ability: 'Adaptability', item: 'Life Orb', gender: 'M',
  165.                                    moves: ['meteormash', 'bravebird', 'roost'],
  166.                                    baseSignatureMove: 'spikes', signatureMove: "Diversify",
  167.                                    evs: {hp:248, atk:252, spe:8}, nature: 'Adamant'
  168.                           },
  169.                           '%SpartanMalice': {
  170.                                    species: 'Charizard', ability: 'Magic Guard', item: 'Expert Belt', gender: 'M',
  171.                                    moves: ['flareblitz', 'outrage', 'dragondance'],
  172.                                    baseSignatureMove: 'roost', signatureMove: "Theorymon",
  173.                                    evs: {atk:252, spd:4, spe:252}, nature: 'Adamant'
  174.                           },
  175.                           '%Zodiax': {
  176.                                    species: 'Medicham', ability: 'Illuminate', item: 'Medichamite', gender: 'M',
  177.                                    moves: ['highjumpkick', 'zenheadbutt', 'fakeout'],
  178.                                    baseSignatureMove: 'eggbomb', signatureMove: "Protean Shake",
  179.                                    evs: {atk:252, def:4, spe:252}, nature: 'Jolly'
  180.                           },
  181.                           // Voices.
  182.  
  183.                           '+aesf': {
  184.                                    species: 'Groudon', ability: 'Prankster', item: 'Choice Band', gender: 'M',
  185.                                    moves: [['switcheroo','trick'][this.random(2)], 'focuspunch', ['dragontail','circlethrow','roar','whirlwind'][this.random(2)], 'thief', ['protect','spikyshield','kingsshield'][this.random(2)], 'mefirst', 'metronome', 'mimic', 'destinybond', 'chatter', 'mirrormove'],
  186.                                    baseSignatureMove: 'assist', signatureMove: "Assist",
  187.                                    evs: {hp:248, atk:252, def:8}, nature: 'Adamant'
  188.                           },
  189.                           '+CactusCacti': {
  190.                                    species: 'Maractus', ability: 'Iron Barbs', item: 'Rocky Helmet', gender: 'M',
  191.                                    moves: ['spikyshield', 'spikes', 'toxicspikes'],
  192.                                    baseSignatureMove: 'spikecannon', signatureMove: "Spike Canon",
  193.                                    evs: {atk:252, def:252, spe:4}, nature: 'Naughty'
  194.                           },
  195.                           '+Dream Eater Gengar': {
  196.                                    species: 'Gengar', ability: ((!variant) ? 'Illuminate' : 'Bad Dreams'), item: ((!variant) ? 'Poke Ball' : 'Life Orb'), gender: 'M',
  197.                                    moves: ((!variant) ? [] : ['dreameater', 'darkvoid', 'sludgewave']),
  198.                                    baseSignatureMove: ((!variant) ? 'splash' : 'meanlook'), signatureMove: ((!variant) ? 'NOT ARCHEOPS!!!' : '1v1 me bro'),
  199.                                    evs: {spa:252, def:4, spe:252}, nature: 'Timid'
  200.                           },
  201.                           '+DreMZ': {
  202.                                    species: 'Oddish', ability: 'Turboblaze', item: 'Weed', gender: 'M',
  203.                                    moves: ['blazekick', 'seedbomb', 'aromatherapy'],
  204.                                    baseSignatureMove: 'razorleaf', signatureMove: "420 BLAZE IT",
  205.                                    evs: {atk:252, spd:4, spe:252}, nature: 'Jolly'
  206.                           },
  207.                           '+Illusio': {
  208.                                    species: 'Chatot', ability: 'Illusion', item: 'Light Clay', gender: 'M',
  209.                                    moves: ['roost', 'reflect', 'lightscreen'],
  210.                                    baseSignatureMove: 'chatter', signatureMove: "Name Change",
  211.                                    evs: {hp:248, def:8, spd:252}, nature: 'Calm'
  212.                           },
  213.                           '+imanalt': {
  214.                                    species: 'Rhydon', ability: 'Prankster', item: 'Eviolite', gender: 'M',
  215.                                    moves: ['heartswap', 'rockblast', 'stealthrock', 'substitute', 'batonpass'],
  216.                                    baseSignatureMove: 'naturepower', signatureMove: "FREE GENV BH",
  217.                                    evs: {hp:252, atk:252, spd:4}, nature: 'Adamant'
  218.                           },
  219.                           '+insanelegend': {
  220.                                    species: 'Bidoof', ability: 'Forewarn', item: 'Lagging Tail', gender: 'M',
  221.                                    moves: ['psystrike', 'aeroblast', 'sacredfire', 'mistball', 'lusterpurge', 'precipiceblades', 'originpulse', 'dragonascent', 'doomdesire', 'psychoboost', 'roaroftime', 'spacialrend', 'magmastorm', 'crushgrip', 'shadowforce', 'lunardance', 'heartswap', 'darkvoid', 'seedflare', 'judgment', 'vcreate', 'sacredsword', 'fusionflare', 'blueflare', 'fusionbolt', 'boltstrike', 'glaciate', 'iceburn', 'freezeshock', 'secretsword', 'relicsong', 'technoblast', 'geomancy', 'oblivionwing', 'landswrath', 'thousandwaves', 'thousandarrows', 'diamondstorm', 'hyperspacehole', 'hyperspacefury', 'steameruption'],
  222.                                    baseSignatureMove: 'infestation', signatureMove: "Bidoof Army", //"Seems Decent", //Specs melo is so terribadly strong
  223.                                    evs: {hp:248, def:252, atk:8}, nature: 'Relaxed'
  224.                           },
  225.                           /*'+jeran': {
  226.                                    species: 'Bellossom', ability: 'Solid Rock', item: 'Life Orb', gender: 'M',
  227.                                    moves: ['recover', ['swordsdance','partingshot','swordsdance','partingshot','celebrate'][this.random(5)], 'meteormash'],
  228.                                    baseSignatureMove: 'woodhammer', signatureMove: "",
  229.                                    evs: {hp:248, atk:252, spd:8}, nature: 'Adamant'
  230.                           },*/
  231.                           '+Kit Kasai': {
  232.                                    species: 'Chandelure', ability: 'Illusion', item: 'Spooky Plate', gender: 'F',
  233.                                    moves: ['calmmind', 'secretsword', 'technoblast', 'infestation'],
  234.                                    baseSignatureMove: 'judgment', signatureMove: "Kagome Kagome",
  235.                                    evs: {hp:248, spa:252, spe:8}, ivs: {atk:0}, nature: 'Modest'
  236.                           },
  237.                           '+lcass4919': {
  238.                                    species: 'Xatu', ability: 'Aerilate', item: 'Wise Glasses', gender: 'M',
  239.                                    moves: ['hypervoice', 'psystrike', 'roost'],
  240.                                    baseSignatureMove: 'boomburst', signatureMove: "Smiting of Xatu",
  241.                                    evs: {spe:252, spa:252, def:4}, nature: 'Timid'
  242.                           },
  243.                           '+Leafshield': {
  244.                                    species: 'Sceptile', ability: 'Drought', item: 'Sceptilite', gender: 'M',
  245.                                    moves: [['swordsdance','dragondance'][this.random(2)], 'leafblade', ['leafstorm','dracometeor'][this.random(2)]],
  246.                                    baseSignatureMove: 'spikyshield', signatureMove: "Leaf Shield",
  247.                                    evs: {spe:252, atk:252, spa:4}, nature: 'Naughty'
  248.                           },
  249.                           '+Misaka Mikoto': { //Lucina09
  250.                                    species: 'Minccino', ability: 'Cute Charm', item: 'Life Orb', gender: 'F',
  251.                                    moves: ['return', 'knockoff', ['gunkshot','encore'][this.random(2)]],
  252.                                    baseSignatureMove: 'playrough', signatureMove: "Anime Girl",
  253.                                    evs: {atk:252, def:4, spe:252}, nature: 'Jolly'
  254.                           },
  255.                           '+Mamp': {
  256.                                    species: 'Ampharos', ability: 'Adaptability', item: 'Cell Battery', gender: 'M',
  257.                                    moves: ['thunderbolt', 'focusblast', 'geomancy'],
  258.                                    baseSignatureMove: 'present', signatureMove: "Rare Pepe",
  259.                                    evs: {def:4, spa:252, spe:252}, nature: 'Timid'
  260.                           },
  261.                           '+Ransei': {
  262.                                    species: 'Arceus', ability: 'Pick Up', item: 'Black Glasses', gender: 'M',
  263.                                    moves: [['holdhands', 'trickortreat'][this.random(2)], ['swordsdance', 'agility'][this.random(2)], 'celebrate'],
  264.                                    baseSignatureMove: 'splash', signatureMove: "Alt Change",
  265.                                    evs: {hp:4, atk:252, spe:252}, nature: 'Jolly'
  266.                           },
  267.                           '+shaymin': {
  268.                                    species: 'Shaymin-Sky', ability: 'Serene Grace', item: 'Expert Belt', gender: 'F',
  269.                                    moves: ['seedflare', 'airslash', ['secretsword', 'earthpower', 'roost'][this.random(3)]],
  270.                                    baseSignatureMove: 'detect', signatureMove: "Flower Garden",
  271.                                    evs: {hp:4, spa:252, spe:252}, nature: 'Timid'
  272.                           },
  273.                           '+TheBurgerKing99': {
  274.                                    species: 'Carbink', ability: 'Sturdy', item: 'Burger', gender: 'M',
  275.                                    moves: ['moonblast', 'earthpower', ['stealthrock', 'powergem'][this.random(2)]],
  276.                                    baseSignatureMove: 'powertrick', signatureMove: "Stat Switch",
  277.                                    evs: {def:4, spa:252, spe:252}, nature: 'Timid'
  278.                           },
  279.                          
  280.                           // Regulars who are active enough to warrant this, since there aren't enough staff
  281.                           ' 0Loyd0': {
  282.                                    species: 'Blaziken', ability: 'No Guard', item: 'Expert Belt', gender: 'M',
  283.                                    moves: ['skyuppercut', 'blazekick', 'dive'],
  284.                                    baseSignatureMove: 'focuspunch', signatureMove: "Falcon Punch",
  285.                                    evs: {atk:252, def:4, spe:252}, nature: 'Adamant'
  286.                           },
  287.                           ' boTTT': {
  288.                                    species: 'Registeel', ability: 'Flash Fire', item: 'Leftovers', gender: 'M',
  289.                                    moves: ['recover', 'ironhead', 'bellydrum'],
  290.                                    baseSignatureMove: 'taunt', signatureMove: "Bot Mute",
  291.                                    evs: {hp:252, atk:252, def:4}, nature: 'Adamant'
  292.                           },
  293.                           ' ChoonBot': {
  294.                                    species: 'Pichu', ability: 'Filter', item: 'Eviolite', gender: 'M',
  295.                                    moves: ['milkdrink', 'thunderbolt', 'icebeam'],
  296.                                    baseSignatureMove: 'discharge', signatureMove: "$dicegame",
  297.                                    evs: {def:252, satk:252, spe:4}, nature: 'Modest'
  298.                           },
  299.                           ' Other Metagames': {
  300.                                    species: 'Porygon2', ability: 'Illuminate', item: 'Eviolite', gender: 'N',
  301.                                    moves: ['recover', 'icebeam', 'thunderbolt'],
  302.                                    baseSignatureMove: 'bide', signatureMove: "Battly Move",
  303.                                    evs: {hp:248, def:100, spd:160}, nature: 'Bold'
  304.                           },
  305.                           ' word': {
  306.                                    species: 'Slowking', ability: 'Unaware', item: 'Leftovers', gender: 'M',
  307.                                    moves: ['scald', ['fireblast','trickroom','icebeam'][this.random(3)], ['psychic','psyshock','slackoff'][this.random(3)]],
  308.                                    baseSignatureMove: 'partingshot', signatureMove: "Tour Win",
  309.                                    evs: {hp:248, def:8, spd:252}, nature: 'Calm'
  310.                           }
  311.                  };
  312.                  // Generate the team randomly.
  313.                  var pool = Object.keys(sets).randomize();
  314.                  var ranks = {'~':'admins', '#':'owners', '&':'leaders', '@':'mods', '%':'drivers', '+':'voices'};
  315.                  var levels = {'~':99, '#':99, '&':98, '@':97, '%':96, '+':95, ' ':94};
  316.                  for (var i = 0; i < 6; i++) {
  317.                           var rank = pool[i].charAt(0);
  318.                           var set = sets[pool[i]];
  319.                           set.level = levels[rank];
  320.                           set.name = pool[i];
  321.                           if (!set.ivs) {
  322.                                    set.ivs = {hp:31, atk:31, def:31, spa:31, spd:31, spe:31};
  323.                           } else {
  324.                                    for (var iv in {hp:31, atk:31, def:31, spa:31, spd:31, spe:31}) {
  325.                                                 set.ivs[iv] = set.ivs[iv] ? set.ivs[iv] : 31;
  326.                                    }
  327.                           }
  328.                           // EVs may or may not be legal... but they probably are.
  329.                           if (!set.evs) set.evs = {hp:84, atk:84, def:84, spa:84, spd:84, spe:84};
  330.                           var moves = set.moves;
  331.                           set.moves = (moves) ? set.moves.sample(3).concat(set.baseSignatureMove) : [set.baseSignatureMove];
  332.                           team.push(set);
  333.                  }
  334.  
  335.                  // Check for Illusion.
  336.                  if ((team[5].name === '+Illusio' && team[4].name === '+Kit Kasai') || (team[4].name === '+Illusio' && team[5].name === '+Kit Kasai')) {
  337.                           var temp = team[3];
  338.                           team[3] = team[5];
  339.                           team[5] = temp;
  340.                  } else if (team[5].name === '+Illusio' || team[5].name === '+Kit Kasai') {
  341.                           var temp = team[4];
  342.                           team[4] = team[5];
  343.                           team[5] = temp;
  344.                  }
  345.  
  346.                  return team;
  347.         },
  348.    
  349. ============================================================================================
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367. config/formats.js
  368. --------------------------------------------------------------------------------------------
  369.         {
  370.                 name: "Super Staff Bros.: Other Metas",
  371.                 desc: ["&bullet; <a href=\"https://www.smogon.com/forums/threads/3535545/\">Super Staff Bros. Other Metagames</a>"],
  372.                 section: "Choon-Approved Metagames",
  373.                
  374.                 team: 'randomOMAuth',
  375.                 ruleset: ['Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'],
  376.                 onBegin: function () {
  377.                         // This seasonal gets a bit from Super Smash Bros., that's where the initial message comes from.
  378.                         this.add('message', "GET READY FOR THE NEXT BATTLE!");
  379.                         // This link leads to a post where all signature moves can be found so the user can use this resource while battling.
  380.                         this.add("raw|Shiny and new help for moves can be found <a href='http://www.smogon.com/forums/posts/6162953'>here.</a>");
  381.                         // This variable saves the status of a spammy conversation to be played, so it's only played once.
  382.                         this.convoPlayed = false;
  383.  
  384.                         // This code here is used for the renaming of moves showing properly on client.
  385.                         var globalRenamedMoves = {
  386.                                 'defog': "Defrog"
  387.                         };
  388.                         var customRenamedMoves = {};
  389.                         var allPokemon = this.p1.pokemon.concat(this.p2.pokemon);
  390.  
  391.                         for (var i = 0, len = allPokemon.length; i < len; i++) {
  392.                                 var pokemon = allPokemon[i];
  393.                                 var last = pokemon.moves.length - 1;
  394.                                 if (pokemon.moves[last]) {
  395.                                         pokemon.moves[last] = toId(pokemon.set.signatureMove);
  396.                                         pokemon.moveset[last].move = pokemon.set.signatureMove;
  397.                                         pokemon.baseMoveset[last].move = pokemon.set.signatureMove;
  398.                                 }
  399.                                 for (var j = 0; j < pokemon.moveset.length; j++) {
  400.                                         var moveData = pokemon.moveset[j];
  401.                                         if (globalRenamedMoves[moveData.id]) {
  402.                                                 pokemon.moves[j] = toId(pokemon.set.signatureMove);
  403.                                                 moveData.move = globalRenamedMoves[moveData.id];
  404.                                                 pokemon.baseMoveset[j].move = globalRenamedMoves[moveData.id];
  405.                                         }
  406.                                         if (customRenamedMoves[pokemon.name] && customRenamedMoves[pokemon.name][moveData.id]) {
  407.                                                 pokemon.moves[j] = toId(pokemon.set.signatureMove);
  408.                                                 moveData.move = customRenamedMoves[pokemon.name][moveData.id];
  409.                                                 pokemon.baseMoveset[j].move = customRenamedMoves[pokemon.name][moveData.id];
  410.                                         }
  411.                                 }
  412.                                 if (pokemon.name === '%Pikachuun') {
  413.                                         var hprat = pokemon.hp/pokemon.maxhp;
  414.                                         pokemon.baseStats = {atk:348, def:155, spa:266, spd:207, spe:419};
  415.                                         pokemon.maxhp = 270;
  416.                                         pokemon.hp = Math.floor(pokemon.maxhp*hprat);
  417.                                         //This corresponds to 70 / 132 / 72 / 120 / 90 / 149 Stats, because I keep forgetting them...
  418.                                 }
  419.                                 if (pokemon.name === '+insanelegend') {
  420.                                         var hprat = pokemon.hp/pokemon.maxhp;
  421.                                         pokemon.baseStats = {atk:150, def:217, spa:129, spd:138, spe:108};
  422.                                         pokemon.maxhp = 334;
  423.                                         pokemon.hp = Math.floor(pokemon.maxhp*hprat);
  424.                                 }
  425.                                 if (pokemon.name === ' Other Metagames') {
  426.                                         pokemon.battly = ['Hidden Type', 'Balanced Hackmons', '1v1', 'Tier Shift', 'Almost Any Ability', 'STABmons'][this.random(6)];
  427.                                         pokemon.shift = 0;
  428.                                         pokemon.activated = false;
  429.                                 }
  430.                                 if (pokemon.name === '%SpartanMalice') {
  431.                                         pokemon.theory = ['STABmons', 'Almost Any Ability', 'Tier Shift', '1v1'][this.random(4)];
  432.                                         pokemon.shift = 0;
  433.                                         pokemon.baseStats = {atk:343, def:217, spa:226, spd:195, spe:284};
  434.                                 }
  435.                                 if (pokemon.name === '+TheBurgerKing99') {
  436.                                         pokemon.statSwitch = false;
  437.                                 }
  438.                         }
  439.                 },
  440.                 // Here we add some flavour or design immunities.
  441.                 onImmunity: function (type, pokemon) {
  442.                         //stuff
  443.                 },
  444.                 // Hacks for megas changed abilities. This allow for their changed abilities.
  445.                 onUpdate: function (pokemon, target) {
  446.                         var name = toId(pokemon.name);
  447.  
  448.                         if (pokemon.template.isMega) {
  449.                                 if (name === 'snaquaza' && !pokemon.ascensionCount && !pokemon.ascended) {
  450.                                         pokemon.ascensionCount = -1;
  451.                                 }
  452.                                 if (name === 'leafshield' && pokemon.getAbility().id === 'lightningrod') {
  453.                                         pokemon.setAbility('chlorophyll');
  454.                                         this.add('-ability', pokemon, pokemon.ability);
  455.                                 }
  456.                         }
  457.                 },
  458.                 // Here we treat many things, read comments inside for information.
  459.                 onSwitchIn: function (pokemon) {
  460.                         var name = toId(pokemon.illusion ? pokemon.illusion.name : pokemon.name);
  461.                         if (pokemon.marked && pokemon.marked > 0) { //Pikachuun's 11th Moonspeak Move
  462.                                 this.add('-message', "活性化されたマーキング!");
  463.                                 if (pokemon.ability === 'sturdy' && pokemon.marked >= pokemon.maxhp && pokemon.hp === pokemon.maxhp) pokemon.ability = 'nullified';
  464.                                 if ((pokemon.item === 'focussash' && pokemon.marked >= pokemon.maxhp && pokemon.hp === pokemon.maxhp) || pokemon.item === 'focusband') pokemon.item = 'nullified';
  465.                                 this.moveHit(pokemon, pokemon, 'moonspeak', {damage: pokemon.marked});
  466.                                 pokemon.marked = 0;
  467.                         }
  468.                         if (pokemon.side.ascensionBoost) {
  469.                                 var aB = pokemon.side.ascensionBoost;
  470.                                 if (aB > 1) {
  471.                                         this.add('-message', "@Snaquaza couldn't have been stopped from ascending early!");
  472.                                         aB = 1;
  473.                                         var potato = 'ascended snek';
  474.                                         this.boost({atk:aB, spa:aB, spe:aB, accuracy:aB}, pokemon, pokemon, potato);
  475.                                 } else if (aB < 1) {
  476.                                         this.add('-message', "@Snaquaza gets his revenge for not ascending on time!");
  477.                                         aB = -2;
  478.                                         var potato = 'banned snek';
  479.                                         this.boost({atk:aB, def:aB, spa:aB, spd:aB, spe:aB, accuracy:aB}, pokemon, pokemon, potato);
  480.                                 }
  481.                                 pokemon.side.ascensionBoost = 0;
  482.                         }
  483.                         //Tour Win
  484.                         if (pokemon.side.getSideCondition('tourwin')) {
  485.                                 this.boost({spe:1}, pokemon, pokemon, 'tour win');
  486.                                 pokemon.side.removeSideCondition('tourwin');
  487.                         }
  488.                         // No OP pls. Balance stuff, changing them upon switch in. Wonder Guard gets curse to minimise their turns out.
  489.                         if (pokemon.getAbility().id === 'wonderguard') {
  490.                                 this.add('-message', pokemon.name + "'s Wonder Guard has cursed it!");
  491.                         }
  492.                         // Weak Pokémon get a boost so they can fight amongst the other monsters.
  493.                         // Ransei is just useless, so the boosts are a prank. Uselesscrab is legitimately useless.
  494.                         if (name === 'manu11' && !pokemon.illusion) {
  495.                                 this.boost({spa:1, spd:1, spe:1}, pokemon, pokemon, 'surskit powers');
  496.                         }
  497.                         if (name === 'uselesscrab' && !pokemon.illusion) {
  498.                                 this.boost({atk:-12, def:-12, spa:-12, spd:-12, spe:-12, accuracy:-12, evasion:-12}, pokemon, pokemon, 'being useless');
  499.                         }
  500.                         if (name === 'adrianmarinbh' && !pokemon.illusion) {
  501.                                 this.boost({def:1, spd:1}, pokemon, pokemon, 'stallish tactics');
  502.                         }
  503.                         if (name === 'dremz' && !pokemon.illusion) {
  504.                                 this.boost({atk:3, def:1, spd:2}, pokemon, pokemon, 'weed');
  505.                         }
  506.                         if (name === 'insanelegend' && !pokemon.illusion) {
  507.                                 this.boost({atk:1, def:1, spa:1, spd:1}, pokemon, pokemon, 'illumimodi');
  508.                         }
  509.                         if (name === 'misakamikoto' && !pokemon.illusion) {
  510.                                 this.boost({atk:1, def:1, spd:1, spe:2}, pokemon, pokemon, 'kawaii-ness');
  511.                         }
  512.                         if (name === 'ransei' && !pokemon.illusion) {
  513.                                 this.boost({atk:6, def:6, spa:6, spd:6, spe:6, accuracy:6}, pokemon, pokemon, 'divine grace');
  514.                         }
  515.                         if (name === 'zodiax' && !pokemon.illusion && pokemon.ability === 'illuminate') {
  516.                                 this.boost({atk:1, def:1}, pokemon, pokemon, 'Cheerleader');
  517.                         }
  518.                         if (name === 'choonbot' && !pokemon.illusion) {
  519.                                 this.boost({spa:5, spe:3}, pokemon, pokemon, 'recent update');
  520.                         }
  521.  
  522.                         // Add here more hacky stuff for mega abilities.
  523.                         // This happens when the mega switches in, as opposed to mega-evolving on the turn.
  524.                         var oldAbility = pokemon.ability;
  525.                         if (pokemon.template.isMega) {
  526.                                 if (name === 'leafshield' && pokemon.getAbility().id !== 'chlorophyll') {
  527.                                         pokemon.setAbility('chlorophyll');
  528.                                         this.add('-ability', pokemon, pokemon.ability);
  529.                                 }
  530.                         } else {
  531.                                 pokemon.canMegaEvo = this.canMegaEvo(pokemon); // Bypass one mega limit.
  532.                         }
  533.                         if (name === 'othermetagames' && !pokemon.illusion && pokemon.activated) {
  534.                                 if (pokemon.battly === 'Balanced Hackmons' && pokemon.ability !== 'magicbounce') {
  535.                                         pokemon.setAbility('magicbounce');
  536.                                         this.add('-ability', pokemon, pokemon.ability);
  537.                                 } else if (pokemon.battly === '1v1' && pokemon.ability !== 'analytic') {
  538.                                         pokemon.setAbility('analytic');
  539.                                         this.add('-ability', pokemon, pokemon.ability);
  540.                                 } else if (pokemon.battly === 'Almost Any Ability' && pokemon.ability !== 'poisonheal') {
  541.                                         pokemon.setAbility('poisonheal');
  542.                                         this.add('-ability', pokemon, pokemon.ability);
  543.                                 } else if (pokemon.battly === 'STABmons' && pokemon.ability !== 'download') {
  544.                                         pokemon.setAbility('download');
  545.                                 }
  546.                         }
  547.  
  548.                         // Add here special typings, done for flavour mainly.
  549.                         if (name === 'piccolo' && !pokemon.illusion) {
  550.                                 this.add('-start', pokemon, 'typechange', 'Fairy/Grass');
  551.                                 pokemon.typesData = [
  552.                                         {type: 'Fairy', suppressed: false,  isAdded: false},
  553.                                         {type: 'Grass', suppressed: false,  isAdded: false}
  554.                                 ];
  555.                         }
  556.                         if (name === 'adrianmarinbh' && !pokemon.illusion) {
  557.                                 this.add('-start', pokemon, 'typechange', 'Dragon/Fairy');
  558.                                 pokemon.typesData = [
  559.                                         {type: 'Dragon', suppressed: false,  isAdded: false},
  560.                                         {type: 'Fairy', suppressed: false,  isAdded: false}
  561.                                 ];
  562.                         }
  563.                         if (name === 'dremz' && !pokemon.illusion) {
  564.                                 this.add('-start', pokemon, 'typechange', 'Grass/Fire');
  565.                                 pokemon.typesData = [
  566.                                         {type: 'Grass', suppressed: false,  isAdded: false},
  567.                                         {type: 'Fire', suppressed: false,  isAdded: false}
  568.                                 ];
  569.                         }
  570.                         if (name === 'insanelegend' && !pokemon.illusion) {
  571.                                 this.add('-start', pokemon, 'typechange', 'Normal/Water');
  572.                                 pokemon.typesData = [
  573.                                         {type: 'Normal', suppressed: false,  isAdded: false},
  574.                                         {type: 'Water', suppressed: false,  isAdded: false}
  575.                                 ];
  576.                         }
  577.                         if (name === 'misakamikoto' && !pokemon.illusion) {
  578.                                 this.add('-start', pokemon, 'typechange', 'Normal/Fairy');
  579.                                 pokemon.typesData = [
  580.                                         {type: 'Normal', suppressed: false,  isAdded: false},
  581.                                         {type: 'Fairy', suppressed: false,  isAdded: false}
  582.                                 ];
  583.                         }
  584.                         if (name === 'othermetagames' && !pokemon.illusion && pokemon.battly === 'Hidden Type' && pokemon.activated) {
  585.                                 this.add('-start', pokemon, 'typechange', 'Normal/Ghost');
  586.                                 pokemon.typesData = [
  587.                                         {type: 'Normal', suppressed: false,  isAdded: false},
  588.                                         {type: 'Ghost', suppressed: false,  isAdded: false}
  589.                                 ];
  590.                         }
  591.                         if (name === 'spartanmalice' && !pokemon.illusion) {
  592.                                 this.add('-start', pokemon, 'typechange', 'Fire/Dragon');
  593.                                 pokemon.typesData = [
  594.                                         {type: 'Fire', suppressed: false,  isAdded: false},
  595.                                         {type: 'Dragon', suppressed: false,  isAdded: false}
  596.                                 ];
  597.                         }
  598.                        
  599.                         //0Loyd0's custom moves go here
  600.                         if (name === '0loyd0' && !pokemon.illusion && !pokemon.customs) {
  601.                                 pokemon.customs = [Math.floor(Math.random()*3) + 1, Math.floor(Math.random()*3) + 1, Math.floor(Math.random()*3) + 1, Math.floor(Math.random()*3) + 1];
  602.                                 this.add('-message', '0Loyd0\'s custom moveset is ' + pokemon.customs[0] + '/' + pokemon.customs[1] + '/' + pokemon.customs[2] + '/' + pokemon.customs[3] + '!');
  603.                         }
  604.  
  605.                         // Edgy switch-in sentences go here.
  606.                         // Sentences vary in style and how they are presented, so each Pokémon has its own way of sending them.
  607.                         var sentences = [];
  608.                         var sentence = '';
  609.                        
  610.                         // Room Owners.
  611.                         if (name === 'eeveegeneral') {
  612.                                 sentences = ['Eevee army assemble!', 'To the ramparts!', 'You and what army?'];
  613.                                 this.add('c|#Eevee General|' + sentences[this.random(3)]);
  614.                         }
  615.                         if (name === 'hollywood') {
  616.                                 this.add('c|#hollywood|Kappa');
  617.                         }
  618.                         if (name === 'joim') {
  619.                                 var dice = this.random(4);
  620.                                 if (dice === 1) {
  621.                                         // Fullscreen toucan!
  622.                                         this.add('-message', '░░░░░░░░▄▄▄▀▀▀▄▄███▄');
  623.                                         this.add('-message', '░░░░░▄▀▀░░░░░░░▐░▀██▌');
  624.                                         this.add('-message', '░░░▄▀░░░░▄▄███░▌▀▀░▀█');
  625.                                         this.add('-message', '░░▄█░░▄▀▀▒▒▒▒▒▄▐░░░░█▌');
  626.                                         this.add('-message', '░▐█▀▄▀▄▄▄▄▀▀▀▀▌░░░░░▐█▄');
  627.                                         this.add('-message', '░▌▄▄▀▀░░░░░░░░▌░░░░▄███████▄');
  628.                                         this.add('-message', '░░░░░░░░░░░░░▐░░░░▐███████████▄');
  629.                                         this.add('-message', '░░blessed by░░░░▐░░░░▐█████████████▄');
  630.                                         this.add('-message', '░░le toucan░░░░░░▀▄░░░▐██████████████▄');
  631.                                         this.add('-message', '░░░░░░ of ░░░░░░░░▀▄▄████████████████▄');
  632.                                         this.add('-message', '░░░░░luck░░░░░░░░░░░░░█▀██████');
  633.                                 } else if (dice === 2) {
  634.                                         // Too spammy, sends it to chat only.
  635.                                         this.add('c|~Joim|░░░░░░░░░░░░▄▐');
  636.                                         this.add('c|~Joim|░░░░░░▄▄▄░░▄██▄');
  637.                                         this.add('c|~Joim|░░░░░▐▀█▀▌░░░░▀█▄');
  638.                                         this.add('c|~Joim|░░░░░▐█▄█▌░░░░░░▀█▄');
  639.                                         this.add('c|~Joim|░░░░░░▀▄▀░░░▄▄▄▄▄▀▀');
  640.                                         this.add('c|~Joim|░░░░▄▄▄██▀▀▀▀');
  641.                                         this.add('c|~Joim|░░░█▀▄▄▄█░▀▀');
  642.                                         this.add('c|~Joim|░░░▌░▄▄▄▐▌▀▀▀');
  643.                                         this.add('c|~Joim|▄░▐░░░▄▄░█░▀▀ U HAVE BEEN SPOOKED');
  644.                                         this.add('c|~Joim|▀█▌░░░▄░▀█▀░▀');
  645.                                         this.add('c|~Joim|░░░░░░░▄▄▐▌▄▄ BY THE');
  646.                                         this.add('c|~Joim|░░░░░░░▀███▀█░▄');
  647.                                         this.add('c|~Joim|░░░░░░▐▌▀▄▀▄▀▐▄ SPOOKY SKILENTON');
  648.                                         this.add('c|~Joim|░░░░░░▐▀░░░░░░▐▌');
  649.                                         this.add('c|~Joim|░░░░░░█░░░░░░░░█');
  650.                                         this.add('c|~Joim|░░░░░▐▌░░░░░░░░░█');
  651.                                         this.add('c|~Joim|░░░░░█░░░░░░░░░░▐▌SEND THIS TO 7 PPL OR SKELINTONS WILL EAT YOU');
  652.                                 } else if (dice === 3) {
  653.                                         this.add('-message', '░░░░░░░░░░░░▄▄▄▄░░░░░░░░░░░░░░░░░░░░░░░▄▄▄▄▄');
  654.                                         this.add('-message', '░░░█░░░░▄▀█▀▀▄░░▀▀▀▄░░░░▐█░░░░░░░░░▄▀█▀▀▄░░░▀█▄');
  655.                                         this.add('-message', '░░█░░░░▀░▐▌░░▐▌░░░░░▀░░░▐█░░░░░░░░▀░▐▌░░▐▌░░░░█▀');
  656.                                         this.add('-message', '░▐▌░░░░░░░▀▄▄▀░░░░░░░░░░▐█▄▄░░░░░░░░░▀▄▄▀░░░░░▐▌');
  657.                                         this.add('-message', '░█░░░░░░░░░░░░░░░░░░░░░░░░░▀█░░░░░░░░░░░░░░░░░░█');
  658.                                         this.add('-message', '▐█░░░░░░░░░░░░░░░░░░░░░░░░░░█▌░░░░░░░░░░░░░░░░░█');
  659.                                         this.add('-message', '▐█░░░░░░░░░░░░░░░░░░░░░░░░░░█▌░░░░░░░░░░░░░░░░░█');
  660.                                         this.add('-message', '░█░░░░░░░░░░░░░░░░░░░░█▄░░░▄█░░░░░░░░░░░░░░░░░░█');
  661.                                         this.add('-message', '░▐▌░░░░░░░░░░░░░░░░░░░░▀███▀░░░░░░░░░░░░░░░░░░▐▌');
  662.                                         this.add('-message', '░░█░░░░░░░░░░░░░░░░░▀▄░░░░░░░░░░▄▀░░░░░░░░░░░░█');
  663.                                         this.add('-message', '░░░█░░░░░░░░░░░░░░░░░░▀▄▄▄▄▄▄▄▀▀░░░░░░░░░░░░░█');
  664.                                 } else {
  665.                                         sentences = ["Gen 1 OU is a true skill metagame.", "Finally a good reason to punch a teenager in the face!", "So here we are again, it's always such a pleasure.", "( ͝° ͜ʖ͡°)"].randomize();
  666.                                         sentence = sentences[0];
  667.                                         this.add('c|#Joim|' + sentence);
  668.                                 }
  669.                         }
  670.                         if (name === 'theimmortal') {
  671.                                 this.add('c|~The Immortal|Give me my robe, put on my crown!');
  672.                         }
  673.  
  674.                         // Global leaders who actually visit
  675.                         if (name === 'verbatim') {
  676.                                 this.add('c|&verbatim|All in');
  677.                         }
  678.  
  679.                         // Moderators
  680.                         if (name === 'adrianmarinbh') { //is mime
  681.                                 sentences = ['tech me hao pla', 'i dun no hao pokeymanz', 'i am an aran maran http://i.imgur.com/KBNU2CUh.jpg prezz A 2 plai', 'heloz i am random personz', '**☆*・゜゚・*MIMEZ WAVE!!*・゜゚・*☆KEEP THE STALL GOING ☆*・゜゚・*LETS GO MIME !*・゜゚・*☆ \⌒(o°‿°o)⌒/**'];
  682.                                 this.add('c|@Adrian Marin BH|' + sentences[this.random(5)]);
  683.                         }
  684.                         if (name === 'arcticblast') {
  685.                                 sentences = ['BEAR MY ARCTIC BLAST', 'lmao what kind of team is this', 'guys guys guess what?!?!?!?!', 'Double battles are completely superior to single battles.', 'I miss the days when PS never broke 100 users and all the old auth were still around.'];
  686.                                 this.add('c|@Arcticblast|' + sentences[this.random(5)]);
  687.                         }
  688.                         if (name === 'betahousing') {
  689.                                 this.add('c|@BetaHousing|why do you sound like a teen talking to his parents and saying to them "It\'s not a phase, this is who I am"'); //no u
  690.                         }
  691.                         if (name === 'bottt') {
  692.                                 this.add('c| boTTT|Welcome to boTTT!');
  693.                         }
  694.                         if (name === 'dell') {
  695.                                 this.add('c|@Dell|<[~.~]> Next best furry besides Yoshi taking the stand!');
  696.                         }
  697.                         if (name === 'imas234') { //Swirlix
  698.                                 this.add('c|@imas234|n_N'); //;_;
  699.                         }
  700.                         if (name === 'piccolo') { //Xerneas
  701.                                 sentences = ['DANK', 'dank meme', 'hi gl'];
  702.                                 this.add('c|@piccolo|' + sentences[this.random(3)]); //your memes were too dank for me
  703.                         }
  704.                         if (name === 'rekeri') {
  705.                                 this.add('c|@rekeri|Get Rekeri\'d :]');
  706.                         }
  707.                         if (name === 'rosiethevenusaur') {
  708.                                 sentences = ['!dt party', 'Are you Wifi whitelisted?', 'Read the roomintro!'];
  709.                                 this.add('c|@RosieTheVenusaur|' + sentences[this.random(3)]);
  710.                         }
  711.                         if (name === 'snaquaza') { //Rayquaza + Dragon Ascent
  712.                                 this.add('c|@Snaquaza|Terrorizing PS since 2012.') //ASK HIM
  713.                         }
  714.                         if (name === 'unfixable') {  //Cacnea duh
  715.                                 this.add('c|@unfixable|no boo!') //ASK HIM
  716.                         }
  717.                         if (name === 'uselesscrab') {
  718.                                 this.add('c|@uselesscrab|/me !'); //i played really badly anyway
  719.                         }
  720.                         if (name === 'xfix') {
  721.                                 var hazards = {stealthrock: 1, spikes: 1, toxicspikes: 1, stickyweb: 1};
  722.                                 var hasHazards = false;
  723.                                 for (var hazard in hazards) {
  724.                                         if (pokemon.side.getSideCondition(hazard)) {
  725.                                                 hasHazards = true;
  726.                                                 break;
  727.                                         }
  728.                                 }
  729.                                 if (hasHazards) {
  730.                                         this.add('c|&xfix|(no haz... too late)');
  731.                                 } else {
  732.                                         this.add('c|&xfix|(no hazards, attacks only, final destination)');
  733.                                 }
  734.                         }
  735.  
  736.                         // Drivers.
  737.                         if (name === 'e4flint') { //Something really offensive (get your mind out of the gutter)
  738.                                 this.add('c|%E4 Flint|lel'); //*shrugs
  739.                         }
  740.                         if (name === 'hackguy') {
  741.                                 this.add('c|%Hack Guy|Morning! n_n');
  742.                         }
  743.                         if (name === 'kidwizard') {
  744.                                 this.add('c|%Kid Wizard|I should be a mod by now.');
  745.                         }
  746.                         if (name === 'kl4ng') { //Probably Klang
  747.                                 this.add('c|%Kl4ng|**praise**'); //>.>
  748.                         }
  749.                         if (name === 'manu11') { //Surskit
  750.                                 this.add('c|@manu 11|yo'); //bs
  751.                         }
  752.                         if (name === 'peefrimgar') {
  753.                                 this.add('c|%Peef Rimgar|I am Peef. Hear me Roar!');
  754.                         }
  755.                         if (name === 'pikachuun') { //Is Pikachu
  756.                                 sentences = ['o3o', '.3.', '¥(°∀°)¥', '(´・ω・`)', '(.3.)/', 'soup', 'WELCOME TO THE SPACE JAM! HERE\'S YOUR CHANCE DO YOUR DANCE AT THE SPACE JAM, ALRIGHT!', '2hu is best animu', '⑨'];
  757.                                 this.add('c|%Pikachuun|' + sentences[this.random(9)]);
  758.                         }
  759.                         if (name === 'quotecs') {
  760.                                 this.add('c|%QuoteCS|Yeah, I know what you mean, but unfortunately I lack good answers to those because of my incredibly dry personality.');
  761.                         }
  762.                         if (name === 'spartanmalice') {
  763.                                 this.add('c|%SpartanMalice|Hear me out.');
  764.                         }
  765.  
  766.                         // Voices.
  767.                
  768.                         if (name === 'aesf') {
  769.                                 this.add('c|+aesf|I am completely balanced');
  770.                         }
  771.                         if (name === 'cactuscacti') {
  772.                                 this.add('c|+CactusCacti|DICKS');
  773.                         }
  774.                         if (name === 'dreameatergengar') {
  775.                                 this.add("c|+Dream Eater Gengar|Take it easy, I'm just a schoolgirl");
  776.                         }
  777.                         if (name === 'dremz') {
  778.                                 this.add('c|+DreMZ|smoke');
  779.                                 this.add('c|+DreMZ|weed');
  780.                                 this.add('c|+DreMZ|every');
  781.                                 this.add('c|+DreMZ|day!');
  782.                         }
  783.                         if (name === 'insanelegend') {
  784.                                 this.add('c|+insanelegend|The OM mods are controlled by lizard people!');
  785.                         }
  786.                         if (name === 'illusio') { //Chatot
  787.                                 this.add('c|+Illusio|Flying types rule!');
  788.                         }
  789.                         if (name === 'imanalt') {
  790.                                 this.add('c|+imanalt|muh bulk');
  791.                         }
  792.                         if (name === 'kitkasai') {
  793.                                 this.add('c|+Kit Kasai|spooky'); //Should've looked like Kyurem-Black
  794.                         }
  795.                         if (name === 'lcass4919') { //Xatu
  796.                                 this.add('c|+lcass4919|the allmighty xatu warrior shall smite you')
  797.                         }
  798.                         if (name === 'leafshield') {
  799.                                 this.add('c|+Leafshield|hi');
  800.                         }
  801.                         if (name === 'misakamikoto') {
  802.                                 this.add('c|+Misaka Mikoto|Please take it nice and easy. I\'m a noob. (◡‿◡✿)');
  803.                         }
  804.                         if (name === 'mamp') {
  805.                                 this.add('c|+Mamp|Hey everyone. Remember to vote Averagemons.');
  806.                         }
  807.                         if (name === 'othermetagames') {
  808.                                 this.add('c|@piccolo|^scouting');
  809.                                 this.add("c| Other Metagames|**Scouting (joining other people's tournament battles while you are in the tour) is not allowed! Don't do it or you will be disqualified! If you see someone scouting, PM an auth!**");
  810.                         }
  811.                         if (name === 'ransei') {
  812.                                 this.add('c|+Ransei|I am an innovamania clone and I am proud')
  813.                         }
  814.                         if (name === 'shaymin') {
  815.                                 this.add('c|+shaymin|Ready for hax?');
  816.                         }
  817.                         if (name === 'theburgerking99') {
  818.                                 this.add('c| Stat Switch|Better not lose on this alt');
  819.                         }
  820.                         if (name === 'word') {
  821.                                 var keys = '1234567890qwertyuiopasdfghjklzxcvbnm';
  822.                                 var username = '';
  823.                                 var rng = -8;
  824.                                 var stillgoing = true;
  825.                                 while (stillgoing) {
  826.                                         username += keys[this.random(keys.length)];
  827.                                         rng++;
  828.                                         if (Math.floor(Math.random() * rng) > 0 || username.length === 19) stillgoing = false;
  829.                                 }
  830.                                 this.add('c|+word|//nick ' + username);
  831.                         }
  832.                         if (name === 'yoman5') {
  833.                                 this.add('c|+yoman5|yolo'); //Shouldn't have tried to play dota at the same time
  834.                         }
  835.                         if (name === 'zodiax') {
  836.                                 this.add('c|%Zodiax|fuck Eevee');
  837.                         }
  838.                
  839.                         //Regs
  840.                         if (name === '0loyd0') {
  841.                                 this.add('c| 0Loyd0|I shall end you. o.O');
  842.                         }
  843.                         if (name === 'choonbot') { //Pichu
  844.                                 this.add('c| ChoonBot|Hello! This is a test command I made to see if the bot is working.');            
  845.                                 /*ReferenceError: child_process is not defined*/
  846.                         }
  847.                
  848.                
  849.                         //Stat Change Messages
  850.                         if (name === 'pikachuun' && !pokemon.illusion && !pokemon.baseStatChange) {
  851.                                 this.add('-message', '%Pikachuun: Wait, I haven\'t been sent out yet? Well then...');
  852.                                 this.add('-message', '%Pikachuun: BEHOLD DOOR, I SHALL NOW DEFEAT YOU WITH MY SUPERIOR MENTAL MIND POWERS! GRANT ME ACCESS, I COMMAND YOU!!!!');
  853.                                 this.add('-anim', pokemon, "Geomancy", pokemon);
  854.                                 this.add('-anim', pokemon, "Geomancy", pokemon);
  855.                                 this.add('-message', '%Pikachuun has powered up! A door has opened somewhere!');
  856.                                 pokemon.baseStatChange = true;
  857.                         }
  858.                         if (name === 'insanelegend' && !pokemon.illusion && !pokemon.baseStatChange) {
  859.                                 this.add('-message', '+insanelegend has recieved buffs from Tier Shift!');
  860.                                 pokemon.baseStatChange = true;
  861.                         }
  862.                         if (name === 'mamp' && !pokemon.illusion && !pokemon.baseStatChange) {
  863.                                 this.add('-message', '+Mamp has become his Averagemons equivalent!');
  864.                                 pokemon.baseStatChange = true;
  865.                         }
  866.                         if (name === 'spartanmalice' && !pokemon.illusion && !pokemon.broadcast) {
  867.                                 this.add('-message', '%SpartanMalice is theorymonning about ' + pokemon.theory + '!');
  868.                                 pokemon.broadcast = true;
  869.                         }
  870.                         if (name === 'othermetagames' && !pokemon.illusion && !pokemon.broadcast) {
  871.                                 this.add('c|@piccolo|^battly');
  872.                                 this.add('c| Other Metagames|This battle\'s format is ' + pokemon.battly + '. It will start when I use the move "Battly Move"');
  873.                                 pokemon.broadcast = true;
  874.                         }
  875.                 },
  876.                 // Here we deal with some special mechanics due to custom sets and moves.
  877.                 onBeforeMove: function (pokemon, target, move) {
  878.                         var name = toId(pokemon.name);
  879.                         // Special Shaymin forme change.
  880.                         if (name === 'shaymin' && !pokemon.illusion) {
  881.                                 var targetSpecies = (move.category === 'Status') ? 'Shaymin' : 'Shaymin-Sky';
  882.  
  883.                                 if (targetSpecies !== pokemon.template.species) {
  884.                                         this.add('message', pokemon.name + ((move.category === 'Status') ? ' has reverted to Land Forme!' : ' took to the sky once again!'));
  885.                                         var template = this.getTemplate(targetSpecies);
  886.                                         pokemon.formeChange(targetSpecies);
  887.                                         pokemon.baseTemplate = template;
  888.                                         pokemon.setAbility(template.abilities['0']);
  889.                                         pokemon.baseAbility = template.ability;
  890.                                         pokemon.details = template.species + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : '');
  891.                                         this.add('detailschange', pokemon, pokemon.details);
  892.                                 }
  893.                         }
  894.  
  895.                         // Break the secondary of Dell's sig if an attack is attempted.
  896.                         if (target.volatiles['parry'] && move.category !== 'Status') {
  897.                                 target.removeVolatile('parry');
  898.                         }
  899.  
  900.                         if (pokemon.volatiles['needles']) {
  901.                                 var dice = this.random(3);
  902.                                 pokemon.removeVolatile('needles');
  903.                                 if (dice === 2) {
  904.                                         this.boost({atk:1, spe:1, def:-1}, pokemon, pokemon, 'used needles');
  905.                                 } else if (dice === 1) {
  906.                                         this.boost({def:1, spd:1, spe:-1}, pokemon, pokemon, 'used needles');
  907.                                 } else {
  908.                                         this.boost({atk:1, def:1, spe:-1}, pokemon, pokemon, 'used needles');
  909.                                 }
  910.                         }
  911.  
  912.                         if (move.id === 'judgment' && name === 'shrang' && !pokemon.illusion) {
  913.                                 this.add('-start', pokemon, 'typechange', 'Dragon/Fairy');
  914.                                 pokemon.typesData = [
  915.                                         {type: 'Dragon', suppressed: false,  isAdded: false},
  916.                                         {type: 'Fairy', suppressed: false,  isAdded: false}
  917.                                 ];
  918.                         }
  919.                 },
  920.                 // Various
  921.                 onModifyPriority: function (priority, pokemon, target, move) {
  922.                         var name = toId(pokemon.name);
  923.                         if (name === 'kl4ng' && target.name === '%E4 Flint' && move.id === 'geargrind') {
  924.                                 return 1;
  925.                         }
  926.                         if (name === '0loyd0' && move.id === 'focuspunch') {
  927.                                 if (move.name === 'Falcon Dash Punch' || pokemon.customs[0] === 2) return 0;
  928.                                 if (move.name === 'Mighty Falcon Punch' || pokemon.customs[0] === 3) return -7;
  929.                         } else if (name === '0loyd0' && move.id === 'skyuppercut') {
  930.                                 if (move.name === 'Heavy Raptor Boost' || pokemon.customs[1] === 2) return -1;
  931.                                 if (move.name === 'Wind-up Raptor Boost' || pokemon.customs[1] === 3) return 1;
  932.                         } else if (name === '0loyd0' && move.id === 'dive') {
  933.                                 if (move.name === 'Falcon Strike' || pokemon.customs[2] === 2) return 1;
  934.                                 if (move.name === 'Explosive Falcon Dive' || pokemon.customs[2] === 3) return -1;
  935.                         }
  936.                         if (name === 'imas234' && move.id === 'swagger') {
  937.                                 return 1;
  938.                         }
  939.                 },
  940.                 // Add here salty tears, that is, custom faint phrases.
  941.                 onFaint: function (pokemon) {
  942.                         if (pokemon.illusioTransformed) {
  943.                                 pokemon.name = '+Illusio';
  944.                                 pokemon.illusioTransformed = false;
  945.                         }
  946.                         var name = toId(pokemon.name);
  947.                         var sentences = [];
  948.                         var sentence = '';
  949.  
  950.                         // Admins.
  951.                         if (name === 'eeveegeneral') {
  952.                                 this.add('c|#Eevee General|' + ['Retreat!', 'You may have won the battle, but you haven\'t won the war!'][this.random(2)]);
  953.                         }
  954.                         if (name === 'hollywood') {
  955.                                 this.add('c|#hollywood|BibleThump');
  956.                         }
  957.                         if (name === 'joim') {
  958.                                 sentences = ['AVENGE ME, KIDS! AVEEEENGEEE MEEEEEE!!', '``This was a triumph, I\'m making a note here: HUGE SUCCESS.``', '``Remember when you tried to kill me twice? Oh how we laughed and laughed! Except I wasn\'t laughing.``', '``I\'m not even angry, I\'m being so sincere right now, even though you broke my heart and killed me. And tore me to pieces. And threw every piece into a fire.``'];
  959.                                 this.add('c|#Joim|' + sentences[this.random(4)]);
  960.                         }
  961.                         if (name === 'theimmortal') {
  962.                                 this.add('c|~The Immortal|Oh how wrong we were to think immortality meant never dying.');
  963.                         }
  964.  
  965.                         // Leaders who actually visit
  966.                         if (name === 'verbatim') {
  967.                                 this.add('c|&verbatim|Crash and Burn');
  968.                         }
  969.  
  970.                         // Mods.
  971.                         if (name === 'adrianmarinbh') {
  972.                                 this.add('c|@Adrian Marin BH|imas saks');
  973.                         }
  974.                         if (name === 'arcticblast') {
  975.                                 sentences = ['totally had it but choked, gg', 'I would have won if it weren\'t for HAX', 'oh', 'Double battles are stil superior to single battles.', 'newfag'];
  976.                                 this.add('c|@Arcticblast|' + sentences[this.random(5)]);
  977.                         }
  978.                         if (name === 'betahousing') {
  979.                                 this.add('c|@BetaHousing|:I');
  980.                         }
  981.                         if (name === 'bottt') {
  982.                                 this.add('-message', '(Automated response: Your battle contained a banned outcome.)');
  983.                         }
  984.                         if (name === 'dell') {
  985.                                 this.add('c|@Dell|All because I couldn\'t use Yoshi...');
  986.                                 this.add('c|@Dell|───────────────████─███────────');
  987.                                 this.add('c|@Dell|──────────────██▒▒▒█▒▒▒█───────');
  988.                                 this.add('c|@Dell|─────────────██▒────────█──────');
  989.                                 this.add('c|@Dell|─────────██████──██─██──█──────');
  990.                                 this.add('c|@Dell|────────██████───██─██──█──────');
  991.                                 this.add('c|@Dell|────────██▒▒▒█──────────███────');
  992.                                 this.add('c|@Dell|────────██▒▒▒▒▒▒───▒──██████───');
  993.                                 this.add('c|@Dell|───────██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███─');
  994.                                 this.add('c|@Dell|──────██▒▒▒▒─────▒▒▒▒▒▒▒▒▒▒▒▒█─');
  995.                                 this.add('c|@Dell|──────██▒▒▒───────▒▒▒▒▒▒▒█▒█▒██');
  996.                                 this.add('c|@Dell|───────██▒▒───────▒▒▒▒▒▒▒▒▒▒▒▒█');
  997.                                 this.add('c|@Dell|────────██▒▒─────█▒▒▒▒▒▒▒▒▒▒▒▒█');
  998.                                 this.add('c|@Dell|────────███▒▒───██▒▒▒▒▒▒▒▒▒▒▒▒█');
  999.                                 this.add('c|@Dell|─────────███▒▒───█▒▒▒▒▒▒▒▒▒▒▒█─');
  1000.                                 this.add('c|@Dell|────────██▀█▒▒────█▒▒▒▒▒▒▒▒██──');
  1001.                                 this.add('c|@Dell|──────██▀██▒▒▒────█████████────');
  1002.                                 this.add('c|@Dell|────██▀███▒▒▒▒────█▒▒██────────');
  1003.                                 this.add('c|@Dell|█████████▒▒▒▒▒█───██──██───────');
  1004.                                 this.add('c|@Dell|█▒▒▒▒▒▒█▒▒▒▒▒█────████▒▒█──────');
  1005.                                 this.add('c|@Dell|█▒▒▒▒▒▒█▒▒▒▒▒▒█───███▒▒▒█──────');
  1006.                                 this.add('c|@Dell|█▒▒▒▒▒▒█▒▒▒▒▒█────█▒▒▒▒▒█──────');
  1007.                                 this.add('c|@Dell|██▒▒▒▒▒█▒▒▒▒▒▒█───█▒▒▒███──────');
  1008.                                 this.add('c|@Dell|─██▒▒▒▒███████───██████────────');
  1009.                                 this.add('c|@Dell|──██▒▒▒▒▒██─────██─────────────');
  1010.                                 this.add('c|@Dell|───██▒▒▒██─────██──────────────');
  1011.                                 this.add('c|@Dell|────█████─────███──────────────');
  1012.                                 this.add('c|@Dell|────█████▄───█████▄────────────');
  1013.                                 this.add('c|@Dell|──▄█▓▓▓▓▓█▄─█▓▓▓▓▓█▄───────────');
  1014.                                 this.add('c|@Dell|──█▓▓▓▓▓▓▓▓██▓▓▓▓▓▓▓█──────────');
  1015.                                 this.add('c|@Dell|──█▓▓▓▓▓▓▓▓██▓▓▓▓▓▓▓█──────────');
  1016.                                 this.add('c|@Dell|──▀████████▀▀███████▀──────────');
  1017.                         }
  1018.                         if (name === 'imas234') {
  1019.                                 this.add('c|@imas234|;_;');
  1020.                         }
  1021.                         if (name === 'piccolo') {
  1022.                                 this.add('c|@piccolo|your memes were too dank for me');
  1023.                         }
  1024.                         if (name === 'rekeri') {
  1025.                                 this.add('c|@rekeri|lucky af :[');
  1026.                         }
  1027.                         if (name === 'rosiethevenusaur') {
  1028.                                 this.add('c|@RosieTheVenusaur|' + ['SD SKARM SHALL LIVE AGAIN!!!', 'Not my WiFi!'][this.random(2)]);
  1029.                         }
  1030.                         if (name === 'snaquaza') {
  1031.                                 this.add('c|@Snaquaza|You can\'t stop me anyway!');
  1032.                                 if (pokemon.ascended && pokemon.ascensionCount) {
  1033.                                         if (pokemon.ascensionCount < 0) {
  1034.                                                 pokemon.side.ascensionBoost = 2;
  1035.                                         } else if (pokemon.ascended ) {
  1036.                                                 pokemon.side.ascensionBoost = 3 - pokemon.ascensionCount;
  1037.                                         }
  1038.                                         pokemon.ascensionCount = 0;
  1039.                                 } else {
  1040.                                         pokemon.ascended = -2;
  1041.                                         pokemon.ascensionCount = 0;
  1042.                                 }
  1043.                         }
  1044.                         if (name === 'unfixable') {
  1045.                                 this.add('c|@unfixable|i may be dead but at least my eyebrows are better than yours');
  1046.                         }
  1047.                         if (name === 'uselesscrab') {
  1048.                                 this.add('c|@uselesscrab|i played really badly anyway');
  1049.                         }
  1050.                         if (name === 'xfix') {
  1051.                                 var foe = pokemon.side.foe.active[0];
  1052.                                 if (foe.name === '&xfix') {
  1053.                                         this.add('c|&xfix|(annoying Dittos...)');
  1054.                                 } else if (foe.ability === 'magicbounce') {
  1055.                                         this.add('c|&xfix|(why ' + foe.name + ' has Magic Bounce...)');
  1056.                                         this.add('c|&xfix|(gg... why...)');
  1057.                                 } else {
  1058.                                         this.add('c|&xfix|(gg... I guess)');
  1059.                                 }
  1060.                         }
  1061.  
  1062.                         // Drivers.
  1063.                         if (name === 'e4flint') {
  1064.                                 this.add('c|%E4 Flint|*shrugs');
  1065.                         }
  1066.                         if (name === 'hackguy') {
  1067.                                 this.add('c|%Hack Guy|Goodnight OMs n_n');
  1068.                         }
  1069.                         if (name === 'kidwizard') {
  1070.                                 this.add('c|%Kid Wizard|This room sucks.');
  1071.                         }
  1072.                         if (name === 'kl4ng') {
  1073.                                 this.add('c|%Kl4ng|>.>');
  1074.                         }
  1075.                         if (name === 'manu11') {
  1076.                                 this.add('c|@manu 11|bs');
  1077.                         }
  1078.                         if (name === 'peefrimgar') {
  1079.                                 this.add('c|%Peef Rimgar|Homophobe :(');
  1080.                         }
  1081.                         if (name === 'pikachuun') {
  1082.                                 sentences = ['*poof*', 'rib (;_;)7', 'sorsly', 'rest in potato', 'I TRIED SO HARD AND GOT SO FAR BUT IN THE END IT DOES\'NT EVEN MATTER', 'Remember kids, always wash your hands after washing your hands. ;^(', 'you\'re obviously cheating', 'for (var i in opponents) this.add(\'-message\', opponents[i] + \' is a nerd\')', 'YOU\'RE DUM N WEERD'];
  1083.                                 this.add('c|%Pikachuun|' + sentences[this.random(9)]);
  1084.                         }
  1085.                         if (name === 'quotecs') {
  1086.                                 this.add('c|%QuoteCS|#StillIrrelevant');
  1087.                         }
  1088.  
  1089.                         // Ex-staff or honorary voice.
  1090.                         if (name === 'aesf') {
  1091.                                 this.add('c|+aesf|Now I\'m 33-1 :(');
  1092.                         }
  1093.                         if (name === 'cactuscacti') {
  1094.                                 this.add('c|+CactusCacti|oh my');
  1095.                         }
  1096.                         if (name === 'dreameatergengar' && !pokemon.archeops) {
  1097.                                 this.add("c|+Dream Eater Gengar|I'm still 200 Elo above you");
  1098.                         }
  1099.                         if (name === 'dremz') {
  1100.                                 this.add('c|+DreMZ|rip');
  1101.                                 this.add('c|+DreMZ|in');
  1102.                                 this.add('c|+DreMZ|pepperonis');
  1103.                                 this.add('c|+DreMZ|;-;');
  1104.                         }
  1105.                         if (name === 'insanelegend') {
  1106.                                 this.add('c|+insanelegend|ILLUMIMODI CONFIRMED');
  1107.                         }
  1108.                         if (name === 'illusio') {
  1109.                                 this.add('c|+Illusio|*poof*');
  1110.                         }
  1111.                         if (name === 'imanalt') {
  1112.                                 this.add('c|+imanalt|bshax imo');
  1113.                         }
  1114.                         if (name === 'kitkasai') {
  1115.                                 this.add('c|+Kit Kasai|Should\'ve been Kyurem-Black');
  1116.                         }
  1117.                         if (name === 'lcass4919') {
  1118.                                 this.add('c|+lcass4919|:<');
  1119.                         }
  1120.                         if (name === 'leafshield') {
  1121.                                 this.add('c|+Leafshield|hi');
  1122.                         }
  1123.                         if (name === 'misakamikoto') {
  1124.                                 this.add('c|+Misaka Mikoto|>////////////////////////////////////////>');
  1125.                         }
  1126.                         if (name === 'mamp') {
  1127.                                 this.add('c|+Mamp|VOTE FOR AVERAGEMONS!!!!');
  1128.                         }
  1129.                         if (name === 'othermetagames') {
  1130.                                 this.add('c|@piccolo|^forfeit');
  1131.                                 this.add("c| Other Metagames|**Leaving tour battles does not count as forfeiting the match. You must type /forfeit in the battleroom to forfeit matches. If you have to go, leave the tour first by typing /tour leave.**");
  1132.                         }
  1133.                         if (name === 'ransei') {
  1134.                                 this.add('c|+Ransei|brb changing alts');
  1135.                         }
  1136.                         if (name === 'shaymin') {
  1137.                                 this.add('c|+shaymin|You\'ve done well, perhaps...too well, even beating the odds!');
  1138.                         }
  1139.                         if (name === 'spartanmalice') {
  1140.                                 this.add('c|%SpartanMalice|Gg, I\'ll go jogging.');
  1141.                         }
  1142.                         if (name === 'theburgerking99') {
  1143.                                 this.add('c|+TheBurgerKing99|I\'m going to go cry in a corner now');
  1144.                         }
  1145.                         if (name === 'word') {
  1146.                                 //Random Excuse Generator. Let's go.
  1147.                                 var keys = '`1234567890-=qwertyuiop[]\\asdfghjkl;' + "'" + 'zxcvbnm,./';
  1148.                                 var reason = ['My eyes are', 'My CPU is', 'My ' + keys[Math.floor(Math.random()*47)] + ' key is', 'I am', 'The simulator is', 'Your Pokemon is', 'The lag is', 'My skills are', 'My phone is', 'My nose is', 'My mouse is', 'The battle is', 'You are', 'The Sun is', 'This game is', 'My hands are', 'My fingers are', 'Your team is', 'My butt is', 'My fingernails are', 'My breakfast is', 'Pikachuun is', 'My machine is', 'Your machine is', 'Pokemon Red and Blue are', 'Pokemon Gold and Silver are', 'Pokemon Ruby and Sapphire are', 'Pokemon Diamond and Pearl are', 'Pokemon Black and White are', 'Pokemon X and Y are', 'The matchmaking system is', 'My drink is', 'Your rank is', 'My lenny face is'];
  1149.                                 var excuse = ['too sweaty', 'too small', 'in my eyes', 'tired', 'too bright', 'in pain', 'too big', 'too loud', 'too annoying', 'self-destructing', 'broken', 'overpowered', 'messing up my thoughts', 'testing something', 'spammy', 'haxy', 'skillful', 'too laggy', 'too dull', 'itchy', 'too cold', 'too warm', 'too hard to see', 'johning too much', 'third-party', 'sweaty', 'calling me', 'saving you', 'having 0 PP', 'really feeling it!', 'stealing my set!', 'counter-teaming me!', 'counter-teaming the ladder!'];
  1150.                                 this.add('c|+word|' + reason[this.random(reason.length)] + ' ' + excuse[this.random(excuse.length)] + '.');
  1151.                         }
  1152.                         if (name === 'yoman5') {
  1153.                                 this.add('c|+yoman5|Shouldn\'t have tried to play dota at the same time');
  1154.                         }
  1155.                         if (name === 'zodiax') {
  1156.                                 this.add('c|%Zodiax|nerd');
  1157.                         }
  1158.                
  1159.                         //And ChoonBot is here too
  1160.                         if (name === '0loyd0') {
  1161.                                 this.add('c| 0Loyd0|IL, you shall pay for this...');
  1162.                         }
  1163.                         if (name === 'choonbot') {
  1164.                                 this.add('c| ChoonBot|ReferenceError: child_process is not defined');
  1165.                         }
  1166.                 },
  1167.                 // Special switch-out events for some mons.
  1168.                 onSwitchOut: function (pokemon) {
  1169.                         if (toId(pokemon.name) === 'hippopotas' && !pokemon.illusion) {
  1170.                                 this.add('-message', 'The sandstorm subsided.');
  1171.                         }
  1172.                         // Shaymin forme change.
  1173.                         if (toId(pokemon.name) === 'shaymin' && !pokemon.illusion) {
  1174.                                 if (pokemon.template.species === 'Shaymin') {
  1175.                                         var template = this.getTemplate('Shaymin-Sky');
  1176.                                         pokemon.formeChange('Shaymin-Sky');
  1177.                                         pokemon.baseTemplate = template;
  1178.                                         pokemon.setAbility(template.abilities['0']);
  1179.                                         pokemon.baseAbility = template.ability;
  1180.                                         pokemon.details = template.species + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : '');
  1181.                                 }
  1182.                         }
  1183.  
  1184.                         // Illusio's special transform.
  1185.                         if (pokemon.illusioTransformed) {
  1186.                                 pokemon.name = '+Illusio';
  1187.                                 pokemon.illusioTransformed = false;
  1188.                         }
  1189.                        
  1190.                         // Pikachuun is the only one who gets a switchout phrase, because he's very cool
  1191.                         if (toId(pokemon.name) === 'pikachuun' && !pokemon.illusion && !pokemon.fainted) {
  1192.                                 var sentences = ['QUICK LOOK AT THE DISTRACTION', 'gotta study ' + ['biology', 'math', 'metals', 'the economy', 'the sock ruse', 'MUGEN', 'thermodynamics'] + ' brb', 'oh noes I have been sp00ped', 'tiem 3 pray 2hu', '*honk* *honk*', 'BONUS DUCKS', 'The suction cups do nothing ;;', 'well time to code another meta I guess', 'Wheeeeeeeeee'];
  1193.                                 this.add('c|%Pikachuun|' + sentences[this.random(9)]);
  1194.                         }
  1195.                 },
  1196.                 onDragOut: function (pokemon) {
  1197.                         // Prevents qtrx from being red carded by chaos while in the middle of using sig move, which causes a visual glitch.
  1198.                         if (pokemon.isDuringAttack) {
  1199.                                 this.add('-message', "But the Unown Aura absorbed the effect!");
  1200.                                 return null;
  1201.                         }
  1202.                         /*if (pokemon.volatiles['inversebattle']) {
  1203.                                 pokemon.side.removeSideCondition('inversebattle');
  1204.                                 var side = 'p' + (1 + (pokemon.side === pokemon.battle.p1));
  1205.                                 pokemon.battle[side].removeSideCondition('inversebattle');
  1206.                                 this.add('-message', 'The inverted type chart returned to normal!');
  1207.                         }*/
  1208.                         if (pokemon.illusioTransformed) {
  1209.                                 pokemon.name = '+Illusio';
  1210.                                 pokemon.illusioTransformed = false;
  1211.                         }
  1212.                 },
  1213.                 onAfterMoveSelf: function (source, target, move) {
  1214.                         // Make Haunter not immune to Life Orb as a means to balance.
  1215.                         if (toId(source.name) === 'haunter') {
  1216.                                 this.damage(source.maxhp / 10, source, source, this.getItem('lifeorb'));
  1217.                         }
  1218.                 },
  1219.                 onModifyPokemon: function (pokemon) {
  1220.                         var name = toId(pokemon.name);
  1221.                         //pokemon.negateImmunity['Type'] = (pokemon.side.getSideCondition('inversebattle')) ? true : false;
  1222.                         // Enforce choice item locking on custom moves.
  1223.                         // qtrx only has one move anyway. This isn't implemented for Cathy since her moves are all custom. Don't trick her a Scarf!
  1224.                         if (name !== 'qtrx' && name !== 'Cathy') {
  1225.                                 var moves = pokemon.moveset;
  1226.                                 if (pokemon.getItem().isChoice && pokemon.lastMove === moves[3].id) {
  1227.                                         for (var i = 0; i < 3; i++) {
  1228.                                                 if (!moves[i].disabled) {
  1229.                                                         pokemon.disableMove(moves[i].id, false);
  1230.                                                         moves[i].disabled = true;
  1231.                                                 }
  1232.                                         }
  1233.                                 }
  1234.                         }
  1235.                         for (var p in pokemon.side.pokemon) {
  1236.                                 var pok = pokemon.side.pokemon[p];
  1237.                                 if (pok.name === '%Pikachuun') {
  1238.                                         pok.stats = pok.baseStats = {atk:348, def:155, spa:266, spd:207, spe:419};
  1239.                                         //This corresponds to 70 / 132 / 72 / 120 / 90 / 149 Stats, because I keep forgetting them...
  1240.                                 }
  1241.                                 if (pok.name === '+insanelegend') {
  1242.                                         pok.stats = pok.baseStats = {atk:150, def:217, spa:129, spd:138, spe:108};
  1243.                                 }
  1244.                                 if (pok.name === '+Mamp') {
  1245.                                         pok.stats = pok.baseStats = {atk:201, def:225, spa:284, spd:224, spe:312};
  1246.                                 }
  1247.                                 if (pok.name === ' Other Metagames' && pok.shift && pok.shift > 0) {
  1248.                                         pok.stats = pok.baseStats = {atk:175, def:261, spa:243, spd:262, spe:157};
  1249.                                         if (pok.maxhp !== 364) {
  1250.                                                 var hprat = pok.hp/pok.maxhp;
  1251.                                                 pok.maxhp = 364;
  1252.                                                 pok.hp = Math.round(364*hprat);
  1253.                                                 if (!pok.hp && hprat > 0) pok.hp = 1;
  1254.                                         }
  1255.                                 }
  1256.                                 if (pok.name === '%SpartanMalice') {
  1257.                                         var shift = (pok.shift) ? 0 : pok.shift;
  1258.                                         pok.stats = pok.baseStats = {atk:343+32*shift, def:217+29*shift, spa:226+26*shift, spd:195+29*shift, spe:284+29*shift};
  1259.                                         if (pok.maxhp !== 311 && shift > 0) {
  1260.                                                 var hprat = pok.hp/pok.maxhp;
  1261.                                                 pok.maxhp = 311;
  1262.                                                 pok.hp = Math.round(311*hprat);
  1263.                                                 if (!pok.hp && hprat > 0) pok.hp = 1;
  1264.                                         }
  1265.                                 }
  1266.                                 if (pok.name === '+TheBurgerKing99') {
  1267.                                         if (pok.statSwitch) {
  1268.                                                 pok.stats = pok.baseStats = {atk:261, def:129, spa:379, spd:129, spe:416};
  1269.                                                 if (pok.maxhp !== 419) {
  1270.                                                         var hprat = pok.hp/pok.maxhp;
  1271.                                                         pok.maxhp = 419;
  1272.                                                         pok.hp = Math.round(419*hprat);
  1273.                                                         if (!pok.hp && hprat > 0) pok.hp = 1;
  1274.                                                 }
  1275.                                         } else {
  1276.                                                 pok.stats = pok.baseStats = {atk:90, def:319, spa:189, spd:319, spe:207};
  1277.                                                 if (pok.maxhp !== 229) {
  1278.                                                         var hprat = pok.hp/pok.maxhp;
  1279.                                                         pok.maxhp = 229;
  1280.                                                         pok.hp = Math.round(229*hprat);
  1281.                                                         if (!pok.hp && hprat > 0) pok.hp = 1;
  1282.                                                 }
  1283.                                         }
  1284.                                 }
  1285.                         }
  1286.                 },
  1287.                 // Specific residual events for custom moves.
  1288.                 // This allows the format to have kind of custom side effects and volatiles.
  1289.                 onResidual: function (battle) {
  1290.                         for (var s in battle.sides) {
  1291.                                 var thisSide = battle.sides[s];
  1292.                                 if (thisSide.premonTimer > 4) {
  1293.                                         thisSide.premonTimer = 0;
  1294.                                         thisSide.premonEffect = true;
  1295.                                 } else if (thisSide.premonTimer > 0) {
  1296.                                         if (thisSide.premonTimer === 4) thisSide.addSideCondition('safeguard');
  1297.                                         thisSide.premonTimer++;
  1298.                                 }
  1299.                                 for (var p in thisSide.active) {
  1300.                                         var pokemon = thisSide.active[p];
  1301.                                         var name = toId(pokemon.name);
  1302.  
  1303.                                         if (pokemon.side.premonEffect) {
  1304.                                                 pokemon.side.premonEffect = false;
  1305.                                                 this.add('c|@zdrup|...dary! __**LEGENDARY!**__');
  1306.                                                 this.boost({atk:1, def:1, spa:1, spd:1, spe:1, accuracy:1}, pokemon, pokemon, 'legendary premonition');
  1307.                                                 pokemon.addVolatile('aquaring');
  1308.                                                 pokemon.addVolatile('focusenergy');
  1309.                                         }
  1310.                                         if (pokemon.volatiles['unownaura'] && !pokemon.fainted && !pokemon.illusion) {
  1311.                                                 this.add('-message', "Your keyboard is reacting to " + pokemon.name + "'s Unown aura!");
  1312.                                                 if (this.random(2) === 1) {
  1313.                                                         this.useMove('trickroom', pokemon);
  1314.                                                 } else {
  1315.                                                         this.useMove('wonderroom', pokemon);
  1316.                                                 }
  1317.                                         }
  1318.                                         if (name === 'beowulf' && !pokemon.fainted && !pokemon.illusion) {
  1319.                                                 this.add('c|@Beowulf|/me buzzes loudly!');
  1320.                                         }
  1321.                                         if (name === 'cathy' && !pokemon.fainted && !pokemon.illusion) {
  1322.                                                 var messages = [
  1323.                                                         'kicking is hilarious!',
  1324.                                                         'flooding the chat log with kicks makes me lol',
  1325.                                                         'please don\'t stop me from having fun',
  1326.                                                         'having fun is great!',
  1327.                                                         'isn\'t this so much fun?',
  1328.                                                         'let\'s all have fun by spamming the channel!',
  1329.                                                         'FUN FUN FUN',
  1330.                                                         'SO MUCH FUN!',
  1331.                                                         '^_^ fun times ^_^',
  1332.                                                         '/me is having so much fun!',
  1333.                                                         'having fun is great!',
  1334.                                                         '/me thinks spam is fun!',
  1335.                                                         '/me loves spamming this channel, because it\'s completely inconsequential!',
  1336.                                                         'this is just the internet -- nothing matters!',
  1337.                                                         'let\'s have fun ALL NIGHT LONG!!!!!!!!!!!!!!!!!!!!!!'
  1338.                                                 ];
  1339.                                                 this.add('c|HappyFunTimes|' + messages[this.random(15)]);
  1340.                                         }
  1341.                                         if (pokemon.volatiles['parry']) {
  1342.                                                 // Dell hasn't been attacked.
  1343.                                                 pokemon.removeVolatile('parry');
  1344.                                                 this.add('-message', "Untouched, the Aura Parry grows stronger still!");
  1345.                                                 this.boost({def:1, spd:1}, pokemon, pokemon, 'Aura Parry');
  1346.                                         }
  1347.                                         if (pokemon.item === 'burger' && !pokemon.fainted && pokemon.hp < pokemon.maxhp) {
  1348.                                                 var burgers = ['Whopper', 'Big Mac', 'Five Guys Burger', 'Cheeseburger', 'Hamburger', 'Burger', "Double N' Cheese", "Shackburger", "Crunchburger", "Thurman Burger", "Slider", "Mustang Sally Burger", "Bistro Burger", "Le Pidgeon Burger", "Jalapeño Cream Burger", "Superburger", "Cozy Burger", "Original Solly Burger", "Steamed Cheeseburger", "Local Grass-Fed Burger", "Viagra", "Butter Burger", "Sirloin Beef Burger", "Double Chilli Cheeseburger", "Kuma Burger", "Country-Fried Bacon Burger", "Bill's Burger", "Griddled Burger", 'Double Winstead', 'Steak House Burger', "Dick's Deluxe", "Hell's Fury Burger", 'Original Burger', "Father's Office Burger", "Lurger Burger", "Truffled Cheeseburger", "Jucy Lucy", "Green Chile Cheeseburger", "Half-Pound Niman Ranch Cheeseburger", "Bacon Cheeseburger", "Big Devil", "Chargrilled Burger", "Black Label Burger", "Double Cheeseburger", "Bob's Burger"];
  1349.                                                 this.heal(pokemon.maxhp/16, pokemon, pokemon, burgers[this.random(burgers.length)]); //Too lazy to count >_>
  1350.                                         }
  1351.                                         if (name === 'snaquaza' && pokemon.template.isMega && !pokemon.ascended) {
  1352.                                                 if (pokemon.ascensionCount < 0) {
  1353.                                                         this.add('-message', "@Snaquaza is too powerful for this metagame, and needs to ascend to Anything Goes!");
  1354.                                                         this.add('-message', "@Snaquaza has 3 turns remaining before he faints automatically! Use Ascension to get him into Anything Goes as soon as possible!");
  1355.                                                         pokemon.ascensionCount = 1;
  1356.                                                 } else if (pokemon.ascensionCount !== 3) {
  1357.                                                         this.add('-message', "@Snaquaza has " + (3 - pokemon.ascensionCount) + " turns remaining before he faints automatically! Use Ascension to get him into Anything Goes as soon as possible!");
  1358.                                                         pokemon.ascensionCount++;
  1359.                                                 } else {
  1360.                                                         this.add('-message', "@Snaquaza was unable to ascend in time!");
  1361.                                                         pokemon.ascensionCount++;
  1362.                                                         pokemon.ascended = -1;
  1363.                                                         pokemon.faint();
  1364.                                                 }
  1365.                                         }
  1366.                                 }
  1367.                                 for (var q in thisSide.pokemon) {
  1368.                                         if (q.name === '%Pikachuun') {
  1369.                                                 var hprat = q.hp/q.maxhp;
  1370.                                                 q.baseStats = {atk:348, def:155, spa:266, spd:207, spe:419};
  1371.                                                 //This corresponds to 70 / 132 / 72 / 120 / 90 / 149 Stats, because I keep forgetting them...
  1372.                                         }
  1373.                                         if (q.name === '+insanelegend') {
  1374.                                                 var hprat = q.hp/q.maxhp;
  1375.                                                 q.baseStats = {hp:334, atk:150, def:217, spa:129, spd:138, spe:108};
  1376.                                         }
  1377.                                 }
  1378.                         }
  1379.                 },
  1380.                 // A moonspeak move
  1381.                 onGetDamage: function (pokemon, target, move) {
  1382.                         if (move.id === 'cut' && pokemon.name === '%Pikachuun' && this.random(10) < 1) return target.maxhp;
  1383.                 },
  1384.                 // Inverse Battle
  1385.                 onEffectiveness: function (typeMod, target, type, move) {
  1386.                         return;
  1387.                         /*if (!move || move.effectType !== 'Move' || !target.side.getSideCondition('inversebattle')) return;
  1388.                         if (move && move.id === 'freezedry' && type === 'Water') return;
  1389.                         if (move && !this.getImmunity(move, type)) return 1;
  1390.                         if (-typeMod === this.getEffectiveness(move, type)) return typeMod; //Glitch avoidance
  1391.                         return -typeMod;*/
  1392.                 },
  1393.                 // This is where the signature moves are actually done.
  1394.                 onModifyMove: function (move, pokemon, target) {
  1395.                         var name = toId(pokemon.illusion && move.sourceEffect === 'allyswitch' ? pokemon.illusion.name : pokemon.name);
  1396.                         // Prevent visual glitch with Spell Steal.
  1397.                         move.effectType = 'Move';
  1398.                         // Just because it's funny. It still is.
  1399.                         if (move.id === 'defog') {
  1400.                                 move.name = 'Defrog';
  1401.                                 this.attrLastMove('[still]');
  1402.                                 this.add('-anim', pokemon, "Defog", pokemon);
  1403.                         }
  1404.  
  1405.                         // Room Owner signature moves.
  1406.  
  1407.                         if (move.id === 'babydolleyes' && name === 'eeveegeneral') {
  1408.                                 move.name = 'War Crimes';
  1409.                                 move.type = 'Normal';
  1410.                                 delete move.boosts;
  1411.                                 move.onHit = function (pokemon, source) {
  1412.                                         this.directDamage(source.maxhp / 4, source, source);
  1413.                                         pokemon.addVolatile('curse');
  1414.                                         pokemon.addVolatile('confusion');
  1415.                                         this.add("c|#Eevee General|What's a Geneva Convention?");
  1416.                                 };
  1417.                         } else if (move.id === 'swift' && name === 'eeveegeneral') {
  1418.                                 if (!pokemon.evoBeamHits && pokemon.evoBeamHits !== 0) pokemon.evoBeamHits = 0;
  1419.                                 move.name = 'Evo Beam';
  1420.                                 move.basePower = 22;
  1421.                                 move.category = 'Physical';
  1422.                                 move.accuracy = 100;
  1423.                                 move.basePowerCallback = function (pokemon) {
  1424.                                         var basePowerTable = [22, 44, 44, 52, 52, 26, 44, 52, 44];
  1425.                                         return basePowerTable[pokemon.evoBeamHits];
  1426.                                 };
  1427.                                 var eBH = pokemon.evoBeamHits;
  1428.                                 move.affectedByImmunities = false;
  1429.                                 move.multihit = 9;
  1430.                                 move.flags = {protect: 1, mirror: 1, authentic: 1};
  1431.                                 var tAb = target.ability;
  1432.                                 move.onTryHit = function (target, source, move) { //We actually want this as TryHit for each hit to have its own anim
  1433.                                         target.ability = 'zoidberg'; //Why not?
  1434.                                         this.attrLastMove('[still]');
  1435.                                         var stringTable = ['Eevee', 'Vaporeon', 'Jolteon', 'Flareon', 'Espeon', 'Umbreon', 'Leafeon', 'Glaceon', 'Sylveon'];
  1436.                                         this.add('-message', stringTable[source.evoBeamHits] + '\'s attack!');
  1437.                                         var move = ['Secret Power', 'Hydro Pump', 'Charge Beam', 'Flamethrower', 'Psybeam', 'Dark Pulse', 'Leaf Storm', 'Ice Beam', 'Dazzling Gleam'][source.evoBeamHits];
  1438.                                         this.add('-anim', source, move, target);
  1439.                                 };
  1440.                                 move.onHit = function (target, pokemon, move) {
  1441.                                         var categoryTable = ['Physical', 'Special', 'Special', 'Physical', 'Special', 'Physical', 'Physical', 'Special', 'Special'];
  1442.                                         if (categoryTable[pokemon.evoBeamHits + 1]) move.category = categoryTable[pokemon.evoBeamHits + 1];
  1443.                                         var typeTable = ['Normal', 'Water', 'Electric', 'Fire', 'Psychic', 'Dark', 'Grass', 'Ice', 'Fairy'];
  1444.                                         if (typeTable[pokemon.evoBeamHits + 1]) move.type = typeTable[pokemon.evoBeamHits + 1];
  1445.                                         var secondaryTable = [{}, {chance: 20, boosts: {spe:-1}}, {chance: 20, status: 'par'}, {chance: 10, status: 'brn'}, {chance: 10, boosts: {spd:-1}}, {chance: 30, volatileStatus: 'flinch'}, {chance: 20, status: 'slp'}, {chance: 10, status: 'frz'}, {chance: 20, boosts: {spa:-1}}];
  1446.                                         if (secondaryTable[pokemon.evoBeamHits]) move.secondaries = [secondaryTable[pokemon.evoBeamHits]];
  1447.                                         pokemon.evoBeamHits++;
  1448.                                         target.ability = tAb;
  1449.                                 };
  1450.                                 move.onAfterMove = function (pokemon) {
  1451.                                         pokemon.evoBeamHits = 0;
  1452.                                 };
  1453.                         }
  1454.                         if (move.id === 'geomancy' && name === 'hollywood') {
  1455.                                 move.name = 'Meme Mime';
  1456.                                 move.isTwoTurnMove = false;
  1457.                                 move.onTry = function () {};
  1458.                                 move.boosts = {atk:1, spa:1, spe:1};
  1459.                                 move.onPrepareHit = function (target, source, move) {
  1460.                                         this.attrLastMove('[still]');
  1461.                                         this.add('-anim', pokemon, "Geomancy", pokemon);
  1462.                                 };
  1463.                         }
  1464.                         if (move.id === 'milkdrink' && name === 'joim') {
  1465.                                 move.name = 'Red Bull Drink';
  1466.                                 move.boosts = {spa:1, spe:1, accuracy:1, evasion:-1};
  1467.                                 delete move.heal;
  1468.                                 move.onTryHit = function (pokemon) {
  1469.                                         if (pokemon.volatiles['redbull']) return false;
  1470.                                         this.attrLastMove('[still]');
  1471.                                         this.add('-anim', pokemon, "Geomancy", pokemon);
  1472.                                 };
  1473.                                 move.onHit = function (pokemon) {
  1474.                                         if (pokemon.volatiles['redbull']) return false;
  1475.                                         pokemon.addVolatile('redbull');
  1476.                                 };
  1477.                         }
  1478.                         if (move.id === 'nightslash' && name === 'theimmortal') {
  1479.                                 move.name = 'Primordial Force';
  1480.                                 move.bp = 150;
  1481.                                 move.accuracy = true;
  1482.                                 move.ignoreDefensive = true;
  1483.                                 delete move.critRatio;
  1484.                                 move.flags = {authentic: 1};
  1485.                                 move.onTryHit = function (target, source) {
  1486.                                         this.attrLastMove('[still]');
  1487.                                         this.add('-anim', source, "Shadow Force", target);
  1488.                                 };
  1489.                         }
  1490.  
  1491.                         // Leader signature moves.
  1492.                
  1493.                         if (move.id === 'bravebird' && name === 'verbatim') {
  1494.                                 move.name = 'Glass Cannon';
  1495.                                 move.basePower = 170;
  1496.                                 move.accuracy = 80;
  1497.                                 move.recoil = [1, 4];
  1498.                                 move.onPrepareHit = function (target, source, move) {
  1499.                                         this.attrLastMove('[still]');
  1500.                                         this.add('-anim', source, "High Jump Kick", target);
  1501.                                 };
  1502.                                 move.onHit = function (pokemon) {
  1503.                                         this.add('c|&verbatim|DEFENESTRATION!');
  1504.                                         if (this.random(20) === 1) pokemon.switchFlag = true;
  1505.                                 };
  1506.                                 move.onMoveFail = function (target, source, move) {
  1507.                                         this.damage(source.maxhp / 2, source, source, 'glasscannon');
  1508.                                 };
  1509.                         }
  1510.  
  1511.                         // Mod signature moves.
  1512.                         if (move.id === 'milkdrink' && name === 'adrianmarinbh') {
  1513.                                 move.name = 'Paranoid Stall';
  1514.                                 move.onHit = function (target) {
  1515.                                         if (target.status !== 'tox' && target.status !== 'psn') {
  1516.                                                 if (target.status) target.cureStatus();
  1517.                                                 target.setStatus('psn');
  1518.                                         }
  1519.                                 }
  1520.                         }
  1521.                         if (move.id === 'psychoboost' && name === 'arcticblast') {
  1522.                                 move.name = 'Doubles Purism';
  1523.                                 delete move.self;
  1524.                                 move.onHit = function (target, source) {
  1525.                                         if (source.hp) {
  1526.                                                 var hasRemovedHazards = false;
  1527.                                                 var sideConditions = {'spikes': 1, 'toxicspikes': 1, 'stealthrock': 1, 'stickyweb': 1};
  1528.                                                 for (var i in sideConditions) {
  1529.                                                         if (target.side.removeSideCondition(i)) {
  1530.                                                                 hasRemovedHazards = true;
  1531.                                                                 this.add('-sideend', target.side, this.getEffect(i).name, '[from] move: Doubles Purism', '[of] ' + source);
  1532.                                                         }
  1533.                                                         if (source.side.removeSideCondition(i)) {
  1534.                                                                 hasRemovedHazards = true;
  1535.                                                                 this.add('-sideend', source.side, this.getEffect(i).name, '[from] move: Doubles Purism', '[of] ' + source);
  1536.                                                         }
  1537.                                                 }
  1538.                                                 if (hasRemovedHazards) this.add('c|@Arcticblast|HAZARDS ARE TERRIBLE IN DOUBLES');
  1539.                                         }
  1540.                                 };
  1541.                         }
  1542.                         if (move.id === 'calmmind' && name === 'betahousing') {
  1543.                                 move.name = "Drink's Up";
  1544.                                 if (pokemon.volatiles.confusion) move.boosts = {atk:3, def:3, spa:3, spd:3, spe:3, accuracy:3};
  1545.                                 if (!pokemon.volatiles.confusion && pokemon.hp < pokemon.maxhp) move.heal = [1, 4];
  1546.                                 if (pokemon.volatiles.confusion && pokemon.hp < pokemon.maxhp) move.heal = [1, 1];
  1547.                                 move.onPrepareHit = function (target, source, move) {
  1548.                                         this.attrLastMove('[still]');
  1549.                                         this.add('-anim', source, "Milk Drink", target);
  1550.                                 };
  1551.                         }
  1552.                         if (move.id === 'taunt' && name === 'bottt') {
  1553.                                 move.name = 'Bot Mute';
  1554.                                 move.onHit = function (target) {
  1555.                                         target.addVolatile('embargo');
  1556.                                         target.addVolatile('torment');
  1557.                                         target.addVolatile('healblock');
  1558.                                 };
  1559.                         }
  1560.                         if (move.id === 'detect' && name === 'dell') {
  1561.                                 var dmg = Math.ceil(pokemon.maxhp / (pokemon.ability === 'simple' ? 2 : 4));
  1562.                                 move.name = 'Aura Parry';
  1563.                                 move.self = {boosts: {atk:1, spa:1, spe:1}};
  1564.                                 move.onTryHit = function (target, source) {
  1565.                                         if (source.hp <= dmg) return false;
  1566.                                         this.attrLastMove('[still]');
  1567.                                         this.add('-anim', source, "Amnesia", source);
  1568.                                         return !!this.willAct() && this.runEvent('StallMove', target);
  1569.                                 };
  1570.                                 move.onHit = function (target) {
  1571.                                         this.directDamage(dmg, target, target);
  1572.                                         pokemon.addVolatile('parry');
  1573.                                         pokemon.addVolatile('stall');
  1574.                                 };
  1575.                         }
  1576.                         if (move.id === 'naturepower' && name === 'imanalt') {
  1577.                                 move.name = 'FREE GENV BH';
  1578.                                 move.onPrepareHit = function (target, source) {
  1579.                                         this.useMove('earthquake', source, target);
  1580.                                 };
  1581.                         }
  1582.                         if (move.id === 'defensecurl' && name === 'imas234') {
  1583.                                 move.name = 'Defense Swirl';
  1584.                                 move.boosts = {def: 2}
  1585.                                 move.onPrepareHit = function (target, source, move) {
  1586.                                         this.attrLastMove('[still]');
  1587.                                         this.add('-anim', source, "Defense Curl", target);
  1588.                                 };
  1589.                                 move.onHit = function (target, source, move) {
  1590.                                         source.side.addSideCondition('reflect');
  1591.                                         source.side.addSideCondition('lightscreen');
  1592.                                 };
  1593.                         }
  1594.                         if (move.id === 'swagger' && name === 'imas234') {
  1595.                                 move.name = 'sweg';
  1596.                                 move.onPrepareHit = function (target, source, move) {
  1597.                                         this.attrLastMove('[still]');
  1598.                                         this.add('-anim', source, "Swagger", target);
  1599.                                 };
  1600.                         }
  1601.                         if (move.id === 'leafstorm' && name === 'piccolo') {
  1602.                                 move.name = 'dank kush';
  1603.                                 move.onPrepareHit = function (target, source, move) {
  1604.                                         this.attrLastMove('[still]');
  1605.                                         this.add('-anim', source, "Leaf Storm", target);
  1606.                                 };
  1607.                                 move.onHit = function (target, source, move) {
  1608.                                         this.add('c|@piccolo|this dank kush mang');
  1609.                                         var dankAbility = target.setAbility('whitesmoke');
  1610.                                         if (dankAbility) this.add('-ability', target, target.ability, '[from] move: dank kush');
  1611.                                 }
  1612.                                 move.secondaries = [{chance:42.0, status:'brn'}];
  1613.                                 delete move.self;
  1614.                         }
  1615.                         if (move.id === 'headcharge' && name === 'rekeri') {
  1616.                                 move.name = 'Land Before Time';
  1617.                                 move.basePower = 125;
  1618.                                 move.type = 'Rock';
  1619.                                 move.accuracy = 90;
  1620.                                 move.secondaries = [{chance:10, volatileStatus:'flinch'}];
  1621.                         }
  1622.                         if (move.id === 'frenzyplant' && name === 'rosiethevenusaur') {
  1623.                                 move.name = 'Swag Plant';
  1624.                                 move.bp = 100;
  1625.                                 move.volatileStatus = 'confusion';
  1626.                                 move.self = {boosts: {atk:1, def:1}};
  1627.                         }
  1628.                         if (move.id === 'detect' && name === 'shaymin') {
  1629.                                 move.name = 'Flower Garden';
  1630.                                 move.type = 'Grass';
  1631.                                 move.self = {boosts: {def:1, spa:1, spd:1}};
  1632.                                 move.onTryHit = function (target, source) {
  1633.                                         if (source.volatiles['flowergarden']) return false;
  1634.                                         this.attrLastMove('[still]');
  1635.                                         this.add('-anim', source, "Amnesia", source);
  1636.                                 };
  1637.                                 move.onHit = function (target, source) {
  1638.                                         source.addVolatile('stall');
  1639.                                         source.addVolatile('flowergarden');
  1640.                                 };
  1641.                         }
  1642.                         if (move.id === 'selfdestruct' && name === 'snaquaza') {
  1643.                                 move.name = 'Ascension';
  1644.                                 move.basePower = 180;
  1645.                                 move.type = 'Flying';
  1646.                                 move.selfdestruct = false;
  1647.                                 move.flags = {protect: 1, authentic: 1},
  1648.                                 move.onPrepareHit = function (target, source, move) {
  1649.                                         this.attrLastMove('[still]');
  1650.                                         if (!source.template.isMega) {
  1651.                                                 this.add('-message', "But @Snaquaza is not powerful enough to ascend!");
  1652.                                                 return false;
  1653.                                         } else {
  1654.                                                 this.add('-anim', source, "Dragon Ascent", target);
  1655.                                         }
  1656.                                 };
  1657.                                 move.onMoveFail = function (target, source, move) {
  1658.                                         if (source.template.isMega) {
  1659.                                                 this.add('-message', "@Snaquaza wasn't able to ascend!");
  1660.                                         }
  1661.                                 };
  1662.                                 move.onHit = function (target, source, move) {
  1663.                                         if (source.ascensionCount < 0) {
  1664.                                                 this.add('-message', "@Snaquaza successfully ascended, with 3 turns remaining!");
  1665.                                         } else {
  1666.                                                 this.add('-message', "@Snaquaza successfully ascended, with " + (4 - source.ascensionCount) + " turns remaining!");
  1667.                                         }
  1668.                                         source.faint();
  1669.                                         source.ascended = 1;
  1670.                                 };
  1671.                         }
  1672.                         if (move.id === 'growl' && name === 'unfixable') {
  1673.                                 move.name = 'Wrath of Cacnea';
  1674.                                 move.accuracy = true;
  1675.                                 delete move.boosts;
  1676.                                 move.flags = {authentic: 1};
  1677.                                 move.onPrepareHit = function (target, source, move) {
  1678.                                         this.attrLastMove('[still]');
  1679.                                         if (!target.volatiles.confusion) this.add('-anim', source, "Curse", source);
  1680.                                 };
  1681.                                 move.onHit = function (target, source, move) {
  1682.                                         if (!target.volatiles.confusion) {
  1683.                                                 this.boost({atk:1, def:1, spa:1, spd:1, spe:1, accuracy:1}, source, source);
  1684.                                                 target.addVolatile('confusion');
  1685.                                         } else {
  1686.                                                 this.add("c|@unfixable|CACNEA");
  1687.                                                 this.add('-message', 'BUT WAIT A MINUTE, AS IT TURNS OUT THAT WAS JUST IN PREPARATION FOR...')
  1688.                                                 this.useMove('needlearm', source, target);
  1689.                                         }
  1690.                                 };
  1691.                                 move.type = 'Grass';
  1692.                         }
  1693.                         if (move.id === 'needlearm' && name === 'unfixable') {
  1694.                                 move.name = 'TRUE WRATH OF CACNEA';
  1695.                                 move.basePowerCallback = function (pokemon) {
  1696.                                         return 60 + 20 * pokemon.positiveBoosts();
  1697.                                 };
  1698.                                 move.onPrepareHit = function (target, source, move) {
  1699.                                         this.attrLastMove('[still]');
  1700.                                         this.add('-anim', source, "Wood Hammer", target);
  1701.                                 };
  1702.                                 move.onHit = function (target, source, move) {
  1703.                                         this.boost({atk:-1, def:-1, spa:-1, spd:-1, spe:-1, accuracy:-1}, source, source);
  1704.                                         target.removeVolatile('confusion');
  1705.                                 };
  1706.                         }
  1707.                         if (move.id === 'splash' && name === 'uselesscrab') {
  1708.                                 move.onTryHit = function (target, source, move) {
  1709.                                         this.add('-message', 'But nothing happened?');
  1710.                                         if (source.volatiles.splash) { //Props to you for using splash twice and living a hit somehow.
  1711.                                                 this.add('-message', 'Wait. HOW DID YOU USE THIS TWICE WITHOUT SWITCHING OUT?');
  1712.                                                 this.add('-message', 'I MEAN SERIOUSLY. YOU\'RE AT -6 IN EVERY STAT. ALL OF THEM. YOU HAVE NO EVS AND IVS IN THESE STATS TOO. HOW DID YOU LIVE A HIT?');
  1713.                                                 this.add('-message', 'MAYBE THAT 1 HP EV I GAVE WAS TOO MUCH? EH I\'LL PATCH IT LATER.');
  1714.                                                 this.add('-message', 'FOR NOW, I GIVE UP. TAKE YOUR DUMB WIN AND LEAVE. PLEASE.');
  1715.                                         }
  1716.                                 };
  1717.                                 move.onHit = function (target, source, move) {
  1718.                                         if (!source.volatiles.splash) source.addVolatile('splash');
  1719.                                         else this.win(source.side); //Props to you for using splash twice and living a hit. Here, have this, my treat :3
  1720.                                 };
  1721.                         }
  1722.                         if (move.id === 'metronome' && name === 'xfix') {
  1723.                                 if (pokemon.moveset[3] && pokemon.moveset[3].pp) {
  1724.                                         pokemon.moveset[3].pp = Math.round(pokemon.moveset[3].pp * 10 + 6) / 10;
  1725.                                 }
  1726.                                 move.name = '(Super Glitch)';
  1727.                                 move.multihit = [2, 5];
  1728.                                 move.onTryHit = function (target, source) {
  1729.                                         if (!source.isActive) return null;
  1730.                                         if (this.random(777) !== 42) return;
  1731.                                         var opponent = pokemon.side.foe.active[0];
  1732.                                         opponent.setStatus('brn');
  1733.                                         var possibleStatuses = ['confusion', 'flinch', 'attract', 'focusenergy', 'foresight', 'healblock'];
  1734.                                         for (var i = 0; i < possibleStatuses.length; i++) {
  1735.                                                 if (this.random(3) === 1) {
  1736.                                                         opponent.addVolatile(possibleStatuses[i]);
  1737.                                                 }
  1738.                                         }
  1739.  
  1740.                                         function generateNoise() {
  1741.                                                 var noise = '';
  1742.                                                 var random = this.random(40, 81);
  1743.                                                 for (var i = 0; i < random; i++) {
  1744.                                                         if (this.random(4) !== 0) {
  1745.                                                                 // Non-breaking space
  1746.                                                                 noise += '\u00A0';
  1747.                                                         } else {
  1748.                                                                 noise += String.fromCharCode(this.random(0xA0, 0x3040));
  1749.                                                         }
  1750.                                                 }
  1751.                                                 return noise;
  1752.                                         }
  1753.                                         this.add('-message', "(Enemy " + generateNoise.call(this) + " TMTRAINER " + opponent.name + " is frozen solid?)");
  1754.                                         this.add('-message', "(Enemy " + generateNoise.call(this) + " TMTRAINER " + opponent.name + " is hurt by its burn!)");
  1755.                                         this.damage(opponent.maxhp * this.random(42, 96) * 0.01, opponent, opponent);
  1756.                                         var exclamation = source.status === 'brn' ? '!' : '?';
  1757.                                         this.add('-message', "(Enemy " + generateNoise.call(this) + " TMTRAINER &xfix is hurt by its burn" + exclamation + ")");
  1758.                                         this.damage(source.maxhp * this.random(24, 48) * 0.01, source, source);
  1759.                                         return null;
  1760.                                 };
  1761.                         }
  1762.  
  1763.                         // Driver signature moves.
  1764.                         if (move.id === 'psystrike' && name === 'e4flint') {
  1765.                                 var hyperOffense = !!(target.name === '@Adrian Marin BH')
  1766.                                 move.name = 'Hyper Offense';
  1767.                                 move.basePower = 180;
  1768.                                 move.accuracy = 90;
  1769.                                 move.ohko = hyperOffense;
  1770.                                 delete move.defensiveCategory;
  1771.                                 move.onPrepareHit = function (target, source, move) {
  1772.                                         this.attrLastMove('[still]');
  1773.                                         this.add('-anim', source, "Light of Ruin", target);
  1774.                                         this.add('-anim', source, "Psystrike", target);
  1775.                                 };
  1776.                                 move.self = {boosts: {def: -1, spd: -1, spe: -1}};
  1777.                         }
  1778.                         if (move.id === 'vcreate' && name === 'hackguy') {
  1779.                                 move.onHit = function (target, source, move) {
  1780.                                         this.useMove('U-turn', source);
  1781.                                 }
  1782.                         }
  1783.                         if (move.id === 'fusionbolt' && name === 'hackguy') {
  1784.                                 move.onHit = function (target, source, move) {
  1785.                                         this.useMove('Fusion Flare', source);
  1786.                                 }
  1787.                         }
  1788.                         if (move.id === 'switcheroo' && name === 'hackguy') {
  1789.                                 move.onHit = function (target, source, move) {
  1790.                                         this.useMove('Taunt', source);
  1791.                                 }
  1792.                         }
  1793.                         if (move.id === 'agility' && name === 'hackguy') {
  1794.                                 move.name = 'GOTTA GO FAST';
  1795.                                 move.boosts = {spe:3};
  1796.                                 move.onPrepareHit = function (target, source, move) {
  1797.                                         this.attrLastMove('[still]');
  1798.                                         this.add('-anim', source, "Agility", source);
  1799.                                 };
  1800.                         }
  1801.                         if (move.id === 'tailwhip' && name === 'kidwizard') {
  1802.                                 move.name = 'Broken Wand';
  1803.                                 delete move.boosts;
  1804.                                 move.flags = {reflectable: 1, nonsky: 1};
  1805.                                 move.onPrepareHit = function (target, source, move) {
  1806.                                         this.attrLastMove('[still]');
  1807.                                         this.add('-anim', source, "Spikes", target);
  1808.                                 };
  1809.                                 move.onHit = function (target, source, move) {
  1810.                                         target.side.addSideCondition('spikes');
  1811.                                         target.side.addSideCondition('toxicspikes');
  1812.                                         this.useMove(['icebeam','thunderbolt'][this.random(2)], source);
  1813.                                 };
  1814.                         }
  1815.                         if (move.id === 'geargrind' && name === 'kl4ng') {
  1816.                                 move.name = 'Flint Grinder';
  1817.                                 move.basePower = 60;
  1818.                                 move.accuracy = (target.name === '%E4 Flint') ? true : 90;
  1819.                                 move.onPrepareHit = function (target, source, move) {
  1820.                                         this.attrLastMove('[still]');
  1821.                                         this.add('-anim', source, "Gear Grind", target);
  1822.                                 };
  1823.                                 move.onHit = function (target, source, move) {
  1824.                                         if (target.name === '%E4 Flint') {
  1825.                                                 this.add('c|%Kl4ng|!git gud flint');
  1826.                                         }
  1827.                                 }
  1828.                         }
  1829.                         if (move.id === 'hydropump' && name === 'manu11') {
  1830.                                 move.name = 'Surskit Energy';
  1831.                                 move.basePower = 130;
  1832.                                 move.sideCondition = 'stickyweb';
  1833.                                 move.onPrepareHit = function (target, source, move) {
  1834.                                         this.attrLastMove('[still]');
  1835.                                         this.add('-anim', source, "Origin Pulse", target);
  1836.                                 };
  1837.                                 move.onEffectiveness = function (typeMod, type, move) {
  1838.                                         return typeMod + this.getEffectiveness('Bug', type);
  1839.                                 };
  1840.                         }
  1841.                         if (name === 'pikachuun') {
  1842.                                 if (move.id === 'metronome') {
  1843.                                         move.name = 'Moonspeak';
  1844.                                         move.onPrepareHit = function (target, source, move) {
  1845.                                                 this.attrLastMove('[still]');
  1846.                                                 this.add('-anim', source, "Hyper Voice", target);
  1847.                                         };
  1848.                                         move.onHit = function(target, source) {
  1849.                                                 var movespeak = ['fairywind', 'bubble', 'thundershock', 'confusion', 'cut', 'shadowpunch', 'ember', 'thief', 'powdersnow', 'sonicboom', 'nightshade'];
  1850.                                                 var moonspoke = movespeak[this.random(11)];
  1851.                                                 this.useMove(moonspoke, target)
  1852.                                         }
  1853.                                 } else if (move.id === 'fairywind') {
  1854.                                         move.name = '「パニッシュ・ザ・ジャッジメント」'; //Super Strong, Special [fairy]
  1855.                                         move.basePower = 250;
  1856.                                         move.onPrepareHit = function (target, source, move) {
  1857.                                                 this.attrLastMove('[still]');
  1858.                                                 this.add('-anim', source, "Judgment", target);
  1859.                                         };
  1860.                                 } else if (move.id === 'bubble') {
  1861.                                         move.name = '禍殃「メエルシュトレエムに呑まれて」'; //Pretty strong, special, chance to OHKO [water]
  1862.                                         move.basePower = 140;
  1863.                                         move.ohko = (this.random(10) < 3);
  1864.                                         move.onPrepareHit = function (target, source, move) {
  1865.                                                 this.attrLastMove('[still]');
  1866.                                                 this.add('-anim', source, "Origin Pulse", target);
  1867.                                         };
  1868.                                         delete move.secondary;
  1869.                                         delete move.secondaries;
  1870.                                 } else if (move.id === 'thundershock') {
  1871.                                         move.name = '光速「ルクシオンエッジ」'; //Super Strong, Physical [electric]
  1872.                                         move.basePower = 200;
  1873.                                         move.category = 'Physical';
  1874.                                         move.onPrepareHit = function (target, source, move) {
  1875.                                                 this.attrLastMove('[still]');
  1876.                                                 this.add('-anim', source, "Bolt Strike", target);
  1877.                                         };
  1878.                                         delete move.secondary;
  1879.                                         move.secondaries = [{chance: 30, status: 'par'}];
  1880.                                 } else if (move.id === 'confusion') {
  1881.                                         move.name = '魔砲「ファイナルスパーク」'; //Super Strong, Special [Psychic]
  1882.                                         move.basePower = 250;
  1883.                                         move.onPrepareHit = function (target, source, move) {
  1884.                                                 this.attrLastMove('[still]');
  1885.                                                 this.add('-anim', source, "Hyper Beam", target);
  1886.                                         };
  1887.                                         delete move.secondary;
  1888.                                         delete move.secondaries;
  1889.                                 } else if (move.id === 'cut') {
  1890.                                         move.name = '彼岸剣「地獄極楽滅多斬り」'; //Pretty strong in total, hits 6 times, Has a chance to OHKO, Physical [Steel]
  1891.                                         move.basePower = 33;
  1892.                                         move.type = 'Steel';
  1893.                                         move.accuracy = 100;
  1894.                                         move.multihit = 6;
  1895.                                         move.onPrepareHit = function (target, source, move) {
  1896.                                                 this.attrLastMove('[still]');
  1897.                                                 this.add('-anim', source, "Slash", target);
  1898.                                         };
  1899.                                 } else if (move.id === 'shadowpunch') {
  1900.                                         move.name = '真紅眼の狂月宴 (レッドアイズ・バンケット)'; //Pretty strong, physical, auto-Taunt [Ghost]
  1901.                                         move.basePower = 180;
  1902.                                         move.accuracy = 100;
  1903.                                         move.onPrepareHit = function (target, source, move) {
  1904.                                                 this.attrLastMove('[still]');
  1905.                                                 this.add('-anim', source, "Shadow Force", target);
  1906.                                         };
  1907.                                         move.volatileStatus = 'taunt';
  1908.                                 } else if (move.id === 'ember') {
  1909.                                         move.name = '七星「セプテントリオン」'; //Super Strong in total, Special. Chance to burn, hits 7 times. [Fire]
  1910.                                         move.basePower = 25;
  1911.                                         move.multihit = 7;
  1912.                                         move.onPrepareHit = function (target, source, move) {
  1913.                                                 this.attrLastMove('[still]');
  1914.                                                 this.add('-anim', source, "Fusion Flare", target);
  1915.                                         };
  1916.                                 } else if (move.id === 'thief') {
  1917.                                         move.name = '逆符「天下転覆」'; //Pretty srong, inverts targets stat changes and steals them if necessary. [Dark]
  1918.                                         move.basePower = 140;
  1919.                                         move.onPrepareHit = function (target, source, move) {
  1920.                                                 this.attrLastMove('[still]');
  1921.                                                 this.add('-anim', source, "Dark Void", target);
  1922.                                         };
  1923.                                         move.onHit = function (target, source) {
  1924.                                                 var targetBoosts = {};
  1925.                                                 var targetDeboosts = {};
  1926.                                                 for (var i in target.boosts) {
  1927.                                                         targetBoosts[i] = (target.boosts[i] > 0) ? target.boosts[i] : 0;
  1928.                                                         targetDeboosts[i] = (target.boosts[i] > 0) ? -target.boosts[i] : 0;
  1929.                                                 }
  1930.                                                 source.setBoost(targetBoosts);
  1931.                                                 target.setBoost(targetDeboosts);
  1932.                                                 this.add('-copyboost', source, target, '[from] move: 逆符「天下転覆」');
  1933.                                                 this.add('-invertboost', target, '[from] move: 逆符「天下転覆」');
  1934.                                         };
  1935.                                 } else if (move.id === 'powdersnow') {
  1936.                                         move.name = '氷符「パーフェクトグレーシャリスト」'; //Moderate power, special, Hits 9 times. Chance to freeze. [Ice]
  1937.                                         move.basePower = 11;
  1938.                                         move.multihit = 9;
  1939.                                         move.onPrepareHit = function (target, source, move) {
  1940.                                                 this.attrLastMove('[still]');
  1941.                                                 this.add('-anim', source, "Blizzard", target);
  1942.                                         };
  1943.                                 } else if (move.id === 'sonicboom') {
  1944.                                         move.name = '弾幕幻想'; //Will always leave the opponent with 1 HP.
  1945.                                         move.type = '無効';
  1946.                                         move.damage = 65535;
  1947.                                         move.noFaint = true;
  1948.                                         move.onPrepareHit = function (target, source, move) {
  1949.                                                 this.attrLastMove('[still]');
  1950.                                                 this.add('-anim', source, "Light of Ruin", target);
  1951.                                         };
  1952.                                 } else if (move.id === 'nightshade'){
  1953.                                         move.name = '世界の終わり'; //Deals ~666 damage to all opponents, distributed evenly. Devastating when pulled.
  1954.                                         move.type = '惨事';
  1955.                                         var oppPokes = 0;
  1956.                                         for (var i in target.side.pokemon) {
  1957.                                                 if (target.side.pokemon[i].hp) {
  1958.                                                         oppPokes += 1;
  1959.                                                 }
  1960.                                         }
  1961.                                         var distribution = Math.ceil(666/oppPokes);
  1962.                                         move.damage = distribution;
  1963.                                         move.flags = {protect: 1, mirror: 1, authentic: 1},
  1964.                                         move.onPrepareHit = function (target, source, move) {
  1965.                                                 this.attrLastMove('[still]');
  1966.                                                 this.add('-anim', source, "Night Shade", target);
  1967.                                                 this.add('-anim', source, "Night Shade", target);
  1968.                                                 this.add('-anim', source, "Hyperspace Fury", target);
  1969.                                         };
  1970.                                         move.onHit = function (target, source, move) {
  1971.                                                 this.add('-message', '相手のポケモンは死のためにマークされていました!')
  1972.                                                 for (var i in target.side.pokemon) {
  1973.                                                         if (i > 0 && target.side.pokemon[i].hp) {
  1974.                                                                 if (!target.side.pokemon[i].marked) target.side.pokemon[i].marked = 0;
  1975.                                                                 target.side.pokemon[i].marked += distribution;
  1976.                                                         }
  1977.                                                 }
  1978.                                         };
  1979.                                 }
  1980.                         }
  1981.                         if (name === 'peefrimgar' && move.id === 'attract') {
  1982.                                 move.name = 'Gay Agenda';
  1983.                                 move.onPrepareHit = function (target, source, move) {
  1984.                                         this.attrLastMove('[still]');
  1985.                                         this.add('-anim', source, "Attract", target);
  1986.                                 };
  1987.                                 delete move.volatileStatus;
  1988.                                 move.onHit = function (target, source, move) {
  1989.                                         if (target.gender === 'M') {
  1990.                                                 target.gender = 'F';
  1991.                                                 target.addVolatile('attract');
  1992.                                                 target.gender = 'M';
  1993.                                                 target.addVolatile('confusion');
  1994.                                                 target.trySetStatus('psn');
  1995.                                         } else if (target.gender === 'F') {
  1996.                                                 this.directDamage(source.maxhp / 2, source, source);
  1997.                                                 this.directDamage(target.maxhp / 2, target, target);
  1998.                                         } else {
  1999.                                                 this.add('-message', 'Peef could not comprehend the genderless target!');
  2000.                                                 this.useMove('Self-Destruct', source);
  2001.                                         }
  2002.                                 };
  2003.                         }
  2004.                         if (move.id === 'spikes' && name === 'quotecs') {
  2005.                                 move.name = 'Diversify';
  2006.                                 move.self = {boosts: {atk:1, spd:1}};
  2007.                                 move.onTryHit = function (target, source) {
  2008.                                         this.attrLastMove('[still]');
  2009.                                         this.add('-anim', source, "Eruption", source);
  2010.                                 };
  2011.                         }
  2012.                         // Voices signature moves.
  2013.                         if (name === 'aesf' && move.id === 'assist') {
  2014.                                 move.onHit = function (target) {
  2015.                                         this.useMove('thousandarrows', target);
  2016.                                 }
  2017.                         }
  2018.                         if (name === 'aesf' && move.id === 'thousandarrows') {
  2019.                                 move.basePower = 60; //To prevent aesf from being 3op
  2020.                         }
  2021.                         if (name === 'cactuscacti' && move.id === 'spikecannon') {
  2022.                                 move.name = 'Spike Canon';
  2023.                                 move.basePower = 80;
  2024.                                 move.type = 'Grass';
  2025.                                 delete move.multihit;
  2026.                                 var spikes = !!(target.side.sideConditions.spikes);
  2027.                                 var slayers = 0;
  2028.                                 if (spikes) slayers = target.side.sideConditions.spikes.layers;
  2029.                                 var tspikes = !!(target.side.sideConditions.toxicspikes);
  2030.                                 var tlayers = 0;
  2031.                                 if (tspikes) tlayers = target.side.sideConditions.toxicspikes.layers;
  2032.                                 var gen = pokemon.gender;
  2033.                                 var ten = target.gender;
  2034.                                 move.onPrepareHit = function (target, source, move) {
  2035.                                         this.attrLastMove('[still]');
  2036.                                         this.add('-anim', source, "Pin Missile", target);
  2037.                                 }
  2038.                                 switch (slayers + tlayers) {
  2039.                                 case 5:
  2040.                                         move.onHit = function (target, source) {
  2041.                                                 target.setStatus('par');
  2042.                                                 target.addVolatile('confusion');
  2043.                                                 source.gender = target.gender === 'M' ? 'F' : 'M';
  2044.                                                 if (target.gender !== 'M' && target.gender !== 'F') target.gender = 'F';
  2045.                                                 target.addVolatile('attract');
  2046.                                                 source.gender = gen;
  2047.                                                 target.gender = ten;
  2048.                                                 target.addVolatile('leechseed');
  2049.                                                 target.addVolatile('taunt');
  2050.                                                 target.addVolatile('curse');
  2051.                                                 target.addVolatile('torment');
  2052.                                         };
  2053.                                         move.flags = {mirror: 1, authentic: 1};
  2054.                                         break;
  2055.                                 case 4:
  2056.                                         move.onHit = function (target, source) {
  2057.                                                 target.setStatus('par');
  2058.                                                 target.addVolatile('confusion');
  2059.                                                 source.gender = target.gender === 'M' ? 'F' : 'M';
  2060.                                                 if (target.gender !== 'M' && target.gender !== 'F') target.gender = 'F';
  2061.                                                 target.addVolatile('attract');
  2062.                                                 source.gender = gen;
  2063.                                                 target.gender = ten;
  2064.                                                 target.addVolatile('leechseed');
  2065.                                                 target.addVolatile('taunt');
  2066.                                         };
  2067.                                         move.flags = {mirror: 1, authentic: 1};
  2068.                                         break;
  2069.                                 case 3:
  2070.                                         move.onHit = function (target, source) {
  2071.                                                 target.trySetStatus('par');
  2072.                                                 target.addVolatile('confusion');
  2073.                                                 source.gender = target.gender === 'M' ? 'F' : 'M';
  2074.                                                 if (target.gender !== 'M' && target.gender !== 'F') target.gender = 'F';
  2075.                                                 target.addVolatile('attract');
  2076.                                                 source.gender = gen;
  2077.                                                 target.gender = ten;
  2078.                                                 target.addVolatile('taunt');
  2079.                                         };
  2080.                                         move.flags = {protect: 1, mirror: 1, authentic: 1};
  2081.                                         break;
  2082.                                 case 2:
  2083.                                         move.onHit = function (target, source) {
  2084.                                                 target.trySetStatus('par');
  2085.                                                 target.addVolatile('confusion');
  2086.                                                 source.gender = target.gender === 'M' ? 'F' : 'M';
  2087.                                                 if (target.gender !== 'M' && target.gender !== 'F') target.gender = 'F';
  2088.                                                 target.addVolatile('attract');
  2089.                                                 source.gender = gen;
  2090.                                                 target.gender = ten;
  2091.                                         };
  2092.                                         move.flags = {protect: 1, mirror: 1, authentic: 1};
  2093.                                         break;
  2094.                                 case 1:
  2095.                                         move.onHit = function (target, source) {
  2096.                                                 target.trySetStatus('par');
  2097.                                                 target.addVolatile('confusion');
  2098.                                         };
  2099.                                         break;
  2100.                                 default:
  2101.                                         move.onHit = function (target, source) {
  2102.                                                 target.addVolatile('confusion');
  2103.                                         };
  2104.                                         break;
  2105.                                 }
  2106.                         }
  2107.                         if (name === 'dreameatergengar' && move.id === 'splash') {
  2108.                                 move.name = 'NOT ARCHEOPS!!';
  2109.                                 delete move.onTryHit;
  2110.                                 move.onHit = function (pokemon) {
  2111.                                         pokemon.archeops = true; //hue programmer joke hue
  2112.                                         this.add('c|+Dream Eater Gengar|**BAN** Archeops');
  2113.                                         pokemon.faint();
  2114.                                 };
  2115.                         }
  2116.                         if (name === 'dreameatergengar' && move.id === 'dreameater') {
  2117.                                 move.type = 'Ghost';
  2118.                                 move.drain = [3, 4];
  2119.                         }
  2120.                         if (name === 'dreameatergengar' && move.id === 'darkvoid') {
  2121.                                 move.name = 'Sweet Dreams';
  2122.                                 move.accuracy = 100;
  2123.                                 move.type = 'Ghost';
  2124.                                 move.onPrepareHit = function (target, source, move) {
  2125.                                         this.attrLastMove('[still]');
  2126.                                         this.add('-anim', source, "Dark Void", target);
  2127.                                 };
  2128.                                 delete move.status;
  2129.                                 move.onHit = function (pokemon, user) {
  2130.                                         if (pokemon.status !== 'slp') {
  2131.                                                 pokemon.trySetStatus('slp');
  2132.                                         } else {
  2133.                                                 pokemon.addVolatile('nightmare');
  2134.                                         }
  2135.                                 };
  2136.                         }
  2137.                         if (name === 'dreameatergengar' && move.id === 'meanlook') {
  2138.                                 move.name = '1v1 me bro';
  2139.                                 move.onPrepareHit = function (target, source, move) {
  2140.                                         this.attrLastMove('[still]');
  2141.                                         this.add('-anim', source, "Mean Look", target);
  2142.                                 };
  2143.                                 move.onHit = function (target, source, move) {
  2144.                                         if (!target.addVolatile('trapped', source, move, 'trapper')) {
  2145.                                                 this.add('-fail', target);
  2146.                                         } else {
  2147.                                                 this.add("c|+Dream Eater Gengar|1v1 me irl lgi");
  2148.                                                 this.add('-start', source, 'typechange', 'Dark/Poison');
  2149.                                                 source.typesData = [{type: 'Dark', suppressed: false}, {type: 'Poison', suppressed: false}];
  2150.                                                 source.addVolatile('trapped', source, move, 'trapper');
  2151.                                                 target.addVolatile('taunt');
  2152.                                                 source.addVolatile('taunt');
  2153.                                         }
  2154.                                 };
  2155.                         }
  2156.                         if (move.id === 'razorleaf' && name === 'dremz') {
  2157.                                 move.name = '420 BLAZE IT';
  2158.                                 move.basePower = 420;
  2159.                                 move.accuracy = 420;
  2160.                                 delete move.critratio;
  2161.                                 move.onEffectiveness = function (typeMod, type, move) {
  2162.                                         return typeMod + this.getEffectiveness('Fire', type);
  2163.                                 };
  2164.                                 move.onPrepareHit = function (target, source, move) {
  2165.                                         this.attrLastMove('[still]');
  2166.                                         this.add('-anim', source, "Leaf Storm", target);
  2167.                                         this.add('-anim', target, "Fire Blast", target);
  2168.                                 };
  2169.                                 move.onHit = function (target, source, move) {
  2170.                                         this.add('c|+DreMZ|420');
  2171.                                         this.add('c|+DreMZ|BLAZE');
  2172.                                         this.add('c|+DreMZ|IT');
  2173.                                         source.typesData = [
  2174.                                                 {type: 'Grass', suppressed: false,  isAdded: false}
  2175.                                         ];
  2176.                                         if (this.random(420) < 420) source.setStatus('brn');
  2177.                                         source.typesData = [
  2178.                                                 {type: 'Grass', suppressed: false,  isAdded: false},
  2179.                                                 {type: 'Fire', suppressed: false,  isAdded: false}
  2180.                                         ];
  2181.                                 };
  2182.                                 move.recoil = [420, 420];
  2183.                                 move.self = {
  2184.                                         boosts: {atk: -420}
  2185.                                 };
  2186.                         }
  2187.                         if (name === 'illusio' && move.id === 'chatter') {
  2188.                                 move.name = 'Name Change';
  2189.                                 move.onPrepareHit = function (target, source, move) {
  2190.                                         this.attrLastMove('[still]');
  2191.                                         this.add('-anim', source, "Chatter", target);
  2192.                                 };
  2193.                                 move.onHit = function (pokemon, user) {
  2194.                                         var template = pokemon.template;
  2195.                                         if (pokemon.fainted || pokemon.illusion) {
  2196.                                                 return false;
  2197.                                         }
  2198.                                         if (!template.abilities || (pokemon && pokemon.transformed) || (user && user.transformed)) {
  2199.                                                 return false;
  2200.                                         }
  2201.                                         if (!user.formeChange(template, true)) {
  2202.                                                 return false;
  2203.                                         }
  2204.                                         user.transformed = true;
  2205.                                         user.illusioTransformed = true;
  2206.                                         user.typesData = [];
  2207.                                         for (var i = 0, l = pokemon.typesData.length; i < l; i++) {
  2208.                                                 user.typesData.push({
  2209.                                                         type: pokemon.typesData[i].type,
  2210.                                                         suppressed: false,
  2211.                                                         isAdded: pokemon.typesData[i].isAdded
  2212.                                                 });
  2213.                                         }
  2214.                                         for (var statName in user.stats) {
  2215.                                                 user.stats[statName] = pokemon.stats[statName];
  2216.                                         }
  2217.                                         user.moveset = [];
  2218.                                         user.moves = [];
  2219.                                         for (var i = 0; i < pokemon.moveset.length; i++) {
  2220.                                                 var move = this.getMove(user.set.moves[i]);
  2221.                                                 var moveData = pokemon.moveset[i];
  2222.                                                 var moveName = moveData.move;
  2223.                                                 if (moveData.id === 'hiddenpower') {
  2224.                                                         moveName = 'Hidden Power ' + user.hpType;
  2225.                                                 }
  2226.                                                 user.moveset.push({
  2227.                                                         move: moveName,
  2228.                                                         id: moveData.id,
  2229.                                                         pp: move.noPPBoosts ? moveData.maxpp : 5,
  2230.                                                         maxpp: move.noPPBoosts ? moveData.maxpp : 5,
  2231.                                                         target: moveData.target,
  2232.                                                         disabled: false
  2233.                                                 });
  2234.                                                 user.moves.push(toId(moveName));
  2235.                                         }
  2236.                                         for (var j in pokemon.boosts) {
  2237.                                                 user.boosts[j] = pokemon.boosts[j];
  2238.                                         }
  2239.                                         this.add('-transform', user, pokemon);
  2240.                                         user.setAbility(pokemon.ability);
  2241.                                         user.originalName = user.name;
  2242.                                         user.name = pokemon.name;
  2243.                                         user.update();
  2244.                                 };
  2245.                         }
  2246.                         if (move.id === 'infestation' && name === 'insanelegend') {
  2247.                                 move.name = 'Bidoof Army';
  2248.                                 move.basePower = 80;
  2249.                                 move.category = 'Physical';
  2250.                                 move.type = 'Water';
  2251.                                 move.secondaries = [{
  2252.                                         chance: 100,
  2253.                                         status: 'tox'
  2254.                                 }];
  2255.                         }
  2256.                         if (name === 'kitkasai' && move.id === 'judgment') {
  2257.                                 move.name = 'Kagome Kagome';
  2258.                                 move.basePower = 125;
  2259.                                 move.onTryHit = function (target, source, move) {
  2260.                                         this.attrLastMove('[still]');
  2261.                                         var movAnim = (this.runEvent('Plate', pokemon, null, 'judgment', 'Normal') === 'Ghost') ? "Psystrike" : "Judgment";
  2262.                                         this.add('-anim', source, movAnim, target);
  2263.                                 };
  2264.                                 move.secondaries = [{
  2265.                                         chance: 20,
  2266.                                         status: 'brn'
  2267.                                 }];
  2268.                         }
  2269.                         if (name === 'lcass4919' && move.id === 'boomburst') {
  2270.                                 move.name = 'Smiting of Xatu';
  2271.                                 move.onEffectiveness = function (typeMod, type, move) {
  2272.                                         return typeMod + this.getEffectiveness('Psychic', type);
  2273.                                 };
  2274.                                 move.flags = {protect: 1, mirror: 1};
  2275.                                 move.onPrepareHit = function (target, source, move) {
  2276.                                         this.attrLastMove('[still]');
  2277.                                         this.add('-anim', source, "Thunder", target);
  2278.                                 };
  2279.                         }
  2280.                         if (name === 'leafshield' && move.id === 'spikyshield') {
  2281.                                 move.name = 'Leaf Shield';
  2282.                                 move.self = {boosts: {def:2}};
  2283.                                 move.onPrepareHit = function (target, source, move) {
  2284.                                         this.attrLastMove('[still]');
  2285.                                         this.add('-anim', source, "Leaf Storm", target);
  2286.                                         if (source.volatiles['leafshield']) return false;
  2287.                                         return !!this.willAct() && this.runEvent('StallMove', target);
  2288.                                 };
  2289.                                 move.onHit = function (target, source, move) {
  2290.                                         source.addVolatile('stall');
  2291.                                         source.addVolatile('leafshield');
  2292.                                 }
  2293.                         }
  2294.                         if (name === 'misakamikoto' && move.id === 'playrough') {
  2295.                                 move.name = 'Anime Girl';
  2296.                                 move.accuracy = 100;
  2297.                                 move.basePower = 80;
  2298.                                 move.basePowerCallback = function (pokemon) {
  2299.                                         if (pokemon.anime > 3) return 100;
  2300.                                         return 80;
  2301.                                 };
  2302.                                 move.onPrepareHit = function (target, source, move) {
  2303.                                         this.attrLastMove('[still]');
  2304.                                         this.add('-anim', source, "Play Rough", target);
  2305.                                         if (!source.anime) source.anime = 0;
  2306.                                         source.anime++;
  2307.                                 };
  2308.                                 move.self = {boosts: {atk:1, spe:1}};
  2309.                                 delete move.secondary;
  2310.                                 delete move.secondaries;
  2311.                         }
  2312.                         if (name === 'mamp' && move.id === 'present') {
  2313.                                 var pepe = this.random(10) < 3 ? -1 : 1
  2314.                                 if (target.pepe && target.pepe !== 0) pepe = target.pepe;
  2315.                                 move.name = 'Rare Pepe';
  2316.                                 move.accuracy = 100;
  2317.                                 move.category = 'Special';
  2318.                                 delete move.onModifyMove;
  2319.                                 delete move.heal;
  2320.                                 move.basePower = 0;
  2321.                                 if (pepe > 0) {
  2322.                                         move.basePower = 150;
  2323.                                         move.volatileStatus = 'confusion'
  2324.                                         move.onPrepareHit = function (target, source, move) {
  2325.                                                 this.attrLastMove('[still]');
  2326.                                                 this.add('-anim', source, "Techno Blast", target);
  2327.                                                 target.pepe = 1
  2328.                                         }
  2329.                                 }
  2330.                                 if (pepe < 0) {
  2331.                                         move.onHit = function (target, source, move) {
  2332.                                                 if (target.hp < target.maxhp) this.heal(target.maxhp, target, source, "Rare Pepe");
  2333.                                                 if (target.status) target.cureStatus();
  2334.                                         }
  2335.                                         move.onPrepareHit = function (target, source, move) {
  2336.                                                 this.attrLastMove('[still]');
  2337.                                                 this.add('-anim', source, "Heal Pulse", target);
  2338.                                                 target.pepe = -1;
  2339.                                         }
  2340.                                 }
  2341.                         }
  2342.                         if (move.id === 'bide' && name === 'othermetagames') {
  2343.                                 move.name = 'Battly Move';
  2344.                                 delete move.volatileStatus;
  2345.                                 move.category = 'Status';
  2346.                                 if (pokemon.battly === 'Hidden Type') {
  2347.                                         move.onHit = function (target, source, move) {
  2348.                                                 source.moveset[3].id = source.moves[3] = 'shadowball';
  2349.                                                 source.moveset[3].move = 'Shadow Ball';
  2350.                                                 source.moveset[3].pp = source.moveset[3].maxpp = 24;
  2351.                                                 source.moveset[3].target = 'normal';
  2352.                                                 this.add('-message', ' Other Metagames forgot Battly Move and learned Shadow Ball!');
  2353.                                                 this.add('-start', source, 'typechange', 'Normal/Ghost');
  2354.                                                 source.typesData = [
  2355.                                                         {type: 'Normal', suppressed: false,  isAdded: false},
  2356.                                                         {type: 'Ghost', suppressed: false,  isAdded: false}
  2357.                                                 ];
  2358.                                                 source.activated = true;
  2359.                                         }
  2360.                                 } else if (pokemon.battly === 'Balanced Hackmons') {
  2361.                                         move.onHit = function (target, source, move) {
  2362.                                                 source.setAbility('magicbounce');
  2363.                                                 this.add('-ability', source, source.ability);
  2364.                                                 source.moveset[3].id = source.moves[3] = 'metalburst';
  2365.                                                 source.moveset[3].move = 'Metal Burst';
  2366.                                                 source.moveset[3].pp = 16;
  2367.                                                 source.moveset[3].target = 'normal';
  2368.                                                 this.add('-message', ' Other Metagames forgot Battly Move and learned Metal Burst!');
  2369.                                                 source.activated = true;
  2370.                                         }
  2371.                                 } else if (pokemon.battly === '1v1') {
  2372.                                         move.onHit = function (target, source, move) {
  2373.                                                 source.setAbility('analytic');
  2374.                                                 this.add('-ability', source, source.ability);
  2375.                                                 source.moveset[3].id = source.moves[3] = 'triattack';
  2376.                                                 source.moveset[3].move = 'Tri Attack';
  2377.                                                 source.moveset[3].pp = 16;
  2378.                                                 source.moveset[3].target = 'normal';
  2379.                                                 this.add('-message', ' Other Metagames forgot Battly Move and learned Tri Attack!');
  2380.                                                 source.activated = true;
  2381.                                         }
  2382.                                 } else if (pokemon.battly === 'Tier Shift') {
  2383.                                         move.onHit = function (target, source, move) {
  2384.                                                 source.shift = 1;
  2385.                                                 this.add('-message', ' Other Metagames has recieved buffs from Tier Shift!');
  2386.                                                 source.moveset[3].id = source.moves[3] = 'toxic';
  2387.                                                 source.moveset[3].move = 'Toxic';
  2388.                                                 source.moveset[3].pp = 16;
  2389.                                                 source.moveset[3].target = 'normal';
  2390.                                                 this.add('-message', ' Other Metagames forgot Battly Move and learned Toxic!');
  2391.                                                 source.activated = true;
  2392.                                         }
  2393.                                 } else if (pokemon.battly === 'Almost Any Ability') {
  2394.                                         move.onHit = function (target, source, move) {
  2395.                                                 source.setAbility('poisonheal');
  2396.                                                 this.add('-ability', source, source.ability);
  2397.                                                 source.trySetStatus('tox');
  2398.                                                 source.moveset[3].id = source.moves[3] = 'toxic';
  2399.                                                 source.moveset[3].move = 'Toxic';
  2400.                                                 source.moveset[3].pp = 16;
  2401.                                                 source.moveset[3].target = 'normal';
  2402.                                                 this.add('-message', ' Other Metagames forgot Battly Move and learned Toxic!');
  2403.                                                 source.activated = true;
  2404.                                         }
  2405.                                 } else {
  2406.                                         move.onHit = function (target, source, move) {
  2407.                                                 source.setAbility('download');
  2408.                                                 source.moveset[3].id = source.moves[3] = 'boomburst';
  2409.                                                 source.moveset[3].move = 'Boomburst';
  2410.                                                 source.moveset[3].pp = 16;
  2411.                                                 source.moveset[3].target = 'normal';
  2412.                                                 this.add('-message', ' Other Metagames forgot Battly Move and learned Boomburst!');
  2413.                                                 source.activated = true;
  2414.                                         }
  2415.                                 }
  2416.                         }
  2417.                         if (move.id === 'splash' && name === 'ransei') {
  2418.                                 move.name = 'Alt Change';
  2419.                                 delete move.onTryHit;
  2420.                                 move.onHit = function (pokemon) {
  2421.                                         pokemon.faint();
  2422.                                 };
  2423.                         }
  2424.                         if (move.id === 'roost' && name === 'spartanmalice') {
  2425.                                 move.name = 'Theorymon';
  2426.                                 move.target = 'normal';
  2427.                                 delete move.heal;
  2428.                                 move.onPrepareHit = function (target, source, move) {
  2429.                                         this.attrLastMove('[still]');
  2430.                                         this.add('-anim', source, "Roost", source);
  2431.                                         if (pokemon.maxhp === pokemon.hp) return false;
  2432.                                         if (pokemon.theory === 'STABmons') {
  2433.                                                 var moveMat = [source.moveset[0].id, source.moveset[1].id, source.moveset[2].id];
  2434.                                                 if (moveMat.indexOf('vcreate') > -1 && moveMat.indexOf('dragonascent') > -1 && moveMat.indexOf('tailwind') > -1) return false;
  2435.                                         } else if (pokemon.theory === 'Tier Shift') {
  2436.                                                 if (pokemon.shift !== 0) return false;
  2437.                                         } else if (pokemon.theory === '1v1') {
  2438.                                                 if (pokemon.volatiles['trapped']) return false;
  2439.                                         }
  2440.                                         this.heal(source.maxhp/2, source, source, "Theorymon");
  2441.                                 }
  2442.                                 if (pokemon.theory === 'STABmons') {
  2443.                                         move.onHit = function (target, source, move) {
  2444.                                                 var moveMat = [source.moveset[0].id, source.moveset[1].id, source.moveset[2].id];
  2445.                                                 var correction = [moveMat.indexOf('flareblitz'), moveMat.indexOf('outrage'), moveMat.indexOf('dragondance')];
  2446.                                                 var change = false;
  2447.                                                 while (!change) {
  2448.                                                         var selector = this.random(3)
  2449.                                                         var randMove = correction[selector];
  2450.                                                         if (randMove > -1 && !selector) {
  2451.                                                                 source.moveset[randMove].id = 'vcreate';
  2452.                                                                 source.moveset[randMove].name = 'V-create';
  2453.                                                                 this.add('-message', '%SpartanMalice forgot Flare Blitz and learned V-create!');
  2454.                                                                 change = true;
  2455.                                                         } else if (randMove > -1 && selector === 1) {
  2456.                                                                 source.moveset[randMove].id = 'dragonascent';
  2457.                                                                 source.moveset[randMove].name = 'Dragon Ascent';
  2458.                                                                 this.add('-message', '%SpartanMalice forgot Outrage and learned Dragon Ascent!');
  2459.                                                                 change = true;
  2460.                                                         } else if (randMove > -1) {
  2461.                                                                 source.moveset[randMove].id = 'tailwind';
  2462.                                                                 source.moveset[randMove].name = 'Tailwind';
  2463.                                                                 this.add('-message', '%SpartanMalice forgot Dragon Dance and learned Tailwind!');
  2464.                                                                 change = true;
  2465.                                                         }
  2466.                                                 }
  2467.                                         }
  2468.                                 } else if (pokemon.theory === 'Almost Any Ability') {
  2469.                                         move.onHit = function (target, source, move) {
  2470.                                                 var selector = this.random(7);
  2471.                                                 var ab = ['Poison Heal', 'Tough Claws', 'Protean', 'Adaptability', 'Drought', 'Magic Bounce', 'Filter'][selector];
  2472.                                                 source.setAbility(toId(ab));
  2473.                                                 this.add('-ability', pokemon, ab, '[from] move: Theorymon');
  2474.                                         }
  2475.                                 /*} else if (pokemon.theory === 'Inverse Battle') {
  2476.                                         move.onHit = function (target, source, move) {
  2477.                                                 if (!source.volatiles['inversebattle'] && !target.volatiles['inversebattle']) {
  2478.                                                         source.addVolatile('inversebattle');
  2479.                                                         source.side.addSideCondition('inversebattle');
  2480.                                                         target.side.addSideCondition('inversebattle');
  2481.                                                         this.add('-message', '%SpartanMalice inverted the type chart!');
  2482.                                                 } else {
  2483.                                                         source.removeVolatile('inversebattle');
  2484.                                                         source.side.removeSideCondition('inversebattle');
  2485.                                                         target.removeVolatile('inversebattle');
  2486.                                                         target.side.removeSideCondition('inversebattle');
  2487.                                                         this.add('-message', 'The inverted type chart returned to normal!');
  2488.                                                 }
  2489.                                         }
  2490.                                 */} else if (pokemon.theory === 'Tier Shift') {
  2491.                                         move.onHit = function (target, source, move) {
  2492.                                                 source.shift = 1;
  2493.                                                 this.add('-message', '%SpartanMalice has recieved buffs from Tier Shift!');
  2494.                                         }
  2495.                                 } else {
  2496.                                         move.onHit = function (target, source, move) {
  2497.                                                 target.addVolatile('trapped', source, move, 'trapper');
  2498.                                                 source.addVolatile('trapped', target, move, 'trapper');
  2499.                                         }
  2500.                                 }
  2501.                         }
  2502.                         if (move.id === 'powertrick' && name === 'theburgerking99') {
  2503.                                 move.name = 'Stat Switch';
  2504.                                 delete move.volatileStatus;
  2505.                                 move.onPrepareHit = function (target, source, move) {
  2506.                                         this.attrLastMove('[still]');
  2507.                                         this.add('-anim', source, "Topsy-Turvy", source);
  2508.                                 };
  2509.                                 move.onHit = function (pokemon) {
  2510.                                         pokemon.statSwitch = (pokemon.statSwitch) ? false : true;
  2511.                                         if (pokemon.statSwitch) {
  2512.                                                 this.add('-message', '+TheBurgerKing99\'s stats were switched!');
  2513.                                         } else {
  2514.                                                 this.add('-message', '+TheBurgerKing99\'s stats returned to normal!');
  2515.                                         }
  2516.                                 };
  2517.                         }
  2518.                         if (move.id === 'partingshot' && name === 'word') {
  2519.                                 move.name = 'Tour Win';
  2520.                                 move.flags = {authentic: 1, protect: 1};
  2521.                                 move.boosts = {atk: -1, def: -1, spd: -1};
  2522.                                 move.onPrepareHit = function (target, source, move) {
  2523.                                         this.attrLastMove('[still]');
  2524.                                         this.add('-anim', source, "Parting Shot", target);
  2525.                                 };
  2526.                                 move.onHit = function (target, source, move) {
  2527.                                         source.side.addSideCondition('tourwin');
  2528.                                         for (var i = 0; i < 12; i++) {
  2529.                                                 var gratz = this.p1.pokemon.concat(this.p2.pokemon)[i];
  2530.                                                 if (toId(gratz.name) !== name && !gratz.fainted) this.add('c|' + gratz.name + '|' + ['gratz', 'congratulations', 'gj', 'yay', 'grats', 'grates', 'gartz', 'GrATS', 'congrats', 'congratz'][this.random(5)] + ['', '', ' word'][this.random(3)]);
  2531.                                                 if (gratz === source && !gratz.fainted) this.add('c|+word|thanks');
  2532.                                         }
  2533.                                 };
  2534.                         }
  2535.                         if (move.id === 'eggbomb' && name === 'zodiax') {
  2536.                                 move.name = 'Protean Shake';
  2537.                                 move.accuracy = 100;
  2538.                                 move.onPrepareHit = function (target, source, move) {
  2539.                                         this.attrLastMove('[still]');
  2540.                                         this.add('-anim', source, "Milk Drink", target);
  2541.                                         this.add('-anim', source, "Brick Break", target);
  2542.                                 };
  2543.                                 move.affectedByImmunities = false;
  2544.                                 move.onEffectiveness = function (typeMod, type, move) {
  2545.                                         return this.getEffectiveness('???', type) + this.getEffectiveness('Bug', type) + this.getEffectiveness('Dark', type) + this.getEffectiveness('Dragon', type) + this.getEffectiveness('Electric', type) + this.getEffectiveness('Fairy', type) + this.getEffectiveness('Fighting', type) + this.getEffectiveness('Fire', type) + this.getEffectiveness('Flying', type) + this.getEffectiveness('Ghost', type) + this.getEffectiveness('Grass', type) + this.getEffectiveness('Ground', type) + this.getEffectiveness('Ice', type) + this.getEffectiveness('Normal', type) + this.getEffectiveness('Poison', type) + this.getEffectiveness('Psychic', type) + this.getEffectiveness('Rock', type) + this.getEffectiveness('Steel', type) + this.getEffectiveness('Water', type);
  2546.                                 };
  2547.                         }
  2548.                
  2549.                         //Regular Users
  2550.                         if (name === '0loyd0') {
  2551.                                 if (move.id === 'focuspunch' && pokemon.customs[0] === 1) {
  2552.                                         move.name = 'Falcon Punch';
  2553.                                         move.basePower = 250;
  2554.                                         move.type = 'Fire';
  2555.                                         move.affectedByImmunities = false; //Too epic
  2556.                                         move.beforeTurnCallback = function (pokemon) {
  2557.                                                 this.add('c|+0Loyd0|FALLCCOOOONNNNN...');
  2558.                                                 pokemon.addVolatile('focuspunch');
  2559.                                         };
  2560.                                         move.onPrepareHit = function (target, source, move) {
  2561.                                                 this.attrLastMove('[still]');
  2562.                                                 this.add('-anim', source, "Fire Punch", target);
  2563.                                                 this.add('c|+0Loyd0|PAWWWNCCCHHHHHHH!!!!!!!');
  2564.                                         };
  2565.                                 } else if (move.id === 'focuspunch' && pokemon.customs[0] === 2) {
  2566.                                         move.name = 'Falcon Dash Punch';
  2567.                                         move.type = 'Fire';
  2568.                                         move.affectedByImmunities = false; //Too epic
  2569.                                         move.flags = {contact: 1, protect: 1, punch: 1, authentic: 1};
  2570.                                         move.beforeTurnCallback = function (pokemon) {
  2571.                                                 this.add('c|+0Loyd0|FALLCCOOOONNNNN...');
  2572.                                                 pokemon.addVolatile('focuspunch');
  2573.                                         };
  2574.                                         move.onPrepareHit = function (target, source, move) {
  2575.                                                 this.attrLastMove('[still]');
  2576.                                                 this.add('-anim', source, "Fire Punch", target);
  2577.                                                 this.add('c|+0Loyd0|PAWWWNCCCHHHHHHH!!!!!!!');
  2578.                                         };
  2579.                                 } else if (move.id === 'focuspunch' && pokemon.customs[0] === 3) {
  2580.                                         move.name = 'Mighty Falcon Punch';
  2581.                                         move.basePower = 160;
  2582.                                         move.type = 'Fire';
  2583.                                         move.multihit = 2;
  2584.                                         move.affectedByImmunities = false; //Too epic
  2585.                                         move.beforeTurnCallback = function (pokemon) {
  2586.                                                 this.add('c|+0Loyd0|FALLCCOOOONNNNN...');
  2587.                                                 pokemon.addVolatile('focuspunch');
  2588.                                         };
  2589.                                         move.onPrepareHit = function (target, source, move) {
  2590.                                                 this.attrLastMove('[still]');
  2591.                                                 this.add('-anim', source, "Fire Punch", target);
  2592.                                                 this.add('c|+0Loyd0|PAWWWNCCCHHHHHHH!!!!!!!'); //This punch is so epic that you have to say PAWNCH twice.
  2593.                                         };
  2594.                                 }
  2595.                                 if (move.id === 'skyuppercut' && pokemon.customs[1] === 1) {
  2596.                                         move.name = 'Raptor Boost';
  2597.                                         move.basePower = 90;
  2598.                                         move.secondaries = [
  2599.                                                 {
  2600.                                                         chance: 20,
  2601.                                                         status: 'brn'
  2602.                                                 }, {
  2603.                                                         chance: 20,
  2604.                                                         volatileStatus: 'flinch'
  2605.                                                 }
  2606.                                         ];
  2607.                                         move.onPrepareHit = function (target, source, move) {
  2608.                                                 this.attrLastMove('[still]');
  2609.                                                 this.add('-anim', source, "Sky Uppercut", target);
  2610.                                         };
  2611.                                 } else if (move.id === 'skyuppercut' && pokemon.customs[1] === 2) {
  2612.                                         move.name = 'Heavy Raptor Boost';
  2613.                                         move.basePower = 120;
  2614.                                         move.secondaries = [{
  2615.                                                 chance: 40,
  2616.                                                 status: 'brn'
  2617.                                         }];
  2618.                                         move.onPrepareHit = function (target, source, move) {
  2619.                                                 this.attrLastMove('[still]');
  2620.                                                 this.add('-anim', source, "Sky Uppercut", target);
  2621.                                         };
  2622.                                 } else if (move.id === 'skyuppercut' && pokemon.customs[1] === 3) {
  2623.                                         move.name = 'Wind-up Raptor Boost';
  2624.                                         move.basePower = 60;
  2625.                                         move.secondaries = [
  2626.                                                 {
  2627.                                                         chance: 10,
  2628.                                                         status: 'brn'
  2629.                                                 }, {
  2630.                                                         chance: 10,
  2631.                                                         volatileStatus: 'flinch'
  2632.                                                 }
  2633.                                         ];
  2634.                                         move.flags = {contact: 1, protect: 1, mirror: 1, punch: 1, authentic: 1};
  2635.                                         move.onPrepareHit = function (target, source, move) {
  2636.                                                 this.attrLastMove('[still]');
  2637.                                                 this.add('-anim', source, "Sky Uppercut", target);
  2638.                                         };
  2639.                                 }
  2640.                                 if (move.id === 'dive' && pokemon.customs[2] === 1) {
  2641.                                         move.name = 'Falcon Dive';
  2642.                                         move.basePower = 120;
  2643.                                         move.type = 'Fire';
  2644.                                         delete move.onTry;
  2645.                                         move.onPrepareHit = function (target, source, move) {
  2646.                                                 this.attrLastMove('[still]');
  2647.                                                 this.add('-anim', source, "Fly", target);
  2648.                                         };
  2649.                                         move.onHit = function () {
  2650.                                                 this.add('c|+0Loyd0|YESZH!!');
  2651.                                         };
  2652.                                 } else if (move.id === 'dive' && pokemon.customs[2] === 2) {
  2653.                                         move.name = 'Falcon Strike';
  2654.                                         move.basePower = 80;
  2655.                                         move.type = 'Fire';
  2656.                                         delete move.onTry;
  2657.                                         move.onPrepareHit = function (target, source, move) {
  2658.                                                 this.attrLastMove('[still]');
  2659.                                                 this.add('-anim', source, "Fly", target);
  2660.                                         };
  2661.                                 } else if (move.id === 'dive' && pokemon.customs[2] === 3) {
  2662.                                         move.name = 'Explosive Falcon Dive';
  2663.                                         move.basePower = 150;
  2664.                                         move.type = 'Fire';
  2665.                                         delete move.onTry;
  2666.                                         move.secondaries = [
  2667.                                                 {
  2668.                                                         chance: 30,
  2669.                                                         status: 'brn'
  2670.                                                 }
  2671.                                         ];
  2672.                                         move.onPrepareHit = function (target, source, move) {
  2673.                                                 this.attrLastMove('[still]');
  2674.                                                 this.add('-anim', source, "Fly", target);
  2675.                                         };
  2676.                                         move.onHit = function () {
  2677.                                                 this.add('c|+0Loyd0|YESZH!!');
  2678.                                         };
  2679.                                 }
  2680.                                 if (move.id === 'blazekick' && pokemon.customs[3] === 1) {
  2681.                                         move.name = 'Falcon Kick';
  2682.                                         move.basePower = 100;
  2683.                                         move.onPrepareHit = function (target, source, move) {
  2684.                                                 this.attrLastMove('[still]');
  2685.                                                 this.add('-anim', source, "Blaze Kick", target);
  2686.                                                 this.add('c|+0Loyd0|FALCON KICK!');
  2687.                                         };
  2688.                                 } else if (move.id === 'blazekick' && pokemon.customs[3] === 2) {
  2689.                                         move.name = 'Falcon Kick Fury';
  2690.                                         move.basePower = 30;
  2691.                                         move.multihit = 5;
  2692.                                         move.onPrepareHit = function (target, source, move) {
  2693.                                                 this.attrLastMove('[still]');
  2694.                                                 this.add('-anim', source, "Blaze Kick", target);
  2695.                                                 this.add('c|+0Loyd0|FALCON KICK!'); //Intentional
  2696.                                         };
  2697.                                 } else if (move.id === 'blazekick' && pokemon.customs[3] === 3) {
  2698.                                         move.name = 'Lightning Kick';
  2699.                                         move.basePower = 120;
  2700.                                         delete move.secondary;
  2701.                                         move.secondaries = [
  2702.                                                 {
  2703.                                                         chance: 100,
  2704.                                                         status: 'par'
  2705.                                                 }
  2706.                                         ];
  2707.                                         move.onEffectiveness = function (typeMod, type, move) {
  2708.                                                 return typeMod + this.getEffectiveness('Electric', type);
  2709.                                         };
  2710.                                         move.onPrepareHit = function (target, source, move) {
  2711.                                                 this.attrLastMove('[still]');
  2712.                                                 this.add('-anim', source, "Blaze Kick", target);
  2713.                                                 this.add('c|+0Loyd0|FALCON KICK!');
  2714.                                         };
  2715.                                 }
  2716.                         }
  2717.                         if (name === 'choonbot' && move.id === 'discharge') {
  2718.                                 var choon = this.random(6) + 1;
  2719.                                 move.name = '$dicegame';
  2720.                                 move.basePower = choon*40;
  2721.                                 delete move.secondary;
  2722.                                 delete move.secondaries;
  2723.                                 move.type = '???';
  2724.                                 move.affectedByImmunities = false;
  2725.                                 move.onPrepareHit = function (target, source, move) {
  2726.                                         this.attrLastMove('[still]');
  2727.                                         this.add('-anim', source, "Metronome", source);
  2728.                                         this.add('-message', 'ChoonBot is rolling his dice...');
  2729.                                 };
  2730.                                 move.onTryHit = function(target, source) {
  2731.                                         this.add('-message', 'ChoonBot rolled a ' + choon + '!');
  2732.                                         var anims = ["PLACEHOLDER OF TRUUUUUUUUUUUTH", "Secret Power", "Judgment"];
  2733.                                         this.add('-anim', source, anims[Math.floor((choon-1)/2)], target);
  2734.                                 };
  2735.                         }
  2736.                 }
  2737.         },
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