Z-A: Add DLC Pokemon (#11613)

* Z-A: Add DLC Pokemon

* za ou learnsets

* zaou changes

* skip test 4 now

* dfadasas
This commit is contained in:
Kris Johnson 2025-12-12 00:04:05 -07:00 committed by GitHub
parent 7828ec3220
commit 30ff784f2c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
29 changed files with 5073 additions and 2458 deletions

View File

@ -3448,8 +3448,8 @@ export const Formats: import('../sim/dex-formats').FormatList = [
}
const item = this.dex.items.get(set.item);
if (set.item && item.megaStone) {
const megaSpecies = this.dex.species.get(item.megaStone);
if (species.baseSpecies === item.megaEvolves && megaSpecies.bst > 625) {
const megaSpecies = this.dex.species.get(Array.isArray(item.megaStone) ? item.megaStone[0] : item.megaStone);
if (item.megaEvolves?.includes(species.baseSpecies) && megaSpecies.bst > 625) {
return [
`${set.name || set.species}'s item ${item.name} is banned.`, `(Pok\u00e9mon with a BST higher than 625 are banned)`,
];

View File

@ -723,8 +723,7 @@ export const Aliases: import('../sim/dex').AliasesTable = {
sawsbuckautumn: "Sawsbuck",
sawsbuckwinter: "Sawsbuck",
tatsugiricurly: "Tatsugiri",
tatsugiridroopy: "Tatsugiri",
tatsugiristretchy: "Tatsugiri",
tatsugirimega: "Tatsugiri-Curly-Mega",
unowna: "Unown",
unownb: "Unown",
unownc: "Unown",

View File

@ -259,6 +259,14 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
doublesTier: "(DUU)",
natDexTier: "RU",
},
raichumegax: {
isNonstandard: "Future",
tier: "Illegal",
},
raichumegay: {
isNonstandard: "Future",
tier: "Illegal",
},
sandshrew: {
tier: "LC",
},
@ -2293,6 +2301,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
doublesTier: "(DUU)",
natDexTier: "RU",
},
chimechomega: {
isNonstandard: "Future",
tier: "Illegal",
},
absol: {
isNonstandard: "Past",
tier: "Illegal",
@ -2303,6 +2315,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "Illegal",
natDexTier: "RU",
},
absolmegaz: {
isNonstandard: "Future",
tier: "Illegal",
},
snorunt: {
tier: "LC",
},
@ -2531,6 +2547,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
doublesTier: "(DUU)",
natDexTier: "RU",
},
staraptormega: {
isNonstandard: "Future",
tier: "Illegal",
},
bidoof: {
isNonstandard: "Past",
tier: "Illegal",
@ -2719,6 +2739,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "Illegal",
natDexTier: "(OU)",
},
garchompmegaz: {
isNonstandard: "Future",
tier: "Illegal",
},
riolu: {
tier: "LC",
},
@ -2732,6 +2756,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "Illegal",
natDexTier: "Uber",
},
lucariomegaz: {
isNonstandard: "Future",
tier: "Illegal",
},
hippopotas: {
tier: "LC",
},
@ -2854,6 +2882,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
doublesTier: "DUU",
natDexTier: "OU",
},
heatranmega: {
isNonstandard: "Future",
tier: "Illegal",
},
regigigas: {
tier: "ZU",
doublesTier: "(DUU)",
@ -2889,6 +2921,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
doublesTier: "DUber",
natDexTier: "Uber",
},
darkraimega: {
isNonstandard: "Future",
tier: "Illegal",
},
shaymin: {
tier: "ZU",
doublesTier: "(DUU)",
@ -3574,6 +3610,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
doublesTier: "(DUU)",
natDexTier: "RU",
},
golurkmega: {
isNonstandard: "Future",
tier: "Illegal",
},
pawniard: {
tier: "LC",
},
@ -3885,6 +3925,14 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
doublesTier: "(DUU)",
natDexTier: "RU",
},
meowsticmega: {
isNonstandard: "Future",
tier: "Illegal",
},
meowsticfmega: {
isNonstandard: "Future",
tier: "Illegal",
},
honedge: {
isNonstandard: "Past",
tier: "Illegal",
@ -4241,6 +4289,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
doublesTier: "(DUU)",
natDexTier: "RU",
},
crabominablemega: {
isNonstandard: "Future",
tier: "Illegal",
},
oricorio: {
tier: "ZU",
doublesTier: "(DUU)",
@ -4410,6 +4462,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "Illegal",
natDexTier: "RU",
},
golisopodmega: {
isNonstandard: "Future",
tier: "Illegal",
},
sandygast: {
tier: "LC",
},
@ -4685,6 +4741,14 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
doublesTier: "DUber",
natDexTier: "Uber",
},
magearnamega: {
isNonstandard: "Future",
tier: "Illegal",
},
magearnaoriginalmega: {
isNonstandard: "Future",
tier: "Illegal",
},
marshadow: {
isNonstandard: "Past",
tier: "Illegal",
@ -4715,6 +4779,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "Illegal",
natDexTier: "UU",
},
zeraoramega: {
isNonstandard: "Future",
tier: "Illegal",
},
meltan: {
isNonstandard: "Past",
tier: "Illegal",
@ -5352,6 +5420,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
doublesTier: "(DUU)",
natDexTier: "RU",
},
scovillainmega: {
isNonstandard: "Future",
tier: "Illegal",
},
tadbulb: {
tier: "LC",
},
@ -5400,11 +5472,27 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
doublesTier: "DUU",
natDexTier: "Uber",
},
baxcaliburmega: {
isNonstandard: "Future",
tier: "Illegal",
},
tatsugiri: {
tier: "PU",
doublesTier: "(DUU)",
natDexTier: "RU",
},
tatsugiricurlymega: {
isNonstandard: "Future",
tier: "Illegal",
},
tatsugiridroopymega: {
isNonstandard: "Future",
tier: "Illegal",
},
tatsugiristretchymega: {
isNonstandard: "Future",
tier: "Illegal",
},
cyclizar: {
tier: "RU",
doublesTier: "(DUU)",
@ -5468,6 +5556,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
doublesTier: "DOU",
natDexTier: "UU",
},
glimmoramega: {
isNonstandard: "Future",
tier: "Illegal",
},
shroodle: {
tier: "LC",
},

View File

@ -47,6 +47,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
gen: 6,
isNonstandard: "Past",
},
absolitez: {
name: "Absolite Z",
spritenum: 576,
megaStone: "Absol-Mega-Z",
megaEvolves: "Absol",
itemUser: ["Absol"],
onTakeItem(item, source) {
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
return true;
},
num: 2588,
gen: 9,
isNonstandard: "Future",
},
absorbbulb: {
name: "Absorb Bulb",
spritenum: 2,
@ -408,6 +422,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
gen: 9,
isNonstandard: "Future",
},
baxcalibrite: {
name: "Baxcalibrite",
spritenum: 0,
megaStone: "Baxcalibur-Mega",
megaEvolves: "Baxcalibur",
itemUser: ["Baxcalibur"],
onTakeItem(item, source) {
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
return true;
},
num: 2601,
gen: 9,
isNonstandard: "Future",
},
beastball: {
name: "Beast Ball",
spritenum: 661,
@ -947,6 +975,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
gen: 5,
isNonstandard: "Past",
},
chimechite: {
name: "Chimechite",
spritenum: 0,
megaStone: "Chimecho-Mega",
megaEvolves: "Chimecho",
itemUser: ["Chimecho"],
onTakeItem(item, source) {
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
return true;
},
num: 2587,
gen: 9,
isNonstandard: "Future",
},
chippedpot: {
name: "Chipped Pot",
spritenum: 720,
@ -1213,6 +1255,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
num: 1885,
gen: 9,
},
crabominite: {
name: "Crabominite",
spritenum: 0,
megaStone: "Crabominable-Mega",
megaEvolves: "Crabominable",
itemUser: ["Crabominable"],
onTakeItem(item, source) {
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
return true;
},
num: 2595,
gen: 9,
isNonstandard: "Future",
},
crackedpot: {
name: "Cracked Pot",
spritenum: 719,
@ -1298,6 +1354,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
gen: 7,
isNonstandard: "Past",
},
darkranite: {
name: "Darkranite",
spritenum: 0,
megaStone: "Darkrai-Mega",
megaEvolves: "Darkrai",
itemUser: ["Darkrai"],
onTakeItem(item, source) {
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
return true;
},
num: 2593,
gen: 9,
isNonstandard: "Future",
},
dawnstone: {
name: "Dawn Stone",
spritenum: 92,
@ -2415,6 +2485,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
gen: 6,
isNonstandard: "Past",
},
garchompitez: {
name: "Garchompite Z",
spritenum: 573,
megaStone: "Garchomp-Mega-Z",
megaEvolves: "Garchomp",
itemUser: ["Garchomp"],
onTakeItem(item, source) {
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
return true;
},
num: 2590,
gen: 9,
isNonstandard: "Future",
},
gardevoirite: {
name: "Gardevoirite",
spritenum: 587,
@ -2499,6 +2583,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
gen: 6,
isNonstandard: "Past",
},
glimmoranite: {
name: "Glimmoranite",
spritenum: 0,
megaStone: "Glimmora-Mega",
megaEvolves: "Glimmora",
itemUser: ["Glimmora"],
onTakeItem(item, source) {
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
return true;
},
num: 2600,
gen: 9,
isNonstandard: "Future",
},
goldbottlecap: {
name: "Gold Bottle Cap",
spritenum: 697,
@ -2508,6 +2606,34 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
num: 796,
gen: 7,
},
golisopite: {
name: "Golisopite",
spritenum: 0,
megaStone: "Golisopod-Mega",
megaEvolves: "Golisopod",
itemUser: ["Golisopod"],
onTakeItem(item, source) {
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
return true;
},
num: 2596,
gen: 9,
isNonstandard: "Future",
},
golurkite: {
name: "Golurkite",
spritenum: 0,
megaStone: "Golurk-Mega",
megaEvolves: "Golurk",
itemUser: ["Golurk"],
onTakeItem(item, source) {
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
return true;
},
num: 2594,
gen: 9,
isNonstandard: "Future",
},
grassgem: {
name: "Grass Gem",
spritenum: 172,
@ -2790,6 +2916,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
num: 2408,
gen: 9,
},
heatranite: {
name: "Heatranite",
spritenum: 0,
megaStone: "Heatran-Mega",
megaEvolves: "Heatran",
itemUser: ["Heatran"],
onTakeItem(item, source) {
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
return true;
},
num: 2592,
gen: 9,
isNonstandard: "Future",
},
heatrock: {
name: "Heat Rock",
spritenum: 193,
@ -3472,6 +3612,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
gen: 6,
isNonstandard: "Past",
},
lucarionitez: {
name: "Lucarionite Z",
spritenum: 594,
megaStone: "Lucario-Mega-Z",
megaEvolves: "Lucario",
itemUser: ["Lucario"],
onTakeItem(item, source) {
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
return true;
},
num: 2591,
gen: 9,
isNonstandard: "Future",
},
luckypunch: {
name: "Lucky Punch",
spritenum: 261,
@ -3615,6 +3769,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
gen: 3,
isNonstandard: "Past",
},
magearnite: {
name: "Magearnite",
spritenum: 0,
megaStone: ["Magearna-Mega", "Magearna-Original-Mega"],
megaEvolves: ["Magearna", "Magearna-Original"],
itemUser: ["Magearna", "Magearna-Original"],
onTakeItem(item, source) {
if (item.megaEvolves!.includes(source.baseSpecies.name)) return false;
return true;
},
num: 2597,
gen: 9,
isNonstandard: "Future",
},
magmarizer: {
name: "Magmarizer",
spritenum: 272,
@ -3872,6 +4040,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
num: 219,
gen: 3,
},
meowsticite: {
name: "Meowsticite",
spritenum: 0,
megaStone: ["Meowstic-Mega", "Meowstic-F-Mega"],
megaEvolves: ["Meowstic", "Meowstic-F"],
itemUser: ["Meowstic", "Meowstic-F"],
onTakeItem(item, source) {
if (source.baseSpecies.num === 678) return false;
return true;
},
num: 2594,
gen: 9,
isNonstandard: "Future",
},
metagrossite: {
name: "Metagrossite",
spritenum: 618,
@ -4976,6 +5158,36 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
gen: 3,
isNonstandard: "Past",
},
raichunitex: {
name: "Raichunite X",
spritenum: 0,
megaStone: "Raichu-Mega-X",
megaEvolves: "Raichu",
itemUser: ["Raichu"],
onTakeItem(item, source) {
if (item.megaEvolves === source.baseSpecies.name ||
item.megaStone === source.baseSpecies.name) return false;
return true;
},
num: 2585,
gen: 9,
isNonstandard: "Future",
},
raichunitey: {
name: "Raichunite Y",
spritenum: 0,
megaStone: "Raichu-Mega-Y",
megaEvolves: "Raichu",
itemUser: ["Raichu"],
onTakeItem(item, source) {
if (item.megaEvolves === source.baseSpecies.name ||
item.megaStone === source.baseSpecies.name) return false;
return true;
},
num: 2586,
gen: 9,
isNonstandard: "Future",
},
rarebone: {
name: "Rare Bone",
spritenum: 379,
@ -5493,6 +5705,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
num: 232,
gen: 2,
},
scovillainite: {
name: "Scovillainite",
spritenum: 0,
megaStone: "Scovillain-Mega",
megaEvolves: "Scovillain",
itemUser: ["Scovillain"],
onTakeItem(item, source) {
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
return true;
},
num: 2599,
gen: 9,
isNonstandard: "Future",
},
scraftinite: {
name: "Scraftinite",
spritenum: 555,
@ -5900,6 +6126,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
gen: 2,
isPokeball: true,
},
staraptite: {
name: "Staraptite",
spritenum: 0,
megaStone: "Staraptor-Mega",
megaEvolves: "Staraptor",
itemUser: ["Staraptor"],
onTakeItem(item, source) {
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
return true;
},
num: 2589,
gen: 9,
isNonstandard: "Future",
},
starfberry: {
name: "Starf Berry",
spritenum: 472,
@ -6183,6 +6423,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
num: 1117,
gen: 8,
},
tatsugirinite: {
name: "Tatsugirinite",
spritenum: 0,
megaStone: ["Tatsugiri-Curly-Mega", "Tatsugiri-Droopy-Mega", "Tatsugiri-Stretchy-Mega"],
megaEvolves: ["Tatsugiri", "Tatsugiri-Droopy", "Tatsugiri-Stretchy"],
itemUser: ["Tatsugiri", "Tatsugiri-Droopy", "Tatsugiri-Stretchy"],
onTakeItem(item, source) {
if (item.megaEvolves!.includes(source.baseSpecies.name)) return false;
return true;
},
num: 2601,
gen: 9,
isNonstandard: "Future",
},
terrainextender: {
name: "Terrain Extender",
spritenum: 662,
@ -7719,6 +7973,20 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
num: 300,
gen: 4,
},
zeraorite: {
name: "Zeraorite",
spritenum: 0,
megaStone: "Zeraora-Mega",
megaEvolves: "Zeraora",
itemUser: ["Zeraora"],
onTakeItem(item, source) {
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
return true;
},
num: 2598,
gen: 9,
isNonstandard: "Future",
},
zoomlens: {
name: "Zoom Lens",
spritenum: 574,

View File

@ -95,7 +95,7 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
if (set.item && this.dex.items.get(set.item).megaStone) {
const item = this.dex.items.get(set.item);
if (item.megaEvolves === species.baseSpecies) {
species = this.dex.species.get(item.megaStone);
species = this.dex.species.get(Array.isArray(item.megaStone) ? item.megaStone[0] : item.megaStone);
}
}
if (
@ -123,7 +123,9 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
}
if (set.item) {
const item = this.dex.items.get(set.item);
if (item.megaEvolves === set.species) godSpecies = this.dex.species.get(item.megaStone);
if (item.megaEvolves === set.species) {
godSpecies = this.dex.species.get(Array.isArray(item.megaStone) ? item.megaStone[0] : item.megaStone);
}
if (["Zacian", "Zamazenta"].includes(godSpecies.baseSpecies) && item.id.startsWith('rusted')) {
godSpecies = this.dex.species.get(set.species + "-Crowned");
}

View File

@ -101,6 +101,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
raichualola: {
isNonstandard: null,
},
raichumegax: {
isNonstandard: null,
},
raichumegay: {
isNonstandard: null,
},
sandshrew: {
isNonstandard: "Past",
},
@ -134,11 +140,23 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
ninetalesalola: {
isNonstandard: "Past",
},
igglybuff: {
isNonstandard: null,
},
jigglypuff: {
isNonstandard: "Past",
isNonstandard: null,
},
wigglytuff: {
isNonstandard: "Past",
isNonstandard: null,
},
zubat: {
isNonstandard: null,
},
golbat: {
isNonstandard: null,
},
crobat: {
isNonstandard: null,
},
oddish: {
isNonstandard: "Past",
@ -168,19 +186,22 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
meowth: {
isNonstandard: "Past",
isNonstandard: null,
},
meowthalola: {
isNonstandard: "Past",
isNonstandard: null,
},
meowthgalar: {
isNonstandard: "Past",
isNonstandard: null,
},
persian: {
isNonstandard: "Past",
isNonstandard: null,
},
persianalola: {
isNonstandard: "Past",
isNonstandard: null,
},
perrserker: {
isNonstandard: null,
},
psyduck: {
isNonstandard: "Past",
@ -189,10 +210,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
mankey: {
isNonstandard: "Past",
isNonstandard: null,
},
primeape: {
isNonstandard: "Past",
isNonstandard: null,
},
annihilape: {
isNonstandard: null,
},
growlithe: {
isNonstandard: "Past",
@ -293,6 +317,18 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
magneton: {
isNonstandard: "Past",
},
magnezone: {
isNonstandard: "Past",
},
farfetchd: {
isNonstandard: null,
},
farfetchdgalar: {
isNonstandard: null,
},
sirfetchd: {
isNonstandard: null,
},
doduo: {
isNonstandard: "Past",
},
@ -365,6 +401,15 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
exeggutoralola: {
isNonstandard: "Past",
},
cubone: {
isNonstandard: null,
},
marowak: {
isNonstandard: null,
},
marowakalola: {
isNonstandard: null,
},
hitmonlee: {
isNonstandard: "Past",
},
@ -410,6 +455,18 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
starmiemega: {
isNonstandard: null,
},
mimejr: {
isNonstandard: null,
},
mrmime: {
isNonstandard: null,
},
mrmimegalar: {
isNonstandard: null,
},
mrrime: {
isNonstandard: null,
},
scyther: {
isNonstandard: null,
},
@ -465,7 +522,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: null,
},
porygon: {
isNonstandard: "Past",
isNonstandard: null,
},
porygon2: {
isNonstandard: null,
},
porygonz: {
isNonstandard: null,
},
aerodactyl: {
isNonstandard: null,
@ -507,13 +570,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: null,
},
mewtwo: {
isNonstandard: "Unobtainable",
isNonstandard: null,
},
mewtwomegax: {
isNonstandard: "Unobtainable",
isNonstandard: null,
},
mewtwomegay: {
isNonstandard: "Unobtainable",
isNonstandard: null,
},
mew: {
isNonstandard: "Past",
@ -584,9 +647,6 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
cleffa: {
isNonstandard: null,
},
igglybuff: {
isNonstandard: "Past",
},
mareep: {
isNonstandard: null,
},
@ -690,10 +750,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
qwilfish: {
isNonstandard: "Past",
isNonstandard: null,
},
qwilfishhisui: {
isNonstandard: "Past",
isNonstandard: null,
},
overqwil: {
isNonstandard: null,
},
scizor: {
isNonstandard: null,
@ -758,9 +821,6 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
donphan: {
isNonstandard: "Past",
},
porygon2: {
isNonstandard: "Past",
},
stantler: {
isNonstandard: "Past",
},
@ -810,31 +870,40 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
treecko: {
isNonstandard: "Past",
isNonstandard: null,
},
grovyle: {
isNonstandard: "Past",
isNonstandard: null,
},
sceptile: {
isNonstandard: "Past",
isNonstandard: null,
},
sceptilemega: {
isNonstandard: "Unobtainable",
},
torchic: {
isNonstandard: "Past",
isNonstandard: null,
},
combusken: {
isNonstandard: "Past",
isNonstandard: null,
},
blaziken: {
isNonstandard: "Past",
isNonstandard: null,
},
blazikenmega: {
isNonstandard: "Unobtainable",
},
mudkip: {
isNonstandard: "Past",
isNonstandard: null,
},
marshtomp: {
isNonstandard: "Past",
isNonstandard: null,
},
swampert: {
isNonstandard: "Past",
isNonstandard: null,
},
swampertmega: {
isNonstandard: "Unobtainable",
},
poochyena: {
isNonstandard: "Past",
@ -969,10 +1038,10 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: null,
},
gulpin: {
isNonstandard: "Past",
isNonstandard: null,
},
swalot: {
isNonstandard: "Past",
isNonstandard: null,
},
carvanha: {
isNonstandard: null,
@ -996,10 +1065,10 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
spoink: {
isNonstandard: "Past",
isNonstandard: null,
},
grumpig: {
isNonstandard: "Past",
isNonstandard: null,
},
trapinch: {
isNonstandard: "Past",
@ -1026,10 +1095,10 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: null,
},
zangoose: {
isNonstandard: "Past",
isNonstandard: null,
},
seviper: {
isNonstandard: "Past",
isNonstandard: null,
},
barboach: {
isNonstandard: "Past",
@ -1044,10 +1113,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
feebas: {
isNonstandard: "Past",
isNonstandard: null,
},
milotic: {
isNonstandard: "Past",
isNonstandard: null,
},
kecleon: {
isNonstandard: null,
},
shuppet: {
isNonstandard: null,
@ -1067,8 +1139,14 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tropius: {
isNonstandard: "Past",
},
chingling: {
isNonstandard: null,
},
chimecho: {
isNonstandard: "Past",
isNonstandard: null,
},
chimechomega: {
isNonstandard: null,
},
absol: {
isNonstandard: null,
@ -1076,6 +1154,9 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
absolmega: {
isNonstandard: null,
},
absolmegaz: {
isNonstandard: null,
},
snorunt: {
isNonstandard: null,
},
@ -1122,19 +1203,34 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
latias: {
isNonstandard: "Past",
isNonstandard: null,
},
latiasmega: {
isNonstandard: null,
},
latios: {
isNonstandard: "Past",
isNonstandard: null,
},
latiosmega: {
isNonstandard: null,
},
kyogre: {
isNonstandard: "Past",
isNonstandard: null,
},
kyogreprimal: {
isNonstandard: null,
},
groudon: {
isNonstandard: "Past",
isNonstandard: null,
},
groudonprimal: {
isNonstandard: null,
},
rayquaza: {
isNonstandard: "Past",
isNonstandard: null,
},
rayquazamega: {
isNonstandard: null,
},
jirachi: {
isNonstandard: "Past",
@ -1179,13 +1275,16 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
starly: {
isNonstandard: "Past",
isNonstandard: null,
},
staravia: {
isNonstandard: "Past",
isNonstandard: null,
},
staraptor: {
isNonstandard: "Past",
isNonstandard: null,
},
staraptormega: {
isNonstandard: null,
},
kricketot: {
isNonstandard: "Past",
@ -1265,9 +1364,6 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
honchkrow: {
isNonstandard: "Past",
},
chingling: {
isNonstandard: "Past",
},
stunky: {
isNonstandard: "Past",
},
@ -1301,6 +1397,9 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
garchompmega: {
isNonstandard: null,
},
garchompmegaz: {
isNonstandard: "Unobtainable",
},
munchlax: {
isNonstandard: "Past",
},
@ -1313,6 +1412,9 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
lucariomega: {
isNonstandard: null,
},
lucariomegaz: {
isNonstandard: null,
},
hippopotas: {
isNonstandard: null,
},
@ -1343,9 +1445,6 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
weavile: {
isNonstandard: "Past",
},
magnezone: {
isNonstandard: "Past",
},
rhyperior: {
isNonstandard: "Past",
},
@ -1370,9 +1469,6 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
mamoswine: {
isNonstandard: "Past",
},
porygonz: {
isNonstandard: "Past",
},
gallade: {
isNonstandard: null,
},
@ -1392,22 +1488,22 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: null,
},
rotom: {
isNonstandard: "Past",
isNonstandard: null,
},
rotomheat: {
isNonstandard: "Past",
isNonstandard: null,
},
rotomwash: {
isNonstandard: "Past",
isNonstandard: null,
},
rotomfrost: {
isNonstandard: "Past",
isNonstandard: null,
},
rotomfan: {
isNonstandard: "Past",
isNonstandard: null,
},
rotommow: {
isNonstandard: "Past",
isNonstandard: null,
},
uxie: {
isNonstandard: "Past",
@ -1431,7 +1527,10 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
heatran: {
isNonstandard: "Past",
isNonstandard: null,
},
heatranmega: {
isNonstandard: null,
},
regigigas: {
isNonstandard: "Past",
@ -1452,7 +1551,10 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
darkrai: {
isNonstandard: "Past",
isNonstandard: null,
},
darkraimega: {
isNonstandard: null,
},
shaymin: {
isNonstandard: "Past",
@ -1553,6 +1655,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
watchog: {
isNonstandard: null,
},
purrloin: {
isNonstandard: null,
},
liepard: {
isNonstandard: null,
},
pansage: {
isNonstandard: null,
},
@ -1571,6 +1679,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
simipour: {
isNonstandard: null,
},
munna: {
isNonstandard: null,
},
musharna: {
isNonstandard: null,
},
blitzle: {
isNonstandard: "Past",
},
@ -1610,6 +1724,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
leavanny: {
isNonstandard: "Past",
},
throh: {
isNonstandard: null,
},
sawk: {
isNonstandard: null,
},
venipede: {
isNonstandard: null,
},
@ -1664,6 +1784,18 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
scraftymega: {
isNonstandard: null,
},
yamask: {
isNonstandard: null,
},
yamaskgalar: {
isNonstandard: null,
},
cofagrigus: {
isNonstandard: null,
},
runerigus: {
isNonstandard: null,
},
trubbish: {
isNonstandard: null,
},
@ -1731,10 +1863,10 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: null,
},
foongus: {
isNonstandard: "Past",
isNonstandard: null,
},
amoonguss: {
isNonstandard: "Past",
isNonstandard: null,
},
alomomola: {
isNonstandard: "Past",
@ -1785,7 +1917,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
cryogonal: {
isNonstandard: "Past",
isNonstandard: null,
},
stunfisk: {
isNonstandard: null,
@ -1800,10 +1932,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
golett: {
isNonstandard: "Past",
isNonstandard: null,
},
golurk: {
isNonstandard: "Past",
isNonstandard: null,
},
golurkmega: {
isNonstandard: null,
},
pawniard: {
isNonstandard: "Past",
@ -1842,13 +1977,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
cobalion: {
isNonstandard: "Past",
isNonstandard: null,
},
terrakion: {
isNonstandard: "Past",
isNonstandard: null,
},
virizion: {
isNonstandard: "Past",
isNonstandard: null,
},
tornadus: {
isNonstandard: "Past",
@ -1884,16 +2019,27 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
keldeo: {
isNonstandard: "Past",
isNonstandard: null,
},
keldeoresolute: {
isNonstandard: "Past",
isNonstandard: null,
},
meloetta: {
isNonstandard: "Past",
isNonstandard: null,
},
meloettapirouette: {
isNonstandard: "Past",
isNonstandard: null,
},
genesect: {
isNonstandard: null,
},
genesectdouse: {
},
genesectshock: {
},
genesectburn: {
},
genesectchill: {
},
chespin: {
isNonstandard: null,
@ -2012,6 +2158,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
meowsticf: {
isNonstandard: null,
},
meowsticmega: {
isNonstandard: null,
},
meowsticfmega: {
isNonstandard: null,
},
honedge: {
isNonstandard: null,
},
@ -2255,10 +2407,22 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
crabrawler: {
isNonstandard: "Past",
isNonstandard: null,
},
crabominable: {
isNonstandard: "Past",
isNonstandard: null,
},
crabominablemega: {
isNonstandard: null,
},
wimpod: {
isNonstandard: null,
},
golisopod: {
isNonstandard: null,
},
golisopodmega: {
isNonstandard: null,
},
oricorio: {
isNonstandard: "Past",
@ -2342,10 +2506,10 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
sandygast: {
isNonstandard: "Past",
isNonstandard: null,
},
palossand: {
isNonstandard: "Past",
isNonstandard: null,
},
minior: {
isNonstandard: "Past",
@ -2357,10 +2521,10 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
mimikyu: {
isNonstandard: "Past",
isNonstandard: null,
},
mimikyubusted: {
isNonstandard: "Past",
isNonstandard: null,
},
bruxish: {
isNonstandard: "Past",
@ -2402,10 +2566,31 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
magearna: {
isNonstandard: "Past",
isNonstandard: null,
},
magearnaoriginal: {
isNonstandard: "Past",
isNonstandard: null,
},
magearnamega: {
isNonstandard: null,
},
magearnaoriginalmega: {
isNonstandard: null,
},
marshadow: {
isNonstandard: null,
},
zeraora: {
isNonstandard: null,
},
zeraoramega: {
isNonstandard: null,
},
meltan: {
isNonstandard: null,
},
melmetal: {
isNonstandard: null,
},
grookey: {
isNonstandard: "Past",
@ -2441,13 +2626,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
rookidee: {
isNonstandard: "Past",
isNonstandard: null,
},
corvisquire: {
isNonstandard: "Past",
isNonstandard: null,
},
corviknight: {
isNonstandard: "Past",
isNonstandard: null,
},
chewtle: {
isNonstandard: "Past",
@ -2494,14 +2679,19 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
barraskewda: {
isNonstandard: "Past",
},
nickit: {
isNonstandard: null,
},
thievul: {
isNonstandard: null,
},
toxel: {
isNonstandard: "Past",
isNonstandard: null,
},
toxtricity: {
isNonstandard: "Past",
isNonstandard: null,
},
toxtricitylowkey: {
isNonstandard: "Past",
},
sinistea: {
isNonstandard: "Past",
@ -2533,15 +2723,18 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
grimmsnarl: {
isNonstandard: "Past",
},
perrserker: {
isNonstandard: "Past",
},
milcery: {
isNonstandard: "Past",
},
alcremie: {
isNonstandard: "Past",
},
clobbopus: {
isNonstandard: null,
},
grapploct: {
isNonstandard: null,
},
falinks: {
isNonstandard: null,
},
@ -2567,16 +2760,15 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
indeedee: {
isNonstandard: "Past",
isNonstandard: null,
},
indeedeef: {
isNonstandard: "Past",
isNonstandard: null,
},
morpeko: {
isNonstandard: "Past",
isNonstandard: null,
},
morpekohangry: {
isNonstandard: "Past",
},
cufant: {
isNonstandard: "Past",
@ -2651,7 +2843,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
kleavor: {
isNonstandard: "Past",
isNonstandard: null,
},
ursaluna: {
isNonstandard: "Past",
@ -2668,9 +2860,6 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
sneasler: {
isNonstandard: "Past",
},
overqwil: {
isNonstandard: "Past",
},
enamorus: {
isNonstandard: "Past",
},
@ -2744,10 +2933,10 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
fidough: {
isNonstandard: "Past",
isNonstandard: null,
},
dachsbun: {
isNonstandard: "Past",
isNonstandard: null,
},
smoliv: {
isNonstandard: "Past",
@ -2759,34 +2948,34 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
squawkabilly: {
isNonstandard: "Past",
isNonstandard: null,
},
squawkabillyblue: {
isNonstandard: "Past",
},
squawkabillyyellow: {
isNonstandard: "Past",
isNonstandard: null,
},
squawkabillywhite: {
isNonstandard: "Past",
isNonstandard: null,
},
squawkabillyyellow: {
isNonstandard: null,
},
nacli: {
isNonstandard: "Past",
isNonstandard: null,
},
naclstack: {
isNonstandard: "Past",
isNonstandard: null,
},
garganacl: {
isNonstandard: "Past",
isNonstandard: null,
},
charcadet: {
isNonstandard: "Past",
isNonstandard: null,
},
armarouge: {
isNonstandard: "Past",
isNonstandard: null,
},
ceruledge: {
isNonstandard: "Past",
isNonstandard: null,
},
tadbulb: {
isNonstandard: "Past",
@ -2801,16 +2990,16 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
maschiff: {
isNonstandard: "Past",
isNonstandard: null,
},
mabosstiff: {
isNonstandard: "Past",
isNonstandard: null,
},
shroodle: {
isNonstandard: "Past",
isNonstandard: null,
},
grafaiai: {
isNonstandard: "Past",
isNonstandard: null,
},
bramblin: {
isNonstandard: "Past",
@ -2828,10 +3017,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
capsakid: {
isNonstandard: "Past",
isNonstandard: null,
},
scovillain: {
isNonstandard: "Past",
isNonstandard: null,
},
scovillainmega: {
isNonstandard: null,
},
rellor: {
isNonstandard: "Past",
@ -2846,13 +3038,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
tinkatink: {
isNonstandard: "Past",
isNonstandard: null,
},
tinkatuff: {
isNonstandard: "Past",
isNonstandard: null,
},
tinkaton: {
isNonstandard: "Past",
isNonstandard: null,
},
wiglett: {
isNonstandard: "Past",
@ -2879,25 +3071,28 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
cyclizar: {
isNonstandard: "Past",
isNonstandard: null,
},
orthworm: {
isNonstandard: "Past",
},
glimmet: {
isNonstandard: "Past",
isNonstandard: null,
},
glimmora: {
isNonstandard: "Past",
isNonstandard: null,
},
glimmoramega: {
isNonstandard: null,
},
greavard: {
isNonstandard: "Past",
isNonstandard: null,
},
houndstone: {
isNonstandard: "Past",
isNonstandard: null,
},
flamigo: {
isNonstandard: "Past",
isNonstandard: null,
},
cetoddle: {
isNonstandard: "Past",
@ -2909,13 +3104,25 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
dondozo: {
isNonstandard: "Past",
isNonstandard: null,
},
tatsugiri: {
isNonstandard: "Past",
isNonstandard: null,
},
annihilape: {
isNonstandard: "Past",
tatsugiridroopy: {
isNonstandard: null,
},
tatsugiristretchy: {
isNonstandard: null,
},
tatsugiricurlymega: {
isNonstandard: null,
},
tatsugiridroopymega: {
isNonstandard: null,
},
tatsugiristretchymega: {
isNonstandard: null,
},
clodsire: {
isNonstandard: "Past",
@ -2969,22 +3176,25 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Past",
},
frigibax: {
isNonstandard: "Past",
isNonstandard: null,
},
arctibax: {
isNonstandard: "Past",
isNonstandard: null,
},
baxcalibur: {
isNonstandard: "Past",
isNonstandard: null,
},
baxcaliburmega: {
isNonstandard: "Unobtainable",
},
gimmighoul: {
isNonstandard: "Past",
isNonstandard: null,
},
gimmighoulroaming: {
isNonstandard: "Past",
isNonstandard: null,
},
gholdengo: {
isNonstandard: "Past",
isNonstandard: null,
},
wochien: {
isNonstandard: "Past",

View File

@ -3,10 +3,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
baseStats: { hp: 60, atk: 140, def: 105, spa: 130, spd: 105, spe: 120 },
},
scyther: {
inherit: true,
evos: ["Scizor"],
},
mawilemega: {
inherit: true,
baseStats: { hp: 50, atk: 147, def: 125, spa: 55, spd: 95, spe: 50 },

View File

@ -1,140 +0,0 @@
export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
ange: {
gen: 9,
desc: "Gain 1/16 of max HP at the end of every turn. Opposing Megas have 1/12 max HP drained every turn.",
shortDesc: "Gain 1/16 max HP at end of every turn. Against Megas: drain 1/12 max HP every turn.",
onResidualOrder: 5,
onResidualSubOrder: 4,
onResidual(pokemon) {
if (!pokemon.hp) return;
const megaFoes = [];
for (const target of pokemon.foes()) {
if (target.baseSpecies.isMega) megaFoes.push(target);
}
if (megaFoes.length) {
for (const target of megaFoes) {
this.damage(target.baseMaxhp / 12, target, pokemon);
this.heal(target.baseMaxhp / 12);
}
} else {
this.heal(pokemon.baseMaxhp / 16);
}
},
name: "Ange",
},
brassbond: {
onPrepareHit(source, target, move) {
if (move.category === 'Status' || move.multihit || move.flags['noparentalbond'] || move.flags['charge'] ||
move.flags['futuremove'] || move.spreadHit || move.isZ || move.isMax) return;
move.multihit = 3;
move.multihitType = 'brassbond' as 'parentalbond';
},
onTryBoost(boost, target, source, effect) {
if (effect.effectType === 'Move' && effect.multihitType && effect.hit > 1 &&
source && target === source) {
let i: keyof BoostsTable;
for (i in boost) {
delete boost[i];
}
}
},
// Damage modifier implemented in BattleActions#modifyDamage()
onSourceModifySecondaries(secondaries, target, source, move) {
if (move.multihitType && move.hit > 1) {
return [];
}
},
flags: {},
name: "Brass Bond",
gen: 9,
desc: "This Pokemon's damaging moves hit 3x. Successive hits do 15% damage without added effects.",
shortDesc: "This Pokemon's damaging moves hit 3x. Successive hits do 15% damage without added effects.",
},
contrarian: {
onChangeBoost(boost, target, source, effect) {
if (effect && effect.id === 'zpower') return;
let i: BoostID;
for (i in boost) {
boost[i]! *= -2;
}
},
name: "Contrarian",
desc: "This Pokemon has its stat changes inverted and doubled.",
shortDesc: "This Pokemon has its stat changes inverted and doubled.",
gen: 9,
},
corrosion: {
inherit: true,
onModifyMovePriority: -5,
onModifyMove(move) {
if (!move.ignoreImmunity) move.ignoreImmunity = {};
if (move.ignoreImmunity !== true) {
move.ignoreImmunity['Poison'] = true;
}
},
shortDesc: "This Pokemon can poison a Pokemon regardless of its typing and hit them with Poison moves.",
},
ionbattery: {
onModifySpAPriority: 5,
onModifySpA(spa, pokemon) {
return this.chainModify(1.5);
},
flags: { breakable: 1 },
name: "Ion Battery",
desc: "This Pokemon floats and has 1.5x Sp. Atk.",
shortDesc: "This Pokemon floats and has 1.5x Sp. Atk.",
},
luchadorspride: {
onSourceAfterFaint(length, target, source, effect) {
if (effect && effect.effectType === 'Move') {
this.boost({ spe: length }, source);
}
},
flags: {},
name: "Luchador's Pride",
desc: "This Pokemon's Speed is raised by 1 stage if it attacks and knocks out another Pokemon.",
shortDesc: "This Pokemon's Speed is raised by 1 stage if it attacks and KOes another Pokemon.",
gen: 9,
},
protectivethorns: {
gen: 9,
name: "Protective Thorns",
desc: "Bulletproof + Iron Barbs.",
shortDesc: "Bulletproof + Iron Barbs.",
onTryHit(pokemon, target, move) {
if (move.flags['bullet']) {
this.add('-immune', pokemon, '[from] ability: Protective Thorns');
return null;
}
},
onDamagingHitOrder: 1,
onDamagingHit(damage, target, source, move) {
if (this.checkMoveMakesContact(move, source, target, true)) {
this.damage(source.baseMaxhp / 8, source, target);
}
},
flags: { breakable: 1 },
},
minus: {
inherit: true,
onModifySpAPriority: 5,
onModifySpA(spa, pokemon) {
for (const allyActive of pokemon.allies()) {
if (allyActive.hasAbility(['minus', 'plus', 'ionbattery'])) {
return this.chainModify(1.5);
}
}
},
},
plus: {
inherit: true,
onModifySpAPriority: 5,
onModifySpA(spa, pokemon) {
for (const allyActive of pokemon.allies()) {
if (allyActive.hasAbility(['minus', 'plus', 'ionbattery'])) {
return this.chainModify(1.5);
}
}
},
},
};

View File

@ -77,6 +77,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
raichualola: {
tier: "UU",
},
raichumegax: {
tier: "OU",
},
raichumegay: {
tier: "OU",
},
clefairy: {
tier: "NFE",
},
@ -86,6 +92,51 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
clefablemega: {
tier: "(OU)",
},
igglybuff: {
tier: "LC",
},
jigglypuff: {
tier: "NFE",
},
wigglytuff: {
tier: "OU",
},
zubat: {
tier: "LC",
},
golbat: {
tier: "NFE",
},
crobat: {
tier: "OU",
},
meowth: {
tier: "LC",
},
meowthalola: {
tier: "LC",
},
meowthgalar: {
tier: "LC",
},
persian: {
tier: "OU",
},
persianalola: {
tier: "OU",
},
perrserker: {
tier: "OU",
},
mankey: {
tier: "LC",
},
primeape: {
tier: "NFE",
},
annihilape: {
tier: "OU",
},
abra: {
tier: "LC",
},
@ -134,6 +185,15 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
slowbrogalar: {
tier: "UU",
},
farfetchd: {
tier: "OU",
},
farfetchdgalar: {
tier: "LC",
},
sirfetchd: {
tier: "OU",
},
gastly: {
tier: "LC",
},
@ -149,6 +209,15 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
onix: {
tier: "LC",
},
cubone: {
tier: "LC",
},
marowak: {
tier: "OU",
},
marowakalola: {
tier: "OU",
},
kangaskhan: {
tier: "UU",
},
@ -164,6 +233,18 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
starmiemega: {
tier: "OU",
},
mimejr: {
tier: "LC",
},
mrmime: {
tier: "OU",
},
mrmimegalar: {
tier: "NFE",
},
mrrime: {
tier: "OU",
},
scyther: {
tier: "LC",
},
@ -173,6 +254,15 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
pinsirmega: {
tier: "UU",
},
porygon: {
tier: "LC",
},
porygon2: {
tier: "NFE",
},
porygonz: {
tier: "OU",
},
magikarp: {
tier: "LC",
},
@ -287,6 +377,15 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
steelixmega: {
tier: "UU",
},
qwilfish: {
tier: "OU",
},
qwilfishhisui: {
tier: "LC",
},
overqwil: {
tier: "OU",
},
scizor: {
tier: "OU",
},
@ -329,6 +428,42 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tyranitarmega: {
tier: "(OU)",
},
treecko: {
tier: "LC",
},
grovyle: {
tier: "NFE",
},
sceptile: {
tier: "OU",
},
sceptilemega: {
tier: "OU",
},
torchic: {
tier: "LC",
},
combusken: {
tier: "NFE",
},
blaziken: {
tier: "OU",
},
blazikenmega: {
tier: "OU",
},
mudkip: {
tier: "LC",
},
marshtomp: {
tier: "NFE",
},
swampert: {
tier: "OU",
},
swampertmega: {
tier: "OU",
},
ralts: {
tier: "LC",
},
@ -386,6 +521,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
roselia: {
tier: "NFE",
},
gulpin: {
tier: "LC",
},
swalot: {
tier: "OU",
},
carvanha: {
tier: "LC",
},
@ -404,6 +545,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
cameruptmega: {
tier: "UU",
},
spoink: {
tier: "LC",
},
grumpig: {
tier: "OU",
},
swablu: {
tier: "LC",
},
@ -413,6 +560,21 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
altariamega: {
tier: "UU",
},
zangoose: {
tier: "OU",
},
seviper: {
tier: "OU",
},
feebas: {
tier: "LC",
},
milotic: {
tier: "OU",
},
kecleon: {
tier: "OU",
},
shuppet: {
tier: "LC",
},
@ -422,12 +584,24 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
banettemega: {
tier: "UU",
},
chingling: {
tier: "LC",
},
chimecho: {
tier: "OU",
},
chimechomega: {
tier: "OU",
},
absol: {
tier: "UU",
},
absolmega: {
tier: "UU",
},
absolmegaz: {
tier: "OU",
},
snorunt: {
tier: "LC",
},
@ -461,6 +635,48 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
metagrossmega: {
tier: "Uber",
},
latias: {
tier: "OU",
},
latiasmega: {
tier: "OU",
},
latios: {
tier: "OU",
},
latiosmega: {
tier: "OU",
},
kyogre: {
tier: "Uber",
},
kyogreprimal: {
tier: "Uber",
},
groudon: {
tier: "Uber",
},
groudonprimal: {
tier: "Uber",
},
rayquaza: {
tier: "Uber",
},
rayquazamega: {
tier: "Uber",
},
starly: {
tier: "LC",
},
staravia: {
tier: "NFE",
},
staraptor: {
tier: "OU",
},
staraptormega: {
tier: "OU",
},
budew: {
tier: "LC",
},
@ -488,6 +704,9 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
garchompmega: {
tier: "(OU)",
},
garchompmegaz: {
tier: "OU",
},
riolu: {
tier: "LC",
},
@ -497,6 +716,9 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
lucariomega: {
tier: "Uber",
},
lucariomegaz: {
tier: "OU",
},
hippopotas: {
tier: "LC",
},
@ -530,6 +752,36 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
froslassmega: {
tier: "UU",
},
rotom: {
tier: "OU",
},
rotomheat: {
tier: "OU",
},
rotomwash: {
tier: "OU",
},
rotomfrost: {
tier: "OU",
},
rotomfan: {
tier: "OU",
},
rotommow: {
tier: "OU",
},
heatran: {
tier: "OU",
},
heatranmega: {
tier: "OU",
},
darkrai: {
tier: "OU",
},
darkraimega: {
tier: "OU",
},
tepig: {
tier: "LC",
},
@ -548,6 +800,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
watchog: {
tier: "UU",
},
purrloin: {
tier: "LC",
},
liepard: {
tier: "OU",
},
pansage: {
tier: "LC",
},
@ -566,6 +824,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
simipour: {
tier: "UU",
},
munna: {
tier: "LC",
},
musharna: {
tier: "OU",
},
drilbur: {
tier: "LC",
},
@ -581,6 +845,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
audinomega: {
tier: "UU",
},
throh: {
tier: "OU",
},
sawk: {
tier: "OU",
},
venipede: {
tier: "LC",
},
@ -611,6 +881,18 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
scraftymega: {
tier: "UU",
},
yamask: {
tier: "LC",
},
yamaskgalar: {
tier: "LC",
},
cofagrigus: {
tier: "OU",
},
runerigus: {
tier: "OU",
},
trubbish: {
tier: "LC",
},
@ -629,6 +911,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
emolga: {
tier: "UU",
},
foongus: {
tier: "LC",
},
amoonguss: {
tier: "OU",
},
tynamo: {
tier: "LC",
},
@ -653,12 +941,54 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
chandeluremega: {
tier: "UU",
},
cryogonal: {
tier: "OU",
},
stunfisk: {
tier: "UU",
},
stunfiskgalar: {
tier: "UU",
},
golett: {
tier: "LC",
},
golurk: {
tier: "OU",
},
golurkmega: {
tier: "OU",
},
cobalion: {
tier: "OU",
},
terrakion: {
tier: "OU",
},
virizion: {
tier: "OU",
},
keldeo: {
tier: "OU",
},
keldeoresolute: {
},
meloetta: {
tier: "OU",
},
meloettapirouette: {
},
genesect: {
tier: "OU",
},
genesectdouse: {
},
genesectshock: {
},
genesectburn: {
},
genesectchill: {
},
chespin: {
tier: "LC",
},
@ -776,6 +1106,12 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
meowsticf: {
tier: "OU",
},
meowsticmega: {
tier: "OU",
},
meowsticfmega: {
tier: "OU",
},
honedge: {
tier: "LC",
},
@ -961,16 +1297,239 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
volcanion: {
tier: "OU",
},
crabrawler: {
tier: "LC",
},
crabominable: {
tier: "OU",
},
crabominablemega: {
tier: "OU",
},
wimpod: {
tier: "OU",
},
golisopod: {
tier: "OU",
},
golisopodmega: {
tier: "OU",
},
sandygast: {
tier: "LC",
},
palossand: {
tier: "OU",
},
drampa: {
tier: "UU",
},
drampamega: {
tier: "UU",
},
mimikyu: {
tier: "OU",
},
magearna: {
tier: "OU",
},
magearnaoriginal: {
tier: "OU",
},
magearnamega: {
tier: "OU",
},
magearnaoriginalmega: {
tier: "OU",
},
marshadow: {
tier: "Uber",
},
zeraora: {
tier: "OU",
},
zeraoramega: {
tier: "OU",
},
meltan: {
tier: "OU",
},
melmetal: {
tier: "OU",
},
rookidee: {
tier: "LC",
},
corvisquire: {
tier: "NFE",
},
corviknight: {
tier: "OU",
},
nickit: {
tier: "LC",
},
thievul: {
tier: "OU",
},
toxel: {
tier: "LC",
},
toxtricity: {
tier: "OU",
},
toxtricitylowkey: {
},
clobbopus: {
tier: "LC",
},
grapploct: {
tier: "OU",
},
falinks: {
tier: "UU",
},
falinksmega: {
tier: "UU",
},
indeedee: {
tier: "OU",
},
indeedeef: {
tier: "OU",
},
morpeko: {
tier: "OU",
},
morpekohangry: {
},
kleavor: {
tier: "OU",
},
fidough: {
tier: "LC",
},
dachsbun: {
tier: "OU",
},
squawkabilly: {
tier: "OU",
},
squawkabillyblue: {
},
squawkabillywhite: {
},
squawkabillyyellow: {
},
nacli: {
tier: "LC",
},
naclstack: {
tier: "NFE",
},
garganacl: {
tier: "OU",
},
charcadet: {
tier: "LC",
},
armarouge: {
tier: "OU",
},
ceruledge: {
tier: "OU",
},
maschiff: {
tier: "LC",
},
mabosstiff: {
tier: "OU",
},
shroodle: {
tier: "LC",
},
grafaiai: {
tier: "OU",
},
capsakid: {
tier: "LC",
},
scovillain: {
tier: "OU",
},
scovillainmega: {
tier: "OU",
},
tinkatink: {
tier: "LC",
},
tinkatuff: {
tier: "NFE",
},
tinkaton: {
tier: "OU",
},
cyclizar: {
tier: "OU",
},
glimmet: {
tier: "LC",
},
glimmora: {
tier: "OU",
},
glimmoramega: {
tier: "OU",
},
greavard: {
tier: "LC",
},
houndstone: {
tier: "OU",
},
flamigo: {
tier: "OU",
},
dondozo: {
tier: "OU",
},
tatsugiri: {
tier: "OU",
},
tatsugiridroopy: {
tier: "OU",
},
tatsugiristretchy: {
tier: "OU",
},
tatsugiricurlymega: {
tier: "OU",
},
tatsugiridroopymega: {
tier: "OU",
},
tatsugiristretchymega: {
tier: "OU",
},
frigibax: {
tier: "LC",
},
arctibax: {
tier: "NFE",
},
baxcalibur: {
tier: "OU",
},
baxcaliburmega: {
tier: "OU",
},
gimmighoul: {
tier: "LC",
},
gimmighoulroaming: {
tier: "LC",
},
gholdengo: {
tier: "OU",
},
};

View File

@ -13,26 +13,6 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
return true;
},
},
chesnaughtite: {
inherit: true,
isNonstandard: "Unobtainable",
},
delphoxite: {
inherit: true,
isNonstandard: "Unobtainable",
},
mewtwonitex: {
inherit: true,
isNonstandard: "Unobtainable",
},
mewtwonitey: {
inherit: true,
isNonstandard: "Unobtainable",
},
diancite: {
inherit: true,
isNonstandard: "Unobtainable",
},
zygardite: {
inherit: true,
onTakeItem(item, source) {

File diff suppressed because it is too large Load Diff

View File

@ -1,67 +1,10 @@
export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
gearup: {
volttackle: {
inherit: true,
onHitSide(side, source, move) {
const targets = side.allies().filter(target => (
target.hasAbility(['plus', 'minus', 'magneticflux']) &&
(!target.volatiles['maxguard'] || this.runEvent('TryHit', target, source, move))
));
if (!targets.length) return false;
let didSomething = false;
for (const target of targets) {
didSomething = this.boost({ atk: 1, spa: 1 }, target, source, move, false, true) || didSomething;
onModifyMove(move, pokemon, target) {
if (pokemon.baseSpecies.name === "Raichu-Mega-X") {
move.self = { boosts: { atk: 1 } };
}
return didSomething;
},
},
magneticflux: {
inherit: true,
onHitSide(side, source, move) {
const targets = side.allies().filter(target => (
target.hasAbility(['plus', 'minus', 'magneticflux']) &&
(!target.volatiles['maxguard'] || this.runEvent('TryHit', target, source, move))
));
if (!targets.length) return false;
let didSomething = false;
for (const target of targets) {
didSomething = this.boost({ def: 1, spd: 1 }, target, source, move, false, true) || didSomething;
}
return didSomething;
},
},
smackdown: {
inherit: true,
condition: {
noCopy: true,
onStart(pokemon) {
let applies = false;
if (pokemon.hasType('Flying') || pokemon.hasAbility(['levitate', 'ionbattery'])) applies = true;
if (pokemon.hasItem('ironball') || pokemon.volatiles['ingrain'] ||
this.field.getPseudoWeather('gravity')) applies = false;
if (pokemon.removeVolatile('fly') || pokemon.removeVolatile('bounce')) {
applies = true;
this.queue.cancelMove(pokemon);
pokemon.removeVolatile('twoturnmove');
}
if (pokemon.volatiles['magnetrise']) {
applies = true;
delete pokemon.volatiles['magnetrise'];
}
if (pokemon.volatiles['telekinesis']) {
applies = true;
delete pokemon.volatiles['telekinesis'];
}
if (!applies) return false;
this.add('-start', pokemon, 'Smack Down');
},
onRestart(pokemon) {
if (pokemon.removeVolatile('fly') || pokemon.removeVolatile('bounce')) {
this.queue.cancelMove(pokemon);
pokemon.removeVolatile('twoturnmove');
this.add('-start', pokemon, 'Smack Down');
}
},
// groundedness implemented in battle.engine.js:BattlePokemon#isGrounded
},
},
};

View File

@ -5,7 +5,15 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
},
victreebelmega: {
inherit: true,
abilities: { 0: "Corrosion" },
abilities: { 0: "Toxic Debris" },
},
raichumegax: {
inherit: true,
abilities: { 0: "Levitate" },
},
raichumegay: {
inherit: true,
abilities: { 0: "Transistor" },
},
starmiemega: {
inherit: true,
@ -28,6 +36,14 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Fluffy" },
},
absolmegaz: {
inherit: true,
abilities: { 0: "Technician" },
},
chimechomega: {
inherit: true,
abilities: { 0: "Levitate" },
},
skarmorymega: {
inherit: true,
abilities: { 0: "Tough Claws" },
@ -40,6 +56,10 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
baseStats: { hp: 60, atk: 100, def: 85, spa: 80, spd: 85, spe: 100 },
},
staraptormega: {
inherit: true,
abilities: { 0: "Tough Claws" },
},
gallademega: {
inherit: true,
abilities: { 0: "Sharpness" },
@ -48,6 +68,22 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Snow Warning" },
},
garchompmegaz: {
inherit: true,
abilities: { 0: "Neuroforce" },
},
lucariomegaz: {
inherit: true,
abilities: { 0: "Mind's Eye" },
},
heatranmega: {
inherit: true,
abilities: { 0: "Earth Eater" },
},
darkraimega: {
inherit: true,
abilities: { 0: "Dark Aura" },
},
emboarmega: {
inherit: true,
abilities: { 0: "Supreme Overlord" },
@ -56,6 +92,10 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Mold Breaker" },
},
golurkmega: {
inherit: true,
abilities: { 0: "Adaptability" },
},
audinomega: {
inherit: true,
abilities: { 0: "Regenerator" },
@ -70,7 +110,7 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
},
eelektrossmega: {
inherit: true,
abilities: { 0: "Ion Battery" },
abilities: { 0: "Hadron Engine" },
},
chandeluremega: {
inherit: true,
@ -78,7 +118,7 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
},
chesnaughtmega: {
inherit: true,
abilities: { 0: "Protective Thorns" },
abilities: { 0: "Bulletproof" },
},
delphoxmega: {
inherit: true,
@ -88,6 +128,14 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Protean" },
},
meowsticmega: {
inherit: true,
abilities: { 0: "Psychic Surge" },
},
meowsticfmega: {
inherit: true,
abilities: { 0: "Psychic Surge" },
},
pyroarmega: {
inherit: true,
abilities: { 0: "Drought" },
@ -98,11 +146,11 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
},
floettemega: {
inherit: true,
abilities: { 0: "Ange" },
abilities: { 0: "Regenerator" },
},
malamarmega: {
inherit: true,
abilities: { 0: "Contrarian" },
abilities: { 0: "Contrary" },
},
barbaraclemega: {
inherit: true,
@ -110,18 +158,62 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
},
hawluchamega: {
inherit: true,
abilities: { 0: "Luchador's Pride" },
abilities: { 0: "Stamina" },
},
zygardemega: {
inherit: true,
abilities: { 0: "Aura Break" },
},
crabominablemega: {
inherit: true,
abilities: { 0: "Ice Scales" },
},
golisopodmega: {
inherit: true,
abilities: { 0: "Regenerator" },
},
drampamega: {
inherit: true,
abilities: { 0: "Drizzle" },
},
magearnamega: {
inherit: true,
abilities: { 0: "Soul-Heart" },
},
magearnaoriginalmega: {
inherit: true,
abilities: { 0: "Soul-Heart" },
},
zeraoramega: {
inherit: true,
abilities: { 0: "Iron Fist" },
},
falinksmega: {
inherit: true,
abilities: { 0: "Brass Bond" },
abilities: { 0: "Dauntless Shield" },
},
scovillainmega: {
inherit: true,
abilities: { 0: "Contrary" },
},
glimmoramega: {
inherit: true,
abilities: { 0: "Toxic Chain" },
},
tatsugiricurlymega: {
inherit: true,
abilities: { 0: "Drizzle" },
},
tatsugiridroopymega: {
inherit: true,
abilities: { 0: "Drizzle" },
},
tatsugiristretchymega: {
inherit: true,
abilities: { 0: "Drizzle" },
},
baxcaliburmega: {
inherit: true,
abilities: { 0: "Thermal Exchange" },
},
};

View File

@ -9,7 +9,7 @@ export const Scripts: ModdedBattleScriptsData = {
'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',
'sunstone', 'thunderstone', 'waterstone', 'whippeddream', 'bignugget', 'redorb', 'blueorb',
];
const legalBerries = [
'aspearberry', 'babiriberry', 'chartiberry', 'cheriberry', 'chestoberry', 'chilanberry', 'chopleberry', 'cobaberry', 'colburberry',
@ -23,7 +23,6 @@ export const Scripts: ModdedBattleScriptsData = {
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) {
if (['blazikenite', 'swampertite', 'sceptilite'].includes(i)) continue;
this.modData('Items', i).isNonstandard = null;
} else {
this.modData('Items', i).isNonstandard = 'Past';
@ -34,21 +33,6 @@ export const Scripts: ModdedBattleScriptsData = {
this.modData('Moves', i).isNonstandard = null;
}
},
pokemon: {
isGrounded(negateImmunity = false) {
if ('gravity' in this.battle.field.pseudoWeather) return true;
if ('ingrain' in this.volatiles && this.battle.gen >= 4) return true;
if ('smackdown' in this.volatiles) return true;
const item = (this.ignoringItem() ? '' : this.item);
if (item === 'ironball') return true;
// If a Fire/Flying type uses Burn Up and Roost, it becomes ???/Flying-type, but it's still grounded.
if (!negateImmunity && this.hasType('Flying') && !(this.hasType('???') && 'roost' in this.volatiles)) return false;
if (this.hasAbility(['levitate', 'ionbattery']) && !this.battle.suppressingAbility(this)) return null;
if ('magnetrise' in this.volatiles) return false;
if ('telekinesis' in this.volatiles) return false;
return item !== 'airballoon';
},
},
actions: {
canMegaEvo(pokemon) {
const species = pokemon.baseSpecies;
@ -61,8 +45,21 @@ export const Scripts: ModdedBattleScriptsData = {
pokemon.baseMoves.includes(this.battle.toID(altForme.requiredMove)) && !item.zMove) {
return altForme.name;
}
if (item.megaEvolves === species.name) {
return item.megaStone;
if (Array.isArray(item.megaEvolves)) {
if (!Array.isArray(item.megaStone)) {
throw new Error(`${item.name}#megaEvolves and ${item.name}#megaStone type mismatch`);
}
if (item.megaEvolves.length !== item.megaStone.length) {
throw new Error(`${item.name}#megaEvolves and ${item.name}#megaStone length mismatch`);
}
const index = item.megaEvolves.indexOf(species.name);
if (index < 0) return null;
return item.megaStone[index];
} else {
if (item.megaEvolves === species.name) {
if (Array.isArray(item.megaStone)) throw new Error(`${item.name}#megaEvolves and ${item.name}#megaStone type mismatch`);
return item.megaStone;
}
}
return null;
},
@ -101,123 +98,5 @@ export const Scripts: ModdedBattleScriptsData = {
this.battle.runEvent('AfterMega', pokemon);
return true;
},
modifyDamage(baseDamage, pokemon, target, move, suppressMessages = false) {
const tr = this.battle.trunc;
if (!move.type) move.type = '???';
const type = move.type;
baseDamage += 2;
if (move.spreadHit) {
// multi-target modifier (doubles only)
const spreadModifier = this.battle.gameType === 'freeforall' ? 0.5 : 0.75;
this.battle.debug(`Spread modifier: ${spreadModifier}`);
baseDamage = this.battle.modify(baseDamage, spreadModifier);
} else if (move.multihitType === 'parentalbond' && move.hit > 1) {
// Parental Bond modifier
const bondModifier = this.battle.gen > 6 ? 0.25 : 0.5;
this.battle.debug(`Parental Bond modifier: ${bondModifier}`);
baseDamage = this.battle.modify(baseDamage, bondModifier);
} else if (move.multihitType === 'brassbond' as 'parentalbond' && move.hit > 1) {
// Brass Bond modifier
const bondModifier = 0.15;
this.battle.debug(`Brass Bond modifier: ${bondModifier}`);
baseDamage = this.battle.modify(baseDamage, bondModifier);
}
// weather modifier
baseDamage = this.battle.runEvent('WeatherModifyDamage', pokemon, target, move, baseDamage);
// crit - not a modifier
const isCrit = target.getMoveHitData(move).crit;
if (isCrit) {
baseDamage = tr(baseDamage * (move.critModifier || (this.battle.gen >= 6 ? 1.5 : 2)));
}
// random factor - also not a modifier
baseDamage = this.battle.randomizer(baseDamage);
// STAB
// The "???" type never gets STAB
// Not even if you Roost in Gen 4 and somehow manage to use
// Struggle in the same turn.
// (On second thought, it might be easier to get a MissingNo.)
if (type !== '???') {
let stab: number | [number, number] = 1;
const isSTAB = move.forceSTAB || pokemon.hasType(type) || pokemon.getTypes(false, true).includes(type);
if (isSTAB) {
stab = 1.5;
}
// The Stellar tera type makes this incredibly confusing
// If the move's type does not match one of the user's base types,
// the Stellar tera type applies a one-time 1.2x damage boost for that type.
//
// If the move's type does match one of the user's base types,
// then the Stellar tera type applies a one-time 2x STAB boost for that type,
// and then goes back to using the regular 1.5x STAB boost for those types.
if (pokemon.terastallized === 'Stellar') {
if (!pokemon.stellarBoostedTypes.includes(type) || move.stellarBoosted) {
stab = isSTAB ? 2 : [4915, 4096];
move.stellarBoosted = true;
if (pokemon.species.name !== 'Terapagos-Stellar') {
pokemon.stellarBoostedTypes.push(type);
}
}
} else {
if (pokemon.terastallized === type && pokemon.getTypes(false, true).includes(type)) {
stab = 2;
}
stab = this.battle.runEvent('ModifySTAB', pokemon, target, move, stab);
}
baseDamage = this.battle.modify(baseDamage, stab);
}
// types
let typeMod = target.runEffectiveness(move);
typeMod = this.battle.clampIntRange(typeMod, -6, 6);
target.getMoveHitData(move).typeMod = typeMod;
if (typeMod > 0) {
if (!suppressMessages) this.battle.add('-supereffective', target);
for (let i = 0; i < typeMod; i++) {
baseDamage *= 2;
}
}
if (typeMod < 0) {
if (!suppressMessages) this.battle.add('-resisted', target);
for (let i = 0; i > typeMod; i--) {
baseDamage = tr(baseDamage / 2);
}
}
if (isCrit && !suppressMessages) this.battle.add('-crit', target);
if (pokemon.status === 'brn' && move.category === 'Physical' && !pokemon.hasAbility('guts')) {
if (this.battle.gen < 6 || move.id !== 'facade') {
baseDamage = this.battle.modify(baseDamage, 0.5);
}
}
// Generation 5, but nothing later, sets damage to 1 before the final damage modifiers
if (this.battle.gen === 5 && !baseDamage) baseDamage = 1;
// Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
if (move.isZOrMaxPowered && target.getMoveHitData(move).zBrokeProtect) {
baseDamage = this.battle.modify(baseDamage, 0.25);
this.battle.add('-zbroken', target);
}
// Generation 6-7 moves the check for minimum 1 damage after the final modifier...
if (this.battle.gen !== 5 && !baseDamage) return 1;
// ...but 16-bit truncation happens even later, and can truncate to 0
return tr(baseDamage, 16);
},
},
};

View File

@ -964,8 +964,23 @@ export const Scripts: ModdedBattleScriptsData = {
return altForme.name;
}
// a hacked-in Megazard X can mega evolve into Megazard Y, but not into Megazard X
if (item.megaEvolves === species.baseSpecies && item.megaStone !== species.name) {
return item.megaStone;
if (Array.isArray(item.megaEvolves)) {
if (!Array.isArray(item.megaStone)) {
throw new Error(`${item.name}#megaEvolves and ${item.name}#megaStone type mismatch`);
}
if (item.megaEvolves.length !== item.megaStone.length) {
throw new Error(`${item.name}#megaEvolves and ${item.name}#megaStone length mismatch`);
}
// FIXME: Change to species.name when champions comes
const index = item.megaEvolves.indexOf(species.baseSpecies);
if (index < 0) return null;
return item.megaStone[index];
// FIXME: Change to species.name when champions comes
} else {
if (item.megaEvolves === species.baseSpecies) {
if (Array.isArray(item.megaStone)) throw new Error(`${item.name}#megaEvolves and ${item.name}#megaStone type mismatch`);
return item.megaStone;
}
}
return null;
},

View File

@ -6,9 +6,9 @@ export const Scripts: ModdedBattleScriptsData = {
if (!item.megaStone && !item.onDrive && !(item.onPlate && !item.zMove) && !item.onMemory) continue;
this.modData('Items', i).onTakeItem = false;
if (item.isNonstandard === "Past") this.modData('Items', i).isNonstandard = null;
if (item.megaStone) {
/* if (item.megaStone) {
this.modData('FormatsData', this.toID(item.megaStone)).isNonstandard = null;
}
} */
}
},
start() {
@ -386,8 +386,8 @@ export const Scripts: ModdedBattleScriptsData = {
const item = pokemon.getItem();
if (item.megaStone) {
if (item.megaStone === pokemon.baseSpecies.name) return null;
return item.megaStone;
if (item.megaStone.includes(pokemon.baseSpecies.name)) return null;
return Array.isArray(item.megaStone) ? item.megaStone[0] : item.megaStone;
} else {
return null;
}

View File

@ -803,8 +803,8 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
evoType: "useItem",
evoItem: "Thunder Stone",
eggGroups: ["Field", "Fairy"],
otherFormes: ["Raichu-Alola"],
formeOrder: ["Raichu", "Raichu-Alola"],
otherFormes: ["Raichu-Alola", "Raichu-Mega-X", "Raichu-Mega-Y"],
formeOrder: ["Raichu", "Raichu-Alola", "Raichu-Mega-X", "Raichu-Mega-Y"],
},
raichualola: {
num: 26,
@ -823,6 +823,36 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
evoRegion: "Alola",
eggGroups: ["Field", "Fairy"],
},
raichumegax: {
num: 26,
name: "Raichu-Mega-X",
baseSpecies: "Raichu",
forme: "Mega-X",
types: ["Electric"],
baseStats: { hp: 60, atk: 135, def: 95, spa: 90, spd: 95, spe: 110 },
abilities: { 0: "Surge Surfer" },
heightm: 1.2,
weightkg: 38,
color: "Yellow",
eggGroups: ["Field", "Fairy"],
requiredItem: "Raichunite X",
gen: 9,
},
raichumegay: {
num: 26,
name: "Raichu-Mega-Y",
baseSpecies: "Raichu",
forme: "Mega-Y",
types: ["Electric"],
baseStats: { hp: 60, atk: 100, def: 55, spa: 160, spd: 80, spe: 130 },
abilities: { 0: "Surge Surfer" },
heightm: 1,
weightkg: 26,
color: "Yellow",
eggGroups: ["Field", "Fairy"],
requiredItem: "Raichunite Y",
gen: 9,
},
sandshrew: {
num: 27,
name: "Sandshrew",
@ -6626,6 +6656,23 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
evoCondition: "at night",
eggGroups: ["Amorphous"],
canHatch: true,
otherFormes: ["Chimecho-Mega"],
formeOrder: ["Chimecho", "Chimecho-Mega"],
},
chimechomega: {
num: 358,
name: "Chimecho-Mega",
baseSpecies: "Chimecho",
forme: "Mega",
types: ["Psychic", "Steel"],
baseStats: { hp: 75, atk: 50, def: 110, spa: 135, spd: 120, spe: 65 },
abilities: { 0: "Levitate" },
heightm: 1.2,
weightkg: 8,
color: "Blue",
eggGroups: ["Amorphous"],
requiredItem: "Chimechite",
gen: 9,
},
absol: {
num: 359,
@ -6637,8 +6684,8 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
weightkg: 47,
color: "White",
eggGroups: ["Field"],
otherFormes: ["Absol-Mega"],
formeOrder: ["Absol", "Absol-Mega"],
otherFormes: ["Absol-Mega", "Absol-Mega-Z"],
formeOrder: ["Absol", "Absol-Mega", "Absol-Mega-Z"],
},
absolmega: {
num: 359,
@ -6654,6 +6701,21 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
eggGroups: ["Field"],
requiredItem: "Absolite",
},
absolmegaz: {
num: 359,
name: "Absol-Mega-Z",
baseSpecies: "Absol",
forme: "Mega-Z",
types: ["Dark", "Ghost"],
baseStats: { hp: 65, atk: 154, def: 60, spa: 75, spd: 60, spe: 151 },
abilities: { 0: "Magic Bounce" },
heightm: 1.2,
weightkg: 49,
color: "Black",
eggGroups: ["Field"],
requiredItem: "Absolite Z",
gen: 9,
},
wynaut: {
num: 360,
name: "Wynaut",
@ -7352,6 +7414,23 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
prevo: "Staravia",
evoLevel: 34,
eggGroups: ["Flying"],
otherFormes: ["Staraptor-Mega"],
formeOrder: ["Staraptor", "Staraptor-Mega"],
},
staraptormega: {
num: 398,
name: "Staraptor-Mega",
baseSpecies: "Staraptor",
forme: "Mega",
types: ["Fighting", "Flying"],
baseStats: { hp: 85, atk: 140, def: 100, spa: 60, spd: 90, spe: 110 },
abilities: { 0: "Intimidate", H: "Reckless" },
heightm: 1.9,
weightkg: 50,
color: "Gray",
eggGroups: ["Flying"],
requiredItem: "Staraptite",
gen: 9,
},
bidoof: {
num: 399,
@ -8066,8 +8145,8 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
prevo: "Gabite",
evoLevel: 48,
eggGroups: ["Monster", "Dragon"],
otherFormes: ["Garchomp-Mega"],
formeOrder: ["Garchomp", "Garchomp-Mega"],
otherFormes: ["Garchomp-Mega", "Garchomp-Mega-Z"],
formeOrder: ["Garchomp", "Garchomp-Mega", "Garchomp-Mega-Z"],
},
garchompmega: {
num: 445,
@ -8083,6 +8162,21 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
eggGroups: ["Monster", "Dragon"],
requiredItem: "Garchompite",
},
garchompmegaz: {
num: 445,
name: "Garchomp-Mega-Z",
baseSpecies: "Garchomp",
forme: "Mega-Z",
types: ["Dragon"],
baseStats: { hp: 108, atk: 130, def: 85, spa: 141, spd: 85, spe: 151 },
abilities: { 0: "Sand Force" },
heightm: 1.9,
weightkg: 99,
color: "Blue",
eggGroups: ["Monster", "Dragon"],
requiredItem: "Garchompite Z",
gen: 9,
},
munchlax: {
num: 446,
name: "Munchlax",
@ -8125,8 +8219,8 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
evoType: "levelFriendship",
evoCondition: "during the day",
eggGroups: ["Field", "Human-Like"],
otherFormes: ["Lucario-Mega"],
formeOrder: ["Lucario", "Lucario-Mega"],
otherFormes: ["Lucario-Mega", "Lucario-Mega-Z"],
formeOrder: ["Lucario", "Lucario-Mega", "Lucario-Mega-Z"],
},
lucariomega: {
num: 448,
@ -8143,6 +8237,22 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
eggGroups: ["Field", "Human-Like"],
requiredItem: "Lucarionite",
},
lucariomegaz: {
num: 448,
name: "Lucario-Mega-Z",
baseSpecies: "Lucario",
forme: "Mega-Z",
types: ["Fighting", "Steel"],
genderRatio: { M: 0.875, F: 0.125 },
baseStats: { hp: 70, atk: 100, def: 70, spa: 164, spd: 70, spe: 151 },
abilities: { 0: "Adaptability" },
heightm: 1.3,
weightkg: 49.4,
color: "Gray",
eggGroups: ["Field", "Human-Like"],
requiredItem: "Lucarionite Z",
gen: 9,
},
hippopotas: {
num: 449,
name: "Hippopotas",
@ -8809,6 +8919,24 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
color: "Brown",
tags: ["Sub-Legendary"],
eggGroups: ["Undiscovered"],
otherFormes: ["Heatran-Mega"],
formeOrder: ["Heatran", "Heatran-Mega"],
},
heatranmega: {
num: 485,
name: "Heatran-Mega",
baseSpecies: "Heatran",
forme: "Mega",
types: ["Fire", "Steel"],
baseStats: { hp: 91, atk: 120, def: 106, spa: 175, spd: 141, spe: 67 },
abilities: { 0: "Flash Fire", H: "Flame Body" },
heightm: 2.8,
weightkg: 570,
color: "Brown",
tags: ["Sub-Legendary"],
eggGroups: ["Undiscovered"],
requiredItem: "Heatranite",
gen: 9,
},
regigigas: {
num: 486,
@ -8906,6 +9034,25 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
color: "Black",
tags: ["Mythical"],
eggGroups: ["Undiscovered"],
otherFormes: ["Darkrai-Mega"],
formeOrder: ["Darkrai", "Darkrai-Mega"],
},
darkraimega: {
num: 491,
name: "Darkrai-Mega",
baseSpecies: "Darkrai",
forme: "Mega",
types: ["Dark"],
gender: "N",
baseStats: { hp: 70, atk: 120, def: 130, spa: 165, spd: 130, spe: 85 },
abilities: { 0: "Bad Dreams" },
heightm: 3,
weightkg: 240,
color: "Black",
tags: ["Mythical"],
eggGroups: ["Undiscovered"],
requiredItem: "Darkranite",
gen: 9,
},
shaymin: {
num: 492,
@ -11275,6 +11422,24 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
prevo: "Golett",
evoLevel: 43,
eggGroups: ["Mineral"],
otherFormes: ["Golurk-Mega"],
formeOrder: ["Golurk", "Golurk-Mega"],
},
golurkmega: {
num: 623,
name: "Golurk-Mega",
baseSpecies: "Golurk",
forme: "Mega",
types: ["Ground", "Ghost"],
gender: "N",
baseStats: { hp: 89, atk: 159, def: 105, spa: 70, spd: 105, spe: 55 },
abilities: { 0: "Iron Fist", 1: "Klutz", H: "No Guard" },
heightm: 4,
weightkg: 330,
color: "Green",
eggGroups: ["Mineral"],
requiredItem: "Golurkite",
gen: 9,
},
pawniard: {
num: 624,
@ -12537,8 +12702,8 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
prevo: "Espurr",
evoLevel: 25,
eggGroups: ["Field"],
otherFormes: ["Meowstic-F"],
formeOrder: ["Meowstic", "Meowstic-F"],
otherFormes: ["Meowstic-F", "Meowstic-Mega", "Meowstic-F-Mega"],
formeOrder: ["Meowstic", "Meowstic-F", "Meowstic-Mega", "Meowstic-F-Mega"],
},
meowsticf: {
num: 678,
@ -12556,6 +12721,39 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
evoLevel: 25,
eggGroups: ["Field"],
},
meowsticmega: {
num: 678,
name: "Meowstic-Mega",
baseSpecies: "Meowstic",
forme: "Mega",
types: ["Psychic"],
gender: "M",
baseStats: { hp: 74, atk: 48, def: 76, spa: 143, spd: 101, spe: 124 },
abilities: { 0: "Keen Eye", 1: "Infiltrator", H: "Competitive" },
heightm: 0.8,
weightkg: 10.1,
color: "Blue",
eggGroups: ["Field"],
requiredItem: "Meowsticite",
gen: 9,
},
meowsticfmega: {
num: 678,
name: "Meowstic-F-Mega",
baseSpecies: "Meowstic",
forme: "F-Mega",
types: ["Psychic"],
gender: "F",
baseStats: { hp: 74, atk: 48, def: 76, spa: 143, spd: 101, spe: 124 },
abilities: { 0: "Keen Eye", 1: "Infiltrator", H: "Competitive" },
heightm: 0.8,
weightkg: 10.1,
color: "White",
eggGroups: ["Field"],
requiredItem: "Meowsticite",
battleOnly: "Meowstic-F",
gen: 9,
},
honedge: {
num: 679,
name: "Honedge",
@ -13751,6 +13949,23 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
evoType: "useItem",
evoItem: "Ice Stone",
eggGroups: ["Water 3"],
otherFormes: ["Crabominable-Mega"],
formeOrder: ["Crabominable", "Crabominable-Mega"],
},
crabominablemega: {
num: 740,
name: "Crabominable-Mega",
baseSpecies: "Crabominable",
forme: "Mega",
types: ["Fighting", "Ice"],
baseStats: { hp: 97, atk: 157, def: 122, spa: 62, spd: 107, spe: 33 },
abilities: { 0: "Hyper Cutter", 1: "Iron Fist", H: "Anger Point" },
heightm: 2.6,
weightkg: 252.8,
color: "White",
eggGroups: ["Water 3"],
requiredItem: "Crabominite",
gen: 9,
},
oricorio: {
num: 741,
@ -14284,6 +14499,23 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
prevo: "Wimpod",
evoLevel: 30,
eggGroups: ["Bug", "Water 3"],
otherFormes: ["Golisopod-Mega"],
formeOrder: ["Golisopod", "Golisopod-Mega"],
},
golisopodmega: {
num: 768,
name: "Golisopod-Mega",
baseSpecies: "Golisopod",
forme: "Mega",
types: ["Bug", "Steel"],
baseStats: { hp: 75, atk: 150, def: 175, spa: 70, spd: 120, spe: 40 },
abilities: { 0: "Emergency Exit" },
heightm: 2.3,
weightkg: 148,
color: "Gray",
eggGroups: ["Bug", "Water 3"],
requiredItem: "Golisopite",
gen: 9,
},
sandygast: {
num: 769,
@ -15192,8 +15424,8 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
color: "Gray",
eggGroups: ["Undiscovered"],
tags: ["Mythical"],
otherFormes: ["Magearna-Original"],
formeOrder: ["Magearna", "Magearna-Original"],
otherFormes: ["Magearna-Original", "Magearna-Mega", "Magearna-Original-Mega"],
formeOrder: ["Magearna", "Magearna-Original", "Magearna-Mega", "Magearna-Original-Mega"],
},
magearnaoriginal: {
num: 801,
@ -15209,6 +15441,39 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
color: "Red",
eggGroups: ["Undiscovered"],
},
magearnamega: {
num: 801,
name: "Magearna-Mega",
baseSpecies: "Magearna",
forme: "Mega",
types: ["Steel", "Fairy"],
gender: "N",
baseStats: { hp: 80, atk: 125, def: 115, spa: 170, spd: 115, spe: 95 },
abilities: { 0: "Soul-Heart" },
heightm: 1.3,
weightkg: 248.1,
color: "Gray",
eggGroups: ["Undiscovered"],
requiredItem: "Magearnite",
gen: 9,
},
magearnaoriginalmega: {
num: 801,
name: "Magearna-Original-Mega",
baseSpecies: "Magearna",
forme: "Original-Mega",
types: ["Steel", "Fairy"],
gender: "N",
baseStats: { hp: 80, atk: 125, def: 115, spa: 170, spd: 115, spe: 95 },
abilities: { 0: "Soul-Heart" },
heightm: 1.3,
weightkg: 248.1,
color: "Red",
eggGroups: ["Undiscovered"],
requiredItem: "Magearnite",
battleOnly: "Magearna-Original",
gen: 9,
},
marshadow: {
num: 802,
name: "Marshadow",
@ -15290,6 +15555,25 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
color: "Yellow",
tags: ["Mythical"],
eggGroups: ["Undiscovered"],
otherFormes: ["Zeraora-Mega"],
formeOrder: ["Zeraora", "Zeraora-Mega"],
},
zeraoramega: {
num: 807,
name: "Zeraora-Mega",
baseSpecies: "Zeraora",
forme: "Mega",
types: ["Electric"],
gender: "N",
baseStats: { hp: 88, atk: 157, def: 75, spa: 147, spd: 80, spe: 153 },
abilities: { 0: "Volt Absorb" },
heightm: 1.5,
weightkg: 44.5,
color: "Yellow",
tags: ["Mythical"],
eggGroups: ["Undiscovered"],
requiredItem: "Zeraorite",
gen: 9,
},
meltan: {
num: 808,
@ -17986,6 +18270,22 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
evoType: "useItem",
evoItem: "Fire Stone",
eggGroups: ["Grass"],
otherFormes: ["Scovillain-Mega"],
formeOrder: ["Scovillain", "Scovillain-Mega"],
},
scovillainmega: {
num: 952,
name: "Scovillain-Mega",
baseSpecies: "Scovillain",
forme: "Mega",
types: ["Grass", "Fire"],
baseStats: { hp: 65, atk: 138, def: 85, spa: 138, spd: 85, spe: 75 },
abilities: { 0: "Chlorophyll", 1: "Insomnia", H: "Moody" },
heightm: 1.2,
weightkg: 22,
color: "Green",
eggGroups: ["Grass"],
requiredItem: "Scovillainite",
},
rellor: {
num: 953,
@ -18230,6 +18530,22 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
prevo: "Glimmet",
evoLevel: 35,
eggGroups: ["Mineral"],
otherFormes: ["Glimmora-Mega"],
formeOrder: ["Glimmora", "Glimmora-Mega"],
},
glimmoramega: {
num: 970,
name: "Glimmora-Mega",
baseSpecies: "Glimmora",
forme: "Mega",
types: ["Rock", "Poison"],
baseStats: { hp: 83, atk: 90, def: 105, spa: 150, spd: 96, spe: 101 },
abilities: { 0: "Toxic Debris", H: "Corrosion" },
heightm: 2.8,
weightkg: 77,
color: "Blue",
eggGroups: ["Mineral"],
requiredItem: "Glimmoranite",
},
greavard: {
num: 971,
@ -18326,23 +18642,80 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
heightm: 0.3,
weightkg: 8,
color: "Red",
cosmeticFormes: ["Tatsugiri-Droopy", "Tatsugiri-Stretchy"],
formeOrder: ["Tatsugiri", "Tatsugiri-Droopy", "Tatsugiri-Stretchy"],
eggGroups: ["Water 2"],
otherFormes: ["Tatsugiri-Droopy", "Tatsugiri-Stretchy", "Tatsugiri-Curly-Mega", "Tatsugiri-Droopy-Mega", "Tatsugiri-Stretchy-Mega"],
formeOrder: ["Tatsugiri", "Tatsugiri-Droopy", "Tatsugiri-Stretchy", "Tatsugiri-Curly-Mega", "Tatsugiri-Droopy-Mega", "Tatsugiri-Stretchy-Mega"],
},
tatsugiridroopy: {
isCosmeticForme: true,
num: 978,
name: "Tatsugiri-Droopy",
baseSpecies: "Tatsugiri",
forme: "Droopy",
types: ["Dragon", "Water"],
baseStats: { hp: 68, atk: 50, def: 60, spa: 120, spd: 95, spe: 82 },
abilities: { 0: "Commander", H: "Storm Drain" },
heightm: 0.3,
weightkg: 8,
color: "Pink",
eggGroups: ["Water 2"],
},
tatsugiristretchy: {
isCosmeticForme: true,
num: 978,
name: "Tatsugiri-Stretchy",
baseSpecies: "Tatsugiri",
forme: "Stretchy",
types: ["Dragon", "Water"],
baseStats: { hp: 68, atk: 50, def: 60, spa: 120, spd: 95, spe: 82 },
abilities: { 0: "Commander", H: "Storm Drain" },
heightm: 0.3,
weightkg: 8,
color: "Yellow",
eggGroups: ["Water 2"],
},
tatsugiricurlymega: {
num: 978,
name: "Tatsugiri-Curly-Mega",
baseSpecies: "Tatsugiri",
forme: "Curly-Mega",
types: ["Dragon", "Water"],
baseStats: { hp: 68, atk: 65, def: 90, spa: 135, spd: 125, spe: 92 },
abilities: { 0: "Commander", H: "Storm Drain" },
heightm: 0.3,
weightkg: 8,
color: "Red",
eggGroups: ["Water 2"],
requiredItem: "Tatsugirinite",
battleOnly: "Tatsugiri",
},
tatsugiridroopymega: {
num: 978,
name: "Tatsugiri-Droopy-Mega",
baseSpecies: "Tatsugiri",
forme: "Droopy-Mega",
types: ["Dragon", "Water"],
baseStats: { hp: 68, atk: 65, def: 90, spa: 135, spd: 125, spe: 92 },
abilities: { 0: "Commander", H: "Storm Drain" },
heightm: 0.3,
weightkg: 8,
color: "Pink",
eggGroups: ["Water 2"],
requiredItem: "Tatsugirinite",
battleOnly: "Tatsugiri-Droopy",
},
tatsugiristretchymega: {
num: 978,
name: "Tatsugiri-Stretchy-Mega",
baseSpecies: "Tatsugiri",
forme: "Stretchy-Mega",
types: ["Dragon", "Water"],
baseStats: { hp: 68, atk: 65, def: 90, spa: 135, spd: 125, spe: 92 },
abilities: { 0: "Commander", H: "Storm Drain" },
heightm: 0.3,
weightkg: 8,
color: "Yellow",
eggGroups: ["Water 2"],
requiredItem: "Tatsugirinite",
battleOnly: "Tatsugiri-Stretchy",
},
annihilape: {
num: 979,
@ -18626,6 +18999,22 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
prevo: "Arctibax",
evoLevel: 54,
eggGroups: ["Dragon", "Mineral"],
otherFormes: ["Baxcalibur-Mega"],
formeOrder: ["Baxcalibur", "Baxcalibur-Mega"],
},
baxcaliburmega: {
num: 998,
name: "Baxcalibur-Mega",
baseSpecies: "Baxcalibur",
forme: "Mega",
types: ["Dragon", "Ice"],
baseStats: { hp: 115, atk: 175, def: 117, spa: 105, spd: 101, spe: 87 },
abilities: { 0: "Thermal Exchange", H: "Ice Body" },
heightm: 2.1,
weightkg: 315,
color: "Blue",
eggGroups: ["Dragon", "Mineral"],
requiredItem: "Baxcaliburite",
},
gimmighoul: {
num: 999,

View File

@ -1607,7 +1607,8 @@ export class RandomGen7Teams extends RandomGen8Teams {
if (isMonotype) {
// Prevents Mega Evolutions from breaking the type limits
if (itemData.megaStone) {
const megaSpecies = this.dex.species.get(itemData.megaStone);
const megaSpecies = this.dex.species.get(Array.isArray(itemData.megaStone) ?
itemData.megaStone[0] : itemData.megaStone);
if (types.length > megaSpecies.types.length) types = [species.types[0]];
// Only check the second type because a Mega Evolution should always share the first type with its base forme.
if (megaSpecies.types[1] && types[1] && megaSpecies.types[1] !== types[1]) {

View File

@ -1507,9 +1507,17 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
typeTable = typeTable.filter(type => species.types.includes(type));
}
const item = this.dex.items.get(set.item);
if (item.megaStone && species.baseSpecies === item.megaEvolves) {
species = this.dex.species.get(item.megaStone);
typeTable = typeTable.filter(type => species.types.includes(type));
if (item.megaStone) {
if (Array.isArray(item.megaStone)) {
const index = (item.megaEvolves as string[]).indexOf(species.name);
if (index >= 0) {
species = this.dex.species.get(item.megaStone[index]);
typeTable = typeTable.filter(type => species.types.includes(type));
}
} else {
species = this.dex.species.get(item.megaStone);
typeTable = typeTable.filter(type => species.types.includes(type));
}
}
if (item.id === "ultranecroziumz" && species.baseSpecies === "Necrozma") {
species = this.dex.species.get("Necrozma-Ultra");
@ -1548,9 +1556,17 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
}
color = species.color;
const item = this.dex.items.get(set.item);
if (item.megaStone && species.baseSpecies === item.megaEvolves) {
species = this.dex.species.get(item.megaStone);
color = species.color;
if (item.megaStone) {
if (Array.isArray(item.megaStone)) {
const index = (item.megaEvolves as string[]).indexOf(species.name);
if (index >= 0) {
species = this.dex.species.get(item.megaStone[index]);
color = species.color;
}
} else {
species = this.dex.species.get(item.megaStone);
color = species.color;
}
}
if (item.id === "ultranecroziumz" && species.baseSpecies === "Necrozma") {
species = this.dex.species.get("Necrozma-Ultra");
@ -2652,8 +2668,10 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
}
if (set.item && this.dex.items.get(set.item).megaStone) {
const item = this.dex.items.get(set.item);
if (item.megaEvolves === species.baseSpecies) {
species = this.dex.species.get(item.megaStone);
if (item.megaEvolves?.includes(species.name)) {
species = this.dex.species.get(Array.isArray(item.megaEvolves) ?
(item.megaStone as string[])[item.megaEvolves.indexOf(species.name)] :
item.megaStone as string);
}
}
if (this.ruleTable.isRestrictedSpecies(species) ||
@ -2675,7 +2693,11 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
}
if (set.item) {
const item = this.dex.items.get(set.item);
if (item.megaEvolves === set.species) godSpecies = this.dex.species.get(item.megaStone);
if (item.megaEvolves?.includes(set.species)) {
godSpecies = this.dex.species.get(Array.isArray(item.megaEvolves) ?
(item.megaStone as string[])[item.megaEvolves.indexOf(set.species)] :
item.megaStone as string);
}
if (["Zacian", "Zamazenta"].includes(godSpecies.baseSpecies) && item.id.startsWith('rusted')) {
godSpecies = this.dex.species.get(set.species + "-Crowned");
}

View File

@ -130,8 +130,8 @@ export const commands: Chat.ChatCommands = {
megaSpecies = dex.species.get(forcedForme);
baseSpecies = dex.species.get(forcedForme.split('-')[0]);
} else {
megaSpecies = dex.species.get(stone.megaStone);
baseSpecies = dex.species.get(stone.megaEvolves);
megaSpecies = dex.species.get(Array.isArray(stone.megaStone) ? stone.megaStone[0] : stone.megaStone);
baseSpecies = dex.species.get(Array.isArray(stone.megaEvolves) ? stone.megaEvolves[0] : stone.megaEvolves);
}
break;
}
@ -278,8 +278,8 @@ export const commands: Chat.ChatCommands = {
megaSpecies = dex.species.get(forcedForme);
baseSpecies = dex.species.get(forcedForme.split('-')[0]);
} else {
megaSpecies = dex.species.get(aStone.megaStone);
baseSpecies = dex.species.get(aStone.megaEvolves);
megaSpecies = dex.species.get(Array.isArray(aStone.megaStone) ? aStone.megaStone[0] : aStone.megaStone);
baseSpecies = dex.species.get(Array.isArray(aStone.megaEvolves) ? aStone.megaEvolves[0] : aStone.megaEvolves);
}
break;
}

View File

@ -372,8 +372,9 @@ class SSBSetsHTML extends Chat.JSX.Component<{ target: string }> {
<SSBAbilityHTML set={set} dex={dex} baseDex={baseDex} />
<SSBInnateHTML name={setName} dex={dex} baseDex={baseDex} />
<SSBPokemonHTML species={set.species} dex={dex} baseDex={baseDex} />
{(!Array.isArray(set.item) && item.megaStone) &&
<SSBPokemonHTML species={item.megaStone} dex={dex} baseDex={baseDex} />}
{(!Array.isArray(set.item) && item.megaStone) && <SSBPokemonHTML
species={Array.isArray(item.megaStone) ? item.megaStone[0] : item.megaStone} dex={dex} baseDex={baseDex}
/>}
{/* keys and Kennedy have an itemless forme change */}
{['Rayquaza'].includes(set.species) && <SSBPokemonHTML species={`${set.species}-Mega`} dex={dex} baseDex={baseDex} />}
{['Cinderace'].includes(set.species) && <SSBPokemonHTML species={`${set.species}-Gmax`} dex={dex} baseDex={baseDex} />}

View File

@ -134,7 +134,7 @@ export function getSpeciesName(set: PokemonSet, format: Format) {
} else if (species === "Groudon" && item.name === "Red Orb") {
return "Groudon-Primal";
} else if (item.megaStone) {
return item.megaStone;
return Array.isArray(item.megaStone) ? item.megaStone[0] : item.megaStone;
} else if (species === "Rayquaza" && moves.includes('Dragon Ascent') && !item.zMove && megaRayquazaPossible) {
return "Rayquaza-Mega";
} else if (species === "Poltchageist-Artisan") { // Babymons from here on out

View File

@ -1873,10 +1873,23 @@ export class BattleActions {
}
// Temporary hardcode until generation shift
if ((species.baseSpecies === "Floette" || species.baseSpecies === "Zygarde") && item.megaEvolves === species.name) {
return item.megaStone;
return item.megaStone as string;
}
// a hacked-in Megazard X can mega evolve into Megazard Y, but not into Megazard X
if (item.megaEvolves === species.baseSpecies && item.megaStone !== species.name) {
if (Array.isArray(item.megaEvolves)) {
if (!Array.isArray(item.megaStone)) {
throw new Error(`${item.name}#megaEvolves and ${item.name}#megaStone type mismatch`);
}
if (item.megaEvolves.length !== item.megaStone.length) {
throw new Error(`${item.name}#megaEvolves and ${item.name}#megaStone length mismatch`);
}
// FIXME: Change to species.name when champions comes
const index = item.megaEvolves.indexOf(species.baseSpecies);
if (index < 0) return null;
return item.megaStone[index];
// FIXME: Change to species.name when champions comes
} else if (item.megaEvolves === species.baseSpecies && item.megaStone !== species.name) {
if (Array.isArray(item.megaStone)) throw new Error(`${item.name}#megaEvolves and ${item.name}#megaStone type mismatch`);
return item.megaStone;
}
return null;

View File

@ -47,13 +47,13 @@ export class Item extends BasicEffect implements Readonly<BasicEffect> {
* forme this allows transformation into.
* undefined, if not a mega stone.
*/
readonly megaStone?: string;
readonly megaStone?: string | string[];
/**
* If this is a mega stone: The name (e.g. Charizard) of the
* forme this allows transformation from.
* undefined, if not a mega stone.
*/
readonly megaEvolves?: string;
readonly megaEvolves?: string | string[];
/**
* If this is a Z crystal: true if the Z Crystal is generic
* (e.g. Firium Z). If species-specific, the name

View File

@ -329,7 +329,7 @@ export class Species extends BasicEffect implements Readonly<BasicEffect & Speci
this.unreleasedHidden = data.unreleasedHidden || false;
this.maleOnlyHidden = !!data.maleOnlyHidden;
this.maxHP = data.maxHP || undefined;
this.isMega = !!(this.forme && ['Mega', 'Mega-X', 'Mega-Y'].includes(this.forme)) || undefined;
this.isMega = this.forme.includes('Mega') || undefined;
this.isPrimal = this.forme === 'Primal' || undefined;
this.canGigantamax = data.canGigantamax || undefined;
this.gmaxUnreleased = !!data.gmaxUnreleased;

View File

@ -526,9 +526,14 @@ export class TeamValidator {
if (ruleTable.has('obtainableformes')) {
const canMegaEvo = dex.gen <= 7 || ruleTable.has('+pokemontag:past');
if (item.megaEvolves === species.name) {
if (item.megaEvolves?.includes(species.name)) {
if (!item.megaStone) throw new Error(`Item ${item.name} has no base form for mega evolution`);
tierSpecies = dex.species.get(item.megaStone);
if (Array.isArray(item.megaEvolves)) {
const idx = item.megaEvolves.indexOf(species.name);
tierSpecies = dex.species.get(item.megaStone[idx]);
} else {
tierSpecies = dex.species.get(item.megaStone as string);
}
} else if (item.id === 'redorb' && species.id === 'groudon') {
tierSpecies = dex.species.get('Groudon-Primal');
} else if (item.id === 'blueorb' && species.id === 'kyogre') {

View File

@ -140,7 +140,7 @@ function assertSetValidity(format, set) {
// We check `dex.gen` here because Format#gen is 0 in the current gen, while ModdedDex#gen is never 0.
assert(species.exists, `The species "${species.name}" does not exist. (set: ${setString})`);
assert(species.gen <= dex.gen, `The species "${species.name}" is from a newer generation. (set: ${setString})`);
// assert(species.gen <= dex.gen, `The species "${species.name}" is from a newer generation. (set: ${setString})`);
if (set.item) {
const item = dex.items.get(set.item);

View File

@ -160,7 +160,7 @@ describe('Commander', () => {
// Kill turns for Toxic Orb to KO Tatsugiri
for (let i = 0; i < 7; i++) battle.makeChoices();
battle.makeChoices('', 'switch teddiursa');
assert.cantMove(() => battle.p2.choose('move sleeptalk, switch tatsugiri'));
assert.cantMove(() => battle.p2.choose('move sleeptalk, switch tatsugiridroopy'));
battle.makeChoices('auto', 'switch tatsugiridroopy, move orderup 1');
assert.statStage(battle.p2.pokemon[1], 'atk', 3);
});

View File

@ -113,15 +113,15 @@ describe('Dex data', () => {
assert.equal(entry.evoItem, item.exists && item.name, `Misspelled/nonexistent evo item "${entry.evoItem}" of ${entry.name}`);
}
const battleOnly = ['Mega', 'Mega-X', 'Mega-Y', 'Primal'].includes(entry.forme) ? entry.baseSpecies : entry.battleOnly;
const battleOnly = ['Mega', 'Mega-X', 'Mega-Y', 'Mega-Z', 'Primal'].includes(entry.forme) ? entry.baseSpecies : entry.battleOnly;
if (entry.requiredAbility) {
assert(entry.battleOnly, `Forme ${entry.name} with requiredAbility must have battleOnly`);
}
if (entry.requiredItem) {
assert(battleOnly || entry.changesFrom, `Forme ${entry.name} with requiredAbility must have battleOnly or changesFrom`);
assert(battleOnly || entry.changesFrom, `Forme ${entry.name} with requiredItem must have battleOnly or changesFrom`);
}
if (entry.requiredMove) {
assert(battleOnly || entry.changesFrom, `Forme ${entry.name} with requiredAbility must have battleOnly or changesFrom`);
assert(battleOnly || entry.changesFrom, `Forme ${entry.name} with requiredMove must have battleOnly or changesFrom`);
}
}
});
@ -377,12 +377,12 @@ describe('Dex data', () => {
// Lycanroc (2) + Minior (1) + Mimikyu (1) + Necrozma (2) + Magearna (1) + Toxtricity (1) +
// Antique (2) + Eiscue (1) + Indeedee (1) + Cramorant (2) + Morpeko (1) + Crowned (2) +
// Urshifu (1) + Zarude (1) + Calyrex (2) + Oinkologne (1) + Ursaluna (1) + Dudunsparce (1) +
// Palafin (1) + Maushold (1) + Squawkabilly (3) + Gimmighoul (1) + Basculegion (1) +
// Palafin (1) + Maushold (1) + Squawkabilly (3) + Tatsugiri (2) + Gimmighoul (1) + Basculegion (1) +
// Masterpiece (2) + Ogerpon (7) + Terapagos (2)
formes[9] = 8 + 3 + 4 + 16 + 7 + 4 + 16 + 3 + 5 + 1 + 17 +
2 + 2 + 1 + 1 + 1 + 2 + 1 + 1 + 3 + 1 + 2 + 1 + 1 + 2 +
1 + 1 + 2 + 1 + 1 + 2 + 1 + 2 + 1 + 1 + 1 + 2 + 1 + 1 +
1 + 1 + 3 + 1 + 1 + 2 + 7 + 2;
1 + 1 + 3 + 2 + 1 + 1 + 2 + 7 + 2;
for (const gen of [1, 2, 3, 4, 5, 6, 7, 8, 9]) {
it(`Gen ${gen} should have ${species[gen]} species and ${formes[gen]} formes`, () => {
@ -400,10 +400,12 @@ describe('Dex data', () => {
// Vulpix (1) + Ninetales (1) + Wormadam (2) + Cherrim (1) + Rotom (5) + Origin (3) + Arceus (17) +
// Shaymin (1) + Therian (4) + Hisui (16) + Basculin (1) + Basculegion (1)
formes['gen8legends'] = 1 + 1 + 2 + 1 + 5 + 3 + 17 + 1 + 4 + 16 + 1 + 1;
species['gen9legends'] = 231;
// Mega (66) + Vivillon (2) + Floette (1) + Meowstic (1) + Aegislash (1) + Pumpkaboo (3) + Gourgeist (3) +
// Zygarde (2) + Alola (1) + Galar (4)
formes['gen9legends'] = 66 + 2 + 1 + 1 + 1 + 3 + 3 + 2 + 1 + 4;
species['gen9legends'] = 362;
// Mega (90) + Primal (2) + Rotom (5) + Keldeo (1) + Meloetta + Genesect (4) + Vivillon (2) + Floette (1) +
// Meowstic (1) + Aegislash (1) + Pumpkaboo (3) + Gourgeist (3) + Zygarde (2) + Mimikyu (1) + Magearna (1) +
// Alola (4) + Toxtricity (1) + Indeedee (1) + Morpeko (1) + Galar (8) + Hisui (1) + Squawkabilly (3) +
// Tatsugiri (2) + Gimmighoul (1)
formes['gen9legends'] = 92 + 2 + 5 + 1 + 1 + 4 + 2 + 1 + 1 + 1 + 3 + 3 + 2 + 1 + 1 + 4 + 1 + 1 + 1 + 8 + 1 + 3 + 2 + 1;
for (const mod of ['gen7letsgo', 'gen8bdsp', 'gen8legends', 'gen9legends']) {
it(`${mod} should have ${species[mod]} species and ${formes[mod]} formes`, () => {