diff --git a/config/formats.ts b/config/formats.ts
index 76a4178770895..ed5dadaf89ddd 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -2901,7 +2901,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
onValidateSet(set, format, setHas, teamHas) {
if (set.item) {
const item = this.dex.items.get(set.item);
- if (item.megaEvolves && !(this.ruleTable.has(`+item:${item.id}`) || this.ruleTable.has(`+pokemontag:mega`))) {
+ if (item.megaStone && !(this.ruleTable.has(`+item:${item.id}`) || this.ruleTable.has(`+pokemontag:mega`))) {
return [`Mega Evolution is banned.`];
}
if (item.zMove && !(this.ruleTable.has(`+item:${item.id}`))) {
@@ -3680,8 +3680,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(Array.isArray(item.megaStone) ? item.megaStone[0] : item.megaStone);
- if (item.megaEvolves?.includes(species.baseSpecies) && megaSpecies.bst > 625) {
+ const megaSpecies = this.dex.species.get(item.megaStone[species.baseSpecies]);
+ if (megaSpecies.bst > 625) {
return [
`${set.name || set.species}'s item ${item.name} is banned.`, `(Pok\u00e9mon with a BST higher than 625 are banned)`,
];
diff --git a/data/items.ts b/data/items.ts
index 1ffb717568813..fa452c1c48032 100644
--- a/data/items.ts
+++ b/data/items.ts
@@ -22,12 +22,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
abomasite: {
name: "Abomasite",
spritenum: 575,
- megaStone: "Abomasnow-Mega",
- megaEvolves: "Abomasnow",
+ megaStone: { "Abomasnow": "Abomasnow-Mega" },
itemUser: ["Abomasnow"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 674,
gen: 6,
@@ -36,12 +34,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
absolite: {
name: "Absolite",
spritenum: 576,
- megaStone: "Absol-Mega",
- megaEvolves: "Absol",
+ megaStone: { "Absol": "Absol-Mega" },
itemUser: ["Absol"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 677,
gen: 6,
@@ -50,12 +46,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
absolitez: {
name: "Absolite Z",
spritenum: 576,
- megaStone: "Absol-Mega-Z",
- megaEvolves: "Absol",
+ megaStone: { "Absol": "Absol-Mega-Z" },
itemUser: ["Absol"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2588,
gen: 9,
@@ -141,12 +135,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
aerodactylite: {
name: "Aerodactylite",
spritenum: 577,
- megaStone: "Aerodactyl-Mega",
- megaEvolves: "Aerodactyl",
+ megaStone: { "Aerodactyl": "Aerodactyl-Mega" },
itemUser: ["Aerodactyl"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 672,
gen: 6,
@@ -155,12 +147,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
aggronite: {
name: "Aggronite",
spritenum: 578,
- megaStone: "Aggron-Mega",
- megaEvolves: "Aggron",
+ megaStone: { "Aggron": "Aggron-Mega" },
itemUser: ["Aggron"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 667,
gen: 6,
@@ -225,12 +215,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
alakazite: {
name: "Alakazite",
spritenum: 579,
- megaStone: "Alakazam-Mega",
- megaEvolves: "Alakazam",
+ megaStone: { "Alakazam": "Alakazam-Mega" },
itemUser: ["Alakazam"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 679,
gen: 6,
@@ -250,12 +238,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
altarianite: {
name: "Altarianite",
spritenum: 615,
- megaStone: "Altaria-Mega",
- megaEvolves: "Altaria",
+ megaStone: { "Altaria": "Altaria-Mega" },
itemUser: ["Altaria"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 755,
gen: 6,
@@ -264,12 +250,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
ampharosite: {
name: "Ampharosite",
spritenum: 580,
- megaStone: "Ampharos-Mega",
- megaEvolves: "Ampharos",
+ megaStone: { "Ampharos": "Ampharos-Mega" },
itemUser: ["Ampharos"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 658,
gen: 6,
@@ -350,12 +334,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
audinite: {
name: "Audinite",
spritenum: 617,
- megaStone: "Audino-Mega",
- megaEvolves: "Audino",
+ megaStone: { "Audino": "Audino-Mega" },
itemUser: ["Audino"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 757,
gen: 6,
@@ -397,12 +379,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
banettite: {
name: "Banettite",
spritenum: 582,
- megaStone: "Banette-Mega",
- megaEvolves: "Banette",
+ megaStone: { "Banette": "Banette-Mega" },
itemUser: ["Banette"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 668,
gen: 6,
@@ -411,12 +391,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
barbaracite: {
name: "Barbaracite",
spritenum: 564,
- megaStone: "Barbaracle-Mega",
- megaEvolves: "Barbaracle",
+ megaStone: { "Barbaracle": "Barbaracle-Mega" },
itemUser: ["Barbaracle"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2581,
gen: 9,
@@ -425,12 +403,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
baxcalibrite: {
name: "Baxcalibrite",
spritenum: 0,
- megaStone: "Baxcalibur-Mega",
- megaEvolves: "Baxcalibur",
+ megaStone: { "Baxcalibur": "Baxcalibur-Mega" },
itemUser: ["Baxcalibur"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2601,
gen: 9,
@@ -446,12 +422,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
beedrillite: {
name: "Beedrillite",
spritenum: 628,
- megaStone: "Beedrill-Mega",
- megaEvolves: "Beedrill",
+ megaStone: { "Beedrill": "Beedrill-Mega" },
itemUser: ["Beedrill"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 770,
gen: 6,
@@ -582,12 +556,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
blastoisinite: {
name: "Blastoisinite",
spritenum: 583,
- megaStone: "Blastoise-Mega",
- megaEvolves: "Blastoise",
+ megaStone: { "Blastoise": "Blastoise-Mega" },
itemUser: ["Blastoise"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 661,
gen: 6,
@@ -596,12 +568,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
blazikenite: {
name: "Blazikenite",
spritenum: 584,
- megaStone: "Blaziken-Mega",
- megaEvolves: "Blaziken",
+ megaStone: { "Blaziken": "Blaziken-Mega" },
itemUser: ["Blaziken"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 664,
gen: 6,
@@ -762,12 +732,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
cameruptite: {
name: "Cameruptite",
spritenum: 625,
- megaStone: "Camerupt-Mega",
- megaEvolves: "Camerupt",
+ megaStone: { "Camerupt": "Camerupt-Mega" },
itemUser: ["Camerupt"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 767,
gen: 6,
@@ -793,12 +761,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
chandelurite: {
name: "Chandelurite",
spritenum: 557,
- megaStone: "Chandelure-Mega",
- megaEvolves: "Chandelure",
+ megaStone: { "Chandelure": "Chandelure-Mega" },
itemUser: ["Chandelure"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2574,
gen: 9,
@@ -822,12 +788,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
charizarditex: {
name: "Charizardite X",
spritenum: 585,
- megaStone: "Charizard-Mega-X",
- megaEvolves: "Charizard",
+ megaStone: { "Charizard": "Charizard-Mega-X" },
itemUser: ["Charizard"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 660,
gen: 6,
@@ -836,12 +800,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
charizarditey: {
name: "Charizardite Y",
spritenum: 586,
- megaStone: "Charizard-Mega-Y",
- megaEvolves: "Charizard",
+ megaStone: { "Charizard": "Charizard-Mega-Y" },
itemUser: ["Charizard"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 678,
gen: 6,
@@ -903,12 +865,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
chesnaughtite: {
name: "Chesnaughtite",
spritenum: 558,
- megaStone: "Chesnaught-Mega",
- megaEvolves: "Chesnaught",
+ megaStone: { "Chesnaught": "Chesnaught-Mega" },
itemUser: ["Chesnaught"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2575,
gen: 9,
@@ -978,12 +938,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
chimechite: {
name: "Chimechite",
spritenum: 0,
- megaStone: "Chimecho-Mega",
- megaEvolves: "Chimecho",
+ megaStone: { "Chimecho": "Chimecho-Mega" },
itemUser: ["Chimecho"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2587,
gen: 9,
@@ -1130,12 +1088,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
clefablite: {
name: "Clefablite",
spritenum: 544,
- megaStone: "Clefable-Mega",
- megaEvolves: "Clefable",
+ megaStone: { "Clefable": "Clefable-Mega" },
itemUser: ["Clefable"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2559,
gen: 9,
@@ -1258,12 +1214,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
crabominite: {
name: "Crabominite",
spritenum: 0,
- megaStone: "Crabominable-Mega",
- megaEvolves: "Crabominable",
+ megaStone: { "Crabominable": "Crabominable-Mega" },
itemUser: ["Crabominable"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2595,
gen: 9,
@@ -1357,12 +1311,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
darkranite: {
name: "Darkranite",
spritenum: 0,
- megaStone: "Darkrai-Mega",
- megaEvolves: "Darkrai",
+ megaStone: { "Darkrai": "Darkrai-Mega" },
itemUser: ["Darkrai"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2593,
gen: 9,
@@ -1425,12 +1377,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
delphoxite: {
name: "Delphoxite",
spritenum: 559,
- megaStone: "Delphox-Mega",
- megaEvolves: "Delphox",
+ megaStone: { "Delphox": "Delphox-Mega" },
itemUser: ["Delphox"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2576,
gen: 9,
@@ -1454,12 +1404,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
diancite: {
name: "Diancite",
spritenum: 624,
- megaStone: "Diancie-Mega",
- megaEvolves: "Diancie",
+ megaStone: { "Diancie": "Diancie-Mega" },
itemUser: ["Diancie"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 764,
gen: 6,
@@ -1521,12 +1469,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
dragalgite: {
name: "Dragalgite",
spritenum: 565,
- megaStone: "Dragalge-Mega",
- megaEvolves: "Dragalge",
+ megaStone: { "Dragalge": "Dragalge-Mega" },
itemUser: ["Dragalge"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2582,
gen: 9,
@@ -1564,12 +1510,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
dragoninite: {
name: "Dragoninite",
spritenum: 547,
- megaStone: "Dragonite-Mega",
- megaEvolves: "Dragonite",
+ megaStone: { "Dragonite": "Dragonite-Mega" },
itemUser: ["Dragonite"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2562,
gen: 9,
@@ -1615,12 +1559,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
drampanite: {
name: "Drampanite",
spritenum: 569,
- megaStone: "Drampa-Mega",
- megaEvolves: "Drampa",
+ megaStone: { "Drampa": "Drampa-Mega" },
itemUser: ["Drampa"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2585,
gen: 9,
@@ -1714,12 +1656,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
eelektrossite: {
name: "Eelektrossite",
spritenum: 556,
- megaStone: "Eelektross-Mega",
- megaEvolves: "Eelektross",
+ megaStone: { "Eelektross": "Eelektross-Mega" },
itemUser: ["Eelektross"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2573,
gen: 9,
@@ -1889,12 +1829,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
emboarite: {
name: "Emboarite",
spritenum: 552,
- megaStone: "Emboar-Mega",
- megaEvolves: "Emboar",
+ megaStone: { "Emboar": "Emboar-Mega" },
itemUser: ["Emboar"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2569,
gen: 9,
@@ -1946,12 +1884,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
excadrite: {
name: "Excadrite",
spritenum: 553,
- megaStone: "Excadrill-Mega",
- megaEvolves: "Excadrill",
+ megaStone: { "Excadrill": "Excadrill-Mega" },
itemUser: ["Excadrill"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2570,
gen: 9,
@@ -2031,12 +1967,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
falinksite: {
name: "Falinksite",
spritenum: 570,
- megaStone: "Falinks-Mega",
- megaEvolves: "Falinks",
+ megaStone: { "Falinks": "Falinks-Mega" },
itemUser: ["Falinks"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2586,
gen: 9,
@@ -2052,12 +1986,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
feraligite: {
name: "Feraligite",
spritenum: 549,
- megaStone: "Feraligatr-Mega",
- megaEvolves: "Feraligatr",
+ megaStone: { "Feraligatr": "Feraligatr-Mega" },
itemUser: ["Feraligatr"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2564,
gen: 9,
@@ -2252,12 +2184,11 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
floettite: {
name: "Floettite",
spritenum: 562,
- megaStone: "Floette-Mega",
- megaEvolves: "Floette-Eternal",
+ megaStone: { "Floette-Eternal": "Floette-Mega" },
itemUser: ["Floette-Eternal"],
onTakeItem(item, source) {
- if ([item.megaEvolves, item.megaStone].includes(source.baseSpecies.name)) return false;
- return true;
+ return !item.megaStone || (!item.megaStone[source.baseSpecies.name] &&
+ !Object.values(item.megaStone).includes(source.baseSpecies.name));
},
num: 2579,
gen: 9,
@@ -2397,12 +2328,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
froslassite: {
name: "Froslassite",
spritenum: 551,
- megaStone: "Froslass-Mega",
- megaEvolves: "Froslass",
+ megaStone: { "Froslass": "Froslass-Mega" },
itemUser: ["Froslass"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2566,
gen: 9,
@@ -2440,12 +2369,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
galladite: {
name: "Galladite",
spritenum: 616,
- megaStone: "Gallade-Mega",
- megaEvolves: "Gallade",
+ megaStone: { "Gallade": "Gallade-Mega" },
itemUser: ["Gallade"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 756,
gen: 6,
@@ -2474,12 +2401,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
garchompite: {
name: "Garchompite",
spritenum: 573,
- megaStone: "Garchomp-Mega",
- megaEvolves: "Garchomp",
+ megaStone: { "Garchomp": "Garchomp-Mega" },
itemUser: ["Garchomp"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 683,
gen: 6,
@@ -2488,12 +2413,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
garchompitez: {
name: "Garchompite Z",
spritenum: 573,
- megaStone: "Garchomp-Mega-Z",
- megaEvolves: "Garchomp",
+ megaStone: { "Garchomp": "Garchomp-Mega-Z" },
itemUser: ["Garchomp"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2590,
gen: 9,
@@ -2502,12 +2425,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
gardevoirite: {
name: "Gardevoirite",
spritenum: 587,
- megaStone: "Gardevoir-Mega",
- megaEvolves: "Gardevoir",
+ megaStone: { "Gardevoir": "Gardevoir-Mega" },
itemUser: ["Gardevoir"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 657,
gen: 6,
@@ -2516,12 +2437,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
gengarite: {
name: "Gengarite",
spritenum: 588,
- megaStone: "Gengar-Mega",
- megaEvolves: "Gengar",
+ megaStone: { "Gengar": "Gengar-Mega" },
itemUser: ["Gengar"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 656,
gen: 6,
@@ -2572,12 +2491,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
glalitite: {
name: "Glalitite",
spritenum: 623,
- megaStone: "Glalie-Mega",
- megaEvolves: "Glalie",
+ megaStone: { "Glalie": "Glalie-Mega" },
itemUser: ["Glalie"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 763,
gen: 6,
@@ -2586,12 +2503,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
glimmoranite: {
name: "Glimmoranite",
spritenum: 0,
- megaStone: "Glimmora-Mega",
- megaEvolves: "Glimmora",
+ megaStone: { "Glimmora": "Glimmora-Mega" },
itemUser: ["Glimmora"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2600,
gen: 9,
@@ -2609,12 +2524,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
golisopite: {
name: "Golisopite",
spritenum: 0,
- megaStone: "Golisopod-Mega",
- megaEvolves: "Golisopod",
+ megaStone: { "Golisopod": "Golisopod-Mega" },
itemUser: ["Golisopod"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2596,
gen: 9,
@@ -2623,12 +2536,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
golurkite: {
name: "Golurkite",
spritenum: 0,
- megaStone: "Golurk-Mega",
- megaEvolves: "Golurk",
+ megaStone: { "Golurk": "Golurk-Mega" },
itemUser: ["Golurk"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2594,
gen: 9,
@@ -2709,13 +2620,11 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
greninjite: {
name: "Greninjite",
spritenum: 560,
- megaStone: "Greninja-Mega",
- megaEvolves: "Greninja",
+ megaStone: { "Greninja": "Greninja-Mega" },
itemUser: ["Greninja"],
onTakeItem(item, source) {
// TODO: Figure out if this works on Greninja-Bond
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2577,
gen: 9,
@@ -2824,12 +2733,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
gyaradosite: {
name: "Gyaradosite",
spritenum: 589,
- megaStone: "Gyarados-Mega",
- megaEvolves: "Gyarados",
+ megaStone: { "Gyarados": "Gyarados-Mega" },
itemUser: ["Gyarados"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 676,
gen: 6,
@@ -2877,12 +2784,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
hawluchanite: {
name: "Hawluchanite",
spritenum: 566,
- megaStone: "Hawlucha-Mega",
- megaEvolves: "Hawlucha",
+ megaStone: { "Hawlucha": "Hawlucha-Mega" },
itemUser: ["Hawlucha"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2583,
gen: 9,
@@ -2919,12 +2824,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
heatranite: {
name: "Heatranite",
spritenum: 0,
- megaStone: "Heatran-Mega",
- megaEvolves: "Heatran",
+ megaStone: { "Heatran": "Heatran-Mega" },
itemUser: ["Heatran"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2592,
gen: 9,
@@ -2969,12 +2872,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
heracronite: {
name: "Heracronite",
spritenum: 590,
- megaStone: "Heracross-Mega",
- megaEvolves: "Heracross",
+ megaStone: { "Heracross": "Heracross-Mega" },
itemUser: ["Heracross"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 680,
gen: 6,
@@ -2995,12 +2896,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
houndoominite: {
name: "Houndoominite",
spritenum: 591,
- megaStone: "Houndoom-Mega",
- megaEvolves: "Houndoom",
+ megaStone: { "Houndoom": "Houndoom-Mega" },
itemUser: ["Houndoom"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 666,
gen: 6,
@@ -3213,12 +3112,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
kangaskhanite: {
name: "Kangaskhanite",
spritenum: 592,
- megaStone: "Kangaskhan-Mega",
- megaEvolves: "Kangaskhan",
+ megaStone: { "Kangaskhan": "Kangaskhan-Mega" },
itemUser: ["Kangaskhan"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 675,
gen: 6,
@@ -3371,12 +3268,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
latiasite: {
name: "Latiasite",
spritenum: 629,
- megaStone: "Latias-Mega",
- megaEvolves: "Latias",
+ megaStone: { "Latias": "Latias-Mega" },
itemUser: ["Latias"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 684,
gen: 6,
@@ -3385,12 +3280,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
latiosite: {
name: "Latiosite",
spritenum: 630,
- megaStone: "Latios-Mega",
- megaEvolves: "Latios",
+ megaStone: { "Latios": "Latios-Mega" },
itemUser: ["Latios"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 685,
gen: 6,
@@ -3571,12 +3464,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
lopunnite: {
name: "Lopunnite",
spritenum: 626,
- megaStone: "Lopunny-Mega",
- megaEvolves: "Lopunny",
+ megaStone: { "Lopunny": "Lopunny-Mega" },
itemUser: ["Lopunny"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 768,
gen: 6,
@@ -3601,12 +3492,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
lucarionite: {
name: "Lucarionite",
spritenum: 594,
- megaStone: "Lucario-Mega",
- megaEvolves: "Lucario",
+ megaStone: { "Lucario": "Lucario-Mega" },
itemUser: ["Lucario"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 673,
gen: 6,
@@ -3615,12 +3504,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
lucarionitez: {
name: "Lucarionite Z",
spritenum: 594,
- megaStone: "Lucario-Mega-Z",
- megaEvolves: "Lucario",
+ megaStone: { "Lucario": "Lucario-Mega-Z" },
itemUser: ["Lucario"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2591,
gen: 9,
@@ -3772,12 +3659,14 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
magearnite: {
name: "Magearnite",
spritenum: 0,
- megaStone: ["Magearna-Mega", "Magearna-Original-Mega"],
- megaEvolves: ["Magearna", "Magearna-Original"],
+ megaStone: {
+ "Magearna": "Magearna-Mega",
+ "Magearna-Original": "Magearna-Original-Mega",
+ },
itemUser: ["Magearna", "Magearna-Original"],
onTakeItem(item, source) {
- if (item.megaEvolves!.includes(source.baseSpecies.baseSpecies)) return false;
- return true;
+ return !item.megaStone || (!item.megaStone[source.baseSpecies.name] &&
+ !Object.values(item.megaStone).includes(source.baseSpecies.name));
},
num: 2597,
gen: 9,
@@ -3860,12 +3749,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
malamarite: {
name: "Malamarite",
spritenum: 563,
- megaStone: "Malamar-Mega",
- megaEvolves: "Malamar",
+ megaStone: { "Malamar": "Malamar-Mega" },
itemUser: ["Malamar"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2580,
gen: 9,
@@ -3883,12 +3770,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
manectite: {
name: "Manectite",
spritenum: 596,
- megaStone: "Manectric-Mega",
- megaEvolves: "Manectric",
+ megaStone: { "Manectric": "Manectric-Mega" },
itemUser: ["Manectric"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 682,
gen: 6,
@@ -3943,12 +3828,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
mawilite: {
name: "Mawilite",
spritenum: 598,
- megaStone: "Mawile-Mega",
- megaEvolves: "Mawile",
+ megaStone: { "Mawile": "Mawile-Mega" },
itemUser: ["Mawile"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 681,
gen: 6,
@@ -3977,12 +3860,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
medichamite: {
name: "Medichamite",
spritenum: 599,
- megaStone: "Medicham-Mega",
- megaEvolves: "Medicham",
+ megaStone: { "Medicham": "Medicham-Mega" },
itemUser: ["Medicham"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 665,
gen: 6,
@@ -3991,12 +3872,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
meganiumite: {
name: "Meganiumite",
spritenum: 548,
- megaStone: "Meganium-Mega",
- megaEvolves: "Meganium",
+ megaStone: { "Meganium": "Meganium-Mega" },
itemUser: ["Meganium"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2563,
gen: 9,
@@ -4043,12 +3922,14 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
meowsticite: {
name: "Meowsticite",
spritenum: 0,
- megaStone: ["Meowstic-M-Mega", "Meowstic-F-Mega"],
- megaEvolves: ["Meowstic", "Meowstic-F"],
+ megaStone: {
+ "Meowstic": "Meowstic-M-Mega",
+ "Meowstic-F": "Meowstic-F-Mega",
+ },
itemUser: ["Meowstic", "Meowstic-F"],
onTakeItem(item, source) {
- if (item.megaEvolves!.includes(source.baseSpecies.baseSpecies)) return false;
- return true;
+ return !item.megaStone || (!item.megaStone[source.baseSpecies.name] &&
+ !Object.values(item.megaStone).includes(source.baseSpecies.name));
},
num: 2594,
gen: 9,
@@ -4057,12 +3938,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
metagrossite: {
name: "Metagrossite",
spritenum: 618,
- megaStone: "Metagross-Mega",
- megaEvolves: "Metagross",
+ megaStone: { "Metagross": "Metagross-Mega" },
itemUser: ["Metagross"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 758,
gen: 6,
@@ -4164,12 +4043,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
mewtwonitex: {
name: "Mewtwonite X",
spritenum: 600,
- megaStone: "Mewtwo-Mega-X",
- megaEvolves: "Mewtwo",
+ megaStone: { "Mewtwo": "Mewtwo-Mega-X" },
itemUser: ["Mewtwo"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 662,
gen: 6,
@@ -4178,12 +4055,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
mewtwonitey: {
name: "Mewtwonite Y",
spritenum: 601,
- megaStone: "Mewtwo-Mega-Y",
- megaEvolves: "Mewtwo",
+ megaStone: { "Mewtwo": "Mewtwo-Mega-Y" },
itemUser: ["Mewtwo"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 663,
gen: 6,
@@ -4677,12 +4552,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
pidgeotite: {
name: "Pidgeotite",
spritenum: 622,
- megaStone: "Pidgeot-Mega",
- megaEvolves: "Pidgeot",
+ megaStone: { "Pidgeot": "Pidgeot-Mega" },
itemUser: ["Pidgeot"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 762,
gen: 6,
@@ -4726,12 +4599,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
pinsirite: {
name: "Pinsirite",
spritenum: 602,
- megaStone: "Pinsir-Mega",
- megaEvolves: "Pinsir",
+ megaStone: { "Pinsir": "Pinsir-Mega" },
itemUser: ["Pinsir"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 671,
gen: 6,
@@ -5082,12 +4953,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
pyroarite: {
name: "Pyroarite",
spritenum: 561,
- megaStone: "Pyroar-Mega",
- megaEvolves: "Pyroar",
+ megaStone: { "Pyroar": "Pyroar-Mega" },
itemUser: ["Pyroar"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2578,
gen: 9,
@@ -5161,13 +5030,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
raichunitex: {
name: "Raichunite X",
spritenum: 0,
- megaStone: "Raichu-Mega-X",
- megaEvolves: "Raichu",
+ megaStone: { "Raichu": "Raichu-Mega-X" },
itemUser: ["Raichu"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.name ||
- item.megaStone === source.baseSpecies.name) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2585,
gen: 9,
@@ -5176,13 +5042,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
raichunitey: {
name: "Raichunite Y",
spritenum: 0,
- megaStone: "Raichu-Mega-Y",
- megaEvolves: "Raichu",
+ megaStone: { "Raichu": "Raichu-Mega-Y" },
itemUser: ["Raichu"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.name ||
- item.megaStone === source.baseSpecies.name) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2586,
gen: 9,
@@ -5561,12 +5424,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
sablenite: {
name: "Sablenite",
spritenum: 614,
- megaStone: "Sableye-Mega",
- megaEvolves: "Sableye",
+ megaStone: { "Sableye": "Sableye-Mega" },
itemUser: ["Sableye"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 754,
gen: 6,
@@ -5640,12 +5501,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
salamencite: {
name: "Salamencite",
spritenum: 627,
- megaStone: "Salamence-Mega",
- megaEvolves: "Salamence",
+ megaStone: { "Salamence": "Salamence-Mega" },
itemUser: ["Salamence"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 769,
gen: 6,
@@ -5654,12 +5513,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
sceptilite: {
name: "Sceptilite",
spritenum: 613,
- megaStone: "Sceptile-Mega",
- megaEvolves: "Sceptile",
+ megaStone: { "Sceptile": "Sceptile-Mega" },
itemUser: ["Sceptile"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 753,
gen: 6,
@@ -5668,12 +5525,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
scizorite: {
name: "Scizorite",
spritenum: 605,
- megaStone: "Scizor-Mega",
- megaEvolves: "Scizor",
+ megaStone: { "Scizor": "Scizor-Mega" },
itemUser: ["Scizor"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 670,
gen: 6,
@@ -5682,12 +5537,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
scolipite: {
name: "Scolipite",
spritenum: 554,
- megaStone: "Scolipede-Mega",
- megaEvolves: "Scolipede",
+ megaStone: { "Scolipede": "Scolipede-Mega" },
itemUser: ["Scolipede"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2571,
gen: 9,
@@ -5708,12 +5561,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
scovillainite: {
name: "Scovillainite",
spritenum: 0,
- megaStone: "Scovillain-Mega",
- megaEvolves: "Scovillain",
+ megaStone: { "Scovillain": "Scovillain-Mega" },
itemUser: ["Scovillain"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2599,
gen: 9,
@@ -5722,12 +5573,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
scraftinite: {
name: "Scraftinite",
spritenum: 555,
- megaStone: "Scrafty-Mega",
- megaEvolves: "Scrafty",
+ megaStone: { "Scrafty": "Scrafty-Mega" },
itemUser: ["Scrafty"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2572,
gen: 9,
@@ -5767,12 +5616,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
sharpedonite: {
name: "Sharpedonite",
spritenum: 619,
- megaStone: "Sharpedo-Mega",
- megaEvolves: "Sharpedo",
+ megaStone: { "Sharpedo": "Sharpedo-Mega" },
itemUser: ["Sharpedo"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 759,
gen: 6,
@@ -5914,12 +5761,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
skarmorite: {
name: "Skarmorite",
spritenum: 550,
- megaStone: "Skarmory-Mega",
- megaEvolves: "Skarmory",
+ megaStone: { "Skarmory": "Skarmory-Mega" },
itemUser: ["Skarmory"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2565,
gen: 9,
@@ -5958,12 +5803,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
slowbronite: {
name: "Slowbronite",
spritenum: 620,
- megaStone: "Slowbro-Mega",
- megaEvolves: "Slowbro",
+ megaStone: { "Slowbro": "Slowbro-Mega" },
itemUser: ["Slowbro"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 760,
gen: 6,
@@ -6129,12 +5972,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
staraptite: {
name: "Staraptite",
spritenum: 0,
- megaStone: "Staraptor-Mega",
- megaEvolves: "Staraptor",
+ megaStone: { "Staraptor": "Staraptor-Mega" },
itemUser: ["Staraptor"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2589,
gen: 9,
@@ -6175,12 +6016,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
starminite: {
name: "Starminite",
spritenum: 546,
- megaStone: "Starmie-Mega",
- megaEvolves: "Starmie",
+ megaStone: { "Starmie": "Starmie-Mega" },
itemUser: ["Starmie"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2561,
gen: 9,
@@ -6224,12 +6063,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
steelixite: {
name: "Steelixite",
spritenum: 621,
- megaStone: "Steelix-Mega",
- megaEvolves: "Steelix",
+ megaStone: { "Steelix": "Steelix-Mega" },
itemUser: ["Steelix"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 761,
gen: 6,
@@ -6338,12 +6175,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
swampertite: {
name: "Swampertite",
spritenum: 612,
- megaStone: "Swampert-Mega",
- megaEvolves: "Swampert",
+ megaStone: { "Swampert": "Swampert-Mega" },
itemUser: ["Swampert"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 752,
gen: 6,
@@ -6426,12 +6261,15 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
tatsugirinite: {
name: "Tatsugirinite",
spritenum: 0,
- megaStone: ["Tatsugiri-Curly-Mega", "Tatsugiri-Droopy-Mega", "Tatsugiri-Stretchy-Mega"],
- megaEvolves: ["Tatsugiri", "Tatsugiri-Droopy", "Tatsugiri-Stretchy"],
+ megaStone: {
+ "Tatsugiri": "Tatsugiri-Curly-Mega",
+ "Tatsugiri-Droopy": "Tatsugiri-Droopy-Mega",
+ "Tatsugiri-Stretchy": "Tatsugiri-Stretchy-Mega",
+ },
itemUser: ["Tatsugiri", "Tatsugiri-Droopy", "Tatsugiri-Stretchy"],
onTakeItem(item, source) {
- if (item.megaEvolves!.includes(source.baseSpecies.baseSpecies)) return false;
- return true;
+ return !item.megaStone || (!item.megaStone[source.baseSpecies.name] &&
+ !Object.values(item.megaStone).includes(source.baseSpecies.name));
},
num: 2601,
gen: 9,
@@ -7549,12 +7387,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
tyranitarite: {
name: "Tyranitarite",
spritenum: 607,
- megaStone: "Tyranitar-Mega",
- megaEvolves: "Tyranitar",
+ megaStone: { "Tyranitar": "Tyranitar-Mega" },
itemUser: ["Tyranitar"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 669,
gen: 6,
@@ -7628,12 +7464,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
venusaurite: {
name: "Venusaurite",
spritenum: 608,
- megaStone: "Venusaur-Mega",
- megaEvolves: "Venusaur",
+ megaStone: { "Venusaur": "Venusaur-Mega" },
itemUser: ["Venusaur"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 659,
gen: 6,
@@ -7642,12 +7476,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
victreebelite: {
name: "Victreebelite",
spritenum: 545,
- megaStone: "Victreebel-Mega",
- megaEvolves: "Victreebel",
+ megaStone: { "Victreebel": "Victreebel-Mega" },
itemUser: ["Victreebel"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2560,
gen: 9,
@@ -7976,12 +7808,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
zeraorite: {
name: "Zeraorite",
spritenum: 0,
- megaStone: "Zeraora-Mega",
- megaEvolves: "Zeraora",
+ megaStone: { "Zeraora": "Zeraora-Mega" },
itemUser: ["Zeraora"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: 2598,
gen: 9,
@@ -8006,12 +7836,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
zygardite: {
name: "Zygardite",
spritenum: 568,
- megaStone: "Zygarde-Mega",
- megaEvolves: "Zygarde-Complete",
+ megaStone: { "Zygarde-Complete": "Zygarde-Mega" },
itemUser: ["Zygarde-Complete"],
onTakeItem(item, source) {
- if (source.baseSpecies.baseSpecies === 'Zygarde') return false;
- return true;
+ return source.baseSpecies.baseSpecies !== 'Zygarde';
},
num: 2584,
gen: 9,
@@ -8303,12 +8131,10 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
crucibellite: {
name: "Crucibellite",
spritenum: 577,
- megaStone: "Crucibelle-Mega",
- megaEvolves: "Crucibelle",
+ megaStone: { "Crucibelle": "Crucibelle-Mega" },
itemUser: ["Crucibelle"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: -1,
gen: 6,
diff --git a/data/mods/chatbats/items.ts b/data/mods/chatbats/items.ts
index d665b92d55e27..f0591805956b3 100644
--- a/data/mods/chatbats/items.ts
+++ b/data/mods/chatbats/items.ts
@@ -13,12 +13,10 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
masquerainite: {
name: "Masquerainite",
spritenum: 1,
- megaStone: "Masquerain-Mega",
- megaEvolves: "Masquerain",
+ megaStone: { "Masquerain": "Masquerain-Mega" },
itemUser: ["Masquerain"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: -1,
gen: 9,
@@ -59,12 +57,10 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
typhlosionite: {
name: "Typhlosionite",
spritenum: 1,
- megaStone: "Typhlosion-Mega",
- megaEvolves: "Typhlosion",
+ megaStone: { "Typhlosion": "Typhlosion-Mega" },
itemUser: ["Typhlosion"],
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
num: -2,
gen: 9,
diff --git a/data/mods/gen8/rulesets.ts b/data/mods/gen8/rulesets.ts
index 7958555ccaa50..866c2568da322 100644
--- a/data/mods/gen8/rulesets.ts
+++ b/data/mods/gen8/rulesets.ts
@@ -92,10 +92,10 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
if (["Zacian", "Zamazenta"].includes(species.baseSpecies) && this.toID(set.item).startsWith('rusted')) {
species = this.dex.species.get(set.species + "-Crowned");
}
- if (set.item && this.dex.items.get(set.item).megaStone) {
+ if (set.item) {
const item = this.dex.items.get(set.item);
- if (item.megaEvolves === species.baseSpecies) {
- species = this.dex.species.get(Array.isArray(item.megaStone) ? item.megaStone[0] : item.megaStone);
+ if (item.megaStone?.[species.baseSpecies]) {
+ species = this.dex.species.get(item.megaStone[species.baseSpecies]);
}
}
if (
@@ -123,8 +123,8 @@ 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(Array.isArray(item.megaStone) ? item.megaStone[0] : item.megaStone);
+ if (item.megaStone?.[set.species]) {
+ godSpecies = this.dex.species.get(item.megaStone[set.species]);
}
if (["Zacian", "Zamazenta"].includes(godSpecies.baseSpecies) && item.id.startsWith('rusted')) {
godSpecies = this.dex.species.get(set.species + "-Crowned");
diff --git a/data/mods/gen9legendsou/items.ts b/data/mods/gen9legendsou/items.ts
index 5a4e3fb9c0fc5..9e71c2e5cbcd8 100644
--- a/data/mods/gen9legendsou/items.ts
+++ b/data/mods/gen9legendsou/items.ts
@@ -2,15 +2,15 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
slowbronite: {
inherit: true,
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.name || item.megaStone === source.baseSpecies.name) return false;
- return true;
+ return !item.megaStone || (!item.megaStone[source.baseSpecies.name] &&
+ !Object.values(item.megaStone).includes(source.baseSpecies.name));
},
},
greninjite: {
inherit: true,
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.name || item.megaStone === source.baseSpecies.name) return false;
- return true;
+ return !item.megaStone || (!item.megaStone[source.baseSpecies.name] &&
+ !Object.values(item.megaStone).includes(source.baseSpecies.name));
},
},
zygardite: {
diff --git a/data/mods/gen9legendsou/scripts.ts b/data/mods/gen9legendsou/scripts.ts
index a71a40b244517..ac0cdf8b940c6 100644
--- a/data/mods/gen9legendsou/scripts.ts
+++ b/data/mods/gen9legendsou/scripts.ts
@@ -57,23 +57,8 @@ export const Scripts: ModdedBattleScriptsData = {
pokemon.baseMoves.includes(this.battle.toID(altForme.requiredMove)) && !item.zMove) {
return altForme.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`);
- }
- 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;
+ if (!item.megaStone) return null;
+ return item.megaStone[species.name];
},
runMegaEvo(pokemon) {
const speciesid = pokemon.canMegaEvo || pokemon.canUltraBurst;
diff --git a/data/mods/gen9ssb/items.ts b/data/mods/gen9ssb/items.ts
index ba538d227f084..db1bfae705a17 100644
--- a/data/mods/gen9ssb/items.ts
+++ b/data/mods/gen9ssb/items.ts
@@ -14,11 +14,9 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
name: "Flygonite",
spritenum: 111,
itemUser: ["Flygon"],
- megaEvolves: "Flygon",
- megaStone: "Trapinch",
+ megaStone: { "Trapinch": "Flygon" },
onTakeItem(item, source) {
- if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
- return true;
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
desc: "If held by a Flygon, this item allows it to Mega Evolve in battle.",
},
@@ -36,7 +34,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
gardevoirite: {
inherit: true,
itemUser: ["Ralts"],
- megaEvolves: "Ralts",
+ megaStone: { "Ralts": "Gardevoir-Mega" },
desc: "If held by a Ralts, this item allows it to Mega Evolve in battle.",
},
// Peary
diff --git a/data/mods/gen9ssb/scripts.ts b/data/mods/gen9ssb/scripts.ts
index f1b3cbba00fb3..6be6a31470bd6 100644
--- a/data/mods/gen9ssb/scripts.ts
+++ b/data/mods/gen9ssb/scripts.ts
@@ -963,26 +963,11 @@ export const Scripts: ModdedBattleScriptsData = {
pokemon.baseMoves.includes(this.battle.toID(altForme.requiredMove)) && !item.zMove) {
return altForme.name;
}
+ if (!item.megaStone) return null;
// a hacked-in Megazard X can mega evolve into Megazard Y, but not into Megazard X
- 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;
+ // FIXME: Change to species.name when champions comes
+ const megaEvolution = item.megaStone[species.baseSpecies];
+ return megaEvolution && megaEvolution !== species.name ? megaEvolution : null;
},
// 1 Z per pokemon
diff --git a/data/mods/mixandmega/scripts.ts b/data/mods/mixandmega/scripts.ts
index 78d85cce0b89c..77089a00c4503 100644
--- a/data/mods/mixandmega/scripts.ts
+++ b/data/mods/mixandmega/scripts.ts
@@ -385,12 +385,8 @@ export const Scripts: ModdedBattleScriptsData = {
if (pokemon.species.isMega) return null;
const item = pokemon.getItem();
- if (item.megaStone) {
- if (item.megaStone.includes(pokemon.baseSpecies.name)) return null;
- return Array.isArray(item.megaStone) ? item.megaStone[0] : item.megaStone;
- } else {
- return null;
- }
+ if (!item.megaStone || item.megaStone[pokemon.baseSpecies.name]) return null;
+ return Object.values(item.megaStone)[0];
},
runMegaEvo(pokemon) {
if (pokemon.species.isMega) return false;
diff --git a/data/random-battles/gen7/teams.ts b/data/random-battles/gen7/teams.ts
index 1f427d5304d4f..3f6278ca554d8 100644
--- a/data/random-battles/gen7/teams.ts
+++ b/data/random-battles/gen7/teams.ts
@@ -1607,8 +1607,7 @@ export class RandomGen7Teams extends RandomGen8Teams {
if (isMonotype) {
// Prevents Mega Evolutions from breaking the type limits
if (itemData.megaStone) {
- const megaSpecies = this.dex.species.get(Array.isArray(itemData.megaStone) ?
- itemData.megaStone[0] : itemData.megaStone);
+ const megaSpecies = this.dex.species.get(Object.values(itemData.megaStone)[0]);
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]) {
diff --git a/data/rulesets.ts b/data/rulesets.ts
index f051d043f3266..d3d6f68b634db 100644
--- a/data/rulesets.ts
+++ b/data/rulesets.ts
@@ -1507,17 +1507,9 @@ 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) {
- 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.megaStone?.[species.name]) {
+ species = this.dex.species.get(item.megaStone[species.name]);
+ typeTable = typeTable.filter(type => species.types.includes(type));
}
if (item.id === "ultranecroziumz" && species.baseSpecies === "Necrozma") {
species = this.dex.species.get("Necrozma-Ultra");
@@ -1556,17 +1548,9 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
}
color = species.color;
const item = this.dex.items.get(set.item);
- 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.megaStone?.[species.name]) {
+ species = this.dex.species.get(item.megaStone[species.name]);
+ color = species.color;
}
if (item.id === "ultranecroziumz" && species.baseSpecies === "Necrozma") {
species = this.dex.species.get("Necrozma-Ultra");
@@ -2666,12 +2650,10 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
) {
species = this.dex.species.get(`${species.baseSpecies}-Crowned`);
}
- if (set.item && this.dex.items.get(set.item).megaStone) {
+ if (set.item) {
const item = this.dex.items.get(set.item);
- 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 (item.megaStone?.[species.name]) {
+ species = this.dex.species.get(item.megaStone[species.name]);
}
}
if (this.ruleTable.isRestrictedSpecies(species) ||
@@ -2693,10 +2675,8 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
}
if (set.item) {
const item = this.dex.items.get(set.item);
- 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 (item.megaStone?.[set.species]) {
+ godSpecies = this.dex.species.get(item.megaStone[set.species]);
}
if (["Zacian", "Zamazenta"].includes(godSpecies.baseSpecies) && item.id.startsWith('rusted')) {
godSpecies = this.dex.species.get(set.species + "-Crowned");
diff --git a/server/chat-plugins/othermetas.ts b/server/chat-plugins/othermetas.ts
index fd356b3cd5c37..37a54c70d4021 100644
--- a/server/chat-plugins/othermetas.ts
+++ b/server/chat-plugins/othermetas.ts
@@ -29,14 +29,23 @@ function getMegaStone(stone: string, mod = 'gen9'): Item | null {
id: move.id,
name: move.name,
fullname: move.name,
- megaEvolves: 'Rayquaza',
- megaStone: 'Rayquaza-Mega',
+ megaStone: { 'Rayquaza': 'Rayquaza-Mega' },
exists: true,
// Adding extra values to appease typescript
gen: 6,
num: -1,
effectType: 'Item',
sourceEffect: '',
+ isBerry: false,
+ ignoreKlutz: false,
+ isGem: false,
+ isPokeball: false,
+ isPrimalOrb: false,
+ shortDesc: "",
+ desc: "",
+ isNonstandard: null,
+ noCopy: false,
+ affectsFainted: false,
} as Item;
} else {
return null;
@@ -131,8 +140,8 @@ export const commands: Chat.ChatCommands = {
megaSpecies = dex.species.get(forcedForme);
baseSpecies = dex.species.get(forcedForme.split('-')[0]);
} else {
- 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);
+ megaSpecies = dex.species.get(Object.values(stone.megaStone!)[0]);
+ baseSpecies = dex.species.get(Object.keys(stone.megaStone!)[0]);
}
break;
}
@@ -282,8 +291,8 @@ export const commands: Chat.ChatCommands = {
megaSpecies = dex.species.get(forcedForme);
baseSpecies = dex.species.get(forcedForme.split('-')[0]);
} else {
- 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);
+ megaSpecies = dex.species.get(Object.values(aStone.megaStone!)[0]);
+ baseSpecies = dex.species.get(Object.keys(aStone.megaStone!)[0]);
}
break;
}
diff --git a/server/chat-plugins/randombattles/ssb.tsx b/server/chat-plugins/randombattles/ssb.tsx
index 5f7df25a44535..10d2f329d3866 100644
--- a/server/chat-plugins/randombattles/ssb.tsx
+++ b/server/chat-plugins/randombattles/ssb.tsx
@@ -373,7 +373,7 @@ class SSBSetsHTML extends Chat.JSX.Component<{ target: string }> {
{(!Array.isArray(set.item) && item.megaStone) && }
{/* keys and Kennedy have an itemless forme change */}
{['Rayquaza'].includes(set.species) && }
diff --git a/server/chat-plugins/randombattles/winrates.tsx b/server/chat-plugins/randombattles/winrates.tsx
index cbba1ce0a4472..f61e95652f5d9 100644
--- a/server/chat-plugins/randombattles/winrates.tsx
+++ b/server/chat-plugins/randombattles/winrates.tsx
@@ -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 Array.isArray(item.megaStone) ? item.megaStone[0] : item.megaStone;
+ return Object.values(item.megaStone)[0];
} else if (species === "Rayquaza" && moves.includes('Dragon Ascent') && !item.zMove && megaRayquazaPossible) {
return "Rayquaza-Mega";
} else if (species === "Poltchageist-Artisan") { // Babymons from here on out
diff --git a/sim/battle-actions.ts b/sim/battle-actions.ts
index 55243f4f23557..7879fdd6c0205 100644
--- a/sim/battle-actions.ts
+++ b/sim/battle-actions.ts
@@ -1871,21 +1871,15 @@ export class BattleActions {
pokemon.baseMoves.includes(toID(altForme.requiredMove)) && !item.zMove) {
return altForme.name;
}
+ if (!item.megaStone) return null;
// Temporary hardcode until generation shift
- if ((species.baseSpecies === "Floette" || species.baseSpecies === "Zygarde") && item.megaEvolves === species.name) {
- return item.megaStone as string;
+ if ((species.baseSpecies === "Floette" || species.baseSpecies === "Zygarde") && item.megaStone[species.name]) {
+ return item.megaStone[species.name];
}
// a hacked-in Megazard X can mega evolve into Megazard Y, but not into Megazard X
- if (Array.isArray(item.megaStone)) {
- // FIXME: Change to species.name when champions comes
- const index = (item.megaEvolves as string[]).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) {
- return item.megaStone;
- }
- return null;
+ // FIXME: Change to species.name when champions comes
+ const megaEvolution = item.megaStone[species.baseSpecies];
+ return megaEvolution && megaEvolution !== species.name ? megaEvolution : null;
}
canUltraBurst(pokemon: Pokemon) {
diff --git a/sim/dex-abilities.ts b/sim/dex-abilities.ts
index 63e406cc52996..c3af1b2ccf1ab 100644
--- a/sim/dex-abilities.ts
+++ b/sim/dex-abilities.ts
@@ -85,7 +85,7 @@ export class DexAbilities {
}
getByID(id: ID): Ability {
- if (id === '') return EMPTY_ABILITY;
+ if (id === '' || id === 'constructor') return EMPTY_ABILITY;
let ability = this.abilityCache.get(id);
if (ability) return ability;
diff --git a/sim/dex-conditions.ts b/sim/dex-conditions.ts
index 990ce7cd939be..057d6f3284955 100644
--- a/sim/dex-conditions.ts
+++ b/sim/dex-conditions.ts
@@ -665,7 +665,7 @@ export class DexConditions {
}
getByID(id: ID): Condition {
- if (id === '') return EMPTY_CONDITION;
+ if (id === '' || id === 'constructor') return EMPTY_CONDITION;
let condition = this.conditionCache.get(id);
if (condition) return condition;
diff --git a/sim/dex-data.ts b/sim/dex-data.ts
index 59c505737c338..55c47238a786a 100644
--- a/sim/dex-data.ts
+++ b/sim/dex-data.ts
@@ -172,7 +172,7 @@ export class DexNatures {
return this.getByID(toID(name));
}
getByID(id: ID): Nature {
- if (id === '') return EMPTY_NATURE;
+ if (id === '' || id === 'constructor') return EMPTY_NATURE;
let nature = this.natureCache.get(id);
if (nature) return nature;
@@ -293,7 +293,7 @@ export class DexTypes {
}
getByID(id: ID): TypeInfo {
- if (id === '') return EMPTY_TYPE_INFO;
+ if (id === '' || id === 'constructor') return EMPTY_TYPE_INFO;
let type = this.typeCache.get(id);
if (type) return type;
diff --git a/sim/dex-items.ts b/sim/dex-items.ts
index ef97fd8f43349..d8558177e7855 100644
--- a/sim/dex-items.ts
+++ b/sim/dex-items.ts
@@ -43,17 +43,11 @@ export class Item extends BasicEffect implements Readonly {
*/
readonly onMemory?: string;
/**
- * If this is a mega stone: The name (e.g. Charizard-Mega-X) of the
- * forme this allows transformation into.
+ * If this is a mega stone: A pair (e.g. Charizard: Charizard-Mega-X) of the
+ * forme this allows transformation from and into.
* undefined, if not a mega stone.
*/
- 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 | string[];
+ readonly megaStone?: { [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
@@ -116,7 +110,6 @@ export class Item extends BasicEffect implements Readonly {
this.onDrive = data.onDrive || undefined;
this.onMemory = data.onMemory || undefined;
this.megaStone = data.megaStone || undefined;
- this.megaEvolves = data.megaEvolves || undefined;
this.zMove = data.zMove || undefined;
this.zMoveType = data.zMoveType || undefined;
this.zMoveFrom = data.zMoveFrom || undefined;
@@ -176,7 +169,7 @@ export class DexItems {
}
getByID(id: ID): Item {
- if (id === '') return EMPTY_ITEM;
+ if (id === '' || id === 'constructor') return EMPTY_ITEM;
let item = this.itemCache.get(id);
if (item) return item;
if (this.dex.getAlias(id)) {
diff --git a/sim/dex-moves.ts b/sim/dex-moves.ts
index 63f9a13afa73b..5b56490430382 100644
--- a/sim/dex-moves.ts
+++ b/sim/dex-moves.ts
@@ -621,7 +621,7 @@ export class DexMoves {
}
getByID(id: ID): Move {
- if (id === '') return EMPTY_MOVE;
+ if (id === '' || id === 'constructor') return EMPTY_MOVE;
let move = this.moveCache.get(id);
if (move) return move;
if (this.dex.getAlias(id)) {
diff --git a/sim/dex-species.ts b/sim/dex-species.ts
index fab61861ca421..4a05d4ca0cf9c 100644
--- a/sim/dex-species.ts
+++ b/sim/dex-species.ts
@@ -436,7 +436,7 @@ export class DexSpecies {
}
getByID(id: ID): Species {
- if (id === '') return EMPTY_SPECIES;
+ if (id === '' || id === 'constructor') return EMPTY_SPECIES;
let species: Mutable | undefined = this.speciesCache.get(id);
if (species) return species;
diff --git a/sim/team-validator.ts b/sim/team-validator.ts
index 8d234a9ea7705..e109837780ed3 100644
--- a/sim/team-validator.ts
+++ b/sim/team-validator.ts
@@ -526,14 +526,8 @@ export class TeamValidator {
if (ruleTable.has('obtainableformes')) {
const canMegaEvo = dex.gen <= 7 || ruleTable.has('+pokemontag:past');
- if (item.megaEvolves?.includes(species.name)) {
- if (!item.megaStone) throw new Error(`Item ${item.name} has no base form for mega evolution`);
- 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);
- }
+ if (item.megaStone?.[species.name]) {
+ tierSpecies = dex.species.get(item.megaStone[species.name]);
} else if (item.id === 'redorb' && species.id === 'groudon') {
tierSpecies = dex.species.get('Groudon-Primal');
} else if (item.id === 'blueorb' && species.id === 'kyogre') {
diff --git a/sim/tools/exhaustive-runner.ts b/sim/tools/exhaustive-runner.ts
index db239828ae01f..90cdecad5433c 100644
--- a/sim/tools/exhaustive-runner.ts
+++ b/sim/tools/exhaustive-runner.ts
@@ -137,8 +137,8 @@ export class ExhaustiveRunner {
const signatures = new Map();
for (const id of pools.items.possible) {
const item = dex.data.Items[id];
- if (item.megaEvolves) {
- const pokemon = toID(item.megaEvolves);
+ if (item.megaStone) {
+ const pokemon = toID(Object.keys(item.megaStone)[0]);
const combo = { item: id };
let combos = signatures.get(pokemon);
if (!combos) {
diff --git a/test/sim/data.js b/test/sim/data.js
index dcae534243477..9c8f96a2c58e0 100644
--- a/test/sim/data.js
+++ b/test/sim/data.js
@@ -132,12 +132,6 @@ describe('Dex data', () => {
const entry = Items[itemid];
assert.equal(toID(entry.name), itemid, `Mismatched Item key "${itemid}" of "${entry.name}"`);
assert.equal(typeof entry.num, 'number', `Item ${entry.name} should have a number`);
- if (entry.megaStone) {
- assert.equal(typeof entry.megaStone, typeof entry.megaEvolves, `Item ${entry.name} megaStone and megaEvolves should both be the same type`);
- if (Array.isArray(entry.megaStone)) {
- assert.equal(entry.megaStone.length, entry.megaEvolves.length, `Item ${entry.name} megaStone and megaEvolves arrays should be the same length`);
- }
- }
}
});
diff --git a/tools/set-import/importer.ts b/tools/set-import/importer.ts
index 9458ad0d7f35f..ab59d11bd2520 100644
--- a/tools/set-import/importer.ts
+++ b/tools/set-import/importer.ts
@@ -312,7 +312,8 @@ function skip(dex: ModdedDex, format: Format, pokemon: string, set: DeepPartial<
if (pokemon === 'Rayquaza-Mega') {
return format.id.includes('ubers') || !hasMove('Dragon Ascent');
} else {
- return dex.items.get(set.item).megaStone !== pokemon;
+ const item = dex.items.get(set.item);
+ return !item.megaStone || !Object.values(item.megaStone).includes(pokemon);
}
}
if (pokemon === 'Necrozma-Ultra' && set.item !== 'Ultranecrozium Z') return true;