{
name: "Mix and Mega",
desc: ["• <a href=\"https://www.smogon.com/forums/threads/3540979/\">Mix and Mega</a>"],
section: "Other Metagames",
mod: 'mixandmega',
ruleset: ['Ubers', 'Baton Pass Clause'],
banlist: ['Gengarite', 'Shadow Tag', 'Dynamic Punch', 'Electrify', 'Zap Cannon'],
onValidateTeam: function (team, format) {
let itemTable = [];
for (let i = 0; i < team.length; i++) {
let item = this.getItem(team[i].item);
if (!item) continue;
if (itemTable[item] && item.megaStone) return ["You are limited to one of each Mega Stone.", "(You have more than one " + item.name + ".)"];
if (itemTable[item] && (item.id === 'redorb' || item.id === 'blueorb')) return ["You are limited to one of each Primal Orb.", "(You have more than one " + item.name + ".)"];
itemTable[item] = true;
}
},
onValidateSet: function (set) {
let template = this.getTemplate(set.species || set.name);
let item = this.getItem(set.item);
if (!item.megaEvolves && item.id !== 'blueorb' && item.id !== 'redorb') return;
if (template.baseSpecies === item.megaEvolves || (item.id === 'redorb' && template.baseSpecies === 'Groudon') || (item.id === 'blueorb' && template.baseSpecies === 'Kyogre')) return;
if (template.evos.length) return [template.species + " is not allowed to hold " + item.name + " because it isn't fully evolved."];
if (template.tier === 'Uber') {
return [template.species + " is not allowed to hold a Mega Stone."];
}
switch (item.id) {
case 'beedrillite': case 'kangaskhanite':
return [item.name + " is only allowed to be held by " + item.megaEvolves + "."];
case 'blazikenite':
if (set.ability === 'Speed Boost') break;
return ["You are only allowed to hold Blazikenite if your Ability is Speed Boost."];
case 'mawilite': case 'medichamite':
if (set.ability === 'Huge Power' || set.ability === 'Pure Power') break;
if (template.species === "Mawile" || template.species === "Medicham") break;
return ["You are only allowed to hold " + item.name + " if your Ability is Huge Power or Pure Power."];
}
},
onBegin: function () {
let allPokemon = this.p1.pokemon.concat(this.p2.pokemon);
for (let i = 0, len = allPokemon.length; i < len; i++) {
let pokemon = allPokemon[i];
pokemon.originalSpecies = pokemon.baseTemplate.species;
}
},
onSwitchInPriority: -6,
onSwitchIn: function (pokemon) {
let item = pokemon.getItem();
if (pokemon.isActive && !pokemon.template.isMega && !pokemon.template.isPrimal && (item.id === 'redorb' || item.id === 'blueorb') && pokemon.baseTemplate.tier !== 'Uber' && !pokemon.template.evos.length) {
let template = this.getMixedTemplate(pokemon.originalSpecies, item.id === 'redorb' ? 'Groudon-Primal' : 'Kyogre-Primal');
pokemon.formeChange(template);
pokemon.baseTemplate = template;
if (pokemon.originalSpecies === (item.id === 'redorb' ? 'Groudon' : 'Kyogre')) {
pokemon.details = template.species + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : '');
this.add('detailschange', pokemon, pokemon.details);
} else {
let oTemplate = this.getTemplate(pokemon.originalSpecies);
this.add('-formechange', pokemon, oTemplate.species, template.requiredItem);
this.add('-start', pokemon, this.getTemplate(template.originalMega).requiredItem, '[silent]');
if (oTemplate.types.length !== pokemon.types.length || oTemplate.types[1] !== pokemon.template.types[1]) {
this.add('-start', pokemon, 'typechange', pokemon.template.types.join('/'), '[silent]');
}
}
this.add('-activate', pokemon, pokemon.getItem());
this.add('-primal', pokemon);
pokemon.setAbility(template.abilities['0']);
pokemon.baseAbility = pokemon.ability;
pokemon.canMegaEvo = false;
} else {
let oMegaTemplate = this.getTemplate(pokemon.template.originalMega);
if (oMegaTemplate.exists && pokemon.originalSpecies !== oMegaTemplate.baseSpecies) {
this.add('-start', pokemon, oMegaTemplate.requiredItem || oMegaTemplate.requiredMove, '[silent]');
let oTemplate = this.getTemplate(pokemon.originalSpecies);
if (oTemplate.types.length !== pokemon.template.types.length || oTemplate.types[1] !== pokemon.template.types[1]) {
this.add('-start', pokemon, 'typechange', pokemon.template.types.join('/'), '[silent]');
}
}
}
},
onSwitchOut: function (pokemon) {
let oMegaTemplate = this.getTemplate(pokemon.template.originalMega);
if (oMegaTemplate.exists && pokemon.originalSpecies !== oMegaTemplate.baseSpecies) {
this.add('-end', pokemon, oMegaTemplate.requiredItem || oMegaTemplate.requiredMove, '[silent]');
}
},
},