mirror of
https://github.com/smogon/pokemon-showdown.git
synced 2026-06-02 22:08:36 -05:00
Merge branch 'master' into patch-4
This commit is contained in:
commit
2cc6e92239
|
|
@ -232,21 +232,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Open Team Sheets', 'Limit One Restricted'],
|
||||
restricted: ['Restricted Legendary'],
|
||||
},
|
||||
{
|
||||
name: "[Gen 9] VGC 2025 Reg H",
|
||||
mod: 'gen9',
|
||||
gameType: 'doubles',
|
||||
bestOfDefault: true,
|
||||
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Open Team Sheets'],
|
||||
banlist: ['Sub-Legendary', 'Paradox', 'Gouging Fire', 'Iron Boulder', 'Iron Crown', 'Raging Bolt'],
|
||||
},
|
||||
{
|
||||
name: "[Gen 9] VGC 2025 Reg H (Bo3)",
|
||||
mod: 'gen9',
|
||||
gameType: 'doubles',
|
||||
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Force Open Team Sheets', 'Best of = 3'],
|
||||
banlist: ['Sub-Legendary', 'Paradox', 'Gouging Fire', 'Iron Boulder', 'Iron Crown', 'Raging Bolt'],
|
||||
},
|
||||
{
|
||||
name: "[Gen 9] VGC 2025 Reg I",
|
||||
mod: 'gen9',
|
||||
|
|
@ -354,7 +339,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
'Koraidon', 'Kyogre', 'Kyurem-Black', 'Landorus-Therian', 'Lunala', 'Necrozma-Dusk-Mane', 'Rayquaza', 'Regieleki', 'Ribombee', 'Skeledirge', 'Terapagos',
|
||||
'Ting-Lu', 'Zacian-Crowned',
|
||||
// Ubers UUBL + Lunala, Arceus-Ghost, Arceus-Water
|
||||
'Arceus-Dragon', 'Arceus-Fire', 'Arceus-Flying', 'Arceus-Steel', 'Necrozma-Dawn-Wings', 'Shaymin-Sky', 'Spectrier', 'Zacian', 'Zekrom',
|
||||
'Arceus-Dragon', 'Arceus-Electric', 'Arceus-Fire', 'Arceus-Flying', 'Arceus-Steel', 'Necrozma-Dawn-Wings', 'Shaymin-Sky', 'Spectrier', 'Zacian', 'Zekrom',
|
||||
],
|
||||
},
|
||||
{
|
||||
|
|
@ -387,8 +372,8 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
ruleset: ['[Gen 9] LC'],
|
||||
banlist: [
|
||||
'Chinchou', 'Diglett-Alola', 'Elekid', 'Foongus', 'Glimmet', 'Gothita', 'Grookey', 'Growlithe-Hisui', 'Larvesta', 'Mareanie', 'Mienfoo',
|
||||
'Mudbray', 'Munchlax', 'Pawniard', 'Sandshrew-Alola', 'Shellder', 'Shellos', 'Shroodle', 'Snover', 'Stunky', 'Timburr', 'Tinkatink',
|
||||
'Toedscool', 'Trapinch', 'Vullaby', 'Wingull', 'Zorua-Hisui',
|
||||
'Mudbray', 'Pawniard', 'Sandshrew-Alola', 'Shellder', 'Shellos', 'Shroodle', 'Snover', 'Stunky', 'Timburr', 'Tinkatink', 'Toedscool',
|
||||
'Trapinch', 'Vullaby', 'Wingull', 'Zorua-Hisui',
|
||||
// LC UUBL
|
||||
'Deerling', 'Minccino',
|
||||
],
|
||||
|
|
@ -521,202 +506,34 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
column: 2,
|
||||
},
|
||||
{
|
||||
name: "[Gen 9] Fortemons",
|
||||
desc: `Put an attacking move in the item slot to have all of a Pokémon's attacks inherit its properties.`,
|
||||
name: "[Gen 9] Convergence",
|
||||
desc: `Allows all Pokémon that have identical types to share moves and abilities.`,
|
||||
mod: 'gen9',
|
||||
// searchShow: false,
|
||||
ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Terastal Clause'],
|
||||
ruleset: ['Standard OMs', 'Ability Clause = 1', 'Sleep Moves Clause', 'Convergence Legality', 'Terastal Clause', '!Obtainable Abilities'],
|
||||
banlist: [
|
||||
'Annihilape', 'Arceus', 'Archaludon', 'Azumarill', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Cloyster', 'Comfey', 'Deoxys-Normal', 'Deoxys-Attack',
|
||||
'Dialga-Base', 'Espathra', 'Eternatus', 'Flutter Mane', 'Giratina-Altered', 'Great Tusk', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Iron Treads', 'Koraidon', 'Kyogre',
|
||||
'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Meowscarada', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palafin',
|
||||
'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Samurott-Hisui', 'Shaymin-Sky', 'Skeledirge', 'Smeargle', 'Solgaleo', 'Spectrier', 'Sneasler', 'Terapagos',
|
||||
'Urshifu', 'Urshifu-Rapid-Strike', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Serene Grace', 'Shadow Tag',
|
||||
'Damp Rock', 'Heat Rock', 'Light Clay', 'Baton Pass', 'Beat Up', 'Fake Out', 'Last Respects', 'move:Metronome', 'Shed Tail',
|
||||
'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Comfey', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Deoxys-Speed',
|
||||
'Dialga', 'Dialga-Origin', 'Dondozo', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Haxorus', 'Ho-oh', 'Inteleon',
|
||||
'Iron Bundle', 'Iron Hands', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lilligant-Hisui', 'Lugia', 'Lunala',
|
||||
'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', 'Palkia-Origin',
|
||||
'Porygon-Z', 'Primarina', 'Rayquaza', 'Regieleki', 'Regigigas', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', 'Solgaleo', 'Slaking', 'Smeargle', 'Sneasler',
|
||||
'Spectrier', 'Umbreon', 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Walking Wake', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
|
||||
'Zekrom', 'Arena Trap', 'Comatose', 'Contrary', 'Drizzle', 'Drought', 'Imposter', 'Moody', 'Pure Power', 'Shadow Tag', 'Speed Boost', 'Unburden',
|
||||
'King\'s Rock', 'Light Clay', 'Razor Fang', 'Baton Pass', 'Belly Drum', 'Boomburst', 'Extreme Speed', 'Final Gambit', 'Last Respects', 'Population Bomb',
|
||||
'Quiver Dance', 'Rage Fist', 'Shed Tail', 'Shell Smash', 'Spore', 'Transform',
|
||||
],
|
||||
restricted: [
|
||||
'Doom Desire', 'Dynamic Punch', 'Electro Ball', 'Explosion', 'Gyro Ball', 'Final Gambit', 'Flail', 'Flip Turn', 'Fury Cutter', 'Future Sight', 'Grass Knot',
|
||||
'Grassy Glide', 'Hard Press', 'Heavy Slam', 'Heat Crash', 'Inferno', 'Low Kick', 'Misty Explosion', 'Nuzzle', 'Power Trip', 'Reversal', 'Self-Destruct',
|
||||
'Spit Up', 'Stored Power', 'Tera Blast', 'U-turn', 'Weather Ball', 'Zap Cannon',
|
||||
],
|
||||
onValidateTeam(team) {
|
||||
const itemTable = new Set<string>();
|
||||
for (const set of team) {
|
||||
const forte = this.toID(set.item);
|
||||
if (!forte) continue;
|
||||
const move = this.dex.moves.get(forte);
|
||||
if (move.exists && move.id !== 'metronome') {
|
||||
if (itemTable.has(forte)) {
|
||||
return [
|
||||
`You are limited to one of each move in the item slot per team.`,
|
||||
`(You have more than one ${move.name}.)`,
|
||||
];
|
||||
}
|
||||
itemTable.add(forte);
|
||||
}
|
||||
}
|
||||
},
|
||||
validateSet(set, teamHas) {
|
||||
const item = set.item;
|
||||
const species = this.dex.species.get(set.species);
|
||||
const move = this.dex.moves.get(item);
|
||||
if (!move.exists || move.id === 'metronome' || move.category === 'Status') {
|
||||
return this.validateSet(set, teamHas);
|
||||
}
|
||||
set.item = '';
|
||||
const problems = this.validateSet(set, teamHas) || [];
|
||||
set.item = item;
|
||||
if (this.checkCanLearn(move, species, this.allSources(species), set)) {
|
||||
problems.push(`${species.name} can't learn ${move.name}.`);
|
||||
}
|
||||
if (set.moves.map(this.toID).includes(move.id)) {
|
||||
problems.push(`Moves in the item slot can't be in the moveslots as well.`);
|
||||
}
|
||||
if (this.ruleTable.has(`-move:${move.id}`)) {
|
||||
problems.push(`The move ${move.name} is fully banned.`);
|
||||
}
|
||||
const accuracyLoweringMove =
|
||||
move.secondaries?.some(secondary => secondary.boosts?.accuracy && secondary.boosts?.accuracy < 0);
|
||||
const flinchMove = move.secondaries?.some(secondary => secondary.volatileStatus === 'flinch');
|
||||
const freezeMove = move.secondaries?.some(secondary => secondary.status === 'frz') || move.id === 'triattack';
|
||||
if (
|
||||
this.ruleTable.isRestricted(`move:${move.id}`) ||
|
||||
((accuracyLoweringMove || move.ohko || move.multihit || move.id === 'beatup' || move.flags['charge'] ||
|
||||
move.priority > 0 || move.damageCallback || flinchMove || freezeMove) &&
|
||||
!this.ruleTable.has(`+move:${move.id}`))
|
||||
) {
|
||||
problems.push(`The move ${move.name} can't be used as an item.`);
|
||||
}
|
||||
return problems.length ? problems : null;
|
||||
},
|
||||
onBegin() {
|
||||
for (const pokemon of this.getAllPokemon()) {
|
||||
const move = this.dex.getActiveMove(pokemon.set.item);
|
||||
if (move.exists && move.category !== 'Status') {
|
||||
pokemon.m.forte = move;
|
||||
pokemon.item = 'mail' as ID;
|
||||
}
|
||||
}
|
||||
},
|
||||
onModifyMovePriority: 1,
|
||||
onModifyMove(move, pokemon, target) {
|
||||
const forte: ActiveMove = pokemon.m.forte;
|
||||
if (move.category !== 'Status' && forte) {
|
||||
move.flags = { ...move.flags, ...forte.flags };
|
||||
if (forte.self) {
|
||||
if (forte.self.onHit && move.self?.onHit) {
|
||||
for (const i in forte.self) {
|
||||
if (i.startsWith('onHit')) continue;
|
||||
(move.self as any)[i] = (forte.self as any)[i];
|
||||
}
|
||||
} else {
|
||||
move.self = { ...move.self, ...forte.self };
|
||||
}
|
||||
}
|
||||
if (forte.selfBoost?.boosts) {
|
||||
if (!move.selfBoost?.boosts) move.selfBoost = { boosts: {} };
|
||||
let boostid: BoostID;
|
||||
for (boostid in forte.selfBoost.boosts) {
|
||||
if (!move.selfBoost.boosts![boostid]) move.selfBoost.boosts![boostid] = 0;
|
||||
move.selfBoost.boosts![boostid]! += forte.selfBoost.boosts[boostid]!;
|
||||
}
|
||||
}
|
||||
if (forte.secondaries) {
|
||||
move.secondaries = [...(move.secondaries || []), ...forte.secondaries];
|
||||
}
|
||||
move.critRatio = (move.critRatio || 1) + (forte.critRatio || 1) - 1;
|
||||
const VALID_PROPERTIES = [
|
||||
'alwaysHit', 'basePowerCallback', 'breaksProtect', 'drain', 'forceSTAB', 'forceSwitch', 'hasCrashDamage', 'hasSheerForce',
|
||||
'ignoreAbility', 'ignoreAccuracy', 'ignoreDefensive', 'ignoreEvasion', 'ignoreImmunity', 'mindBlownRecoil', 'noDamageVariance',
|
||||
'ohko', 'overrideDefensivePokemon', 'overrideDefensiveStat', 'overrideOffensivePokemon', 'overrideOffensiveStat', 'pseudoWeather',
|
||||
'recoil', 'selfdestruct', 'selfSwitch', 'sleepUsable', 'smartTarget', 'stealsBoosts', 'thawsTarget', 'volatileStatus', 'willCrit',
|
||||
] as const;
|
||||
for (const property of VALID_PROPERTIES) {
|
||||
if (forte[property]) {
|
||||
move[property] = forte[property] as any;
|
||||
}
|
||||
}
|
||||
// Added here because onEffectiveness doesn't have an easy way to reference the source
|
||||
if (forte.onEffectiveness) {
|
||||
move.onEffectiveness = function (typeMod, t, type, m) {
|
||||
return forte.onEffectiveness!.call(this, typeMod, t, type, m);
|
||||
};
|
||||
}
|
||||
forte.onModifyMove?.call(this, move, pokemon, target);
|
||||
}
|
||||
},
|
||||
onModifyPriority(priority, source, target, move) {
|
||||
const forte = source?.m.forte;
|
||||
if (move.category !== 'Status' && forte) {
|
||||
if (source.hasAbility('Triage') && forte.flags['heal']) {
|
||||
return priority + (move.flags['heal'] ? 0 : 3);
|
||||
}
|
||||
return priority + forte.priority;
|
||||
}
|
||||
},
|
||||
onModifyTypePriority: 1,
|
||||
onModifyType(move, pokemon, target) {
|
||||
const forte = pokemon.m.forte;
|
||||
if (move.category !== 'Status' && forte) {
|
||||
this.singleEvent('ModifyType', forte, null, pokemon, target, move, move);
|
||||
}
|
||||
},
|
||||
onHitPriority: 1,
|
||||
onHit(target, source, move) {
|
||||
const forte = source.m.forte;
|
||||
if (move?.category !== 'Status' && forte) {
|
||||
this.singleEvent('Hit', forte, {}, target, source, move);
|
||||
if (forte.self) this.singleEvent('Hit', forte.self, {}, source, source, move);
|
||||
this.singleEvent('AfterHit', forte, {}, target, source, move);
|
||||
}
|
||||
},
|
||||
onAfterSubDamage(damage, target, source, move) {
|
||||
const forte = source.m.forte;
|
||||
if (move?.category !== 'Status' && forte) {
|
||||
this.singleEvent('AfterSubDamage', forte, null, target, source, move, damage);
|
||||
}
|
||||
},
|
||||
onModifySecondaries(secondaries, target, source, move) {
|
||||
if (secondaries.some(s => !!s.self)) move.selfDropped = false;
|
||||
},
|
||||
onAfterMoveSecondaryPriority: 1,
|
||||
onAfterMoveSecondarySelf(source, target, move) {
|
||||
const forte = source.m.forte;
|
||||
if (move?.category !== 'Status' && forte) {
|
||||
this.singleEvent('AfterMoveSecondarySelf', forte, null, source, target, move);
|
||||
}
|
||||
},
|
||||
onBasePowerPriority: 1,
|
||||
onBasePower(basePower, source, target, move) {
|
||||
const forte = source.m.forte;
|
||||
if (move.category !== 'Status' && forte?.onBasePower) {
|
||||
forte.onBasePower.call(this, basePower, source, target, move);
|
||||
}
|
||||
},
|
||||
pokemon: {
|
||||
getItem() {
|
||||
const move = this.battle.dex.moves.get(this.m.forte);
|
||||
if (!move.exists) return Object.getPrototypeOf(this).getItem.call(this);
|
||||
return {
|
||||
...this.battle.dex.items.get('mail'),
|
||||
name: move.name, id: move.id, ignoreKlutz: true, onTakeItem: false,
|
||||
};
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "[Gen 9] Camomons",
|
||||
desc: `Pokémon have their types set to match their first two moves.`,
|
||||
name: "[Gen 9] VoltTurn Mayhem",
|
||||
desc: `Every move that targets a foe causes the user to switch out after use.`,
|
||||
mod: 'gen9',
|
||||
// searchShow: false,
|
||||
ruleset: ['Standard OMs', 'Sleep Clause Mod', 'Evasion Items Clause', 'Evasion Abilities Clause', 'Terastal Clause', 'Camomons Mod'],
|
||||
ruleset: ['Standard OMs', 'Sleep Moves Clause', 'VoltTurn Mayhem Mod'],
|
||||
banlist: [
|
||||
'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragonite', 'Drednaw',
|
||||
'Enamorus-Incarnate', 'Espathra', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Kommo-o', 'Koraidon', 'Kyogre',
|
||||
'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
|
||||
'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Tornadus-Therian', 'Ursaluna-Bloodmoon',
|
||||
'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Booster Energy', 'King\'s Rock', 'Light Clay', 'Razor Fang',
|
||||
'Baton Pass', 'Last Respects', 'Shed Tail',
|
||||
'Arceus', 'Chi-Yu', 'Chien-Pao', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darkrai', 'Deoxys-Attack', 'Deoxys-Normal', 'Deoxys-Speed', 'Dialga', 'Dialga-Origin', 'Dragonite',
|
||||
'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
|
||||
'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palafin', 'Palkia', 'Palkia-Origin', 'Raging Bolt', 'Rayquaza', 'Regieleki',
|
||||
'Reshiram', 'Shaymin-Sky', 'Solgaleo', 'Terapagos', 'Urshifu-Single-Strike', 'Zacian', 'Zacian-Crowned', 'Zekrom', 'King\'s Rock', 'Razor Fang', 'Fake Out',
|
||||
'Last Respects', 'Revival Blessing',
|
||||
],
|
||||
},
|
||||
|
||||
|
|
@ -784,7 +601,8 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
ruleset: ['Standard OMs', 'Evasion Items Clause', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Terastal Clause'],
|
||||
banlist: [
|
||||
'Calyrex-Shadow', 'Koraidon', 'Kyogre', 'Miraidon', 'Moody', 'Shadow Tag', 'Beedrillite', 'Blazikenite', 'Gengarite',
|
||||
'Kangaskhanite', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Red Orb', 'Baton Pass', 'Shed Tail',
|
||||
'Kangaskhanite', 'Lucarionite Z', 'Malamarite', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Red Orb', 'Baton Pass',
|
||||
'Shed Tail',
|
||||
],
|
||||
restricted: [
|
||||
'Arceus', 'Basculegion-M', 'Calyrex-Ice', 'Ceruledge', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Eternatus', 'Flutter Mane',
|
||||
|
|
@ -832,8 +650,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
// Place volatiles on the Pokémon to show its mega-evolved condition and details
|
||||
this.add('-start', pokemon, originalSpecies.requiredItems?.[0] || originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]');
|
||||
const oSpecies = this.dex.species.get(pokemon.m.originalSpecies);
|
||||
if (oSpecies.types.length !== pokemon.species.types.length || oSpecies.types[1] !== pokemon.species.types[1] ||
|
||||
oSpecies.types[0] !== pokemon.species.types[0]) {
|
||||
if (oSpecies.types.join('/') !== pokemon.species.types.join('/')) {
|
||||
this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
|
||||
}
|
||||
}
|
||||
|
|
@ -1038,6 +855,21 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
side.sideConditions[sideCondition.id].duration = 0;
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "[Gen 9] Camomons",
|
||||
desc: `Pokémon have their types set to match their first two moves.`,
|
||||
mod: 'gen9',
|
||||
searchShow: false,
|
||||
ruleset: ['Standard OMs', 'Sleep Clause Mod', 'Evasion Items Clause', 'Evasion Abilities Clause', 'Terastal Clause', 'Camomons Mod'],
|
||||
banlist: [
|
||||
'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragonite', 'Drednaw',
|
||||
'Enamorus-Incarnate', 'Espathra', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Kommo-o', 'Koraidon', 'Kyogre',
|
||||
'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
|
||||
'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Tornadus-Therian', 'Ursaluna-Bloodmoon',
|
||||
'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Booster Energy', 'King\'s Rock', 'Light Clay', 'Razor Fang',
|
||||
'Baton Pass', 'Last Respects', 'Shed Tail',
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "[Gen 9] Category Swap",
|
||||
desc: `All Special moves become Physical, and all Physical moves become Special.`,
|
||||
|
|
@ -1052,23 +884,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
'Razor Fang', 'Baton Pass', 'Draco Meteor', 'Last Respects', 'Overheat', 'Shed Tail',
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "[Gen 9] Convergence",
|
||||
desc: `Allows all Pokémon that have identical types to share moves and abilities.`,
|
||||
mod: 'gen9',
|
||||
searchShow: false,
|
||||
ruleset: ['Standard OMs', 'Sleep Clause Mod', 'Convergence Legality', 'Terastal Clause', '!Obtainable Abilities'],
|
||||
banlist: [
|
||||
'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Deoxys-Speed', 'Dialga', 'Dialga-Origin',
|
||||
'Dondozo', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-oh', 'Inteleon', 'Iron Bundle', 'Iron Hands', 'Koraidon', 'Kyogre',
|
||||
'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lilligant-Hisui', 'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings',
|
||||
'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', 'Palkia-Origin', 'Primarina', 'Rayquaza', 'Regieleki', 'Regigigas', 'Reshiram', 'Shaymin-Sky',
|
||||
'Solgaleo', 'Slaking', 'Smeargle', 'Spectrier', 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Walking Wake', 'Zacian', 'Zacian-Crowned', 'Zamazenta',
|
||||
'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Comatose', 'Contrary', 'Drizzle', 'Imposter', 'Moody', 'Pure Power', 'Shadow Tag', 'Speed Boost', 'Unburden',
|
||||
'Heat Rock', 'King\'s Rock', 'Light Clay', 'Razor Fang', 'Baton Pass', 'Boomburst', 'Extreme Speed', 'Last Respects', 'Population Bomb', 'Quiver Dance',
|
||||
'Rage Fist', 'Shed Tail', 'Shell Smash', 'Spore', 'Transform',
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "[Gen 9] Cross Evolution",
|
||||
desc: `Give a Pokémon a Pokémon name of the next evolution stage as a nickname to inherit stat changes, typing, abilities, and moves from the next stage Pokémon.`,
|
||||
|
|
@ -1278,6 +1093,190 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "[Gen 9] Fortemons",
|
||||
desc: `Put an attacking move in the item slot to have all of a Pokémon's attacks inherit its properties.`,
|
||||
mod: 'gen9',
|
||||
searchShow: false,
|
||||
ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Terastal Clause'],
|
||||
banlist: [
|
||||
'Annihilape', 'Arceus', 'Archaludon', 'Azumarill', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Cloyster', 'Comfey', 'Deoxys-Normal', 'Deoxys-Attack',
|
||||
'Dialga-Base', 'Espathra', 'Eternatus', 'Flutter Mane', 'Giratina-Altered', 'Great Tusk', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Iron Treads', 'Koraidon', 'Kyogre',
|
||||
'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Meowscarada', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
|
||||
'Palafin', 'Palkia', 'Palkia-Origin', 'Quaquaval', 'Raging Bolt', 'Rayquaza', 'Reshiram', 'Samurott-Hisui', 'Shaymin-Sky', 'Skeledirge', 'Smeargle', 'Solgaleo',
|
||||
'Spectrier', 'Sneasler', 'Terapagos', 'Urshifu', 'Urshifu-Rapid-Strike', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap',
|
||||
'Moody', 'Serene Grace', 'Shadow Tag', 'Damp Rock', 'Heat Rock', 'Light Clay', 'Baton Pass', 'Beat Up', 'Fake Out', 'Last Respects', 'move:Metronome', 'Shed Tail',
|
||||
],
|
||||
restricted: [
|
||||
'Doom Desire', 'Dynamic Punch', 'Electro Ball', 'Explosion', 'Gyro Ball', 'Final Gambit', 'Flail', 'Flip Turn', 'Fury Cutter', 'Future Sight', 'Grass Knot',
|
||||
'Grassy Glide', 'Hard Press', 'Heavy Slam', 'Heat Crash', 'Inferno', 'Low Kick', 'Misty Explosion', 'Nuzzle', 'Power Trip', 'Reversal', 'Self-Destruct',
|
||||
'Spit Up', 'Stored Power', 'Tera Blast', 'U-turn', 'Weather Ball', 'Zap Cannon',
|
||||
],
|
||||
onValidateTeam(team) {
|
||||
const itemTable = new Set<string>();
|
||||
for (const set of team) {
|
||||
const forte = this.toID(set.item);
|
||||
if (!forte) continue;
|
||||
const move = this.dex.moves.get(forte);
|
||||
if (move.exists && move.id !== 'metronome') {
|
||||
if (itemTable.has(forte)) {
|
||||
return [
|
||||
`You are limited to one of each move in the item slot per team.`,
|
||||
`(You have more than one ${move.name}.)`,
|
||||
];
|
||||
}
|
||||
itemTable.add(forte);
|
||||
}
|
||||
}
|
||||
},
|
||||
validateSet(set, teamHas) {
|
||||
const item = set.item;
|
||||
const species = this.dex.species.get(set.species);
|
||||
const move = this.dex.moves.get(item);
|
||||
if (!move.exists || move.id === 'metronome' || move.category === 'Status') {
|
||||
return this.validateSet(set, teamHas);
|
||||
}
|
||||
set.item = '';
|
||||
const problems = this.validateSet(set, teamHas) || [];
|
||||
set.item = item;
|
||||
if (this.checkCanLearn(move, species, this.allSources(species), set)) {
|
||||
problems.push(`${species.name} can't learn ${move.name}.`);
|
||||
}
|
||||
if (set.moves.map(this.toID).includes(move.id)) {
|
||||
problems.push(`Moves in the item slot can't be in the moveslots as well.`);
|
||||
}
|
||||
if (this.ruleTable.has(`-move:${move.id}`)) {
|
||||
problems.push(`The move ${move.name} is fully banned.`);
|
||||
}
|
||||
const accuracyLoweringMove =
|
||||
move.secondaries?.some(secondary => secondary.boosts?.accuracy && secondary.boosts?.accuracy < 0);
|
||||
const flinchMove = move.secondaries?.some(secondary => secondary.volatileStatus === 'flinch');
|
||||
const freezeMove = move.secondaries?.some(secondary => secondary.status === 'frz') || move.id === 'triattack';
|
||||
if (
|
||||
this.ruleTable.isRestricted(`move:${move.id}`) ||
|
||||
((accuracyLoweringMove || move.ohko || move.multihit || move.id === 'beatup' || move.flags['charge'] ||
|
||||
move.priority > 0 || move.damageCallback || flinchMove || freezeMove) &&
|
||||
!this.ruleTable.has(`+move:${move.id}`))
|
||||
) {
|
||||
problems.push(`The move ${move.name} can't be used as an item.`);
|
||||
}
|
||||
return problems.length ? problems : null;
|
||||
},
|
||||
onBegin() {
|
||||
for (const pokemon of this.getAllPokemon()) {
|
||||
const move = this.dex.getActiveMove(pokemon.set.item);
|
||||
if (move.exists && move.category !== 'Status') {
|
||||
pokemon.m.forte = move;
|
||||
pokemon.item = 'mail' as ID;
|
||||
}
|
||||
}
|
||||
},
|
||||
onModifyMovePriority: 1,
|
||||
onModifyMove(move, pokemon, target) {
|
||||
const forte: ActiveMove = pokemon.m.forte;
|
||||
if (move.category !== 'Status' && forte) {
|
||||
move.flags = { ...move.flags, ...forte.flags };
|
||||
if (forte.self) {
|
||||
if (forte.self.onHit && move.self?.onHit) {
|
||||
for (const i in forte.self) {
|
||||
if (i.startsWith('onHit')) continue;
|
||||
(move.self as any)[i] = (forte.self as any)[i];
|
||||
}
|
||||
} else {
|
||||
move.self = { ...move.self, ...forte.self };
|
||||
}
|
||||
}
|
||||
if (forte.selfBoost?.boosts) {
|
||||
if (!move.selfBoost?.boosts) move.selfBoost = { boosts: {} };
|
||||
let boostid: BoostID;
|
||||
for (boostid in forte.selfBoost.boosts) {
|
||||
if (!move.selfBoost.boosts![boostid]) move.selfBoost.boosts![boostid] = 0;
|
||||
move.selfBoost.boosts![boostid]! += forte.selfBoost.boosts[boostid]!;
|
||||
}
|
||||
}
|
||||
if (forte.secondaries) {
|
||||
move.secondaries = [...(move.secondaries || []), ...forte.secondaries];
|
||||
}
|
||||
move.critRatio = (move.critRatio || 1) + (forte.critRatio || 1) - 1;
|
||||
const VALID_PROPERTIES = [
|
||||
'alwaysHit', 'basePowerCallback', 'breaksProtect', 'drain', 'forceSTAB', 'forceSwitch', 'hasCrashDamage', 'hasSheerForce',
|
||||
'ignoreAbility', 'ignoreAccuracy', 'ignoreDefensive', 'ignoreEvasion', 'ignoreImmunity', 'mindBlownRecoil', 'noDamageVariance',
|
||||
'ohko', 'overrideDefensivePokemon', 'overrideDefensiveStat', 'overrideOffensivePokemon', 'overrideOffensiveStat', 'pseudoWeather',
|
||||
'recoil', 'selfdestruct', 'selfSwitch', 'sleepUsable', 'smartTarget', 'stealsBoosts', 'thawsTarget', 'volatileStatus', 'willCrit',
|
||||
] as const;
|
||||
for (const property of VALID_PROPERTIES) {
|
||||
if (forte[property]) {
|
||||
move[property] = forte[property] as any;
|
||||
}
|
||||
}
|
||||
// Added here because onEffectiveness doesn't have an easy way to reference the source
|
||||
if (forte.onEffectiveness) {
|
||||
move.onEffectiveness = function (typeMod, t, type, m) {
|
||||
return forte.onEffectiveness!.call(this, typeMod, t, type, m);
|
||||
};
|
||||
}
|
||||
forte.onModifyMove?.call(this, move, pokemon, target);
|
||||
}
|
||||
},
|
||||
onModifyPriority(priority, source, target, move) {
|
||||
const forte = source?.m.forte;
|
||||
if (move.category !== 'Status' && forte) {
|
||||
if (source.hasAbility('Triage') && forte.flags['heal']) {
|
||||
return priority + (move.flags['heal'] ? 0 : 3);
|
||||
}
|
||||
return priority + forte.priority;
|
||||
}
|
||||
},
|
||||
onModifyTypePriority: 1,
|
||||
onModifyType(move, pokemon, target) {
|
||||
const forte = pokemon.m.forte;
|
||||
if (move.category !== 'Status' && forte) {
|
||||
this.singleEvent('ModifyType', forte, null, pokemon, target, move, move);
|
||||
}
|
||||
},
|
||||
onHitPriority: 1,
|
||||
onHit(target, source, move) {
|
||||
const forte = source.m.forte;
|
||||
if (move?.category !== 'Status' && forte) {
|
||||
this.singleEvent('Hit', forte, {}, target, source, move);
|
||||
if (forte.self) this.singleEvent('Hit', forte.self, {}, source, source, move);
|
||||
this.singleEvent('AfterHit', forte, {}, target, source, move);
|
||||
}
|
||||
},
|
||||
onAfterSubDamage(damage, target, source, move) {
|
||||
const forte = source.m.forte;
|
||||
if (move?.category !== 'Status' && forte) {
|
||||
this.singleEvent('AfterSubDamage', forte, null, target, source, move, damage);
|
||||
}
|
||||
},
|
||||
onModifySecondaries(secondaries, target, source, move) {
|
||||
if (secondaries.some(s => !!s.self)) move.selfDropped = false;
|
||||
},
|
||||
onAfterMoveSecondaryPriority: 1,
|
||||
onAfterMoveSecondarySelf(source, target, move) {
|
||||
const forte = source.m.forte;
|
||||
if (move?.category !== 'Status' && forte) {
|
||||
this.singleEvent('AfterMoveSecondarySelf', forte, null, source, target, move);
|
||||
}
|
||||
},
|
||||
onBasePowerPriority: 1,
|
||||
onBasePower(basePower, source, target, move) {
|
||||
const forte = source.m.forte;
|
||||
if (move.category !== 'Status' && forte?.onBasePower) {
|
||||
forte.onBasePower.call(this, basePower, source, target, move);
|
||||
}
|
||||
},
|
||||
pokemon: {
|
||||
getItem() {
|
||||
const move = this.battle.dex.moves.get(this.m.forte);
|
||||
if (!move.exists) return Object.getPrototypeOf(this).getItem.call(this);
|
||||
return {
|
||||
...this.battle.dex.items.get('mail'),
|
||||
name: move.name, id: move.id, ignoreKlutz: true, onTakeItem: false,
|
||||
};
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "[Gen 9] Frantic Fusions",
|
||||
desc: `Pokémon nicknamed after another Pokémon get their stats buffed by 1/4 of that Pokémon's stats, barring HP, and access to one of their abilities.`,
|
||||
|
|
@ -1655,7 +1654,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
banlist: [
|
||||
'Arceus', 'Annihilape', 'Archaludon', 'Basculegion', 'Basculegion-F', 'Baxcalibur', 'Braviary-Hisui', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Conkeldurr',
|
||||
'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Espathra', 'Eternatus', 'Excadrill', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon',
|
||||
'Ho-Oh', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Miraidon', 'Mewtwo', 'Necrozma-Dusk-Mane',
|
||||
'Ho-Oh', 'Iron Bundle', 'Kingambit', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Miraidon', 'Mewtwo', 'Necrozma-Dusk-Mane',
|
||||
'Necrozma-Dawn-Wings', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', 'Palkia-Origin', 'Porygon-Z', 'Rayquaza', 'Regieleki', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', 'Sneasler',
|
||||
'Solgaleo', 'Spectrier', 'Terapagos', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned',
|
||||
'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Bright Powder', 'Damp Rock', 'Icy Rock', 'King\'s Rock', 'Razor Fang', 'Smooth Rock', 'Baton Pass', 'Shed Tail', 'Last Respects',
|
||||
|
|
@ -2625,7 +2624,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
searchShow: false,
|
||||
ruleset: [
|
||||
'Standard NatDex',
|
||||
'!Species Clause', 'Forme Clause', 'Terastal Clause', 'DryPass Clause', 'Z-Move Clause', 'Mega Rayquaza Clause',
|
||||
'!Species Clause', 'Forme Clause', 'Terastal Clause', 'DryPass Clause', 'Mega Rayquaza Clause',
|
||||
],
|
||||
banlist: [
|
||||
'ND Uber', 'ND AG', 'ND OU', 'ND UUBL', 'ND UU', 'ND RUBL', 'ND RU', 'ND NFE', 'ND LC',
|
||||
|
|
@ -2633,9 +2632,10 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
'Last Respects', 'Shed Tail', 'Baton Pass + Contrary', 'Baton Pass + Rapid Spin',
|
||||
],
|
||||
unbanlist: [
|
||||
'Altaria-Base', 'Ampharos-Base', 'Arbok', 'Armaldo', 'Calyrex-Base', 'Castform-Base', 'Dewgong', 'Drifblim', 'Emolga', 'Fearow', 'Furret', 'Glalie-Base',
|
||||
'Gumshoos-Base', 'Heliolisk', 'Jumpluff', 'Kecleon', 'Ludicolo', 'Lunatone', 'Luxray', 'Lycanroc-Midnight', 'Meowstic-M', 'Primeape', 'Pupitar',
|
||||
'Pyroar-Base', 'Rampardos', 'Scovillain', 'Silvally-Fairy', 'Simisage', 'Sneasel-Hisui', 'Spidops', 'Swalot', 'Thievul', 'Tinkaton', 'Whiscash', 'Zangoose',
|
||||
'Beedrill-Base', 'Blastoise-Base', 'Bombirdier', 'Braviary-Hisui', 'Centiskorch', 'Cherrim', 'Cyclizar', 'Delcatty', 'Drampa-Base', 'Falinks-Base',
|
||||
'Galvantula', 'Glastrier', 'Goodra-Base', 'Gothitelle', 'Hypno', 'Klinklang', 'Lurantis-Base', 'Mamoswine', 'Mandibuzz', 'Mismagius', 'Mothim',
|
||||
'Oricorio-Baile', 'Perrserker', 'Revavroom', 'Scrafty-Base', 'Serperior', 'Sinistcha', 'Skarmory-Base', 'Squawkabilly-Green', 'Swoobat', 'Uxie',
|
||||
'Vanilluxe', 'Walrein', 'Wishiwashi', 'Wyrdeer', 'Ultranecrozium Z', 'Solganium Z', 'Lunalium Z', 'Mewnium Z', 'Marshadium Z',
|
||||
],
|
||||
// Stupid hardcode
|
||||
onValidateSet(set, format, setHas, teamHas) {
|
||||
|
|
@ -2644,6 +2644,9 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
if (item.megaEvolves && !(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}`))) {
|
||||
return [`${item.name} is banned.`];
|
||||
}
|
||||
}
|
||||
const species = this.dex.species.get(set.species);
|
||||
if (set.moves.map(x => this.toID(this.dex.moves.get(x).realMove) || x).includes('hiddenpower') &&
|
||||
|
|
@ -2669,7 +2672,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
mod: 'gen9',
|
||||
searchShow: false,
|
||||
ruleset: ['[Gen 9] National Dex UU'],
|
||||
banlist: ['ND UU', 'ND RUBL', 'Slowbro-Base + Slowbronite'],
|
||||
banlist: ['ND UU', 'ND RUBL', 'Slowbronite'],
|
||||
},
|
||||
{
|
||||
name: "[Gen 9] National Dex LC",
|
||||
|
|
@ -2705,18 +2708,18 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
gameType: 'doubles',
|
||||
ruleset: ['Standard Doubles', 'NatDex Mod', 'Evasion Abilities Clause'],
|
||||
banlist: [
|
||||
'Annihilape', 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Eternatus', 'Genesect', 'Gengar-Mega', 'Giratina',
|
||||
'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Koraidon', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Melmetal', 'Metagross-Mega', 'Mewtwo',
|
||||
'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Shedinja', 'Solgaleo',
|
||||
'Stakataka', 'Terapagos', 'Urshifu', 'Urshifu-Rapid-Strike', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom',
|
||||
'Zygarde-50%', 'Zygarde-Complete', 'Commander', 'Power Construct', 'Shadow Tag', 'Eevium Z', 'Assist', 'Coaching', 'Dark Void', 'Swagger',
|
||||
'Annihilape', 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Espathra', 'Eternatus', 'Genesect', 'Gengar-Mega',
|
||||
'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Koraidon', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Melmetal', 'Metagross-Mega',
|
||||
'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Shedinja',
|
||||
'Solgaleo', 'Stakataka', 'Terapagos', 'Urshifu', 'Urshifu-Rapid-Strike', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
|
||||
'Zekrom', 'Zygarde-50%', 'Zygarde-Complete', 'Commander', 'Power Construct', 'Shadow Tag', 'Eevium Z', 'Assist', 'Coaching', 'Dark Void', 'Swagger',
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "[Gen 9] National Dex Doubles Ubers",
|
||||
mod: 'gen9',
|
||||
gameType: 'doubles',
|
||||
searchShow: false,
|
||||
// searchShow: false,
|
||||
ruleset: ['Standard Doubles', 'NatDex Mod', '!Gravity Sleep Clause'],
|
||||
banlist: ['Shedinja', 'Assist'],
|
||||
},
|
||||
|
|
@ -2827,7 +2830,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
{
|
||||
name: "[Gen 9] National Dex STABmons",
|
||||
mod: 'gen9',
|
||||
// searchShow: false,
|
||||
searchShow: false,
|
||||
ruleset: ['Standard NatDex', 'STABmons Move Legality', '!Sleep Clause Mod', 'Sleep Moves Clause', 'Terastal Clause'],
|
||||
banlist: [
|
||||
'Araquanid', 'Arceus', 'Azumarill', 'Baxcalibur', 'Blastoise-Mega', 'Blaziken-Mega', 'Basculegion', 'Basculegion-F', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao',
|
||||
|
|
@ -2901,13 +2904,24 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
section: "Pet Mods",
|
||||
},
|
||||
{
|
||||
name: "[Gen 9] spookymod Random Battle",
|
||||
desc: `A Gen 9 Halloween-themed solomod comprised of entirely Ghost-types, some with more than 2 types.`,
|
||||
mod: 'spookymod',
|
||||
team: 'randomSPM',
|
||||
ruleset: ['Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Illusion Level Mod', 'Terastal Clause', 'Data Preview', 'Sprite Viewer', 'Spokymod'],
|
||||
name: "[Gen 9] Monster Hunter Random Battle",
|
||||
desc: `A Gen 9 solomod where each Pokemon is based on a monster from the Monster Hunter franchise.`,
|
||||
mod: 'monsterhunter',
|
||||
team: 'randomMHS',
|
||||
ruleset: [
|
||||
'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Illusion Level Mod',
|
||||
'Terastal Clause', 'Data Preview', 'Sprite Viewer', 'Mega Data Mod', 'Status Mod',
|
||||
],
|
||||
onBegin() {
|
||||
this.add(`raw|<div class='broadcast-green'><b>Need help with all of the new moves, abilities, and wacky stuff?<br />Then make sure to check out the <a href="https://docs.google.com/spreadsheets/d/1gE9pr0ghm1_Y8kPk0c-jXP93X57xlEr1OzzyXUVH90w/edit#gid=0" target="_blank">spookymod Spreadsheet</a> or use /dt!</b></div>`);
|
||||
this.add(`raw|<div class='broadcast-green'><b>Need help with all of the new moves, abilities, and wacky stuff?<br />Then make sure to check out the <a href="https://tinyurl.com/MonHunShow" target="_blank">MHS Wikia</a> or use /dt!</b></div>`);
|
||||
this.add('-message', `Welcome to Monster Hunter Showdown!`);
|
||||
this.add('-message', `Coded by KnivesMK, it reimagines the Monsters from Monster Hunter as Competitive Pokemon!`);
|
||||
this.add('-message', `Community Discord can be found here:`);
|
||||
this.add('-message', `https://discord.gg/JjjRGVrEvc`);
|
||||
this.add('-message', `Format Wikia can be found here:`);
|
||||
this.add('-message', `https://tinyurl.com/MonHunShow`);
|
||||
this.add('-message', `Special thanks to EggEggEgg for most of the Sprites, and Kestis for the Icons!`);
|
||||
this.add('-message', `(Monster Hunter Showdown is in no way officially affiliated with the Monster Hunter games or CAPCOM and is purely a fan project.)`);
|
||||
},
|
||||
onSwitchInPriority: 100,
|
||||
onSwitchIn(pokemon) {
|
||||
|
|
@ -2919,20 +2933,55 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
},
|
||||
},
|
||||
{
|
||||
name: "[Gen 9] spookymod", // roomtours
|
||||
desc: `A Gen 9 Halloween-themed solomod comprised of entirely Ghost-types, some with more than 2 types.`,
|
||||
mod: 'spookymod',
|
||||
name: "[Gen 9] Monster Hunter Showdown OU", // Roomtours
|
||||
desc: `A Gen 9 solomod where each Pokemon is based on a monster from the Monster Hunter franchise.`,
|
||||
mod: 'monsterhunter',
|
||||
searchShow: false,
|
||||
ruleset: ['Standard NatDex', 'Terastal Clause', 'Z-Move Clause', 'Data Preview', 'Sprite Viewer', 'Spokymod'],
|
||||
banlist: ['All Pokemon'],
|
||||
ruleset: ['Standard NatDex', 'Data Preview', 'Mega Data Mod', 'Status Mod', 'Terastal Clause', 'Sprite Viewer'],
|
||||
banlist: [
|
||||
'All Pokemon', 'Normalium Z', 'Fairium Z', 'Fightinium Z', 'Firium Z', 'Flyinium Z', 'Darkinium Z', 'Dragonium Z',
|
||||
'Buginium Z', 'Waterium Z', 'Electrium Z', 'Ghostium Z', 'Grassium Z', 'Groundium Z', 'Icium Z', 'Poisonium Z',
|
||||
'Psychium Z', 'Rockium Z', 'Steelium Z', 'Shed Tail', 'Baton Pass',
|
||||
],
|
||||
unbanlist: [
|
||||
'Aegislash', 'Banette-Mega', 'Ceruledge', 'Dofagrigus', 'Eddy Azbear', 'Flutter Mane', 'Flutter Mane 2',
|
||||
'Gourgeist-Tiny', 'Gourgeist', 'Gourgeist-Large', 'Gourgeist-Gigantic', 'Houndstone', 'Indeedee', 'Jableye',
|
||||
'JOB APPLICATION', 'Kilotic', 'Lanturn-Evil', 'MERASMUS', 'Nursola', 'Okestar Spirit', 'PPiritomb', 'Quagsire-Dead',
|
||||
'Rotom', 'Shedinja', 'Trevenant', 'Ursaluna-Bloodmoon', 'Vampharos', 'Wunala', 'XORygon-Z', 'Yveltal', 'Zoroark-Hisui',
|
||||
'Acidinus', 'Agnaktor-EX', 'Ahtal-Ka', 'Alatreon', 'Amatsu', 'Arbitrellian',
|
||||
'Arkveld', 'Ash-Shan Lung', 'Auroracanth', 'Blackveil Hazak', 'Blue Kutku', 'Brachydios', 'Ceadeus',
|
||||
'Chameleos', 'Chaotic Gore', 'Dah\'ren Mohran', 'Dalamadur', 'Deviljho-Starving', 'Diablos', 'Dire Miralis',
|
||||
'Doomtrellian', 'Duremudira', 'Eruzerion', 'Espinas', 'Estrellian', 'Fatalis', 'Flaminas', 'Gaismagorm',
|
||||
'Gammoth', 'Glavenus', 'Glowstrax', 'Gogmazios', 'Goldeus', 'Goldthian', 'Goss Harag', 'Greencuga', 'Gureadomosu',
|
||||
'Hallowed Mohran', 'Harudomerugu', 'Inagami', 'Inferonis', 'Jhen Mohran', 'Jin Dahaad', 'Jyuratodus', 'Kirin',
|
||||
'Kulve Taroth', 'Kushala Daora', 'Landgiacrus', 'Lao-Shan Lung', 'Lucacuga', 'Magmadron', 'Magnamalo', 'Malzeno',
|
||||
'Nakarkos', 'Namielle', 'Nargacuga', 'Narwa', 'Nef-Garmat', 'Nergigante', 'Odibatorasu', 'Oltura', 'Oltura-Larval',
|
||||
'Oroshirin', 'Palepinas', 'Primozeno', 'Rajang', 'Rathian', 'Rey Dau', 'Rushala Daora', 'Safi\'jiiva', 'Sandrioth',
|
||||
'Seregios', 'Shagaru Magala', 'Shahmadur', 'Shantien', 'Shara Ishvalda', 'Shen Gaoren', 'Silvalos', 'Tartaronis',
|
||||
'Teostra', 'Tigrex', 'Ukanlos', 'Unknown', 'Uth Duna', 'Valstrax', 'Velkhana', 'Vizutsune', 'Xeno\'jiiva', 'Xu Wu',
|
||||
'Yama Kurai', 'Yama Tsukami', 'Zoh Shia', 'Zorah Magdaros', 'Agnaktor', 'Ajarakan', 'Akantor', 'Akura Vashimu',
|
||||
'Almudron', 'Anjanath', 'Astalos', 'Azurelos', 'Balahara', 'Barioth', 'Basarios-Sandstone', 'Bazelgeuse', 'Bishaten',
|
||||
'Blackblos', 'Blackvios', 'Coral-Pukei', 'Daimyo Hermitaur', 'Deviljho', 'Disufiroa', 'Disufiroa-Sol', 'Doshaguma',
|
||||
'Duramboros', 'Ebogaron', 'Fuljanath', 'Garangolm', 'Glanaktor', 'Gore Magala', 'Gravios', 'Great Izuchi', 'Greensioth',
|
||||
'Gypceros', 'Ibushi', 'Ivogiacrus', 'Kulu-Ya-Ku', 'Lagiacrus', 'Lala Barina', 'Legiana', 'Lunagaron', 'Lunastra',
|
||||
'Malfestio', 'Mizutsune', 'Molgrex', 'Monoblos', 'Najarala', 'Nightlumu', 'Nu Udra', 'Odogaron', 'Orangaten', 'Paolumu',
|
||||
'Pinkthian', 'Plesioth', 'Pukei-Pukei', 'Pyre-Kadaki', 'Radobaan', 'Rakna-Kadaki', 'Rathalos', 'Rompopolo',
|
||||
'Rustramboros', 'Seltas Queen', 'Shogun Ceanataur', 'Stygiogre', 'Terrataur', 'Tetranadon', 'Tzitzi-Ya-Ku',
|
||||
'Uragaan', 'Vaal Hazak', 'Whiteblos', 'Yian Garuga', 'Yian Kutku', 'Zamtrios', 'Zinogre', 'Zinogre-Howling', 'Aknosom',
|
||||
'Arzuros', 'Balenox', 'Banbaro', 'Barroth', 'Basarios', 'Beotodus', 'Blangonga', 'Bulldrome', 'Cephadrome',
|
||||
'Chatacabra', 'Congalala', 'Crysarios', 'Dodogama', 'Emgalala', 'Gendrome', 'Giadrome', 'Gigginox', 'Gobul',
|
||||
'Great Baggi', 'Great Girros', 'Great Jaggi', 'Great Jagras', 'Great Maccao', 'Great Wroggi', 'Hirabami',
|
||||
'Hypnocatrice', 'Iodrome', 'Kecha Wacha', 'Khezu', 'King Shakalaka', 'Lagombi', 'Lavasioth', 'Nerscylla',
|
||||
'Nibelsnarf', 'Palamute', 'Palico', 'Pokaradon', 'Purple Ludroth', 'Quematrice', 'Qurupeco', 'Redzu', 'Royal Ludroth',
|
||||
'Seltas', 'Shroudcylla', 'Somnacanth', 'Spiribird', 'Spiribird-Orange', 'Spiribird-Red', 'Spiribird-Yellow',
|
||||
'Tetsucabra', 'Tobi-Kadachi', 'Velocidrome', 'Vespoid Queen', 'Volvidon',
|
||||
],
|
||||
onBegin() {
|
||||
this.add(`raw|<div class='broadcast-green'><b>Need help with all of the new moves, abilities, and wacky stuff?<br />Then make sure to check out the <a href="https://docs.google.com/spreadsheets/d/1gE9pr0ghm1_Y8kPk0c-jXP93X57xlEr1OzzyXUVH90w/edit#gid=0" target="_blank">spookymod Spreadsheet</a> or use /dt!</b></div>`);
|
||||
this.add(`raw|<div class='broadcast-green'><b>Need help with all of the new moves, abilities, and wacky stuff?<br />Then make sure to check out the <a href="https://tinyurl.com/MonHunShow" target="_blank">MHS Wikia</a> or use /dt!</b></div>`);
|
||||
this.add('-message', `Welcome to Monster Hunter Showdown!`);
|
||||
this.add('-message', `Coded by KnivesMK, it reimagines the Monsters from Monster Hunter as Competitive Pokemon!`);
|
||||
this.add('-message', `Community Discord can be found here:`);
|
||||
this.add('-message', `https://discord.gg/JjjRGVrEvc`);
|
||||
this.add('-message', `Format Wikia can be found here:`);
|
||||
this.add('-message', `https://tinyurl.com/MonHunShow`);
|
||||
this.add('-message', `Special thanks to EggEggEgg for most of the Sprites, and Kestis for the Icons!`);
|
||||
this.add('-message', `(Monster Hunter Showdown is in no way officially affiliated with the Monster Hunter games or CAPCOM and is purely a fan project.)`);
|
||||
},
|
||||
onSwitchInPriority: 100,
|
||||
onSwitchIn(pokemon) {
|
||||
|
|
@ -2970,7 +3019,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
],
|
||||
mod: 'gen9legendsou',
|
||||
ruleset: ['Standard', 'Sleep Moves Clause', '!Sleep Clause Mod', 'Min Source Gen = 3', 'Terastal Clause'],
|
||||
banlist: ['Uber', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Quick Claw', 'Baton Pass'],
|
||||
banlist: ['Uber', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Light Clay', 'Quick Claw', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail'],
|
||||
},
|
||||
|
||||
// Randomized Format Spotlight
|
||||
|
|
@ -2987,6 +3036,9 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
team: 'random',
|
||||
ruleset: ['Force of the Fallen Mod'],
|
||||
bestOfDefault: true,
|
||||
onBegin() {
|
||||
this.add(`raw|<div class="broadcast-blue">The Ladder Achievements Project for Force of the Fallen Random Roulette has officially started! Check <a href="https://www.smogon.com/forums/threads/3773734">this thread</a> to see what the project is all about and the challenges for this cycle!</div>`);
|
||||
},
|
||||
},
|
||||
|
||||
// Randomized Metas
|
||||
|
|
@ -3383,7 +3435,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
'Poison Heal', 'Power Construct', 'Pressure', 'Pure Power', 'Rain Dish', 'Rough Skin', 'Sand Spit', 'Sand Stream', 'Seed Sower', 'Stamina', 'Toxic Chain',
|
||||
'Volt Absorb', 'Water Absorb', 'Wonder Guard', 'Harvest + Jaboca Berry', 'Harvest + Rowap Berry', 'Aguav Berry', 'Assault Vest', 'Berry', 'Berry Juice',
|
||||
'Berserk Gene', 'Black Sludge', 'Enigma Berry', 'Figy Berry', 'Gold Berry', 'Iapapa Berry', 'Kangaskhanite', 'Leftovers', 'Mago Berry', 'Medichamite',
|
||||
'Steel Memory', 'Oran Berry', 'Rocky Helmet', 'Shell Bell', 'Sitrus Berry', 'Wiki Berry',
|
||||
'Steel Memory', 'Oran Berry', 'Rocky Helmet', 'Shell Bell', 'Sitrus Berry', 'Tatsugirinite', 'Wiki Berry',
|
||||
],
|
||||
onValidateSet(set) {
|
||||
const species = this.dex.species.get(set.species);
|
||||
|
|
@ -3398,8 +3450,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)`,
|
||||
];
|
||||
|
|
@ -3643,19 +3695,26 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
column: 4,
|
||||
},
|
||||
{
|
||||
name: "[Gen 8] UU",
|
||||
mod: 'gen8',
|
||||
name: "[Gen 1] Ubers",
|
||||
mod: 'gen1',
|
||||
// searchShow: false,
|
||||
ruleset: ['[Gen 8] OU'],
|
||||
banlist: ['OU', 'UUBL', 'Light Clay'],
|
||||
ruleset: ['Standard'],
|
||||
},
|
||||
{
|
||||
name: "[Gen 8] CAP",
|
||||
desc: "The Create-A-Pokémon project is a community dedicated to exploring and understanding the competitive Pokémon metagame by designing, creating, and playtesting new Pokémon concepts.",
|
||||
mod: 'gen8',
|
||||
name: "[Gen 3] Orre Colosseum",
|
||||
mod: 'gen3colosseum',
|
||||
// searchShow: false,
|
||||
ruleset: ['[Gen 8] OU', '+CAP'],
|
||||
banlist: ['Crucibellite'],
|
||||
gameType: 'doubles',
|
||||
ruleset: [
|
||||
'Obtainable', 'Team Preview', 'Species Clause', 'Stadium Sleep Clause', 'Freeze Clause Mod', 'Max Team Size = 6', 'VGC Timer',
|
||||
'Nickname Clause', 'Endless Battle Clause', 'Cancel Mod', 'Picked Team Size = 4', 'Exact HP Mod', 'Item Clause = 1', 'Open Team Sheets',
|
||||
],
|
||||
banlist: ['Soul Dew', 'Deoxys-Defense', 'Deoxys-Attack', 'Deoxys-Speed', 'Restricted Legendary', 'Mythical'],
|
||||
unbanlist: ['Latios', 'Latias', 'Wobbuffet', 'Wynaut'],
|
||||
bestOfDefault: true,
|
||||
onBegin() {
|
||||
this.add('rule', 'Self-KO Clause: If your last Pok\u00e9mon faints to a self-KO move or effect, you will lose the battle');
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "[Gen 6] VGC 2014",
|
||||
|
|
@ -3791,6 +3850,13 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
ruleset: ['Standard', 'Dynamax Clause'],
|
||||
banlist: ['AG', 'Shadow Tag', 'Baton Pass'],
|
||||
},
|
||||
{
|
||||
name: "[Gen 8] UU",
|
||||
mod: 'gen8',
|
||||
searchShow: false,
|
||||
ruleset: ['[Gen 8] OU'],
|
||||
banlist: ['OU', 'UUBL', 'Light Clay'],
|
||||
},
|
||||
{
|
||||
name: "[Gen 8] RU",
|
||||
mod: 'gen8',
|
||||
|
|
@ -3867,6 +3933,14 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
ruleset: ['[Gen 8] PU'],
|
||||
banlist: ['PU', 'ZUBL', 'Damp Rock', 'Grassy Seed'],
|
||||
},
|
||||
{
|
||||
name: "[Gen 8] CAP",
|
||||
desc: "The Create-A-Pokémon project is a community dedicated to exploring and understanding the competitive Pokémon metagame by designing, creating, and playtesting new Pokémon concepts.",
|
||||
mod: 'gen8',
|
||||
searchShow: false,
|
||||
ruleset: ['[Gen 8] OU', '+CAP'],
|
||||
banlist: ['Crucibellite'],
|
||||
},
|
||||
{
|
||||
name: "[Gen 8] Battle Stadium Singles",
|
||||
mod: 'gen8',
|
||||
|
|
@ -4754,7 +4828,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
name: "[Gen 3] NU",
|
||||
mod: 'gen3',
|
||||
searchShow: false,
|
||||
ruleset: ['Standard'],
|
||||
ruleset: ['Standard', 'One Boost Passer Clause'],
|
||||
banlist: ['Uber', 'OU', 'UUBL', 'UU', 'RUBL', 'RU', 'NUBL', 'Smeargle + Ingrain'],
|
||||
},
|
||||
{
|
||||
|
|
@ -4811,22 +4885,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
ruleset: ['Standard', 'One Boost Passer Clause'],
|
||||
banlist: ['Uber', 'Swagger'],
|
||||
},
|
||||
{
|
||||
name: "[Gen 3] Orre Colosseum",
|
||||
mod: 'gen3colosseum',
|
||||
searchShow: false,
|
||||
gameType: 'doubles',
|
||||
ruleset: [
|
||||
'Obtainable', 'Team Preview', 'Species Clause', 'Stadium Sleep Clause', 'Freeze Clause Mod', 'Max Team Size = 6', 'VGC Timer',
|
||||
'Nickname Clause', 'Endless Battle Clause', 'Cancel Mod', 'Picked Team Size = 4', 'Exact HP Mod', 'Item Clause = 1', 'Open Team Sheets',
|
||||
],
|
||||
banlist: ['Soul Dew', 'Deoxys-Defense', 'Deoxys-Attack', 'Deoxys-Speed', 'Restricted Legendary', 'Mythical'],
|
||||
unbanlist: ['Latios', 'Latias', 'Wobbuffet', 'Wynaut'],
|
||||
bestOfDefault: true,
|
||||
onBegin() {
|
||||
this.add('rule', 'Self-KO Clause: If your last Pok\u00e9mon faints to a self-KO move or effect, you will lose the battle');
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "[Gen 3] Custom Game",
|
||||
mod: 'gen3',
|
||||
|
|
@ -4921,12 +4979,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
|
|||
battle: { trunc: Math.trunc },
|
||||
ruleset: ['HP Percentage Mod', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
|
||||
},
|
||||
{
|
||||
name: "[Gen 1] Ubers",
|
||||
mod: 'gen1',
|
||||
searchShow: false,
|
||||
ruleset: ['Standard'],
|
||||
},
|
||||
{
|
||||
name: "[Gen 1] UU",
|
||||
mod: 'gen1',
|
||||
|
|
|
|||
|
|
@ -108,6 +108,7 @@ export const Aliases: import('../sim/dex').AliasesTable = {
|
|||
megacharizardy: "Charizard-Mega-Y",
|
||||
yard: "Charizard-Mega-Y",
|
||||
zardy: "Charizard-Mega-Y",
|
||||
megacruci: "Crucibelle-Mega",
|
||||
mdia: "Diancie-Mega",
|
||||
floetteeternalmega: "Floette-Mega",
|
||||
megafloetteeternal: "Floette-Mega",
|
||||
|
|
@ -126,6 +127,7 @@ export const Aliases: import('../sim/dex').AliasesTable = {
|
|||
megamaw: "Mawile-Mega",
|
||||
mmedi: "Medicham-Mega",
|
||||
megamedi: "Medicham-Mega",
|
||||
meowsticmega: "Meowstic-M-Mega",
|
||||
mmx: "Mewtwo-Mega-X",
|
||||
megamewtwox: "Mewtwo-Mega-X",
|
||||
mewtwox: "Mewtwo-Mega-X",
|
||||
|
|
@ -136,6 +138,7 @@ export const Aliases: import('../sim/dex').AliasesTable = {
|
|||
megashark: "Sharpedo-Mega",
|
||||
mbro: "Slowbro-Mega",
|
||||
megabro: "Slowbro-Mega",
|
||||
tatsugirimega: "Tatsugiri-Curly-Mega",
|
||||
megasaur: "Venusaur-Mega",
|
||||
megazygardecomplete: "Zygarde-Mega",
|
||||
zygardecompletemega: "Zygarde-Mega",
|
||||
|
|
@ -723,8 +726,6 @@ export const Aliases: import('../sim/dex').AliasesTable = {
|
|||
sawsbuckautumn: "Sawsbuck",
|
||||
sawsbuckwinter: "Sawsbuck",
|
||||
tatsugiricurly: "Tatsugiri",
|
||||
tatsugiridroopy: "Tatsugiri",
|
||||
tatsugiristretchy: "Tatsugiri",
|
||||
unowna: "Unown",
|
||||
unownb: "Unown",
|
||||
unownc: "Unown",
|
||||
|
|
@ -2557,7 +2558,6 @@ export const Aliases: import('../sim/dex').AliasesTable = {
|
|||
krilo: "Krilowatt",
|
||||
libra: "Equilibra",
|
||||
mala: "Malaconda",
|
||||
megacruci: "Crucibelle-Mega",
|
||||
navi: "Naviathan",
|
||||
nect: "Necturna",
|
||||
ohmagod: "Plasmanta",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
},
|
||||
|
|
@ -610,7 +618,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
slowbromega: {
|
||||
isNonstandard: "Past",
|
||||
tier: "Illegal",
|
||||
natDexTier: "UU",
|
||||
natDexTier: "RUBL",
|
||||
},
|
||||
slowbrogalar: {
|
||||
tier: "NU",
|
||||
|
|
@ -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",
|
||||
},
|
||||
|
|
@ -2754,7 +2782,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "LC",
|
||||
},
|
||||
toxicroak: {
|
||||
tier: "NU",
|
||||
tier: "ZU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -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)",
|
||||
|
|
@ -3179,7 +3215,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
natDexTier: "RU",
|
||||
},
|
||||
lilliganthisui: {
|
||||
tier: "RU",
|
||||
tier: "RUBL",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RUBL",
|
||||
},
|
||||
|
|
@ -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",
|
||||
},
|
||||
meowsticmmega: {
|
||||
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",
|
||||
|
|
@ -5040,7 +5108,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "LC",
|
||||
},
|
||||
frosmoth: {
|
||||
tier: "PU",
|
||||
tier: "PUBL",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -5172,7 +5240,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
tier: "Illegal",
|
||||
},
|
||||
zarude: {
|
||||
tier: "UU",
|
||||
tier: "UUBL",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "RU",
|
||||
},
|
||||
|
|
@ -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",
|
||||
},
|
||||
|
|
@ -5554,7 +5646,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
|
|||
ironmoth: {
|
||||
tier: "OU",
|
||||
doublesTier: "(DUU)",
|
||||
natDexTier: "UU",
|
||||
natDexTier: "UUBL",
|
||||
},
|
||||
ironhands: {
|
||||
tier: "UUBL",
|
||||
|
|
|
|||
270
data/items.ts
270
data/items.ts
|
|
@ -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.baseSpecies)) 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-M-Mega", "Meowstic-F-Mega"],
|
||||
megaEvolves: ["Meowstic", "Meowstic-F"],
|
||||
itemUser: ["Meowstic", "Meowstic-F"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves!.includes(source.baseSpecies.baseSpecies)) 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.baseSpecies)) 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,
|
||||
|
|
@ -7742,7 +8010,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
|
|||
megaEvolves: "Zygarde-Complete",
|
||||
itemUser: ["Zygarde-Complete"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
if (source.baseSpecies.baseSpecies === 'Zygarde') return false;
|
||||
return true;
|
||||
},
|
||||
num: 2584,
|
||||
|
|
|
|||
|
|
@ -23086,6 +23086,7 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = {
|
|||
{generation: 8, level: 70, shiny: 1, moves: ["psychic", "disable", "recover", "blizzard"]},
|
||||
{generation: 8, level: 70, shiny: 1, isHidden: true, moves: ['mist', 'guardswap', 'powerswap', 'psychic'], source: "gen8bdsp"},
|
||||
{generation: 9, level: 100, nature: "Modest", perfectIVs: 6, isHidden: true, moves: ["psystrike", "aurasphere", "icebeam", "calmmind"]},
|
||||
{generation: 9, level: 70, moves: ["psychic", "aurasphere", "psychocut", "amnesia"], source: "gen9legends"},
|
||||
],
|
||||
encounters: [
|
||||
{generation: 1, level: 70},
|
||||
|
|
@ -23497,7 +23498,7 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = {
|
|||
{generation: 7, level: 5, perfectIVs: 5, moves: ["pound"], pokeball: "pokeball"},
|
||||
{generation: 7, level: 50, moves: ["psychic", "barrier", "metronome", "transform"], pokeball: "cherishball"},
|
||||
{generation: 8, level: 1, moves: ["pound"], pokeball: "pokeball"},
|
||||
{generation: 8, level: 1, moves: ['pound', 'reflecttype'], source: "gen8bdsp"},
|
||||
{generation: 8, level: 1, moves: ['pound', 'reflecttype'], pokeball: "pokeball", source: "gen8bdsp"},
|
||||
{generation: 9, level: 5, moves: ["pollenpuff", "darkpulse", "dragonpulse", "thunderbolt", "dazzlinggleam", "aurasphere", "flamethrower", "airslash", "shadowball", "energyball", "earthpower", "icebeam", "hypervoice", "sludgebomb", "psyshock", "powergem", "flashcannon", "surf", "swift", "lightscreen", "lifedew"], pokeball: "pokeball"},
|
||||
],
|
||||
eventOnly: true,
|
||||
|
|
@ -46634,7 +46635,7 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = {
|
|||
{generation: 6, level: 100, moves: ["wish", "confusion", "rest"], pokeball: "cherishball"},
|
||||
{generation: 7, level: 15, moves: ["swift", "wish", "healingwish", "rest"], pokeball: "cherishball"},
|
||||
{generation: 8, level: 70, nature: "Timid", moves: ["meteormash", "psychic", "rest", "wish"], pokeball: "cherishball"},
|
||||
{generation: 8, level: 5, moves: ['confusion', 'wish'], source: "gen8bdsp"},
|
||||
{generation: 8, level: 5, moves: ['confusion', 'wish'], pokeball: "pokeball", source: "gen8bdsp"},
|
||||
],
|
||||
eventOnly: true,
|
||||
},
|
||||
|
|
@ -69513,7 +69514,7 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = {
|
|||
worryseed: ["7T"],
|
||||
},
|
||||
eventData: [
|
||||
{generation: 9, level: 72, nature: "Modest", moves: ["lightofruin", "energyball", "gigadrain", "synthesis"], source: "gen9legends"},
|
||||
{generation: 9, level: 72, nature: "Modest", moves: ["lightofruin", "energyball", "gigadrain", "synthesis"], pokeball: "pokeball", source: "gen9legends"},
|
||||
],
|
||||
eventOnly: true,
|
||||
},
|
||||
|
|
@ -99529,7 +99530,6 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = {
|
|||
dazzlinggleam: ["9M"],
|
||||
doubleedge: ["9M", "9L60"],
|
||||
earthquake: ["9M"],
|
||||
encore: ["9M"],
|
||||
endure: ["9M"],
|
||||
facade: ["9M"],
|
||||
gigaimpact: ["9M"],
|
||||
|
|
|
|||
|
|
@ -1,310 +0,0 @@
|
|||
export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = {
|
||||
piss: {
|
||||
tier: "UU",
|
||||
},
|
||||
snabterra: {
|
||||
tier: "UU",
|
||||
},
|
||||
drakkannon: {
|
||||
tier: "UU",
|
||||
},
|
||||
arsenstorm: {
|
||||
tier: "UU",
|
||||
},
|
||||
badjur: {
|
||||
tier: "UU",
|
||||
},
|
||||
vipult: {
|
||||
tier: "UU",
|
||||
},
|
||||
fettogre: {
|
||||
tier: "UU",
|
||||
},
|
||||
crystuit: {
|
||||
tier: "UU",
|
||||
},
|
||||
monmothra: {
|
||||
tier: "UU",
|
||||
},
|
||||
wizhazard: {
|
||||
tier: "UU",
|
||||
},
|
||||
jackoswarm: {
|
||||
tier: "UU",
|
||||
},
|
||||
kadraoke: {
|
||||
tier: "UU",
|
||||
},
|
||||
karmalice: {
|
||||
tier: "UU",
|
||||
},
|
||||
goblantern: {
|
||||
tier: "UU",
|
||||
},
|
||||
hippaint: {
|
||||
tier: "UU",
|
||||
},
|
||||
pinaturbo: {
|
||||
tier: "UU",
|
||||
},
|
||||
eolikopter: {
|
||||
tier: "UU",
|
||||
},
|
||||
mohawtter: {
|
||||
tier: "UU",
|
||||
},
|
||||
arachnode: {
|
||||
tier: "UU",
|
||||
},
|
||||
blobbiam: {
|
||||
tier: "UU",
|
||||
},
|
||||
florustitia: {
|
||||
tier: "UU",
|
||||
},
|
||||
primordialith: {
|
||||
tier: "UU",
|
||||
},
|
||||
faeruin: {
|
||||
tier: "UU",
|
||||
},
|
||||
versalyre: {
|
||||
tier: "UU",
|
||||
},
|
||||
capricorrie: {
|
||||
tier: "UU",
|
||||
},
|
||||
reversadusa: {
|
||||
tier: "UU",
|
||||
},
|
||||
llanfairwyrm: {
|
||||
tier: "UU",
|
||||
},
|
||||
frostengu: {
|
||||
tier: "UU",
|
||||
},
|
||||
bulionage: {
|
||||
tier: "UU",
|
||||
},
|
||||
yamateraph: {
|
||||
tier: "UU",
|
||||
},
|
||||
bugswarm: {
|
||||
tier: "UU",
|
||||
},
|
||||
freightmare: {
|
||||
tier: "UU",
|
||||
},
|
||||
brasspecter: {
|
||||
tier: "UU",
|
||||
},
|
||||
copperhead: {
|
||||
tier: "UU",
|
||||
},
|
||||
thaumaton: {
|
||||
tier: "UU",
|
||||
},
|
||||
sculptera: {
|
||||
tier: "UU",
|
||||
},
|
||||
lavalisk: {
|
||||
tier: "UU",
|
||||
},
|
||||
martorse: {
|
||||
tier: "UU",
|
||||
},
|
||||
parasike: {
|
||||
tier: "UU",
|
||||
},
|
||||
massassin: {
|
||||
tier: "UU",
|
||||
},
|
||||
searytch: {
|
||||
tier: "UU",
|
||||
},
|
||||
jokerpent: {
|
||||
tier: "UU",
|
||||
},
|
||||
socknbuskn: {
|
||||
tier: "UU",
|
||||
},
|
||||
sleetshell: {
|
||||
tier: "UU",
|
||||
},
|
||||
craggon: {
|
||||
tier: "UU",
|
||||
},
|
||||
// Meta B
|
||||
flarenheit: {
|
||||
tier: "OU",
|
||||
},
|
||||
groundead: {
|
||||
tier: "OU",
|
||||
},
|
||||
actaniathan: {
|
||||
tier: "OU",
|
||||
},
|
||||
deadward: {
|
||||
tier: "OU",
|
||||
},
|
||||
obaki: {
|
||||
tier: "OU",
|
||||
},
|
||||
sylravage: {
|
||||
tier: "OU",
|
||||
},
|
||||
twinkaton: {
|
||||
tier: "OU",
|
||||
},
|
||||
fausteil: {
|
||||
tier: "OU",
|
||||
},
|
||||
geoporka: {
|
||||
tier: "OU",
|
||||
},
|
||||
seaode: {
|
||||
tier: "OU",
|
||||
},
|
||||
plasmage: {
|
||||
tier: "OU",
|
||||
},
|
||||
porcupyre: {
|
||||
tier: "OU",
|
||||
},
|
||||
bellolysk: {
|
||||
tier: "OU",
|
||||
},
|
||||
tryonite: {
|
||||
tier: "OU",
|
||||
},
|
||||
scarachnid: {
|
||||
tier: "OU",
|
||||
},
|
||||
geigeramp: {
|
||||
tier: "OU",
|
||||
},
|
||||
maldractice: {
|
||||
tier: "OU",
|
||||
},
|
||||
serpvoltidae: {
|
||||
tier: "OU",
|
||||
},
|
||||
sheepquake: {
|
||||
tier: "OU",
|
||||
},
|
||||
bufferfly: {
|
||||
tier: "OU",
|
||||
},
|
||||
dastard: {
|
||||
tier: "OU",
|
||||
},
|
||||
cottentration: {
|
||||
tier: "OU",
|
||||
},
|
||||
sorrowcean: {
|
||||
tier: "OU",
|
||||
},
|
||||
psyllapse: {
|
||||
tier: "OU",
|
||||
},
|
||||
haarstorm: {
|
||||
tier: "OU",
|
||||
},
|
||||
borealis: {
|
||||
tier: "OU",
|
||||
},
|
||||
bazhigangquan: {
|
||||
tier: "OU",
|
||||
},
|
||||
leechmonner: {
|
||||
tier: "OU",
|
||||
},
|
||||
ironcrest: {
|
||||
tier: "OU",
|
||||
},
|
||||
odonata: {
|
||||
tier: "OU",
|
||||
},
|
||||
hebicikuga: {
|
||||
tier: "OU",
|
||||
},
|
||||
devestial: {
|
||||
tier: "OU",
|
||||
},
|
||||
lundicare: {
|
||||
tier: "OU",
|
||||
},
|
||||
// Meta C
|
||||
lyvamp: {
|
||||
tier: "RU",
|
||||
},
|
||||
treatmint: {
|
||||
tier: "RU",
|
||||
},
|
||||
turvarpega: {
|
||||
tier: "RU",
|
||||
},
|
||||
goodjur: {
|
||||
tier: "RU",
|
||||
},
|
||||
liftaton: {
|
||||
tier: "RU",
|
||||
},
|
||||
triceracotta: {
|
||||
tier: "RU",
|
||||
},
|
||||
woolverine: {
|
||||
tier: "RU",
|
||||
},
|
||||
combustoad: {
|
||||
tier: "RU",
|
||||
},
|
||||
hearthind: {
|
||||
tier: "RU",
|
||||
},
|
||||
koiryu: {
|
||||
tier: "RU",
|
||||
},
|
||||
pestiligy: {
|
||||
tier: "RU",
|
||||
},
|
||||
saxum: {
|
||||
tier: "RU",
|
||||
},
|
||||
sascratch: {
|
||||
tier: "RU",
|
||||
},
|
||||
guttergar: {
|
||||
tier: "RU",
|
||||
},
|
||||
rakasa: {
|
||||
tier: "RU",
|
||||
},
|
||||
thermostatic: {
|
||||
tier: "RU",
|
||||
},
|
||||
formaldehydra: {
|
||||
tier: "RU",
|
||||
},
|
||||
strumorthio: {
|
||||
tier: "RU",
|
||||
},
|
||||
ironmike: {
|
||||
tier: "RU",
|
||||
},
|
||||
whalestro: {
|
||||
tier: "RU",
|
||||
},
|
||||
urslag: {
|
||||
tier: "RU",
|
||||
},
|
||||
centaghoul: {
|
||||
tier: "RU",
|
||||
},
|
||||
noirwark: {
|
||||
tier: "RU",
|
||||
},
|
||||
metarachne: {
|
||||
tier: "RU",
|
||||
},
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,26 +0,0 @@
|
|||
export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
|
||||
meditate: {
|
||||
inherit: true,
|
||||
isNonstandard: null,
|
||||
},
|
||||
dragonrage: {
|
||||
inherit: true,
|
||||
isNonstandard: null,
|
||||
},
|
||||
boneclub: {
|
||||
inherit: true,
|
||||
isNonstandard: null,
|
||||
},
|
||||
powershift: {
|
||||
inherit: true,
|
||||
isNonstandard: null,
|
||||
},
|
||||
blazingtorque: {
|
||||
inherit: true,
|
||||
isNonstandard: null,
|
||||
},
|
||||
camouflage: {
|
||||
inherit: true,
|
||||
isNonstandard: null,
|
||||
},
|
||||
};
|
||||
|
|
@ -1,926 +0,0 @@
|
|||
export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = {
|
||||
piss: {
|
||||
num: 9001,
|
||||
name: "Piss",
|
||||
types: ["Normal"],
|
||||
baseStats: { hp: 70, atk: 95, def: 60, spa: 50, spd: 60, spe: 95 },
|
||||
abilities: { 0: "Magic Guard" },
|
||||
weightkg: 382,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
snabterra: {
|
||||
num: 9002,
|
||||
name: "Snabterra",
|
||||
types: ["Bug", "Ground"],
|
||||
baseStats: { hp: 85, atk: 110, def: 85, spa: 40, spd: 80, spe: 85 },
|
||||
abilities: { 0: "Compound Eyes" },
|
||||
weightkg: 600,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
drakkannon: {
|
||||
num: 9003,
|
||||
name: "Drakkannon",
|
||||
types: ["Fighting", "Dragon"],
|
||||
baseStats: { hp: 80, atk: 50, def: 95, spa: 100, spd: 105, spe: 73 },
|
||||
abilities: { 0: "Mega Launcher" },
|
||||
weightkg: 59,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
arsenstorm: {
|
||||
num: 9004,
|
||||
name: "Arsenstorm",
|
||||
types: ["Poison", "Ground"],
|
||||
baseStats: { hp: 110, atk: 50, def: 65, spa: 80, spd: 90, spe: 55 },
|
||||
abilities: { 0: "Neutralizing Gas", H: "Levitate" },
|
||||
weightkg: 15,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
badjur: {
|
||||
num: 9005,
|
||||
name: "Badjur",
|
||||
types: ["Normal"],
|
||||
baseStats: { hp: 85, atk: 100, def: 75, spa: 60, spd: 75, spe: 80 },
|
||||
abilities: { 0: "Poison Heal" },
|
||||
weightkg: 16,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
vipult: {
|
||||
num: 9006,
|
||||
name: "Vipult",
|
||||
types: ["Poison", "Dark"],
|
||||
baseStats: { hp: 100, atk: 65, def: 70, spa: 100, spd: 100, spe: 70 },
|
||||
abilities: { 0: "Intimidate" },
|
||||
weightkg: 23,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
fettogre: {
|
||||
num: 9007,
|
||||
name: "Fettogre",
|
||||
types: ["Ghost", "Fighting"],
|
||||
baseStats: { hp: 70, atk: 45, def: 140, spa: 45, spd: 80, spe: 55 },
|
||||
abilities: { 0: "Immunity", H: "Oblivious" },
|
||||
weightkg: 200,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
crystuit: {
|
||||
num: 9008,
|
||||
name: "Crystuit",
|
||||
types: ["Rock", "Electric"],
|
||||
baseStats: { hp: 70, atk: 50, def: 80, spa: 105, spd: 70, spe: 110 },
|
||||
abilities: { 0: "Sturdy", H: "Levitate" },
|
||||
weightkg: 420.6,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
monmothra: {
|
||||
num: 9009,
|
||||
name: "Mon Mothra",
|
||||
types: ["Fairy", "Bug"],
|
||||
baseStats: { hp: 80, atk: 50, def: 70, spa: 100, spd: 70, spe: 90 },
|
||||
abilities: { 0: "Fluffy", H: "Tinted Lens" },
|
||||
weightkg: 50,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
wizhazard: {
|
||||
num: 9010,
|
||||
name: "Wizhazard",
|
||||
types: ["Psychic", "Steel"],
|
||||
baseStats: { hp: 95, atk: 40, def: 90, spa: 100, spd: 70, spe: 60 },
|
||||
abilities: { 0: "Magic Bounce", H: "Battle Armor" },
|
||||
weightkg: 69,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
jackoswarm: {
|
||||
num: 9011,
|
||||
name: "Jack-o-swarm",
|
||||
types: ["Steel", "Flying"],
|
||||
baseStats: { hp: 90, atk: 50, def: 95, spa: 70, spd: 90, spe: 70 },
|
||||
abilities: { 0: "Pickpocket", H: "Rough Skin" },
|
||||
weightkg: 74.8,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
kadraoke: {
|
||||
num: 9012,
|
||||
name: "Kadraoke",
|
||||
types: ["Psychic", "Dragon"],
|
||||
baseStats: { hp: 90, atk: 30, def: 80, spa: 85, spd: 100, spe: 85 },
|
||||
abilities: { 0: "Punk Rock" },
|
||||
weightkg: 19.7,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
karmalice: {
|
||||
num: 9013,
|
||||
name: "Karmalice",
|
||||
types: ["Ice", "Electric"],
|
||||
baseStats: { hp: 70, atk: 55, def: 40, spa: 105, spd: 55, spe: 111 },
|
||||
abilities: { 0: "Refrigerate" },
|
||||
weightkg: 690,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
goblantern: {
|
||||
num: 9014,
|
||||
name: "Goblantern",
|
||||
types: ["Fire", "Grass"],
|
||||
baseStats: { hp: 90, atk: 40, def: 80, spa: 100, spd: 80, spe: 77 },
|
||||
abilities: { 0: "Prankster" },
|
||||
weightkg: 3,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
hippaint: {
|
||||
num: 9015,
|
||||
name: "Hippaint",
|
||||
types: ["Water", "Ground"],
|
||||
baseStats: { hp: 70, atk: 40, def: 70, spa: 110, spd: 85, spe: 80 },
|
||||
abilities: { 0: "Pastel Veil" },
|
||||
weightkg: 90,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
pinaturbo: {
|
||||
num: 9016,
|
||||
name: "Pinaturbo",
|
||||
types: ["Fire"],
|
||||
baseStats: { hp: 70, atk: 70, def: 60, spa: 100, spd: 95, spe: 115 },
|
||||
abilities: { 0: "Mold Breaker", H: "Regenerator" },
|
||||
weightkg: 126,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
eolikopter: {
|
||||
num: 9017,
|
||||
name: "Eolikopter",
|
||||
types: ["Flying", "Electric"],
|
||||
baseStats: { hp: 90, atk: 50, def: 80, spa: 100, spd: 70, spe: 110 },
|
||||
abilities: { 0: "Cloud Nine", H: "Static" },
|
||||
weightkg: 400,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
mohawtter: {
|
||||
num: 9018,
|
||||
name: "Mohawtter",
|
||||
types: ["Water", "Grass"],
|
||||
baseStats: { hp: 85, atk: 50, def: 70, spa: 70, spd: 110, spe: 55 },
|
||||
abilities: { 0: "Tablets of Ruin", H: "Hydration" },
|
||||
weightkg: 32,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
arachnode: {
|
||||
num: 9019,
|
||||
name: "Arachnode",
|
||||
types: ["Electric"],
|
||||
baseStats: { hp: 105, atk: 30, def: 75, spa: 85, spd: 100, spe: 60 },
|
||||
abilities: { 0: "Clear Body", H: "Thick Fat" },
|
||||
weightkg: 61.5,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
blobbiam: {
|
||||
num: 9020,
|
||||
name: "Blobbiam",
|
||||
types: ["Water", "Fairy"],
|
||||
baseStats: { hp: 95, atk: 100, def: 110, spa: 20, spd: 80, spe: 75 },
|
||||
abilities: { 0: "Volt Absorb" },
|
||||
weightkg: 12,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
florustitia: {
|
||||
num: 9021,
|
||||
name: "Florustitia",
|
||||
types: ["Grass", "Fighting"],
|
||||
baseStats: { hp: 70, atk: 85, def: 60, spa: 40, spd: 95, spe: 100 },
|
||||
abilities: { 0: "Sharpness", H: "Grassy Surge" },
|
||||
weightkg: 110,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
primordialith: {
|
||||
num: 9022,
|
||||
name: "Primordialith",
|
||||
types: ["Rock"],
|
||||
baseStats: { hp: 100, atk: 100, def: 100, spa: 35, spd: 90, spe: 30 },
|
||||
abilities: { 0: "Sand Stream", H: "Vital Spirit" },
|
||||
weightkg: 90,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
faeruin: {
|
||||
num: 9023,
|
||||
name: "Faeruin",
|
||||
types: ["Ghost", "Fairy"],
|
||||
baseStats: { hp: 90, atk: 96, def: 70, spa: 40, spd: 80, spe: 93 },
|
||||
abilities: { 0: "Prankster", H: "Wandering Spirit" },
|
||||
weightkg: 33,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
versalyre: {
|
||||
num: 9024,
|
||||
name: "Versalyre",
|
||||
types: ["Flying"],
|
||||
baseStats: { hp: 70, atk: 110, def: 65, spa: 30, spd: 70, spe: 90 },
|
||||
abilities: { 0: "Protean" },
|
||||
weightkg: 2,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
capricorrie: {
|
||||
num: 9025,
|
||||
name: "Capricorrie",
|
||||
types: ["Ice", "Ground"],
|
||||
baseStats: { hp: 100, atk: 110, def: 80, spa: 50, spd: 70, spe: 90 },
|
||||
abilities: { 0: "Snow Warning", H: "Vital Spirit" },
|
||||
weightkg: 146,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
reversadusa: {
|
||||
num: 9026,
|
||||
name: "Reversadusa",
|
||||
types: ["Psychic", "Dark"],
|
||||
baseStats: { hp: 90, atk: 90, def: 80, spa: 70, spd: 70, spe: 95 },
|
||||
abilities: { 0: "Contrary" },
|
||||
weightkg: 55.2,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
llanfairwyrm: {
|
||||
num: 9027,
|
||||
name: "Llanfairwyrm",
|
||||
types: ["Dragon"],
|
||||
baseStats: { hp: 85, atk: 120, def: 100, spa: 55, spd: 90, spe: 70 },
|
||||
abilities: { 0: "Rough Skin" },
|
||||
weightkg: 600,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
frostengu: {
|
||||
num: 9028,
|
||||
name: "Frostengu",
|
||||
types: ["Fighting", "Ice"],
|
||||
baseStats: { hp: 50, atk: 110, def: 50, spa: 110, spd: 50, spe: 87 },
|
||||
abilities: { 0: "No Guard" },
|
||||
weightkg: 68,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
bulionage: {
|
||||
num: 9029,
|
||||
name: "Bulionage",
|
||||
types: ["Dark", "Water"],
|
||||
baseStats: { hp: 95, atk: 90, def: 85, spa: 40, spd: 120, spe: 50 },
|
||||
abilities: { 0: "Strong Jaw", 1: "Thermal Exchange", H: "White Smoke" },
|
||||
weightkg: 300,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
yamateraph: {
|
||||
num: 9030,
|
||||
name: "Yamateraph",
|
||||
types: ["Normal", "Fairy"],
|
||||
baseStats: { hp: 90, atk: 110, def: 80, spa: 15, spd: 80, spe: 105 },
|
||||
abilities: { 0: "Psychic Surge", H: "Vital Spirit" },
|
||||
weightkg: 255,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
bugswarm: {
|
||||
num: 9031,
|
||||
name: "Bugswarm",
|
||||
types: ["Fire", "Bug"],
|
||||
baseStats: { hp: 100, atk: 90, def: 70, spa: 70, spd: 70, spe: 60 },
|
||||
abilities: { 0: "Triage" },
|
||||
weightkg: 420,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
freightmare: {
|
||||
num: 9032,
|
||||
name: "Freightmare",
|
||||
types: ["Ghost", "Steel"],
|
||||
baseStats: { hp: 100, atk: 40, def: 80, spa: 105, spd: 85, spe: 74 },
|
||||
abilities: { 0: "Sand Rush", H: "Steam Engine" },
|
||||
weightkg: 720,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
brasspecter: {
|
||||
num: 9033,
|
||||
name: "Brasspecter",
|
||||
types: ["Steel", "Ghost"],
|
||||
baseStats: { hp: 110, atk: 95, def: 100, spa: 40, spd: 95, spe: 35 },
|
||||
abilities: { 0: "Tough Claws" },
|
||||
weightkg: 40,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
copperhead: {
|
||||
num: 9034,
|
||||
name: "Copperhead",
|
||||
types: ["Ground", "Steel"],
|
||||
baseStats: { hp: 85, atk: 80, def: 100, spa: 50, spd: 90, spe: 50 },
|
||||
abilities: { 0: "Water Absorb" },
|
||||
weightkg: 101.9,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
thaumaton: {
|
||||
num: 9035,
|
||||
name: "Thaumaton",
|
||||
types: ["Poison", "Steel"],
|
||||
baseStats: { hp: 95, atk: 70, def: 70, spa: 100, spd: 100, spe: 75 },
|
||||
abilities: { 0: "Unburden", H: "Flash Fire" },
|
||||
weightkg: 666,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
sculptera: {
|
||||
num: 9036,
|
||||
name: "Sculptera",
|
||||
types: ["Rock", "Dragon"],
|
||||
baseStats: { hp: 100, atk: 105, def: 70, spa: 40, spd: 85, spe: 85 },
|
||||
abilities: { 0: "Skill Link", H: "Defiant" },
|
||||
weightkg: 729,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
lavalisk: {
|
||||
num: 9037,
|
||||
name: "Lavalisk",
|
||||
types: ["Poison", "Fire"],
|
||||
baseStats: { hp: 100, atk: 105, def: 80, spa: 40, spd: 80, spe: 76 },
|
||||
abilities: { 0: "Mold Breaker" },
|
||||
weightkg: 150,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
martorse: {
|
||||
num: 9038,
|
||||
name: "Martorse",
|
||||
types: ["Ground", "Fire"],
|
||||
baseStats: { hp: 75, atk: 90, def: 70, spa: 35, spd: 90, spe: 105 },
|
||||
abilities: { 0: "Trace", H: "Prankster" },
|
||||
weightkg: 173,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
parasike: {
|
||||
num: 9039,
|
||||
name: "Parasike",
|
||||
types: ["Psychic", "Bug"],
|
||||
baseStats: { hp: 50, atk: 90, def: 75, spa: 50, spd: 55, spe: 109 },
|
||||
abilities: { 0: "Strong Jaw", H: "Tinted Lens" },
|
||||
weightkg: 0.8,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
massassin: {
|
||||
num: 9040,
|
||||
name: "Massassin",
|
||||
types: ["Fighting", "Dark"],
|
||||
baseStats: { hp: 110, atk: 110, def: 80, spa: 50, spd: 80, spe: 30 },
|
||||
abilities: { 0: "Quark Drive" },
|
||||
weightkg: 888,
|
||||
eggGroups: ["Undiscovered"],
|
||||
tags: ["Paradox"],
|
||||
},
|
||||
searytch: {
|
||||
num: 9041,
|
||||
name: "Searytch",
|
||||
types: ["Fairy", "Fire"],
|
||||
baseStats: { hp: 85, atk: 30, def: 75, spa: 105, spd: 100, spe: 60 },
|
||||
abilities: { 0: "Stamina" },
|
||||
weightkg: 42,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
jokerpent: {
|
||||
num: 9042,
|
||||
name: "Jokerpent",
|
||||
types: ["Dragon", "Poison"],
|
||||
baseStats: { hp: 100, atk: 70, def: 100, spa: 30, spd: 75, spe: 20 },
|
||||
abilities: { 0: "Unaware" },
|
||||
weightkg: 67,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
socknbuskn: {
|
||||
num: 9043,
|
||||
name: "Socknbusk\u2019n",
|
||||
types: ["Normal", "Fighting"],
|
||||
baseStats: { hp: 95, atk: 95, def: 75, spa: 40, spd: 70, spe: 110 },
|
||||
abilities: { 0: "Scrappy" },
|
||||
weightkg: 65,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
sleetshell: {
|
||||
num: 8045,
|
||||
name: "Sleet Shell",
|
||||
types: ["Ice", "Steel"],
|
||||
baseStats: { hp: 83, atk: 95, def: 107, spa: 47, spd: 71, spe: 103 },
|
||||
abilities: { 0: "Protosynthesis" },
|
||||
weightkg: 674.5,
|
||||
eggGroups: ["Undiscovered"],
|
||||
tags: ["Paradox"],
|
||||
},
|
||||
craggon: {
|
||||
num: 9044,
|
||||
name: "Craggon",
|
||||
types: ["Dragon", "Ground"],
|
||||
baseStats: { hp: 120, atk: 81, def: 81, spa: 82, spd: 81, spe: 100 },
|
||||
abilities: { 0: "Natural Cure", H: "Emergency Exit" },
|
||||
weightkg: 404,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
// Meta B
|
||||
flarenheit: {
|
||||
num: 9045,
|
||||
name: "Flarenheit",
|
||||
types: ["Ice", "Fire"],
|
||||
baseStats: { hp: 55, atk: 110, def: 50, spa: 70, spd: 40, spe: 130 },
|
||||
abilities: { 0: "Motor Drive", H: "Surge Surfer" },
|
||||
weightkg: 45.1,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
groundead: {
|
||||
num: 9046,
|
||||
name: "Groundead",
|
||||
types: ["Ground", "Ghost"],
|
||||
baseStats: { hp: 80, atk: 115, def: 110, spa: 50, spd: 80, spe: 50 },
|
||||
abilities: { 0: "Misty Surge", 1: "Solid Rock", H: "Earth Eater" },
|
||||
weightkg: 0.2,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
actaniathan: {
|
||||
num: 9047,
|
||||
name: "Actaniathan",
|
||||
types: ["Water", "Steel"],
|
||||
baseStats: { hp: 100, atk: 40, def: 80, spa: 105, spd: 105, spe: 50 },
|
||||
abilities: { 0: "Torrent", H: "Lightning Rod" },
|
||||
weightkg: 800,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
deadward: {
|
||||
num: 9048,
|
||||
name: "Deadward",
|
||||
types: ["Dark", "Flying"],
|
||||
baseStats: { hp: 90, atk: 100, def: 85, spa: 40, spd: 90, spe: 110 },
|
||||
abilities: { 0: "Filter", H: "Intimidate" },
|
||||
weightkg: 66.6,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
obaki: {
|
||||
num: 9049,
|
||||
name: "Obaki",
|
||||
types: ["Fighting", "Ghost"],
|
||||
baseStats: { hp: 85, atk: 75, def: 65, spa: 125, spd: 105, spe: 55 },
|
||||
abilities: { 0: "Purifying Salt" },
|
||||
weightkg: 40,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
sylravage: {
|
||||
num: 9050,
|
||||
name: "Sylravage",
|
||||
types: ["Grass", "Fighting"],
|
||||
baseStats: { hp: 103, atk: 110, def: 86, spa: 41, spd: 80, spe: 80 },
|
||||
abilities: { 0: "Defiant", H: "Grassy Surge" },
|
||||
weightkg: 72,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
twinkaton: {
|
||||
num: 9051,
|
||||
name: "Twinkaton",
|
||||
types: ["Fairy", "Steel"],
|
||||
baseStats: { hp: 90, atk: 75, def: 75, spa: 75, spd: 120, spe: 45 },
|
||||
abilities: { 0: "Mold Breaker", H: "Filter" },
|
||||
weightkg: 90,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
fausteil: {
|
||||
num: 9052,
|
||||
name: "Fausteil",
|
||||
types: ["Fire", "Flying"],
|
||||
baseStats: { hp: 110, atk: 90, def: 80, spa: 35, spd: 110, spe: 50 },
|
||||
abilities: { 0: "Flame Body" },
|
||||
weightkg: 26,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
geoporka: {
|
||||
num: 9053,
|
||||
name: "Geoporka",
|
||||
types: ["Grass", "Poison"],
|
||||
baseStats: { hp: 100, atk: 85, def: 80, spa: 70, spd: 95, spe: 45 },
|
||||
abilities: { 0: "Thick Fat" },
|
||||
weightkg: 38,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
seaode: {
|
||||
num: 9054,
|
||||
name: "Seaode",
|
||||
types: ["Rock", "Water"],
|
||||
baseStats: { hp: 70, atk: 110, def: 100, spa: 40, spd: 70, spe: 95 },
|
||||
abilities: { 0: "Rock Head" },
|
||||
weightkg: 121,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
plasmage: {
|
||||
num: 9055,
|
||||
name: "Plasmage",
|
||||
types: ["Psychic", "Electric"],
|
||||
baseStats: { hp: 100, atk: 55, def: 70, spa: 105, spd: 75, spe: 115 },
|
||||
abilities: { 0: "Magician" },
|
||||
weightkg: 85,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
porcupyre: {
|
||||
num: 9056,
|
||||
name: "Porcupyre",
|
||||
types: ["Dark", "Fire"],
|
||||
baseStats: { hp: 90, atk: 90, def: 125, spa: 40, spd: 80, spe: 70 },
|
||||
abilities: { 0: "Bulletproof", H: "Rough Skin" },
|
||||
weightkg: 66.6,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
bellolysk: {
|
||||
num: 9057,
|
||||
name: "Bellolysk",
|
||||
types: ["Dragon", "Steel"],
|
||||
baseStats: { hp: 100, atk: 90, def: 85, spa: 105, spd: 75, spe: 70 },
|
||||
abilities: { 0: "Magic Guard", H: "Multiscale" },
|
||||
weightkg: 999,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
tryonite: {
|
||||
num: 9058,
|
||||
name: "Tryonite",
|
||||
types: ["Bug", "Ground"],
|
||||
baseStats: { hp: 75, atk: 75, def: 90, spa: 100, spd: 105, spe: 90 },
|
||||
abilities: { 0: "Drought", H: "Sturdy" },
|
||||
weightkg: 7,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
scarachnid: {
|
||||
num: 9059,
|
||||
name: "Scarachnid",
|
||||
types: ["Ghost", "Bug"],
|
||||
baseStats: { hp: 81, atk: 112, def: 70, spa: 31, spd: 70, spe: 121 },
|
||||
abilities: { 0: "Regenerator", H: "Perish Body" },
|
||||
weightkg: 14,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
geigeramp: {
|
||||
num: 9060,
|
||||
name: "Geigeramp",
|
||||
types: ["Poison", "Electric"],
|
||||
baseStats: { hp: 100, atk: 50, def: 100, spa: 100, spd: 100, spe: 75 },
|
||||
abilities: { 0: "Levitate" },
|
||||
weightkg: 20,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
maldractice: {
|
||||
num: 9061,
|
||||
name: "Maldractice",
|
||||
types: ["Dragon", "Poison"],
|
||||
baseStats: { hp: 110, atk: 100, def: 60, spa: 20, spd: 115, spe: 40 },
|
||||
abilities: { 0: "Own Tempo", H: "Corrosion" },
|
||||
weightkg: 67,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
serpvoltidae: {
|
||||
num: 9062,
|
||||
name: "Serpvoltidae",
|
||||
types: ["Electric", "Ground"],
|
||||
baseStats: { hp: 110, atk: 45, def: 90, spa: 115, spd: 90, spe: 45 },
|
||||
abilities: { 0: "Teravolt", 1: "Shed Skin", H: "Natural Cure" },
|
||||
weightkg: 69,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
sheepquake: {
|
||||
num: 9063,
|
||||
name: "Sheepquake",
|
||||
types: ["Normal", "Ground"],
|
||||
baseStats: { hp: 110, atk: 30, def: 95, spa: 85, spd: 95, spe: 95 },
|
||||
abilities: { 0: "Sheer Force" },
|
||||
weightkg: 126,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
bufferfly: {
|
||||
num: 9064,
|
||||
name: "Bufferfly",
|
||||
types: ["Fighting", "Bug"],
|
||||
baseStats: { hp: 105, atk: 110, def: 70, spa: 20, spd: 90, spe: 65 },
|
||||
abilities: { 0: "Magic Bounce" },
|
||||
weightkg: 121,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
dastard: {
|
||||
num: 9065,
|
||||
name: "Dastard",
|
||||
types: ["Fairy", "Poison"],
|
||||
baseStats: { hp: 80, atk: 90, def: 110, spa: 100, spd: 80, spe: 100 },
|
||||
abilities: { 0: "Competitive" },
|
||||
weightkg: 55,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
cottentration: {
|
||||
num: 9066,
|
||||
name: "Cottentration",
|
||||
types: ["Grass", "Fighting"],
|
||||
baseStats: { hp: 50, atk: 50, def: 50, spa: 110, spd: 110, spe: 110 },
|
||||
abilities: { 0: "Chlorophyll" },
|
||||
weightkg: 0.8,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
sorrowcean: {
|
||||
num: 9067,
|
||||
name: "Sorrowcean",
|
||||
types: ["Water", "Ghost"],
|
||||
baseStats: { hp: 85, atk: 30, def: 85, spa: 100, spd: 70, spe: 108 },
|
||||
abilities: { 0: "Flare Boost", H: "Illusion" },
|
||||
weightkg: 15,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
psyllapse: {
|
||||
num: 9068,
|
||||
name: "Psyllapse",
|
||||
types: ["Psychic", "Normal"],
|
||||
baseStats: { hp: 100, atk: 95, def: 85, spa: 95, spd: 85, spe: 60 },
|
||||
abilities: { 0: "Prankster" },
|
||||
weightkg: 70,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
haarstorm: {
|
||||
num: 9069,
|
||||
name: "Haarstorm",
|
||||
types: ["Ghost", "Electric"],
|
||||
baseStats: { hp: 80, atk: 90, def: 75, spa: 30, spd: 115, spe: 105 },
|
||||
abilities: { 0: "Neutralizing Gas", H: "Natural Cure" },
|
||||
weightkg: 9,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
borealis: {
|
||||
num: 9070,
|
||||
name: "Borealis",
|
||||
types: ["Ice", "Flying"],
|
||||
baseStats: { hp: 95, atk: 75, def: 90, spa: 95, spd: 90, spe: 131 },
|
||||
abilities: { 0: "Supreme Overlord" },
|
||||
weightkg: 63,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
bazhigangquan: {
|
||||
num: 9071,
|
||||
name: "Bazhigangquan",
|
||||
types: ["Fighting", "Steel"],
|
||||
baseStats: { hp: 101, atk: 104, def: 100, spa: 35, spd: 61, spe: 68 },
|
||||
abilities: { 0: "Technician" },
|
||||
weightkg: 219,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
leechmonner: {
|
||||
num: 9072,
|
||||
name: "Leechmonner",
|
||||
types: ["Water", "Bug"],
|
||||
baseStats: { hp: 105, atk: 115, def: 70, spa: 40, spd: 110, spe: 65 },
|
||||
abilities: { 0: "Drizzle", H: "Water Veil" },
|
||||
weightkg: 922,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
ironcrest: {
|
||||
num: 9073,
|
||||
name: "Iron Crest",
|
||||
types: ["Flying", "Fighting"],
|
||||
baseStats: { hp: 72, atk: 96, def: 78, spa: 114, spd: 72, spe: 98 },
|
||||
abilities: { 0: "Quark Drive" },
|
||||
weightkg: 1.9,
|
||||
eggGroups: ["Undiscovered"],
|
||||
tags: ["Paradox"],
|
||||
},
|
||||
odonata: {
|
||||
num: 9074,
|
||||
name: "Odonata",
|
||||
types: ["Flying", "Dragon"],
|
||||
baseStats: { hp: 125, atk: 100, def: 80, spa: 60, spd: 80, spe: 75 },
|
||||
abilities: { 0: "Shield Dust", 1: "Aerilate", H: "Tough Claws" },
|
||||
weightkg: 45,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
hebicikuga: {
|
||||
num: 9075,
|
||||
name: "Hebicikuga",
|
||||
types: ["Bug", "Dragon"],
|
||||
baseStats: { hp: 85, atk: 115, def: 75, spa: 80, spd: 95, spe: 115 },
|
||||
abilities: { 0: "Soul-Heart", H: "Technician" },
|
||||
weightkg: 382.5,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
devestial: {
|
||||
num: 9076,
|
||||
name: "Devestial",
|
||||
types: ["Fairy", "Ground"],
|
||||
baseStats: { hp: 110, atk: 105, def: 100, spa: 115, spd: 90, spe: 80 },
|
||||
abilities: { 0: "Cud Chew" },
|
||||
weightkg: 340,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
lundicare: {
|
||||
num: 9077,
|
||||
name: "Lundicare",
|
||||
types: ["Normal", "Fairy"],
|
||||
baseStats: { hp: 101, atk: 81, def: 103, spa: 101, spd: 109, spe: 111 },
|
||||
abilities: { 0: "Prism Armor", H: "Trace" },
|
||||
weightkg: 606,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
// Meta C
|
||||
lyvamp: {
|
||||
num: 9078,
|
||||
name: "Lyvamp",
|
||||
types: ["Electric", "Flying"],
|
||||
baseStats: { hp: 96, atk: 100, def: 70, spa: 41, spd: 70, spe: 91 },
|
||||
abilities: { 0: "Regenerator", H: "Insomnia" },
|
||||
weightkg: 189,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
treatmint: {
|
||||
num: 9079,
|
||||
name: "Treatmint",
|
||||
types: ["Grass", "Poison"],
|
||||
baseStats: { hp: 100, atk: 25, def: 90, spa: 100, spd: 70, spe: 45 },
|
||||
abilities: { 0: "Filter", H: "Natural Cure" },
|
||||
weightkg: 8.4,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
turvarpega: {
|
||||
num: 9080,
|
||||
name: "Turvarpega",
|
||||
types: ["Ground", "Flying"],
|
||||
baseStats: { hp: 100, atk: 100, def: 85, spa: 30, spd: 70, spe: 55 },
|
||||
abilities: { 0: "Rock Head", H: "Big Pecks" },
|
||||
weightkg: 680,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
goodjur: {
|
||||
num: 9081,
|
||||
name: "Goodjur",
|
||||
types: ["Psychic", "Fighting"],
|
||||
baseStats: { hp: 70, atk: 25, def: 60, spa: 120, spd: 70, spe: 90 },
|
||||
abilities: { 0: "Natural Cure" },
|
||||
weightkg: 42.5,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
liftaton: {
|
||||
num: 9082,
|
||||
name: "Liftaton",
|
||||
types: ["Steel"],
|
||||
baseStats: { hp: 110, atk: 90, def: 80, spa: 80, spd: 85, spe: 20 },
|
||||
abilities: { 0: "Mold Breaker" },
|
||||
weightkg: 180,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
triceracotta: {
|
||||
num: 9083,
|
||||
name: "Triceracotta",
|
||||
types: ["Ground", "Ghost"],
|
||||
baseStats: { hp: 84, atk: 111, def: 95, spa: 35, spd: 75, spe: 84 },
|
||||
abilities: { 0: "Flash Fire", H: "Technician" },
|
||||
weightkg: 100,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
woolverine: {
|
||||
num: 9084,
|
||||
name: "Woolverine",
|
||||
types: ["Dark", "Fairy"],
|
||||
baseStats: { hp: 70, atk: 120, def: 70, spa: 40, spd: 70, spe: 70 },
|
||||
abilities: { 0: "Lingering Aroma", H: "Fluffy" },
|
||||
weightkg: 40,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
combustoad: {
|
||||
num: 9085,
|
||||
name: "Combustoad",
|
||||
types: ["Fire", "Ground"],
|
||||
baseStats: { hp: 70, atk: 95, def: 70, spa: 63, spd: 70, spe: 108 },
|
||||
abilities: { 0: "Neutralizing Gas" },
|
||||
weightkg: 2,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
hearthind: {
|
||||
num: 9086,
|
||||
name: "Hearthind",
|
||||
types: ["Fire", "Fighting"],
|
||||
baseStats: { hp: 71, atk: 93, def: 68, spa: 20, spd: 66, spe: 122 },
|
||||
abilities: { 0: "Grassy Surge" },
|
||||
weightkg: 11.3,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
koiryu: {
|
||||
num: 9087,
|
||||
name: "Koiryu",
|
||||
types: ["Water", "Dragon"],
|
||||
baseStats: { hp: 90, atk: 25, def: 60, spa: 100, spd: 90, spe: 60 },
|
||||
abilities: { 0: "Multiscale", 1: "Water Veil", H: "Torrent" },
|
||||
weightkg: 829.7,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
pestiligy: {
|
||||
num: 9088,
|
||||
name: "Pestiligy",
|
||||
types: ["Poison", "Ghost"],
|
||||
baseStats: { hp: 105, atk: 15, def: 107, spa: 77, spd: 96, spe: 61 },
|
||||
abilities: { 0: "Liquid Ooze", H: "Sheer Force" },
|
||||
weightkg: 11.3,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
saxum: {
|
||||
num: 9089,
|
||||
name: "Saxum",
|
||||
types: ["Rock", "Ground"],
|
||||
baseStats: { hp: 70, atk: 100, def: 70, spa: 100, spd: 70, spe: 65 },
|
||||
abilities: { 0: "Levitate" },
|
||||
weightkg: 430,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
sascratch: {
|
||||
num: 9090,
|
||||
name: "Sascratch",
|
||||
types: ["Ice", "Rock"],
|
||||
baseStats: { hp: 70, atk: 100, def: 95, spa: 50, spd: 60, spe: 110 },
|
||||
abilities: { 0: "Tough Claws", 1: "Unnerve", H: "Perish Body" },
|
||||
weightkg: 20,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
guttergar: {
|
||||
num: 9091,
|
||||
name: "Guttergar",
|
||||
types: ["Water"],
|
||||
baseStats: { hp: 116, atk: 108, def: 55, spa: 30, spd: 104, spe: 63 },
|
||||
abilities: { 0: "Mold Breaker", H: "Water Veil" },
|
||||
weightkg: 106,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
rakasa: {
|
||||
num: 9092,
|
||||
name: "Rakasa",
|
||||
types: ["Psychic", "Fairy"],
|
||||
baseStats: { hp: 101, atk: 31, def: 79, spa: 105, spd: 81, spe: 23 },
|
||||
abilities: { 0: "Prankster" },
|
||||
weightkg: 19,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
thermostatic: {
|
||||
num: 9093,
|
||||
name: "Thermostatic",
|
||||
types: ["Electric"],
|
||||
baseStats: { hp: 90, atk: 50, def: 105, spa: 90, spd: 85, spe: 35 },
|
||||
abilities: { 0: "Electromorphosis", H: "Wind Power" },
|
||||
weightkg: 60,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
formaldehydra: {
|
||||
num: 9094,
|
||||
name: "Formaldehydra",
|
||||
types: ["Poison", "Dragon"],
|
||||
baseStats: { hp: 95, atk: 100, def: 110, spa: 60, spd: 85, spe: 60 },
|
||||
abilities: { 0: "Rough Skin", H: "Stench" },
|
||||
weightkg: 165.5,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
strumorthio: {
|
||||
num: 9095,
|
||||
name: "Strumorthio",
|
||||
types: ["Normal", "Ghost"],
|
||||
baseStats: { hp: 90, atk: 20, def: 87, spa: 95, spd: 95, spe: 20 },
|
||||
abilities: { 0: "Early Bird", H: "Levitate" },
|
||||
weightkg: 110,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
ironmike: {
|
||||
num: 9096,
|
||||
name: "Iron Mike",
|
||||
types: ["Fairy", "Normal"],
|
||||
baseStats: { hp: 88, atk: 30, def: 68, spa: 106, spd: 76, spe: 106 },
|
||||
abilities: { 0: "Quark Drive" },
|
||||
weightkg: 51.8,
|
||||
eggGroups: ["Undiscovered"],
|
||||
tags: ["Paradox"],
|
||||
},
|
||||
whalestro: {
|
||||
num: 9097,
|
||||
name: "Whalestro",
|
||||
types: ["Steel", "Water"],
|
||||
baseStats: { hp: 90, atk: 40, def: 100, spa: 90, spd: 70, spe: 40 },
|
||||
abilities: { 0: "Punk Rock" },
|
||||
weightkg: 999,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
urslag: {
|
||||
num: 9098,
|
||||
name: "Urslag",
|
||||
types: ["Ground", "Steel"],
|
||||
baseStats: { hp: 90, atk: 30, def: 105, spa: 109, spd: 85, spe: 74 },
|
||||
abilities: { 0: "Flash Fire", H: "Iron Barbs" },
|
||||
weightkg: 723,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
centaghoul: {
|
||||
num: 9099,
|
||||
name: "Centaghoul",
|
||||
types: ["Ghost", "Steel"],
|
||||
baseStats: { hp: 87, atk: 108, def: 94, spa: 30, spd: 115, spe: 31 },
|
||||
abilities: { 0: "Bulletproof", H: "Pickpocket" },
|
||||
weightkg: 105,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
noirwark: {
|
||||
num: 9100,
|
||||
name: "Noirwark",
|
||||
types: ["Dark", "Fighting"],
|
||||
baseStats: { hp: 85, atk: 30, def: 95, spa: 80, spd: 85, spe: 95 },
|
||||
abilities: { 0: "Shadow Shield" },
|
||||
weightkg: 75,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
metarachne: {
|
||||
num: 9101,
|
||||
name: "Metarachne",
|
||||
types: ["Bug", "Steel"],
|
||||
baseStats: { hp: 105, atk: 105, def: 70, spa: 45, spd: 70, spe: 30 },
|
||||
abilities: { 0: "Analytic", 1: "Bulletproof", H: "Swarm" },
|
||||
weightkg: 985.9,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
};
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
|
||||
spriteviewer: {
|
||||
effectType: 'ValidatorRule',
|
||||
name: 'Sprite Viewer',
|
||||
desc: "Displays a fakemon's sprite in chat when it is switched in for the first time",
|
||||
onBegin() {
|
||||
this.add('rule', 'Sprite Viewer: Displays sprites in chat');
|
||||
},
|
||||
onSwitchIn(pokemon) {
|
||||
if (!this.effectState[pokemon.species.id]) {
|
||||
this.add('-message', `${pokemon.species.name}'s Sprite:`);
|
||||
this.add(`raw|<img src="https://raw.githubusercontent.com/scoopapa/DH2/refs/heads/main/data/mods/blankcanvas/sprites/front/${pokemon.species.id}.png" height="96" width="96">`);
|
||||
this.effectState[pokemon.species.id] = true;
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
export const Scripts: ModdedBattleScriptsData = {
|
||||
gen: 9,
|
||||
};
|
||||
|
|
@ -604,7 +604,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
|
|||
shortDesc: "Moves ignore charge/recharge turns.",
|
||||
},
|
||||
biogenesis: {
|
||||
onSwitchInPriority: 1,
|
||||
onSwitchInPriority: -1,
|
||||
onBeforeSwitchIn(pokemon) {
|
||||
if (pokemon.m.didRandomMoves) return;
|
||||
const moves = this.dex.moves.all();
|
||||
|
|
@ -810,4 +810,147 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
|
|||
num: -117,
|
||||
shortDesc: "Sets terrain depending on HP value.",
|
||||
},
|
||||
dragonsjaw: {
|
||||
onBasePower(basePower, attacker, defender, move) {
|
||||
if (defender.hasType('Dragon') && defender.hasType('Steel')) {
|
||||
return this.chainModify(1.5);
|
||||
} else if (defender.hasType('Dragon')) {
|
||||
return this.chainModify(2.25);
|
||||
} else if (defender.hasType('Steel')) {
|
||||
return;
|
||||
} else return this.chainModify(1.5);
|
||||
},
|
||||
onTryHit(target, source, move) {
|
||||
if (target.hasType('Fairy')) {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
onModifyMovePriority: -2,
|
||||
onModifyMove(move) {
|
||||
if (move.secondaries) {
|
||||
this.debug('doubling secondary chance');
|
||||
for (const secondary of move.secondaries) {
|
||||
if (secondary.chance) secondary.chance *= 2;
|
||||
}
|
||||
}
|
||||
if (move.self?.chance) move.self.chance *= 2;
|
||||
},
|
||||
flags: {},
|
||||
name: "Dragon's Jaw",
|
||||
rating: 5,
|
||||
num: -118,
|
||||
shortDesc: "Serene Grace + Bite attacks are Dragon type.",
|
||||
},
|
||||
corrosivesoul: {
|
||||
onStart(source) {
|
||||
this.field.setTerrain('corrosivesoul');
|
||||
},
|
||||
condition: {
|
||||
effectType: 'Terrain',
|
||||
duration: 5,
|
||||
durationCallback(source, effect) {
|
||||
if (source?.hasItem('terrainextender')) {
|
||||
return 8;
|
||||
}
|
||||
return 5;
|
||||
},
|
||||
onFieldStart(field, source, effect) {
|
||||
if (effect?.effectType === 'Ability') {
|
||||
this.add('-fieldstart', 'move: Corrosive Soul', '[from] ability: ' + effect.name, `[of] ${source}`);
|
||||
} else {
|
||||
this.add('-fieldstart', 'move: Corrosive Soul');
|
||||
}
|
||||
},
|
||||
onResidualOrder: 5,
|
||||
onResidualSubOrder: 2,
|
||||
onResidual(pokemon) {
|
||||
const move = this.dex.getActiveMove('smog');
|
||||
move.accuracy = 100;
|
||||
const target = pokemon.foes()[0];
|
||||
if (target && !target.fainted) {
|
||||
this.actions.useMove(move, pokemon, { target });
|
||||
}
|
||||
},
|
||||
onFieldResidualOrder: 27,
|
||||
onFieldResidualSubOrder: 7,
|
||||
onFieldEnd() {
|
||||
this.add('-fieldend', 'move: Corrosive Soul');
|
||||
},
|
||||
},
|
||||
flags: {},
|
||||
name: "Corrosive Soul",
|
||||
rating: 5,
|
||||
num: -119,
|
||||
shortDesc: "Sets Corrosive Terrian: active Pokemon hit each other with Smog.",
|
||||
},
|
||||
oceanicblessing: {
|
||||
onSwitchInPriority: -2,
|
||||
onStart(pokemon) {
|
||||
this.singleEvent('WeatherChange', this.effect, this.effectState, pokemon);
|
||||
},
|
||||
onWeatherChange(pokemon) {
|
||||
if (!pokemon.isActive || pokemon.baseSpecies.baseSpecies !== 'Kyogre' || pokemon.transformed) return;
|
||||
if (!pokemon.hp) return;
|
||||
if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) {
|
||||
if (pokemon.species.id !== 'kyogreprimal') {
|
||||
pokemon.formeChange('Kyogre-Primal', this.effect, false);
|
||||
}
|
||||
} else {
|
||||
if (pokemon.species.id === 'kyogreprimal') {
|
||||
pokemon.formeChange('kyogre', this.effect, false);
|
||||
}
|
||||
}
|
||||
},
|
||||
onAllyModifyAtkPriority: 3,
|
||||
onAllyModifyAtk(atk, pokemon) {
|
||||
if (this.effectState.target.baseSpecies.baseSpecies !== 'Kyogre') return;
|
||||
if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) {
|
||||
return this.chainModify(1.5);
|
||||
}
|
||||
},
|
||||
onAllyModifySpDPriority: 4,
|
||||
onAllyModifySpD(spd, pokemon) {
|
||||
if (this.effectState.target.baseSpecies.baseSpecies !== 'Kyogre') return;
|
||||
if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) {
|
||||
return this.chainModify(1.5);
|
||||
}
|
||||
},
|
||||
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, breakable: 1 },
|
||||
name: "Oceanic Blessing",
|
||||
rating: 5,
|
||||
num: -120,
|
||||
shortDesc: "Flower Gift but Kyogre",
|
||||
},
|
||||
autospin: {
|
||||
onResidual(pokemon, s, effect) {
|
||||
const move = this.dex.getActiveMove('metronome');
|
||||
const target = pokemon.foes()[0];
|
||||
if (target && !target.fainted && (pokemon.hp >= pokemon.maxhp / 2)) {
|
||||
this.actions.useMove(move, pokemon, { target, sourceEffect: effect });
|
||||
} else if (target && !target.fainted && (pokemon.hp <= pokemon.maxhp / 10)) {
|
||||
this.actions.useMove(move, pokemon, { target, sourceEffect: effect });
|
||||
this.actions.useMove(move, pokemon, { target, sourceEffect: effect });
|
||||
this.actions.useMove(move, pokemon, { target, sourceEffect: effect });
|
||||
} else if (target && !target.fainted) {
|
||||
this.actions.useMove(move, pokemon, { target, sourceEffect: effect });
|
||||
this.actions.useMove(move, pokemon, { target, sourceEffect: effect });
|
||||
}
|
||||
},
|
||||
flags: {},
|
||||
name: "Auto Spin",
|
||||
rating: 5,
|
||||
num: -121,
|
||||
shortDesc: "Use Metronome at end of turn.",
|
||||
},
|
||||
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.",
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -119,4 +119,22 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
|
|||
gen: 2,
|
||||
desc: "Doubles Attack.",
|
||||
},
|
||||
focusband: {
|
||||
name: "Focus Band",
|
||||
spritenum: 150,
|
||||
fling: {
|
||||
basePower: 10,
|
||||
},
|
||||
onDamagePriority: -40,
|
||||
onDamage(damage, target, source, effect) {
|
||||
const chance = Math.max(Math.floor(target.hp / target.maxhp), 10);
|
||||
if (this.randomChance(chance, 100) && damage >= target.hp && effect && effect.effectType === 'Move') {
|
||||
this.add("-activate", target, "item: Focus Band");
|
||||
return target.hp - 1;
|
||||
}
|
||||
},
|
||||
num: 230,
|
||||
gen: 2,
|
||||
desc: "Chance to survive attack equal to percentage of remaining HP, minimum 10%.",
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -284,7 +284,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
|
|||
secondary: null,
|
||||
target: "normal",
|
||||
type: "Water",
|
||||
zMove: { boost: { atk: 1 } },
|
||||
zMove: { boost: { spe: 1 } },
|
||||
contestType: "Beautiful",
|
||||
desc: "Encore + Rain Dance",
|
||||
shortDesc: "Encore + Rain Dance",
|
||||
|
|
@ -531,7 +531,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
|
|||
} else {
|
||||
this.boost({ spe: 3 }, pokemon);
|
||||
}
|
||||
// adds volatile ordered, which prevents the order up effect from occuring again until Dondozo switches out
|
||||
// adds volatile ordered, which prevents the order up effect from occurring again until Dondozo switches out
|
||||
pokemon.addVolatile('ordered');
|
||||
// removes the side condition
|
||||
pokemon.side.removeSideCondition('orderup');
|
||||
|
|
@ -1603,4 +1603,118 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
|
|||
shortDesc: "5 turns. Can't status,-Dragon power vs grounded, +Fairy power.",
|
||||
desc: "5 turns. Can't status,-Dragon power vs grounded, +Fairy power.",
|
||||
},
|
||||
lootbox: {
|
||||
num: -1015,
|
||||
accuracy: 100,
|
||||
basePower: 0,
|
||||
category: "Physical",
|
||||
name: "Loot Box",
|
||||
pp: 15,
|
||||
priority: 0,
|
||||
flags: { protect: 1, mirror: 1, metronome: 1 },
|
||||
onModifyMove(move, pokemon, target) {
|
||||
const rand = this.random(8);
|
||||
if (rand < 2) {
|
||||
move.basePower = 0;
|
||||
} else if (rand < 4) {
|
||||
move.basePower = 60;
|
||||
} else if (rand < 6) {
|
||||
move.basePower = 120;
|
||||
} else {
|
||||
move.basePower = 150;
|
||||
}
|
||||
},
|
||||
onTryMove() {
|
||||
this.attrLastMove('[still]');
|
||||
},
|
||||
onPrepareHit(target, source) {
|
||||
this.add('-anim', source, 'Explosion', target);
|
||||
this.add('-anim', source, 'Mind Blown', target);
|
||||
},
|
||||
secondary: null,
|
||||
target: "normal",
|
||||
type: "Normal",
|
||||
contestType: "Cute",
|
||||
},
|
||||
sinisterarrows: {
|
||||
num: -1016,
|
||||
accuracy: 100,
|
||||
basePower: 50,
|
||||
category: "Physical",
|
||||
name: "Sinister Arrows",
|
||||
pp: 10,
|
||||
priority: 0,
|
||||
flags: { allyanim: 1, metronome: 1, futuremove: 1 },
|
||||
ignoreImmunity: true,
|
||||
onTry(source, target) {
|
||||
if (!target.side.addSlotCondition(target, 'sinisterarrows')) return false;
|
||||
Object.assign(target.side.slotConditions[target.position]['sinisterarrows'], {
|
||||
move: 'sinisterarrows',
|
||||
source,
|
||||
moveData: {
|
||||
id: 'sinisterarrows',
|
||||
name: "Sinister Arrows",
|
||||
accuracy: 100,
|
||||
basePower: 50,
|
||||
category: "Physical",
|
||||
priority: 0,
|
||||
flags: { allyanim: 1, metronome: 1, futuremove: 1 },
|
||||
ignoreImmunity: false,
|
||||
effectType: 'Move',
|
||||
type: 'Ghost',
|
||||
},
|
||||
});
|
||||
this.add('-start', source, 'move: Sinister Arrows');
|
||||
return this.NOT_FAIL;
|
||||
},
|
||||
onTryMove(target, source, move) {
|
||||
this.add('-anim', source, 'Curse', target);
|
||||
this.add('-anim', source, 'Spite', target);
|
||||
},
|
||||
condition: {
|
||||
onStart(target) {
|
||||
this.effectState.targetSlot = target.getSlot();
|
||||
this.effectState.endingTurn = (this.turn - 1) + 3;
|
||||
},
|
||||
onResidualOrder: 5,
|
||||
onResidualSubOrder: 2,
|
||||
onResidual(target) {
|
||||
const data = this.effectState;
|
||||
// time's up; time to hit! :D
|
||||
const move = this.dex.moves.get(data.move);
|
||||
if (target.fainted || target === data.source) {
|
||||
this.hint(`${move.name} did not hit because the target is ${(target.fainted ? 'fainted' : 'the user')}.`);
|
||||
return;
|
||||
}
|
||||
if (!this.getOverflowedTurnCount()) return;
|
||||
target.removeVolatile('Protect');
|
||||
target.removeVolatile('Endure');
|
||||
if (data.source.hasAbility('infiltrator') && this.gen >= 6) {
|
||||
data.moveData.infiltrates = true;
|
||||
}
|
||||
if (data.source.hasAbility('normalize') && this.gen >= 6) {
|
||||
data.moveData.type = 'Normal';
|
||||
}
|
||||
const hitMove = new this.dex.Move(data.moveData) as ActiveMove;
|
||||
this.actions.trySpreadMoveHit([target], data.source, hitMove, true);
|
||||
this.hint(`${move.name} hits.`);
|
||||
if (data.source.isActive && data.source.hasItem('lifeorb') && this.gen >= 5) {
|
||||
this.singleEvent('AfterMoveSecondarySelf', data.source.getItem(), data.source.itemState, data.source, target, data.source.getItem());
|
||||
}
|
||||
this.activeMove = null;
|
||||
this.checkWin();
|
||||
if (this.getOverflowedTurnCount() >= this.effectState.endingTurn) {
|
||||
target.side.removeSlotCondition(this.getAtSlot(this.effectState.targetSlot), 'sinisterarrows');
|
||||
}
|
||||
},
|
||||
},
|
||||
secondary: null,
|
||||
target: "normal",
|
||||
type: "Ghost",
|
||||
contestType: "Clever",
|
||||
},
|
||||
mortalspin: {
|
||||
inherit: true,
|
||||
category: "Special",
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -443,4 +443,49 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
|
|||
abilities: { 0: "Weak Armor" },
|
||||
types: ["Dark", "Ground"],
|
||||
},
|
||||
feraligatr: {
|
||||
inherit: true,
|
||||
},
|
||||
feraligatrmega: {
|
||||
num: -988,
|
||||
name: "Feraligatr-Mega",
|
||||
baseSpecies: "Feraligatr",
|
||||
forme: "Mega",
|
||||
types: ["Dragon"],
|
||||
genderRatio: { M: 0.875, F: 0.125 },
|
||||
baseStats: { hp: 85, atk: 145, def: 120, spa: 99, spd: 103, spe: 78 },
|
||||
abilities: { 0: "Dragon's Jaw" },
|
||||
heightm: 2.3,
|
||||
weightkg: 108.8,
|
||||
color: "Blue",
|
||||
eggGroups: ["Monster", "Water 1"],
|
||||
requiredItem: "Feraligite",
|
||||
gen: 9,
|
||||
},
|
||||
salazzle: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Corrosive Soul" },
|
||||
},
|
||||
kyogre: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Oceanic Blessing" },
|
||||
},
|
||||
azelf: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Auto Spin" },
|
||||
types: ["Psychic", "Normal"],
|
||||
},
|
||||
decidueye: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Overgrow", 1: "Sniper" },
|
||||
},
|
||||
ogerponcornerstone: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Solid Rock" },
|
||||
types: ["Psychic", "Normal"],
|
||||
},
|
||||
glimmora: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Corrosion" },
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -270,5 +270,29 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
this.modData('Learnsets', 'mandibuzz').learnset.fling = ['9L1'];
|
||||
this.modData('Learnsets', 'mandibuzz').learnset.scavenge = ['9L1'];
|
||||
this.modData('Learnsets', 'mandibuzz').learnset.bonemerang = ['9L1'];
|
||||
|
||||
this.modData('Learnsets', 'feraligatr').learnset.firefang = ['9L1'];
|
||||
this.modData('Learnsets', 'feraligatr').learnset.thunderfang = ['9L1'];
|
||||
this.modData('Learnsets', 'feraligatr').learnset.poisonfang = ['9L1'];
|
||||
|
||||
this.modData('Learnsets', 'salazzle').learnset.magmastorm = ['9L1'];
|
||||
this.modData('Learnsets', 'salazzle').learnset.malignantchain = ['9L1'];
|
||||
this.modData('Learnsets', 'salazzle').learnset.psychicnoise = ['9L1'];
|
||||
this.modData('Learnsets', 'salazzle').learnset.banefulbunker = ['9L1'];
|
||||
|
||||
this.modData('Learnsets', 'kyogre').learnset.hurricane = ['9L1'];
|
||||
this.modData('Learnsets', 'kyogre').learnset.tidalsurge = ['9L1'];
|
||||
|
||||
this.modData('Learnsets', 'azelf').learnset.rapidspin = ['9L1'];
|
||||
this.modData('Learnsets', 'azelf').learnset.lootbox = ['9L1'];
|
||||
this.modData('Learnsets', 'azelf').learnset.acupressure = ['9L1'];
|
||||
|
||||
this.modData('Learnsets', 'decidueye').learnset.sinisterarrows = ['9L1'];
|
||||
|
||||
this.modData('Learnsets', 'ogerpon').learnset.sappyseed = ['9L1'];
|
||||
this.modData('Learnsets', 'ogerpon').learnset.thousandwaves = ['9L1'];
|
||||
|
||||
this.modData('Learnsets', 'glimmora').learnset.icebeam = ['9L1'];
|
||||
this.modData('Learnsets', 'glimmora').learnset.malignantchain = ['9L1'];
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -554,7 +554,7 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
didSomething = true;
|
||||
// Check the status of the Pokémon whose turn is not.
|
||||
// When a move that affects stat levels is used, if the Pokémon whose turn it is not right now is paralyzed or
|
||||
// burned, the correspoding stat penalties will be applied again to that Pokémon.
|
||||
// burned, the corresponding stat penalties will be applied again to that Pokémon.
|
||||
if (pokemon.side.foe.active[0].status) {
|
||||
// If it's paralysed, quarter its speed.
|
||||
if (pokemon.side.foe.active[0].status === 'par') {
|
||||
|
|
|
|||
|
|
@ -169,7 +169,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
|
|||
}
|
||||
|
||||
// In SwSh, Fly's animation leaks the initial target through a camera focus
|
||||
// The animation leak target itself isn't "accurate"; the target it reveals is as if Fly weren't a charge movee
|
||||
// The animation leak target itself isn't "accurate"; the target it reveals is as if Fly weren't a charge move
|
||||
// (Fly, like all other charge moves, will actually target slots on its charging turn, relevant for things like Follow Me)
|
||||
// We use a generic single-target move to represent this
|
||||
if (this.sides.length > 2) {
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1380,7 +1380,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
doublesTier: "DUU",
|
||||
},
|
||||
absol: {
|
||||
tier: "RU",
|
||||
tier: "RUBL",
|
||||
doublesTier: "DUU",
|
||||
},
|
||||
snorunt: {
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -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 },
|
||||
|
|
|
|||
|
|
@ -1,140 +0,0 @@
|
|||
export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
|
||||
ange: {
|
||||
gen: 9,
|
||||
desc: "Gain 1/12 of max HP at the end of every turn. Opposing Megas lose 1/10 max HP every turn.",
|
||||
shortDesc: "Gain 1/12 of max HP at the end of every turn. Opposing Megas lose 1/10 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 / 10, target, pokemon);
|
||||
this.heal(target.baseMaxhp / 10);
|
||||
}
|
||||
} else {
|
||||
this.heal(pokemon.baseMaxhp / 12);
|
||||
}
|
||||
},
|
||||
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);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -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",
|
||||
},
|
||||
|
|
@ -93,7 +144,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "NFE",
|
||||
},
|
||||
alakazam: {
|
||||
tier: "OU",
|
||||
tier: "UU",
|
||||
},
|
||||
alakazammega: {
|
||||
tier: "Uber",
|
||||
|
|
@ -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",
|
||||
},
|
||||
|
|
@ -159,11 +228,23 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "LC",
|
||||
},
|
||||
starmie: {
|
||||
tier: "OU",
|
||||
tier: "UU",
|
||||
},
|
||||
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",
|
||||
},
|
||||
|
|
@ -276,7 +366,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "OU",
|
||||
},
|
||||
slowking: {
|
||||
tier: "OU",
|
||||
tier: "UU",
|
||||
},
|
||||
slowkinggalar: {
|
||||
tier: "OU",
|
||||
|
|
@ -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: "Uber",
|
||||
},
|
||||
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",
|
||||
},
|
||||
|
|
@ -639,7 +927,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "UU",
|
||||
},
|
||||
eelektrossmega: {
|
||||
tier: "UU",
|
||||
tier: "OU",
|
||||
},
|
||||
litwick: {
|
||||
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",
|
||||
},
|
||||
|
|
@ -774,7 +1104,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
|
|||
tier: "OU",
|
||||
},
|
||||
meowsticf: {
|
||||
tier: "(OU)",
|
||||
tier: "OU",
|
||||
},
|
||||
meowsticmmega: {
|
||||
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: "LC",
|
||||
},
|
||||
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: "Uber",
|
||||
},
|
||||
magearnaoriginalmega: {
|
||||
tier: "Uber",
|
||||
},
|
||||
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",
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -5,7 +5,15 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
|
|||
},
|
||||
victreebelmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Corrosion" },
|
||||
abilities: { 0: "Triage" },
|
||||
},
|
||||
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: "Rough Skin" },
|
||||
},
|
||||
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" },
|
||||
},
|
||||
meowsticmmega: {
|
||||
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: "Volt Absorb" },
|
||||
},
|
||||
falinksmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Brass Bond" },
|
||||
abilities: { 0: "Dauntless Shield" },
|
||||
},
|
||||
scovillainmega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Contrary" },
|
||||
},
|
||||
glimmoramega: {
|
||||
inherit: true,
|
||||
abilities: { 0: "Rocky Payload" },
|
||||
},
|
||||
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" },
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -9,7 +9,9 @@ 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', 'leek', 'thickclub', 'upgrade',
|
||||
'dubiousdisc', 'prismscale', 'maliciousarmor', 'auspiciousarmor', 'poweranklet', 'powerband', 'powerbelt', 'powerbracer',
|
||||
'powerlens', 'powerweight', 'bignugget', 'bottlecap', 'goldbottlecap', 'prismscale', 'sachet', 'whippeddream',
|
||||
];
|
||||
const legalBerries = [
|
||||
'aspearberry', 'babiriberry', 'chartiberry', 'cheriberry', 'chestoberry', 'chilanberry', 'chopleberry', 'cobaberry', 'colburberry',
|
||||
|
|
@ -18,12 +20,21 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
'sitrusberry', 'tamatoberry', 'tangaberry', 'wacanberry', 'yacheberry',
|
||||
];
|
||||
const votedLegalitems = [
|
||||
'heavydutyboots', 'choiceband', 'choicescarf', 'choicespecs',
|
||||
'heavydutyboots', 'choiceband', 'choicescarf', 'choicespecs', 'airballoon', 'loadeddice', 'mentalherb', 'powerherb', 'mirrorherb',
|
||||
'aguavberry', 'apicotberry', 'custapberry', 'enigmaberry', 'figyberry', 'ganlonberry', 'iapapaberry', 'jabocaberry', 'keeberry',
|
||||
'lansatberry', 'leppaberry', 'liechiberry', 'magoberry', 'marangaberry', 'micleberry', 'petayaberry', 'rowapberry', 'salacberry',
|
||||
'starfberry', 'wikiberry', 'abilityshield', 'blunderpolicy', 'blacksludge', 'lightclay', 'brightpowder', 'adrenalineorb', 'absorbbulb',
|
||||
'clearamulet', 'covertcloak', 'damprock', 'heatrock', 'icyrock', 'smoothrock', 'electricseed', 'mistyseed', 'psychicseed', 'grassyseed',
|
||||
'flameorb', 'toxicorb', 'gripclaw', 'laggingtail', 'metronome', 'protectivepads', 'punchingglove', 'razorclaw', 'razorfang', 'roomservice',
|
||||
'safetygoggles', 'shellbell', 'shedshell', 'stickybarb', 'terrainextender', 'throatspray', 'utilityumbrella', 'zoomlens', 'bindingband',
|
||||
'destinyknot', 'floatstone', 'ironball', 'machobrace', 'ringtarget', 'redcard', 'ejectpack', 'ejectbutton', 'souldew', 'cellbattery',
|
||||
'luminousmoss', 'oddincense', 'roseincense', 'seaincense', 'waveincense', 'snowball',
|
||||
];
|
||||
for (const i in this.data.Items) {
|
||||
if (this.data.Items[i].isNonstandard === 'CAP' || this.data.Items[i].isNonstandard === 'Custom') continue;
|
||||
if ([...legalItems, ...votedLegalitems, ...legalBerries].includes(i) || this.data.Items[i].megaStone) {
|
||||
if (['blazikenite', 'swampertite', 'sceptilite'].includes(i)) continue;
|
||||
if ([...legalItems, ...votedLegalitems, ...legalBerries].includes(i) ||
|
||||
this.data.Items[i].megaStone || this.data.Items[i].onDrive ||
|
||||
(this.data.Items[i].onPlate && !this.data.Items[i].zMove)) {
|
||||
this.modData('Items', i).isNonstandard = null;
|
||||
} else {
|
||||
this.modData('Items', i).isNonstandard = 'Past';
|
||||
|
|
@ -34,21 +45,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 +57,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 +110,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);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -3084,7 +3084,7 @@ export const Conditions: { [id: IDEntry]: ModdedConditionData & { innateName?: s
|
|||
},
|
||||
},
|
||||
|
||||
// Effects needed to be overriden for things to happen
|
||||
// Effects needed to be overridden for things to happen
|
||||
attract: {
|
||||
onStart(pokemon, source, effect) {
|
||||
if (!(pokemon.gender === 'M' && source.gender === 'F') && !(pokemon.gender === 'F' && source.gender === 'M')) {
|
||||
|
|
|
|||
|
|
@ -27,9 +27,9 @@ export const ssbSets: SSBSets = {
|
|||
signatureMove: 'Move Name',
|
||||
evs: {stat: number}, ivs: {stat: number}, nature: 'Nature', teraType: 'Type',
|
||||
},
|
||||
// Species, ability, and item need to be captialized properly ex: Ludicolo, Swift Swim, Life Orb
|
||||
// Species, ability, and item need to be capitalized properly ex: Ludicolo, Swift Swim, Life Orb
|
||||
// Gender can be M, F, N, or left as an empty string
|
||||
// each slot in moves needs to be a string (the move name, captialized properly ex: Hydro Pump), or an array of strings (also move names)
|
||||
// each slot in moves needs to be a string (the move name, capitalized properly ex: Hydro Pump), or an array of strings (also move names)
|
||||
// signatureMove also needs to be capitalized properly ex: Scripting
|
||||
// You can skip Evs (defaults to 84 all) and/or Ivs (defaults to 31 all), or just skip part of the Evs (skipped evs are 0) and/or Ivs (skipped Ivs are 31)
|
||||
// You can also skip shiny, defaults to false. Level can be skipped (defaults to 100).
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
},
|
||||
|
|
|
|||
|
|
@ -5,10 +5,10 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
const item = this.data.Items[i];
|
||||
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.isNonstandard === "Past" || item.isNonstandard === "Future") this.modData('Items', i).isNonstandard = null;
|
||||
/* 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;
|
||||
}
|
||||
|
|
@ -405,7 +405,7 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
const oMegaSpecies = this.dex.species.get((species as any).originalSpecies);
|
||||
pokemon.formeChange(species, pokemon.getItem(), true);
|
||||
this.battle.add('-start', pokemon, oMegaSpecies.requiredItem, '[silent]');
|
||||
if (oSpecies.types.length !== pokemon.species.types.length || oSpecies.types[1] !== pokemon.species.types[1]) {
|
||||
if (oSpecies.types.join('/') !== pokemon.species.types.join('/')) {
|
||||
this.battle.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
|
||||
}
|
||||
// }
|
||||
|
|
@ -466,7 +466,12 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
return species;
|
||||
},
|
||||
getFormeChangeDeltas(formeChangeSpecies, pokemon) {
|
||||
const baseSpecies = this.dex.species.get(formeChangeSpecies.baseSpecies);
|
||||
// Should be fine as long as Necrozma-U doesn't get added or Game Freak makes me sad with some convoluted forme change
|
||||
let baseSpecies = this.dex.species.get(formeChangeSpecies.isMega ?
|
||||
formeChangeSpecies.battleOnly as string : formeChangeSpecies.baseSpecies);
|
||||
if (formeChangeSpecies.name === 'Zygarde-Mega') {
|
||||
baseSpecies = this.dex.species.get('Zygarde-Complete');
|
||||
}
|
||||
const deltas: {
|
||||
ability: string,
|
||||
baseStats: SparseStatsTable,
|
||||
|
|
@ -476,6 +481,7 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
requiredItem: string | undefined,
|
||||
type?: string,
|
||||
formeType?: string,
|
||||
isMega?: boolean,
|
||||
} = {
|
||||
ability: formeChangeSpecies.abilities['0'],
|
||||
baseStats: {},
|
||||
|
|
@ -491,15 +497,19 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
let formeType: string | null = null;
|
||||
if (['Arceus', 'Silvally'].includes(baseSpecies.name)) {
|
||||
deltas.type = formeChangeSpecies.types[0];
|
||||
formeType = 'Arceus';
|
||||
formeType = 'Primary';
|
||||
} else if (formeChangeSpecies.types.length > baseSpecies.types.length) {
|
||||
deltas.type = formeChangeSpecies.types[1];
|
||||
} else if (formeChangeSpecies.types.length < baseSpecies.types.length) {
|
||||
deltas.type = this.battle.ruleTable.has('mixandmegaoldaggronite') ? 'mono' : baseSpecies.types[0];
|
||||
} else if (formeChangeSpecies.types[1] !== baseSpecies.types[1]) {
|
||||
deltas.type = formeChangeSpecies.types[1];
|
||||
} else if (formeChangeSpecies.types[0] !== baseSpecies.types[0]) {
|
||||
deltas.type = formeChangeSpecies.types[0];
|
||||
formeType = 'Primary';
|
||||
deltas.isMega = true;
|
||||
}
|
||||
if (formeChangeSpecies.isMega) formeType = 'Mega';
|
||||
if (formeChangeSpecies.isMega && !formeType) formeType = 'Mega';
|
||||
if (formeChangeSpecies.isPrimal) formeType = 'Primal';
|
||||
if (formeChangeSpecies.name.endsWith('Crowned')) formeType = 'Crowned';
|
||||
if (formeType) deltas.formeType = formeType;
|
||||
|
|
@ -513,7 +523,7 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
if (!deltas) throw new TypeError("Must specify deltas!");
|
||||
const species = this.dex.deepClone(this.dex.species.get(speciesOrForme));
|
||||
species.abilities = { '0': deltas.ability };
|
||||
if (deltas.formeType === 'Arceus') {
|
||||
if (deltas.formeType === 'Primary') {
|
||||
const secondType = species.types[1];
|
||||
species.types = [deltas.type];
|
||||
if (secondType && secondType !== deltas.type) species.types.push(secondType);
|
||||
|
|
@ -532,7 +542,7 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
species.heightm = Math.max(0.1, ((species.heightm * 10) + (deltas.heightm * 10)) / 10);
|
||||
species.originalSpecies = deltas.originalSpecies;
|
||||
species.requiredItem = deltas.requiredItem;
|
||||
if (deltas.formeType === 'Mega') species.isMega = true;
|
||||
if (deltas.formeType === 'Mega' || deltas.isMega) species.isMega = true;
|
||||
if (deltas.formeType === 'Primal') species.isPrimal = true;
|
||||
return species;
|
||||
},
|
||||
|
|
|
|||
1795
data/mods/monsterhunter/abilities.ts
Normal file
1795
data/mods/monsterhunter/abilities.ts
Normal file
File diff suppressed because it is too large
Load Diff
370
data/mods/monsterhunter/conditions.ts
Normal file
370
data/mods/monsterhunter/conditions.ts
Normal file
|
|
@ -0,0 +1,370 @@
|
|||
export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = {
|
||||
frz: {
|
||||
onStart(target, source, sourceEffect) {
|
||||
this.add('-message', `${target.name} was Frostbitten! Special Attack halved! (Stat Change not visible)`);
|
||||
if (sourceEffect && sourceEffect.id === 'frostorb') {
|
||||
this.add('-status', target, 'frz', '[from] item: Frost Orb');
|
||||
} else if (sourceEffect && sourceEffect.effectType === 'Ability') {
|
||||
this.add('-status', target, 'frz', '[from] ability: ' + sourceEffect.name, `[of] ${source}`);
|
||||
} else {
|
||||
this.add('-status', target, 'frz');
|
||||
}
|
||||
},
|
||||
onResidualOrder: 10,
|
||||
onResidual(pokemon) {
|
||||
this.damage(pokemon.baseMaxhp / 16);
|
||||
},
|
||||
onModifySpA(spa, pokemon) {
|
||||
return this.chainModify(0.5);
|
||||
},
|
||||
},
|
||||
slp: {
|
||||
name: 'slp',
|
||||
effectType: 'Status',
|
||||
onStart(target, source, sourceEffect) {
|
||||
this.add('-message', `${target.name} is Drowsy! Damage taken is 1.2x; can't use same attack twice! Multi-Hits strike once!`);
|
||||
if (sourceEffect && sourceEffect.effectType === 'Ability') {
|
||||
this.add('-status', target, 'slp', '[from] ability: ' + sourceEffect.name, `[of] ${source}`);
|
||||
} else if (sourceEffect && sourceEffect.effectType === 'Move') {
|
||||
this.add('-status', target, 'slp', '[from] move: ' + sourceEffect.name);
|
||||
} else {
|
||||
this.add('-status', target, 'slp');
|
||||
}
|
||||
if (target.removeVolatile('nightmare')) {
|
||||
this.add('-end', target, 'Nightmare', '[silent]');
|
||||
}
|
||||
},
|
||||
onSourceModifyDamage(damage, source, target, move) {
|
||||
return this.chainModify(1.2);
|
||||
},
|
||||
onModifyMove(move, pokemon) {
|
||||
if (move.multihit) delete move.multihit;
|
||||
},
|
||||
onDisableMove(pokemon) {
|
||||
if (pokemon.lastMove && pokemon.lastMove.id !== 'struggle') {
|
||||
pokemon.disableMove(pokemon.lastMove.id);
|
||||
}
|
||||
},
|
||||
},
|
||||
par: {
|
||||
inherit: true,
|
||||
onStart(target, source, sourceEffect) {
|
||||
this.add('-message', `${target.name} is Paralyzed! Speed halved; will be fully paralyzed every 3 turns!`);
|
||||
if (sourceEffect && sourceEffect.effectType === 'Ability') {
|
||||
this.add('-status', target, 'par', '[from] ability: ' + sourceEffect.name, `[of] ${source}`);
|
||||
} else {
|
||||
this.add('-status', target, 'par');
|
||||
}
|
||||
},
|
||||
onResidual(pokemon) {
|
||||
if (this.effectState.static === undefined) this.effectState.static = 0;
|
||||
this.effectState.static++;
|
||||
if (this.effectState.static >= 3) {
|
||||
this.add('-message', `${pokemon.name} has too much static!`);
|
||||
} else {
|
||||
this.add('-message', `${pokemon.name} is building static!`);
|
||||
}
|
||||
},
|
||||
onSwitchOut(pokemon) {
|
||||
this.effectState.static = 0;
|
||||
},
|
||||
onSwitchIn(pokemon) {
|
||||
this.effectState.static = 0;
|
||||
},
|
||||
onBeforeMove(pokemon) {
|
||||
if (this.effectState.static >= 3) {
|
||||
this.add('cant', pokemon, 'par');
|
||||
this.effectState.static = 0;
|
||||
return false;
|
||||
}
|
||||
},
|
||||
},
|
||||
warmed: {
|
||||
name: 'Warmed',
|
||||
onStart(pokemon) {
|
||||
this.add('-start', pokemon, 'Warmed');
|
||||
},
|
||||
onModifySpAPriority: 5,
|
||||
onModifySpA(spa, pokemon) {
|
||||
return this.chainModify([5461, 4096]);
|
||||
},
|
||||
onModifyAtkPriority: 5,
|
||||
onModifyAtk(atk, pokemon) {
|
||||
return this.chainModify([5461, 4096]);
|
||||
},
|
||||
onEnd(pokemon) {
|
||||
this.add('-end', pokemon, 'Warmed');
|
||||
},
|
||||
},
|
||||
cooled: {
|
||||
name: 'Cooled',
|
||||
onStart(pokemon) {
|
||||
this.add('-start', pokemon, 'Cooled');
|
||||
},
|
||||
onModifyDefPriority: 5,
|
||||
onModifyDef(def, pokemon) {
|
||||
return this.chainModify([5325, 4096]);
|
||||
},
|
||||
onModifySpDPriority: 5,
|
||||
onModifySpD(spd, pokemon) {
|
||||
return this.chainModify([5325, 4096]);
|
||||
},
|
||||
onEnd(pokemon) {
|
||||
this.add('-end', pokemon, 'Cooled');
|
||||
},
|
||||
},
|
||||
blastblight: {
|
||||
name: 'Blastblight',
|
||||
onStart(pokemon) {
|
||||
this.add('-start', pokemon, 'Blasted');
|
||||
this.add('-message', `${pokemon.name} has Blastblight! Next hit will incur chip damage!`);
|
||||
},
|
||||
onDamagingHit(damage, target, source, move) {
|
||||
this.damage(target.baseMaxhp / 6, target, source);
|
||||
target.removeVolatile('blastblight');
|
||||
},
|
||||
onEnd(pokemon) {
|
||||
this.add('-end', pokemon, 'Blasted');
|
||||
},
|
||||
},
|
||||
bubbleblight: {
|
||||
name: 'Bubbleblight',
|
||||
duration: 4,
|
||||
onStart(pokemon) {
|
||||
this.add('-start', pokemon, 'Bubbled');
|
||||
this.add('-message', `${pokemon.name} has Bubbleblight! +1 Speed, -1 Accuracy!`);
|
||||
this.boost({ spe: 1, accuracy: -1 }, pokemon);
|
||||
},
|
||||
onEnd(pokemon) {
|
||||
this.boost({ spe: -1, accuracy: 1 }, pokemon);
|
||||
this.add('-end', pokemon, 'Bubbled');
|
||||
},
|
||||
},
|
||||
defensedown: {
|
||||
name: 'Defense Down',
|
||||
duration: 4,
|
||||
onStart(pokemon) {
|
||||
this.add('-start', pokemon, 'Defense Down');
|
||||
this.add('-message', `${pokemon.name} is afflicted with Defense Down! Defenses reduced by half for 3 turns!`);
|
||||
},
|
||||
onModifyDef(def, pokemon) {
|
||||
return this.chainModify(0.5);
|
||||
},
|
||||
onModifySpD(spd, pokemon) {
|
||||
return this.chainModify(0.5);
|
||||
},
|
||||
onEnd(pokemon) {
|
||||
this.add('-end', pokemon, 'Defense Down');
|
||||
},
|
||||
},
|
||||
stench: {
|
||||
name: 'Stench',
|
||||
duration: 4,
|
||||
onStart(pokemon) {
|
||||
this.add('-start', pokemon, 'Stench');
|
||||
this.add('-message', `${pokemon.name} is afflicted with Stench! Held item disabled!`);
|
||||
this.singleEvent('End', pokemon.getItem(), pokemon.itemState, pokemon);
|
||||
// Item suppression implemented in Pokemon.ignoringItem() within sim/pokemon.js
|
||||
},
|
||||
onDisableMove(pokemon) {
|
||||
for (const moveSlot of pokemon.moveSlots) {
|
||||
const move = this.dex.moves.get(moveSlot.id);
|
||||
if (move.category === 'Status' && move.id !== 'mefirst') {
|
||||
pokemon.disableMove(moveSlot.id);
|
||||
}
|
||||
}
|
||||
},
|
||||
onBeforeMovePriority: 5,
|
||||
onBeforeMove(attacker, defender, move) {
|
||||
if (!move.isZ && !move.isMax && move.category === 'Status' && move.id !== 'mefirst') {
|
||||
this.add('cant', attacker, 'move: Taunt', move);
|
||||
return false;
|
||||
}
|
||||
},
|
||||
onEnd(pokemon) {
|
||||
this.add('-end', pokemon, 'Stench');
|
||||
},
|
||||
},
|
||||
fatigue: {
|
||||
name: 'Fatigue',
|
||||
duration: 5,
|
||||
onStart(pokemon, source) {
|
||||
this.add('-start', pokemon, 'Fatigue');
|
||||
this.add('-message', `${pokemon.name} is Fatigued! Moves use more PP!`);
|
||||
},
|
||||
onDeductPP(pokemon) {
|
||||
return 1;
|
||||
},
|
||||
onEnd(pokemon) {
|
||||
this.add('-end', pokemon, 'Fatigue');
|
||||
},
|
||||
},
|
||||
bleeding: {
|
||||
name: 'Bleeding',
|
||||
onStart(pokemon) {
|
||||
this.add('-start', pokemon, 'Bleeding');
|
||||
this.add('-message', `${pokemon.name} is afflicted with Bleeding! Will take damage when attacking!`);
|
||||
},
|
||||
onAfterMoveSecondarySelf(source, target, move) {
|
||||
if (source && source !== target && move && move.category !== 'Status' && !source.forceSwitchFlag) {
|
||||
this.damage(source.baseMaxhp / 10, source, source);
|
||||
}
|
||||
},
|
||||
onEnd(pokemon) {
|
||||
this.add('-end', pokemon, 'Bleeding');
|
||||
},
|
||||
},
|
||||
snowman: {
|
||||
name: 'Snowman',
|
||||
onStart(pokemon) {
|
||||
this.add('-start', pokemon, 'Snowman');
|
||||
this.add('-message', `${pokemon.name} is a Snowman! Unable to move.`);
|
||||
},
|
||||
onBeforeMovePriority: 10,
|
||||
onBeforeMove(pokemon, target, move) {
|
||||
if (move.flags['defrost']) return;
|
||||
if (this.randomChance(1, 5)) {
|
||||
pokemon.cureStatus();
|
||||
return;
|
||||
}
|
||||
this.add('cant', pokemon, 'snowman');
|
||||
return false;
|
||||
},
|
||||
onModifyMove(move, pokemon) {
|
||||
if (move.flags['defrost']) {
|
||||
this.add('-curestatus', pokemon, 'snowman', `[from] move: ${move}`);
|
||||
pokemon.clearStatus();
|
||||
}
|
||||
},
|
||||
onAfterMoveSecondary(target, source, move) {
|
||||
if (move.thawsTarget) {
|
||||
target.cureStatus();
|
||||
}
|
||||
},
|
||||
onDamagingHit(damage, target, source, move) {
|
||||
if (move.type === 'Fire' && move.category !== 'Status') {
|
||||
target.cureStatus();
|
||||
}
|
||||
},
|
||||
onEnd(pokemon) {
|
||||
this.add('-end', pokemon, 'Snowman');
|
||||
},
|
||||
},
|
||||
rusted: {
|
||||
name: 'Rusted',
|
||||
duration: 4,
|
||||
onStart(pokemon) {
|
||||
if (pokemon.hasType('Steel')) {
|
||||
this.add('-start', pokemon, 'Rusted');
|
||||
this.add('-message', `${pokemon.name}'s steel defenses have rusted away!`);
|
||||
} else {
|
||||
pokemon.removeVolatile('rusted');
|
||||
}
|
||||
},
|
||||
onEffectiveness(typeMod, target, type, move) {
|
||||
if (!target) return;
|
||||
if (target.hasType('Steel') && target.volatiles['rusted']) {
|
||||
if (typeMod < 0) {
|
||||
return 0;
|
||||
}
|
||||
if (typeMod === 0 && this.dex.getImmunity(type, target)) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
},
|
||||
onEnd(pokemon) {
|
||||
this.add('-end', pokemon, 'Rusted');
|
||||
this.add('-message', `${pokemon.name}'s steel defenses are restored!`);
|
||||
},
|
||||
},
|
||||
dragonblight: {
|
||||
name: 'Dragonblight',
|
||||
effectType: 'Status',
|
||||
onStart(pokemon) {
|
||||
if (pokemon.hasType('Fairy')) {
|
||||
this.add('-immune', pokemon, '[from] status: Dragonblight');
|
||||
return false;
|
||||
}
|
||||
this.add('-start', pokemon, 'Dragonblight');
|
||||
this.add('-message', `${pokemon.name} is afflicted with Dragonblight! STAB disabled!`);
|
||||
},
|
||||
onResidualOrder: 10,
|
||||
onResidual(pokemon) {
|
||||
this.damage(pokemon.baseMaxhp / 16);
|
||||
},
|
||||
onModifySTAB(stab, source, target, move) {
|
||||
return 1;
|
||||
},
|
||||
onEnd(pokemon) {
|
||||
this.add('-end', pokemon, 'Dragonblight');
|
||||
this.add('-message', `${pokemon.name} overcame Dragonblight!`);
|
||||
},
|
||||
},
|
||||
/* Weather */
|
||||
dustdevil: {
|
||||
name: 'Dust Devil',
|
||||
effectType: 'Weather',
|
||||
duration: 0,
|
||||
// This should be applied directly to the stat before any of the other modifiers are chained
|
||||
// So we give it increased priority.
|
||||
onModifySpDPriority: 10,
|
||||
onModifySpD(spd, pokemon) {
|
||||
if (pokemon.hasType('Rock') && this.field.isWeather('dustdevil')) {
|
||||
return this.modify(spd, 1.5);
|
||||
}
|
||||
},
|
||||
onModifyMove(move, attacker) {
|
||||
if (move.type === 'Rock') {
|
||||
move.accuracy = true;
|
||||
}
|
||||
},
|
||||
onFieldStart(field, source, effect) {
|
||||
this.add('-weather', 'Dust Devil', '[from] ability: ' + effect.name, `[of] ${source}`);
|
||||
},
|
||||
onFieldResidualOrder: 1,
|
||||
onFieldResidual() {
|
||||
this.add('-weather', 'Dust Devil', '[upkeep]');
|
||||
this.eachEvent('Weather');
|
||||
},
|
||||
onWeather(target) {
|
||||
if (this.field.weatherState.source !== target) this.damage(target.baseMaxhp / 16);
|
||||
},
|
||||
onFieldEnd() {
|
||||
this.add('-weather', 'none');
|
||||
},
|
||||
},
|
||||
absolutezero: {
|
||||
name: 'Absolute Zero',
|
||||
effectType: 'Weather',
|
||||
duration: 0,
|
||||
onModifyDefPriority: 10,
|
||||
onModifyDef(def, pokemon) {
|
||||
if (pokemon.hasType('Ice') && this.field.isWeather('absolutezero')) {
|
||||
return this.modify(def, 1.5);
|
||||
}
|
||||
},
|
||||
onModifySpe(spe, pokemon) {
|
||||
if (this.field.weatherState.source !== pokemon) return this.chainModify(0.75);
|
||||
},
|
||||
onFieldStart(field, source, effect) {
|
||||
this.add('-weather', 'Absolute Zero', '[from] ability: ' + effect.name, `[of] ${source}`);
|
||||
},
|
||||
onFieldResidualOrder: 1,
|
||||
onFieldResidual() {
|
||||
this.add('-weather', 'Absolute Zero', '[upkeep]');
|
||||
this.eachEvent('Weather');
|
||||
},
|
||||
onWeather(target) {
|
||||
if (this.field.weatherState.source !== target) this.damage(target.baseMaxhp / 16);
|
||||
},
|
||||
onFieldEnd() {
|
||||
this.add('-weather', 'none');
|
||||
},
|
||||
},
|
||||
snow: {
|
||||
inherit: true,
|
||||
onImmunity(type) {
|
||||
if (type === 'brn') return false;
|
||||
},
|
||||
},
|
||||
};
|
||||
785
data/mods/monsterhunter/formats-data.ts
Normal file
785
data/mods/monsterhunter/formats-data.ts
Normal file
|
|
@ -0,0 +1,785 @@
|
|||
export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = {
|
||||
agnaktor: {
|
||||
tier: "UU",
|
||||
},
|
||||
agnaktorex: {
|
||||
tier: "OU",
|
||||
},
|
||||
ahtalka: {
|
||||
tier: "OU",
|
||||
},
|
||||
akantor: {
|
||||
tier: "UU",
|
||||
},
|
||||
aknosom: {
|
||||
tier: "RU",
|
||||
},
|
||||
alatreon: {
|
||||
tier: "OU",
|
||||
},
|
||||
almudron: {
|
||||
tier: "UU",
|
||||
},
|
||||
magmadron: {
|
||||
tier: "OU",
|
||||
},
|
||||
amatsu: {
|
||||
tier: "OU",
|
||||
},
|
||||
anjanath: {
|
||||
tier: "UU",
|
||||
},
|
||||
fuljanath: {
|
||||
tier: "UU",
|
||||
},
|
||||
arzuros: {
|
||||
tier: "RU",
|
||||
},
|
||||
astalos: {
|
||||
tier: "UU",
|
||||
},
|
||||
banbaro: {
|
||||
tier: "RU",
|
||||
},
|
||||
barioth: {
|
||||
tier: "UU",
|
||||
},
|
||||
barroth: {
|
||||
tier: "RU",
|
||||
},
|
||||
basarios: {
|
||||
tier: "RU",
|
||||
},
|
||||
bazelgeuse: {
|
||||
tier: "UU",
|
||||
},
|
||||
beotodus: {
|
||||
tier: "RU",
|
||||
},
|
||||
bishaten: {
|
||||
tier: "UU",
|
||||
},
|
||||
orangaten: {
|
||||
tier: "UU",
|
||||
},
|
||||
blangonga: {
|
||||
tier: "RU",
|
||||
},
|
||||
brachydios: {
|
||||
tier: "OU",
|
||||
},
|
||||
bulldrome: {
|
||||
tier: "RU",
|
||||
},
|
||||
ceadeus: {
|
||||
tier: "OU",
|
||||
},
|
||||
cephadrome: {
|
||||
tier: "RU",
|
||||
},
|
||||
chameleos: {
|
||||
tier: "OU",
|
||||
},
|
||||
congalala: {
|
||||
tier: "RU",
|
||||
},
|
||||
dahrenmohran: {
|
||||
tier: "OU",
|
||||
},
|
||||
daimyohermitaur: {
|
||||
tier: "UU",
|
||||
},
|
||||
dalamadur: {
|
||||
tier: "OU",
|
||||
},
|
||||
deviljho: {
|
||||
tier: "UU",
|
||||
},
|
||||
diablos: {
|
||||
tier: "OU",
|
||||
},
|
||||
diremiralis: {
|
||||
tier: "OU",
|
||||
},
|
||||
dodogama: {
|
||||
tier: "RU",
|
||||
},
|
||||
duramboros: {
|
||||
tier: "UU",
|
||||
},
|
||||
eruzerion: {
|
||||
tier: "OU",
|
||||
},
|
||||
espinas: {
|
||||
tier: "OU",
|
||||
},
|
||||
flaminas: {
|
||||
tier: "OU",
|
||||
},
|
||||
fatalis: {
|
||||
tier: "OU",
|
||||
},
|
||||
gaismagorm: {
|
||||
tier: "OU",
|
||||
},
|
||||
gammoth: {
|
||||
tier: "OU",
|
||||
},
|
||||
garangolm: {
|
||||
tier: "UU",
|
||||
},
|
||||
gendrome: {
|
||||
tier: "RU",
|
||||
},
|
||||
giadrome: {
|
||||
tier: "RU",
|
||||
},
|
||||
gigginox: {
|
||||
tier: "RU",
|
||||
},
|
||||
glavenus: {
|
||||
tier: "OU",
|
||||
},
|
||||
gobul: {
|
||||
tier: "RU",
|
||||
},
|
||||
gogmazios: {
|
||||
tier: "OU",
|
||||
},
|
||||
goremagala: {
|
||||
tier: "UU",
|
||||
},
|
||||
chaoticgore: {
|
||||
tier: "OU",
|
||||
},
|
||||
gossharag: {
|
||||
tier: "OU",
|
||||
},
|
||||
gravios: {
|
||||
tier: "UU",
|
||||
},
|
||||
greatbaggi: {
|
||||
tier: "RU",
|
||||
},
|
||||
greatgirros: {
|
||||
tier: "RU",
|
||||
},
|
||||
greatizuchi: {
|
||||
tier: "UU",
|
||||
},
|
||||
greatjaggi: {
|
||||
tier: "RU",
|
||||
},
|
||||
greatjagras: {
|
||||
tier: "RU",
|
||||
},
|
||||
greatmaccao: {
|
||||
tier: "RU",
|
||||
},
|
||||
greatwroggi: {
|
||||
tier: "RU",
|
||||
},
|
||||
gureadomosu: {
|
||||
tier: "OU",
|
||||
},
|
||||
gypceros: {
|
||||
tier: "UU",
|
||||
},
|
||||
harudomerugu: {
|
||||
tier: "OU",
|
||||
},
|
||||
hypnocatrice: {
|
||||
tier: "RU",
|
||||
},
|
||||
ibushi: {
|
||||
tier: "UU",
|
||||
},
|
||||
iodrome: {
|
||||
tier: "RU",
|
||||
},
|
||||
jhenmohran: {
|
||||
tier: "OU",
|
||||
},
|
||||
jyuratodus: {
|
||||
tier: "OU",
|
||||
},
|
||||
kechawacha: {
|
||||
tier: "RU",
|
||||
},
|
||||
khezu: {
|
||||
tier: "RU",
|
||||
},
|
||||
kingshakalaka: {
|
||||
tier: "RU",
|
||||
},
|
||||
kirin: {
|
||||
tier: "OU",
|
||||
},
|
||||
kuluyaku: {
|
||||
tier: "UU",
|
||||
},
|
||||
kulvetaroth: {
|
||||
tier: "OU",
|
||||
},
|
||||
kushaladaora: {
|
||||
tier: "OU",
|
||||
},
|
||||
rushaladaora: {
|
||||
tier: "OU",
|
||||
},
|
||||
lagiacrus: {
|
||||
tier: "UU",
|
||||
},
|
||||
ivogiacrus: {
|
||||
tier: "UU",
|
||||
},
|
||||
lagombi: {
|
||||
tier: "RU",
|
||||
},
|
||||
laoshanlung: {
|
||||
tier: "OU",
|
||||
},
|
||||
lavasioth: {
|
||||
tier: "RU",
|
||||
},
|
||||
legiana: {
|
||||
tier: "UU",
|
||||
},
|
||||
lunagaron: {
|
||||
tier: "UU",
|
||||
},
|
||||
lunastra: {
|
||||
tier: "UU",
|
||||
},
|
||||
magnamalo: {
|
||||
tier: "OU",
|
||||
},
|
||||
malfestio: {
|
||||
tier: "UU",
|
||||
},
|
||||
malzeno: {
|
||||
tier: "OU",
|
||||
},
|
||||
mizutsune: {
|
||||
tier: "UU",
|
||||
},
|
||||
vizutsune: {
|
||||
tier: "OU",
|
||||
},
|
||||
monoblos: {
|
||||
tier: "UU",
|
||||
},
|
||||
najarala: {
|
||||
tier: "UU",
|
||||
},
|
||||
nakarkos: {
|
||||
tier: "OU",
|
||||
},
|
||||
namielle: {
|
||||
tier: "OU",
|
||||
},
|
||||
nargacuga: {
|
||||
tier: "OU",
|
||||
},
|
||||
lucacuga: {
|
||||
tier: "OU",
|
||||
},
|
||||
narwa: {
|
||||
tier: "OU",
|
||||
},
|
||||
nergigante: {
|
||||
tier: "OU",
|
||||
},
|
||||
nefgarmat: {
|
||||
tier: "OU",
|
||||
},
|
||||
nerscylla: {
|
||||
tier: "RU",
|
||||
},
|
||||
nibelsnarf: {
|
||||
tier: "RU",
|
||||
},
|
||||
odogaron: {
|
||||
tier: "UU",
|
||||
},
|
||||
paolumu: {
|
||||
tier: "UU",
|
||||
},
|
||||
plesioth: {
|
||||
tier: "UU",
|
||||
},
|
||||
pukeipukei: {
|
||||
tier: "UU",
|
||||
},
|
||||
qurupeco: {
|
||||
tier: "RU",
|
||||
},
|
||||
radobaan: {
|
||||
tier: "UU",
|
||||
},
|
||||
rajang: {
|
||||
tier: "OU",
|
||||
},
|
||||
raknakadaki: {
|
||||
tier: "UU",
|
||||
},
|
||||
pyrekadaki: {
|
||||
tier: "UU",
|
||||
},
|
||||
rathalos: {
|
||||
tier: "UU",
|
||||
},
|
||||
rathian: {
|
||||
tier: "OU",
|
||||
},
|
||||
royalludroth: {
|
||||
tier: "RU",
|
||||
},
|
||||
safijiiva: {
|
||||
tier: "OU",
|
||||
},
|
||||
seltas: {
|
||||
tier: "RU",
|
||||
},
|
||||
seltasqueen: {
|
||||
tier: "UU",
|
||||
},
|
||||
seregios: {
|
||||
tier: "OU",
|
||||
},
|
||||
shagarumagala: {
|
||||
tier: "OU",
|
||||
},
|
||||
shantien: {
|
||||
tier: "OU",
|
||||
},
|
||||
sharaishvalda: {
|
||||
tier: "OU",
|
||||
},
|
||||
shengaoren: {
|
||||
tier: "OU",
|
||||
},
|
||||
shogunceanataur: {
|
||||
tier: "UU",
|
||||
},
|
||||
somnacanth: {
|
||||
tier: "RU",
|
||||
},
|
||||
auroracanth: {
|
||||
tier: "OU",
|
||||
},
|
||||
spiribird: {
|
||||
tier: "RU",
|
||||
},
|
||||
spiribirdred: {
|
||||
tier: "RU",
|
||||
},
|
||||
spiribirdyellow: {
|
||||
tier: "RU",
|
||||
},
|
||||
spiribirdorange: {
|
||||
tier: "RU",
|
||||
},
|
||||
teostra: {
|
||||
tier: "OU",
|
||||
},
|
||||
tetranadon: {
|
||||
tier: "UU",
|
||||
},
|
||||
tetsucabra: {
|
||||
tier: "RU",
|
||||
},
|
||||
tigrex: {
|
||||
tier: "OU",
|
||||
},
|
||||
tobikadachi: {
|
||||
tier: "RU",
|
||||
},
|
||||
tzitziyaku: {
|
||||
tier: "UU",
|
||||
},
|
||||
ukanlos: {
|
||||
tier: "OU",
|
||||
},
|
||||
uragaan: {
|
||||
tier: "UU",
|
||||
},
|
||||
vaalhazak: {
|
||||
tier: "UU",
|
||||
},
|
||||
valstrax: {
|
||||
tier: "OU",
|
||||
},
|
||||
glowstrax: {
|
||||
tier: "OU",
|
||||
},
|
||||
velkhana: {
|
||||
tier: "OU",
|
||||
},
|
||||
velocidrome: {
|
||||
tier: "RU",
|
||||
},
|
||||
vespoidqueen: {
|
||||
tier: "RU",
|
||||
},
|
||||
volvidon: {
|
||||
tier: "RU",
|
||||
},
|
||||
xenojiiva: {
|
||||
tier: "OU",
|
||||
},
|
||||
yamatsukami: {
|
||||
tier: "OU",
|
||||
},
|
||||
yiangaruga: {
|
||||
tier: "UU",
|
||||
},
|
||||
yiankutku: {
|
||||
tier: "UU",
|
||||
},
|
||||
bluekutku: {
|
||||
tier: "OU",
|
||||
},
|
||||
zamtrios: {
|
||||
tier: "UU",
|
||||
},
|
||||
zamtriosiced: {
|
||||
tier: "UU",
|
||||
},
|
||||
zamtriospuffed: {
|
||||
tier: "UU",
|
||||
},
|
||||
zinogre: {
|
||||
tier: "UU",
|
||||
},
|
||||
zorahmagdaros: {
|
||||
tier: "OU",
|
||||
},
|
||||
lalabarina: {
|
||||
tier: "UU",
|
||||
},
|
||||
balahara: {
|
||||
tier: "UU",
|
||||
},
|
||||
doshaguma: {
|
||||
tier: "UU",
|
||||
},
|
||||
rompopolo: {
|
||||
tier: "UU",
|
||||
},
|
||||
palico: {
|
||||
tier: "RU",
|
||||
},
|
||||
palamute: {
|
||||
tier: "RU",
|
||||
},
|
||||
disufiroa: {
|
||||
tier: "UU",
|
||||
},
|
||||
disufiroasol: {
|
||||
tier: "UU",
|
||||
},
|
||||
reydau: {
|
||||
tier: "OU",
|
||||
},
|
||||
hirabami: {
|
||||
tier: "RU",
|
||||
},
|
||||
nuudra: {
|
||||
tier: "UU",
|
||||
},
|
||||
nightlumu: {
|
||||
tier: "UU",
|
||||
},
|
||||
acidinus: {
|
||||
tier: "OU",
|
||||
},
|
||||
molgrex: {
|
||||
tier: "UU",
|
||||
},
|
||||
blackblos: {
|
||||
tier: "UU",
|
||||
},
|
||||
sandrioth: {
|
||||
tier: "OU",
|
||||
},
|
||||
uthduna: {
|
||||
tier: "OU",
|
||||
},
|
||||
blackveilhazak: {
|
||||
tier: "OU",
|
||||
},
|
||||
silvalos: {
|
||||
tier: "OU",
|
||||
},
|
||||
goldthian: {
|
||||
tier: "OU",
|
||||
},
|
||||
pinkthian: {
|
||||
tier: "UU",
|
||||
},
|
||||
goldeus: {
|
||||
tier: "OU",
|
||||
},
|
||||
azurelos: {
|
||||
tier: "UU",
|
||||
},
|
||||
stygiogre: {
|
||||
tier: "UU",
|
||||
},
|
||||
jindahaad: {
|
||||
tier: "OU",
|
||||
},
|
||||
zohshia: {
|
||||
tier: "OU",
|
||||
},
|
||||
zohshiaencased: {
|
||||
tier: "OU",
|
||||
},
|
||||
greencuga: {
|
||||
tier: "OU",
|
||||
},
|
||||
allmothernarwa: {
|
||||
tier: "OU",
|
||||
},
|
||||
nightcloakmalfestio: {
|
||||
tier: "OU",
|
||||
},
|
||||
boltreaverastalos: {
|
||||
tier: "OU",
|
||||
},
|
||||
massacrediablos: {
|
||||
tier: "OU",
|
||||
},
|
||||
primozeno: {
|
||||
tier: "OU",
|
||||
},
|
||||
arkveld: {
|
||||
tier: "OU",
|
||||
},
|
||||
chatacabra: {
|
||||
tier: "RU",
|
||||
},
|
||||
quematrice: {
|
||||
tier: "RU",
|
||||
},
|
||||
pokaradon: {
|
||||
tier: "RU",
|
||||
},
|
||||
inagami: {
|
||||
tier: "OU",
|
||||
},
|
||||
shroudcylla: {
|
||||
tier: "RU",
|
||||
},
|
||||
estrellian: {
|
||||
tier: "OU",
|
||||
},
|
||||
estrellianarmored: {
|
||||
tier: "OU",
|
||||
},
|
||||
estrellianwinged: {
|
||||
tier: "OU",
|
||||
},
|
||||
doomtrellian: {
|
||||
tier: "OU",
|
||||
},
|
||||
doomtrelliancharged: {
|
||||
tier: "OU",
|
||||
},
|
||||
arbitrellian: {
|
||||
tier: "OU",
|
||||
},
|
||||
arbitrelliancharged: {
|
||||
tier: "OU",
|
||||
},
|
||||
olturalarval: {
|
||||
tier: "OU",
|
||||
},
|
||||
oltura: {
|
||||
tier: "OU",
|
||||
},
|
||||
duremudira: {
|
||||
tier: "OU",
|
||||
},
|
||||
akuravashimu: {
|
||||
tier: "UU",
|
||||
},
|
||||
ebogaron: {
|
||||
tier: "UU",
|
||||
},
|
||||
purpleludroth: {
|
||||
tier: "RU",
|
||||
},
|
||||
ahtalneset: {
|
||||
tier: "OU",
|
||||
},
|
||||
xuwu: {
|
||||
tier: "OU",
|
||||
},
|
||||
oroshirin: {
|
||||
tier: "OU",
|
||||
},
|
||||
terrataur: {
|
||||
tier: "UU",
|
||||
},
|
||||
coralpukei: {
|
||||
tier: "UU",
|
||||
},
|
||||
rustramboros: {
|
||||
tier: "UU",
|
||||
},
|
||||
ajarakan: {
|
||||
tier: "UU",
|
||||
},
|
||||
emgalala: {
|
||||
tier: "RU",
|
||||
},
|
||||
tartaronis: {
|
||||
tier: "OU",
|
||||
},
|
||||
inferonis: {
|
||||
tier: "OU",
|
||||
},
|
||||
hallowedmohran: {
|
||||
tier: "OU",
|
||||
},
|
||||
unknown: {
|
||||
tier: "OU",
|
||||
},
|
||||
yamakurai: {
|
||||
tier: "OU",
|
||||
},
|
||||
balenox: {
|
||||
tier: "RU",
|
||||
},
|
||||
odibatorasu: {
|
||||
tier: "OU",
|
||||
},
|
||||
landgiacrus: {
|
||||
tier: "OU",
|
||||
},
|
||||
ashshanlung: {
|
||||
tier: "OU",
|
||||
},
|
||||
blackvios: {
|
||||
tier: "UU",
|
||||
},
|
||||
crysarios: {
|
||||
tier: "RU",
|
||||
},
|
||||
glanaktor: {
|
||||
tier: "UU",
|
||||
},
|
||||
greensioth: {
|
||||
tier: "UU",
|
||||
},
|
||||
zinogrehowling: {
|
||||
tier: "UU",
|
||||
},
|
||||
palepinas: {
|
||||
tier: "OU",
|
||||
},
|
||||
redzu: {
|
||||
tier: "RU",
|
||||
},
|
||||
basariossandstone: {
|
||||
tier: "UU",
|
||||
},
|
||||
shahmadur: {
|
||||
tier: "OU",
|
||||
},
|
||||
deviljhostarving: {
|
||||
tier: "OU",
|
||||
},
|
||||
whiteblos: {
|
||||
tier: "UU",
|
||||
},
|
||||
hellbladeglavenus: {
|
||||
tier: "OU",
|
||||
},
|
||||
crystalbearduragaan: {
|
||||
tier: "OU",
|
||||
},
|
||||
stonefistdaimyo: {
|
||||
tier: "OU",
|
||||
},
|
||||
emperorkirin: {
|
||||
tier: "OU",
|
||||
},
|
||||
frostfangbarioth: {
|
||||
tier: "OU",
|
||||
},
|
||||
redhelmarzuros: {
|
||||
tier: "OU",
|
||||
},
|
||||
harudomeruguz: {
|
||||
tier: "OU",
|
||||
},
|
||||
scornedmagnamalo: {
|
||||
tier: "OU",
|
||||
},
|
||||
seethingbazelgeuse: {
|
||||
tier: "OU",
|
||||
},
|
||||
snowbaronlagombi: {
|
||||
tier: "OU",
|
||||
},
|
||||
soulseermizutsune: {
|
||||
tier: "OU",
|
||||
},
|
||||
furiousrajang: {
|
||||
tier: "OU",
|
||||
},
|
||||
dreadqueenrathian: {
|
||||
tier: "OU",
|
||||
},
|
||||
dreadkingrathalos: {
|
||||
tier: "OU",
|
||||
},
|
||||
thunderlordzinogre: {
|
||||
tier: "OU",
|
||||
},
|
||||
ragingbrachydios: {
|
||||
tier: "OU",
|
||||
},
|
||||
abyssallagiacrus: {
|
||||
tier: "OU",
|
||||
},
|
||||
crimsonfatalis: {
|
||||
tier: "OU",
|
||||
},
|
||||
whitefatalis: {
|
||||
tier: "OU",
|
||||
},
|
||||
savagedeviljho: {
|
||||
tier: "OU",
|
||||
},
|
||||
plesiothz: {
|
||||
tier: "OU",
|
||||
},
|
||||
risenchameleos: {
|
||||
tier: "OU",
|
||||
},
|
||||
risenteostra: {
|
||||
tier: "OU",
|
||||
},
|
||||
risenkushala: {
|
||||
tier: "OU",
|
||||
},
|
||||
risenshagaru: {
|
||||
tier: "OU",
|
||||
},
|
||||
inagamiz: {
|
||||
tier: "OU",
|
||||
},
|
||||
deadeyegaruga: {
|
||||
tier: "OU",
|
||||
},
|
||||
elderfrostgammoth: {
|
||||
tier: "OU",
|
||||
},
|
||||
grimclawtigrex: {
|
||||
tier: "OU",
|
||||
},
|
||||
};
|
||||
483
data/mods/monsterhunter/items.ts
Normal file
483
data/mods/monsterhunter/items.ts
Normal file
|
|
@ -0,0 +1,483 @@
|
|||
export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
|
||||
boosterenergy: {
|
||||
inherit: true,
|
||||
desc: "Activates abilities with Protosynthesis or Quark Drive effects. Single use.",
|
||||
onUpdate(pokemon) {
|
||||
if (!this.effectState.started || pokemon.transformed || this.queue.peek(true)?.choice === 'runSwitch') return;
|
||||
if (!this.field.isWeather('sunnyday')) {
|
||||
for (const proto of ['protopyre', 'protoneuron', 'prototoxin', 'protolithos', 'protoavian',
|
||||
'protorefraction', 'protosynthesis']) {
|
||||
if (pokemon.hasAbility(proto)) {
|
||||
if (!pokemon.volatiles[proto] /* && !this.field.isWeather('sunnyday') */ && pokemon.useItem()) {
|
||||
pokemon.addVolatile(proto);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!this.field.isTerrain('electricterrain')) {
|
||||
for (const quark of ['quarkdrive', 'jellyfilleddrive', 'winddrive', 'heavydrive', 'jadedrive', 'airdrive',
|
||||
'magicdrive', 'phantomdrive', 'toxicdrive']) {
|
||||
if (pokemon.hasAbility(quark)) {
|
||||
if (!pokemon.volatiles[quark] && pokemon.useItem()) {
|
||||
pokemon.addVolatile(quark);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
frostorb: {
|
||||
name: "Frost Orb",
|
||||
gen: 9,
|
||||
num: 1000,
|
||||
desc: "At the end of each turn, tries to freeze the holder.",
|
||||
shortDesc: "At the end of each turn, tries to freeze the holder.",
|
||||
fling: {
|
||||
basePower: 30,
|
||||
status: 'frz',
|
||||
},
|
||||
onResidualOrder: 26,
|
||||
onResidualSubOrder: 2,
|
||||
onResidual(pokemon) {
|
||||
pokemon.trySetStatus('frz', pokemon);
|
||||
},
|
||||
},
|
||||
arzurite: {
|
||||
name: "Arzurite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Arzuros, allows it to transform into Redhelm. (Mega-Evolution)",
|
||||
megaStone: "Redhelm Arzuros",
|
||||
megaEvolves: "Arzuros",
|
||||
itemUser: ["Arzuros", "Redhelm Arzuros"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 585,
|
||||
},
|
||||
astalite: {
|
||||
name: "Astalite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Asatalos, allows it to transform into Boltreaver. (Mega-Evolution)",
|
||||
megaStone: "Boltreaver Astalos",
|
||||
megaEvolves: "Astalos",
|
||||
itemUser: ["Astalos", "Boltreaver Astalos"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 613,
|
||||
},
|
||||
bazelnite: {
|
||||
name: "Bazelnite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Bazelgeuse, allows it to transform into Seething. (Mega-Evolution)",
|
||||
megaStone: "Seething Bazelgeuse",
|
||||
megaEvolves: "Bazelgeuse",
|
||||
itemUser: ["Bazelgeuse", "Seething Bazelgeuse"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 591,
|
||||
},
|
||||
bariothite: {
|
||||
name: "Bariothite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Barioth, allows it to transform into Frostfang. (Mega-Evolution)",
|
||||
megaStone: "Frostfang Barioth",
|
||||
megaEvolves: "Barioth",
|
||||
itemUser: ["Barioth", "Frostfang Barioth"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 685,
|
||||
},
|
||||
brachylite: {
|
||||
name: "Brachylite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Brachydios, allows it to transform into Raging. (Mega-Evolution)",
|
||||
megaStone: "Raging Brachydios",
|
||||
megaEvolves: "Brachydios",
|
||||
itemUser: ["Brachydios", "Raging Brachydios"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 613,
|
||||
},
|
||||
devilite: {
|
||||
name: "Devilite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Deviljho, allows it to transform into Savage. (Mega-Evolution)",
|
||||
megaStone: "Savage Deviljho",
|
||||
megaEvolves: "Deviljho",
|
||||
itemUser: ["Deviljho", "Savage Deviljho"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 584,
|
||||
},
|
||||
diablite: {
|
||||
name: "Diablite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Diablos, allows it to transform into Massacre. (Mega-Evolution)",
|
||||
megaStone: "Massacre Diablos",
|
||||
megaEvolves: "Diablos",
|
||||
itemUser: ["Diablos", "Massacre Diablos"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 589,
|
||||
},
|
||||
gammothite: {
|
||||
name: "Gammothite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Gammoth, allows her to transform into Elderfrost. (Mega-Evolution)",
|
||||
megaStone: "Elderfrost Gammoth",
|
||||
megaEvolves: "Gammoth",
|
||||
itemUser: ["Gammoth", "Elderfrost Gammoth"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 623,
|
||||
},
|
||||
garugite: {
|
||||
name: "Garugite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Yian Garuga, allows it to transform into Deadeye. (Mega-Evolution)",
|
||||
megaStone: "Deadeye Garuga",
|
||||
megaEvolves: "Yian Garuga",
|
||||
itemUser: ["Yian Garuga", "Deadeye Garuga"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 577,
|
||||
},
|
||||
harudomerite: {
|
||||
name: "Harudomerite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Harudomerugu, allows it to enter it's Zenith Form. (Mega-Evolution)",
|
||||
megaStone: "Harudomerugu-Z",
|
||||
megaEvolves: "Harudomerugu",
|
||||
itemUser: ["Harudomerugu", "Harudomerugu-Z"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 578,
|
||||
},
|
||||
inagamite: {
|
||||
name: "Inagamite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Inagami, allows it to enter it's Zenith Form. (Mega-Evolution)",
|
||||
megaStone: "Inagami-Z",
|
||||
megaEvolves: "Inagami",
|
||||
itemUser: ["Inagami", "Inagami-Z"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 613,
|
||||
},
|
||||
lagialite: {
|
||||
name: "Lagialite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Lagiacrus, allows it to transform into Abyssal. (Mega-Evolution)",
|
||||
megaStone: "Abyssal Lagiacrus",
|
||||
megaEvolves: "Lagiacrus",
|
||||
itemUser: ["Lagiacrus", "Abyssal Lagiacrus"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 585,
|
||||
},
|
||||
lagombite: {
|
||||
name: "Lagombite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Lagombi, allows it to transform into Snowbaron. (Mega-Evolution)",
|
||||
megaStone: "Snowbaron Lagombi",
|
||||
megaEvolves: "Lagombi",
|
||||
itemUser: ["Lagombi", "Snowbaron Lagombi"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 583,
|
||||
},
|
||||
magnamalite: {
|
||||
name: "Magnamalite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Magnamalo, allows it to transform into Scorned. (Mega-Evolution)",
|
||||
megaStone: "Scorned Magnamalo",
|
||||
megaEvolves: "Magnamalo",
|
||||
itemUser: ["Magnamalo", "Scorned Magnamalo"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 614,
|
||||
},
|
||||
malfestite: {
|
||||
name: "Malfestite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Malfestio, allows it to transform into Nightcloak. (Mega-Evolution)",
|
||||
megaStone: "Nightcloak Malfestio",
|
||||
megaEvolves: "Malfestio",
|
||||
itemUser: ["Malfestio", "Nightcloak Malfestio"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 577,
|
||||
},
|
||||
mizutsunite: {
|
||||
name: "Mizutsunite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Mizutsune, allows it to transform into Soulseer. (Mega-Evolution)",
|
||||
megaStone: "Soulseer Mizutsune",
|
||||
megaEvolves: "Mizutsune",
|
||||
itemUser: ["Mizutsune", "Soulseer Mizutsune"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 624,
|
||||
},
|
||||
narwanite: {
|
||||
name: "Narwanite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Narwa, allows it to transform into Allmother. (Mega-Evolution)",
|
||||
megaStone: "Allmother Narwa",
|
||||
megaEvolves: "Narwa",
|
||||
itemUser: ["Narwa", "Allmother Narwa"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 596,
|
||||
},
|
||||
plesite: {
|
||||
name: "Plesite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Plesioth, allows it to enter it's Zenith Form. (Mega-Evolution)",
|
||||
megaStone: "Plesioth-Z",
|
||||
megaEvolves: "Plesioth",
|
||||
itemUser: ["Plesioth", "Plesioth-Z"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 621,
|
||||
},
|
||||
rajanite: {
|
||||
name: "Rajanite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Rajang, allows it to transform into Furious. (Mega-Evolution)",
|
||||
megaStone: "Furious Rajang",
|
||||
megaEvolves: "Rajang",
|
||||
itemUser: ["Rajang", "Furious Rajang"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 602,
|
||||
},
|
||||
rathalosite: {
|
||||
name: "Rathalosite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Rathalos, allows it to transform into Dreadking. (Mega-Evolution)",
|
||||
megaStone: "Dreadking Rathalos",
|
||||
megaEvolves: "Rathalos",
|
||||
itemUser: ["Rathalos", "Dreadking Rathalos"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 586,
|
||||
},
|
||||
rathianite: {
|
||||
name: "Rathianite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Rathian, allows it to transform into Dreadqueen. (Mega-Evolution)",
|
||||
megaStone: "Dreadqueen Rathian",
|
||||
megaEvolves: "Rathian",
|
||||
itemUser: ["Rathian", "Dreadqueen Rathian"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 607,
|
||||
},
|
||||
risenitec: {
|
||||
name: "Risenite-C",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Chameleos, allows it to enter it's Risen Form. (Mega-Evolution)",
|
||||
megaStone: "Risen Chameleos",
|
||||
megaEvolves: "Chameleos",
|
||||
itemUser: ["Chameleos", "Risen Chameleos"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 590,
|
||||
},
|
||||
risenitek: {
|
||||
name: "Risenite-K",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Kushala, allows it to enter it's Risen Form. (Mega-Evolution)",
|
||||
megaStone: "Risen Kushala",
|
||||
megaEvolves: "Kushala Daora",
|
||||
itemUser: ["Kushala Daora", "Risen Kushala"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 590,
|
||||
},
|
||||
risenitet: {
|
||||
name: "Risenite-T",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Teostra, allows it to enter it's Risen Form. (Mega-Evolution)",
|
||||
megaStone: "Risen Teostra",
|
||||
megaEvolves: "Teostra",
|
||||
itemUser: ["Teostra", "Risen Teostra"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 590,
|
||||
},
|
||||
risenites: {
|
||||
name: "Risenite-S",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Shagaru Magala, allows it to enter it's Risen Form. (Mega-Evolution)",
|
||||
megaStone: "Risen Shagaru",
|
||||
megaEvolves: "Shagaru Magala",
|
||||
itemUser: ["Shagaru Magala", "Risen Shagaru"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 590,
|
||||
},
|
||||
tigrexite: {
|
||||
name: "Tigrexite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Tigrex, allows it to transform into Grimclaw. (Mega-Evolution)",
|
||||
megaStone: "Grimclaw Tigrex",
|
||||
megaEvolves: "Tigrex",
|
||||
itemUser: ["Tigrex", "Grimclaw Tigrex"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 619,
|
||||
},
|
||||
zinogrite: {
|
||||
name: "Zinogrite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Zinogre, allows it to transform into Thunderlord. (Mega-Evolution)",
|
||||
megaStone: "Thunderlord Zinogre",
|
||||
megaEvolves: "Zinogre",
|
||||
itemUser: ["Zinogre", "Thunderlord Zinogre"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 590,
|
||||
},
|
||||
kirinite: {
|
||||
name: "Kirinite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Kirin, allows it to transform into Emperor. (Mega-Evolution)",
|
||||
megaStone: "Emperor Kirin",
|
||||
megaEvolves: "Kirin",
|
||||
itemUser: ["Kirin", "Emperor Kirin"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 602,
|
||||
},
|
||||
uragaanite: {
|
||||
name: "Uragaanite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Uragaan, allows it to transform into Crystalbeard. (Mega-Evolution)",
|
||||
megaStone: "Crystalbeard Uragaan",
|
||||
megaEvolves: "Uragaan",
|
||||
itemUser: ["Uragaan", "Crystalbeard Uragaan"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 663,
|
||||
},
|
||||
daimyite: {
|
||||
name: "Daimyite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Daimyo Hermitaur, allows it to transform into Stonefist. (Mega-Evolution)",
|
||||
megaStone: "Stonefist Daimyo",
|
||||
megaEvolves: "Daimyo Hermitaur",
|
||||
itemUser: ["Daimyo Hermitaur", "Stonefist Daimyo"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 612,
|
||||
},
|
||||
glavenite: {
|
||||
name: "Glavenite",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Glavenus, allows it to transform into Hellblade. (Mega-Evolution)",
|
||||
megaStone: "Hellblade Glavenus",
|
||||
megaEvolves: "Glavenus",
|
||||
itemUser: ["Glavenus", "Hellblade Glavenus"],
|
||||
onTakeItem(item, source) {
|
||||
if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
|
||||
return true;
|
||||
},
|
||||
spritenum: 586,
|
||||
},
|
||||
/*
|
||||
Fatalis Orbs
|
||||
*/
|
||||
crimsongem: {
|
||||
name: "Crimson Gem",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Fatalis, triggers its Crimson Form in battle. (Primal Reversion)",
|
||||
itemUser: ["Fatalis", "Crimson-Fatalis"],
|
||||
onSwitchIn(pokemon) {
|
||||
if (pokemon.isActive && pokemon.baseSpecies.name === 'Fatalis' && !pokemon.transformed) {
|
||||
pokemon.formeChange('Crimson-Fatalis', this.effect, true);
|
||||
}
|
||||
},
|
||||
onTakeItem(item, source) {
|
||||
if (source.baseSpecies.baseSpecies === 'Fatalis') return false;
|
||||
return true;
|
||||
},
|
||||
},
|
||||
whitegem: {
|
||||
name: "White Gem",
|
||||
gen: 9,
|
||||
shortDesc: "If held by Fatalis, triggers its Crimson Form in battle. (Primal Reversion)",
|
||||
itemUser: ["Fatalis", "White-Fatalis"],
|
||||
onSwitchIn(pokemon) {
|
||||
if (pokemon.isActive && pokemon.baseSpecies.name === 'Fatalis' && !pokemon.transformed) {
|
||||
pokemon.formeChange('White-Fatalis', this.effect, true);
|
||||
}
|
||||
},
|
||||
onTakeItem(item, source) {
|
||||
if (source.baseSpecies.baseSpecies === 'Fatalis') return false;
|
||||
return true;
|
||||
},
|
||||
},
|
||||
};
|
||||
13957
data/mods/monsterhunter/learnsets.ts
Normal file
13957
data/mods/monsterhunter/learnsets.ts
Normal file
File diff suppressed because it is too large
Load Diff
3081
data/mods/monsterhunter/moves.ts
Normal file
3081
data/mods/monsterhunter/moves.ts
Normal file
File diff suppressed because it is too large
Load Diff
2857
data/mods/monsterhunter/pokedex.ts
Normal file
2857
data/mods/monsterhunter/pokedex.ts
Normal file
File diff suppressed because it is too large
Load Diff
69
data/mods/monsterhunter/rulesets.ts
Normal file
69
data/mods/monsterhunter/rulesets.ts
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
|
||||
statusmod: {
|
||||
effectType: 'Rule',
|
||||
name: 'Status Mod',
|
||||
desc: "Displays Dragonblight as a volatile",
|
||||
onSwitchIn(pokemon) {
|
||||
if (pokemon.status === 'dragonblight') {
|
||||
this.add('-start', pokemon, 'dragonblight', '[silent]');
|
||||
}
|
||||
},
|
||||
onSetStatus(status, target, source, effect) {
|
||||
if (target.status === 'dragonblight') {
|
||||
this.add('-start', target, 'dragonblight', '[silent]');
|
||||
}
|
||||
},
|
||||
/* onCureStatus(pokemon, source, effect) {
|
||||
const cured = effect?.status || pokemon.statusState?.prevStatus;
|
||||
if (cured === 'dragonblight') {
|
||||
this.add('-end', pokemon, 'dragonblight', '[silent]');
|
||||
}
|
||||
}, */
|
||||
},
|
||||
megadatamod: {
|
||||
effectType: 'Rule',
|
||||
name: 'Mega Data Mod',
|
||||
desc: 'Gives data on stats, Ability and types when a Pokémon Mega Evolves or undergoes Ultra Burst.',
|
||||
onSwitchIn(pokemon) {
|
||||
if (pokemon.species.forme.startsWith('Mega') || pokemon.species.forme.startsWith('Ultra')) {
|
||||
this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]');
|
||||
}
|
||||
},
|
||||
onAfterMega(pokemon) {
|
||||
this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]');
|
||||
const species = pokemon.species;
|
||||
let buf = `<span class="col pokemonnamecol" style="white-space: nowrap">${species.name}</span> `;
|
||||
buf += `<span class="col typecol">`;
|
||||
buf += `<img src="https://${Config.routes.client}/sprites/types/${species.types[0]}.png" alt="${species.types[0]}" height="14" width="32">`;
|
||||
if (species.types[1]) {
|
||||
buf += `<img src="https://${Config.routes.client}/sprites/types/${species.types[1]}.png" alt="${species.types[1]}" height="14" width="32">`;
|
||||
}
|
||||
buf += `</span> `;
|
||||
buf += `<span style="float: left ; min-height: 26px"><span class="col abilitycol">${species.abilities[0]}</span><span class="col abilitycol"></span></span>`;
|
||||
const stats = [];
|
||||
let stat: StatID;
|
||||
for (stat in species.baseStats) {
|
||||
const statNames: { [k in StatID]: string } = { hp: "HP", atk: "Atk", def: "Def", spa: "SpA", spd: "SpD", spe: "Spe" };
|
||||
stats.push(`<span class="col statcol"><em>${statNames[stat]}</em><br>${species.baseStats[stat]}</span>`);
|
||||
}
|
||||
buf += `<span style="float: left ; min-height: 26px">${stats.join(' ')}</span>`;
|
||||
buf += `</span>`;
|
||||
this.add(`raw|<ul class="utilichart"><li class="result">${buf}</li><li style="clear: both"></li></ul>`);
|
||||
},
|
||||
},
|
||||
spriteviewer: {
|
||||
effectType: 'ValidatorRule',
|
||||
name: 'Sprite Viewer',
|
||||
desc: "Displays a fakemon's sprite in chat when it is switched in for the first time",
|
||||
onBegin() {
|
||||
this.add('rule', 'Sprite Viewer: Displays sprites in chat');
|
||||
},
|
||||
onSwitchIn(pokemon) {
|
||||
if (!this.effectState[pokemon.species.id]) {
|
||||
this.add('-message', `${pokemon.species.name}'s Sprite:`);
|
||||
this.add(`raw|<img src="https://raw.githubusercontent.com/scoopapa/DH2/refs/heads/main/data/mods/monsterhunter/sprites/front/${pokemon.species.id}.png" height="96" width="96">`);
|
||||
this.effectState[pokemon.species.id] = true;
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
14
data/mods/monsterhunter/scripts.ts
Normal file
14
data/mods/monsterhunter/scripts.ts
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
export const Scripts: ModdedBattleScriptsData = {
|
||||
gen: 9,
|
||||
pokemon: {
|
||||
ignoringItem() {
|
||||
return !!(
|
||||
this.itemState.knockedOff || // Gen 3-4
|
||||
(this.battle.gen >= 5 && !this.isActive) ||
|
||||
(!this.getItem().ignoreKlutz && this.hasAbility('klutz')) ||
|
||||
this.volatiles['embargo'] || this.battle.field.pseudoWeather['magicroom'] ||
|
||||
this.volatiles['stench']
|
||||
);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -90,7 +90,7 @@ export const Scripts: ModdedBattleScriptsData = {
|
|||
this.add('rated', typeof this.rated === 'string' ? this.rated : '');
|
||||
}
|
||||
|
||||
format.onBegin?.call(this);
|
||||
this.format.onBegin?.call(this);
|
||||
for (const rule of this.ruleTable.keys()) {
|
||||
if ('+*-!'.includes(rule.charAt(0))) continue;
|
||||
const subFormat = this.dex.formats.get(rule);
|
||||
|
|
|
|||
|
|
@ -1,414 +0,0 @@
|
|||
export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
|
||||
abyssallight: {
|
||||
onSourceModifyAtkPriority: 6,
|
||||
onSourceModifyAtk(atk, attacker, defender, move) {
|
||||
if (move.type === 'Dark' || move.type === 'Ghost') {
|
||||
this.debug('Abyssal Light weaken');
|
||||
return this.chainModify(0.5);
|
||||
}
|
||||
},
|
||||
onSourceModifySpAPriority: 5,
|
||||
onSourceModifySpA(atk, attacker, defender, move) {
|
||||
if (move.type === 'Dark' || move.type === 'Ghost') {
|
||||
this.debug('Abyssal Light weaken');
|
||||
return this.chainModify(0.5);
|
||||
}
|
||||
},
|
||||
flags: { breakable: 1 },
|
||||
name: "Abyssal Light",
|
||||
shortDesc: "This Pokemon takes halved damage from Dark and Ghost-type moves.",
|
||||
},
|
||||
ahexual: {
|
||||
onTryHit(target, source, move) {
|
||||
const tricks = [
|
||||
'bombinomicon', 'wordsdance', 'hex', 'trickortreat', 'confuseray',
|
||||
'flowertrick', 'powertrick', 'trick', 'trickroom',
|
||||
];
|
||||
if (tricks.includes(move.id)) {
|
||||
if (!this.heal(target.baseMaxhp / 4)) {
|
||||
this.add('-immune', target, '[from] ability: Ahexual');
|
||||
}
|
||||
return null;
|
||||
}
|
||||
},
|
||||
flags: { breakable: 1 },
|
||||
name: "Ahexual",
|
||||
shortDesc: "This Pokemon heals 1/2 max HP when hit by a trick move; immune to tricks.",
|
||||
},
|
||||
cursedbody: {
|
||||
onSourceModifyDamage(damage, source, target, move) {
|
||||
if (this.effectState.cursed) return;
|
||||
return this.chainModify(0.75);
|
||||
},
|
||||
onDamagingHit(damage, target, source, move) {
|
||||
if (this.effectState.cursed || source.volatiles['disable']) return;
|
||||
if (!move.isMax && !move.flags['futuremove'] && move.id !== 'struggle') {
|
||||
this.effectState.cursed = true;
|
||||
source.addVolatile('disable', this.effectState.target);
|
||||
}
|
||||
},
|
||||
onSwitchIn(pokemon) {
|
||||
delete this.effectState.cursed;
|
||||
},
|
||||
name: "Cursed Body",
|
||||
shortDesc: "When attacked, takes 75% damage and disables the move. Once per switch in.",
|
||||
},
|
||||
dummy: {
|
||||
onStart(pokemon) {
|
||||
this.actions.useMove("substitute", pokemon);
|
||||
},
|
||||
name: "Dummy",
|
||||
shortDesc: "On switchin, this Pokemon uses Substitute.",
|
||||
},
|
||||
jankster: {
|
||||
onDamagingHit(damage, target, source, move) {
|
||||
this.add('-ability', target, 'Jankster');
|
||||
if (move.category === 'Physical') {
|
||||
const newatk = target.storedStats.atk;
|
||||
target.storedStats.atk = source.storedStats.atk;
|
||||
source.storedStats.atk = newatk;
|
||||
this.add('-message', `${target.name}'s and ${target.name}'s Attack were swapped!`);
|
||||
} else {
|
||||
const newspa = target.storedStats.spa;
|
||||
target.storedStats.spa = newspa;
|
||||
source.storedStats.spa = newspa;
|
||||
this.add('-message', `${target.name}'s and ${target.name}'s Special Attack were swapped!`);
|
||||
}
|
||||
},
|
||||
flags: { breakable: 1 },
|
||||
name: "Jankster",
|
||||
shortDesc: "When this Pokemon is hit, it swaps its corresponding attack stat with the attacker.",
|
||||
},
|
||||
jumpscare: {
|
||||
onStart(pokemon) {
|
||||
if (!this.effectState.scare) {
|
||||
this.effectState.scare = true;
|
||||
this.add('-ability', pokemon, 'Jumpscare');
|
||||
for (const target of pokemon.adjacentFoes()) {
|
||||
if (target.volatiles['substitute']) {
|
||||
this.add('-immune', target);
|
||||
} else {
|
||||
target.addVolatile('jumpscare');
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
name: "Jumpscare",
|
||||
shortDesc: "On switchin, opposing Pokemon flinch. Once per battle.",
|
||||
},
|
||||
magician: {
|
||||
name: "Magician",
|
||||
shortDesc: "This Pokemon heals 1/16 max HP while behind a Substitute.",
|
||||
onStart(pokemon) {
|
||||
const switchin = [
|
||||
'I am here!',
|
||||
'I have come!',
|
||||
'Merasmus has risen!',
|
||||
'Cower fools! Merasmus is here!',
|
||||
'Run fools! Run from Merasmus!',
|
||||
'Merasmus the Wizard has come for your souls!',
|
||||
'(evil laughter)',
|
||||
'(wicked laughter)',
|
||||
'(diabolical laughter)',
|
||||
'Soldier! Never anger a magician!',
|
||||
'Welcome. To your doom!',
|
||||
'DOOM! All of you are doomed!',
|
||||
'Enjoy Halloween mortals, for it will be your last!',
|
||||
'Merasmus arrives on a tide of blood! *sotto voce* Oh hello, Soldier.',
|
||||
];
|
||||
this.add('-message', `${this.sample(switchin)}`);
|
||||
},
|
||||
onResidual(pokemon) {
|
||||
if (pokemon.volatiles['substitute']) {
|
||||
const sub = [
|
||||
'Must hide and heal.',
|
||||
'Must hide and heal.',
|
||||
'Must hide. Get stronger.',
|
||||
'Must hide. Must heal.',
|
||||
'Must hide. Must heal.',
|
||||
'Merasmus must hide.',
|
||||
'Merasmus must hide.',
|
||||
'No strength. Must hide.',
|
||||
'No! This cannot be the end! Must hide.',
|
||||
'Fools! I will come back stronger!',
|
||||
'Fools! Do you not know you deal with the master of hiding!',
|
||||
'Fools! Feel the terror of my hiding!',
|
||||
'You cannot kill me fools! For I am great at hiding!',
|
||||
'The hide-ening! It is here! Okay, need to find a hiding-spot.',
|
||||
'Time to play hide-and-seek...your doom!',
|
||||
'Must hide. Get stronger.',
|
||||
'You have bested my magic! But can you withstand the dark power...of HIDING!',
|
||||
];
|
||||
this.add('-message', `${this.sample(sub)}`);
|
||||
this.heal(pokemon.baseMaxhp / 16, pokemon, pokemon);
|
||||
}
|
||||
},
|
||||
onSwitchOut(pokemon) {
|
||||
const switchout = [
|
||||
'Goodbye... Forever!',
|
||||
'Alright, I\'m leaving now.',
|
||||
'Alright, I\'m leaving now.',
|
||||
'Goodbye, everyone!',
|
||||
'Well, that was fun. Off I go!',
|
||||
'Alright, goodbye everyone!',
|
||||
'Enough! I leave.',
|
||||
'A-ha! Too slow! I leave!',
|
||||
'*Evil laugh* Goodbye, forever!',
|
||||
'*Evil laugh* Goodbye, forever! *sotto voce* I\'ll see you at home, Soldier.',
|
||||
'You have amused Merasmus, but now I must attend to other eldritch business. Farewell!',
|
||||
'*Evil laugh* I bid you, farewell!',
|
||||
'Farewell! Happy Halloween, everyone!',
|
||||
'I leave you... to your doom!',
|
||||
];
|
||||
this.add('-message', `${this.sample(switchout)}`);
|
||||
},
|
||||
onFaint(pokemon) {
|
||||
const faint = [
|
||||
'Ach, no!',
|
||||
'You win. No, wait, it\'s a tie! Argh...',
|
||||
'Aaah!',
|
||||
'Aaah!',
|
||||
'Oooh!',
|
||||
'Nyyaaagh! I hate you so much, Soldier!',
|
||||
'You haven\'t heard the last of Merasmus the Magician!',
|
||||
'I die, I diieeee... bye Soldier.', 'I die! Soldier, you were the wooorst roommate!',
|
||||
'I die! I curse this land, for a hundred years!- No! A thousand! Thousand year-oh, I die!',
|
||||
'Noooo!',
|
||||
'Noooo!',
|
||||
];
|
||||
this.add('-message', `${this.sample(faint)}`);
|
||||
},
|
||||
},
|
||||
mutualexclusion: {
|
||||
onStart(target) {
|
||||
this.add('-activate', target, 'ability: Mutual Exclusion');
|
||||
target.addVolatile('imprison');
|
||||
},
|
||||
name: "Mutual Exclusion",
|
||||
shortDesc: "On switchin, this Pokemon gains Imprison.",
|
||||
},
|
||||
onderguard: {
|
||||
onDamagingHit(damage, target, source, effect) {
|
||||
if (this.randomChance(1, 2)) this.boost({ def: 1, spd: -1 });
|
||||
else this.boost({ def: -1, spd: 1 });
|
||||
},
|
||||
name: "Onder Guard",
|
||||
shortDesc: "When his Pokemon is hit, Def +1/SpD -1 or vice versa.",
|
||||
},
|
||||
perishbody: {
|
||||
onDamagingHit(damage, target, source, move) {
|
||||
if (source.volatiles['perishsong']) return;
|
||||
this.add('-ability', target, 'Perish Body');
|
||||
source.addVolatile('perishsong');
|
||||
},
|
||||
flags: { },
|
||||
name: "Perish Body",
|
||||
shortDesc: "When this Pokemon is damaged by an attack, the attacker gains Perish Song.",
|
||||
},
|
||||
pinfiltrator: {
|
||||
onModifyMove(move) {
|
||||
move.infiltrates = true;
|
||||
},
|
||||
onSourceDamagingHit(damage, target, source, move) {
|
||||
this.damage(target.baseMaxhp / 8, target, source);
|
||||
},
|
||||
name: "PInfiltrator",
|
||||
shortDesc: "This Pokemon's moves ignore Substitute/screens and deal an extra 1/8 max HP.",
|
||||
},
|
||||
powerofalchemy: {
|
||||
name: "Power of Alchemy",
|
||||
shortDesc: "On switch-in, swaps ability with the opponent.",
|
||||
onSwitchIn(pokemon) {
|
||||
this.effectState.switchingIn = true;
|
||||
},
|
||||
onStart(pokemon) {
|
||||
if (!pokemon.isStarted || !this.effectState.switchingIn) return;
|
||||
const additionalBannedAbilities = [
|
||||
// Zen Mode included here for compatability with Gen 5-6
|
||||
'noability', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'wanderingspirit',
|
||||
'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'zenmode',
|
||||
];
|
||||
const possibleTargets = pokemon.foes().filter(foeActive => foeActive && !foeActive.getAbility().flags['cantsuppress'] &&
|
||||
!additionalBannedAbilities.includes(foeActive.ability) && foeActive.isAdjacent(pokemon));
|
||||
if (possibleTargets.length) {
|
||||
let rand = 0;
|
||||
if (possibleTargets.length > 1) rand = this.random(possibleTargets.length);
|
||||
const target = possibleTargets[rand];
|
||||
const ability = target.getAbility();
|
||||
if (pokemon.setAbility(ability) && target.setAbility('powerofalchemy')) {
|
||||
this.add('-ability', target, 'Power of Alchemy');
|
||||
this.add('-ability', pokemon, ability.name);
|
||||
} else {
|
||||
pokemon.setAbility('powerofalchemy');
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
ppressure: {
|
||||
onStart(pokemon) {
|
||||
this.add('-ability', pokemon, 'PPressure');
|
||||
},
|
||||
onDeductPP(target, source) {
|
||||
if (target.isAlly(source)) return;
|
||||
return 2;
|
||||
},
|
||||
onModifyAtkPriority: 5,
|
||||
name: "PPressure",
|
||||
shortDesc: "When a move targets this Pokemon, that move loses 2 additional PP.",
|
||||
},
|
||||
pulpup: {
|
||||
onDamagingHit(damage, target, source, effect) {
|
||||
target.addVolatile('stockpile');
|
||||
},
|
||||
onModifyTypePriority: -1,
|
||||
onModifyType(move, pokemon) {
|
||||
const noModifyType = [
|
||||
'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball',
|
||||
];
|
||||
if (move.type === 'Normal' && !noModifyType.includes(move.id) &&
|
||||
!(move.isZ && move.category !== 'Status') && move.name !== 'Explosion' &&
|
||||
!(move.name === 'Tera Blast' && pokemon.terastallized)) {
|
||||
move.type = 'Fire';
|
||||
move.typeChangerBoosted = this.effect;
|
||||
}
|
||||
},
|
||||
name: "Pulp Up",
|
||||
shortDesc: "This Pokemon gains 1 Stockpile upon damage. Normal-type moves become Fire-type.",
|
||||
},
|
||||
wandrush: {
|
||||
onStart(source) {
|
||||
this.field.setWeather('sandstorm');
|
||||
},
|
||||
onModifySpe(spe, pokemon) {
|
||||
if (this.field.isWeather('sandstorm')) {
|
||||
return this.chainModify(1.5);
|
||||
}
|
||||
},
|
||||
onModifySpAPriority: 5,
|
||||
onModifySpA(spa, pokemon) {
|
||||
if (this.field.isWeather('sandstorm')) {
|
||||
return this.chainModify(1.5);
|
||||
}
|
||||
},
|
||||
onImmunity(type, pokemon) {
|
||||
if (type === 'sandstorm') return false;
|
||||
},
|
||||
name: "Wand Rush",
|
||||
shortDesc: "On switchin, sets Sandstorm. Sandstorm: SpA/Spe 1.5x; immunity to sand.",
|
||||
},
|
||||
revive: {
|
||||
// see scripts.ts
|
||||
name: "Revive",
|
||||
shortDesc: "Non-functional placeholder",
|
||||
/* shortDesc: "When this Pokemon has 0 HP, it switches out and is revived to 1/2 max HP. Once per battle.",
|
||||
onBeforeSwitchIn(pokemon) {
|
||||
if (this.effectState.zombie) {
|
||||
this.effectState.zombie = false;
|
||||
this.effectState.switchedIn = undefined;
|
||||
}
|
||||
},
|
||||
onFaint(pokemon) {
|
||||
if (pokemon.name === 'Trevenant' && !this.effectState.zombie && this.canSwitch(pokemon.side)) {
|
||||
if (pokemon.formeChange('Trevenant-Revenant', this.effect, true)) {
|
||||
this.add('-ability', pokemon, 'Revive');
|
||||
this.effectState.zombie = true;
|
||||
pokemon.hp = Math.floor(pokemon.maxhp / 2);
|
||||
pokemon.setAbility('reckless');
|
||||
}
|
||||
}
|
||||
}, */
|
||||
},
|
||||
shapeshift: {
|
||||
name: "Shapeshift",
|
||||
shortDesc: "If this Pokemon is a Rotom, certain moves cause it to change forme.",
|
||||
onBeforeMove(source, target, move) {
|
||||
switch (move.type) {
|
||||
case "Fire":
|
||||
if (source.species.id !== "rotomheat") {
|
||||
this.add('-activate', source, 'ability: Shapeshift');
|
||||
source.formeChange("Rotom-Heat");
|
||||
}
|
||||
break;
|
||||
case "Water":
|
||||
if (source.species.id !== "rotomwash") {
|
||||
this.add('-activate', source, 'ability: Shapeshift');
|
||||
source.formeChange("Rotom-Wash");
|
||||
}
|
||||
break;
|
||||
case "Grass":
|
||||
if (source.species.id !== "rotommow") {
|
||||
this.add('-activate', source, 'ability: Shapeshift');
|
||||
source.formeChange("Rotom-Mow");
|
||||
}
|
||||
break;
|
||||
case "Ice":
|
||||
if (source.species.id !== "rotomfrost") {
|
||||
this.add('-activate', source, 'ability: Shapeshift');
|
||||
source.formeChange("Rotom-Frost");
|
||||
}
|
||||
break;
|
||||
case "Flying":
|
||||
if (source.species.id !== "rotomfan") {
|
||||
this.add('-activate', source, 'ability: Shapeshift');
|
||||
source.formeChange("Rotom-Fan");
|
||||
}
|
||||
break;
|
||||
case "Ghost":
|
||||
if (source.species.id !== "rotom") {
|
||||
this.add('-activate', source, 'ability: Shapeshift');
|
||||
source.formeChange("Rotom");
|
||||
}
|
||||
break;
|
||||
}
|
||||
},
|
||||
},
|
||||
spoky: {
|
||||
name: "Spoky",
|
||||
shortDesc: "This Pokemon's type effectiveness is reversed when attacking or getting attacked.",
|
||||
onStart(target) {
|
||||
this.add('-ability', target, 'Spoky');
|
||||
},
|
||||
onEffectiveness(typeMod) {
|
||||
return typeMod * -1;
|
||||
},
|
||||
onFoeEffectiveness(typeMod) {
|
||||
return typeMod * -1;
|
||||
},
|
||||
},
|
||||
undead: {
|
||||
onModifyMovePriority: -5,
|
||||
onModifyMove(move) {
|
||||
if (!move.ignoreImmunity) move.ignoreImmunity = {};
|
||||
if (move.ignoreImmunity !== true) {
|
||||
move.ignoreImmunity['Ghost'] = true;
|
||||
}
|
||||
},
|
||||
name: "Undead",
|
||||
shortDesc: "This Pokemon can hit Normal-types with Ghost attacks.",
|
||||
},
|
||||
vamp: {
|
||||
onModifyMove(move) {
|
||||
if (!move.drain) move.drain = [1, 3];
|
||||
},
|
||||
name: "Vamp",
|
||||
shortDesc: "This Pokemon's attacks heal for 33% of the damage dealt.",
|
||||
},
|
||||
wonderguard: {
|
||||
onTryHit(target, source, move) {
|
||||
if (target === source || move.category === 'Status' || move.type === '???' || move.id === 'struggle') return;
|
||||
if (move.id === 'skydrop' && !source.volatiles['skydrop']) return;
|
||||
this.debug('Wonder Guard immunity: ' + move.id);
|
||||
if (target.runEffectiveness(move) !== 0) {
|
||||
if (move.smartTarget) {
|
||||
move.smartTarget = false;
|
||||
} else {
|
||||
this.add('-immune', target, '[from] ability: Wonder Guard');
|
||||
}
|
||||
return null;
|
||||
}
|
||||
},
|
||||
flags: { breakable: 1 },
|
||||
name: "Wonder Guard",
|
||||
shortDesc: "This Pokemon can only be hit by neutral attacks.",
|
||||
},
|
||||
};
|
||||
|
|
@ -1,225 +0,0 @@
|
|||
export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = {
|
||||
brn: {
|
||||
inherit: true,
|
||||
duration: 10,
|
||||
onResidual(pokemon) {
|
||||
this.damage(pokemon.baseMaxhp / 12);
|
||||
},
|
||||
onModifyMove(move, pokemon) {
|
||||
if (move.type === "Water") {
|
||||
this.add('-curestatus', pokemon, 'brn', `[from] move: ${move}`);
|
||||
pokemon.clearStatus();
|
||||
}
|
||||
},
|
||||
onDamagingHit(damage, target, source, move) {
|
||||
if (move.type === 'Water' && move.category !== 'Status') {
|
||||
this.add('-curestatus', target, 'brn', `[from] move: ${move}`);
|
||||
target.cureStatus();
|
||||
}
|
||||
},
|
||||
onEnd(target) {
|
||||
this.add('-end', target, 'brn');
|
||||
target.clearStatus();
|
||||
},
|
||||
},
|
||||
psn: {
|
||||
inherit: true,
|
||||
duration: 5,
|
||||
onResidual(pokemon) {
|
||||
this.damage(pokemon.baseMaxhp / 12);
|
||||
},
|
||||
onEnd(target) {
|
||||
this.add('-end', target, 'psn');
|
||||
target.clearStatus();
|
||||
},
|
||||
},
|
||||
superjump: {
|
||||
name: 'Super Jump',
|
||||
effectType: 'Weather',
|
||||
duration: 5,
|
||||
onWeatherModifyDamage(damage, attacker, defender, move) {
|
||||
if ([
|
||||
'highjumpkick', 'jumpkick', 'axe kick', 'doublekick', 'thunderouskick', 'lowkick', 'megakick', 'triplekick',
|
||||
'tropkick', 'skyuppercut', 'stomp', 'stompingtantrum', 'bounce', 'fly', 'skyattack', 'blastjump',
|
||||
].includes(move.id)) {
|
||||
this.debug('Jump boost');
|
||||
return this.chainModify(1.5);
|
||||
}
|
||||
},
|
||||
onFieldStart(battle, source, effect) {
|
||||
if (effect?.effectType === 'Ability') {
|
||||
if (this.gen <= 5) this.effectState.duration = 0;
|
||||
this.add('-weather', 'Super Jump', '[from] ability: ' + effect.name, `[of] ${source}`);
|
||||
} else {
|
||||
this.add('-weather', 'Super Jump', '-silent');
|
||||
}
|
||||
},
|
||||
onTryMovePriority: 1,
|
||||
onTryMove(attacker, defender, move) {
|
||||
if (move.type === 'Ground' && move.category !== 'Status') {
|
||||
this.debug('Super Jump suppress');
|
||||
this.add('-fail', attacker, move, '[from] Super Jump');
|
||||
this.attrLastMove('[still]');
|
||||
return null;
|
||||
}
|
||||
},
|
||||
onFieldResidualOrder: 1,
|
||||
onFieldResidual() {
|
||||
this.add('-weather', 'Super Jump', '[upkeep]');
|
||||
this.eachEvent('Weather');
|
||||
},
|
||||
onFieldEnd() {
|
||||
this.add('-weather', 'none');
|
||||
},
|
||||
},
|
||||
ubercharge: {
|
||||
name: 'ubercharge',
|
||||
duration: 1,
|
||||
// this is a volatile status
|
||||
onStart(target, source, sourceEffect) {
|
||||
this.add('-start', target, 'ubercharge', "[silent]");
|
||||
this.add('-message', `${target.name} was ubercharged!`);
|
||||
},
|
||||
onEnd(target) {
|
||||
this.add('-end', target, 'ubercharge', "[silent]");
|
||||
this.add('-message', `${target.name}'s ubercharge wore off!`);
|
||||
},
|
||||
onInvulnerability(target, source, move) {
|
||||
return false;
|
||||
},
|
||||
},
|
||||
jarate: {
|
||||
name: 'Jarate',
|
||||
duration: 1,
|
||||
// this is a volatile status
|
||||
onStart(target, source, sourceEffect) {
|
||||
this.add('-start', target, 'jarate', '[silent]');
|
||||
this.add('-message', `${target.name} was covered in Jarate!`);
|
||||
},
|
||||
onEnd(target) {
|
||||
this.add('-end', target, 'jarate', "[silent]");
|
||||
this.add('-message', `${target.name}'s Jarate wore off!`);
|
||||
},
|
||||
onSourceModifyDamage(damage, source, target, move) {
|
||||
this.add("-crit", target);
|
||||
return this.chainModify(1.35);
|
||||
},
|
||||
},
|
||||
flinch: {
|
||||
inherit: true,
|
||||
// flinches: true,
|
||||
},
|
||||
jumpscare: {
|
||||
name: 'jumpscare',
|
||||
// flinches: true,
|
||||
duration: 1,
|
||||
onBeforeMovePriority: 8,
|
||||
onBeforeMove(pokemon) {
|
||||
const rand = this.random(6);
|
||||
switch (rand) {
|
||||
case 0:
|
||||
this.add(`raw|<img src="https://pbs.twimg.com/media/E5tJ3LOWEAEuOx5.jpg" height="400" width="400">`);
|
||||
this.add('-message', `BOO! Did I scare you? I'm a job application 😂😂`);
|
||||
break;
|
||||
case 1:
|
||||
this.add(`raw|<img src="https://i.kym-cdn.com/photos/images/list/002/166/933/8a3.gif" height="400" width="400">`);
|
||||
break;
|
||||
case 2:
|
||||
this.add(`raw|<img src="https://i.pinimg.com/originals/68/12/4c/68124cdddd5615b4c11df6dcdbe1ff7f.gif" height="400" width="400">`);
|
||||
break;
|
||||
case 3:
|
||||
this.add(`raw|<img src="https://www.videomeme.in/wp-content/uploads/2022/12/1669720009775.jpg" height="400" width="400">`);
|
||||
this.add('-message', `Ghost, From That Game With The Ghost Guy In It (I Don't Remember What It Was Called)`);
|
||||
break;
|
||||
case 4:
|
||||
this.add(`raw|<img src="https://static.wikia.nocookie.net/slenderfortress/images/4/46/Zepheniah_Ghost.png" height="400" width="400">`);
|
||||
this.add('-message', `BOO`);
|
||||
break;
|
||||
case 5:
|
||||
this.add(`raw|<img src="https://raw.githubusercontent.com/scoopapa/DH2/38ec8d41f26b57766acda4ab509659b7e134b4f8/data/mods/spookymod/sprites/front/talkinchu.png" height="4540" width="411">`);
|
||||
this.add('-message', `"Deez" ~ DuoM2`);
|
||||
break;
|
||||
default:
|
||||
this.add(`raw|<img src="https://steamuserimages-a.akamaihd.net/ugc/950713639436160734/A6DB24F241B8A496DED1033A4A345E05A8336DFA/?imw=637&imh=358&ima=fit&impolicy=Letterbox&imcolor=%23000000&letterbox=true" height="400" width="400">`);
|
||||
this.hint("Connection Lost: Auto-disconnect in 24.7 seconds");
|
||||
}
|
||||
this.add('cant', pokemon, 'flinch');
|
||||
this.runEvent('Flinch', pokemon);
|
||||
return false;
|
||||
},
|
||||
},
|
||||
fakedynamax: {
|
||||
inherit: true,
|
||||
duration: 1,
|
||||
onStart(pokemon) {
|
||||
this.add('-start', pokemon, 'Dynamax', '[silent]');
|
||||
if (pokemon.species.id === 'gourgeistgigantic') {
|
||||
this.add('-message', `${pokemon.name} grew so large it exploded!`);
|
||||
this.actions.useMove('Explosion', pokemon);
|
||||
}
|
||||
},
|
||||
onEnd(pokemon) {
|
||||
this.add('-end', pokemon, 'Dynamax', '[silent]');
|
||||
},
|
||||
},
|
||||
summon: {
|
||||
// this is a slot condition
|
||||
onResidualOrder: 3,
|
||||
onResidual(target) {
|
||||
this.effectState.target = this.effectState.side.active[this.effectState.position];
|
||||
const data = this.effectState;
|
||||
const move = this.dex.moves.get(data.move);
|
||||
if (data.target.fainted || data.target === data.source) {
|
||||
this.hint(`${move.name} did not hit because the target is ${(data.fainted ? 'fainted' : 'the user')}.`);
|
||||
return;
|
||||
}
|
||||
this.add('-message', `${(data.target.illusion ? data.target.illusion.name : data.target.name)} took the ${move.name} attack!`);
|
||||
data.moveData.accuracy = true;
|
||||
data.moveData.isFutureMove = true;
|
||||
delete data.moveData.flags['protect'];
|
||||
const hitMove = new this.dex.Move(data.moveData) as ActiveMove;
|
||||
if (data.source.isActive) {
|
||||
this.add('-anim', data.source, hitMove, data.target);
|
||||
}
|
||||
this.actions.trySpreadMoveHit([data.target], data.source, hitMove);
|
||||
},
|
||||
onEnd(target) {
|
||||
this.effectState.target = this.effectState.side.active[this.effectState.position];
|
||||
const data = this.effectState;
|
||||
const move = this.dex.moves.get(data.move);
|
||||
if (data.target.fainted || data.target === data.source) {
|
||||
this.hint(`${move.name} did not hit because the target is ${(data.fainted ? 'fainted' : 'the user')}.`);
|
||||
return;
|
||||
}
|
||||
this.add('-message', `${(data.target.illusion ? data.target.illusion.name : data.target.name)} took the ${move.name} attack!`);
|
||||
data.moveData.accuracy = true;
|
||||
data.moveData.isFutureMove = true;
|
||||
delete data.moveData.flags['protect'];
|
||||
|
||||
const hitMove = new this.dex.Move(data.moveData) as ActiveMove;
|
||||
if (data.source.isActive) {
|
||||
this.add('-anim', data.source, hitMove, data.target);
|
||||
}
|
||||
this.actions.trySpreadMoveHit([data.target], data.source, hitMove);
|
||||
},
|
||||
},
|
||||
shrunken: {
|
||||
name: 'Shrunken',
|
||||
duration: 1,
|
||||
// this is a volatile status
|
||||
onStart(target, source, sourceEffect) {
|
||||
this.add('-start', target, 'shrunken', '[silent]');
|
||||
this.add('-message', `${target.name} shrunk!`);
|
||||
target.formeChange(target.species.id + 'shrunken');
|
||||
if (target.species.id === 'gourgeisttinyshrunken') {
|
||||
this.add('-message', `${target.name} shrunk so small it disappeared from existence!`);
|
||||
target.faint();
|
||||
}
|
||||
},
|
||||
onEnd(target) {
|
||||
this.add('-end', target, 'shrunken', "[silent]");
|
||||
this.add('-message', `${target.name} returned to full size!`);
|
||||
target.formeChange(target.baseSpecies);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -1,262 +0,0 @@
|
|||
export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = {
|
||||
aegislash: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
banettemega: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
ceruledge: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
dofagrigus: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
eddyazbear: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
fluttermane: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
fluttermane2: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
gourgeisttiny: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
gourgeist: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
gourgeistlarge: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
gourgeistgigantic: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
houndstone: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
indeedee: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
jableye: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
jobapplication: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
lanturnevil: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
merasmus: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
nursola: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
okestarspirit: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
ppiritomb: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
quagsiredead: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
rotom: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
shedinja: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
trevenant: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
ursalunabloodmoon: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
kilotic: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
vampharos: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
wunala: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
xorygonz: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
yveltal: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
zoroarkhisui: {
|
||||
tier: "OU",
|
||||
doublesTier: "DOU",
|
||||
},
|
||||
aegislashshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
banettemegashrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
ceruledgeshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
dofagrigusshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
eddyazbearshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
fluttermaneshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
fluttermane2shrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
gourgeisttinyshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
gourgeistshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
gourgeistlargeshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
gourgeistgiganticshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
houndstoneshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
indeedeeshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
jableyeshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
jobapplicationshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
lanturnevilshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
merasmusshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
nursolashrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
okestarspiritshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
ppiritombshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
quagsiredeadshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
rotomshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
shedinjashrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
trevenantshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
ursalunabloodmoonshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
kiloticshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
vampharosshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
wunalashrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
xorygonzshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
yveltalshrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
zoroarkhisuishrunken: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
gourgeistsmall: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
gourgeistsuper: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
trevenantrevenant: {
|
||||
tier: "Illegal",
|
||||
doublesTier: "Illegal",
|
||||
},
|
||||
};
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
|
||||
spellbookmagazine: {
|
||||
name: "Spellbook Magazine",
|
||||
shortDesc: "Lets the user pick up and cast spells.",
|
||||
onTakeItem(item, pokemon, source, move) {
|
||||
return false;
|
||||
},
|
||||
onResidual(pokemon) {
|
||||
if (pokemon.volatiles['spellbookmagazine']) return;
|
||||
const rand = this.random(4);
|
||||
const spells = [
|
||||
"Shadow Leap", "Fire BaIl", "Blast Jump", "Overheal", "Bat Swarm", "Pumpkin MIRV", "Stealth",
|
||||
"MONOCULUS!", "Skeleton Horde", "Ball O' Lightning", "Meteor Shower", "Minify",
|
||||
].map(x => ({ move: x, id: this.toID(x), pp: 1, maxpp: 1, target: "normal", disabled: false, used: false }));
|
||||
if (rand === 0) {
|
||||
const randSpell = this.sample(spells);
|
||||
pokemon.moveSlots.push(randSpell);
|
||||
pokemon.addVolatile("spellbookmagazine");
|
||||
}
|
||||
},
|
||||
condition: {
|
||||
onResidual(pokemon) {
|
||||
if (!pokemon.lastMoveUsed) {
|
||||
return false;
|
||||
}
|
||||
const spells = [
|
||||
'Shadow Leap', 'FirebaIl', 'Blast Jump', 'Overheal', 'Bat Swarm', 'Pumpkin MIRV', 'Stealth',
|
||||
'MONOCULUS!', 'Skeleton Horde', 'Ball O\' Lightning', 'Meteor Shower', 'Minify',
|
||||
];
|
||||
if (!spells.includes(pokemon.lastMoveUsed.name) || pokemon.lastMoveUsed.pp !== 0) return;
|
||||
pokemon.moveSlots.pop();
|
||||
pokemon.removeVolatile("spellbookmagazine");
|
||||
},
|
||||
onEnd(pokemon) {
|
||||
this.add('-end', pokemon, 'Spell', '[silent]');
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -1,769 +0,0 @@
|
|||
export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = {
|
||||
aegislash: {
|
||||
inherit: true,
|
||||
num: 1,
|
||||
name: "Aegislash",
|
||||
types: ["Ghost", "Steel"],
|
||||
baseStats: { hp: 120, atk: 60, def: 100, spa: 60, spd: 100, spe: 60 },
|
||||
abilities: { 0: "Stance Change", H: "Bulletproof" },
|
||||
},
|
||||
aegislashblade: {
|
||||
inherit: true,
|
||||
num: 1,
|
||||
name: "Aegislash-Blade",
|
||||
types: ["Ghost", "Steel"],
|
||||
baseStats: { hp: 120, atk: 100, def: 60, spa: 100, spd: 60, spe: 60 },
|
||||
abilities: { 0: "Stance Change", H: "Bulletproof" },
|
||||
},
|
||||
banettemega: {
|
||||
inherit: true,
|
||||
num: 2,
|
||||
name: "Banette-Mega",
|
||||
baseSpecies: "",
|
||||
forme: "",
|
||||
types: ["Ghost"],
|
||||
baseStats: { hp: 64, atk: 165, def: 63, spa: 110, spd: 63, spe: 35 },
|
||||
abilities: { 0: "Tough Claws" },
|
||||
requiredItem: "",
|
||||
},
|
||||
ceruledge: {
|
||||
inherit: true,
|
||||
num: 3,
|
||||
name: "Ceruledge",
|
||||
types: ["Ghost", "Fire"],
|
||||
baseStats: { hp: 85, atk: 115, def: 80, spa: 60, spd: 110, spe: 75 },
|
||||
abilities: { 0: "Sharpness", H: "Triage" },
|
||||
},
|
||||
dofagrigus: {
|
||||
num: 4,
|
||||
name: "Dofagrigus",
|
||||
types: ["Ghost"],
|
||||
baseStats: { hp: 70, atk: 55, def: 145, spa: 95, spd: 105, spe: 30 },
|
||||
abilities: { 0: "Dummy" },
|
||||
weightkg: 76.5,
|
||||
eggGroups: ["Mineral", "Amorphous"],
|
||||
},
|
||||
eddyazbear: {
|
||||
num: 5,
|
||||
name: "Eddy Azbear",
|
||||
types: ["Ghost", "Fighting"],
|
||||
baseStats: { hp: 183, atk: 117, def: 40, spa: 100, spd: 40, spe: 90 },
|
||||
abilities: { 0: "Jumpscare", H: "Strong Jaw" },
|
||||
weightkg: 555,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
fluttermane: {
|
||||
inherit: true,
|
||||
num: 6,
|
||||
name: "Flutter Mane",
|
||||
types: ["Ghost", "Dark", "Fairy"],
|
||||
baseStats: { hp: 95, atk: 95, def: 95, spa: 95, spd: 95, spe: 95 },
|
||||
abilities: { 0: "Protosynthesis", H: "Levitate" },
|
||||
},
|
||||
fluttermane2: {
|
||||
num: 6,
|
||||
name: "Flutter Mane 2",
|
||||
types: ["Ghost", "Dark", "Fairy"],
|
||||
baseStats: { hp: 95, atk: 95, def: 95, spa: 95, spd: 95, spe: 95 },
|
||||
abilities: { 0: "Protosynthesis", H: "Levitate" },
|
||||
weightkg: 4.2,
|
||||
tags: ["Paradox"],
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
gourgeisttiny: {
|
||||
num: 8,
|
||||
name: "Gourgeist-Tiny",
|
||||
baseSpecies: "Gourgeist",
|
||||
forme: "Tiny",
|
||||
types: ["Ghost", "Grass", "Fire", "Fairy"],
|
||||
baseStats: { hp: 5, atk: 81, def: 129, spa: 81, spd: 75, spe: 169 },
|
||||
abilities: { 0: "Dazzling" },
|
||||
weightkg: 4.8,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
gourgeist: {
|
||||
inherit: true,
|
||||
num: 9,
|
||||
name: "Gourgeist",
|
||||
types: ["Ghost", "Grass", "Fire", "Fairy"],
|
||||
baseStats: { hp: 55, atk: 91, def: 109, spa: 91, spd: 75, spe: 119 },
|
||||
abilities: { 0: "Desolate Land" },
|
||||
},
|
||||
gourgeistlarge: {
|
||||
inherit: true,
|
||||
num: 10,
|
||||
name: "Gourgeist-Large",
|
||||
types: ["Ghost", "Grass", "Fire", "Fairy"],
|
||||
baseStats: { hp: 105, atk: 101, def: 89, spa: 101, spd: 75, spe: 69 },
|
||||
abilities: { 0: "Spoky" },
|
||||
},
|
||||
gourgeistgigantic: {
|
||||
num: 11,
|
||||
name: "Gourgeist-Gigantic",
|
||||
baseSpecies: "Gourgeist",
|
||||
forme: "Gigantic",
|
||||
types: ["Ghost", "Grass", "Fire", "Fairy"],
|
||||
baseStats: { hp: 155, atk: 111, def: 69, spa: 111, spd: 75, spe: 19 },
|
||||
abilities: { 0: "Pulp Up" },
|
||||
weightkg: 78,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
houndstone: {
|
||||
inherit: true,
|
||||
num: 12,
|
||||
name: "Houndstone",
|
||||
types: ["Ghost", "Fighting", "Normal"],
|
||||
baseStats: { hp: 82, atk: 91, def: 140, spa: 50, spd: 97, spe: 70 },
|
||||
abilities: { 0: "Jumpscare", 1: "Undead", H: "Fluffy" },
|
||||
},
|
||||
indeedee: {
|
||||
inherit: true,
|
||||
num: 13,
|
||||
name: "Indeedee",
|
||||
types: ["Ghost", "Normal", "Psychic"],
|
||||
baseStats: { hp: 70, atk: 85, def: 75, spa: 105, spd: 95, spe: 95 },
|
||||
abilities: { 0: "Inner Focus", 1: "Scrappy", H: "Psychic Surge" },
|
||||
},
|
||||
jableye: {
|
||||
num: 14,
|
||||
name: "Jableye",
|
||||
types: ["Ghost", "Dark", "Poison"],
|
||||
baseStats: { hp: 75, atk: 75, def: 100, spa: 75, spd: 100, spe: 50 },
|
||||
abilities: { 0: "Justified", H: "Jankster" },
|
||||
weightkg: 11,
|
||||
eggGroups: ["Human-Like"],
|
||||
},
|
||||
jobapplication: {
|
||||
num: 15,
|
||||
name: "JOB APPLICATION",
|
||||
types: ["Ghost", "Normal"],
|
||||
baseStats: { hp: 130, atk: 130, def: 70, spa: 50, spd: 70, spe: 80 },
|
||||
abilities: { 0: "Jumpscare" },
|
||||
weightkg: 4.3,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
kilotic: {
|
||||
num: -196,
|
||||
name: "Kilotic",
|
||||
types: ["Ghost", "Water"],
|
||||
baseStats: { hp: 81, atk: 60, def: 125, spa: 100, spd: 79, spe: 95 },
|
||||
abilities: { 0: "Flare Boost", 1: "Intimidate", H: "Cursed Body" },
|
||||
weightkg: 162,
|
||||
eggGroups: ["Water 1", "Dragon"],
|
||||
},
|
||||
lanturnevil: {
|
||||
num: 16,
|
||||
name: "Lanturn-Evil",
|
||||
baseSpecies: "Lanturn",
|
||||
forme: "Evil",
|
||||
types: ["Ghost", "Retaw", "Critcele"],
|
||||
baseStats: { hp: 67, atk: 96, def: 96, spa: 58, spd: 58, spe: 125 },
|
||||
abilities: { 0: "Abyssal Light" },
|
||||
weightkg: 22.5,
|
||||
eggGroups: ["Water 2"],
|
||||
},
|
||||
merasmus: {
|
||||
num: 17,
|
||||
name: "MERASMUS",
|
||||
types: ["Ghost", "Psychic", "Fairy", "Dark"],
|
||||
baseStats: { hp: 111, atk: 111, def: 111, spa: 111, spd: 111, spe: 111 },
|
||||
abilities: { 0: "Magician" },
|
||||
weightkg: 666,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
nursola: {
|
||||
num: -195,
|
||||
name: "Nursola",
|
||||
types: ["Ghost", "Grass", "Rock"],
|
||||
baseStats: { hp: 145, atk: 50, def: 60, spa: 95, spd: 130, spe: 30 },
|
||||
abilities: { 0: "Solid Rock", 1: "Purifying Salt", H: "Perish Body" },
|
||||
weightkg: 0.4,
|
||||
eggGroups: ["Water 1", "Water 3"],
|
||||
},
|
||||
okestarspirit: {
|
||||
num: 19,
|
||||
name: "Okestar Spirit",
|
||||
types: ["Ghost", "ark"],
|
||||
baseStats: { hp: 100, atk: 100, def: 100, spa: 100, spd: 100, spe: 100 },
|
||||
abilities: { 0: "Onder Guard" },
|
||||
weightkg: 61,
|
||||
eggGroups: ["Field"],
|
||||
},
|
||||
ppiritomb: {
|
||||
num: 20,
|
||||
name: "PPiritomb",
|
||||
types: ["Ghost", "PDark", "PRock"],
|
||||
baseStats: { hp: 50, atk: 92, def: 108, spa: 92, spd: 108, spe: 50 },
|
||||
abilities: { 0: "PPressure", H: "Pinfiltrator" },
|
||||
weightkg: 108,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
quagsiredead: {
|
||||
num: 21,
|
||||
name: "Quagsire-Dead",
|
||||
baseSpecies: "Quagsire",
|
||||
forme: "Dead",
|
||||
types: ["Ghost", "Water", "Ground"],
|
||||
baseStats: { hp: 115, atk: 95, def: 95, spa: 75, spd: 75, spe: 45 },
|
||||
abilities: { 0: "Cursed Body", H: "Unaware" },
|
||||
weightkg: 7.5,
|
||||
eggGroups: ["Water 1", "Field"],
|
||||
},
|
||||
rotom: {
|
||||
inherit: true,
|
||||
num: 22,
|
||||
name: "Rotom",
|
||||
types: ["Ghost", "Electric"],
|
||||
baseStats: { hp: 80, atk: 50, def: 97, spa: 115, spd: 97, spe: 91 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
},
|
||||
rotomheat: {
|
||||
inherit: true,
|
||||
num: 22,
|
||||
types: ["Ghost", "Electric", "Fire"],
|
||||
baseStats: { hp: 80, atk: 50, def: 97, spa: 115, spd: 97, spe: 91 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
},
|
||||
rotomwash: {
|
||||
inherit: true,
|
||||
num: 22,
|
||||
types: ["Ghost", "Electric", "Water"],
|
||||
baseStats: { hp: 80, atk: 50, def: 97, spa: 115, spd: 97, spe: 91 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
},
|
||||
rotomfrost: {
|
||||
inherit: true,
|
||||
num: 22,
|
||||
types: ["Ghost", "Electric", "Ice"],
|
||||
baseStats: { hp: 80, atk: 50, def: 97, spa: 115, spd: 97, spe: 91 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
},
|
||||
rotomfan: {
|
||||
inherit: true,
|
||||
num: 22,
|
||||
types: ["Ghost", "Electric", "Flying"],
|
||||
baseStats: { hp: 80, atk: 50, def: 97, spa: 115, spd: 97, spe: 91 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
},
|
||||
rotommow: {
|
||||
inherit: true,
|
||||
num: 22,
|
||||
types: ["Ghost", "Electric", "Grass"],
|
||||
baseStats: { hp: 80, atk: 50, def: 97, spa: 115, spd: 97, spe: 91 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
},
|
||||
shedinja: {
|
||||
inherit: true,
|
||||
num: 23,
|
||||
name: "Shedinja",
|
||||
types: ["Ghost", "Bug"],
|
||||
baseStats: { hp: 1, atk: 90, def: 1, spa: 90, spd: 1, spe: 42 },
|
||||
abilities: { 0: "Wonder Guard" },
|
||||
},
|
||||
trevenant: {
|
||||
inherit: true,
|
||||
num: 24,
|
||||
name: "Trevenant",
|
||||
types: ["Ghost", "Grass", "Fighting"],
|
||||
baseStats: { hp: 85, atk: 110, def: 106, spa: 65, spd: 102, spe: 57 },
|
||||
abilities: { 0: "Natural Cure", 1: "Triage", H: "Revive" },
|
||||
},
|
||||
trevenantrevenant: {
|
||||
num: 24,
|
||||
name: "Trevenant-Revenant",
|
||||
baseSpecies: "Trevenant",
|
||||
forme: "Revenant",
|
||||
types: ["Ghost", "Rock", "Fighting"],
|
||||
baseStats: { hp: 85, atk: 110, def: 76, spa: 65, spd: 72, spe: 117 },
|
||||
abilities: { 0: "Reckless" },
|
||||
weightkg: 71,
|
||||
eggGroups: ["Grass", "Amorphous"],
|
||||
},
|
||||
ursalunabloodmoon: {
|
||||
inherit: true,
|
||||
num: 25,
|
||||
types: ["Ghost", "Normal", "Ground"],
|
||||
baseStats: { hp: 113, atk: 100, def: 90, spa: 135, spd: 65, spe: 52 },
|
||||
abilities: { 0: "Mind's Eye", H: "Undead" },
|
||||
},
|
||||
vampharos: {
|
||||
num: -194,
|
||||
name: "Vampharos",
|
||||
types: ["Ghost", "Electric", "Dragon"],
|
||||
baseStats: { hp: 90, atk: 85, def: 95, spa: 140, spd: 100, spe: 50 },
|
||||
abilities: { 0: "Cotton Down", 1: "Mold Breaker", H: "Vamp" },
|
||||
weightkg: 61.5,
|
||||
eggGroups: ["Monster", "Field"],
|
||||
},
|
||||
wunala: {
|
||||
num: 28,
|
||||
name: "Wunala",
|
||||
types: ["Ghost", "Psychic", "Dark"],
|
||||
baseStats: { hp: 67, atk: 113, def: 109, spa: 67, spd: 107, spe: 67 },
|
||||
abilities: { 0: "Wandering Spirit", 1: "Wonder Skin", H: "Wand Rush" },
|
||||
weightkg: 120,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
xorygonz: {
|
||||
num: 29,
|
||||
name: "XORygon-Z",
|
||||
types: ["Ghost", "Steel", "Ice", "Poison"],
|
||||
baseStats: { hp: 85, atk: 90, def: 70, spa: 125, spd: 75, spe: 90 },
|
||||
abilities: { 0: "Mutual Exclusion", H: "Ahexual" },
|
||||
weightkg: 36.5,
|
||||
eggGroups: ["Mineral"],
|
||||
},
|
||||
yveltal: {
|
||||
inherit: true,
|
||||
num: 30,
|
||||
name: "Yveltal",
|
||||
types: ["Ghost", "Dragon", "Flying"],
|
||||
baseStats: { hp: 116, atk: 91, def: 95, spa: 91, spd: 98, spe: 79 },
|
||||
abilities: { 0: "Dark Aura", H: "Intimidate" },
|
||||
},
|
||||
zoroarkhisui: {
|
||||
inherit: true,
|
||||
num: 31,
|
||||
name: "Zoroark-Hisui",
|
||||
baseSpecies: "Zoroark",
|
||||
forme: "Hisui",
|
||||
types: ["Ghost", "Normal", "Ice"],
|
||||
baseStats: { hp: 65, atk: 110, def: 70, spa: 105, spd: 70, spe: 110 },
|
||||
abilities: { 0: "Cursed Body", 1: "Snow Warning", H: "Illusion" },
|
||||
},
|
||||
// shrunken
|
||||
aegislashshrunken: {
|
||||
num: 1,
|
||||
name: "Aegislash-Shrunken",
|
||||
baseSpecies: "Aegislash",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Steel"],
|
||||
baseStats: { hp: 120, atk: 30, def: 50, spa: 30, spd: 50, spe: 30 },
|
||||
abilities: { 0: "Stance Change", H: "Bulletproof" },
|
||||
battleOnly: "Aegislash",
|
||||
weightkg: 5.3,
|
||||
eggGroups: ["Mineral"],
|
||||
},
|
||||
banettemegashrunken: {
|
||||
num: 2,
|
||||
name: "Banette-Mega-Shrunken",
|
||||
baseSpecies: "Banette",
|
||||
forme: "Mega-Shrunken",
|
||||
types: ["Ghost"],
|
||||
baseStats: { hp: 64, atk: 82, def: 32, spa: 55, spd: 32, spe: 17 },
|
||||
abilities: { 0: "Tough Claws" },
|
||||
battleOnly: "Banette-Mega",
|
||||
weightkg: 1.3,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
ceruledgeshrunken: {
|
||||
num: 3,
|
||||
name: "Ceruledge-Shrunken",
|
||||
baseSpecies: "Ceruledge",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Fire"],
|
||||
baseStats: { hp: 85, atk: 57, def: 40, spa: 30, spd: 55, spe: 37 },
|
||||
abilities: { 0: "Sharpness", H: "Triage" },
|
||||
battleOnly: "Ceruledge",
|
||||
weightkg: 6.2,
|
||||
eggGroups: ["Human-Like"],
|
||||
},
|
||||
dofagrigusshrunken: {
|
||||
num: 4,
|
||||
name: "Dofagrigus-Shrunken",
|
||||
baseSpecies: "Dofagrigus",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost"],
|
||||
baseStats: { hp: 70, atk: 27, def: 73, spa: 47, spd: 53, spe: 15 },
|
||||
abilities: { 0: "Dummy", H: "Bulletproof" },
|
||||
battleOnly: "Dofagrigus",
|
||||
weightkg: 7.7,
|
||||
eggGroups: ["Mineral", "Amorphous"],
|
||||
},
|
||||
eddyazbearshrunken: {
|
||||
num: 5,
|
||||
name: "Eddy Azbear-Shrunken",
|
||||
baseSpecies: "Eddy Azbear",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Fighting"],
|
||||
baseStats: { hp: 183, atk: 58, def: 20, spa: 50, spd: 20, spe: 45 },
|
||||
abilities: { 0: "Jumpscare", H: "Strong Jaw" },
|
||||
battleOnly: "Eddy Azbear",
|
||||
weightkg: 55.5,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
fluttermaneshrunken: {
|
||||
num: 6,
|
||||
name: "Flutter Mane-Shrunken",
|
||||
baseSpecies: "Flutter Mane",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Dark", "Fairy"],
|
||||
baseStats: { hp: 95, atk: 47, def: 48, spa: 47, spd: 48, spe: 47 },
|
||||
abilities: { 0: "Protosynthesis", H: "Levitate" },
|
||||
battleOnly: "Flutter Mane",
|
||||
weightkg: 0.4,
|
||||
tags: ["Paradox"],
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
fluttermane2shrunken: {
|
||||
num: 7,
|
||||
name: "Flutter Mane 2-Shrunken",
|
||||
baseSpecies: "Flutter Mane 2",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Dark", "Fairy"],
|
||||
baseStats: { hp: 95, atk: 47, def: 48, spa: 47, spd: 48, spe: 47 },
|
||||
abilities: { 0: "Protosynthesis", H: "Levitate" },
|
||||
battleOnly: "Flutter Mane 2",
|
||||
weightkg: 0.4,
|
||||
tags: ["Paradox"],
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
gourgeisttinyshrunken: {
|
||||
num: 8,
|
||||
name: "Gourgeist-Tiny-Shrunken",
|
||||
baseSpecies: "Gourgeist",
|
||||
forme: "Tiny-Shrunken",
|
||||
types: ["Ghost", "Grass", "Fire", "Fairy"],
|
||||
baseStats: { hp: 5, atk: 40, def: 65, spa: 40, spd: 38, spe: 84 },
|
||||
abilities: { 0: "Grassy Surge" },
|
||||
battleOnly: "Gourgeist-Tiny",
|
||||
weightkg: 0.5,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
gourgeistshrunken: {
|
||||
num: 9,
|
||||
name: "Gourgeist-Shrunken",
|
||||
baseSpecies: "Gourgeist",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Grass", "Fire", "Fairy"],
|
||||
baseStats: { hp: 55, atk: 45, def: 55, spa: 45, spd: 38, spe: 59 },
|
||||
abilities: { 0: "Poison Heal" },
|
||||
battleOnly: "Gourgeist",
|
||||
weightkg: 1.3,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
gourgeistlargeshrunken: {
|
||||
num: 10,
|
||||
name: "Gourgeist-Large-Shrunken",
|
||||
baseSpecies: "Gourgeist",
|
||||
forme: "Large-Shrunken",
|
||||
types: ["Ghost", "Grass", "Fire", "Fairy"],
|
||||
baseStats: { hp: 105, atk: 50, def: 45, spa: 50, spd: 38, spe: 34 },
|
||||
abilities: { 0: "Spoky" },
|
||||
battleOnly: "Gourgeist-Large",
|
||||
weightkg: 1.4,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
gourgeistgiganticshrunken: {
|
||||
num: 11,
|
||||
name: "Gourgeist-Gigantic-Shrunken",
|
||||
baseSpecies: "Gourgeist",
|
||||
forme: "Gigantic-Shrunken",
|
||||
types: ["Ghost", "Grass", "Fire", "Fairy"],
|
||||
baseStats: { hp: 155, atk: 55, def: 35, spa: 55, spd: 38, spe: 9 },
|
||||
abilities: { 0: "Pulp Up" },
|
||||
battleOnly: "Gourgeist-Gigantic",
|
||||
weightkg: 7.8,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
houndstoneshrunken: {
|
||||
num: 12,
|
||||
name: "Houndstone-Shrunken",
|
||||
baseSpecies: "Houndstone",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Fighting"],
|
||||
baseStats: { hp: 82, atk: 46, def: 70, spa: 25, spd: 49, spe: 35 },
|
||||
abilities: { 0: "Jumpscare", 1: "Scrappy", H: "Fluffy" },
|
||||
battleOnly: "Houndstone",
|
||||
weightkg: 1.5,
|
||||
eggGroups: ["Field"],
|
||||
},
|
||||
indeedeeshrunken: {
|
||||
num: 13,
|
||||
name: "Indeedee-Shrunken",
|
||||
baseSpecies: "Indeedee",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Normal", "Psychic"],
|
||||
baseStats: { hp: 70, atk: 42, def: 38, spa: 52, spd: 48, spe: 47 },
|
||||
abilities: { 0: "Inner Focus", 1: "Scrappy", H: "Psychic Surge" },
|
||||
battleOnly: "Indeedee",
|
||||
weightkg: 2.8,
|
||||
eggGroups: ["Fairy"],
|
||||
},
|
||||
jableyeshrunken: {
|
||||
num: 14,
|
||||
name: "Jableye-Shrunken",
|
||||
baseSpecies: "Jableye",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Dark"],
|
||||
baseStats: { hp: 75, atk: 25, def: 38, spa: 25, spd: 38, spe: 25 },
|
||||
abilities: { 0: "Justified", H: "Jankster" },
|
||||
battleOnly: "Jableye",
|
||||
weightkg: 1.1,
|
||||
eggGroups: ["Human-Like"],
|
||||
},
|
||||
jobapplicationshrunken: {
|
||||
num: 15,
|
||||
name: "JOB APPLICATION-Shrunken",
|
||||
baseSpecies: "JOB APPLICATION",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Normal"],
|
||||
baseStats: { hp: 130, atk: 65, def: 35, spa: 25, spd: 35, spe: 40 },
|
||||
abilities: { 0: "Jumpscare" },
|
||||
battleOnly: "JOB APPLICATION",
|
||||
weightkg: 0.4,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
lanturnevilshrunken: {
|
||||
num: 16,
|
||||
name: "Lanturn-Evil-Shrunken",
|
||||
baseSpecies: "Lanturn",
|
||||
forme: "Evil-Shrunken",
|
||||
types: ["Ghost", "Retaw", "Critcele"],
|
||||
baseStats: { hp: 97, atk: 48, def: 48, spa: 29, spd: 29, spe: 62 },
|
||||
abilities: { 0: "Volt Absorb", 1: "Illuminate", H: "Abyssal Light" },
|
||||
battleOnly: "Lanturn-Evil",
|
||||
weightkg: 2.3,
|
||||
eggGroups: ["Water 2"],
|
||||
},
|
||||
merasmusshrunken: {
|
||||
num: 17,
|
||||
name: "MERASMUS-Shrunken",
|
||||
baseSpecies: "MERASMUS",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Psychic", "Fairy", "Dark"],
|
||||
baseStats: { hp: 111, atk: 55, def: 56, spa: 55, spd: 56, spe: 55 },
|
||||
abilities: { 0: "Magician" },
|
||||
battleOnly: "MERASMUS",
|
||||
weightkg: 66.6,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
nursolashrunken: {
|
||||
num: 18,
|
||||
name: "Nursola-Shrunken",
|
||||
baseSpecies: "Nursola",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Grass", "Rock"],
|
||||
baseStats: { hp: 145, atk: 25, def: 30, spa: 48, spd: 65, spe: 15 },
|
||||
abilities: { 0: "Solid Rock", 1: "Purifying Salt", H: "Perish Body" },
|
||||
battleOnly: "Nursola",
|
||||
weightkg: 0.1,
|
||||
eggGroups: ["Water 1", "Water 3"],
|
||||
},
|
||||
okestarspiritshrunken: {
|
||||
num: 19,
|
||||
name: "Okestar Spirit-Shrunken",
|
||||
baseSpecies: "Okestar Spirit",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "ark"],
|
||||
baseStats: { hp: 100, atk: 50, def: 50, spa: 50, spd: 50, spe: 50 },
|
||||
abilities: { 0: "Onder Guard" },
|
||||
battleOnly: "Okestar Spirit",
|
||||
weightkg: 6.1,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
ppiritombshrunken: {
|
||||
num: 20,
|
||||
name: "PPiritomb-Shrunken",
|
||||
baseSpecies: "PPiritomb",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "PDark", "PRock"],
|
||||
baseStats: { hp: 50, atk: 46, def: 54, spa: 46, spd: 54, spe: 25 },
|
||||
abilities: { 0: "PPressure", H: "Pinfiltrator" },
|
||||
battleOnly: "PPiritomb",
|
||||
weightkg: 10.8,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
quagsiredeadshrunken: {
|
||||
num: 21,
|
||||
name: "Quagsire-Dead-Shrunken",
|
||||
baseSpecies: "Quagsire",
|
||||
forme: "Dead-Shrunken",
|
||||
types: ["Ghost", "Water", "Ground"],
|
||||
baseStats: { hp: 115, atk: 47, def: 48, spa: 37, spd: 38, spe: 22 },
|
||||
abilities: { 0: "Cursed Body", H: "Unaware" },
|
||||
battleOnly: "Quagsire-Dead",
|
||||
weightkg: 0.8,
|
||||
eggGroups: ["Water 1", "Field"],
|
||||
},
|
||||
rotomshrunken: {
|
||||
num: 22,
|
||||
name: "Rotom-Shrunken",
|
||||
baseSpecies: "Rotom",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Electric"],
|
||||
baseStats: { hp: 80, atk: 25, def: 49, spa: 57, spd: 49, spe: 45 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
battleOnly: "Rotom",
|
||||
weightkg: 0.1,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
rotomheatshrunken: {
|
||||
num: 22,
|
||||
name: "Rotom-Heat-Shrunken",
|
||||
baseSpecies: "Rotom-Heat",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Electric", "Fire"],
|
||||
baseStats: { hp: 80, atk: 25, def: 49, spa: 57, spd: 49, spe: 45 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
battleOnly: "Rotom-Heat",
|
||||
weightkg: 0.1,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
rotomwashshrunken: {
|
||||
num: 22,
|
||||
name: "Rotom-Wash-Shrunken",
|
||||
baseSpecies: "Rotom-Wash",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Electric", "Water"],
|
||||
baseStats: { hp: 80, atk: 25, def: 49, spa: 57, spd: 49, spe: 45 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
battleOnly: "Rotom-Wash",
|
||||
weightkg: 0.1,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
rotommowshrunken: {
|
||||
num: 22,
|
||||
name: "Rotom-Mow-Shrunken",
|
||||
baseSpecies: "Rotom-Mow",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Electric", "Grass"],
|
||||
baseStats: { hp: 80, atk: 25, def: 49, spa: 57, spd: 49, spe: 45 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
battleOnly: "Rotom-Mow",
|
||||
weightkg: 0.1,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
rotomfrostshrunken: {
|
||||
num: 22,
|
||||
name: "Rotom-Frost-Shrunken",
|
||||
baseSpecies: "Rotom-Frost",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Electric", "Ice"],
|
||||
baseStats: { hp: 80, atk: 25, def: 49, spa: 57, spd: 49, spe: 45 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
battleOnly: "Rotom-Frost",
|
||||
weightkg: 0.1,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
rotomfanshrunken: {
|
||||
num: 22,
|
||||
name: "Rotom-Fan-Shrunken",
|
||||
baseSpecies: "Rotom-Fan",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Electric", "Flying"],
|
||||
baseStats: { hp: 80, atk: 25, def: 49, spa: 57, spd: 49, spe: 45 },
|
||||
abilities: { 0: "Levitate", H: "Shapeshift" },
|
||||
battleOnly: "Rotom-Fan",
|
||||
weightkg: 0.1,
|
||||
eggGroups: ["Amorphous"],
|
||||
},
|
||||
shedinjashrunken: {
|
||||
num: 23,
|
||||
name: "Shedinja-Shrunken",
|
||||
baseSpecies: "Shedinja",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Bug"],
|
||||
baseStats: { hp: 1, atk: 45, def: 1, spa: 45, spd: 1, spe: 21 },
|
||||
abilities: { 0: "Wonder Guard" },
|
||||
battleOnly: "Shedinja",
|
||||
weightkg: 0.6,
|
||||
eggGroups: ["Bug"],
|
||||
},
|
||||
trevenantshrunken: {
|
||||
num: 24,
|
||||
name: "Trevenant-Shrunken",
|
||||
baseSpecies: "Trevenant",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Grass", "Fighting"],
|
||||
baseStats: { hp: 85, atk: 55, def: 53, spa: 32, spd: 51, spe: 28 },
|
||||
abilities: { 0: "Natural Cure", 1: "Triage", H: "Revive" },
|
||||
battleOnly: "Trevenant",
|
||||
weightkg: 7.1,
|
||||
eggGroups: ["Grass", "Amorphous"],
|
||||
},
|
||||
ursalunabloodmoonshrunken: {
|
||||
num: 25,
|
||||
name: "Ursaluna-Bloodmoon-Shrunken",
|
||||
baseSpecies: "Ursaluna",
|
||||
forme: "Bloodmoon-Shrunken",
|
||||
types: ["Ghost", "Normal", "Ground"],
|
||||
baseStats: { hp: 113, atk: 50, def: 45, spa: 67, spd: 33, spe: 26 },
|
||||
abilities: { 0: "Mind's Eye", H: "Undead" },
|
||||
battleOnly: "Ursaluna-Bloodmoon",
|
||||
weightkg: 33.3,
|
||||
eggGroups: ["Field"],
|
||||
},
|
||||
kiloticshrunken: {
|
||||
num: 26,
|
||||
name: "Kilotic-Shrunken",
|
||||
baseSpecies: "Kilotic",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Water"],
|
||||
baseStats: { hp: 81, atk: 30, def: 63, spa: 50, spd: 40, spe: 48 },
|
||||
abilities: { 0: "Flare Boost", 1: "Intimidate", H: "Cursed Body" },
|
||||
battleOnly: "Kilotic",
|
||||
weightkg: 16.2,
|
||||
eggGroups: ["Water 1", "Dragon"],
|
||||
},
|
||||
vampharosshrunken: {
|
||||
num: 27,
|
||||
name: "Vampharos-Shrunken",
|
||||
baseSpecies: "Vampharos",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Electric", "Dragon"],
|
||||
baseStats: { hp: 90, atk: 43, def: 48, spa: 70, spd: 50, spe: 25 },
|
||||
abilities: { 0: "Cotton Down", 1: "Mold Breaker", H: "Vamp" },
|
||||
battleOnly: "Vampharos",
|
||||
weightkg: 6.2,
|
||||
eggGroups: ["Monster", "Field"],
|
||||
},
|
||||
wunalashrunken: {
|
||||
num: 28,
|
||||
name: "Wunala-Shrunken",
|
||||
baseSpecies: "Wunala",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Psychic", "Dark"],
|
||||
baseStats: { hp: 67, atk: 56, def: 55, spa: 33, spd: 54, spe: 33 },
|
||||
abilities: { 0: "Wandering Spirit", 1: "Wonder Skin", H: "Wand Rush" },
|
||||
battleOnly: "Wunala",
|
||||
weightkg: 12,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
xorygonzshrunken: {
|
||||
num: 29,
|
||||
name: "XORygon-Z-Shrunken",
|
||||
baseSpecies: "XORygon-Z",
|
||||
forme: "Z-Shrunken",
|
||||
types: ["Ghost", "Steel", "Ice", "Poison"],
|
||||
baseStats: { hp: 85, atk: 45, def: 35, spa: 62, spd: 38, spe: 45 },
|
||||
abilities: { 0: "Mutual Exclusion", H: "Ahexual" },
|
||||
battleOnly: "XORygon-Z",
|
||||
weightkg: 3.4,
|
||||
eggGroups: ["Mineral"],
|
||||
},
|
||||
yveltalshrunken: {
|
||||
num: 30,
|
||||
name: "Yveltal-Shrunken",
|
||||
baseSpecies: "Yveltal",
|
||||
forme: "Shrunken",
|
||||
types: ["Ghost", "Dragon", "Flying"],
|
||||
baseStats: { hp: 116, atk: 46, def: 48, spa: 46, spd: 49, spe: 39 },
|
||||
abilities: { 0: "Dark Aura", H: "Intimidate" },
|
||||
battleOnly: "Yveltal",
|
||||
weightkg: 20.3,
|
||||
eggGroups: ["Undiscovered"],
|
||||
},
|
||||
zoroarkhisuishrunken: {
|
||||
num: 31,
|
||||
name: "Zoroark-Hisui-Shrunken",
|
||||
baseSpecies: "Zoroark",
|
||||
forme: "Hisui-Shrunken",
|
||||
types: ["Ghost", "Normal", "Ice"],
|
||||
baseStats: { hp: 65, atk: 55, def: 35, spa: 52, spd: 35, spe: 55 },
|
||||
abilities: { 0: "Cursed Body", 1: "Snow Warning", H: "Illusion" },
|
||||
battleOnly: "Zoroark-Hisui",
|
||||
weightkg: 7.3,
|
||||
eggGroups: ["Field"],
|
||||
},
|
||||
};
|
||||
|
|
@ -1,255 +0,0 @@
|
|||
export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
|
||||
spokymod: {
|
||||
effectType: 'Rule',
|
||||
name: 'Spokymod',
|
||||
desc: 'spookymod jumpscare',
|
||||
onBegin() {
|
||||
const intro = [
|
||||
"Welcome mortals to my Magic Kingdom!...which is unaffiliated with any other Magic Kingdom that may or may not exist.",
|
||||
"Step right up and get your spells from me! For I am the Spell Master!...again, not a term Merasmus officially owns.",
|
||||
"Greetings mortals and こんにちは! Yes Merasmus is learning Japanese, in the likely event he will have to beg for his life!",
|
||||
"Why? Well, therein lies a tale of horror! Short version: Merasmus owes $12,000 to the Japanese Mafia!",
|
||||
"It is Halloween! The time of year when the doorways between our world and the next swing wide!",
|
||||
// "That...and President's Day. That's still only two times! So you've got to pick your battles if you're Merasmus!",
|
||||
"A harvest moon hangs pendulously in the sky, mortals!",
|
||||
/* "That's right, */ "The moon's giving us the green light for harvesting! Apropos of nothing,",
|
||||
"I hope you all brought your souls! (laughter) And money. Because Merasmus has sunk a lot into this metagame.",
|
||||
"It is I, mortals, Merasmus the wizard! Welcome to my dark carnival of the macabre! Admit One...to MADNESS!",
|
||||
"(laughter) Step right up and test your measly minds on my Metagame of the Danged!",
|
||||
];
|
||||
this.add('-message', `${this.sample(intro)}`);
|
||||
},
|
||||
|
||||
onResidual(pokemon) {
|
||||
// make sure it only rolls once
|
||||
let temp = false;
|
||||
for (const p of this.sides[0].pokemon) {
|
||||
if (p.isActive && p === pokemon) temp = true;
|
||||
}
|
||||
if (!temp) return;
|
||||
const spinSet = [
|
||||
"The wheel spins!",
|
||||
"The wheel spins!",
|
||||
"I spin the Wheel of Fate!",
|
||||
"The Wheel of Fate spins!",
|
||||
"You cannot escape the Wheel of Fate!",
|
||||
"Spin, wheel! Spin!",
|
||||
"Spin the wheel, and seal your fate!",
|
||||
"Yes, spin the wheel, you fools. See what horrors are in store for you.",
|
||||
"Prepare to feel the wrath of the Wheel of Fate!",
|
||||
"Yes, spin the Wheel of Fate!",
|
||||
"Your fate... is at hand!",
|
||||
"The Wheel of Fate is a fickle mistress.",
|
||||
"The wheel spins!",
|
||||
"(laughter) Your fate is at hand.",
|
||||
"The wheel will be your undoing.",
|
||||
"Yes... Yes! The wheel!",
|
||||
"Yes... Yes! Fate!",
|
||||
"The wheel! Come on wheel, Merasmus needs this.",
|
||||
"The wheel! Come on wheel, you owe me.",
|
||||
"The wheel! Come on... Set them all on fire.",
|
||||
"The wheel! Come on... Big. Head. Come on, big head.",
|
||||
];
|
||||
const bighead = [
|
||||
"Big heads!",
|
||||
"(laughter) Big head fate! Big head fate!",
|
||||
"I curse your heads... with bigness!",
|
||||
"You cannot escape the terror... of your own giant head!",
|
||||
"Super big heads!",
|
||||
"Plague of head-biggening!",
|
||||
"Big heads! The horror! The horror!",
|
||||
];
|
||||
const smallhead = [
|
||||
"Shrunken heads!",
|
||||
"Tiny heads!",
|
||||
"Teeny, tiny heads! As foretold in prophecy.",
|
||||
"Feel the tiny eldritch terror of an itty... bitty... head!",
|
||||
"Like your tiny heads? THANK MAGIC!",
|
||||
"Teeny, tiny heads!",
|
||||
];
|
||||
const superspeed = ["Super Speed!"];
|
||||
const dance = [
|
||||
"Dance fools!",
|
||||
"Darkness falls across the land! The dancing hour is close at hand!",
|
||||
"And though you fight to stay alive, your body starts to spasmus. For no mere mortal can resist the magic of Merasmus!",
|
||||
"Dance. Dance! DANCE!",
|
||||
"Plague of dancing!",
|
||||
];
|
||||
const bleed = [
|
||||
"The bloodening!",
|
||||
"Blood-letting!",
|
||||
"Let the blood flow!",
|
||||
"Blood fate!",
|
||||
"Plague of blood!",
|
||||
];
|
||||
const fire = [
|
||||
"Firestorm!",
|
||||
"Fire!",
|
||||
"Fire, yes! Now you're all on fire!",
|
||||
"Fire! Oh, that's a good one!",
|
||||
"Burn fools, burn!",
|
||||
"BURN!",
|
||||
"Burn fools!",
|
||||
"Hellfire!",
|
||||
];
|
||||
const jarate = [
|
||||
"Jarate!",
|
||||
"Jarate! No magic is beneath Merasmus!",
|
||||
"Jarate! That is what you think it is!",
|
||||
"Rain of waste!",
|
||||
"Jarate! Merasmus is...sorry about this one.",
|
||||
"Jarate! Merasmus is...not proud...of this one.",
|
||||
"Rain of Jarate!",
|
||||
"Rain of Jarate! *sotto voce* I'm sorry about this.",
|
||||
"Jarate!",
|
||||
"Jarate! Jarate for everyone!",
|
||||
"Jarate for everyone! I'm so, so sorry!",
|
||||
];
|
||||
const ghosts = [
|
||||
"Ghosts!",
|
||||
"Let the haunting... begin!",
|
||||
"Rise, rise from your graves!",
|
||||
"Plague of ghosts!",
|
||||
];
|
||||
const lowgravity = [
|
||||
"Low gravity!",
|
||||
"Gravity displeases me, so I have removed it!",
|
||||
"Gravity displeases me, so I have removed it! ...Most of it!",
|
||||
"Gravity! I banish thee!",
|
||||
"Bid farewell to your precious gravity!",
|
||||
];
|
||||
const superjump = ["Super jumping!", "High jump!"];
|
||||
const crithit = ["It is the crit boostening!"];
|
||||
const ubercharge = [
|
||||
"You are GODS! *sotto voce* ...I don't know why I put that on the wheel...",
|
||||
"You are GODS! Magic! It is not an exact science.",
|
||||
"Invincible! INVINCIBL- Wait, wait, what?",
|
||||
"Everybody's invincible! Muhahahaha! Fools! Ahahaha... eheh... Hold on...",
|
||||
"You are GODS! Nahahaha... Enjoy your false confidence. It will be your doom!",
|
||||
"You are GODS! Aha, that may seem good, but it will be bad. In the fullness of time.",
|
||||
"You are GODS! I... meant to do that. It will go badly for you. You watch.",
|
||||
"You are GODS! Wait, no no no no no!",
|
||||
"ÜBERCHARGE!",
|
||||
];
|
||||
if (this.turn % 3 !== 0) return;
|
||||
this.add('-message', `${this.sample(spinSet)}`);
|
||||
const result = this.random(9);
|
||||
// result = 0;
|
||||
switch (result) {
|
||||
case 0:
|
||||
this.add('-message', `${this.sample(bighead)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
pokemons.removeVolatile('shrunken');
|
||||
pokemons.addVolatile('fakedynamax', pokemons);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
this.add('-message', `${this.sample(smallhead)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
pokemons.removeVolatile('fakedynamax');
|
||||
pokemons.addVolatile('shrunken', pokemons);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
this.add('-message', `${this.sample(superspeed)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
this.boost({ spe: 2 }, pokemons, pokemons, null, true);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
this.add('-message', `${this.sample(dance)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
this.add('-anim', pokemons, "Teeter Dance", pokemons);
|
||||
this.add('-anim', pokemons, "Revelation Dance", pokemons);
|
||||
this.add('-anim', pokemons, "Quiver Dance", pokemons);
|
||||
this.add('-anim', pokemons, "Victory Dance", pokemons);
|
||||
this.add('-anim', pokemons, "Dragon Dance", pokemons);
|
||||
this.add('-anim', pokemons, "Swords Dance", pokemons);
|
||||
this.add('-anim', pokemons, "Petal Dance", pokemons);
|
||||
this.add('-anim', pokemons, "Lunar Dance", pokemons);
|
||||
this.add('-anim', pokemons, "Feather Dance", pokemons);
|
||||
this.add('-anim', pokemons, "Rain Dance", pokemons);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
const temps = this.random(4);
|
||||
// const temps = 3;
|
||||
switch (temps) {
|
||||
case 0:
|
||||
this.add('-message', `${this.sample(bleed)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
pokemons.trySetStatus('psn', pokemons);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
this.add('-message', `${this.sample(fire)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
pokemons.trySetStatus('brn', pokemons);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
this.add('-message', `${this.sample(jarate)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
pokemons.addVolatile('jarate', pokemons);
|
||||
this.hint('pokemons covered in Jarate take 1.35x damage from opponent\'s attacks.');
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
this.add('-message', `${this.sample(ghosts)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
pokemons.addVolatile('jumpscare', pokemons);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
this.add('-message', `${this.sample(lowgravity)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
pokemons.addVolatile('telekinesis', pokemons);
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
this.add('-message', `${this.sample(superjump)}`);
|
||||
this.field.setWeather('superjump');
|
||||
break;
|
||||
case 7:
|
||||
this.add('-message', `${this.sample(crithit)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
pokemons.addVolatile('laserfocus', pokemons);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
this.add('-message', `${this.sample(ubercharge)}`);
|
||||
for (const pokemons of this.getAllActive()) {
|
||||
pokemons.addVolatile('ubercharge', pokemons);
|
||||
}
|
||||
this.hint('Ubercharged Pokemon take no damage from attacks.');
|
||||
}
|
||||
},
|
||||
onBasePowerPriority: 19,
|
||||
onBasePower(basePower, attacker, defender, move) {
|
||||
if ((attacker.hasType('Retaw') && move.type === 'Water') ||
|
||||
(attacker.hasType('Critcele') && move.type === 'Electric') ||
|
||||
(attacker.hasType('Pdark') && move.type === 'Dark') ||
|
||||
(attacker.hasType('Prock') && move.type === 'Rock') ||
|
||||
(attacker.hasType('ark') && move.type === 'Dark')) {
|
||||
return this.chainModify(1.5);
|
||||
}
|
||||
},
|
||||
},
|
||||
spriteviewer: {
|
||||
effectType: 'ValidatorRule',
|
||||
name: 'Sprite Viewer',
|
||||
desc: "Displays a fakemon's sprite in chat when it is switched in for the first time",
|
||||
onBegin() {
|
||||
this.add('rule', 'Sprite Viewer: Displays sprites in chat');
|
||||
},
|
||||
onSwitchIn(pokemon) {
|
||||
if (!this.effectState[pokemon.species.id]) {
|
||||
this.add('-message', `${pokemon.species.name}'s Sprite:`);
|
||||
this.add(`raw|<img src="https://raw.githubusercontent.com/scoopapa/DH2/refs/heads/main/data/mods/spookymod/sprites/front/${pokemon.species.id}.png" height="96" width="96">`);
|
||||
this.effectState[pokemon.species.id] = true;
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -1,101 +0,0 @@
|
|||
export const Scripts: ModdedBattleScriptsData = {
|
||||
gen: 9,
|
||||
// the below is all commented out due to an ability that requires checkFainted, but it seems like we can't edit checkFainted
|
||||
/* checkFainted() {
|
||||
for (const side of this.sides) {
|
||||
for (const pokemon of side.active) {
|
||||
if (pokemon.fainted) {
|
||||
pokemon.status = 'fnt' as ID;
|
||||
pokemon.switchFlag = true;
|
||||
} else if (pokemon.effectState.zombie) {
|
||||
pokemon.status = '';
|
||||
pokemon.switchFlag = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
faintMessages(lastFirst = false, forceCheck = false, checkWin = true) {
|
||||
if (this.ended) return;
|
||||
const length = this.faintQueue.length;
|
||||
if (!length) {
|
||||
if (forceCheck && this.checkWin()) return true;
|
||||
return false;
|
||||
}
|
||||
if (lastFirst) {
|
||||
this.faintQueue.unshift(this.faintQueue[this.faintQueue.length - 1]);
|
||||
this.faintQueue.pop();
|
||||
}
|
||||
let faintQueueLeft, faintData;
|
||||
while (this.faintQueue.length) {
|
||||
faintQueueLeft = this.faintQueue.length;
|
||||
faintData = this.faintQueue.shift()!;
|
||||
const pokemon: Pokemon = faintData.target;
|
||||
if (!pokemon.fainted && this.runEvent('BeforeFaint', pokemon, faintData.source, faintData.effect)) {
|
||||
this.add('faint', pokemon);
|
||||
if (
|
||||
!(pokemon.species.name === 'Trevenant' && pokemon.ability === 'revive' && !this.effectState.zombie &&
|
||||
!pokemon.transformed && this.canSwitch(pokemon.side))
|
||||
) {
|
||||
pokemon.side.pokemonLeft--;
|
||||
}
|
||||
this.runEvent('Faint', pokemon, faintData.source, faintData.effect);
|
||||
this.singleEvent('End', pokemon.getAbility(), pokemon.abilityState, pokemon);
|
||||
this.singleEvent('End', pokemon.getItem(), pokemon.itemState, pokemon);
|
||||
if (pokemon.formeRegression && !pokemon.transformed) {
|
||||
// before clearing volatiles
|
||||
pokemon.baseSpecies = this.dex.species.get(pokemon.set.species || pokemon.set.name);
|
||||
pokemon.baseAbility = toID(pokemon.set.ability);
|
||||
}
|
||||
pokemon.clearVolatile(false);
|
||||
if (!this.effectState.zombie) {
|
||||
pokemon.fainted = true;
|
||||
} else {
|
||||
pokemon.faintQueued = false;
|
||||
}
|
||||
pokemon.illusion = null;
|
||||
pokemon.isActive = false;
|
||||
pokemon.isStarted = false;
|
||||
delete pokemon.terastallized;
|
||||
if (pokemon.formeRegression) {
|
||||
// after clearing volatiles
|
||||
pokemon.details = pokemon.getUpdatedDetails();
|
||||
this.add('detailschange', pokemon, pokemon.details, '[silent]');
|
||||
pokemon.updateMaxHp();
|
||||
pokemon.formeRegression = false;
|
||||
}
|
||||
pokemon.side.faintedThisTurn = pokemon;
|
||||
if (this.faintQueue.length >= faintQueueLeft) checkWin = true;
|
||||
}
|
||||
}
|
||||
if (this.gen <= 1) {
|
||||
// in gen 1, fainting skips the rest of the turn
|
||||
// residuals don't exist in gen 1
|
||||
this.queue.clear();
|
||||
// Fainting clears accumulated Bide damage
|
||||
for (const pokemon of this.getAllActive()) {
|
||||
if (pokemon.volatiles['bide']?.damage) {
|
||||
pokemon.volatiles['bide'].damage = 0;
|
||||
this.hint("Desync Clause Mod activated!");
|
||||
this.hint("In Gen 1, Bide's accumulated damage is reset to 0 when a Pokemon faints.");
|
||||
}
|
||||
}
|
||||
} else if (this.gen <= 3 && this.gameType === 'singles') {
|
||||
// in gen 3 or earlier, fainting in singles skips to residuals
|
||||
for (const pokemon of this.getAllActive()) {
|
||||
if (this.gen <= 2) {
|
||||
// in gen 2, fainting skips moves only
|
||||
this.queue.cancelMove(pokemon);
|
||||
} else {
|
||||
// in gen 3, fainting skips all moves and switches
|
||||
this.queue.cancelAction(pokemon);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (checkWin && this.checkWin(faintData)) return true;
|
||||
if (faintData && length) {
|
||||
this.runEvent('AfterFaint', faintData.target, faintData.source, faintData.effect, length);
|
||||
}
|
||||
return false;
|
||||
},
|
||||
*/
|
||||
};
|
||||
|
|
@ -1,112 +0,0 @@
|
|||
export const TypeChart: import('../../../sim/dex-data').ModdedTypeDataTable = {
|
||||
ark: {
|
||||
damageTaken: {
|
||||
Bug: 1,
|
||||
Dark: 2,
|
||||
Dragon: 0,
|
||||
Electric: 0,
|
||||
Fairy: 1,
|
||||
Fighting: 1,
|
||||
Fire: 0,
|
||||
Flying: 0,
|
||||
Ghost: 2,
|
||||
Grass: 0,
|
||||
Ground: 0,
|
||||
Ice: 0,
|
||||
Normal: 0,
|
||||
Poison: 0,
|
||||
Psychic: 3,
|
||||
Rock: 0,
|
||||
Steel: 0,
|
||||
Water: 0,
|
||||
},
|
||||
},
|
||||
critcele: {
|
||||
damageTaken: {
|
||||
Bug: 0,
|
||||
Dark: 0,
|
||||
Dragon: 0,
|
||||
Electric: 1,
|
||||
Fairy: 0,
|
||||
Fighting: 0,
|
||||
Fire: 0,
|
||||
Flying: 1,
|
||||
Ghost: 0,
|
||||
Grass: 0,
|
||||
Ground: 2,
|
||||
Ice: 0,
|
||||
Normal: 0,
|
||||
Poison: 0,
|
||||
Psychic: 0,
|
||||
Rock: 0,
|
||||
Steel: 1,
|
||||
Water: 0,
|
||||
},
|
||||
},
|
||||
pdark: {
|
||||
damageTaken: {
|
||||
Bug: 1,
|
||||
Dark: 2,
|
||||
Dragon: 0,
|
||||
Electric: 0,
|
||||
Fairy: 1,
|
||||
Fighting: 1,
|
||||
Fire: 0,
|
||||
Flying: 0,
|
||||
Ghost: 2,
|
||||
Grass: 0,
|
||||
Ground: 0,
|
||||
Ice: 0,
|
||||
Normal: 0,
|
||||
Poison: 2,
|
||||
Psychic: 3,
|
||||
Rock: 0,
|
||||
Steel: 0,
|
||||
Water: 0,
|
||||
},
|
||||
},
|
||||
prock: {
|
||||
damageTaken: {
|
||||
Bug: 0,
|
||||
Dark: 0,
|
||||
Dragon: 0,
|
||||
Electric: 0,
|
||||
Fairy: 0,
|
||||
Fighting: 1,
|
||||
Fire: 2,
|
||||
Flying: 2,
|
||||
Ghost: 0,
|
||||
Grass: 1,
|
||||
Ground: 1,
|
||||
Ice: 0,
|
||||
Normal: 2,
|
||||
Poison: 2,
|
||||
Psychic: 2,
|
||||
Rock: 0,
|
||||
Steel: 1,
|
||||
Water: 1,
|
||||
},
|
||||
},
|
||||
retaw: {
|
||||
damageTaken: {
|
||||
Bug: 0,
|
||||
Dark: 0,
|
||||
Dragon: 0,
|
||||
Electric: 2,
|
||||
Fairy: 0,
|
||||
Fighting: 0,
|
||||
Fire: 1,
|
||||
Flying: 0,
|
||||
Ghost: 0,
|
||||
Grass: 2,
|
||||
Ground: 0,
|
||||
Ice: 1,
|
||||
Normal: 0,
|
||||
Poison: 0,
|
||||
Psychic: 0,
|
||||
Rock: 0,
|
||||
Steel: 1,
|
||||
Water: 1,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -3789,7 +3789,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
|
|||
flags: { protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1 },
|
||||
volatileStatus: 'disable',
|
||||
onTryHit(target) {
|
||||
if (!target.lastMove || target.lastMove.isZ || target.lastMove.isMax || target.lastMove.id === 'struggle') {
|
||||
if (!target.lastMove || target.lastMove.isZOrMaxPowered || target.lastMove.isMax || target.lastMove.id === 'struggle') {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
|
|
@ -3829,7 +3829,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
|
|||
},
|
||||
onBeforeMovePriority: 7,
|
||||
onBeforeMove(attacker, defender, move) {
|
||||
if (!move.isZ && move.id === this.effectState.move) {
|
||||
if (!(move.isZ && move.isZOrMaxPowered) && move.id === this.effectState.move) {
|
||||
this.add('cant', attacker, 'Disable', move);
|
||||
return false;
|
||||
}
|
||||
|
|
@ -4909,9 +4909,10 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
|
|||
let move: Move | ActiveMove | null = target.lastMove;
|
||||
if (!move || target.volatiles['dynamax']) return false;
|
||||
|
||||
// Encore only works on Max Moves if the base move is not itself a Max Move
|
||||
if (move.isMax && move.baseMove) move = this.dex.moves.get(move.baseMove);
|
||||
const moveSlot = target.getMoveData(move.id);
|
||||
if (move.isZ || move.flags['failencore'] || !moveSlot || moveSlot.pp <= 0) {
|
||||
if (move.isZ || move.isMax || move.flags['failencore'] || !moveSlot || moveSlot.pp <= 0) {
|
||||
// it failed
|
||||
return false;
|
||||
}
|
||||
|
|
@ -8630,7 +8631,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
|
|||
onRestart(target, source, effect) {
|
||||
if (effect?.name === 'Psychic Noise') return;
|
||||
|
||||
this.add('-fail', target, 'move: Heal Block'); // Succeeds to supress downstream messages
|
||||
this.add('-fail', target, 'move: Heal Block'); // Succeeds to suppress downstream messages
|
||||
if (!source.moveThisTurnResult) {
|
||||
source.moveThisTurnResult = false;
|
||||
}
|
||||
|
|
@ -9858,7 +9859,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
|
|||
},
|
||||
onFoeBeforeMovePriority: 4,
|
||||
onFoeBeforeMove(attacker, defender, move) {
|
||||
if (move.id !== 'struggle' && this.effectState.source.hasMove(move.id) && !move.isZ && !move.isMax) {
|
||||
if (move.id !== 'struggle' && this.effectState.source.hasMove(move.id) && !move.isZOrMaxPowered) {
|
||||
this.add('cant', attacker, 'move: Imprison', move);
|
||||
return false;
|
||||
}
|
||||
|
|
@ -19739,7 +19740,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
|
|||
},
|
||||
onBeforeMovePriority: 5,
|
||||
onBeforeMove(attacker, defender, move) {
|
||||
if (!move.isZ && move.category === 'Status' && move.id !== 'mefirst') {
|
||||
if (!(move.isZ && move.isZOrMaxPowered) && move.category === 'Status' && move.id !== 'mefirst') {
|
||||
this.add('cant', attacker, 'move: Taunt', move);
|
||||
return false;
|
||||
}
|
||||
|
|
@ -20161,13 +20162,13 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
|
|||
},
|
||||
onBeforeMovePriority: 6,
|
||||
onBeforeMove(pokemon, target, move) {
|
||||
if (!move.isZ && !move.isMax && move.flags['sound']) {
|
||||
if (!move.isZOrMaxPowered && move.flags['sound']) {
|
||||
this.add('cant', pokemon, 'move: Throat Chop');
|
||||
return false;
|
||||
}
|
||||
},
|
||||
onModifyMove(move, pokemon, target) {
|
||||
if (!move.isZ && !move.isMax && move.flags['sound']) {
|
||||
if (!move.isZOrMaxPowered && move.flags['sound']) {
|
||||
this.add('cant', pokemon, 'move: Throat Chop');
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
422
data/pokedex.ts
422
data/pokedex.ts
|
|
@ -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-M-Mega", "Meowstic-F-Mega"],
|
||||
formeOrder: ["Meowstic", "Meowstic-F", "Meowstic-M-Mega", "Meowstic-F-Mega"],
|
||||
},
|
||||
meowsticf: {
|
||||
num: 678,
|
||||
|
|
@ -12556,6 +12721,40 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
|
|||
evoLevel: 25,
|
||||
eggGroups: ["Field"],
|
||||
},
|
||||
meowsticmmega: {
|
||||
num: 678,
|
||||
name: "Meowstic-M-Mega",
|
||||
baseSpecies: "Meowstic",
|
||||
forme: "M-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",
|
||||
battleOnly: "Meowstic",
|
||||
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 +13950,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 +14500,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 +15425,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 +15442,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 +15556,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 +18271,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 +18531,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 +18643,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 +19000,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: "Baxcalibrite",
|
||||
},
|
||||
gimmighoul: {
|
||||
num: 999,
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -1074,5 +1074,93 @@
|
|||
"teraTypes": ["Poison"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"feraligatr": {
|
||||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Dragon Dance", "Thunder Fang", "Crunch", "Liquidation"],
|
||||
"abilities": ["Sheer Force"],
|
||||
"teraTypes": ["Dark"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"feraligatrmega": {
|
||||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Dragon Dance", "Thunder Fang", "Poison Fang", "Crunch", "Fire Fang"],
|
||||
"abilities": ["Sheer Force"],
|
||||
"teraTypes": ["Normal"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"salazzle": {
|
||||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["Magma Storm", "Malignant Chain", "Venoshock", "Psychic Noise", "Baneful Bunker"],
|
||||
"abilities": ["Corrosive Soul"],
|
||||
"teraTypes": ["Flying"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"kyogre": {
|
||||
"level": 80,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Origin Pulse", "Thunder", "Ice Beam", "Hurricane", "Tidal Surge"],
|
||||
"abilities": ["Oceanic Blessing"],
|
||||
"teraTypes": ["Water"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"azelf": {
|
||||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Rapid Spin", "Metronome", "Loot Box", "Acupressure"],
|
||||
"abilities": ["Auto Spin"],
|
||||
"teraTypes": ["Stellar"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"decidueye": {
|
||||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Sinister Arrows", "Leaf Blade", "Defog", "Roost", "Spirit Shackle", "U-turn"],
|
||||
"abilities": ["Overgrow", "Sniper"],
|
||||
"teraTypes": ["Steel", "Dark", "Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"ogerponcornerstone": {
|
||||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Sappy Seed", "Ivy Cudgel", "Synthesis", "Spiky Shield", "Thousand Waves"],
|
||||
"abilities": ["Solid Rock"],
|
||||
"teraTypes": ["Rock"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"glimmora": {
|
||||
"level": 84,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Mortal Spin", "Meteor Beam", "Power Gem", "Ice Beam", "Malignant Chain"],
|
||||
"abilities": ["Corrosion"],
|
||||
"teraTypes": ["Grass"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -232,7 +232,10 @@ export class RandomChatBatsTeams extends RandomTeams {
|
|||
if (species.id === 'ogerponhearthflame') this.incompatibleMoves(moves, movePool, 'crabhammer', 'stoneedge');
|
||||
if (species.id === 'hitmontop') this.incompatibleMoves(moves, movePool, 'bulkup', 'rapidspin');
|
||||
if (species.id === 'mesprit') this.incompatibleMoves(moves, movePool, 'psychic', 'storedpower');
|
||||
if (species.id === 'mesprit') this.incompatibleMoves(moves, movePool, 'knockoff', 'earthquake');
|
||||
if (species.id === 'primeape') this.incompatibleMoves(moves, movePool, 'knockoff', 'earthquake');
|
||||
if (species.id === 'feraligatrmega') this.incompatibleMoves(moves, movePool, 'thunderfang', 'poisonfang');
|
||||
if (species.id === 'salazzle') this.incompatibleMoves(moves, movePool, 'malignantchain', 'venoshock');
|
||||
if (species.id === 'glimmora') this.incompatibleMoves(moves, movePool, 'powergem', 'meteorbeam');
|
||||
}
|
||||
|
||||
override randomMoveset(
|
||||
|
|
@ -713,6 +716,14 @@ export class RandomChatBatsTeams extends RandomTeams {
|
|||
if (species.id === 'primeape') return 'Eviolite';
|
||||
if (species.id === 'rillaboom') return 'Heavy-Duty Boots';
|
||||
if (species.id === 'mandibuzz') return 'Thick Club';
|
||||
if (species.id === 'feraligatr') return 'Life Orb';
|
||||
if (species.id === 'salazzle') return 'Heavy-Duty Boots';
|
||||
if (species.id === 'kyogre') return 'Waterium Z';
|
||||
if (species.id === 'azelf') return 'Focus Band';
|
||||
if (species.id === 'decidueye') return this.sample(['Life Orb', 'Heavy-Duty Boots', "Leftovers"]);
|
||||
if (species.id === 'ogerponcornerstone') return 'Cornerstone Mask';
|
||||
if (species.id === 'glimmora' && moves.has('meteorbeam')) return 'Power Herb';
|
||||
if (species.id === 'glimmora') return 'Air Balloon';
|
||||
}
|
||||
|
||||
override randomSet(
|
||||
|
|
@ -997,7 +1008,7 @@ export class RandomChatBatsTeams extends RandomTeams {
|
|||
// if (potd?.exists && (pokemon.length === 1 || this.maxTeamSize === 1)) species = potd;
|
||||
|
||||
// testing code
|
||||
// if (pokemon.length === 0 || this.maxTeamSize === 1) species = this.dex.species.get('Mew');
|
||||
// if (pokemon.length === 0 || this.maxTeamSize === 1) species = this.dex.species.get('Feraligatr-Mega');
|
||||
|
||||
let set: RandomTeamsTypes.RandomSet;
|
||||
|
||||
|
|
|
|||
|
|
@ -220,6 +220,8 @@ export class RandomGen1Teams extends RandomGen2Teams {
|
|||
* Random set generation for Gen 1 Random Battles.
|
||||
*/
|
||||
override randomSet(species: string | Species): RandomTeamsTypes.RandomSet {
|
||||
const ruleTable = this.dex.formats.getRuleTable(this.format);
|
||||
|
||||
species = this.dex.species.get(species);
|
||||
if (!species.exists) species = this.dex.species.get('pikachu'); // Because Gen 1.
|
||||
|
||||
|
|
@ -275,7 +277,7 @@ export class RandomGen1Teams extends RandomGen2Teams {
|
|||
if (move.damageCallback || move.damage) return true;
|
||||
return move.category !== 'Physical';
|
||||
});
|
||||
if (noAttackStatMoves && !moves.has('mimic') && !moves.has('transform')) {
|
||||
if (noAttackStatMoves && !moves.has('mimic') && !moves.has('transform') && !ruleTable.has('forceofthefallenmod')) {
|
||||
evs.atk = 0;
|
||||
// We don't want to lower the HP DV/IV
|
||||
ivs.atk = 2;
|
||||
|
|
|
|||
|
|
@ -524,6 +524,8 @@ export class RandomGen3Teams extends RandomGen4Teams {
|
|||
teamDetails: RandomTeamsTypes.TeamDetails = {},
|
||||
isLead = false
|
||||
): RandomTeamsTypes.RandomSet {
|
||||
const ruleTable = this.dex.formats.getRuleTable(this.format);
|
||||
|
||||
species = this.dex.species.get(species);
|
||||
const forme = this.getForme(species);
|
||||
const sets = this.randomSets[species.id]["sets"];
|
||||
|
|
@ -597,7 +599,7 @@ export class RandomGen3Teams extends RandomGen4Teams {
|
|||
}
|
||||
|
||||
// Minimize confusion damage
|
||||
if (!counter.get('Physical') && !moves.has('transform')) {
|
||||
if (!counter.get('Physical') && !moves.has('transform') && !ruleTable.has('forceofthefallenmod')) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = hasHiddenPower ? (ivs.atk || 31) - 28 : 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -662,6 +662,8 @@ export class RandomGen4Teams extends RandomGen5Teams {
|
|||
teamDetails: RandomTeamsTypes.TeamDetails = {},
|
||||
isLead = false
|
||||
): RandomTeamsTypes.RandomSet {
|
||||
const ruleTable = this.dex.formats.getRuleTable(this.format);
|
||||
|
||||
species = this.dex.species.get(species);
|
||||
const forme = this.getForme(species);
|
||||
const sets = this.randomSets[species.id]["sets"];
|
||||
|
|
@ -758,7 +760,7 @@ export class RandomGen4Teams extends RandomGen5Teams {
|
|||
}
|
||||
|
||||
// Minimize confusion damage
|
||||
if (!counter.get('Physical') && !moves.has('transform')) {
|
||||
if (!counter.get('Physical') && !moves.has('transform') && !ruleTable.has('forceofthefallenmod')) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = hasHiddenPower ? (ivs.atk || 31) - 28 : 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -711,6 +711,8 @@ export class RandomGen5Teams extends RandomGen6Teams {
|
|||
teamDetails: RandomTeamsTypes.TeamDetails = {},
|
||||
isLead = false
|
||||
): RandomTeamsTypes.RandomSet {
|
||||
const ruleTable = this.dex.formats.getRuleTable(this.format);
|
||||
|
||||
species = this.dex.species.get(species);
|
||||
const forme = this.getForme(species);
|
||||
const sets = this.randomSets[species.id]["sets"];
|
||||
|
|
@ -817,7 +819,7 @@ export class RandomGen5Teams extends RandomGen6Teams {
|
|||
// Minimize confusion damage, including if Foul Play is its only physical attack
|
||||
if (
|
||||
(!counter.get('Physical') || (counter.get('Physical') <= 1 && (moves.has('foulplay') || moves.has('rapidspin')))) &&
|
||||
!moves.has('transform')
|
||||
!moves.has('transform') && !ruleTable.has('forceofthefallenmod')
|
||||
) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = hasHiddenPower ? (ivs.atk || 31) - 28 : 0;
|
||||
|
|
|
|||
|
|
@ -769,6 +769,8 @@ export class RandomGen6Teams extends RandomGen7Teams {
|
|||
teamDetails: RandomTeamsTypes.TeamDetails = {},
|
||||
isLead = false
|
||||
): RandomTeamsTypes.RandomSet {
|
||||
const ruleTable = this.dex.formats.getRuleTable(this.format);
|
||||
|
||||
species = this.dex.species.get(species);
|
||||
const forme = this.getForme(species);
|
||||
const sets = this.randomSets[species.id]["sets"];
|
||||
|
|
@ -816,7 +818,8 @@ export class RandomGen6Teams extends RandomGen7Teams {
|
|||
// Minimize confusion damage, including if Foul Play is its only physical attack
|
||||
if (
|
||||
(!counter.get('Physical') || (counter.get('Physical') <= 1 && (moves.has('foulplay') || moves.has('rapidspin')))) &&
|
||||
!moves.has('copycat') && !moves.has('transform')
|
||||
!moves.has('copycat') && !moves.has('transform') &&
|
||||
!ruleTable.has('forceofthefallenmod')
|
||||
) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = 0;
|
||||
|
|
@ -1130,7 +1133,6 @@ export class RandomGen6Teams extends RandomGen7Teams {
|
|||
if (teamData.weaknesses[type] >= 3) return this.randomFactoryTeam(side, ++depth);
|
||||
}
|
||||
}
|
||||
|
||||
return pokemon;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1025,6 +1025,8 @@ export class RandomGen7Teams extends RandomGen8Teams {
|
|||
teamDetails: RandomTeamsTypes.TeamDetails = {},
|
||||
isLead = false
|
||||
): RandomTeamsTypes.RandomSet {
|
||||
const ruleTable = this.dex.formats.getRuleTable(this.format);
|
||||
|
||||
species = this.dex.species.get(species);
|
||||
const forme = this.getForme(species);
|
||||
const sets = this.randomSets[species.id]["sets"];
|
||||
|
|
@ -1083,7 +1085,8 @@ export class RandomGen7Teams extends RandomGen8Teams {
|
|||
// Minimize confusion damage, including if Foul Play is its only physical attack
|
||||
if (
|
||||
(!counter.get('Physical') || (counter.get('Physical') <= 1 && (moves.has('foulplay') || moves.has('rapidspin')))) &&
|
||||
!moves.has('copycat') && !moves.has('transform')
|
||||
!moves.has('copycat') && !moves.has('transform') &&
|
||||
!ruleTable.has('forceofthefallenmod')
|
||||
) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = 0;
|
||||
|
|
@ -1385,7 +1388,6 @@ export class RandomGen7Teams extends RandomGen8Teams {
|
|||
if (pokemon.length < this.maxTeamSize && pokemon.length < 12) {
|
||||
throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`);
|
||||
}
|
||||
|
||||
return pokemon;
|
||||
}
|
||||
|
||||
|
|
@ -1605,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]) {
|
||||
|
|
|
|||
|
|
@ -2156,10 +2156,11 @@ export class RandomGen8Teams {
|
|||
if (species.name.endsWith('-Gmax')) return species.name.slice(0, -5);
|
||||
|
||||
// Consolidate mostly-cosmetic formes, at least for the purposes of Random Battles
|
||||
if (['Magearna', 'Polteageist', 'Zarude'].includes(species.baseSpecies)) {
|
||||
if (['Polteageist', 'Zarude'].includes(species.baseSpecies)) {
|
||||
return this.sample([species.name].concat(species.otherFormes!));
|
||||
}
|
||||
if (species.baseSpecies === 'Basculin') return 'Basculin' + this.sample(['', '-Blue-Striped']);
|
||||
if (species.baseSpecies === 'Magearna') return 'Magearna' + this.sample(['', '-Original']);
|
||||
if (species.baseSpecies === 'Keldeo' && this.gen <= 7) return 'Keldeo' + this.sample(['', '-Resolute']);
|
||||
if (species.baseSpecies === 'Pikachu' && this.dex.currentMod === 'gen8') {
|
||||
return 'Pikachu' + this.sample(
|
||||
|
|
@ -2176,6 +2177,8 @@ export class RandomGen8Teams {
|
|||
isDoubles = false,
|
||||
isNoDynamax = false
|
||||
): RandomTeamsTypes.RandomSet {
|
||||
const ruleTable = this.dex.formats.getRuleTable(this.format);
|
||||
|
||||
species = this.dex.species.get(species);
|
||||
const forme = this.getForme(species);
|
||||
const gmax = species.name.endsWith('-Gmax');
|
||||
|
|
@ -2413,7 +2416,10 @@ export class RandomGen8Teams {
|
|||
if (move.damageCallback || move.damage) return true;
|
||||
return move.category !== 'Physical' || move.id === 'bodypress';
|
||||
});
|
||||
if (noAttackStatMoves && !moves.has('transform') && (!moves.has('shellsidearm') || !counter.get('Status'))) {
|
||||
if (
|
||||
noAttackStatMoves && !moves.has('transform') && (!moves.has('shellsidearm') || !counter.get('Status')) &&
|
||||
!ruleTable.has('forceofthefallenmod')
|
||||
) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1445,10 +1445,11 @@ export class RandomTeams {
|
|||
if (species.cosmeticFormes) return this.sample([species.name].concat(species.cosmeticFormes));
|
||||
|
||||
// Consolidate mostly-cosmetic formes, at least for the purposes of Random Battles
|
||||
if (['Dudunsparce', 'Magearna', 'Maushold', 'Polteageist', 'Sinistcha', 'Zarude'].includes(species.baseSpecies)) {
|
||||
if (['Dudunsparce', 'Maushold', 'Polteageist', 'Sinistcha', 'Zarude'].includes(species.baseSpecies)) {
|
||||
return this.sample([species.name].concat(species.otherFormes!));
|
||||
}
|
||||
if (species.baseSpecies === 'Basculin') return 'Basculin' + this.sample(['', '-Blue-Striped']);
|
||||
if (species.baseSpecies === 'Magearna') return 'Magearna' + this.sample(['', '-Original']);
|
||||
if (species.baseSpecies === 'Pikachu') {
|
||||
return 'Pikachu' + this.sample(
|
||||
['', '-Original', '-Hoenn', '-Sinnoh', '-Unova', '-Kalos', '-Alola', '-Partner', '-World']
|
||||
|
|
@ -1564,7 +1565,10 @@ export class RandomTeams {
|
|||
) return false;
|
||||
return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay';
|
||||
});
|
||||
if (noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime') {
|
||||
if (
|
||||
noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime' &&
|
||||
!ruleTable.has('forceofthefallenmod')
|
||||
) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -634,7 +634,7 @@ export class RandomBabyTeams extends RandomTeams {
|
|||
return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay';
|
||||
});
|
||||
|
||||
if (noAttackStatMoves) {
|
||||
if (noAttackStatMoves && !ruleTable.has('forceofthefallenmod')) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -569,7 +569,7 @@
|
|||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Encore", "Moonblast", "Recover", "Scald", "Thunder Wave"],
|
||||
"movepool": ["Moonblast", "Recover", "Scald", "Thunder Wave"],
|
||||
"abilities": ["Multiscale", "Rough Skin"],
|
||||
"teraTypes": ["Poison", "Steel"]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -148,7 +148,10 @@ export class RandomCAPTeams extends RandomTeams {
|
|||
) return false;
|
||||
return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay';
|
||||
});
|
||||
if (noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime') {
|
||||
if (
|
||||
noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime' &&
|
||||
!ruleTable.has('forceofthefallenmod')
|
||||
) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -864,7 +864,7 @@ export class RandomFFATeams extends RandomTeams {
|
|||
return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay';
|
||||
});
|
||||
|
||||
if (noAttackStatMoves) {
|
||||
if (noAttackStatMoves && !ruleTable.has('forceofthefallenmod')) {
|
||||
evs.atk = 0;
|
||||
ivs.atk = 0;
|
||||
}
|
||||
|
|
|
|||
3301
data/random-battles/monsterhunter/random-sets.json
Normal file
3301
data/random-battles/monsterhunter/random-sets.json
Normal file
File diff suppressed because it is too large
Load Diff
|
|
@ -68,7 +68,7 @@ const NO_LEAD_POKEMON = [
|
|||
const DOUBLES_NO_LEAD_POKEMON = [
|
||||
'Basculegion', 'Houndstone', 'Iron Bundle', 'Roaring Moon', 'Zacian', 'Zamazenta',
|
||||
];
|
||||
export class RandomSPMTeams extends RandomTeams {
|
||||
export class RandomMHSTeams extends RandomTeams {
|
||||
override cullMovePool(
|
||||
types: string[],
|
||||
moves: Set<string>,
|
||||
|
|
@ -621,12 +621,31 @@ export class RandomSPMTeams extends RandomTeams {
|
|||
return this.sample(species.requiredItems);
|
||||
}
|
||||
if (role === 'AV Pivot') return 'Assault Vest';
|
||||
if (moves.has('substitute')) return 'Spellbook Magazine';
|
||||
if (moves.has('protect') && ability !== 'Speed Boost') return 'Spellbook Magazine';
|
||||
// MHS hardcodes
|
||||
if (species.id === 'yiankutku' && moves.has('facade') || species.id === 'bluekutku' && moves.has('facade')) {
|
||||
return 'Frost Orb';
|
||||
}
|
||||
if (species.id === 'xenojiiva' && ability === 'Quark Drive') return 'Booster Energy';
|
||||
if (species.id === 'odogaron' && moves.has('closecombat')) return 'White Herb';
|
||||
if (species.id === 'odogaron' && !moves.has('closecombat')) return 'Sitrus Berry';
|
||||
if (
|
||||
ability === 'Magic Guard' || ability === 'Fervent Scales' ||
|
||||
(ability === 'Sheer Force' && counter.get('sheerforce'))
|
||||
) {
|
||||
return 'Life Orb';
|
||||
}
|
||||
if (moves.has('devour') && ability === 'Unburden') return 'Liechi Berry';
|
||||
if (moves.has('virulentvolley')) return 'Loaded Dice';
|
||||
if (moves.has('magnalance') && ability === 'Reactive Core') return 'Flame Orb';
|
||||
if (moves.has('dragondance') && ability === 'Reactive Core') return 'Frost Orb';
|
||||
// other
|
||||
if (moves.has('substitute')) return 'Leftovers';
|
||||
if (moves.has('protect') && ability !== 'Speed Boost') return 'Leftovers';
|
||||
if (counter.get('skilllink') && ability !== 'Skill Link' && species.id !== 'breloom') return 'Loaded Dice';
|
||||
if (moves.has('shellsmash') && ability !== 'Weak Armor') return 'White Herb';
|
||||
if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) {
|
||||
return (types.includes('Fire') || ability === 'Toxic Boost' || ability === 'Poison Heal') ? 'Toxic Orb' : 'Flame Orb';
|
||||
}
|
||||
if (ability === 'Magic Guard' || (ability === 'Sheer Force' && counter.get('sheerforce'))) return 'Life Orb';
|
||||
if (['healingwish', 'switcheroo', 'trick'].some(m => moves.has(m))) {
|
||||
if (
|
||||
species.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&
|
||||
|
|
@ -659,9 +678,9 @@ export class RandomSPMTeams extends RandomTeams {
|
|||
}
|
||||
if (this.dex.getEffectiveness('Rock', species) >= 2) return 'Heavy-Duty Boots';
|
||||
if (species.nfe) return 'Eviolite';
|
||||
if (['Bulky Attacker', 'Bulky Support', 'Bulky Setup'].some(m => role === (m))) return 'Spellbook Magazine';
|
||||
if (['Bulky Attacker', 'Bulky Support', 'Bulky Setup'].some(m => role === (m))) return 'Leftovers';
|
||||
if (role === 'Fast Support' || role === 'Fast Bulky Setup') {
|
||||
return (counter.get('Physical') + counter.get('Special') >= 3) ? 'Life Orb' : 'Spellbook Magazine';
|
||||
return (counter.get('Physical') + counter.get('Special') >= 3) ? 'Life Orb' : 'Leftovers';
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -798,7 +817,7 @@ export class RandomSPMTeams extends RandomTeams {
|
|||
|
||||
override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./random-sets.json');
|
||||
|
||||
randomSPMTeam() {
|
||||
randomMHSTeam() {
|
||||
this.enforceNoDirectCustomBanlistChanges();
|
||||
|
||||
const seed = this.prng.getSeed();
|
||||
|
|
@ -952,4 +971,4 @@ export class RandomSPMTeams extends RandomTeams {
|
|||
}
|
||||
}
|
||||
|
||||
export default RandomSPMTeams;
|
||||
export default RandomMHSTeams;
|
||||
|
|
@ -1,511 +0,0 @@
|
|||
{
|
||||
"aegislash": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Bitter Malice", "Toxic", "Confuse Ray", "Protect", "Gyro Ball", "Night Slash", "Defog"],
|
||||
"abilities": ["Bulletproof"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Shadow Claw", "Shadow Sneak", "King's Shield", "Iron Head", "Close Combat", "Swords Dance"],
|
||||
"abilities": ["Stance Change"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"banettemega": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Shadow Claw", "Shadow Sneak", "Sucker Punch", "Pursuit", "Swords Dance", "Dark Pulse", "Grudge"],
|
||||
"abilities": ["Tough Claws"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"ceruledge": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Bitter Blade", "Spirit Shackle", "Close Combat", "Swords Dance"],
|
||||
"abilities": ["Triage"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Bitter Blade", "Poltergeist", "Close Combat", "Swords Dance", "Shadow Sneak", "Taunt"],
|
||||
"abilities": ["Sharpness"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"dofagrigus": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Hex", "Will-O-Wisp", "Strength Sap", "Knock Off", "Haze", "Body Press"],
|
||||
"abilities": ["Dummy"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Shadow Ball", "Calm Mind", "Strength Sap", "Dark Pulse"],
|
||||
"abilities": ["Dummy"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"eddyazbear": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Spirit Shackle", "Close Combat", "Sucker Punch", "Bite", "Shadow Sneak", "Pursuit", "Grudge"],
|
||||
"abilities": ["Strong Jaw"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"fluttermane": {
|
||||
"level": 90,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Astral Barrage", "Shadow Ball", "Moonblast", "Dark Pulse", "Mystical Fire", "Energy Ball", "Thunderbolt"],
|
||||
"abilities": ["Protosynthesis", "Levitate"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"fluttermane2": {
|
||||
"level": 90,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Wish", "Protect", "Moonblast", "Ominous Wind", "Night Shade", "Defog"],
|
||||
"abilities": ["Levitate"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"gourgeist": {
|
||||
"level": 90,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Moongeist Beam", "Moonlight", "Solar Beam", "Flamethrower"],
|
||||
"abilities": ["Desolate Land"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Shadow Ball", "Moonblast", "Growth", "Solar Beam", "Flamethrower"],
|
||||
"abilities": ["Desolate Land"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"gourgeistgigantic": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Bitter Malice", "Flamethrower", "Infernal Parade", "Confuse Ray", "Moonblast", "Strength Sap", "Spit Up"],
|
||||
"abilities": ["Pulp Up"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Bitter Malice", "Flamethrower", "Infernal Parade", "Moonblast", "Strength Sap", "Spit Up", "Nasty Plot"],
|
||||
"abilities": ["Pulp Up"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"gourgeistlarge": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Bitter Malice", "Flamethrower", "Infernal Parade", "Moonblast", "Strength Sap"],
|
||||
"abilities": ["Spoky"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"gourgeisttiny": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Shadow Bone", "Shadow Punch", "Power Whip", "Flare Blitz", "Play Rough", "Strength Sap", "Pain Split"],
|
||||
"abilities": ["Dazzling"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Trick-or-Treat", "Shadow Punch", "Power Whip", "Flare Blitz", "Play Rough", "Strength Sap", "Pain Split"],
|
||||
"abilities": ["Dazzling"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"houndstone": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Spirit Shackle", "Body Press", "Rapid Spin", "Cotton Guard", "Recover", "Will-O-Wisp"],
|
||||
"abilities": ["Undead"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Shadow Bone", "Crunch", "Roar", "Teleport", "Recover", "Will-O-Wisp"],
|
||||
"abilities": ["Fluffy"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Last Respects", "Play Rough", "Crunch", "Sucker Punch", "Trick", "Shadow Sneak"],
|
||||
"abilities": ["Undead"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"indeedee": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Shadow Ball", "Expanding Force", "Healing Wish", "Dazzling Gleam", "Encore", "Trick"],
|
||||
"abilities": ["Psychic Surge"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Shadow Ball", "Psychic", "Healing Wish", "Dazzling Gleam", "Encore", "Rapid Spin"],
|
||||
"abilities": ["Scrappy"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"jableye": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Bitter Malice", "Rage Fist", "Confuse Ray", "Dark Pulse", "Recover", "Strength Sap", "Thunder Wave", "Toxic", "Will-O-Wisp"],
|
||||
"abilities": ["Jankster"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Hex", "Nightmare", "Recover", "Will-O-Wisp"],
|
||||
"abilities": ["Jankster"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Bitter Malice", "Calm Mind", "Dark Pulse", "Recover", "Strength Sap", "Thunder Wave", "Toxic", "Will-O-Wisp"],
|
||||
"abilities": ["Jankster"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"jobapplication": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Spirit Shackle", "Lash Out", "Shadow Sneak", "Superpower", "Tidy Up", "Return", "Slack Off"],
|
||||
"abilities": ["No Ability"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Lash Out", "Shadow Sneak", "Astonish", "Parting Shot"],
|
||||
"abilities": ["No Ability"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"kilotic": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Shadow Ball", "Scald", "Recover", "Flip Turn", "Ominous Wind", "Confuse Ray", "Haze"],
|
||||
"abilities": ["Intimidate", "Cursed Body"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Shadow Ball", "Scald", "Recover", "Nasty Plot", "Alluring Voice"],
|
||||
"abilities": ["Flare Boost", "Intimidate", "Cursed Body"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"lanturnevil": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Spite", "Confuse Ray", "Destiny Bond", "Confuse Ray", "Plasma Fists", "Shadow Sneak", "Volt Switch", "Liquidation"],
|
||||
"abilities": ["Abyssal Light"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Swords Dance", "Phantom Force", "Destiny Bond", "Plasma Fists", "Shadow Sneak", "Volt Switch", "Liquidation"],
|
||||
"abilities": ["Abyssal Light"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"merasmus": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["BOMBINOMICON!", "Substitute", "Expanding Force", "Spirit Break", "Protect"],
|
||||
"abilities": ["Magician"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Feint Attack", "Substitute", "Curse", "Protect"],
|
||||
"abilities": ["Magician"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"nursola": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Ominous Wind", "Infernal Parade", "Giga Drain", "Stealth Rock", "Haze", "Wish", "Spiky Shield", "Will-O-Wisp"],
|
||||
"abilities": ["Purifying Salt", "Solid Rock"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Hex", "Giga Drain", "Strength Sap", "Will-O-Wisp"],
|
||||
"abilities": ["Purifying Salt", "Solid Rock"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Shadow Ball", "Giga Drain", "Calm Mind", "Strength Sap", "Will-O-Wisp"],
|
||||
"abilities": ["Purifying Salt", "Solid Rock"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"okestarspirit": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Lack Off", "Runch", "Ual Chop", "Words Dance"],
|
||||
"abilities": ["Onder Guard"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"ppiritomb": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Ominous Wind", "Stone Axe", "Salt Cure", "Will-O-Wisp", "Protect"],
|
||||
"abilities": ["PPressure", "Pinfiltrator"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Curse", "Salt Cure", "Rest", "Sleep Talk"],
|
||||
"abilities": ["PPressure", "Pinfiltrator"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Calm Mind", "Power Gem", "Rest", "Sleep Talk", "Will-O-Wisp"],
|
||||
"abilities": ["PPressure", "Pinfiltrator"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"quagsiredead": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Scald", "Earthquake", "Spirit Shackle", "Spikes", "Recover"],
|
||||
"abilities": ["Cursed Body", "Unaware"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"rotom": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Flamethrower", "Energy Ball", "Thunderbolt", "Volt Switch", "Ice Beam", "Shadow Ball", "Hurricane", "Surf", "Trick"],
|
||||
"abilities": ["Shapeshift", "Levitate"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Flamethrower", "Energy Ball", "Thunderbolt", "Volt Switch", "Ice Beam", "Shadow Ball", "Hurricane", "Surf", "Nasty Plot"],
|
||||
"abilities": ["Shapeshift"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"shedinja": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Shadow Force", "Nightmare", "Toxic", "Protect"],
|
||||
"abilities": ["Wonder Guard"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Shadow Sneak", "Shadow Claw", "Sucker Punch", "Night Slash", "Swords Dance", "Protect"],
|
||||
"abilities": ["Wonder Guard"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trevenant": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Spirit Shackle", "Shadow Sneak", "Wood Hammer", "High Jump Kick", "Sucker Punch", "Swords Dance", "Destiny Bond"],
|
||||
"abilities": ["Triage"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Spirit Shackle", "Shadow Sneak", "Horn Leech", "Drain Punch", "Sucker Punch", "Swords Dance"],
|
||||
"abilities": ["Triage"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"ursalunabloodmoon": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Setup",
|
||||
"movepool": ["Blood Moon", "Moongeist Beam", "Moonlight", "Calm Mind"],
|
||||
"abilities": ["Mind's Eye"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Blood Moon", "Spirit Shackle", "Moonlight", "Earth Power", "Calm Mind"],
|
||||
"abilities": ["Undead"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"vampharos": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Volt Switch", "Thunderbolt", "Ominous Wind", "Moongeist Beam", "Spectral Thief", "Core Enforcer", "Moonlight"],
|
||||
"abilities": ["Vamp"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Wallbreaker",
|
||||
"movepool": ["Volt Switch", "Thunderbolt", "Shadow Ball", "Infernal Parade", "Core Enforcer", "Moonblast"],
|
||||
"abilities": ["Vamp"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"wunala": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Shadow Ball", "Night Daze", "Moonblast", "Calm Mind"],
|
||||
"abilities": ["Wand Rush"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Spectral Thief", "Moonblast", "Roost", "Will-O-Wisp", "Night Daze"],
|
||||
"abilities": ["Wand Rush"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"xorygonz": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Attacker",
|
||||
"movepool": ["Shadow Ball", "Bitter Malice", "Night Shade", "Recover", "Ice Beam", "Thunderbolt", "Sludge Bomb"],
|
||||
"abilities": ["Mutual Exclusion"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Shadow Ball", "Bitter Malice", "Nasty Plot", "Recover", "Ice Beam", "Thunderbolt", "Sludge Bomb"],
|
||||
"abilities": ["Mutual Exclusion"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"yveltal": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Bulky Support",
|
||||
"movepool": ["Dragon Tail", "Oblivion Wing", "Shadow Ball", "Roost", "Defog", "U-Turn"],
|
||||
"abilities": ["Intimidate"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Bulky Attacker",
|
||||
"movepool": ["Draco Meteor", "Oblivion Wing", "Shadow Ball", "Roost", "Dark Pulse", "U-Turn"],
|
||||
"abilities": ["Dark Aura"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"zoroarkhisui": {
|
||||
"level": 100,
|
||||
"sets": [
|
||||
{
|
||||
"role": "Fast Support",
|
||||
"movepool": ["Blizzard", "Shadow Ball", "Aurora Veil", "U-Turn", "Flamethrower", "Taunt", "Will-O-Wisp"],
|
||||
"abilities": ["Snow Warning"],
|
||||
"teraTypes": ["Ghost"]
|
||||
},
|
||||
{
|
||||
"role": "Setup Sweeper",
|
||||
"movepool": ["Ice Beam", "Shadow Ball", "Nasty Plot", "Flamethrower", "Taunt", "Sludge Bomb"],
|
||||
"abilities": ["Cursed Body", "Illusion"],
|
||||
"teraTypes": ["Ghost"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -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");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,10 +55,10 @@ export function crashlogger(
|
|||
}
|
||||
}
|
||||
|
||||
console.error(`\nCRASH: ${stack}\n`);
|
||||
console.error(`\n[${Date.now()}] CRASH: ${stack}\n`);
|
||||
const out = fs.createWriteStream(logPath, { flags: 'a' });
|
||||
out.on('open', () => {
|
||||
out.write(`\n${stack}\n`);
|
||||
out.write(`\n[${Date.now()}] ${stack}\n`);
|
||||
out.end();
|
||||
}).on('error', (err: Error) => {
|
||||
console.error(`\nSUBCRASH: ${err.stack}\n`);
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ export class QueryProcessWrapper<T, U> implements ProcessWrapper {
|
|||
this.process.on('message', (message: string) => {
|
||||
if (message.startsWith('THROW\n')) {
|
||||
const error = new Error();
|
||||
error.stack = message.slice(6);
|
||||
error.stack = `[${this.process.pid}] ${message.slice(6)}`;
|
||||
throw error;
|
||||
}
|
||||
|
||||
|
|
@ -239,7 +239,7 @@ export class StreamProcessWrapper implements ProcessWrapper {
|
|||
this.process.on('message', (message: string) => {
|
||||
if (message.startsWith('THROW\n')) {
|
||||
const error = new Error();
|
||||
error.stack = message.slice(6);
|
||||
error.stack = `[${this.process.pid}] ${message.slice(6)}`;
|
||||
throw error;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -169,6 +169,7 @@ export class SQLDatabaseManager extends QueryProcessManager<DatabaseQuery, any>
|
|||
if (!this.isParentProcess) this.setupDatabase();
|
||||
}
|
||||
private onError(err: Error, query: DatabaseQuery) {
|
||||
err.message += ` [process ${process.pid}]`;
|
||||
if (this.options.onError) {
|
||||
const result = this.options.onError(err, query, false);
|
||||
if (result) return result;
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ export class Limiter {
|
|||
|
||||
function isCommon(message: string) {
|
||||
message = message.toLowerCase().replace(/\?!\., ;:/g, '');
|
||||
return ['gg', 'wp', 'ggwp', 'gl', 'hf', 'glhf', 'hello'].includes(message);
|
||||
return ['gg', 'wp', 'ggwp', 'gl', 'hf', 'glhf', 'hello', 'hi'].includes(message);
|
||||
}
|
||||
|
||||
let throttleTime: number | null = null;
|
||||
|
|
@ -92,7 +92,7 @@ export const PM = new ProcessManager.QueryProcessManager<string, Record<string,
|
|||
} catch (e: any) {
|
||||
// eslint-disable-next-line require-atomic-updates
|
||||
throttleTime = Date.now();
|
||||
if (e.message.startsWith('Request timeout') || e.statusCode === 429) {
|
||||
if (e.message.startsWith('Request timeout') || e.statusCode === 429 || e.code === 'ETIMEDOUT') {
|
||||
// request timeout: just ignore this. error on their end not ours.
|
||||
// 429: too many requests, we already freeze for 10s above so. not much more we can do
|
||||
return null;
|
||||
|
|
|
|||
|
|
@ -1586,7 +1586,7 @@ export const commands: Chat.ChatCommands = {
|
|||
`/statcalc [level] [base stat] [IVs] [nature] [EVs] [modifier] (only base stat is required) - Calculates what the actual stat of a Pokémon is with the given parameters. For example, '/statcalc lv50 100 30iv positive 252ev scarf' calculates the speed of a base 100 scarfer with HP Ice in Battle Spot, and '/statcalc uninvested 90 neutral' calculates the attack of an uninvested Crobat.`,
|
||||
`!statcalc [level] [base stat] [IVs] [nature] [EVs] [modifier] (only base stat is required) - Shows this information to everyone.`,
|
||||
`Inputting 'hp' as an argument makes it use the formula for HP. Instead of giving nature, '+' and '-' can be appended to the EV amount (e.g. 252+ev) to signify a boosting or inhibiting nature.`,
|
||||
`An actual stat can be given in place of a base stat or EVs. In this case, the minumum base stat or EVs necessary to have that real stat with the given parameters will be determined. For example, '/statcalc 502real 252+ +1' calculates the minimum base speed necessary for a positive natured fully invested scarfer to outspeed`,
|
||||
`An actual stat can be given in place of a base stat or EVs. In this case, the minimum base stat or EVs necessary to have that real stat with the given parameters will be determined. For example, '/statcalc 502real 252+ +1' calculates the minimum base speed necessary for a positive natured fully invested scarfer to outspeed`,
|
||||
],
|
||||
|
||||
/*********************************************************
|
||||
|
|
@ -1720,7 +1720,7 @@ export const commands: Chat.ChatCommands = {
|
|||
|
||||
staff(target, room, user) {
|
||||
if (!this.runBroadcast()) return;
|
||||
this.sendReplyBox(`<a href="https://www.smogon.com/sim/staff_list">Pokémon Showdown Staff List</a>`);
|
||||
this.sendReplyBox(`<a href="https://www.smogon.com/forums/posts/10715136/">Pokémon Showdown Staff List</a>`);
|
||||
},
|
||||
staffhelp: [`/staff - View the staff list.`],
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
* Chat parser
|
||||
* Pokemon Showdown - http://pokemonshowdown.com/
|
||||
*
|
||||
* Parses formate.
|
||||
* Parses format.
|
||||
*
|
||||
* @license MIT
|
||||
*/
|
||||
|
|
@ -312,7 +312,7 @@ class TextFormatter {
|
|||
}
|
||||
return true;
|
||||
case '[':
|
||||
// Link span. Several possiblilities:
|
||||
// Link span. Several possibilities:
|
||||
// [[text <uri>]] - a link with custom text
|
||||
// [[search term]] - Google search
|
||||
// [[wiki: search term]] - Wikipedia search
|
||||
|
|
|
|||
|
|
@ -544,7 +544,7 @@ export const statusfilter: Chat.StatusFilter = (status, user) => {
|
|||
// Remove false positives.
|
||||
lcStatus = lcStatus.replace('herapist', '').replace('grape', '').replace('scrape', '');
|
||||
// Check for blatant staff impersonation attempts. Ideally this could be completely generated from Config.grouplist
|
||||
// for better support for side servers, but not all ranks are staff ranks or should necessarily be filted.
|
||||
// for better support for side servers, but not all ranks are staff ranks or should necessarily be filtered.
|
||||
const impersonationRegex = /\b(?:global|room|upper|senior)?\s*(?:staff|admin|administrator|leader|owner|founder|mod|moderator|driver|voice|operator|sysop|creator)\b/gi;
|
||||
if (!user.can('lock') && impersonationRegex.test(lcStatus)) return '';
|
||||
|
||||
|
|
|
|||
|
|
@ -144,7 +144,7 @@ export const commands: Chat.ChatCommands = {
|
|||
`You can search for info in a specific mod by using <code>mod=[mod name]</code>; e.g. <code>/nds mod=gen9ssb, wonder guard</code>. All valid mod names are: <code>${dexesHelpMods}</code><br/>` +
|
||||
`You can search for info in a specific rule defined metagame by using <code>rule=[rule name]</code>; e.g. <code>/nds rule=alphabetcupmovelegality, v-create</code>. All supported rule names are: <code>${dexsearchHelpRules}</code><br/>` +
|
||||
`By default, <code>/dexsearch</code> will search only Pok\u00e9mon obtainable in the current generation. Add the parameter <code>unreleased</code> to include unreleased Pok\u00e9mon. Add the parameter <code>natdex</code> (or use the command <code>/nds</code>) to include all past Pok\u00e9mon.<br/>` +
|
||||
`Searching for a Pok\u00e9mon with both egg group and type parameters can be differentiated by adding the suffix <code>group</code> onto the egg group parameter; e.g., seaching for <code>grass, grass group</code> will show all Grass types in the Grass egg group.<br/>` +
|
||||
`Searching for a Pok\u00e9mon with both egg group and type parameters can be differentiated by adding the suffix <code>group</code> onto the egg group parameter; e.g., searching for <code>grass, grass group</code> will show all Grass types in the Grass egg group.<br/>` +
|
||||
`The parameter <code>monotype</code> will only show Pok\u00e9mon that are single-typed.<br/>` +
|
||||
`The order of the parameters does not matter.<br/>`
|
||||
);
|
||||
|
|
@ -860,7 +860,7 @@ function runDexsearch(target: string, cmd: string, message: string, isTest: bool
|
|||
if (isNotSearch) return { error: "You cannot use the negation symbol '!' with inequality tier searches." };
|
||||
target = target.substr(4).trim();
|
||||
if (!target.startsWith('>') && !target.startsWith('<')) {
|
||||
return { error: "You must use an inequality operator '>' or '<' with performing tier inequality searchs." };
|
||||
return { error: "You must use an inequality operator '>' or '<' with performing tier inequality searches." };
|
||||
}
|
||||
isTierInequalityParam = true;
|
||||
tierInequalitySearch = true;
|
||||
|
|
|
|||
|
|
@ -223,7 +223,7 @@ export class HelpTicket extends Rooms.SimpleRoomGame {
|
|||
this.ticket.claimed = user.name;
|
||||
if (!this.firstClaimTime) {
|
||||
this.firstClaimTime = Date.now();
|
||||
// I'd use the player list for this, but it dosen't track DCs so were checking the userlist
|
||||
// I'd use the player list for this, but it doesn't track DCs so were checking the userlist
|
||||
// Non-staff users in the room currently (+ the ticket creator even if they are staff)
|
||||
const users = Object.entries(this.room.users).filter(
|
||||
u => !((u[1].isStaff && u[1].id !== this.ticket.userid) || !u[1].named)
|
||||
|
|
@ -458,7 +458,7 @@ export class HelpTicket extends Rooms.SimpleRoomGame {
|
|||
this.room.destroy();
|
||||
}
|
||||
|
||||
// Modified version of RoomGame.destory
|
||||
// Modified version of RoomGame.destroy
|
||||
override destroy() {
|
||||
if (tickets[this.ticket.userid] && this.ticket.open) {
|
||||
// Ticket was not deleted - deleted tickets already have this done to them - and was not closed.
|
||||
|
|
|
|||
|
|
@ -3489,7 +3489,7 @@ export const commands: Chat.ChatCommands = {
|
|||
`/mafia sub in - Request to sub into the game, or cancel a request to sub out.`,
|
||||
`/mafia sub out - Request to sub out of the game, or cancel a request to sub in.`,
|
||||
`/mafia sub next, [player] - Forcibly sub [player] out of the game. Requires host % @ # ~`,
|
||||
`/mafia sub remove, [user] - Remove [user] from the sublist. Requres host % @ # ~`,
|
||||
`/mafia sub remove, [user] - Remove [user] from the sublist. Requires host % @ # ~`,
|
||||
`/mafia sub unrequest, [player] - Remove's a player's request to sub out of the game. Requires host % @ # ~`,
|
||||
`/mafia sub [player], [user] - Forcibly sub [player] for [user]. Requires host % @ # ~`,
|
||||
],
|
||||
|
|
@ -4353,16 +4353,16 @@ export const commands: Chat.ChatCommands = {
|
|||
}
|
||||
},
|
||||
listdatahelp: [
|
||||
`/mafia roles [parameter, paramater, ...] - Views all Mafia roles. Parameters: theme that must include role, text included in role data.`,
|
||||
`/mafia themes [parameter, paramater, ...] - Views all Mafia themes. Parameters: roles in theme, players(< | <= | = | => | >)[x] for playercounts, text included in theme data.`,
|
||||
`/mafia alignments [parameter, paramater, ...] - Views all Mafia alignments. Parameters: text included in alignment data.`,
|
||||
`/mafia ideas [parameter, paramater, ...] - Views all Mafia IDEAs. Parameters: roles in IDEA, text included in IDEA data.`,
|
||||
`/mafia terms [parameter, paramater, ...] - Views all Mafia terms. Parameters: text included in term data.`,
|
||||
`/mafia randomrole [parameter, paramater, ...] - View a random Mafia role. Parameters: number of roles to be randomly generated, theme that must include role, text included in role data.`,
|
||||
`/mafia randomtheme [parameter, paramater, ...] - View a random Mafia theme. Parameters: number of themes to be randomly generated, roles in theme, players(< | <= | = | => | >)[x] for playercounts, text included in theme data.`,
|
||||
`/mafia randomalignment [parameter, paramater, ...] - View a random Mafia alignment. Parameters: number of alignments to be randomly generated, text included in alignment data.`,
|
||||
`/mafia randomidea [parameter, paramater, ...] - View a random Mafia IDEA. Parameters: number of IDEAs to be randomly generated, roles in IDEA, text included in IDEA data.`,
|
||||
`/mafia randomterm [parameter, paramater, ...] - View a random Mafia term. Parameters: number of terms to be randomly generated, text included in term data.`,
|
||||
`/mafia roles [parameter, parameter, ...] - Views all Mafia roles. Parameters: theme that must include role, text included in role data.`,
|
||||
`/mafia themes [parameter, parameter, ...] - Views all Mafia themes. Parameters: roles in theme, players(< | <= | = | => | >)[x] for playercounts, text included in theme data.`,
|
||||
`/mafia alignments [parameter, parameter, ...] - Views all Mafia alignments. Parameters: text included in alignment data.`,
|
||||
`/mafia ideas [parameter, parameter, ...] - Views all Mafia IDEAs. Parameters: roles in IDEA, text included in IDEA data.`,
|
||||
`/mafia terms [parameter, parameter, ...] - Views all Mafia terms. Parameters: text included in term data.`,
|
||||
`/mafia randomrole [parameter, parameter, ...] - View a random Mafia role. Parameters: number of roles to be randomly generated, theme that must include role, text included in role data.`,
|
||||
`/mafia randomtheme [parameter, parameter, ...] - View a random Mafia theme. Parameters: number of themes to be randomly generated, roles in theme, players(< | <= | = | => | >)[x] for playercounts, text included in theme data.`,
|
||||
`/mafia randomalignment [parameter, parameter, ...] - View a random Mafia alignment. Parameters: number of alignments to be randomly generated, text included in alignment data.`,
|
||||
`/mafia randomidea [parameter, parameter, ...] - View a random Mafia IDEA. Parameters: number of IDEAs to be randomly generated, roles in IDEA, text included in IDEA data.`,
|
||||
`/mafia randomterm [parameter, parameter, ...] - View a random Mafia term. Parameters: number of terms to be randomly generated, text included in term data.`,
|
||||
],
|
||||
|
||||
disable(target, room, user) {
|
||||
|
|
@ -4500,16 +4500,16 @@ export const commands: Chat.ChatCommands = {
|
|||
buf += [
|
||||
`<br/><strong>Commands to search Mafia data</strong>:<br/>`,
|
||||
`/mafia dt [data] - Views Mafia data.`,
|
||||
`/mafia roles [parameter, paramater, ...] - Views all Mafia roles. Parameters: theme that must include role, text included in role data.`,
|
||||
`/mafia themes [parameter, paramater, ...] - Views all Mafia themes. Parameters: roles in theme, players(< | <= | = | => | >)[x] for playercounts, text included in theme data.`,
|
||||
`/mafia alignments [parameter, paramater, ...] - Views all Mafia alignments. Parameters: text included in alignment data.`,
|
||||
`/mafia ideas [parameter, paramater, ...] - Views all Mafia IDEAs. Parameters: roles in IDEA, text included in IDEA data.`,
|
||||
`/mafia terms [parameter, paramater, ...] - Views all Mafia terms. Parameters: text included in term data.`,
|
||||
`/mafia randomrole [parameter, paramater, ...] - View a random Mafia role. Parameters: number of roles to be randomly generated, theme that must include role, text included in role data.`,
|
||||
`/mafia randomtheme [parameter, paramater, ...] - View a random Mafia theme. Parameters: number of themes to be randomly generated, roles in theme, players(< | <= | = | => | >)[x] for playercounts, text included in theme data.`,
|
||||
`/mafia randomalignment [parameter, paramater, ...] - View a random Mafia alignment. Parameters: number of alignments to be randomly generated, text included in alignment data.`,
|
||||
`/mafia randomidea [parameter, paramater, ...] - View a random Mafia IDEA. Parameters: number of IDEAs to be randomly generated, roles in IDEA, text included in IDEA data.`,
|
||||
`/mafia randomterm [parameter, paramater, ...] - View a random Mafia term. Parameters: number of terms to be randomly generated, text included in term data.`,
|
||||
`/mafia roles [parameter, parameter, ...] - Views all Mafia roles. Parameters: theme that must include role, text included in role data.`,
|
||||
`/mafia themes [parameter, parameter, ...] - Views all Mafia themes. Parameters: roles in theme, players(< | <= | = | => | >)[x] for playercounts, text included in theme data.`,
|
||||
`/mafia alignments [parameter, parameter, ...] - Views all Mafia alignments. Parameters: text included in alignment data.`,
|
||||
`/mafia ideas [parameter, parameter, ...] - Views all Mafia IDEAs. Parameters: roles in IDEA, text included in IDEA data.`,
|
||||
`/mafia terms [parameter, parameter, ...] - Views all Mafia terms. Parameters: text included in term data.`,
|
||||
`/mafia randomrole [parameter, parameter, ...] - View a random Mafia role. Parameters: number of roles to be randomly generated, theme that must include role, text included in role data.`,
|
||||
`/mafia randomtheme [parameter, parameter, ...] - View a random Mafia theme. Parameters: number of themes to be randomly generated, roles in theme, players(< | <= | = | => | >)[x] for playercounts, text included in theme data.`,
|
||||
`/mafia randomalignment [parameter, parameter, ...] - View a random Mafia alignment. Parameters: number of alignments to be randomly generated, text included in alignment data.`,
|
||||
`/mafia randomidea [parameter, parameter, ...] - View a random Mafia IDEA. Parameters: number of IDEAs to be randomly generated, roles in IDEA, text included in IDEA data.`,
|
||||
`/mafia randomterm [parameter, parameter, ...] - View a random Mafia term. Parameters: number of terms to be randomly generated, text included in term data.`,
|
||||
].join('<br/>');
|
||||
buf += `</details>`;
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ interface StoneDeltas {
|
|||
weighthg: number;
|
||||
heightm: number;
|
||||
type?: string;
|
||||
primaryTypeChange?: boolean;
|
||||
}
|
||||
|
||||
type TierShiftTiers = 'UU' | 'RUBL' | 'RU' | 'NUBL' | 'NU' | 'PUBL' | 'PU' | 'ZUBL' | 'ZU' | 'NFE' | 'LC';
|
||||
|
|
@ -130,8 +131,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;
|
||||
}
|
||||
|
|
@ -153,10 +154,13 @@ export const commands: Chat.ChatCommands = {
|
|||
deltas.type = dex.gen === 8 ? 'mono' : baseSpecies.types[0];
|
||||
} else if (megaSpecies.types[1] !== baseSpecies.types[1]) {
|
||||
deltas.type = megaSpecies.types[1];
|
||||
} else if (megaSpecies.types[0] !== baseSpecies.types[0]) {
|
||||
deltas.type = megaSpecies.types[0];
|
||||
deltas.primaryTypeChange = true;
|
||||
}
|
||||
const mixedSpecies = Utils.deepClone(species);
|
||||
mixedSpecies.abilities = Utils.deepClone(megaSpecies.abilities);
|
||||
if (['Arceus', 'Silvally'].includes(baseSpecies.name)) {
|
||||
if (['Arceus', 'Silvally'].includes(baseSpecies.name) || deltas.primaryTypeChange) {
|
||||
const secondType = mixedSpecies.types[1];
|
||||
mixedSpecies.types = [deltas.type];
|
||||
if (secondType && secondType !== deltas.type) mixedSpecies.types.push(secondType);
|
||||
|
|
@ -230,21 +234,21 @@ export const commands: Chat.ChatCommands = {
|
|||
const stones = [];
|
||||
if (!stone) {
|
||||
const formeIdRegex = new RegExp(
|
||||
`(?:mega[xy]?|primal|origin|crowned|epilogue|cornerstone|wellspring|hearthflame|douse|shock|chill|burn|${dex.types.all().map(x => x.id).filter(x => x !== 'normal').join('|')})$`
|
||||
`(?:mega[xyz]?|primal|origin|crowned|epilogue|cornerstone|wellspring|hearthflame|douse|shock|chill|burn|${dex.types.all().map(x => x.id).filter(x => x !== 'normal').join('|')})$`
|
||||
);
|
||||
const species = dex.species.get(targetid.replace(formeIdRegex, ''));
|
||||
if (!species.exists) throw new Chat.ErrorMessage(`Error: Mega Stone not found.`);
|
||||
if (!species.otherFormes) throw new Chat.ErrorMessage(`Error: Mega Evolution not found.`);
|
||||
for (const poke of species.otherFormes) {
|
||||
const formeRegex = new RegExp(
|
||||
`(?:-Douse|-Shock|-Chill|-Burn|-Cornerstone|-Wellspring|-Hearthflame|-Crowned|-Epilogue|-Origin|-Primal|-Mega(?:-[XY])?|${dex.types.names().filter(x => x !== 'Normal').map(x => '-' + x).join('|')})$`
|
||||
`(?:-Douse|-Shock|-Chill|-Burn|-Cornerstone|-Wellspring|-Hearthflame|-Crowned|-Epilogue|-Origin|-Primal|-Mega(?:-[XYZ])?|${dex.types.names().filter(x => x !== 'Normal').map(x => '-' + x).join('|')})$`
|
||||
);
|
||||
if (!formeRegex.test(poke)) {
|
||||
continue;
|
||||
}
|
||||
const megaPoke = dex.species.get(poke);
|
||||
const flag = megaPoke.requiredMove === 'Dragon Ascent' ? megaPoke.requiredMove : megaPoke.requiredItem;
|
||||
if (/mega[xy]$/.test(targetid) && toID(megaPoke.name) !== toID(dex.species.get(targetid))) continue;
|
||||
if (/mega[xyz]$/.test(targetid) && toID(megaPoke.name) !== toID(dex.species.get(targetid))) continue;
|
||||
if (!flag) continue;
|
||||
stones.push(getMegaStone(flag, sep[1]));
|
||||
}
|
||||
|
|
@ -278,8 +282,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;
|
||||
}
|
||||
|
|
@ -301,6 +305,8 @@ export const commands: Chat.ChatCommands = {
|
|||
deltas.type = dex.gen === 8 ? 'mono' : megaSpecies.types[0];
|
||||
} else if (megaSpecies.types[1] !== baseSpecies.types[1]) {
|
||||
deltas.type = megaSpecies.types[1];
|
||||
} else if (megaSpecies.types[0] !== baseSpecies.types[0]) {
|
||||
deltas.type = megaSpecies.types[0];
|
||||
}
|
||||
const details = {
|
||||
Gen: aStone.gen,
|
||||
|
|
|
|||
|
|
@ -690,7 +690,7 @@ export const pages: Chat.PageTable = {
|
|||
return buf;
|
||||
}
|
||||
for (const [i, poll] of queue.entries()) {
|
||||
const number = i + 1; // for translation convienence
|
||||
const number = i + 1; // for translation convenience
|
||||
const button = (
|
||||
`<strong>${this.tr`#${number} in queue`} </strong>` +
|
||||
`<button class="button" name="send" value="/msgroom ${room.roomid},/poll deletequeue ${i + 1}">` +
|
||||
|
|
|
|||
|
|
@ -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} />}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ export const commands: Chat.ChatCommands = {
|
|||
|
||||
target = target.trim();
|
||||
const input = this.filter(target);
|
||||
if (target !== input) throw new Chat.ErrorMessage("You are not allowed to use fitered words in roomfaq entries.");
|
||||
if (target !== input) throw new Chat.ErrorMessage("You are not allowed to use filtered words in roomfaq entries.");
|
||||
let [topic, ...rest] = input.split(',');
|
||||
|
||||
topic = toID(topic);
|
||||
|
|
|
|||
|
|
@ -1520,7 +1520,7 @@ const ScavengerCommands: Chat.ChatCommands = {
|
|||
|
||||
const minutes = (toID(target) === 'off' ? 0 : parseFloat(target));
|
||||
if (isNaN(minutes) || minutes < 0 || (minutes * 60 * 1000) > Chat.MAX_TIMEOUT_DURATION) {
|
||||
throw new Chat.ErrorMessage(`You must specify a timer length that is a postive number.`);
|
||||
throw new Chat.ErrorMessage(`You must specify a timer length that is a positive number.`);
|
||||
}
|
||||
|
||||
const result = game.setTimer(minutes);
|
||||
|
|
@ -2057,7 +2057,7 @@ const ScavengerCommands: Chat.ChatCommands = {
|
|||
if (!RATED_TYPES.includes(gameType)) throw new Chat.ErrorMessage(`You cannot set blitz points for ${gameType} hunts.`);
|
||||
|
||||
if (isNaN(blitzPoints) || blitzPoints < 0 || blitzPoints > 1000) {
|
||||
throw new Chat.ErrorMessage("The points value awarded for blitz must be an integer bewteen 0 and 1000.");
|
||||
throw new Chat.ErrorMessage("The points value awarded for blitz must be an integer between 0 and 1000.");
|
||||
}
|
||||
if (!room.settings.scavSettings.blitzPoints) room.settings.scavSettings.blitzPoints = {};
|
||||
room.settings.scavSettings.blitzPoints[gameType] = blitzPoints;
|
||||
|
|
@ -2092,7 +2092,7 @@ const ScavengerCommands: Chat.ChatCommands = {
|
|||
return this.sendReply(`The points rewarded for hosting a regular hunt is ${pointSetting}.`);
|
||||
}
|
||||
|
||||
this.checkCan('declare', null, room); // perms for editting
|
||||
this.checkCan('declare', null, room); // perms for editing
|
||||
const points = parseInt(target);
|
||||
if (isNaN(points)) throw new Chat.ErrorMessage(`${target} is not a valid number of points.`);
|
||||
|
||||
|
|
@ -2133,7 +2133,7 @@ const ScavengerCommands: Chat.ChatCommands = {
|
|||
return this.sendReplyBox(`The points rewarded for winning hunts is:<br />${points.join('<br />')}`);
|
||||
}
|
||||
|
||||
this.checkCan('declare', null, room); // perms for editting
|
||||
this.checkCan('declare', null, room); // perms for editing
|
||||
|
||||
let [type, ...pointsSet] = target.split(',');
|
||||
type = toID(type) as GameTypes;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ import { FS, Utils } from '../../lib';
|
|||
import { YouTube } from './youtube';
|
||||
|
||||
const MINUTE = 60 * 1000;
|
||||
const DAY = 24 * 60 * MINUTE;
|
||||
const WEEK = DAY * 7;
|
||||
const PRENOM_BUMP_TIME = 2 * 60 * MINUTE;
|
||||
|
||||
const PRENOMS_FILE = 'config/chat-plugins/otd-prenoms.json';
|
||||
|
|
@ -63,6 +65,7 @@ class OtdHandler {
|
|||
removedNominations: Map<string, AnyObject>;
|
||||
voting: boolean;
|
||||
timer: NodeJS.Timeout | null;
|
||||
autoStartTimer: NodeJS.Timeout | null;
|
||||
keys: string[];
|
||||
keyLabels: string[];
|
||||
timeLabel: string;
|
||||
|
|
@ -81,6 +84,7 @@ class OtdHandler {
|
|||
|
||||
this.voting = false;
|
||||
this.timer = null;
|
||||
this.autoStartTimer = null;
|
||||
|
||||
this.keys = settings.keys;
|
||||
this.keyLabels = settings.keyLabels;
|
||||
|
|
@ -105,6 +109,7 @@ class OtdHandler {
|
|||
needsSave = true;
|
||||
}
|
||||
}
|
||||
if (room.settings.autoStartOtd) handler.toggleAutoStartTimer(true);
|
||||
if (needsSave) handler.save();
|
||||
return handler;
|
||||
}
|
||||
|
|
@ -142,6 +147,22 @@ class OtdHandler {
|
|||
}
|
||||
}
|
||||
|
||||
toggleAutoStartTimer(on: boolean) {
|
||||
if (on && !this.autoStartTimer) {
|
||||
this.autoStartTimer = setInterval(() => {
|
||||
if (this.voting) {
|
||||
// in case the 20 min auto-end timer didnt end the nomm process due to 0 nomms
|
||||
this.rollWinner();
|
||||
}
|
||||
this.startVote();
|
||||
this.room.modlog({ action: `${this.id.toUpperCase()} START` });
|
||||
}, this.timeLabel === 'week' ? WEEK : DAY);
|
||||
} else if (!on && this.autoStartTimer) {
|
||||
clearInterval(this.autoStartTimer);
|
||||
this.autoStartTimer = null;
|
||||
}
|
||||
}
|
||||
|
||||
startVote() {
|
||||
this.voting = true;
|
||||
this.timer = setTimeout(() => this.rollWinner(), 20 * MINUTE);
|
||||
|
|
@ -740,6 +761,35 @@ export const otdCommands: Chat.ChatCommands = {
|
|||
`Requires: % @ # ~`,
|
||||
],
|
||||
|
||||
toggleautostart(target, room, user) {
|
||||
const otd = selectHandler(this.message);
|
||||
room = this.requireRoom(otd.room.roomid);
|
||||
|
||||
this.checkCan('declare', null, room);
|
||||
let logMessage = '';
|
||||
const handler = selectHandler(this.message);
|
||||
|
||||
if (this.meansYes(target)) {
|
||||
if (room.settings.autoStartOtd) {
|
||||
throw new Chat.ErrorMessage(`This -OTD is already set to automatically start.`);
|
||||
}
|
||||
room.settings.autoStartOtd = true;
|
||||
handler.toggleAutoStartTimer(true);
|
||||
|
||||
logMessage = 'start automatically';
|
||||
} else {
|
||||
if (!room.settings.autoStartOtd) {
|
||||
throw new Chat.ErrorMessage(`This -OTD is not set to automatically start.`);
|
||||
}
|
||||
room.settings.autoStartOtd = false;
|
||||
logMessage = 'not start automatically';
|
||||
handler.toggleAutoStartTimer(false);
|
||||
}
|
||||
this.privateModAction(`${user.name} set the ${otd.name} nomination to ${logMessage}`);
|
||||
this.modlog(`OTD TOGGLEAUTOSTART`, null, logMessage);
|
||||
room.saveSettings();
|
||||
},
|
||||
|
||||
toggleupdate(target, room, user) {
|
||||
const otd = selectHandler(this.message);
|
||||
room = this.requireRoom(otd.room.roomid);
|
||||
|
|
@ -908,6 +958,7 @@ const otdHelp = [
|
|||
`- /-otd set property: value[, property: value] - Set the winner, quote, song, link or image for the current Thing of the Day. Requires: % @ # ~`,
|
||||
`- /-otd winners - Displays a list of previous things of the day.`,
|
||||
`- /-otd toggleupdate [on|off] - Changes the Thing of the Day to display on nomination ([on] to update, [off] to turn off updates). Requires: # ~`,
|
||||
`- /-otd toggleautostart [on|off] - Enables or disables automatic start for Thing of the Day ([on] enables autostart, [off] disables it). Requires: # ~`,
|
||||
];
|
||||
|
||||
for (const otd in otdData) {
|
||||
|
|
@ -929,6 +980,15 @@ for (const [k, v] of otds) {
|
|||
commands[`${k}help`] = otdHelp;
|
||||
}
|
||||
|
||||
const getKeyByRoomId = (id: string): string | undefined => {
|
||||
for (const [key, handler] of otds.entries()) {
|
||||
if (handler.room.roomid === id) {
|
||||
return key;
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
};
|
||||
|
||||
export const handlers: Chat.Handlers = {
|
||||
onRenameRoom(oldID, newID, room) {
|
||||
for (const otd in otdData) {
|
||||
|
|
@ -950,3 +1010,14 @@ export const punishmentfilter: Chat.PunishmentFilter = (user, punishment) => {
|
|||
handler.removeNomination(user);
|
||||
}
|
||||
};
|
||||
|
||||
export const roomSettings: Chat.SettingsHandler[] = [
|
||||
(room, user) => ({
|
||||
label: `Autostart -OTD`,
|
||||
permission: "editroom",
|
||||
options: getKeyByRoomId(room.roomid) ? [
|
||||
['off', !room.settings.autoStartOtd || `${getKeyByRoomId(room.roomid)} toggleautostart off`],
|
||||
['on', room.settings.autoStartOtd || `${getKeyByRoomId(room.roomid)} toggleautostart on`],
|
||||
] : [['disabled', true]],
|
||||
}),
|
||||
];
|
||||
|
|
|
|||
|
|
@ -871,7 +871,7 @@ export const commands: Chat.ChatCommands = {
|
|||
game.suppressMessages = state;
|
||||
|
||||
this.addModAction(`${user.name} has turned ${state ? 'on' : 'off'} suppression of UNO game messages.`);
|
||||
this.modlog('UNO SUPRESS', null, (state ? 'ON' : 'OFF'));
|
||||
this.modlog('UNO SUPPRESS', null, (state ? 'ON' : 'OFF'));
|
||||
},
|
||||
|
||||
spectate(target, room, user) {
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@ export const pages: Chat.PageTable = {
|
|||
const sorted: { [k: string]: number } = {};
|
||||
for (const curUser of Users.users.values()) {
|
||||
for (const term of nameList) {
|
||||
if (curUser.id.includes(term)) {
|
||||
if (curUser.id.includes(term) && !curUser.id.startsWith('guest')) {
|
||||
if (!(term in sorted)) sorted[term] = 0;
|
||||
sorted[term]++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@ export const readyPromise = cleanupStale().then(() => {
|
|||
|
||||
process.on('unhandledRejection', err => {
|
||||
// TODO:
|
||||
// - Compability with https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode
|
||||
// - Compatibility with https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode
|
||||
// - Crashlogger API for reporting rejections vs exceptions
|
||||
Monitor.crashlog(err as any, 'A main process Promise');
|
||||
});
|
||||
|
|
|
|||
|
|
@ -125,6 +125,8 @@ export interface RoomSettings {
|
|||
minorActivityQueue?: MinorActivityData[];
|
||||
repeats?: RepeatedPhrase[];
|
||||
topics?: string[];
|
||||
// auto start thing of the day
|
||||
autoStartOtd?: boolean;
|
||||
autoModchat?: {
|
||||
rank: GroupSymbol,
|
||||
time: number,
|
||||
|
|
@ -1248,7 +1250,7 @@ export class GlobalRoomState {
|
|||
if (settings.isPrivate === true) settings.isPrivate = 'hidden';
|
||||
}
|
||||
|
||||
// We're okay with assinging type `ID` to `RoomID` here
|
||||
// We're okay with assigning type `ID` to `RoomID` here
|
||||
// because the hyphens in chatrooms don't have any special
|
||||
// meaning, unlike in helptickets, groupchats, battles etc
|
||||
// where they are used for shared modlogs and the like
|
||||
|
|
@ -1814,7 +1816,7 @@ export class GlobalRoomState {
|
|||
} else {
|
||||
this.notifyRooms(
|
||||
notifyPlaces,
|
||||
`|html|<div class="broadcsat-red"><b>Automatic server lockdown kill canceled.</b><br /><br />In the last final seconds, the automatic lockdown was manually disabled.</div>`
|
||||
`|html|<div class="broadcast-red"><b>Automatic server lockdown kill canceled.</b><br /><br />In the last final seconds, the automatic lockdown was manually disabled.</div>`
|
||||
);
|
||||
}
|
||||
}, 10 * 1000);
|
||||
|
|
@ -2074,7 +2076,7 @@ export class GameRoom extends BasicRoom {
|
|||
battle.replaySaved = true;
|
||||
}
|
||||
|
||||
// If we have a direct connetion to a Replays database, just upload the replay
|
||||
// If we have a direct connection to a Replays database, just upload the replay
|
||||
// directly.
|
||||
|
||||
if (Replays.db) {
|
||||
|
|
@ -2085,7 +2087,7 @@ export class GameRoom extends BasicRoom {
|
|||
log,
|
||||
players: battle.players.map(p => p.name),
|
||||
format: format.name,
|
||||
rating: rating || null,
|
||||
rating: Math.round(rating || 0) || null,
|
||||
private: hidden,
|
||||
password,
|
||||
inputlog: battle.inputLog?.join('\n') || null,
|
||||
|
|
|
|||
|
|
@ -610,7 +610,7 @@ export class User extends Chat.MessageContext {
|
|||
* Permission check for using the dev console
|
||||
*
|
||||
* The `console` permission is incredibly powerful because it allows the
|
||||
* execution of abitrary shell commands on the local computer As such, it
|
||||
* execution of arbitrary shell commands on the local computer As such, it
|
||||
* can only be used from a specified whitelist of IPs and userids. A
|
||||
* special permission check function is required to carry out this check
|
||||
* because we need to know which socket the client is connected from in
|
||||
|
|
|
|||
|
|
@ -1873,10 +1873,16 @@ 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.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;
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user