mirror of
https://github.com/smogon/pokemon-showdown.git
synced 2026-03-21 17:25:10 -05:00
* Implement Mega Stones as pairs {key: value}
* Fix Mega Evolution check
* Add constructor guards to Dex getters
* Update config/formats.ts
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
100 lines
5.2 KiB
TypeScript
100 lines
5.2 KiB
TypeScript
export const Scripts: ModdedBattleScriptsData = {
|
|
gen: 9,
|
|
inherit: 'gen9legends',
|
|
init() {
|
|
const legalItems = [
|
|
'assaultvest', 'bigroot', 'blackbelt', 'blackglasses', 'charcoal', 'dragonfang', 'eviolite', 'expertbelt', 'fairyfeather',
|
|
'focusband', 'focussash', 'hardstone', 'kingsrock', 'leftovers', 'lifeorb', 'lightball', 'magnet', 'metalcoat', 'miracleseed',
|
|
'muscleband', 'mysticwater', 'nevermeltice', 'normalgem', 'poisonbarb', 'poweranklet', 'powerband', 'powerbelt', 'powerbracer',
|
|
'powerlens', 'powerweight', 'quickclaw', 'rockyhelmet', 'scopelens', 'sharpbeak', 'shellbell', 'silkscarf', 'silverpowder',
|
|
'softsand', 'spelltag', 'twistedspoon', 'weaknesspolicy', 'whiteherb', 'wiseglasses', 'bottlecap', 'goldbottlecap', 'dawnstone',
|
|
'duskstone', 'firestone', 'galaricacuff', 'galaricawreath', 'icestone', 'leafstone', 'moonstone', 'sachet', 'shinystone',
|
|
'sunstone', 'thunderstone', 'waterstone', 'whippeddream', 'bignugget', 'redorb', 'blueorb', 'leek', 'thickclub', 'upgrade',
|
|
'dubiousdisc', 'prismscale', 'maliciousarmor', 'auspiciousarmor', 'poweranklet', 'powerband', 'powerbelt', 'powerbracer',
|
|
'powerlens', 'powerweight', 'bignugget', 'bottlecap', 'goldbottlecap', 'prismscale', 'sachet', 'whippeddream',
|
|
];
|
|
const legalBerries = [
|
|
'aspearberry', 'babiriberry', 'chartiberry', 'cheriberry', 'chestoberry', 'chilanberry', 'chopleberry', 'cobaberry', 'colburberry',
|
|
'grepaberry', 'habanberry', 'hondewberry', 'kasibberry', 'kebiaberry', 'kelpsyberry', 'lumberry', 'occaberry', 'oranberry', 'passhoberry',
|
|
'payapaberry', 'pechaberry', 'persimberry', 'pomegberry', 'qualotberry', 'rawstberry', 'rindoberry', 'roseliberry', 'shucaberry',
|
|
'sitrusberry', 'tamatoberry', 'tangaberry', 'wacanberry', 'yacheberry',
|
|
];
|
|
const votedLegalitems = [
|
|
'heavydutyboots', 'choiceband', 'choicescarf', 'choicespecs', 'airballoon', 'loadeddice', 'mentalherb', 'powerherb', 'mirrorherb',
|
|
'aguavberry', 'apicotberry', 'custapberry', 'enigmaberry', 'figyberry', 'ganlonberry', 'iapapaberry', 'jabocaberry', 'keeberry',
|
|
'lansatberry', 'leppaberry', 'liechiberry', 'magoberry', 'marangaberry', 'micleberry', 'petayaberry', 'rowapberry', 'salacberry',
|
|
'starfberry', 'wikiberry', 'abilityshield', 'blunderpolicy', 'blacksludge', 'lightclay', 'brightpowder', 'adrenalineorb', 'absorbbulb',
|
|
'clearamulet', 'covertcloak', 'damprock', 'heatrock', 'icyrock', 'smoothrock', 'electricseed', 'mistyseed', 'psychicseed', 'grassyseed',
|
|
'flameorb', 'toxicorb', 'gripclaw', 'laggingtail', 'metronome', 'protectivepads', 'punchingglove', 'razorclaw', 'razorfang', 'roomservice',
|
|
'safetygoggles', 'shellbell', 'shedshell', 'stickybarb', 'terrainextender', 'throatspray', 'utilityumbrella', 'zoomlens', 'bindingband',
|
|
'destinyknot', 'floatstone', 'ironball', 'machobrace', 'ringtarget', 'redcard', 'ejectpack', 'ejectbutton', 'souldew', 'cellbattery',
|
|
'luminousmoss', 'oddincense', 'roseincense', 'seaincense', 'waveincense', 'snowball',
|
|
];
|
|
for (const i in this.data.Items) {
|
|
if (this.data.Items[i].isNonstandard === 'CAP' || this.data.Items[i].isNonstandard === 'Custom') continue;
|
|
if ([...legalItems, ...votedLegalitems, ...legalBerries].includes(i) ||
|
|
this.data.Items[i].megaStone || this.data.Items[i].onDrive ||
|
|
(this.data.Items[i].onPlate && !this.data.Items[i].zMove)) {
|
|
this.modData('Items', i).isNonstandard = null;
|
|
} else {
|
|
this.modData('Items', i).isNonstandard = 'Past';
|
|
}
|
|
}
|
|
for (const i in this.data.Moves) {
|
|
if (this.data.Moves[i].isNonstandard !== 'Past') continue;
|
|
this.modData('Moves', i).isNonstandard = null;
|
|
}
|
|
},
|
|
actions: {
|
|
canMegaEvo(pokemon) {
|
|
const species = pokemon.baseSpecies;
|
|
const altForme = species.otherFormes && this.dex.species.get(species.otherFormes[0]);
|
|
const item = pokemon.getItem();
|
|
// Mega Rayquaza
|
|
if ((this.battle.gen <= 7 || this.battle.ruleTable.has('+pokemontag:past') ||
|
|
this.battle.ruleTable.has('+pokemontag:future')) &&
|
|
altForme?.isMega && altForme?.requiredMove &&
|
|
pokemon.baseMoves.includes(this.battle.toID(altForme.requiredMove)) && !item.zMove) {
|
|
return altForme.name;
|
|
}
|
|
if (!item.megaStone) return null;
|
|
return item.megaStone[species.name];
|
|
},
|
|
runMegaEvo(pokemon) {
|
|
const speciesid = pokemon.canMegaEvo || pokemon.canUltraBurst;
|
|
if (!speciesid) return false;
|
|
|
|
pokemon.formeChange(speciesid, pokemon.getItem(), true);
|
|
|
|
// Limit one mega evolution
|
|
const wasMega = pokemon.canMegaEvo;
|
|
for (const ally of pokemon.side.pokemon) {
|
|
if (wasMega) {
|
|
ally.canMegaEvo = false;
|
|
} else {
|
|
ally.canUltraBurst = null;
|
|
}
|
|
}
|
|
|
|
// will finish coding this later, not important since zygarde is banned
|
|
if (speciesid === 'Zygarde-Mega') {
|
|
const coreEnforcer = pokemon.moveSlots.findIndex(x => x.id === 'coreenforcer');
|
|
if (coreEnforcer >= 0) {
|
|
const nihilLight = this.battle.dex.moves.get('nihillight');
|
|
pokemon.moveSlots[coreEnforcer] = pokemon.baseMoveSlots[coreEnforcer] = {
|
|
id: nihilLight.id,
|
|
move: nihilLight.name,
|
|
pp: pokemon.moveSlots[coreEnforcer].pp,
|
|
maxpp: pokemon.moveSlots[coreEnforcer].maxpp,
|
|
disabled: false,
|
|
used: false,
|
|
};
|
|
}
|
|
}
|
|
|
|
this.battle.runEvent('AfterMega', pokemon);
|
|
return true;
|
|
},
|
|
},
|
|
};
|