pokemon-showdown/mods/gen1/rulesets.js
Guangcong Luo e8b60c1e90 Fix Gen 1-2 DV/EV/shiny/gender validation
The old code tried to validate by changing incorrect values to correct
values, but had lots of bugs. Even if it didn't have bugs, it would have
various flaws like stats being different from what you would expect from
the teambuilder, so the new code just tells you when your HP DV,
shininess, gender, and Hidden Power type are inconsistent with your
other DVs.

(The one exception is SD Thick Club Marowak, which still automatically
fixes its Atk IV, since we still don't have teambuilder UI for that.)
2017-03-01 02:13:08 -05:00

77 lines
2.3 KiB
JavaScript

'use strict';
exports.BattleFormats = {
pokemon: {
effectType: 'ValidatorRule',
name: 'Pokemon',
onValidateSet: function (set, format) {
let template = this.getTemplate(set.species);
let 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 + '.');
} else if (template.isNonstandard) {
problems.push(set.species + ' is not a real Pokemon.');
}
if (set.moves) {
for (let i = 0; i < set.moves.length; i++) {
let move = this.getMove(set.moves[i]);
if (move.gen > this.gen) {
problems.push(move.name + ' does not exist in gen ' + this.gen + '.');
} else if (move.isNonstandard) {
problems.push(move.name + ' is not a real move.');
}
}
}
if (set.moves && set.moves.length > 4) {
problems.push((set.name || set.species) + ' has more than four moves.');
}
// Let's manually delete items.
set.item = '';
// Automatically set ability to None
set.ability = 'None';
// They also get a useless nature, since that didn't exist
set.nature = 'Serious';
// No shinies
set.shiny = false;
return problems;
},
},
standard: {
effectType: 'ValidatorRule',
name: 'Standard',
ruleset: ['Sleep Clause Mod', 'Freeze Clause Mod', 'Species Clause', 'OHKO Clause', 'Evasion Moves Clause', 'HP Percentage Mod', 'Cancel Mod'],
banlist: ['Unreleased', 'Illegal', 'Dig', 'Fly',
'Kakuna + Poison Sting + Harden', 'Kakuna + String Shot + Harden',
'Beedrill + Poison Sting + Harden', 'Beedrill + String Shot + Harden',
'Nidoking + Fury Attack + Thrash',
'Exeggutor + Poison Powder + Stomp', 'Exeggutor + Sleep Powder + Stomp', 'Exeggutor + Stun Spore + Stomp',
'Eevee + Tackle + Growl',
'Vaporeon + Tackle + Growl',
'Jolteon + Tackle + Growl', 'Jolteon + Focus Energy + Thunder Shock',
'Flareon + Tackle + Growl', 'Flareon + Focus Energy + Ember',
],
onValidateSet: function (set) {
// limit one of each move in Standard
let moves = [];
if (set.moves) {
let hasMove = {};
for (let i = 0; i < set.moves.length; i++) {
let move = this.getMove(set.moves[i]);
let moveid = move.id;
if (hasMove[moveid]) continue;
hasMove[moveid] = true;
moves.push(set.moves[i]);
}
}
set.moves = moves;
},
},
};