// Note: These are the rules that formats use // The list of formats is stored in config/formats.js exports.BattleFormats = { // Rulesets /////////////////////////////////////////////////////////////////// standard: { effectType: 'Banlist', ruleset: ['Sleep Clause Mod', 'Species Clause', 'OHKO Clause', 'Moody Clause', 'Evasion Moves Clause', 'HP Percentage Mod'], banlist: ['Unreleased', 'Illegal'] }, standardpokebank: { effectType: 'Banlist', ruleset: ['Sleep Clause Mod', 'Species Clause', 'Moody Clause', 'OHKO Clause', 'Evasion Moves Clause', 'HP Percentage Mod'], banlist: ['Illegal'] }, standardnext: { effectType: 'Banlist', ruleset: ['Sleep Clause Mod', 'Species Clause', 'OHKO Clause', 'HP Percentage Mod'], banlist: ['Illegal', 'Soul Dew'] }, standardubers: { effectType: 'Banlist', ruleset: ['Sleep Clause Mod', 'Species Clause', 'Moody Clause', 'OHKO Clause', 'HP Percentage Mod'], banlist: ['Unreleased', 'Illegal'] }, standarddw: { effectType: 'Banlist', ruleset: ['Sleep Clause Mod', 'Species Clause', 'OHKO Clause', 'Evasion Moves Clause', 'HP Percentage Mod'], banlist: ['Illegal', 'Moody'] }, standardgbu: { effectType: 'Banlist', ruleset: ['Species Clause', 'Item Clause'], banlist: ['Unreleased', 'Illegal', 'Soul Dew', 'Mewtwo', 'Mewtwo-Mega-X', 'Mewtwo-Mega-Y', 'Lugia', 'Ho-Oh', 'Kyogre', 'Groudon', 'Rayquaza', 'Dialga', 'Palkia', 'Giratina', 'Giratina-Origin', 'Phione', 'Manaphy', 'Darkrai', 'Shaymin', 'Shaymin-Sky', 'Arceus', 'Arceus-Bug', 'Arceus-Dark', 'Arceus-Dragon', 'Arceus-Electric', 'Arceus-Fairy', 'Arceus-Fighting', 'Arceus-Fire', 'Arceus-Flying', 'Arceus-Ghost', 'Arceus-Grass', 'Arceus-Ground', 'Arceus-Ice', 'Arceus-Poison', 'Arceus-Psychic', 'Arceus-Rock', 'Arceus-Steel', 'Arceus-Water', 'Victini', 'Reshiram', 'Zekrom', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Keldeo', 'Keldeo-Resolute', 'Meloetta', 'Genesect', 'Xerneas', 'Yveltal', 'Zygarde' ] }, pokemon: { effectType: 'Banlist', validateSet: function(set, format, isNonstandard) { var item = this.getItem(set.item); var template = this.getTemplate(set.species); var problems = []; if (set.species === set.name) delete set.name; if (template.gen > this.gen) { problems.push(set.species+' does not exist in gen '+this.gen+'.'); } var ability = {}; if (set.ability) { ability = this.getAbility(set.ability); if (ability.gen > this.gen) { problems.push(ability.name+' does not exist in gen '+this.gen+'.'); } } if (set.moves) for (var i=0; i this.gen) { problems.push(move.name+' does not exist in gen '+this.gen+'.'); } else if (!isNonstandard && move.isNonstandard) { problems.push(move.name+' is not a real move.'); } } if (item.gen > this.gen) { problems.push(item.name+' does not exist in gen '+this.gen+'.'); } if (set.moves && set.moves.length > 4) { problems.push((set.name||set.species) + ' has more than four moves.'); } if (set.level && set.level > 100) { problems.push((set.name||set.species) + ' is higher than level 100.'); } if (!isNonstandard) { if (template.isNonstandard) { problems.push(set.species+' is not a real Pokemon.'); } if (ability.isNonstandard) { problems.push(ability.name+' is not a real ability.'); } if (item.isNonstandard) { problems.push(item.name + ' is not a real item.'); } } // ----------- legality line ------------------------------------------ if (!format.banlistTable || !format.banlistTable['illegal']) return problems; // everything after this line only happens if we're doing legality enforcement // limit one of each move var moves = []; if (set.moves) { var hasMove = {}; for (var i=0; i= team.length) { return; } } return ["Your team must share a type."]; } } };