mirror of
https://github.com/smogon/pokemon-showdown.git
synced 2026-04-26 02:39:38 -05:00
1801 lines
78 KiB
JavaScript
1801 lines
78 KiB
JavaScript
/**
|
|
* Seasonal Ladders of Pokémon Showdown
|
|
* The formats with the mod-like tweaks go into /config/formats.js
|
|
* The team making scripts go into /data/random-teams.js
|
|
*
|
|
* THIS IS A BACKUP FILE.
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
class RandomTeams extends Dex.ModdedDex {
|
|
randomSeasonalSFTTeam(side) {
|
|
// Let's get started!
|
|
let lead = 'gallade';
|
|
let team = [];
|
|
let set = {};
|
|
let teamDetails = {megaStone: 0};
|
|
|
|
// If the other team has been chosen, we get its opposing force.
|
|
if (this.scenario) {
|
|
lead = {'lotr': 'reshiram', 'redblue': 'pidgeot', 'terminator': 'alakazam', 'gen1': 'gengar', 'desert': 'probopass', 'shipwreck': 'machamp'}[this.scenario];
|
|
} else {
|
|
// First team being generated, let's get one of the possibilities.
|
|
// We need a fix lead for obvious reasons.
|
|
lead = this.sample(['gallade', 'pikachu', 'genesect', 'gengar', 'groudon', 'kyogre']);
|
|
this.scenario = {'scenario': {'gallade': 'lotr', 'pikachu': 'redblue', 'genesect': 'terminator', 'gengar': 'gen1', 'groudon': 'desert', 'kyogre': 'shipwreck'}[lead]};
|
|
}
|
|
|
|
// Gen 1 mons and blue/red teams have their own set maker.
|
|
if (lead === 'pikachu') {
|
|
// Add Red's team
|
|
team = [
|
|
{
|
|
name: 'Pika',
|
|
species: 'pikachu',
|
|
moves: ['volttackle', 'brickbreak', 'irontail', 'fakeout'],
|
|
evs: {hp: 0, atk: 252, def: 0, spa: 0, spd: 0, spe: 252},
|
|
ivs: {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31},
|
|
item: 'lightball',
|
|
level: 90,
|
|
shiny: false,
|
|
nature: 'Jolly',
|
|
ability: 'Lightning Rod',
|
|
},
|
|
{
|
|
name: 'Lapras',
|
|
moves: ['hydropump', 'icebeam', 'thunderbolt', 'iceshard'],
|
|
evs: {hp: 252, atk: 4, def: 0, spa: 252, spd: 0, spe: 0},
|
|
ivs: {hp: 31, atk: 0, def: 31, spa: 31, spd: 31, spe: 31},
|
|
item: 'leftovers',
|
|
level: 80,
|
|
shiny: false,
|
|
nature: 'Quiet',
|
|
ability: 'Water Absorb',
|
|
},
|
|
{
|
|
name: 'Snorlax',
|
|
moves: ['bodyslam', 'crunch', 'earthquake', 'seedbomb'],
|
|
evs: {hp: 252, atk: 252, def: 4, spa: 0, spd: 0, spe: 0},
|
|
ivs: {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31},
|
|
item: 'leftovers',
|
|
level: 82,
|
|
shiny: false,
|
|
nature: 'Adamant',
|
|
ability: 'Thick Fat',
|
|
},
|
|
{
|
|
name: 'Venusaur',
|
|
moves: ['leafstorm', 'earthquake', 'sludgebomb', 'sleeppowder'],
|
|
evs: {hp: 252, atk: 4, def: 0, spa: 252, spd: 0, spe: 0},
|
|
ivs: {hp: 31, atk: 0, def: 31, spa: 31, spd: 31, spe: 31},
|
|
item: 'whiteherb',
|
|
level: 84,
|
|
shiny: false,
|
|
nature: 'Quiet',
|
|
ability: 'Overgrow',
|
|
},
|
|
{
|
|
name: 'Charizard',
|
|
moves: ['fireblast', 'focusblast', 'airslash', 'dragonpulse'],
|
|
evs: {hp: 4, atk: 0, def: 0, spa: 252, spd: 0, spe: 252},
|
|
ivs: {hp: 31, atk: 0, def: 31, spa: 31, spd: 31, spe: 31},
|
|
item: 'charizarditey',
|
|
level: 73,
|
|
shiny: false,
|
|
nature: 'Timid',
|
|
ability: 'Solar Power',
|
|
},
|
|
{
|
|
name: 'Blastoise',
|
|
moves: ['waterspout', 'hydropump', 'flashcannon', 'focusblast'],
|
|
evs: {hp: 252, atk: 0, def: 4, spa: 252, spd: 0, spe: 0},
|
|
ivs: {hp: 31, atk: 0, def: 31, spa: 31, spd: 31, spe: 31},
|
|
item: 'choicescarf',
|
|
level: 84,
|
|
shiny: false,
|
|
nature: 'Modest',
|
|
ability: 'Torrent',
|
|
},
|
|
];
|
|
} else if (lead === 'pidgeot') {
|
|
// Add Blue's team
|
|
team = [
|
|
{
|
|
name: 'Pidgeot',
|
|
moves: ['hurricane', 'heatwave', 'roost', 'hiddenpowerground'],
|
|
evs: {hp: 4, atk: 0, def: 0, spa: 252, spd: 0, spe: 252},
|
|
ivs: {hp: 31, atk: 31, def: 31, spa: 30, spd: 30, spe: 31},
|
|
item: 'pidgeotite',
|
|
level: 76,
|
|
shiny: false,
|
|
nature: 'Timid',
|
|
ability: 'Keen Eye',
|
|
},
|
|
{
|
|
name: 'Exeggutor',
|
|
moves: ['gigadrain', 'sunnyday', 'leechseed', 'substitute'],
|
|
evs: {hp: 252, atk: 0, def: 4, spa: 252, spd: 0, spe: 0},
|
|
ivs: {hp: 31, atk: 0, def: 31, spa: 31, spd: 31, spe: 31},
|
|
item: 'sitrusberry',
|
|
level: 85,
|
|
shiny: false,
|
|
nature: 'Modest',
|
|
ability: 'Harvest',
|
|
},
|
|
{
|
|
name: 'Gyarados',
|
|
moves: ['waterfall', 'earthquake', 'icefang', 'dragondance'],
|
|
evs: {hp: 4, atk: 252, def: 0, spa: 0, spd: 0, spe: 252},
|
|
ivs: {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31},
|
|
item: 'leftovers',
|
|
level: 80,
|
|
shiny: false,
|
|
nature: 'Adamant',
|
|
ability: 'Intimidate',
|
|
},
|
|
{
|
|
name: 'Alakazam',
|
|
moves: ['psychic', 'focusblast', 'shadowball', 'reflect'],
|
|
evs: {hp: 4, atk: 0, def: 0, spa: 252, spd: 0, spe: 252},
|
|
ivs: {hp: 31, atk: 0, def: 31, spa: 31, spd: 31, spe: 31},
|
|
item: 'lifeorb',
|
|
level: 75,
|
|
shiny: false,
|
|
nature: 'Modest',
|
|
ability: 'Magic Guard',
|
|
},
|
|
{
|
|
name: 'Arcanine',
|
|
moves: ['flareblitz', 'closecombat', 'wildcharge', 'extremespeed'],
|
|
evs: {hp: 4, atk: 252, def: 0, spa: 0, spd: 0, spe: 252},
|
|
ivs: {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31},
|
|
item: 'expertbelt',
|
|
level: 80,
|
|
shiny: false,
|
|
nature: 'Jolly',
|
|
ability: 'Flash Fire',
|
|
},
|
|
{
|
|
name: 'Machamp',
|
|
moves: ['superpower', 'stoneedge', 'firepunch', 'bulletpunch'],
|
|
evs: {hp: 252, atk: 252, def: 4, spa: 0, spd: 0, spe: 0},
|
|
ivs: {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31},
|
|
item: 'whiteherb',
|
|
level: 86,
|
|
shiny: false,
|
|
nature: 'Adamant',
|
|
ability: 'No Guard',
|
|
},
|
|
];
|
|
} else if (lead === 'gengar') {
|
|
// Add gen 1 team.
|
|
this.gen = 1;
|
|
|
|
// Pre-prepare sets.
|
|
let sets = {
|
|
gengar: {
|
|
name: 'GENGAR',
|
|
moves: ['hypnosis', 'explosion', 'thunderbolt', this.sample(['megadrain', 'psychic'])],
|
|
},
|
|
tauros: {
|
|
name: 'TAUROS',
|
|
moves: ['bodyslam', 'hyperbeam', 'blizzard', 'earthquake'],
|
|
},
|
|
alakazam: {
|
|
name: 'ALAKAZAM',
|
|
moves: ['psychic', 'recover', 'thunderwave', this.sample(['reflect', 'seismictoss'])],
|
|
},
|
|
chansey: {
|
|
name: 'CHANSEY',
|
|
moves: ['softboiled', 'thunderwave', 'icebeam', this.sample(['thunderbolt', 'counter'])],
|
|
},
|
|
exeggutor: {
|
|
name: 'EXEGGUTOR',
|
|
moves: ['sleeppowder', 'psychic', 'explosion', this.sample(['doubleedge', 'megadrain', 'stunspore'])],
|
|
},
|
|
rhydon: {
|
|
name: 'RHYDON',
|
|
moves: ['earthquake', 'rockslide', 'substitute', 'bodyslam'],
|
|
},
|
|
golem: {
|
|
name: 'GOLEM',
|
|
moves: ['bodyslam', 'earthquake', 'rockslide', 'explosion'],
|
|
},
|
|
jynx: {
|
|
name: 'JYNX',
|
|
moves: ['psychic', 'lovelykiss', 'blizzard', 'mimic'],
|
|
},
|
|
lapras: {
|
|
name: 'LAPRAS',
|
|
moves: ['confuseray', this.sample(['thunderbolt', 'rest']), this.sample(['blizzard', 'icebeam']), 'bodyslam'],
|
|
},
|
|
zapdos: {
|
|
name: 'ZAPDOS',
|
|
moves: ['thunderbolt', 'thunderwave', 'drillpeck', 'agility'],
|
|
},
|
|
slowbro: {
|
|
name: 'SLOWBRO',
|
|
moves: ['amnesia', 'rest', 'surf', 'thunderwave'],
|
|
},
|
|
persian: {
|
|
name: 'PERSIAN',
|
|
moves: ['slash', 'bubblebeam', 'hyperbeam', this.sample(['bodyslam', 'screech', 'thunderbolt'])],
|
|
},
|
|
cloyster: {
|
|
name: 'CLOYSTER',
|
|
moves: ['clamp', 'blizzard', 'hyperbeam', 'explosion'],
|
|
},
|
|
starmie: {
|
|
name: 'STARMIE',
|
|
moves: ['blizzard', 'thunderbolt', 'recover', 'thunderwave'],
|
|
},
|
|
snorlax: {
|
|
name: 'SNORLAX',
|
|
moves: [
|
|
['amnesia', this.sample(['blizzard', 'icebeam']), this.sample(['bodyslam', 'thunderbolt']), this.sample(['rest', 'selfdestruct'])],
|
|
['bodyslam', 'hyperbeam', this.sample(['earthquake', 'surf']), 'selfdestruct'],
|
|
][this.random(2)],
|
|
},
|
|
dragonite: {
|
|
name: 'DRAGONITE',
|
|
moves: ['agility', 'hyperbeam', 'wrap', this.sample(['blizzard', 'surf'])],
|
|
},
|
|
};
|
|
let leadOptions = ['alakazam', 'jynx', 'gengar', 'exeggutor'];
|
|
lead = this.sampleNoReplace(leadOptions);
|
|
|
|
let partySetsIndex = ['tauros', 'chansey', 'rhydon', 'golem', 'lapras', 'zapdos', 'slowbro', 'persian', 'cloyster', 'starmie', 'snorlax', 'dragonite'];
|
|
partySetsIndex = leadOptions.concat(partySetsIndex);
|
|
|
|
for (let i = 0; i < 6; i++) {
|
|
set = sets[i ? this.sampleNoReplace(partySetsIndex) : lead];
|
|
set.ability = 'None';
|
|
set.evs = {hp: 255, atk: 255, def: 126, spa: 255, spd: 126, spe: 255};
|
|
set.ivs = {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30};
|
|
set.item = '';
|
|
set.level = 100;
|
|
set.shiny = false;
|
|
set.species = toId(set.name);
|
|
team.push(set);
|
|
}
|
|
} else if (lead === 'gallade') {
|
|
// This is the Aragorn team from the LOTR battle. Special set for Aragorn.
|
|
set = this.randomSet(this.getTemplate(lead), team.length, {});
|
|
set.species = toId(set.name);
|
|
set.name = 'Aragorn';
|
|
set.item = 'Galladite';
|
|
set.moves = ['psychocut', 'bulkup', this.sample(['drainpunch', 'closecombat']), this.sample(['nightslash', 'leafblade', 'xscissor', 'stoneedge', 'doubleedge', 'knockoff'])];
|
|
set.level = 72;
|
|
team.push(set);
|
|
|
|
// We get one elf or bard.
|
|
let elf = this.sample(['jynx', 'azelf', 'celebi', 'victini', 'landorustherian']);
|
|
set = this.randomSet(this.getTemplate(elf), team.length, {});
|
|
set.species = toId(set.name);
|
|
set.name = {'jynx': 'Galadriel', 'azelf': 'Legolas', 'celebi': 'Celeborn', 'victini': 'Elrond', 'landorustherian': 'Bard'}[elf];
|
|
if (elf === 'landorustherian') {
|
|
set.item = 'Earth Plate';
|
|
set.moves = ['thousandarrows', 'thousandwaves', 'uturn', 'superpower'];
|
|
}
|
|
team.push(set);
|
|
|
|
// Now we add some other characters from the fellowship.
|
|
let fellowship = {'hoopa': 'Gandalf', 'baltoy': 'Frodo', 'munchlax': 'Samwise'};
|
|
for (let p in fellowship) {
|
|
let template = this.getTemplate(p);
|
|
set = this.randomSet(template, team.length, {});
|
|
set.species = toId(set.name);
|
|
set.name = fellowship[p];
|
|
// Add a way to go around dark-types.
|
|
let hasOrcKilling = false;
|
|
for (let n = 0; n < 4; n++) {
|
|
let move = this.getMove(set.moves[n]);
|
|
if (move.type in {'Bug': 1, 'Fighting': 1}) {
|
|
hasOrcKilling = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!hasOrcKilling) set.moves[3] = (template.baseStats.atk > template.baseStats.spa) ? 'closecombat' : 'aurasphere';
|
|
if (p !== 'hoopa') {
|
|
set.item = 'Eviolite';
|
|
set.level = 90;
|
|
set.evs = {hp: 4, atk: 126, def: 126, spa: 126, spd: 126, spe: 0};
|
|
if (p === 'baltoy') set.moves[0] = 'Growl';
|
|
}
|
|
team.push(set);
|
|
}
|
|
|
|
// And now an extra good guy.
|
|
let goodguy = [
|
|
'primeape', 'aegislash', 'mimejr', 'timburr', 'lucario',
|
|
this.sample(['sudowoodo', 'trevenant', 'abomasnow', 'shiftry', 'cacturne', 'nuzleaf']),
|
|
['pidgeot', 'staraptor', 'braviary', 'aerodactyl', 'noivern', 'lugia', 'hooh', 'moltres', 'articuno', 'zapdos'][this.random(10)],
|
|
][this.random(7)];
|
|
set = this.randomSet(this.getTemplate(goodguy), team.length, {});
|
|
set.species = toId(set.name);
|
|
set.name = {
|
|
'primeape': 'Gimli', 'aegislash': 'Faramir', 'mimejr': 'Pippin', 'timburr': 'Merry', 'lucario': 'Boromir',
|
|
'trevenant': 'Treebeard', 'sudowoodo': 'Birchseed', 'abomasnow': 'Fimbrethil', 'shiftry': 'Quickbeam',
|
|
'cacturne': 'Finglas', 'nuzleaf': 'Lindenroot', 'pidgeot': 'Great Eagle', 'staraptor': 'Great Eagle',
|
|
'braviary': 'Great Eagle', 'aerodactyl': 'Great Eagle', 'noivern': 'Great Eagle', 'lugia': 'Great Eagle',
|
|
'hooh': 'Great Eagle', 'moltres': 'Great Eagle', 'articuno': 'Great Eagle', 'zapdos': 'Great Eagle',
|
|
}[goodguy];
|
|
team.push(set);
|
|
} else if (lead === 'reshiram') {
|
|
// This is the Mordor team from the LOTR battle.
|
|
let mordor = {'reshiram': 'Smaug', 'yveltal': 'Nazgûl', 'hoopaunbound': 'Saruman'};
|
|
for (let p in mordor) {
|
|
set = this.randomSet(this.getTemplate(p), team.length, {});
|
|
set.species = toId(set.name);
|
|
set.name = mordor[p];
|
|
if (p === 'yveltal') {
|
|
set.item = 'Choice Scarf';
|
|
set.moves = ['oblivionwing', 'darkpulse', 'hurricane', 'uturn'];
|
|
set.nature = 'Timid';
|
|
set.evs = {hp: 0, atk: 4, def: 0, spa: 252, spd: 0, spe: 252};
|
|
set.level = 70;
|
|
}
|
|
if (p === 'hoopaunbound') set.level = 70;
|
|
team.push(set);
|
|
}
|
|
|
|
// This army has an orc, a troll, and a bad-guy human. Or Gollum instead any of those three.
|
|
let addGollum = false;
|
|
// 66% chance of getting an orc.
|
|
if (this.randomChance(2, 3)) {
|
|
let orc = this.sample(['quilladin', 'chesnaught', 'granbull', 'drapion', 'pangoro', 'feraligatr', 'haxorus', 'garchomp']);
|
|
set = this.randomSet(this.getTemplate(orc), team.length, {});
|
|
set.species = toId(set.name);
|
|
set.name = 'Orc';
|
|
team.push(set);
|
|
} else {
|
|
addGollum = true;
|
|
}
|
|
// If we got an orc, 66% chance of getting a troll. Otherwise, 100%.
|
|
if (addGollum || this.randomChance(2, 3)) {
|
|
let troll = this.sample(['conkeldurr', 'drowzee', 'hypno', 'seismitoad', 'weavile', 'machamp']);
|
|
set = this.randomSet(this.getTemplate(troll), team.length, {});
|
|
set.species = toId(set.name);
|
|
set.name = 'Troll';
|
|
team.push(set);
|
|
} else {
|
|
addGollum = true;
|
|
}
|
|
// If we got an orc and a troll, 66% chance of getting a Mordor man. Otherwise, 100%.
|
|
if (addGollum || this.randomChance(2, 3)) {
|
|
let badhuman = ['bisharp', 'alakazam', 'medicham', 'mrmime', 'gardevoir', 'hitmonlee', 'hitmonchan', 'hitmontop', 'meloetta', 'sawk', 'throh', 'scrafty'][this.random(12)];
|
|
set = this.randomSet(this.getTemplate(badhuman), team.length, {});
|
|
set.species = toId(set.name);
|
|
set.name = 'Mordor man';
|
|
if (badhuman === 'bisharp') {
|
|
set.moves = ['suckerpunch', 'brickbreak', 'knockoff', 'ironhead'];
|
|
set.item = 'Life Orb';
|
|
}
|
|
if (set.level < 80) set.level = 80;
|
|
team.push(set);
|
|
} else {
|
|
addGollum = true;
|
|
}
|
|
// If we did forfeit an orc, a troll, or a Mordor man, add Gollum in its stead.
|
|
if (addGollum) {
|
|
set = this.randomSet(this.getTemplate('sableye'), team.length, {});
|
|
set.species = toId(set.name);
|
|
set.name = 'Gollum';
|
|
set.moves = ['fakeout', 'bind', 'soak', 'infestation'];
|
|
set.item = 'Leftovers';
|
|
set.level = 99;
|
|
team.push(set);
|
|
}
|
|
} else if (lead === 'genesect') {
|
|
// Terminator team.
|
|
set = this.randomSet(this.getTemplate(lead), team.length, {});
|
|
set.species = toId(set.name);
|
|
set.name = 'Terminator T-1000';
|
|
set.item = 'Choice Band';
|
|
set.moves = ['extremespeed', 'ironhead', 'blazekick', 'uturn'];
|
|
set.nature = 'Jolly';
|
|
set.evs.spe = 252;
|
|
team.push(set);
|
|
|
|
// The rest are just random botmons
|
|
let bots = [
|
|
'golurk', 'porygon', 'porygon2', 'porygonz', 'rotom', 'rotomheat', 'rotomwash', 'rotommow', 'rotomfan',
|
|
'rotomfrost', 'regice', 'regirock', 'registeel', 'magnezone', 'magneton', 'magnemite', 'heatran', 'klinklang',
|
|
'klang', 'klink', 'nosepass', 'probopass', 'electivire', 'metagross', 'armaldo', 'aggron', 'bronzong',
|
|
];
|
|
let names = ['T-850', 'E-3000', 'T-700', 'ISO-9001', 'WinME'];
|
|
for (let i = 0; i < 5; i++) {
|
|
let pokemon = this.sampleNoReplace(bots);
|
|
let template = this.getTemplate(pokemon);
|
|
set = this.randomSet(template, i, {});
|
|
set.species = toId(set.name);
|
|
set.name = 'SkynetBot ' + names[i];
|
|
if (pokemon === 'rotomfan') set.item = 'Life Orb';
|
|
set.ivs.spe = set.ivs.spe % 2;
|
|
set.evs.spe = 0;
|
|
team.push(set);
|
|
}
|
|
} else if (lead === 'alakazam') {
|
|
// Human survival team.
|
|
let humans = [
|
|
'medicham', 'mrmime', 'gallade', 'gardevoir', 'lucario', 'hitmonlee', 'hitmonchan', 'hitmontop', 'tyrogue',
|
|
'chansey', 'blissey', 'meloetta', 'sawk', 'throh', 'scrafty',
|
|
];
|
|
let names = ['John Connor', 'Sarah Connor', 'Terminator T-800', 'Kyle Reese', 'Miles Bennett Dyson', 'Dr. Silberman'];
|
|
let hasMega = false;
|
|
let makeZamSet = false;
|
|
|
|
for (let i = 0; i < 6; i++) {
|
|
let pokemon = i ? this.sampleNoReplace(humans) : lead;
|
|
let template = this.getTemplate(pokemon);
|
|
set = this.randomSet(template, i, {});
|
|
set.species = toId(set.name);
|
|
set.name = names[i];
|
|
let hasBotKilling = false;
|
|
// Give humans a way around robots
|
|
for (let n = 0; n < 4; n++) {
|
|
let move = this.getMove(set.moves[n]);
|
|
if (move.type in {'Fire': 1, 'Fighting': 1}) {
|
|
hasBotKilling = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!hasBotKilling) {
|
|
set.moves[3] = (template.baseStats.atk > template.baseStats.spa) ? this.sample(['flareblitz', 'closecombat']) : this.sample(['flamethrower', 'aurasphere']);
|
|
set.level += 5;
|
|
}
|
|
if (toId(set.ability) === 'unburden') set.ability = 'Reckless';
|
|
// If we have Gardevoir, make it the mega. Then, Gallade.
|
|
if (pokemon === 'gardevoir') {
|
|
if (!hasMega) {
|
|
set.item = 'Gardevoirite';
|
|
hasMega = true;
|
|
makeZamSet = true;
|
|
} else {
|
|
set.item = 'Life Orb';
|
|
}
|
|
}
|
|
if (pokemon === 'gallade') {
|
|
if (!hasMega) {
|
|
set.item = 'Galladite';
|
|
hasMega = true;
|
|
makeZamSet = true;
|
|
} else {
|
|
set.item = 'Life Orb';
|
|
}
|
|
}
|
|
if (pokemon === 'lucario') {
|
|
if (!hasMega) {
|
|
set.item = 'Lucarionite';
|
|
hasMega = true;
|
|
makeZamSet = true;
|
|
} else {
|
|
set.item = 'Life Orb';
|
|
}
|
|
}
|
|
if (pokemon === 'chansey') {
|
|
set.item = 'Eviolite';
|
|
set.moves = ['softboiled', 'flamethrower', 'toxic', 'counter'];
|
|
}
|
|
if (pokemon === 'blissey') {
|
|
set.item = 'Leftovers';
|
|
set.moves = ['softboiled', 'flamethrower', 'barrier', 'counter'];
|
|
}
|
|
if (pokemon in {'hitmontop': 1, 'scrafty': 1}) {
|
|
set.ability = 'Intimidate';
|
|
set.item = 'Leftovers';
|
|
set.moves = ['fakeout', 'drainpunch', 'knockoff', 'flareblitz'];
|
|
set.evs = {hp: 252, atk: 252, def: 4, spa: 0, spd: 0, spe: 0};
|
|
set.nature = 'Brave';
|
|
}
|
|
set.evs.spe = 0;
|
|
set.ivs.spe = set.ivs.spe % 2;
|
|
team.push(set);
|
|
}
|
|
if (makeZamSet) {
|
|
team[0].item = 'Focus Sash';
|
|
team[0].level = 90;
|
|
team[0].moves = ['psychic', 'earthpower', 'shadowball', 'flamethrower'];
|
|
team[0].ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 0};
|
|
team[0].evs.hp += team[0].evs.spe;
|
|
team[0].evs.spe = 0;
|
|
team[0].nature = 'Quiet';
|
|
}
|
|
} else if (lead === 'groudon') {
|
|
// Egyptians from the exodus battle.
|
|
let egyptians = [
|
|
'krookodile', 'tyranitar', 'rapidash', 'hippowdon', 'claydol', 'flygon', 'sandslash', 'torterra', 'darmanitan',
|
|
'volcarona', 'arcanine', 'entei', 'aggron', 'armaldo', 'cradily', 'cacturne', 'exeggutor', 'tropius', 'yanmega',
|
|
'muk', 'numel', 'camerupt', 'yamask', 'cofagrigus', 'glameow', 'purugly', 'skitty', 'delcatty', 'liepard',
|
|
'solrock', 'lunatone', 'shinx', 'luxio', 'luxray', 'pidgeot', 'ampharos', 'unown', 'altaria', 'garchomp',
|
|
'heliolisk', 'maractus', 'dugtrio', 'steelix', 'meowth', 'persian', 'gliscor', 'drapion',
|
|
];
|
|
let template = this.getTemplate(lead);
|
|
set = this.randomSet(template, 0, {});
|
|
set.species = toId(set.name);
|
|
set.name = 'Ramesses II';
|
|
set.ability = 'Rivalry';
|
|
if (toId(set.item) === 'redorb') {
|
|
set.item = 'Life Orb';
|
|
}
|
|
set.level = 67;
|
|
team.push(set);
|
|
|
|
for (let i = 1; i < 6; i++) {
|
|
let pokemon = this.sampleNoReplace(egyptians);
|
|
template = this.getTemplate(pokemon);
|
|
let set = this.randomSet(template, i, teamDetails);
|
|
if (this.getItem(set.item).megaStone) teamDetails.megaStone++;
|
|
set.species = toId(set.name);
|
|
set.name = 'Egyptian ' + template.species;
|
|
team.push(set);
|
|
}
|
|
} else if (lead === 'probopass') {
|
|
// Jews from the exodus battle.
|
|
let jews = [
|
|
'nosepass', this.sample(['arceus', 'arceusfire']), 'flaaffy', 'tauros', 'miltank', 'gogoat', 'excadrill',
|
|
'seismitoad', 'toxicroak', 'yanmega',
|
|
];
|
|
let template = this.getTemplate(lead);
|
|
set = this.randomSet(template, 0);
|
|
set.species = toId(set.name);
|
|
set.name = 'Moses';
|
|
team.push(set);
|
|
|
|
for (let i = 1; i < 6; i++) {
|
|
let pokemon = this.sampleNoReplace(jews);
|
|
template = this.getTemplate(pokemon);
|
|
set = this.randomSet(template, i);
|
|
set.species = toId(set.name);
|
|
set.name = 'Hebrew ' + template.species;
|
|
team.push(set);
|
|
}
|
|
} else {
|
|
// Now the shipwreck battle, pretty straightforward.
|
|
let seasonalPokemonList;
|
|
if (lead === 'kyogre') {
|
|
seasonalPokemonList = [
|
|
'sharpedo', 'malamar', 'octillery', 'gyarados', 'clawitzer', 'whiscash', 'relicanth', 'thundurus', 'thundurustherian',
|
|
'thundurus', 'thundurustherian', 'tornadus', 'tornadustherian', 'pelipper', 'wailord', 'avalugg', 'milotic', 'crawdaunt',
|
|
];
|
|
} else if (lead === 'machamp') {
|
|
seasonalPokemonList = [
|
|
'chatot', 'feraligatr', 'poliwrath', 'swampert', 'barbaracle', 'carracosta', 'lucario', 'ursaring', 'vigoroth',
|
|
'machoke', 'conkeldurr', 'gurdurr', 'seismitoad', 'chesnaught', 'electivire',
|
|
];
|
|
}
|
|
for (let i = 0; i < 6; i++) {
|
|
let pokemon = i ? this.sampleNoReplace(seasonalPokemonList) : lead;
|
|
let template = this.getTemplate(pokemon);
|
|
let set = this.randomSet(template, i, teamDetails);
|
|
if (this.getItem(set.item).megaStone) teamDetails.megaStone++;
|
|
|
|
// Sailor team is made of pretty bad mons, boost them a little.
|
|
if (lead === 'machamp') {
|
|
let isAtk = (template.baseStats.atk > template.baseStats.spa);
|
|
if (pokemon === 'machamp') {
|
|
set.item = 'Life Orb';
|
|
set.ability = 'Technician';
|
|
set.moves = ['aquajet', 'bulletpunch', 'machpunch', 'hiddenpowerelectric'];
|
|
set.level = 75;
|
|
set.ivs = {hp: 31, atk: 31, def: 31, spa: 30, spd: 31, spe: 31};
|
|
set.nature = 'Brave';
|
|
set.evs = {hp: 0, atk: 252, def: 0, spa: 252, spd: 0, spe: 4};
|
|
} else {
|
|
let shellSmashPos = -1;
|
|
// Too much OP if all of them have an electric attack.
|
|
if (this.randomChance(2, 3)) {
|
|
let hasFishKilling = false;
|
|
for (let n = 0; n < 4; n++) {
|
|
let move = this.getMove(set.moves[n]);
|
|
if (move.type in {'Electric': 1}) {
|
|
hasFishKilling = true;
|
|
} else if (move.id === 'raindance') { // useless, replace ASAP
|
|
// Swampert is too OP for an electric move, so we give it another move
|
|
set.moves[n] = (pokemon === 'swampert' ? 'doubleedge' : 'fusionbolt');
|
|
hasFishKilling = true;
|
|
} else if (move.id === 'shellsmash') { // don't replace this!
|
|
shellSmashPos = n;
|
|
}
|
|
}
|
|
if (!hasFishKilling && pokemon !== 'swampert') {
|
|
let fishKillerPos = (shellSmashPos === 3 ? 2 : 3);
|
|
set.moves[fishKillerPos] = isAtk ? 'thunderpunch' : 'thunderbolt';
|
|
}
|
|
}
|
|
set.evs = {hp: 252, atk: 0, def: 0, spa: 0, spd: 0, spe: 0};
|
|
if (shellSmashPos > -1 || toId(set.ability) === 'swiftswim' || (pokemon === 'swampert' && this.getItem(set.item).megaStone)) {
|
|
// Give Shell Smashers and Mega Swampert a little bit of speed
|
|
set.evs.atk = 200;
|
|
set.evs.spe = 56;
|
|
set.level -= 5;
|
|
} else if (pokemon === 'lucario') {
|
|
// Lucario has physical and special moves, so balance the attack EVs
|
|
set.evs.atk = 128;
|
|
set.evs.spa = 128;
|
|
} else if (isAtk) {
|
|
set.evs.atk = 252;
|
|
set.evs.spd = 4;
|
|
} else {
|
|
set.evs.spa = 252;
|
|
set.evs.spd = 4;
|
|
}
|
|
}
|
|
} else if (pokemon === 'kyogre') {
|
|
set.item = 'Choice Scarf';
|
|
set.moves = ['waterspout', 'surf', 'thunder', 'icebeam'];
|
|
} else if (pokemon === 'milotic') {
|
|
set.level -= 5;
|
|
}
|
|
team.push(set);
|
|
}
|
|
}
|
|
|
|
return team;
|
|
}
|
|
|
|
|
|
randomSeasonalMulanTeam(side) {
|
|
let armySide = 'china';
|
|
let team = [];
|
|
let pokemon = '';
|
|
let template, set;
|
|
let teamDetails = {megaStone: 0};
|
|
let pokemonLeft = 0;
|
|
|
|
// If the other team has been chosen, we get its opposing force.
|
|
if (this.takenSide) {
|
|
armySide = (this.takenSide === 'hun' ? 'china' : 'hun');
|
|
} else {
|
|
// First team being generated, pick a armySide at random.
|
|
armySide = (Math.random() > 0.5 ? 'china' : 'hun');
|
|
this.takenSide = armySide;
|
|
}
|
|
|
|
if (armySide === 'china') {
|
|
const chinese = [
|
|
'accelgor', 'bisharp', 'gallade', 'hitmonchan', 'hitmonlee', 'hitmontop', 'infernape', 'lucario', 'machoke', 'medicham',
|
|
'medicham', 'mienshao', 'pangoro', 'sawk', 'scrafty', 'scizor', 'throh', 'ursaring', 'vigoroth', 'weavile', 'zangoose',
|
|
];
|
|
|
|
const weakCount = {};
|
|
|
|
// Add the members of the army.
|
|
const names = ["Li Shang", "Mulan", "Yao", "Ling"];
|
|
|
|
for (let i = 0; i < chinese.length && pokemonLeft < 4; i++) {
|
|
pokemon = this.sampleNoReplace(chinese);
|
|
template = this.getTemplate(pokemon);
|
|
|
|
// Li Shang shouldn't be an NFE Pokemon.
|
|
if (names[pokemonLeft] === "Li Shang" && template.evos.length) continue;
|
|
|
|
// We don't want too many Fighting or Flying weaknesses, since those moves will be common
|
|
// Hard limit it to two, since after factoring in Chien-Po we might have a lot of common weakness
|
|
const mainWeakness = {};
|
|
if (Dex.getEffectiveness('Flying', template) > 0) mainWeakness['Flying'] = true;
|
|
if (Dex.getEffectiveness('Fighting', template) > 0) mainWeakness['Fighting'] = true;
|
|
if (mainWeakness['Fighting'] && weakCount['Fighting'] >= 2) continue;
|
|
if (mainWeakness['Flying'] && weakCount['Flying'] >= 2) continue;
|
|
|
|
for (const type in mainWeakness) {
|
|
if (type in weakCount) {
|
|
weakCount[type]++;
|
|
} else {
|
|
weakCount[type] = 1;
|
|
}
|
|
}
|
|
|
|
set = this.randomSet(template, pokemonLeft, teamDetails);
|
|
if (this.getItem(set.item).megaStone) teamDetails.megaStone++;
|
|
set.species = toId(set.name);
|
|
set.name = names[pokemonLeft];
|
|
set.gender = (set.name === "Mulan" ? 'F' : 'M');
|
|
set.moves[4] = 'searingshot';
|
|
if (set.name === "Li Shang") {
|
|
set.moves[5] = 'sing';
|
|
}
|
|
|
|
// Baton Pass is not allowed.
|
|
let bpIndex = set.moves.indexOf('batonpass');
|
|
if (bpIndex >= 0) {
|
|
set.moves[bpIndex] = 'secretpower';
|
|
}
|
|
|
|
team.push(set);
|
|
pokemonLeft++;
|
|
}
|
|
|
|
// Chien Po is very large, so he samples from a different pool of Pokemon
|
|
pokemon = this.sample(['blastoise', 'snorlax', 'golem', 'lickilicky', 'poliwrath', 'hariyama', 'magmortar']);
|
|
template = this.getTemplate(pokemon);
|
|
set = this.randomSet(template, 4, teamDetails);
|
|
if (this.getItem(set.item).megaStone) teamDetails.megaStone++;
|
|
set.species = toId(set.name);
|
|
set.name = "Chien-Po";
|
|
set.gender = 'M';
|
|
set.moves[4] = 'searingshot';
|
|
team.push(set);
|
|
|
|
// Add Eddie Murphy-- I mean, Mushu, to the team as a Dragonair.
|
|
template = this.getTemplate('dragonair');
|
|
template.randomBattleMoves = ['dragondance', 'aquatail', 'waterfall', 'wildcharge', 'extremespeed', 'dracometeor', 'dragonascent'];
|
|
set = this.randomSet(template, 5);
|
|
set.species = toId(set.name);
|
|
set.name = "Mushu";
|
|
set.gender = 'M';
|
|
set.ability = "Turboblaze";
|
|
set.moves[4] = 'sacredfire';
|
|
set.moves[5] = 'dragonrush';
|
|
team.push(set);
|
|
} else {
|
|
const huns = [
|
|
'aggron', 'chesnaught', 'conkeldurr', 'drapion', 'electivire', 'emboar', 'exploud', 'feraligatr', 'granbull',
|
|
'haxorus', 'machamp', 'nidoking', 'rhyperior', 'swampert', 'tyranitar',
|
|
];
|
|
|
|
for (let i = 0; i < huns.length && pokemonLeft < 5; i++) {
|
|
pokemon = this.sampleNoReplace(huns);
|
|
template = this.getTemplate(pokemon);
|
|
set = this.randomSet(template, pokemonLeft, teamDetails);
|
|
if (this.getItem(set.item).megaStone) teamDetails.megaStone++;
|
|
set.species = toId(set.name);
|
|
set.name = (i === 0 ? "Shan Yu" : "Hun " + template.species);
|
|
set.gender = 'M';
|
|
team.push(set);
|
|
pokemonLeft++;
|
|
}
|
|
|
|
// Add Hayabusa the falcon.
|
|
pokemon = this.sample(['fearow', 'pidgeot', 'staraptor', 'honchkrow', 'aerodactyl', 'archeops', 'braviary', 'noivern']);
|
|
template = this.getTemplate(pokemon);
|
|
set = this.randomSet(template, 5, teamDetails);
|
|
set.species = toId(set.name);
|
|
set.name = "Hayabusa";
|
|
team.push(set);
|
|
}
|
|
return team;
|
|
}
|
|
|
|
|
|
randomSeasonalStaffTeam(side) {
|
|
let team = [];
|
|
let variant = this.random(2);
|
|
// Hardcoded sets of the available Pokémon.
|
|
let sets = {
|
|
// Admins.
|
|
'~Antar': {
|
|
species: 'Quilava', ability: 'Turboblaze', item: 'Eviolite', gender: 'M',
|
|
moves: ['blueflare', this.sample(['quiverdance', 'solarbeam', 'moonblast']), 'sunnyday'],
|
|
baseSignatureMove: 'spikes', signatureMove: "Firebomb",
|
|
evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid',
|
|
},
|
|
'~chaos': {
|
|
species: 'Bouffalant', ability: 'Fur Coat', item: 'Red Card', gender: 'M',
|
|
moves: ['precipiceblades', this.sample(['recover', 'stockpile', 'swordsdance']), 'extremespeed', 'explosion'],
|
|
baseSignatureMove: 'embargo', signatureMove: "Forcewin",
|
|
evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant',
|
|
},
|
|
'~haunter': {
|
|
species: 'Landorus', ability: 'Sheer Force', item: 'Life Orb', gender: 'M',
|
|
moves: ['hurricane', 'earthpower', 'fireblast', 'blizzard', 'thunder'],
|
|
baseSignatureMove: 'quiverdance', signatureMove: "Genius Dance",
|
|
evs: {hp: 4, spa: 252, spe: 252}, nature: 'Modest',
|
|
},
|
|
'~Jasmine': {
|
|
species: 'Mew', ability: 'Speed Boost', item: 'Focus Sash', gender: 'F',
|
|
moves: ['explosion', 'transform', 'milkdrink', 'storedpower'],
|
|
baseSignatureMove: 'bellydrum', signatureMove: "Lockdown",
|
|
evs: {hp: 252, def: 252, spd: 4}, nature: 'Bold',
|
|
},
|
|
'~Joim': {
|
|
species: 'Zapdos', ability: 'Download', item: 'Leftovers', gender: 'M', shiny: true,
|
|
moves: ['thunderbolt', 'hurricane', this.sample(['earthpower', 'roost', 'flamethrower', 'worryseed', 'haze', 'spore'])],
|
|
baseSignatureMove: 'milkdrink', signatureMove: "Red Bull Drink",
|
|
evs: {hp: 4, spa: 252, spe: 252}, nature: 'Modest',
|
|
},
|
|
'~The Immortal': {
|
|
species: 'Blastoise', ability: 'Magic Bounce', item: 'Blastoisinite', gender: 'M', shiny: true,
|
|
moves: ['shellsmash', 'steameruption', 'dragontail'],
|
|
baseSignatureMove: 'sleeptalk', signatureMove: "Sleep Walk",
|
|
evs: {hp: 252, def: 4, spd: 252}, nature: 'Sassy',
|
|
},
|
|
'~V4': {
|
|
species: 'Victini', ability: 'Desolate Land', item: (variant === 0 ? this.sample(['Life Orb', 'Charcoal', 'Leftovers']) : this.sample(['Life Orb', 'Choice Scarf', 'Leftovers'])), gender: 'M',
|
|
moves: (variant === 0 ? ['thousandarrows', 'bolt strike', 'shiftgear', 'dragonascent', 'closecombat', 'substitute'] : ['thousandarrows', 'bolt strike', 'dragonascent', 'closecombat']),
|
|
baseSignatureMove: 'vcreate', signatureMove: "V-Generate",
|
|
evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly',
|
|
},
|
|
'~Zarel': {
|
|
species: 'Meloetta', ability: 'Serene Grace', item: '', gender: 'F',
|
|
moves: ['lunardance', 'fierydance', 'perishsong', 'petaldance', 'quiverdance'],
|
|
baseSignatureMove: 'relicsong', signatureMove: "Relic Song Dance",
|
|
evs: {hp: 4, atk: 252, spa: 252}, nature: 'Quiet',
|
|
},
|
|
// Leaders.
|
|
'&hollywood': {
|
|
species: 'Mr. Mime', ability: 'Prankster', item: 'Leftovers', gender: 'M',
|
|
moves: ['batonpass', this.sample(['substitute', 'milkdrink']), 'encore'],
|
|
baseSignatureMove: 'geomancy', signatureMove: "Meme Mime",
|
|
evs: {hp: 252, def: 4, spe: 252}, nature: 'Timid',
|
|
},
|
|
'&jdarden': {
|
|
species: 'Dragonair', ability: 'Fur Coat', item: 'Eviolite', gender: 'M',
|
|
moves: ['rest', 'sleeptalk', 'quiverdance'], name: 'jdarden',
|
|
baseSignatureMove: 'dragontail', signatureMove: "Wyvern's Wind",
|
|
evs: {hp: 252, def: 4, spd: 252}, nature: 'Calm',
|
|
},
|
|
'&Okuu': {
|
|
species: 'Honchkrow', ability: 'Drought', item: 'Life Orb', gender: 'F',
|
|
moves: [this.sample(['bravebird', 'sacredfire']), this.sample(['suckerpunch', 'punishment']), 'roost'],
|
|
baseSignatureMove: 'firespin', signatureMove: "Blazing Star - Ten Evil Stars",
|
|
evs: {atk: 252, spa: 4, spe: 252}, nature: 'Quirky',
|
|
},
|
|
'&sirDonovan': {
|
|
species: 'Togetic', ability: 'Gale Wings', item: 'Eviolite', gender: 'M',
|
|
moves: ['roost', 'hurricane', 'afteryou', 'charm', 'dazzlinggleam'],
|
|
baseSignatureMove: 'mefirst', signatureMove: "Ladies First",
|
|
evs: {hp: 252, spa: 252, spe: 4}, nature: 'Modest',
|
|
},
|
|
'&Slayer95': {
|
|
species: 'Scizor', ability: 'Illusion', item: 'Scizorite', gender: 'M',
|
|
moves: ['swordsdance', 'bulletpunch', 'uturn'],
|
|
baseSignatureMove: 'allyswitch', signatureMove: "Spell Steal",
|
|
evs: {atk: 252, def: 252, spd: 4}, nature: 'Brave',
|
|
},
|
|
'&Sweep': {
|
|
species: 'Omastar', ability: 'Drizzle', item: this.sample(['Honey', 'Mail']), gender: 'M',
|
|
moves: ['shellsmash', 'originpulse', this.sample(['thunder', 'icebeam'])],
|
|
baseSignatureMove: 'kingsshield', signatureMove: "Sweep's Shield",
|
|
evs: {hp: 4, spa: 252, spe: 252}, nature: 'Modest',
|
|
},
|
|
'&verbatim': {
|
|
species: 'Archeops', ability: 'Reckless', item: 'Life Orb', gender: 'M',
|
|
moves: ['headsmash', 'highjumpkick', 'flareblitz', 'volttackle', 'woodhammer'],
|
|
baseSignatureMove: 'bravebird', signatureMove: "Glass Cannon",
|
|
evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly',
|
|
},
|
|
// Mods.
|
|
'@Acedia': {
|
|
species: 'Slakoth', ability: 'Magic Bounce', item: 'Quick Claw', gender: 'F',
|
|
moves: ['metronome', 'sketch', 'assist', 'swagger', 'foulplay'],
|
|
baseSignatureMove: 'worryseed', signatureMove: "Procrastination",
|
|
evs: {hp: 252, atk: 252, def: 4}, nature: 'Serious',
|
|
},
|
|
'@AM': {
|
|
species: 'Tyranitar', ability: 'Adaptability', item: (variant === 1 ? 'Lum Berry' : 'Choice Scarf'), gender: 'M',
|
|
moves: (variant === 1 ? ['earthquake', 'diamondstorm', 'swordsdance', 'meanlook'] : ['knockoff', 'diamondstorm', 'earthquake']),
|
|
baseSignatureMove: 'pursuit', signatureMove: "Predator",
|
|
evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly',
|
|
},
|
|
'@antemortem': {
|
|
species: 'Clefable', ability: (variant === 1 ? 'Sheer Force' : 'Multiscale'), item: (variant === 1 ? 'Life Orb' : 'Leftovers'), gender: 'M',
|
|
moves: ['earthpower', 'cosmicpower', 'recover', 'gigadrain'],
|
|
baseSignatureMove: 'drainingkiss', signatureMove: "Postmortem",
|
|
evs: {hp: 252, spa: 252, def: 4}, nature: 'Modest',
|
|
},
|
|
'@Ascriptmaster': {
|
|
species: 'Rotom', ability: 'Teravolt', item: 'Air Balloon', gender: 'M',
|
|
moves: ['chargebeam', 'signalbeam', 'flamethrower', 'aurorabeam', 'dazzlinggleam'],
|
|
baseSignatureMove: 'triattack', signatureMove: "Spectrum Beam",
|
|
evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid',
|
|
},
|
|
'@asgdf': {
|
|
species: 'Empoleon', ability: 'Filter', item: 'Rocky Helmet', gender: 'M',
|
|
moves: ['scald', 'recover', 'calmmind', 'searingshot', 'encore'],
|
|
baseSignatureMove: 'futuresight', signatureMove: "Obscure Pun",
|
|
evs: {hp: 252, spa: 252, def: 4}, nature: 'Modest',
|
|
},
|
|
'@Audiosurfer': {
|
|
species: 'Audino', ability: 'Prankster', item: 'Audinite', gender: 'M',
|
|
moves: ['boomburst', 'slackoff', 'glare'],
|
|
baseSignatureMove: 'detect', signatureMove: "Audioshield",
|
|
evs: {hp: 252, spa: 252, spe: 4}, nature: 'Modest',
|
|
},
|
|
'@barton': {
|
|
species: 'Piloswine', ability: 'Parental Bond', item: 'Eviolite', gender: 'M',
|
|
moves: ['earthquake', 'iciclecrash', 'taunt'],
|
|
baseSignatureMove: 'bulkup', signatureMove: "MDMA Huff",
|
|
evs: {hp: 252, atk: 252, def: 4}, nature: 'Adamant',
|
|
},
|
|
'@bean': {
|
|
species: 'Liepard', ability: 'Prankster', item: 'Leftovers', gender: 'M',
|
|
moves: ['knockoff', 'encore', 'substitute', 'gastroacid', 'leechseed'],
|
|
baseSignatureMove: 'glare', signatureMove: "Coin Toss",
|
|
evs: {hp: 252, def: 252, spd: 4}, nature: 'Calm',
|
|
},
|
|
'@Beowulf': {
|
|
species: 'Beedrill', ability: 'Download', item: 'Beedrillite', gender: 'M',
|
|
moves: ['spikyshield', 'gunkshot', this.sample(['sacredfire', 'boltstrike', 'diamondstorm'])],
|
|
baseSignatureMove: 'bugbuzz', signatureMove: "Buzzing of the Swarm",
|
|
evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly',
|
|
},
|
|
'@BiGGiE': {
|
|
species: 'Snorlax', ability: 'Fur Coat', item: 'Leftovers', gender: 'M',
|
|
moves: ['drainpunch', 'diamondstorm', 'kingsshield', 'knockoff', 'precipiceblades'],
|
|
baseSignatureMove: 'dragontail', signatureMove: "Food Rush",
|
|
evs: {hp: 4, atk: 252, spd: 252}, nature: 'Adamant',
|
|
},
|
|
'@Blitzamirin': {
|
|
species: 'Chandelure', ability: 'Prankster', item: 'Red Card', gender: 'M',
|
|
moves: ['heartswap', this.sample(['darkvoid', 'substitute']), this.sample(['shadowball', 'blueflare'])],
|
|
baseSignatureMove: 'oblivionwing', signatureMove: "Pneuma Relinquish",
|
|
evs: {def: 4, spa: 252, spe: 252}, nature: 'Timid',
|
|
},
|
|
'@CoolStoryBrobat': {
|
|
species: 'Crobat', ability: 'Gale Wings', item: 'Black Glasses', gender: 'M',
|
|
moves: ['knockoff', 'bulkup', 'roost', 'closecombat', 'defog'],
|
|
baseSignatureMove: 'bravebird', signatureMove: "Brave Bat",
|
|
evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly',
|
|
},
|
|
'@Dell': {
|
|
species: 'Lucario', ability: 'Simple', item: 'Lucarionite', gender: 'M',
|
|
moves: ['jumpkick', this.sample(['flashcannon', 'bulletpunch']), 'batonpass'],
|
|
baseSignatureMove: 'detect', signatureMove: "Aura Parry",
|
|
evs: {hp: 4, atk: 216, spa: 36, spe: 252}, nature: 'Naive',
|
|
},
|
|
'@Eevee General': {
|
|
species: 'Eevee', ability: 'Magic Guard', item: 'Eviolite', gender: 'M',
|
|
moves: ['shiftgear', 'healorder', 'crunch', 'sacredsword', 'doubleedge'],
|
|
baseSignatureMove: 'quickattack', signatureMove: "War Crimes",
|
|
evs: {hp: 252, atk: 252, def: 4}, nature: 'Impish',
|
|
},
|
|
'@Electrolyte': {
|
|
species: 'Elekid', ability: 'Pure Power', item: 'Life Orb', gender: 'M',
|
|
moves: ['volttackle', 'earthquake', this.sample(['iciclecrash', 'diamondstorm'])],
|
|
baseSignatureMove: 'entrainment', signatureMove: "Study",
|
|
evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant',
|
|
},
|
|
'@Enguarde': {
|
|
species: 'Gallade', ability: this.sample(['Intimidate', 'Hyper Cutter']), item: 'Galladite', gender: 'M',
|
|
moves: ['psychocut', 'sacredsword', this.sample(['nightslash', 'precipiceblades', 'leafblade'])],
|
|
baseSignatureMove: 'fakeout', signatureMove: "Ready Stance",
|
|
evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant',
|
|
},
|
|
'@Eos': {
|
|
species: 'Drifblim', ability: 'Fur Coat', item: 'Assault Vest', gender: 'M',
|
|
moves: ['oblivionwing', 'paraboliccharge', 'gigadrain', 'drainingkiss'],
|
|
baseSignatureMove: 'shadowball', signatureMove: "Shadow Curse", //placeholder
|
|
evs: {hp: 248, spa: 252, spd: 8}, nature: 'Modest',
|
|
},
|
|
'@Former Hope': {
|
|
species: 'Froslass', ability: 'Prankster', item: 'Focus Sash', gender: 'M',
|
|
moves: [this.sample(['icebeam', 'shadowball']), 'destinybond', 'thunderwave'],
|
|
baseSignatureMove: 'roleplay', signatureMove: "Role Play",
|
|
evs: {hp: 252, spa: 252, spd: 4}, nature: 'Modest',
|
|
},
|
|
'@Genesect': {
|
|
species: 'Genesect', ability: 'Mold Breaker', item: 'Life Orb', gender: 'M',
|
|
moves: ['bugbuzz', 'closecombat', 'extremespeed', 'thunderbolt', 'uturn'],
|
|
baseSignatureMove: 'geargrind', signatureMove: "Grind you're mum",
|
|
evs: {atk: 252, spa: 252, spe: 4}, nature: 'Quiet',
|
|
},
|
|
'@Hippopotas': {
|
|
species: 'Hippopotas', ability: 'Regenerator', item: 'Eviolite', gender: 'M',
|
|
moves: ['haze', 'stealthrock', 'spikes', 'toxicspikes', 'stickyweb'],
|
|
baseSignatureMove: 'partingshot', signatureMove: "Hazard Pass",
|
|
evs: {hp: 252, def: 252, spd: 4}, ivs: {atk: 0, spa: 0}, nature: 'Bold',
|
|
},
|
|
'@HYDRO IMPACT': {
|
|
species: 'Charizard', ability: 'Rivalry', item: 'Life Orb', gender: 'M',
|
|
moves: ['airslash', 'flamethrower', 'nobleroar', 'hydropump'],
|
|
baseSignatureMove: 'hydrocannon', signatureMove: "HYDRO IMPACT",
|
|
evs: {atk: 4, spa: 252, spe: 252}, nature: 'Hasty',
|
|
},
|
|
'@innovamania': {
|
|
species: 'Arceus', ability: 'Pick Up', item: 'Black Glasses', gender: 'M',
|
|
moves: [this.sample(['holdhands', 'trickortreat']), this.sample(['swordsdance', 'agility']), 'celebrate'],
|
|
baseSignatureMove: 'splash', signatureMove: "Rage Quit",
|
|
evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly',
|
|
},
|
|
'@jas61292': {
|
|
species: 'Malaconda', ability: 'Analytic', item: 'Safety Goggles', gender: 'M',
|
|
moves: ['coil', 'thunderwave', 'icefang', 'powerwhip', 'moonlight'],
|
|
baseSignatureMove: 'crunch', signatureMove: "Minus One",
|
|
evs: {hp: 252, atk: 252, spd: 4}, nature: 'Adamant',
|
|
},
|
|
'@jin of the gale': {
|
|
species: 'Starmie', ability: 'Drizzle', item: 'Damp Rock', gender: 'M',
|
|
moves: ['steameruption', 'hurricane', 'recover', 'psystrike', 'quiverdance'],
|
|
baseSignatureMove: 'rapidspin', signatureMove: "Beyblade",
|
|
evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid',
|
|
},
|
|
'@Kostitsyn-Kun': {
|
|
species: 'Gothorita', ability: 'Simple', item: 'Eviolite', gender: 'F', //requested
|
|
moves: ['calmmind', 'psyshock', this.sample(['dazzlinggleam', 'secretsword'])],
|
|
baseSignatureMove: 'refresh', signatureMove: "Kawaii-desu uguu~",
|
|
evs: {hp: 252, def: 136, spe: 120}, nature: 'Bold',
|
|
},
|
|
'@kupo': {
|
|
species: 'Pikachu', ability: 'Prankster', item: "Light Ball", gender: 'M',
|
|
moves: ['substitute', 'spore', 'encore'],
|
|
baseSignatureMove: 'transform', signatureMove: "Kupo Nuts",
|
|
evs: {hp: 252, def: 4, spd: 252}, nature: 'Jolly',
|
|
},
|
|
'@Lawrence III': {
|
|
species: 'Lugia', ability: 'Trace', item: "Grip Claw", gender: 'M',
|
|
moves: ['infestation', 'magmastorm', 'oblivionwing'],
|
|
baseSignatureMove: 'gust', signatureMove: "Shadow Storm",
|
|
evs: {hp: 248, def: 84, spa: 92, spd: 84}, nature: 'Modest',
|
|
},
|
|
'@Layell': {
|
|
species: 'Sneasel', ability: 'Technician', item: "King's Rock", gender: 'M',
|
|
moves: ['iceshard', 'iciclespear', this.sample(['machpunch', 'pursuit', 'knockoff'])],
|
|
baseSignatureMove: 'protect', signatureMove: "Pixel Protection",
|
|
evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant',
|
|
},
|
|
'@LegitimateUsername': {
|
|
species: 'Shuckle', ability: 'Unaware', item: 'Leftovers', gender: 'M',
|
|
moves: ['leechseed', 'rest', 'foulplay'],
|
|
baseSignatureMove: 'shellsmash', signatureMove: "Shell Fortress",
|
|
evs: {hp: 252, def: 228, spd: 28}, nature: 'Calm',
|
|
},
|
|
'@Level 51': {
|
|
species: 'Togekiss', ability: 'Parental Bond', item: 'Leftovers', gender: 'M',
|
|
moves: ['seismictoss', 'roost', this.sample(['cosmicpower', 'cottonguard'])],
|
|
baseSignatureMove: 'trumpcard', signatureMove: "Next Level Strats",
|
|
evs: {hp: 252, def: 4, spd: 252}, nature: 'Calm',
|
|
},
|
|
'@Lyto': {
|
|
species: 'Lanturn', ability: 'Magic Bounce', item: 'Leftovers', gender: 'M',
|
|
moves: ['originpulse', 'lightofruin', 'blueflare', 'recover', 'tailglow'],
|
|
baseSignatureMove: 'thundershock', signatureMove: "Gravity Storm",
|
|
evs: {hp: 188, spa: 252, spe: 68}, nature: 'Modest',
|
|
},
|
|
'@Marty': {
|
|
species: 'Houndoom', ability: 'Drought', item: 'Houndoominite', gender: 'M',
|
|
moves: ['nightdaze', 'solarbeam', 'aurasphere', 'thunderbolt', 'earthpower'],
|
|
baseSignatureMove: 'sacredfire', signatureMove: "Immolate",
|
|
evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
|
|
},
|
|
'@Morfent': {
|
|
species: 'Dusknoir', ability: 'Fur Coat', item: "Leftovers", gender: 'M',
|
|
moves: [this.sample(['recover', 'acidarmor', 'swordsdance', 'willowisp', 'trickroom']), 'shadowclaw', this.sample(['earthquake', 'icepunch', 'thunderpunch'])],
|
|
baseSignatureMove: 'spikes', signatureMove: "Used Needles",
|
|
evs: {hp: 252, atk: 4, def: 252}, ivs: {spe: 0}, nature: 'Impish',
|
|
},
|
|
'@Nani Man': {
|
|
species: 'Gengar', ability: 'Desolate Land', item: 'Black Glasses', gender: 'M', shiny: true,
|
|
moves: ['eruption', 'swagger', 'shadow ball', 'topsyturvy', 'dazzlinggleam'],
|
|
baseSignatureMove: 'fireblast', signatureMove: "Tanned",
|
|
evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid',
|
|
},
|
|
'@NixHex': {
|
|
species: 'Porygon2', ability: 'No Guard', item: 'Eviolite', gender: 'M', shiny: true,
|
|
moves: ['thunder', 'blizzard', 'overheat', 'triattack', 'recover'],
|
|
baseSignatureMove: 'inferno', signatureMove: "Beautiful Disaster",
|
|
evs: {hp: 252, spa: 252, spe: 4}, nature: 'Modest',
|
|
},
|
|
'@Osiris': {
|
|
species: 'Pumpkaboo-Super', ability: 'Bad Dreams', item: 'Eviolite', gender: 'M',
|
|
moves: ['leechseed', 'recover', 'cosmicpower'],
|
|
baseSignatureMove: 'hypnosis', signatureMove: "Restless Sleep",
|
|
evs: {hp: 252, def: 216, spd: 40}, ivs: {atk: 0}, nature: 'bold',
|
|
},
|
|
'@phil': {
|
|
species: 'Gastrodon', ability: 'Drizzle', item: 'Shell Bell', gender: 'M',
|
|
moves: ['scald', 'recover', 'gastroacid', 'brine'],
|
|
baseSignatureMove: 'whirlpool', signatureMove: "Slug Attack",
|
|
evs: {hp: 252, spa: 252, def: 4}, nature: 'Quirky',
|
|
},
|
|
'@qtrx': {
|
|
species: 'Unown', ability: 'Levitate', item: 'Focus Sash', gender: 'M',
|
|
moves: [],
|
|
baseSignatureMove: 'meditate', signatureMove: "Hidden Power... Normal?",
|
|
evs: {hp: 252, def: 4, spa: 252}, ivs: {atk: 0, spe: 0}, nature: 'Quiet',
|
|
},
|
|
'@Queez': {
|
|
species: 'Cubchoo', ability: 'Prankster', item: 'Eviolite', gender: 'M',
|
|
moves: ['pound', 'fly', 'softboiled', 'thunderwave', 'waterpulse'],
|
|
baseSignatureMove: 'leer', signatureMove: "Sneeze",
|
|
evs: {hp: 252, def: 228, spd: 28}, nature: 'Calm',
|
|
},
|
|
'@rekeri': {
|
|
species: 'Tyrantrum', ability: 'Tough Claws', item: 'Life Orb', gender: 'M',
|
|
moves: ['outrage', 'extremespeed', 'stoneedge', 'closecombat'],
|
|
baseSignatureMove: 'headcharge', signatureMove: "Land Before Time",
|
|
evs: {hp: 252, atk: 252, def: 4}, nature: 'Adamant',
|
|
},
|
|
'@Relados': {
|
|
species: 'Terrakion', ability: 'Guts', item: 'Flame Orb', gender: 'M',
|
|
moves: ['knockoff', 'diamondstorm', 'closecombat', 'iceshard', 'drainpunch'],
|
|
baseSignatureMove: 'stockpile', signatureMove: "Loyalty",
|
|
evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant',
|
|
},
|
|
'@Reverb': {
|
|
species: 'Slaking', ability: 'Scrappy', item: 'Assault Vest', gender: 'M',
|
|
moves: ['feint', 'stormthrow', 'blazekick'], // Feint as a countermeasure to the abundance of Protect-based set-up moves.
|
|
baseSignatureMove: 'eggbomb', signatureMove: "fat monkey",
|
|
evs: {hp: 252, spd: 40, spe: 216}, nature: 'Jolly', // EV-nerf.
|
|
},
|
|
'@RosieTheVenusaur': {
|
|
species: 'Venusaur', ability: 'Moxie', item: 'Leftovers', gender: 'F',
|
|
moves: ['flamethrower', 'extremespeed', 'sacredfire', 'knockoff', 'closecombat'],
|
|
baseSignatureMove: 'frenzyplant', signatureMove: "Swag Plant",
|
|
evs: {hp: 252, atk: 252, def: 4}, nature: 'Adamant',
|
|
},
|
|
'@scalarmotion': {
|
|
species: 'Cryogonal', ability: 'Magic Guard', item: 'Focus Sash', gender: 'M',
|
|
moves: ['rapidspin', 'willowisp', 'taunt', 'recover', 'voltswitch'],
|
|
baseSignatureMove: 'icebeam', signatureMove: "Eroding Frost",
|
|
evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid',
|
|
},
|
|
'@Scotteh': {
|
|
species: 'Suicune', ability: 'Fur Coat', item: 'Leftovers', gender: 'M',
|
|
moves: ['icebeam', 'steameruption', 'recover', 'nastyplot'],
|
|
baseSignatureMove: 'boomburst', signatureMove: "Geomagnetic Storm",
|
|
evs: {def: 252, spa: 4, spe: 252}, nature: 'Bold',
|
|
},
|
|
'@Shame That': {
|
|
species: 'Weavile', ability: 'Magic Guard', item: 'Focus Sash', gender: 'M',
|
|
moves: ['substitute', 'captivate', 'reflect', 'rest', 'raindance', 'foresight'],
|
|
baseSignatureMove: 'healingwish', signatureMove: "Extreme Compromise",
|
|
evs: {hp: 252, def: 4, spe: 252}, nature: 'Jolly',
|
|
},
|
|
'@shrang': {
|
|
species: 'Latias', ability: 'Pixilate', item: this.sample(['Latiasite', 'Life Orb', 'Leftovers']), gender: 'M',
|
|
moves: ['dracometeor', 'roost', 'nastyplot', 'fireblast', 'aurasphere', 'psystrike'], //not QD again senpai >.<
|
|
baseSignatureMove: 'judgment', signatureMove: "Pixilate", //placeholder
|
|
evs: {hp: 160, spa: 96, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
|
|
},
|
|
'@Skitty': {
|
|
species: 'Audino', ability: 'Intimidate', item: 'Audinite', gender: 'M',
|
|
moves: ['acupressure', 'recover', this.sample(['taunt', 'cosmicpower', 'magiccoat'])],
|
|
baseSignatureMove: 'storedpower', signatureMove: "Ultimate Dismissal",
|
|
evs: {hp: 252, def: 252, spd: 4}, nature: 'Bold',
|
|
},
|
|
'@Snowflakes': {
|
|
species: 'Celebi', ability: 'Filter', item: 'Leftovers', gender: 'M',
|
|
moves: [
|
|
['gigadrain', this.sample(['recover', 'quiverdance']), this.sample(['icebeam', 'searingshot', 'psystrike', 'thunderbolt', 'aurasphere', 'moonblast'])],
|
|
['gigadrain', 'recover', [this.sample(['uturn', 'voltswitch']), 'thunderwave', 'leechseed', 'healbell', 'healingwish', 'reflect', 'lightscreen', 'stealthrock'][this.random(8)]],
|
|
['gigadrain', 'perishsong', ['recover', this.sample(['uturn', 'voltswitch']), 'leechseed', 'thunderwave', 'healbell'][this.random(5)]],
|
|
['gigadrain', 'recover', ['thunderwave', 'icebeam', this.sample(['uturn', 'voltswitch']), 'psystrike'][this.random(4)]],
|
|
][this.random(4)],
|
|
baseSignatureMove: 'thousandarrows', signatureMove: "Azalea Butt Slam",
|
|
evs: {hp: 252, spa: 252, def: 4}, nature: 'Modest',
|
|
},
|
|
'@Spydreigon': {
|
|
species: 'Hydreigon', ability: 'Mega Launcher', item: 'Life Orb', gender: 'M',
|
|
moves: ['dragonpulse', 'darkpulse', 'aurasphere', 'originpulse', 'shiftgear'],
|
|
baseSignatureMove: 'waterpulse', signatureMove: "Mineral Pulse",
|
|
evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid',
|
|
},
|
|
'@Steamroll': {
|
|
species: 'Growlithe', ability: 'Adaptability', item: 'Life Orb', gender: 'M',
|
|
moves: ['flareblitz', 'volttackle', 'closecombat'],
|
|
baseSignatureMove: 'protect', signatureMove: "Conflagration",
|
|
evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant',
|
|
},
|
|
'@SteelEdges': {
|
|
species: 'Alakazam', ability: 'Competitive', item: 'Alakazite', gender: 'M',
|
|
moves: ['bugbuzz', 'hypervoice', 'psystrike', 'batonpass', 'focusblast'],
|
|
baseSignatureMove: 'tailglow', signatureMove: "True Daily Double",
|
|
evs: {hp: 4, spa: 252, spe: 252}, nature: 'Serious',
|
|
},
|
|
'@Temporaryanonymous': {
|
|
species: 'Doublade', ability: 'Tough Claws', item: 'Eviolite', gender: 'M',
|
|
moves: ['swordsdance', this.sample(['xscissor', 'sacredsword', 'knockoff']), 'geargrind'],
|
|
baseSignatureMove: 'shadowsneak', signatureMove: "SPOOPY EDGE CUT",
|
|
evs: {hp: 252, atk: 252, def: 4}, nature: 'Adamant',
|
|
},
|
|
'@Test2017': {
|
|
species: "Farfetch'd", ability: 'Wonder Guard', item: 'Stick', gender: 'M',
|
|
moves: ['foresight', 'gastroacid', 'nightslash', 'roost', 'thousandarrows'],
|
|
baseSignatureMove: 'karatechop', signatureMove: "Ducktastic",
|
|
evs: {hp: 252, atk: 252, spe: 4}, nature: 'Adamant',
|
|
},
|
|
'@TFC': {
|
|
species: 'Blastoise', ability: 'Prankster', item: 'Leftovers', gender: 'M',
|
|
moves: ['quiverdance', 'cottonguard', 'storedpower', 'aurasphere', 'slackoff'],
|
|
baseSignatureMove: 'drainpunch', signatureMove: "Chat Flood",
|
|
evs: {atk: 252, def: 4, spe: 252}, nature: 'Modest',
|
|
},
|
|
'@TGMD': {
|
|
species: 'Stoutland', ability: 'Speed Boost', item: 'Life Orb', gender: 'M',
|
|
moves: [this.sample(['extremespeed', 'sacredsword']), 'knockoff', 'protect'],
|
|
baseSignatureMove: 'return', signatureMove: "Canine Carnage",
|
|
evs: {hp: 32, atk: 252, spe: 224}, nature: 'Adamant',
|
|
},
|
|
'@Timbuktu': {
|
|
species: 'Heatmor', ability: 'Contrary', item: 'Life Orb', gender: 'M',
|
|
moves: ['overheat', this.sample(['hammerarm', 'substitute']), this.sample(['glaciate', 'thunderbolt'])], // Curse didn't make sense at all so it was changed to Hammer Arm
|
|
baseSignatureMove: 'rockthrow', signatureMove: "Geoblast",
|
|
evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid',
|
|
},
|
|
'@Trickster': {
|
|
species: 'Whimsicott', ability: 'Prankster', item: 'Leftovers', gender: 'M',
|
|
moves: ['swagger', 'spore', 'seedflare', 'recover', 'nastyplot'],
|
|
baseSignatureMove: 'naturepower', signatureMove: "Cometstorm",
|
|
evs: {hp: 252, spa: 252, spe: 4},
|
|
},
|
|
'@trinitrotoluene': {
|
|
species: 'Metagross', ability: 'Levitate', item: 'Metagrossite', gender: 'M',
|
|
moves: ['meteormash', 'zenheadbutt', 'hammerarm', 'grassknot', 'earthquake', 'thunderpunch', 'icepunch', 'shiftgear'],
|
|
baseSignatureMove: 'explosion', signatureMove: "Get Haxed",
|
|
evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly',
|
|
},
|
|
'@WaterBomb': {
|
|
species: 'Poliwrath', ability: 'Unaware', item: 'Leftovers', gender: 'M',
|
|
moves: ['heartswap', 'softboiled', 'aromatherapy', 'highjumpkick'],
|
|
baseSignatureMove: 'waterfall', signatureMove: "Water Bomb",
|
|
evs: {hp: 252, atk: 252, def: 4}, nature: 'Adamant',
|
|
},
|
|
'@xfix': {
|
|
species: 'Xatu', ability: 'Magic Bounce', item: 'Focus Sash', gender: 'M',
|
|
moves: ['thunderwave', 'substitute', 'roost'],
|
|
baseSignatureMove: 'metronome', signatureMove: "(Super Glitch)",
|
|
evs: {hp: 252, spd: 252, def: 4}, nature: 'Calm',
|
|
},
|
|
'@zdrup': {
|
|
species: 'Slowking', ability: 'Slow Start', item: 'Leftovers', gender: 'M',
|
|
moves: ['psystrike', 'futuresight', 'originpulse', 'slackoff', 'destinybond'],
|
|
baseSignatureMove: 'wish', signatureMove: "Premonition",
|
|
evs: {hp: 252, def: 4, spd: 252}, nature: 'Quiet',
|
|
},
|
|
'@Zebraiken': {
|
|
species: 'zebstrika', ability: 'Compound Eyes', item: 'Life Orb', gender: 'M',
|
|
moves: ['thunder', this.sample(['fire blast', 'focusblast', 'highjumpkick', 'meteormash']), this.sample(['blizzard', 'iciclecrash', 'sleeppowder'])], // why on earth does he learn Meteor Mash?
|
|
baseSignatureMove: 'detect', signatureMove: "bzzt",
|
|
evs: {atk: 4, spa: 252, spe: 252}, nature: 'Hasty',
|
|
},
|
|
// Drivers.
|
|
'%Aelita': {
|
|
species: 'Porygon-Z', ability: 'Protean', item: 'Life Orb', gender: 'F',
|
|
moves: ['boomburst', 'quiverdance', 'chatter', 'blizzard', 'moonblast'],
|
|
baseSignatureMove: 'thunder', signatureMove: "Energy Field",
|
|
evs: {hp: 4, spa: 252, spd: 252}, nature: 'Modest',
|
|
},
|
|
'%Arcticblast': {
|
|
species: 'Cresselia', ability: 'Levitate', item: 'Sitrus Berry', gender: 'M',
|
|
moves: [
|
|
this.sample(['fakeout', 'icywind', 'trickroom', 'safeguard', 'thunderwave', 'tailwind', 'knockoff']),
|
|
this.sample(['sunnyday', 'moonlight', 'calmmind', 'protect', 'taunt']),
|
|
this.sample(['originpulse', 'heatwave', 'hypervoice', 'icebeam', 'moonblast']),
|
|
],
|
|
baseSignatureMove: 'psychoboost', signatureMove: "Doubles Purism",
|
|
evs: {hp: 252, def: 120, spa: 56, spd: 80}, nature: 'Sassy',
|
|
},
|
|
'%Articuno': {
|
|
species: 'Articuno', ability: 'Magic Guard', item: 'Sitrus Berry', gender: 'F',
|
|
moves: ['roost', 'calmmind', this.sample(['psychic', 'airslash', 'icebeam', 'thunderwave'])],
|
|
baseSignatureMove: 'whirlwind', signatureMove: "True Support",
|
|
evs: {hp: 252, def: 192, spa: 64}, nature: 'Modest',
|
|
},
|
|
'%Ast☆arA': {
|
|
species: 'Jirachi', ability: 'Cursed Body', item: this.sample(['Leftovers', 'Sitrus Berry']), gender: 'F',
|
|
moves: ['psychic', 'moonblast', 'nastyplot', 'recover', 'surf'],
|
|
baseSignatureMove: 'psywave', signatureMove: "Star Bolt Desperation",
|
|
evs: {hp: 4, spa: 252, spd: 252}, nature: 'Modest',
|
|
},
|
|
'%Asty': {
|
|
species: 'Seismitoad', ability: 'Sap Sipper', item: 'Red Card', gender: 'M',
|
|
moves: ['earthquake', 'recover', 'icepunch'],
|
|
baseSignatureMove: 'toxic', signatureMove: "Amphibian Toxin",
|
|
evs: {atk: 252, spd: 252, spe: 4}, nature: 'Adamant',
|
|
},
|
|
'%Birkal': {
|
|
species: 'Rotom-Fan', ability: 'Magic Guard', item: 'Choice Scarf', gender: 'M',
|
|
moves: ['trick', 'aeroblast', this.sample(['discharge', 'partingshot', 'recover', 'tailglow'])],
|
|
baseSignatureMove: 'quickattack', signatureMove: "Caw",
|
|
evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid',
|
|
},
|
|
'%bloobblob': {
|
|
species: 'Cinccino', ability: 'Skill Link', item: 'Life Orb', gender: 'M',
|
|
moves: ['bulletseed', 'rockblast', 'uturn', 'tailslap', 'knockoff'],
|
|
baseSignatureMove: 'spikecannon', signatureMove: "Lava Whip",
|
|
evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant',
|
|
},
|
|
'%Bumbadadabum': {
|
|
species: 'Samurott', ability: 'Analytic', item: 'Safety Goggles', gender: 'M',
|
|
moves: ['calmmind', 'originpulse', 'icebeam'],
|
|
baseSignatureMove: 'hypervoice', signatureMove: "Open Source Software",
|
|
evs: {hp: 252, spa: 252, spd: 4}, nature: 'Modest',
|
|
},
|
|
'%Charles Carmichael': {
|
|
species: 'Quagsire', ability: 'Sap Sipper', item: 'Liechi Berry', gender: 'M',
|
|
moves: ['waterfall', 'earthquake', this.sample(['stoneedge', 'rockslide']), 'icepunch'],
|
|
baseSignatureMove: 'swagger', signatureMove: "Bad Pun",
|
|
evs: {hp: 248, atk: 252, spe: 8}, nature: 'Naughty',
|
|
},
|
|
'%Crestfall': {
|
|
species: 'Darkrai', ability: 'Parental Bond', item: 'Lum Berry', gender: 'M',
|
|
moves: ['darkpulse', 'icebeam', 'oblivionwing'],
|
|
baseSignatureMove: 'protect', signatureMove: "Final Hour",
|
|
evs: {spa: 252, def: 4, spe: 252}, nature: 'Modest',
|
|
},
|
|
'%DTC': {
|
|
species: 'Charizard', ability: 'Magic Guard', item: 'Charizardite X', gender: 'M',
|
|
moves: ['shiftgear', 'blazekick', 'roost'],
|
|
baseSignatureMove: 'dragonrush', signatureMove: "Dragon Smash",
|
|
evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant',
|
|
},
|
|
'%Feliburn': {
|
|
species: 'Infernape', ability: 'Adaptability', item: 'Expert Belt', gender: 'M',
|
|
moves: ['highjumpkick', 'sacredfire', 'taunt', 'fusionbolt', 'machpunch'],
|
|
baseSignatureMove: 'firepunch', signatureMove: "Falcon Punch",
|
|
evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly',
|
|
},
|
|
'%galbia': {
|
|
species: 'Cobalion', ability: 'Serene Grace', item: 'Leftovers',
|
|
moves: ['ironhead', 'taunt', 'swordsdance', 'thunderwave', 'substitute'],
|
|
baseSignatureMove: 'highjumpkick', signatureMove: "Kibitz",
|
|
evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly',
|
|
},
|
|
'%Hugendugen': {
|
|
species: 'Latios', ability: 'Prankster', item: 'Life Orb', gender: 'M',
|
|
moves: ['taunt', 'dracometeor', 'surf', 'earthpower', 'recover', 'thunderbolt', 'icebeam'],
|
|
baseSignatureMove: 'psychup', signatureMove: "Policy Decision",
|
|
evs: {hp: 4, spa: 252, spe: 252}, nature: 'Modest',
|
|
},
|
|
'%Jellicent': {
|
|
species: 'Jellicent', ability: 'Poison Heal', item: 'Toxic Orb', gender: 'M',
|
|
moves: ['recover', 'freezedry', 'trick', 'substitute'],
|
|
baseSignatureMove: 'surf', signatureMove: "Shot For Shot",
|
|
evs: {hp: 252, def: 4, spd: 252}, nature: 'Calm',
|
|
},
|
|
'%Kayo': {
|
|
species: 'Gourgeist-Super', ability: 'Magic Bounce', item: 'Leftovers', gender: 'M', shiny: true,
|
|
moves: ['leechseed', 'shadowforce', 'spore', 'recover'],
|
|
baseSignatureMove: 'vinewhip', signatureMove: "Beard of Zeus Bomb",
|
|
evs: {hp: 252, def: 252, spd: 4}, nature: 'Impish',
|
|
},
|
|
'%LJDarkrai': {
|
|
species: 'Garchomp', ability: 'Compound Eyes', item: 'Life Orb', gender: 'M',
|
|
moves: ['dragondance', 'dragonrush', 'gunkshot', 'precipiceblades', 'sleeppowder', 'stoneedge'], name: '%LJDarkrai',
|
|
baseSignatureMove: 'blazekick', signatureMove: "Blaze Blade",
|
|
evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant',
|
|
},
|
|
'%Majorbling': {
|
|
species: 'Dedenne', ability: 'Levitate', item: 'Expert Belt', gender: 'M',
|
|
moves: ['moonblast', 'voltswitch', 'discharge', 'focusblast', 'taunt'],
|
|
baseSignatureMove: 'bulletpunch', signatureMove: "Focus Laser",
|
|
evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid',
|
|
},
|
|
'%QuoteCS': {
|
|
species: 'Skarmory', ability: 'Adaptability', item: 'Life Orb', gender: 'M',
|
|
moves: ['meteormash', 'bravebird', 'roost'],
|
|
baseSignatureMove: 'spikes', signatureMove: "Diversify",
|
|
evs: {hp: 248, atk: 252, spe: 8}, nature: 'Adamant',
|
|
},
|
|
'%raseri': {
|
|
species: 'Prinplup', ability: 'Regenerator', item: 'Eviolite', gender: 'M',
|
|
moves: ['defog', 'stealthrock', 'toxic', 'roar', 'bravebird'],
|
|
baseSignatureMove: 'scald', signatureMove: "Ban Scald",
|
|
evs: {hp: 252, def: 228, spd: 28}, nature: 'Bold',
|
|
},
|
|
'%uselesstrainer': {
|
|
species: 'Scatterbug', ability: 'Skill Link', item: 'Mail', gender: 'M',
|
|
moves: ['explosion', 'stringshot', 'stickyweb', 'spiderweb', 'mist'],
|
|
baseSignatureMove: 'bulletpunch', signatureMove: "Ranting",
|
|
evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly',
|
|
},
|
|
'%Vacate': {
|
|
species: 'Bibarel', ability: 'Adaptability', item: 'Leftovers', gender: 'M',
|
|
moves: ['earthquake', 'smellingsalts', 'stockpile', 'zenheadbutt', 'waterfall'],
|
|
baseSignatureMove: 'superfang', signatureMove: "Duper Fang",
|
|
evs: {atk: 252, def: 4, spd: 252}, nature: 'Quiet',
|
|
},
|
|
// Voices.
|
|
'+Aldaron': {
|
|
species: 'Conkeldurr', ability: 'Speed Boost', item: 'Assault Vest', gender: 'M',
|
|
moves: ['drainpunch', 'machpunch', 'iciclecrash', 'closecombat', 'earthquake', 'shadowclaw'],
|
|
baseSignatureMove: 'superpower', signatureMove: "Admin Decision",
|
|
evs: {hp: 252, atk: 252, def: 4}, nature: 'Adamant',
|
|
},
|
|
'+bmelts': {
|
|
species: 'Mewtwo', ability: 'Regenerator', item: 'Mewtwonite X', gender: 'M',
|
|
moves: ['batonpass', 'uturn', 'voltswitch'],
|
|
baseSignatureMove: 'partingshot', signatureMove: "Aaaannnd... he's gone",
|
|
evs: {hp: 4, spa: 252, spe: 252}, nature: 'Modest',
|
|
},
|
|
'+Cathy': {
|
|
species: 'Aegislash', ability: 'Stance Change', item: 'Life Orb', gender: 'F',
|
|
moves: ['kingsshield', 'shadowsneak', this.sample(['calmmind', 'shadowball', 'shadowclaw', 'flashcannon', 'dragontail', 'hyperbeam'])],
|
|
baseSignatureMove: 'memento', signatureMove: "HP Display Policy",
|
|
evs: {hp: 4, atk: 252, spa: 252}, nature: 'Quiet',
|
|
},
|
|
'+Diatom': {
|
|
species: 'Spiritomb', ability: 'Parental Bond', item: 'Custap Berry', gender: 'M',
|
|
moves: ['psywave', this.sample(['poisonfang', 'shadowstrike']), this.sample(['uturn', 'rapidspin'])],
|
|
baseSignatureMove: 'healingwish', signatureMove: "Be Thankful I Sacrificed Myself",
|
|
evs: {hp: 252, def: 136, spd: 120}, nature: 'Impish',
|
|
},
|
|
'+Limi': {
|
|
species: 'Primeape', ability: 'Poison Heal', item: 'Leftovers', gender: 'M',
|
|
moves: ['ingrain', 'doubleedge', 'leechseed'],
|
|
baseSignatureMove: 'growl', signatureMove: "Resilience",
|
|
evs: {hp: 252, atk: 252, def: 4}, nature: 'Adamant',
|
|
},
|
|
'+MattL': {
|
|
species: 'Mandibuzz', ability: 'Poison Heal', item: 'Leftovers', gender: 'M',
|
|
moves: ['oblivionwing', 'leechseed', 'quiverdance', 'topsyturvy', 'substitute'],
|
|
baseSignatureMove: 'toxic', signatureMove: "Topology",
|
|
evs: {hp: 252, def: 252, spd: 4}, nature: 'Bold',
|
|
},
|
|
'+mikel': {
|
|
species: 'Giratina', ability: 'Prankster', item: 'Lum Berry', gender: 'M',
|
|
moves: ['rest', 'recycle', this.sample(['toxic', 'willowisp'])],
|
|
baseSignatureMove: 'swagger', signatureMove: "Trolling Lobby",
|
|
evs: {hp: 252, def: 128, spd: 128}, ivs: {atk: 0}, nature: 'Calm',
|
|
},
|
|
'+Great Sage': {
|
|
species: 'Shuckle', ability: 'Harvest', item: 'Leppa Berry', gender: '',
|
|
moves: ['substitute', 'protect', 'batonpass'],
|
|
baseSignatureMove: 'judgment', signatureMove: "Judgment",
|
|
evs: {hp: 252, def: 28, spd: 228}, ivs: {atk: 0, def: 0, spe: 0}, nature: 'Bold',
|
|
},
|
|
'+Redew': {
|
|
species: 'Minun', ability: 'Wonder Guard', item: 'Air Balloon', gender: 'M',
|
|
moves: ['nastyplot', 'thunderbolt', 'icebeam'],
|
|
baseSignatureMove: 'recover', signatureMove: "Recover",
|
|
evs: {hp: 4, spa: 252, spe: 252}, nature: 'Modest',
|
|
},
|
|
'+shaymin': {
|
|
species: 'Shaymin-Sky', ability: 'Serene Grace', item: 'Expert Belt', gender: 'F',
|
|
moves: ['seedflare', 'airslash', this.sample(['secretsword', 'earthpower', 'roost'])],
|
|
baseSignatureMove: 'detect', signatureMove: "Flower Garden",
|
|
evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid',
|
|
},
|
|
'+SOMALIA': {
|
|
species: 'Gastrodon', ability: 'Anger Point', item: 'Leftovers', gender: 'M',
|
|
moves: ['recover', 'steameruption', 'earthpower', 'leafstorm', 'substitute'],
|
|
baseSignatureMove: 'energyball', signatureMove: "Ban Everyone",
|
|
evs: {hp: 252, spa: 252, spd: 4}, nature: 'Modest',
|
|
},
|
|
'+TalkTakesTime': {
|
|
species: 'Registeel', ability: 'Flash Fire', item: 'Leftovers', gender: 'M',
|
|
moves: ['recover', 'ironhead', 'bellydrum'],
|
|
baseSignatureMove: 'taunt', signatureMove: "Bot Mute",
|
|
evs: {hp: 252, atk: 252, def: 4}, nature: 'Adamant',
|
|
},
|
|
};
|
|
// Generate the team randomly.
|
|
let pool = Object.keys(sets);
|
|
let levels = {'~': 99, '&': 97, '@': 96, '%': 96, '+': 95};
|
|
for (let i = 0; i < 6; i++) {
|
|
let identity = this.sampleNoReplace(pool);
|
|
let rank = identity.charAt(0);
|
|
let set = sets[identity];
|
|
set.level = levels[rank];
|
|
set.name = identity;
|
|
if (!set.ivs) {
|
|
set.ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31};
|
|
} else {
|
|
for (let iv in {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}) {
|
|
set.ivs[iv] = set.ivs[iv] ? set.ivs[iv] : 31;
|
|
}
|
|
}
|
|
// Assuming the hardcoded set evs are all legal.
|
|
if (!set.evs) set.evs = {hp: 84, atk: 84, def: 84, spa: 84, spd: 84, spe: 84};
|
|
set.moves = set.moves.sample(3).concat(set.baseSignatureMove);
|
|
team.push(set);
|
|
}
|
|
|
|
// Check for Illusion.
|
|
if (team[5].name === '&Slayer95') {
|
|
let temp = team[4];
|
|
team[4] = team[5];
|
|
team[5] = temp;
|
|
}
|
|
|
|
return team;
|
|
}
|
|
|
|
|
|
randomRainbowTeam() {
|
|
let pokemonLeft = 0;
|
|
let pokemon = [];
|
|
|
|
let excludedTiers = {'LC': 1, 'LC Uber': 1, 'NFE': 1};
|
|
let allowedNFE = {'Chansey': 1, 'Doublade': 1, 'Gligar': 1, 'Porygon2': 1, 'Scyther': 1};
|
|
let excludedColors = {'Black': 1, 'Brown': 1, 'Gray': 1, 'White': 1};
|
|
|
|
let pokemonPool = [];
|
|
for (let id in this.data.FormatsData) {
|
|
let template = this.getTemplate(id);
|
|
if (!excludedTiers[template.tier] && !excludedColors[template.color] && !template.isMega && !template.isPrimal && !template.isNonstandard && template.randomBattleMoves) {
|
|
pokemonPool.push(id);
|
|
}
|
|
}
|
|
|
|
let typeCount = {};
|
|
let typeComboCount = {};
|
|
let colorCount = {};
|
|
let baseFormes = {};
|
|
let uberCount = 0;
|
|
let puCount = 0;
|
|
let teamDetails = {megaStone: 0, stealthRock: 0};
|
|
|
|
while (pokemonPool.length && pokemonLeft < 6) {
|
|
let template = this.getTemplate(this.sampleNoReplace(pokemonPool));
|
|
if (!template.exists) continue;
|
|
|
|
// Limit to one of each species (Species Clause)
|
|
if (baseFormes[template.baseSpecies]) continue;
|
|
|
|
// Not available on ORAS
|
|
if (template.species === 'Pichu-Spiky-eared') continue;
|
|
|
|
// Useless in Random Battle without greatly lowering the levels of everything else
|
|
if (template.species === 'Unown') continue;
|
|
|
|
// Only certain NFE Pokemon are allowed
|
|
if (template.evos.length && !allowedNFE[template.species]) continue;
|
|
|
|
let tier = template.tier;
|
|
switch (tier) {
|
|
case 'PU':
|
|
// PUs are limited to 2 but have a 20% chance of being added anyway.
|
|
if (puCount > 1 && this.randomChance(4, 5)) continue;
|
|
break;
|
|
case 'Uber':
|
|
// Ubers are limited to 2 but have a 20% chance of being added anyway.
|
|
if (uberCount > 1 && this.randomChance(4, 5)) continue;
|
|
break;
|
|
case 'CAP':
|
|
// CAPs have 20% the normal rate
|
|
if (this.randomChance(4, 5)) continue;
|
|
break;
|
|
case 'Unreleased':
|
|
// Unreleased Pokémon have 20% the normal rate
|
|
if (this.randomChance(4, 5)) continue;
|
|
}
|
|
|
|
// Adjust rate for species with multiple formes
|
|
switch (template.baseSpecies) {
|
|
case 'Arceus':
|
|
if (this.randomChance(17, 18)) continue;
|
|
break;
|
|
case 'Basculin':
|
|
if (this.randomChance(1, 2)) continue;
|
|
break;
|
|
case 'Genesect':
|
|
if (this.randomChance(4, 5)) continue;
|
|
break;
|
|
case 'Gourgeist':
|
|
if (this.randomChance(3, 4)) continue;
|
|
break;
|
|
case 'Meloetta':
|
|
if (this.randomChance(1, 2)) continue;
|
|
break;
|
|
case 'Castform':
|
|
if (this.randomChance(1, 2)) continue;
|
|
break;
|
|
case 'Pikachu':
|
|
// Pikachu is not a viable NFE Pokemon
|
|
continue;
|
|
}
|
|
|
|
// Limit 2 of any type, 1 of any color
|
|
let types = template.types;
|
|
let colorGroups = {'Red': 'R', 'Pink': 'R', 'Yellow': 'G', 'Green': 'G', 'Blue': 'B', 'Purple': 'B'};
|
|
let color = colorGroups[template.color];
|
|
let skip = false;
|
|
for (let t = 0; t < types.length; t++) {
|
|
if (typeCount[types[t]] > 1 && this.randomChance(4, 5)) {
|
|
skip = true;
|
|
break;
|
|
}
|
|
}
|
|
if (colorCount[color] > 1 && this.randomChance(7, 8)) {
|
|
skip = true;
|
|
}
|
|
if (skip) continue;
|
|
|
|
let set = this.randomSet(template, pokemon.length, teamDetails);
|
|
|
|
// Illusion shouldn't be on the last pokemon of the team
|
|
if (set.ability === 'Illusion' && pokemonLeft > 4) continue;
|
|
|
|
// Make sure that the base forme isn't of a banned color.
|
|
if (this.getTemplate(set.species).color in excludedColors) continue;
|
|
|
|
// Limit 1 of any type combination
|
|
let typeCombo = types.join();
|
|
if (set.ability === 'Drought' || set.ability === 'Drizzle') {
|
|
// Drought and Drizzle don't count towards the type combo limit
|
|
typeCombo = set.ability;
|
|
}
|
|
if (typeCombo in typeComboCount) continue;
|
|
|
|
// Limit the number of Megas to one
|
|
let forme = template.otherFormes && this.getTemplate(template.otherFormes[0]);
|
|
let isMegaSet = this.getItem(set.item).megaStone || (forme && forme.isMega && forme.requiredMove && set.moves.indexOf(toId(forme.requiredMove)) >= 0);
|
|
if (isMegaSet && teamDetails.megaStone > 0) continue;
|
|
|
|
// Okay, the set passes, add it to our team
|
|
if (template.species !== 'Ditto') set.moves.push('swift');
|
|
pokemon.push(set);
|
|
|
|
// Now that our Pokemon has passed all checks, we can increment our counters
|
|
pokemonLeft++;
|
|
|
|
// Increment type and color counters
|
|
for (let t = 0; t < types.length; t++) {
|
|
if (types[t] in typeCount) {
|
|
typeCount[types[t]]++;
|
|
} else {
|
|
typeCount[types[t]] = 1;
|
|
}
|
|
}
|
|
typeComboCount[typeCombo] = 1;
|
|
if (color in colorCount) {
|
|
colorCount[color]++;
|
|
} else {
|
|
colorCount[color] = 1;
|
|
}
|
|
|
|
// Increment Uber/NU counters
|
|
if (tier === 'Uber') {
|
|
uberCount++;
|
|
} else if (tier === 'PU') {
|
|
puCount++;
|
|
}
|
|
|
|
// Increment mega, stealthrock, and base species counters
|
|
if (isMegaSet) teamDetails.megaStone++;
|
|
if (set.moves.indexOf('stealthrock') >= 0) teamDetails.stealthRock++;
|
|
baseFormes[template.baseSpecies] = 1;
|
|
}
|
|
return pokemon;
|
|
}
|
|
|
|
|
|
randomSpoopyTeam() {
|
|
let pool = [
|
|
'ekans', 'arbok', 'golbat', 'parasect', 'muk', 'gengar', 'marowak', 'weezing', 'tangela', 'mr. mime', 'ditto',
|
|
'kabutops', 'noctowl', 'ariados', 'crobat', 'umbreon', 'murkrow', 'misdreavus', 'gligar', 'granbull', 'sneasel',
|
|
'houndoom', 'mightyena', 'dustox', 'shiftry', 'shedinja', 'exploud', 'sableye', 'mawile', 'swalot', 'carvanha',
|
|
'sharpedo', 'cacturne', 'seviper', 'lunatone', 'claydol', 'shuppet', 'banette', 'duskull', 'dusclops', 'absol',
|
|
'snorunt', 'glalie', 'drifloon', 'drifblim', 'mismagius', 'honchkrow', 'skuntank', 'spiritomb', 'drapion',
|
|
'toxicroak', 'weavile', 'tangrowth', 'gliscor', 'dusknoir', 'froslass', 'rotom', 'rotomwash', 'rotomheat',
|
|
'rotommow', 'purrloin', 'liepard', 'swoobat', 'whirlipede', 'scolipede', 'basculin', 'krookodile', 'sigilyph',
|
|
'yamask', 'cofagrigus', 'garbodor', 'zorua', 'zoroark', 'gothita', 'gothorita', 'gothitelle', 'frillish',
|
|
'jellicent', 'joltik', 'galvantula', 'elgyem', 'beheeyem', 'litwick', 'lampent', 'chandelure', 'golurk',
|
|
'zweilous', 'hydreigon', 'volcarona', 'espurr', 'meowstic', 'honedge', 'doublade', 'aegislash', 'malamar',
|
|
'phantump', 'trevenant', 'pumpkaboo', 'gourgeist', 'noibat', 'noivern', 'magikarp', 'farfetchd', 'machamp',
|
|
];
|
|
let team = [];
|
|
|
|
for (let i = 0; i < 6; i++) {
|
|
let mon = this.sampleNoReplace(pool);
|
|
let template = this.getTemplate(mon);
|
|
if (mon === 'pumpkaboo' || mon === 'gourgeist') {
|
|
let forme = this.random(4);
|
|
if (forme > 0) {
|
|
mon = template.otherFormes[forme - 1];
|
|
template = this.getTemplate(mon);
|
|
}
|
|
}
|
|
let set = this.randomSet(template, i, {megaStone: 1});
|
|
set.species = mon;
|
|
if (mon === 'magikarp') {
|
|
set.name = 'ayy lmao';
|
|
set.item = 'powerherb';
|
|
set.ability = 'primordialsea';
|
|
set.moves = ['hyperbeam', 'geomancy', 'originpulse', 'aquaring', 'trickortreat'];
|
|
} else {
|
|
if (mon === 'golurk') {
|
|
set.name = 'Spoopy Skilenton';
|
|
} else if (mon === 'farfetchd') {
|
|
set.name = 'Le Toucan of Luck';
|
|
} else if (mon === 'machamp') {
|
|
set.name = 'John Cena';
|
|
} else if (mon === 'espurr') {
|
|
set.name = 'Devourer of Souls';
|
|
}
|
|
set.moves[4] = 'trickortreat';
|
|
if (set.item === 'Assault Vest') {
|
|
set.item = 'Leftovers';
|
|
}
|
|
if (set.item === 'Choice Band' || set.item === 'Choice Specs') {
|
|
set.item = 'Life Orb';
|
|
}
|
|
}
|
|
team.push(set);
|
|
}
|
|
|
|
return team;
|
|
}
|
|
|
|
randomSeasonalHeroTeam() {
|
|
let teams = [
|
|
['Wolverine', 'Professor X', 'Cyclops', 'Nightcrawler', 'Phoenix', 'Emma Frost', 'Storm', 'Iceman'],
|
|
['Magneto', 'Mystique', 'Quicksilver', 'Scarlet Witch', 'Blob', 'Pyro', 'Sabretooth', 'Juggernaut', 'Toad'],
|
|
['Captain America', 'Hulk', 'Iron Man', 'Hawkeye', 'Black Widow', 'Thor', 'Nick Fury', 'Vision'],
|
|
['Starlord', 'Gamora', 'Groot', 'Rocket Raccoon', 'Drax the Destroyer', 'Nova'],
|
|
['Batman', 'Superman', 'Aquaman', 'Wonder Woman', 'Green Lantern', 'The Flash', 'Green Arrow', 'Firestorm'],
|
|
['Robin', 'Starfire', 'Cyborg', 'Beast Boy', 'Raven', 'Jinx', 'Terra', 'Blue Beetle'],
|
|
['Mr. Fantastic', 'Invisible Woman', 'Thing', 'Human Torch', 'Spiderman', 'Ant-Man'],
|
|
['Baymax', 'Honey Lemon', 'GoGo Tomago', 'Wasabi-no-Ginger', 'Fredzilla', 'Silver Samurai', 'Sunfire'],
|
|
['Joker', 'Deadshot', 'Harley Quinn', 'Boomerang', 'Killer Croc', 'Enchantress'],
|
|
['Poison Ivy', 'Bane', 'Scarecrow', 'Two-Face', 'Penguin', 'Mr. Freeze', 'Catwoman'],
|
|
];
|
|
let mons = {
|
|
'Wolverine': {species: 'excadrill', ability: 'Regenerator', item: 'lifeorb', gender: 'M'},
|
|
'Professor X': {species: 'beheeyem', moves: ['psystrike', 'thunderbolt', 'calmmind', 'aurasphere', 'signalbeam'], gender: 'M'},
|
|
'Cyclops': {species: 'sigilyph', moves: ['icebeam', 'psybeam', 'signalbeam', 'chargebeam'], item: 'lifeorb',
|
|
ability: 'tintedlens', gender: 'M'},
|
|
'Nightcrawler': {species: 'sableye', gender: 'M'}, 'Phoenix': {species: 'Ho-oh', gender: 'F'},
|
|
'Emma Frost': {species: 'dianciemega', gender: 'F'}, 'Storm': {species: 'tornadus', gender: 'F'},
|
|
'Iceman': {species: 'regice', moves: ['freezedry', 'thunderbolt', 'focusblast', 'thunderwave'], gender: 'M'},
|
|
'Magneto': {species: 'magnezone', required: 'flashcannon', gender: 'M'}, 'Quicksilver': {species: 'lucario', gender: 'M', required: 'extremespeed'}, 'Scarlet Witch': {species: 'delphox', gender: 'F'},
|
|
'Blob': {species: 'snorlax', gender: 'M'}, 'Pyro': {species: 'magmortar', gender: 'M'}, 'Juggernaut': {species: 'conkeldurr', gender: 'M'}, 'Toad': {species: 'poliwrath', gender: 'M'},
|
|
'Mystique': {species: 'mew', moves: ['knockoff', 'zenheadbutt', 'stormthrow', 'acrobatics', 'fakeout'], ability: 'Illusion', gender: 'F'},
|
|
'Sabretooth': {species: 'zangoose', ability: 'Tough Claws', item: 'lifeorb',
|
|
moves: ['swordsdance', 'quickattack', 'doubleedge', 'closecombat', 'knockoff'], gender: 'M'},
|
|
'Captain America': {species: 'braviary', gender: 'M'}, 'Hulk': {species: 'machamp', shiny: true, gender: 'M'},
|
|
'Iron Man': {species: 'magmortar', moves: ['fireblast', 'flashcannon', 'thunderbolt', 'energyball', 'focusblast', 'substitute'], gender: 'M'},
|
|
'Hawkeye': {species: 'gliscor', item: 'flyinggem', moves: ['thousandarrows', 'acrobatics', 'stoneedge', 'knockoff'], ability: 'hypercutter', gender: 'M'},
|
|
'Black Widow': {species: 'greninja', gender: 'F', shiny: true}, 'Thor': {species: 'ampharosmega', gender: (this.random(10) ? 'M' : 'F')}, 'Nick Fury': {species: 'primeape', gender: 'M'},
|
|
'Vision': {species: 'genesectshock', shiny: true}, 'Starlord': {species: 'medicham', required: 'teeterdance', gender: 'M'},
|
|
'Groot': {species: 'trevenant', moves: ['hornleech', 'shadowforce', 'hammerarm', 'icepunch'], item: 'assaultvest', gender: 'N'},
|
|
'Rocket Raccoon': {species: 'linoone', gender: 'M'}, 'Gamora': {species: 'gardevoirmega', gender: 'F'},
|
|
'Drax the Destroyer': {species: 'throh', gender: 'M'}, 'Nova': {species: 'electivire', gender: 'M'}, 'Batman': {species: 'crobat', gender: 'M'},
|
|
'Superman': {species: 'deoxys', gender: 'M'}, 'Aquaman': {species: 'samurott', gender: 'M'}, 'Wonder Woman': {species: 'lopunnymega', gender: 'F'},
|
|
'Green Lantern': {species: 'reuniclus', moves: ['psyshock', 'shadowball', 'aurasphere', 'recover'], gender: 'M'}, 'The Flash': {species: 'blaziken', gender: 'M'},
|
|
'Green Arrow': {species: 'sceptilemega', moves: ['dragonpulse', 'thousandarrows', 'seedflare', 'flashcannon'], gender: 'M'},
|
|
'Firestorm': {species: 'infernape', gender: 'M'}, 'Robin': {species: 'talonflame', gender: 'M'}, 'Starfire': {species: 'latias', gender: 'F'},
|
|
'Cyborg': {species: 'golurk', gender: 'M'}, 'Raven': {species: 'absolmega', gender: 'F'}, 'Jinx': {species: 'mismagius', gender: 'F'},
|
|
'Terra': {species: 'nidoqueen', gender: 'F'}, 'Blue Beetle': {species: 'heracross', gender: 'M'}, 'Beast Boy': {species: 'virizion', gender: 'M'},
|
|
'Mr. Fantastic': {species: 'zygarde', gender: 'M'}, 'Invisible Woman': {species: 'cresselia', gender: 'F'}, 'Thing': {species: 'regirock', gender: 'M'},
|
|
'Human Torch': {species: 'typhlosion', gender: 'M'}, 'Spiderman': {species: 'Ariados', gender: 'M'}, 'Ant-Man': {species: 'durant', gender: 'M'},
|
|
'Baymax': {species: 'regigigas'}, 'Honey Lemon': {species: 'goodra', gender: 'F'}, 'GoGo Tomago': {species: 'heliolisk', gender: 'F'},
|
|
'Wasabi-no-Ginger': {species: 'gallademega', gender: 'M'}, 'Fredzilla': {species: 'tyrantrum', gender: 'M'}, 'Silver Samurai': {species: 'cobalion', gender: 'M'},
|
|
'Sunfire': {species: 'charizardmegay', gender: 'M'}, 'Joker': {species: 'mrmime', gender: 'M'}, 'Boomerang': {species: 'marowak', gender: 'M'},
|
|
'Deadshot': {species: 'kingdra', ability: 'No Guard', item: 'scopelens', moves: ['dracometeor', 'hydropump', 'searingshot', 'aurasphere'], gender: 'M'},
|
|
'Harley Quinn': {species: 'lopunny', gender: 'F'}, 'Killer Croc': {species: 'krookodile', gender: 'M'}, 'Enchantress': {species: 'mesprit', gender: 'F'},
|
|
'Bane': {species: 'metagross', gender: 'M'}, 'Scarecrow': {species: 'cacturne', moves: ['gunkshot', 'seedbomb', 'knockoff', 'drainpunch'], shiny: true, gender: 'M'},
|
|
'Penguin': {species: 'empoleon', gender: 'M'}, 'Two-Face': {species: 'zweilous', gender: 'M'}, 'Mr. Freeze': {species: 'beartic', gender: 'M'}, 'Catwoman': {species: 'persian', gender: 'F'},
|
|
'Poison Ivy': {species: 'roserade', gender: 'F'},
|
|
};
|
|
|
|
let teamDetails = {megaStone: 1, stealthRock: 0, hazardClear: 0};
|
|
let sides = teams.map((_, index) => index);
|
|
let side;
|
|
|
|
if (!this.takenSide) {
|
|
side = this.sample(sides);
|
|
this.takenSide = side;
|
|
} else {
|
|
do {
|
|
// You can't have both players have the same squad
|
|
side = this.sampleNoReplace(sides);
|
|
} while (side === this.takenSide);
|
|
}
|
|
|
|
let heroes = teams[side];
|
|
let pokemonTeam = [];
|
|
|
|
for (let i = 0; i < 6; i++) {
|
|
let hero = this.sampleNoReplace(heroes);
|
|
let heroTemplate = mons[hero];
|
|
|
|
let template = {};
|
|
if (heroTemplate.moves) template.randomBattleMoves = heroTemplate.moves;
|
|
if (heroTemplate.required) template.requiredMove = heroTemplate.required;
|
|
Object.merge(template, this.getTemplate(heroTemplate.species), false, false);
|
|
|
|
let pokemon = this.randomSet(template, i, teamDetails);
|
|
|
|
if (heroTemplate.ability) pokemon.ability = heroTemplate.ability;
|
|
if (heroTemplate.gender) pokemon.gender = heroTemplate.gender;
|
|
if (heroTemplate.item) pokemon.item = heroTemplate.item;
|
|
pokemon.species = pokemon.name;
|
|
pokemon.name = hero;
|
|
pokemon.shiny = !!heroTemplate.shiny;
|
|
|
|
pokemonTeam.push(pokemon);
|
|
|
|
if (pokemon.ability === 'Snow Warning') teamDetails['hail'] = 1;
|
|
if (pokemon.ability === 'Drizzle' || pokemon.moves.indexOf('raindance') >= 0) teamDetails['rain'] = 1;
|
|
if (pokemon.moves.indexOf('stealthrock') >= 0) teamDetails.stealthRock++;
|
|
if (pokemon.moves.indexOf('defog') >= 0 || pokemon.moves.indexOf('rapidspin') >= 0) teamDetails.hazardClear++;
|
|
}
|
|
|
|
return pokemonTeam;
|
|
}
|
|
}
|