Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
281 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
export const Items: {[k: string]: ModdedItemData} = { | ||
blueorb: { | ||
inherit: true, | ||
onSwitchIn(pokemon) { | ||
if (pokemon.isActive && !pokemon.species.isPrimal) { | ||
this.queue.insertChoice({pokemon, choice: 'runPrimal'}); | ||
} | ||
}, | ||
onPrimal(pokemon) { | ||
// @ts-ignore | ||
const species: Species = this.getMixedSpecies(pokemon.m.originalSpecies, 'Kyogre-Primal'); | ||
if (pokemon.m.originalSpecies === 'Kyogre') { | ||
pokemon.formeChange(species, this.effect, true); | ||
} else { | ||
pokemon.formeChange(species, this.effect, true); | ||
pokemon.baseSpecies = species; | ||
this.add('-start', pokemon, 'Blue Orb', '[silent]'); | ||
} | ||
}, | ||
onTakeItem: false, | ||
}, | ||
redorb: { | ||
inherit: true, | ||
onSwitchIn(pokemon) { | ||
if (pokemon.isActive && !pokemon.species.isPrimal) { | ||
this.queue.insertChoice({pokemon, choice: 'runPrimal'}); | ||
} | ||
}, | ||
onPrimal(pokemon) { | ||
// @ts-ignore | ||
const species: Species = this.getMixedSpecies(pokemon.m.originalSpecies, 'Groudon-Primal'); | ||
if (pokemon.m.originalSpecies === 'Groudon') { | ||
pokemon.formeChange(species, this.effect, true); | ||
} else { | ||
pokemon.formeChange(species, this.effect, true); | ||
pokemon.baseSpecies = species; | ||
this.add('-start', pokemon, 'Red Orb', '[silent]'); | ||
const apparentSpecies = pokemon.illusion ? pokemon.illusion.species.name : pokemon.m.originalSpecies; | ||
const oSpecies = this.dex.getSpecies(apparentSpecies); | ||
if (pokemon.illusion) { | ||
const types = oSpecies.types; | ||
if (types.length > 1 || types[types.length - 1] !== 'Fire') { | ||
this.add('-start', pokemon, 'typechange', (types[0] !== 'Fire' ? types[0] + '/' : '') + 'Fire', '[silent]'); | ||
} | ||
} else if (oSpecies.types.length !== pokemon.species.types.length || oSpecies.types[1] !== pokemon.species.types[1]) { | ||
this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); | ||
} | ||
} | ||
}, | ||
onTakeItem: false, | ||
}, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
export const Scripts: ModdedBattleScriptsData = { | ||
inherit: 'gen7', | ||
init() { | ||
for (const id in this.data.Items) { | ||
if (!this.data.Items[id].megaStone) continue; | ||
this.modData('Items', id).onTakeItem = false; | ||
} | ||
}, | ||
canMegaEvo(pokemon) { | ||
if (pokemon.species.isMega || pokemon.species.isPrimal) return null; | ||
|
||
const item = pokemon.getItem(); | ||
if (item.megaStone) { | ||
if (item.megaStone === pokemon.name) return null; | ||
return item.megaStone; | ||
} else if (pokemon.baseMoves.includes('dragonascent' as ID)) { | ||
return 'Rayquaza-Mega'; | ||
} else { | ||
return null; | ||
} | ||
}, | ||
runMegaEvo(pokemon) { | ||
if (pokemon.species.isMega || pokemon.species.isPrimal) return false; | ||
|
||
const isUltraBurst = !pokemon.canMegaEvo; | ||
// @ts-ignore | ||
const species: Species = this.getMixedSpecies(pokemon.m.originalSpecies, pokemon.canMegaEvo || pokemon.canUltraBurst); | ||
const side = pokemon.side; | ||
|
||
// Pokémon affected by Sky Drop cannot Mega Evolve. Enforce it here for now. | ||
for (const foeActive of side.foe.active) { | ||
if (foeActive.volatiles['skydrop'] && foeActive.volatiles['skydrop'].source === pokemon) { | ||
return false; | ||
} | ||
} | ||
|
||
// Do we have a proper sprite for it? | ||
// @ts-ignore assert non-null pokemon.canMegaEvo | ||
if (isUltraBurst || this.dex.getSpecies(pokemon.canMegaEvo).baseSpecies === pokemon.m.originalSpecies) { | ||
pokemon.formeChange(species, pokemon.getItem(), true); | ||
} else { | ||
const oSpecies = this.dex.getSpecies(pokemon.m.originalSpecies); | ||
// @ts-ignore | ||
const oMegaSpecies = this.dex.getSpecies(species.originalMega); | ||
pokemon.formeChange(species, pokemon.getItem(), true); | ||
this.add('-start', pokemon, oMegaSpecies.requiredItem || oMegaSpecies.requiredMove, '[silent]'); | ||
if (oSpecies.types.length !== pokemon.species.types.length || oSpecies.types[1] !== pokemon.species.types[1]) { | ||
this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); | ||
} | ||
} | ||
|
||
pokemon.canMegaEvo = null; | ||
if (isUltraBurst) pokemon.canUltraBurst = null; | ||
return true; | ||
}, | ||
getMixedSpecies(originalSpecies, megaSpecies) { | ||
const oSpecies = this.dex.getSpecies(originalSpecies); | ||
const mSpecies = this.dex.getSpecies(megaSpecies); | ||
if (oSpecies.baseSpecies === mSpecies.baseSpecies) return mSpecies; | ||
// @ts-ignore | ||
const deltas = this.getMegaDeltas(mSpecies); | ||
// @ts-ignore | ||
const species = this.doGetMixedSpecies(oSpecies, deltas); | ||
return species; | ||
}, | ||
getMegaDeltas(megaSpecies) { | ||
const baseSpecies = this.dex.getSpecies(megaSpecies.baseSpecies); | ||
const deltas: { | ||
ability: string, | ||
baseStats: SparseStatsTable, | ||
weighthg: number, | ||
originalMega: string, | ||
requiredItem: string | undefined, | ||
type?: string, | ||
isMega?: boolean, | ||
isPrimal?: boolean, | ||
} = { | ||
ability: megaSpecies.abilities['0'], | ||
baseStats: {}, | ||
weighthg: megaSpecies.weighthg - baseSpecies.weighthg, | ||
originalMega: megaSpecies.name, | ||
requiredItem: megaSpecies.requiredItem, | ||
}; | ||
let stat: StatName; | ||
for (stat in megaSpecies.baseStats) { | ||
deltas.baseStats[stat] = megaSpecies.baseStats[stat] - baseSpecies.baseStats[stat]; | ||
} | ||
if (megaSpecies.types.length > baseSpecies.types.length) { | ||
deltas.type = megaSpecies.types[1]; | ||
} else if (megaSpecies.types.length < baseSpecies.types.length) { | ||
deltas.type = baseSpecies.types[0]; | ||
} else if (megaSpecies.types[1] !== baseSpecies.types[1]) { | ||
deltas.type = megaSpecies.types[1]; | ||
} | ||
if (megaSpecies.isMega) deltas.isMega = true; | ||
if (megaSpecies.isPrimal) deltas.isPrimal = true; | ||
return deltas; | ||
}, | ||
doGetMixedSpecies(speciesOrSpeciesName, deltas) { | ||
if (!deltas) throw new TypeError("Must specify deltas!"); | ||
const species = this.dex.deepClone(this.dex.getSpecies(speciesOrSpeciesName)); | ||
species.abilities = {'0': deltas.ability}; | ||
if (species.types[0] === deltas.type) { | ||
species.types = [deltas.type]; | ||
} else if (deltas.type) { | ||
species.types = [species.types[0], deltas.type]; | ||
} | ||
const baseStats = species.baseStats; | ||
for (const statName in baseStats) { | ||
baseStats[statName] = this.clampIntRange(baseStats[statName] + deltas.baseStats[statName], 1, 255); | ||
} | ||
species.weighthg = Math.max(1, species.weighthg + deltas.weighthg); | ||
species.originalMega = deltas.originalMega; | ||
species.requiredItem = deltas.requiredItem; | ||
if (deltas.isMega) species.isMega = true; | ||
if (deltas.isPrimal) species.isPrimal = true; | ||
return species; | ||
}, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters