Merge branch 'master' into modify-move-phase-2

This commit is contained in:
André Bastos Dias 2026-03-30 13:42:46 +01:00 committed by GitHub
commit a1be9817c3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
50 changed files with 434 additions and 1181 deletions

View File

@ -1033,6 +1033,28 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
rating: 3.5,
num: 88,
},
dragonize: {
isNonstandard: "Future",
onModifyTypePriority: -1,
onModifyType(move, pokemon) {
const noModifyType = [
'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball',
];
if (move.type === 'Normal' && (!noModifyType.includes(move.id) || this.activeMove?.isMax) &&
!(move.isZ && move.category !== 'Status') && !(move.name === 'Tera Blast' && pokemon.terastallized)) {
move.type = 'Dragon';
move.typeChangerBoosted = this.effect;
}
},
onBasePowerPriority: 23,
onBasePower(basePower, pokemon, target, move) {
if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]);
},
flags: {},
name: "Dragonize",
rating: 4,
num: 312, // TODO confirm
},
dragonsmaw: {
onModifyAtkPriority: 5,
onModifyAtk(atk, attacker, defender, move) {
@ -2497,6 +2519,14 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
rating: 3,
num: 178,
},
megasol: {
isNonstandard: "Future",
flags: {},
name: "Mega Sol",
rating: 3,
num: 311, // TODO confirm
// Partially implemented in Pokemon.effectiveWeather() in sim/pokemon.ts
},
merciless: {
onModifyCritRatio(critRatio, source, target) {
if (target && ['psn', 'tox'].includes(target.status)) return 5;
@ -4114,8 +4144,8 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
num: 61,
},
sheerforce: {
onModifyMove(move) {
if (move.secondaries) {
onModifyMove(move, pokemon) {
if (move.secondaries && !move.hasSheerForceBoost) {
delete move.secondaries;
// Technically not a secondary effect, but it is negated
delete move.self;
@ -4126,7 +4156,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
},
onBasePowerPriority: 21,
onBasePower(basePower, pokemon, target, move) {
if (move.hasSheerForce) return this.chainModify([5325, 4096]);
if (move.hasSheerForce || move.hasSheerForceBoost) return this.chainModify([5325, 4096]);
},
onModifyMovePhase2(move, source, target) {
((this.effect as any).onModifyMove as (m: ActiveMove, p: Pokemon, p2: Pokemon) => void)

View File

@ -6162,6 +6162,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
isNonstandard: "CAP",
tier: "CAP",
},
flox: {
isNonstandard: "CAP",
tier: "CAP LC",
},
shox: {
isNonstandard: "CAP",
tier: "CAP",

View File

@ -100092,6 +100092,67 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = {
{generation: 9, level: 50, shiny: true, abilities: ["armortail"], moves: ["celebrate", "dragontail", "sludgebomb", "dragondance"], pokeball: "cherishball"},
],
},
flox: {
learnset: {
blizzard: ["9M"],
bodyslam: ["9M"],
bulldoze: ["9M"],
charge: ["9M", "9L15"],
chargebeam: ["9M"],
charm: ["9M", "9L15"],
dig: ["9M"],
disarmingvoice: ["9M"],
discharge: ["9L40"],
doubleedge: ["9M", "9L50"],
eerieimpulse: ["9M"],
electricterrain: ["9M"],
electroball: ["9M"],
electroweb: ["9M"],
endeavor: ["9M", "9E"],
endure: ["9M"],
facade: ["9M"],
glare: ["9E"],
growl: ["9L1"],
headbutt: ["9L20"],
helpinghand: ["9M"],
hypervoice: ["9M"],
icebeam: ["9M"],
icywind: ["9M"],
ironhead: ["9M"],
milkdrink: ["9L30"],
mudshot: ["9M"],
mudslap: ["9M"],
nuzzle: ["9E"],
playrough: ["9M"],
protect: ["9M"],
raindance: ["9M"],
rest: ["9M"],
seedbomb: ["9M"],
sleeptalk: ["9M"],
spark: ["9L25"],
spitup: ["9E"],
stockpile: ["9E"],
stompingtantrum: ["9M"],
substitute: ["9M"],
sunnyday: ["9M"],
superfang: ["9M"],
swallow: ["9E"],
tackle: ["9L1"],
takedown: ["9M", "9L35"],
terablast: ["9M"],
thief: ["9M"],
thunder: ["9M"],
thundershock: ["9L10"],
thunderwave: ["9M", "9L5"],
thunderbolt: ["9M"],
trailblaze: ["9M"],
uproar: ["9M"],
voltswitch: ["9M"],
wildcharge: ["9M"],
zapcannon: ["9L55"],
zenheadbutt: ["9M"],
},
},
shox: {
learnset: {
blizzard: ["9M"],

View File

@ -2,7 +2,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
ancientpower: {
inherit: true,
category: "Physical",
secondary: null,
secondary: undefined, // no inherit
// Ancient Power is physical and boosts on-kill
onAfterMoveSecondarySelf(pokemon, target, move) {
if (!target || target.fainted || target.hp <= 0) {
@ -44,7 +44,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Crunch', target);
this.add('-anim', source, 'Rock Slide', target);
},
secondary: null,
target: "normal",
type: "Rock",
contestType: "Clever",
@ -60,7 +59,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
secondary: null,
target: "normal",
type: "Poison",
contestType: "Tough",
@ -197,7 +195,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.field.setWeather('snowscape');
},
},
secondary: null,
target: "normal",
type: "Ice",
contestType: "Clever",
@ -254,7 +251,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onAfterSubDamage(damage, target, source, move) {
if (!source.isAlly(target)) this.hint(move.category + " Geyser");
},
secondary: null,
target: "normal",
type: "Water",
desc: "This move is Special + no contact if it would be stronger.",
@ -281,7 +277,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
target.addVolatile('encore');
},
weather: 'raindance',
secondary: null,
target: "normal",
type: "Water",
zMove: { boost: { spe: 1 } },
@ -343,7 +338,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Ivy Cudgel Rock', target);
this.add('-anim', source, 'Splash');
},
secondary: null,
target: "normal",
type: "Rock",
contestType: "Beautiful",
@ -366,7 +360,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onPrepareHit(target, source, move) {
this.add('-anim', source, 'Metal Claw', target);
},
secondary: null,
target: "normal",
type: "Steel",
contestType: "Beautiful",
@ -395,7 +388,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
thunderouskick: {
inherit: true,
secondary: null,
secondary: undefined, // no inherit
onHit(target, source, move) {
// random # 0 or 1
const randomNum = this.random(2);
@ -444,7 +437,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
secondary: null,
target: "foeSide",
type: "Rock",
zMove: { boost: { def: 1 } },
@ -487,7 +479,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
secondary: null,
target: "foeSide",
type: "Ground",
zMove: { boost: { def: 1 } },
@ -584,8 +575,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
source.switchFlag = true;
},
secondary: null,
hasSheerForce: true,
hasSheerForceBoost: true,
target: "normal",
type: "Dragon",
desc: "Dondozo eats a mon on the user's team, KOing it. Dondozo then gains a stat boost depending on the eaten mon's highest stat: +3 Attack for Atk/SpA, +2 Def/+2 SpD for Def/SpD, and +3 Speed for Speed.",
@ -658,7 +648,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Spirit Shackle', target);
},
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
secondary: null,
target: "normal",
type: "Ghost",
contestType: "Clever",
@ -687,7 +676,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
secondary: null,
target: "normal",
type: "Fighting",
contestType: "Clever",
@ -833,7 +821,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return success;
},
flags: { protect: 1, mirror: 1, metronome: 1, wind: 1 },
secondary: null,
target: "allAdjacentFoes",
type: "Dragon",
contestType: "Cool",
@ -853,7 +840,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-start', target, 'typechange', 'Steel');
},
flags: { protect: 1, mirror: 1, metronome: 1, bullet: 1 },
secondary: null,
target: "normal",
type: "Steel",
contestType: "Cool",
@ -890,7 +876,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Extreme Speed', target);
this.add('-anim', source, 'Thunder', target);
},
secondary: null,
secondary: undefined, // no inherit
desc: "Nearly always goes first.",
shortDesc: "Nearly always goes first.",
},
@ -938,7 +924,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
selfSwitch: true,
secondary: null,
target: "normal",
type: "Fire",
contestType: "Cute",
@ -1078,7 +1063,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
secondary: null,
target: "normal",
type: "Rock",
contestType: "Tough",
@ -1174,7 +1158,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
drain: [1, 2],
secondary: null,
target: "normal",
type: "Fire",
zMove: { basePower: 160 },
@ -1209,7 +1192,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
secondary: null,
target: "normal",
type: "Grass",
contestType: "Tough",
@ -1275,7 +1257,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@ -1319,7 +1300,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
flags: { protect: 1, mirror: 1, metronome: 1 },
multihit: [10, 10],
secondary: null,
target: "normal",
type: "Dark",
zMove: { basePower: 140 },
@ -1368,7 +1348,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return null;
},
callsMove: true,
secondary: null,
target: "normal",
type: "Normal",
contestType: "Beautiful",
@ -1395,7 +1374,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return priority + 1;
}
},
secondary: null,
target: "normal",
type: "Fairy",
contestType: "Cool",
@ -1422,7 +1400,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return priority + 1;
}
},
secondary: null,
target: "normal",
type: "Electric",
contestType: "Cool",
@ -1450,7 +1427,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.boost({ spe: 1 }, source, source);
}
},
secondary: null,
target: "normal",
type: "Psychic",
contestType: "Cool",
@ -1617,7 +1593,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Explosion', target);
this.add('-anim', source, 'Mind Blown', target);
},
secondary: null,
target: "normal",
type: "Normal",
contestType: "Cute",
@ -1695,7 +1670,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
secondary: null,
target: "normal",
type: "Ghost",
contestType: "Clever",
@ -1739,7 +1713,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Curse', target);
this.add('-anim', source, 'Bug Bite', target);
},
secondary: null,
target: "normal",
type: "Ghost",
contestType: "Cute",

View File

@ -265,7 +265,7 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
inherit: true,
duration: 0,
onBeforeMovePriority: 7,
onStart() {},
onStart: undefined, // no inherit
onAfterMove(pokemon, target, move) {
if (target && target.hp <= 0) {
delete pokemon.volatiles['mustrecharge'];

View File

@ -217,7 +217,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
condition: {
inherit: true,
durationCallback: undefined,
durationCallback: undefined, // no inherit
onStart(pokemon) {
// disable can only select moves that have pp > 0, hence the onTryHit modification
const [slotIndex, moveSlot] = this.sample(Array.from(pokemon.moveSlots.entries()).filter(([i, ms]) => ms.pp > 0));
@ -253,7 +253,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
dizzypunch: {
inherit: true,
secondary: null,
secondary: undefined, // no inherit
},
doubleedge: {
inherit: true,
@ -308,7 +308,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
// This does nothing as it's dealt with on critical hit calculation.
onModifyCritRatio() {},
onModifyCritRatio: undefined, // no inherit
},
},
glare: {
@ -391,7 +391,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
leechseed: {
inherit: true,
onHit() {},
onHit: undefined, // no inherit
condition: {
inherit: true,
onAfterMoveSelfPriority: 1,
@ -421,7 +421,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
lightscreen: {
inherit: true,
volatileStatus: 'lightscreen',
sideCondition: undefined,
sideCondition: undefined, // no inherit
onTryHit(pokemon) {
if (pokemon.volatiles['lightscreen']) {
return false;
@ -476,7 +476,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
condition: {
inherit: true,
onSourceModifyDamage() {},
onSourceModifyDamage: undefined, // no inherit
},
},
mirrormove: {
@ -519,7 +519,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
petaldance: {
inherit: true,
onMoveFail() {},
onMoveFail: undefined, // no inherit
},
poisonsting: {
inherit: true,
@ -597,7 +597,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
recover: {
inherit: true,
heal: null,
heal: undefined, // no inherit
onHit(target) {
if (target.hp === target.maxhp) return false;
// Fail when health is 255 or 511 less than max, unless it is divisible by 256
@ -617,7 +617,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
reflect: {
inherit: true,
volatileStatus: 'reflect',
sideCondition: undefined,
sideCondition: undefined, // no inherit
onTryHit(pokemon) {
if (pokemon.volatiles['reflect']) {
return false;
@ -632,7 +632,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
rest: {
inherit: true,
onTry() {},
onTry: undefined, // no inherit
onHit(target, source, move) {
if (target.hp === target.maxhp) return false;
// Fail when health is 255 or 511 less than max, unless it is divisible by 256
@ -655,12 +655,12 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
roar: {
inherit: true,
forceSwitch: false,
onTryHit() {},
onTryHit: undefined, // no inherit
priority: 0,
},
rockslide: {
inherit: true,
secondary: null,
secondary: undefined, // no inherit
target: "normal",
},
rockthrow: {
@ -736,7 +736,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
softboiled: {
inherit: true,
heal: null,
heal: undefined, // no inherit
onHit(target) {
if (target.hp === target.maxhp) return false;
// Fail when health is 255 or 511 less than max, unless it is divisible by 256
@ -757,7 +757,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
pp: 10,
recoil: [1, 2],
onModifyMove() {},
onModifyMove: undefined, // no inherit
},
substitute: {
inherit: true,
@ -789,7 +789,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
delete target.volatiles['partiallytrapped'];
}
},
onTryPrimaryHit() {},
onTryPrimaryHit: undefined, // no inherit
onTryHitPriority: -1,
onTryHit(target, source, move) {
if (move.category === 'Status') {
@ -862,7 +862,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
thrash: {
inherit: true,
onMoveFail() {},
onMoveFail: undefined, // no inherit
},
thunder: {
inherit: true,
@ -873,14 +873,14 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
triattack: {
inherit: true,
onHit() {},
secondary: null,
onHit: undefined, // no inherit
secondary: undefined, // no inherit
},
whirlwind: {
inherit: true,
accuracy: 85,
forceSwitch: false,
onTryHit() {},
onTryHit: undefined, // no inherit
priority: 0,
},
wingattack: {

View File

@ -101,7 +101,7 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
},
flinch: {
inherit: true,
onStart() {},
onStart: undefined, // no inherit
},
partiallytrapped: {
name: 'partiallytrapped',

View File

@ -174,7 +174,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
recover: {
inherit: true,
heal: null,
onHit(target) {
if (target.hp === target.maxhp) {
return false;
@ -197,7 +196,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
softboiled: {
inherit: true,
heal: null,
onHit(target) {
// Fail when health is 255 or 511 less than max
if (target.hp === target.maxhp) {
@ -271,7 +269,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return 0;
},
},
secondary: null,
target: "self",
type: "Normal",
},

View File

@ -62,8 +62,8 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
this.add('cant', pokemon, 'frz');
return false;
},
onModifyMove() {},
onDamagingHit() {},
onModifyMove: undefined, // no inherit
onDamagingHit: undefined, // no inherit
onAfterMoveSecondary(target, source, move) {
if ((move.secondary && move.secondary.status === 'brn') || move.statusRoll === 'brn') {
target.cureStatus();

View File

@ -5,7 +5,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
blackbelt: {
inherit: true,
onModifyAtk() {},
onModifyAtk: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Fighting') {
return damage * 1.1;
@ -14,7 +14,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
blackglasses: {
inherit: true,
onModifySpA() {},
onModifySpA: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Dark') {
return damage * 1.1;
@ -31,7 +31,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
charcoal: {
inherit: true,
onModifySpA() {},
onModifySpA: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Fire') {
return damage * 1.1;
@ -40,7 +40,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
dragonfang: {
inherit: true,
onModifySpA() {},
onModifySpA: undefined, // no inherit
},
dragonscale: {
inherit: true,
@ -65,7 +65,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
hardstone: {
inherit: true,
onModifyAtk() {},
onModifyAtk: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Rock') {
return damage * 1.1;
@ -106,7 +106,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
lightball: {
inherit: true,
// In Gen 2 this happens in stat calculation directly.
onModifySpA() {},
onModifySpA: undefined, // no inherit
},
loveball: {
inherit: true,
@ -127,7 +127,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
magnet: {
inherit: true,
onModifySpA() {},
onModifySpA: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Electric') {
return damage * 1.1;
@ -136,7 +136,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
metalcoat: {
inherit: true,
onModifyAtk() {},
onModifyAtk: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Steel') {
return damage * 1.1;
@ -146,12 +146,12 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
metalpowder: {
inherit: true,
// In Gen 2 this happens in stat calculation directly.
onModifyDef() {},
onModifySpD() {},
onModifyDef: undefined, // no inherit
onModifySpD: undefined, // no inherit
},
miracleseed: {
inherit: true,
onModifySpA() {},
onModifySpA: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Grass') {
return damage * 1.1;
@ -164,7 +164,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
mysticwater: {
inherit: true,
onModifySpA() {},
onModifySpA: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Water') {
return damage * 1.1;
@ -173,7 +173,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
nevermeltice: {
inherit: true,
onModifySpA() {},
onModifySpA: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Ice') {
return damage * 1.1;
@ -182,7 +182,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
poisonbarb: {
inherit: true,
onModifyAtk() {},
onModifyAtk: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Poison') {
return damage * 1.1;
@ -191,7 +191,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
sharpbeak: {
inherit: true,
onModifyAtk() {},
onModifyAtk: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Flying') {
return damage * 1.1;
@ -200,7 +200,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
silverpowder: {
inherit: true,
onModifyAtk() {},
onModifyAtk: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Bug') {
return damage * 1.1;
@ -209,7 +209,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
softsand: {
inherit: true,
onModifyAtk() {},
onModifyAtk: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Ground') {
return damage * 1.1;
@ -218,7 +218,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
spelltag: {
inherit: true,
onModifyAtk() {},
onModifyAtk: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Ghost') {
return damage * 1.1;
@ -241,11 +241,11 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
thickclub: {
inherit: true,
// In Gen 2 this happens in stat calculation directly.
onModifyAtk() {},
onModifyAtk: undefined, // no inherit
},
twistedspoon: {
inherit: true,
onModifySpA() {},
onModifySpA: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Psychic') {
return damage * 1.1;
@ -290,7 +290,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
pinkbow: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Normal') {
return damage * 1.1;
@ -300,7 +300,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
polkadotbow: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Normal') {
return damage * 1.1;

View File

@ -69,8 +69,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
return false;
},
beforeTurnCallback() {},
onTry() {},
beforeTurnCallback: undefined, // no inherit
onTry: undefined, // no inherit
condition: {},
priority: -1,
},
@ -90,7 +90,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onAfterMoveSelf(pokemon) {
this.damage(pokemon.baseMaxhp / 4);
},
onResidual() {},
onResidual: undefined, // no inherit
},
},
detect: {
@ -115,7 +115,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (source.volatiles['lockon'] && target === source.volatiles['lockon'].source) return;
return false;
},
onSourceModifyDamage() {},
onSourceModifyDamage: undefined, // no inherit
onSourceBasePower(basePower, target, source, move) {
if (move.id === 'earthquake' || move.id === 'magnitude') {
return this.chainModify(2);
@ -142,7 +142,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-start', target, 'Encore');
},
onResidualOrder: 13,
onResidualSubOrder: undefined,
onResidualSubOrder: undefined, // no inherit
},
},
endure: {
@ -180,7 +180,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (source.volatiles['lockon'] && target === source.volatiles['lockon'].source) return;
return false;
},
onSourceModifyDamage() {},
onSourceModifyDamage: undefined, // no inherit
onSourceBasePower(basePower, target, source, move) {
if (move.id === 'gust' || move.id === 'twister') {
return this.chainModify(2);
@ -248,10 +248,10 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
leechseed: {
inherit: true,
onHit() {},
onHit: undefined, // no inherit
condition: {
inherit: true,
onResidual() {},
onResidual: undefined, // no inherit
onAfterMoveSelfPriority: 2,
onAfterMoveSelf(pokemon) {
if (!pokemon.hp) return;
@ -288,16 +288,14 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
condition: {
inherit: true,
onSourceInvulnerability() {},
onSourceInvulnerability: undefined, // no inherit
},
},
lowkick: {
inherit: true,
accuracy: 90,
basePower: 50,
basePowerCallback() {
return 50;
},
basePowerCallback: undefined, // no inherit
secondary: {
chance: 30,
volatileStatus: 'flinch',
@ -334,8 +332,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
return false;
},
beforeTurnCallback() {},
onTry() {},
beforeTurnCallback: undefined, // no inherit
onTry: undefined, // no inherit
condition: {},
priority: -1,
},
@ -358,7 +356,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
mist: {
inherit: true,
volatileStatus: 'mist',
sideCondition: undefined,
sideCondition: undefined, // no inherit
condition: {
onStart(pokemon) {
this.add('-start', pokemon, 'Mist');
@ -409,7 +407,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
condition: {
inherit: true,
onResidual() {},
onResidual: undefined, // no inherit
onAfterMoveSelfPriority: 1,
onAfterMoveSelf(pokemon) {
if (pokemon.status === 'slp') this.damage(pokemon.baseMaxhp / 4);
@ -468,7 +466,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
data.sources.push(pokemon);
},
onModifyMove() {},
onModifyMove: undefined, // no inherit
condition: {
inherit: true,
onBeforeSwitchOut(pokemon) {
@ -544,7 +542,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
target.statusState.source = target;
this.heal(target.maxhp);
},
secondary: null,
},
return: {
inherit: true,
@ -598,7 +595,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onPrepareHit(target, source) {
return source.status !== 'slp';
},
secondary: null,
secondary: undefined, // no inherit
},
slash: {
inherit: true,
@ -628,7 +625,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return source.status !== 'slp';
},
// Rain weakening done directly in the damage formula
onBasePower() {},
onBasePower: undefined, // no inherit
},
spiderweb: {
inherit: true,
@ -638,7 +635,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
condition: {
inherit: true,
onSideRestart: undefined,
onSideRestart: undefined, // no inherit
},
},
substitute: {
@ -722,7 +719,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
thief: {
inherit: true,
onAfterHit() {},
onAfterHit: undefined, // no inherit
secondary: {
chance: 100,
onHit(target, source) {

View File

@ -10,6 +10,6 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
dragonscale: {
inherit: true,
onModifyDamage() {},
onModifyDamage: undefined, // no inherit
},
};

View File

@ -92,7 +92,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
lightningrod: {
inherit: true,
onAnyRedirectTarget() {},
onAnyRedirectTarget: undefined, // no inherit
onFoeRedirectTarget(target, source, source2, move) {
// don't count Hidden Power as Electric-type
if (this.dex.moves.get(move.id).type !== 'Electric') return;
@ -103,8 +103,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
magnetpull: {
inherit: true,
onFoeTrapPokemon() {},
onFoeMaybeTrapPokemon() {},
onFoeTrapPokemon: undefined, // no inherit
onFoeMaybeTrapPokemon: undefined, // no inherit
onAnyTrapPokemon(pokemon) {
if (pokemon.hasType('Steel') && pokemon.isAdjacent(this.effectState.target)) {
pokemon.tryTrap(true);
@ -156,7 +156,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
raindish: {
inherit: true,
onWeather() {},
onWeather: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 3,
onResidual(pokemon) {
@ -191,7 +191,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
trace: {
inherit: true,
onUpdate() {},
onUpdate: undefined, // no inherit
onStart(pokemon) {
const target = pokemon.side.randomFoe();
if (!target || target.fainted) return;
@ -202,7 +202,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
truant: {
inherit: true,
onStart() {},
onStart: undefined, // no inherit
onSwitchIn(pokemon) {
pokemon.truantTurn = this.turn !== 0;
},

View File

@ -51,6 +51,6 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
},
sandstorm: {
inherit: true,
onModifySpD() {},
onModifySpD: undefined, // no inherit
},
};

View File

@ -1,7 +1,7 @@
export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
aguavberry: {
inherit: true,
onUpdate() {},
onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@ -12,7 +12,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
apicotberry: {
inherit: true,
onUpdate() {},
onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@ -23,7 +23,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
berryjuice: {
inherit: true,
onUpdate() {},
onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@ -37,7 +37,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
blackbelt: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifyAtkPriority: 1,
onModifyAtk(atk, user, target, move) {
if (move?.type === 'Fighting') {
@ -47,7 +47,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
blackglasses: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, user, target, move) {
if (move?.type === 'Dark') {
@ -57,7 +57,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
charcoal: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, user, target, move) {
if (move?.type === 'Fire') {
@ -67,7 +67,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
dragonfang: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, user, target, move) {
if (move?.type === 'Dragon') {
@ -90,7 +90,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
figyberry: {
inherit: true,
onUpdate() {},
onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@ -101,7 +101,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
ganlonberry: {
inherit: true,
onUpdate() {},
onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@ -112,7 +112,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
hardstone: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifyAtkPriority: 1,
onModifyAtk(atk, user, target, move) {
if (move?.type === 'Rock') {
@ -126,7 +126,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
iapapaberry: {
inherit: true,
onUpdate() {},
onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@ -152,7 +152,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
lansatberry: {
inherit: true,
onUpdate() {},
onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@ -175,7 +175,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
liechiberry: {
inherit: true,
onUpdate() {},
onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@ -191,7 +191,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
return this.chainModify(2);
}
},
onBasePower() {},
onBasePower: undefined, // no inherit
},
loveball: {
inherit: true,
@ -203,7 +203,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
magnet: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, user, target, move) {
if (move?.type === 'Electric') {
@ -213,7 +213,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
magoberry: {
inherit: true,
onUpdate() {},
onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@ -224,7 +224,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
metalcoat: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifyAtkPriority: 1,
onModifyAtk(atk, user, target, move) {
if (move?.type === 'Steel') {
@ -234,7 +234,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
miracleseed: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, user, target, move) {
if (move?.type === 'Grass') {
@ -248,7 +248,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
mysticwater: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, user, target, move) {
if (move?.type === 'Water') {
@ -258,7 +258,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
nevermeltice: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, user, target, move) {
if (move?.type === 'Ice') {
@ -268,7 +268,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
oranberry: {
inherit: true,
onUpdate() {},
onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@ -279,7 +279,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
petayaberry: {
inherit: true,
onUpdate() {},
onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@ -290,7 +290,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
poisonbarb: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifyAtkPriority: 1,
onModifyAtk(atk, user, target, move) {
if (move?.type === 'Poison') {
@ -300,12 +300,12 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
quickclaw: {
inherit: true,
onFractionalPriority() {},
onFractionalPriority: undefined, // no inherit
// implemented in Pokemon#getActionSpeed()
},
salacberry: {
inherit: true,
onUpdate() {},
onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@ -316,7 +316,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
seaincense: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, user, target, move) {
if (move?.type === 'Water') {
@ -326,7 +326,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
sharpbeak: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifyAtkPriority: 1,
onModifyAtk(atk, user, target, move) {
if (move?.type === 'Flying') {
@ -336,7 +336,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
silkscarf: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifyAtkPriority: 1,
onModifyAtk(atk, user, target, move) {
if (move?.type === 'Normal') {
@ -346,7 +346,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
silverpowder: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifyAtkPriority: 1,
onModifyAtk(atk, user, target, move) {
if (move?.type === 'Bug') {
@ -356,7 +356,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
sitrusberry: {
inherit: true,
onUpdate() {},
onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@ -370,7 +370,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
softsand: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifyAtkPriority: 1,
onModifyAtk(atk, user, target, move) {
if (move?.type === 'Ground') {
@ -380,7 +380,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
spelltag: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifyAtkPriority: 1,
onModifyAtk(atk, user, target, move) {
if (move?.type === 'Ghost') {
@ -394,7 +394,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
starfberry: {
inherit: true,
onUpdate() {},
onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@ -405,7 +405,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
twistedspoon: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, user, target, move) {
if (move?.type === 'Psychic') {
@ -415,7 +415,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
wikiberry: {
inherit: true,
onUpdate() {},
onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {

View File

@ -60,7 +60,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
priority: 0,
condition: {
inherit: true,
onAfterSetStatus() {},
onAfterSetStatus: undefined, // no inherit
onBeforeMove(pokemon, target, move) {
if (this.effectState.duration === 1) {
this.add('-end', pokemon, 'move: Bide');
@ -102,7 +102,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
blizzard: {
inherit: true,
onModifyMove() { },
onModifyMove: undefined, // no inherit
},
brickbreak: {
inherit: true,
@ -115,7 +115,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
charge: {
inherit: true,
boosts: null,
boosts: undefined, // no inherit
},
conversion: {
inherit: true,
@ -168,7 +168,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (source !== this.effectState.target || !this.effectState.slot) return;
return this.getAtSlot(this.effectState.slot);
},
onDamagingHit() {},
onDamagingHit: undefined, // no inherit
onDamagePriority: -101,
onDamage(damage, target, source, effect) {
if (
@ -207,8 +207,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
durationCallback() {
return this.random(2, 6);
},
"onResidualOrder": undefined,
"onResidualSubOrder": undefined,
"onResidualOrder": undefined, // no inherit
"onResidualSubOrder": undefined, // no inherit
},
},
dive: {
@ -302,7 +302,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
followme: {
inherit: true,
volatileStatus: undefined,
volatileStatus: undefined, // no inherit
slotCondition: 'followme',
condition: {
inherit: true,
@ -412,7 +412,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (source !== this.effectState.target || !this.effectState.slot) return;
return this.getAtSlot(this.effectState.slot);
},
onDamagingHit() {},
onDamagingHit: undefined, // no inherit
onDamagePriority: -101,
onDamage(damage, target, source, effect) {
if (
@ -428,7 +428,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
mirrormove: {
inherit: true,
flags: { metronome: 1, failencore: 1, nosleeptalk: 1, noassist: 1 },
onTryHit() { },
onTryHit: undefined, // no inherit
onHit(pokemon) {
const noMirror = [
'assist', 'curse', 'doomdesire', 'focuspunch', 'futuresight', 'magiccoat', 'metronome', 'mimic', 'mirrormove', 'naturepower', 'psychup', 'roleplay', 'sketch', 'sleeptalk', 'spikes', 'spitup', 'taunt', 'teeterdance', 'transform',
@ -594,11 +594,11 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
duration: 2,
durationCallback: undefined,
durationCallback: undefined, // no inherit
onEnd(target) {
this.add('-end', target, 'move: Taunt', '[silent]');
},
onBeforeMovePriority: undefined,
onBeforeMovePriority: undefined, // no inherit
},
},
teeterdance: {
@ -624,11 +624,11 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
volttackle: {
inherit: true,
secondary: null,
secondary: undefined, // no inherit
},
waterfall: {
inherit: true,
secondary: null,
secondary: undefined, // no inherit
},
weatherball: {
inherit: true,

View File

@ -1,7 +1,7 @@
export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
airlock: {
inherit: true,
onSwitchIn() {},
onSwitchIn: undefined, // no inherit
onStart(pokemon) {
pokemon.abilityState.ending = false;
},
@ -24,8 +24,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
blaze: {
inherit: true,
onModifyAtk() {},
onModifySpA() {},
onModifyAtk: undefined, // no inherit
onModifySpA: undefined, // no inherit
onBasePowerPriority: 2,
onBasePower(basePower, attacker, defender, move) {
if (move.type === 'Fire' && attacker.hp <= attacker.maxhp / 3) {
@ -36,7 +36,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
cloudnine: {
inherit: true,
onSwitchIn() {},
onSwitchIn: undefined, // no inherit
onStart(pokemon) {
pokemon.abilityState.ending = false;
},
@ -51,7 +51,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
this.add('-start', target, 'typechange', type, '[from] ability: Color Change');
}
},
onAfterMoveSecondary() {},
onAfterMoveSecondary: undefined, // no inherit
},
compoundeyes: {
onSourceModifyAccuracyPriority: 9,
@ -129,8 +129,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
condition: {
inherit: true,
onModifyAtk() {},
onModifySpA() {},
onModifyAtk: undefined, // no inherit
onModifySpA: undefined, // no inherit
onModifyDamagePhase1(atk, attacker, defender, move) {
if (move.type === 'Fire') {
this.debug('Flash Fire boost');
@ -202,7 +202,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
hydration: {
inherit: true,
onResidual() {},
onResidual: undefined, // no inherit
onWeather(target, source, effect) {
if (effect.id === 'raindance' && target.status) {
this.add('-activate', target, 'ability: Hydration');
@ -250,7 +250,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
lightningrod: {
inherit: true,
onTryHit() {},
onTryHit: undefined, // no inherit
rating: 0,
},
liquidooze: {
@ -275,7 +275,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
minus: {
inherit: true,
onModifySpAPriority: undefined,
onModifySpAPriority: undefined, // no inherit
onModifySpA(spa, pokemon) {
for (const allyActive of pokemon.allies()) {
if (allyActive.hasAbility('plus')) {
@ -286,7 +286,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
naturalcure: {
inherit: true,
onCheckShow(pokemon) {},
onCheckShow: undefined, // no inherit
onSwitchOut(pokemon) {
if (!pokemon.status || pokemon.status === 'fnt') return;
@ -307,8 +307,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
overgrow: {
inherit: true,
onModifyAtk() {},
onModifySpA() {},
onModifyAtk: undefined, // no inherit
onModifySpA: undefined, // no inherit
onBasePowerPriority: 2,
onBasePower(basePower, attacker, defender, move) {
if (move.type === 'Grass' && attacker.hp <= attacker.maxhp / 3) {
@ -319,13 +319,13 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
pickup: {
inherit: true,
onResidual() {},
onResidual: undefined, // no inherit
rating: 0,
// No competitive use
},
plus: {
inherit: true,
onModifySpAPriority: undefined,
onModifySpAPriority: undefined, // no inherit
onModifySpA(spa, pokemon) {
for (const allyActive of pokemon.allies()) {
if (allyActive.hasAbility('minus')) {
@ -389,7 +389,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
simple: {
inherit: true,
onChangeBoost() {},
onChangeBoost: undefined, // no inherit
onModifyBoost(boosts) {
let key: BoostID;
for (key in boosts) {
@ -425,7 +425,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
stench: {
inherit: true,
onModifyMove() {},
onModifyMove: undefined, // no inherit
rating: 0,
// No competitive use
},
@ -440,18 +440,18 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
stormdrain: {
inherit: true,
onTryHit() {},
onTryHit: undefined, // no inherit
rating: 0,
},
sturdy: {
inherit: true,
onDamage() {},
onDamage: undefined, // no inherit
rating: 0,
},
swarm: {
inherit: true,
onModifyAtk() {},
onModifySpA() {},
onModifyAtk: undefined, // no inherit
onModifySpA: undefined, // no inherit
onBasePowerPriority: 2,
onBasePower(basePower, attacker, defender, move) {
if (move.type === 'Bug' && attacker.hp <= attacker.maxhp / 3) {
@ -484,8 +484,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
thickfat: {
inherit: true,
onSourceModifyAtk() {},
onSourceModifySpA() {},
onSourceModifyAtk: undefined, // no inherit
onSourceModifySpA: undefined, // no inherit
onSourceBasePowerPriority: 1,
onSourceBasePower(basePower, attacker, defender, move) {
if (move.type === 'Ice' || move.type === 'Fire') {
@ -495,8 +495,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
torrent: {
inherit: true,
onModifyAtk() {},
onModifySpA() {},
onModifyAtk: undefined, // no inherit
onModifySpA: undefined, // no inherit
onBasePowerPriority: 2,
onBasePower(basePower, attacker, defender, move) {
if (move.type === 'Water' && attacker.hp <= attacker.maxhp / 3) {
@ -541,6 +541,6 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
rebound: {
inherit: true,
onTryHitSide() {},
onTryHitSide: undefined, // no inherit
},
};

View File

@ -118,7 +118,7 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
},
lockedmove: {
inherit: true,
onAfterMove() {},
onAfterMove: undefined, // no inherit
},
choicelock: {
inherit: true,

View File

@ -32,24 +32,24 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
choiceband: {
inherit: true,
onStart() {},
onModifyMove() {},
onStart: undefined, // no inherit
onModifyMove: undefined, // no inherit
onAfterMove(pokemon) {
pokemon.addVolatile('choicelock');
},
},
choicescarf: {
inherit: true,
onStart() {},
onModifyMove() {},
onStart: undefined, // no inherit
onModifyMove: undefined, // no inherit
onAfterMove(pokemon) {
pokemon.addVolatile('choicelock');
},
},
choicespecs: {
inherit: true,
onStart() {},
onModifyMove() {},
onStart: undefined, // no inherit
onModifyMove: undefined, // no inherit
onAfterMove(pokemon) {
pokemon.addVolatile('choicelock');
},
@ -72,7 +72,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
custapberry: {
inherit: true,
onFractionalPriority() {},
onFractionalPriority: undefined, // no inherit
onBeforeTurn(pokemon) {
if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.ability === 'gluttony')) {
const action = this.queue.willMove(pokemon);
@ -144,7 +144,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
focussash: {
inherit: true,
onDamage() {},
onDamage: undefined, // no inherit
onTryHit(target, source, move) {
if (target !== source && target.hp === target.maxhp) {
target.addVolatile('focussash');
@ -186,7 +186,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
ironball: {
inherit: true,
onEffectiveness() {},
onEffectiveness: undefined, // no inherit
},
ironplate: {
inherit: true,
@ -227,8 +227,8 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
lifeorb: {
inherit: true,
onModifyDamage() {},
onAfterMoveSecondarySelf() {},
onModifyDamage: undefined, // no inherit
onAfterMoveSecondarySelf: undefined, // no inherit
onBasePower(basePower, user, target) {
if (!target.volatiles['substitute']) {
user.addVolatile('lifeorb');
@ -250,8 +250,8 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
lightball: {
inherit: true,
onModifyAtk() {},
onModifySpA() {},
onModifyAtk: undefined, // no inherit
onModifySpA: undefined, // no inherit
onBasePower(basePower, pokemon) {
if (pokemon.species.name === 'Pikachu') {
return this.chainModify(2);
@ -319,7 +319,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
}
this.effectState.lastMove = move.id;
},
onModifyDamage() {},
onModifyDamage: undefined, // no inherit
onModifyDamagePhase2(damage, source, target, move) {
return damage * (1 + (this.effectState.numConsecutive / 10));
},

View File

@ -300,7 +300,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
flags: { protect: 1, mirror: 1, bypasssub: 1, metronome: 1 },
condition: {
inherit: true,
duration: undefined,
duration: undefined, // no inherit
durationCallback() {
return this.random(4, 8);
},
@ -398,7 +398,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
volatileStatus: 'encore',
condition: {
inherit: true,
duration: undefined,
duration: undefined, // no inherit
durationCallback() {
return this.random(4, 9);
},
@ -497,11 +497,11 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
focuspunch: {
inherit: true,
priorityChargeCallback() {},
priorityChargeCallback: undefined, // no inherit
beforeTurnCallback(pokemon) {
pokemon.addVolatile('focuspunch');
},
beforeMoveCallback() {},
beforeMoveCallback: undefined, // no inherit
onTry(pokemon) {
if (pokemon.volatiles['focuspunch']?.lostFocus) {
this.attrLastMove('[still]');
@ -576,12 +576,12 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onFieldResidualOrder: 9,
onFieldResidualSubOrder: undefined,
onFieldResidualSubOrder: undefined, // no inherit
},
},
growth: {
inherit: true,
onModifyMove() {},
onModifyMove: undefined, // no inherit
boosts: {
spa: 1,
},
@ -722,7 +722,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
condition: {
inherit: true,
onAnyModifyDamage() {},
onAnyModifyDamage: undefined, // no inherit
onAnyModifyDamagePhase1(damage, source, target, move) {
if (target !== source && this.effectState.target.hasAlly(target) && this.getCategory(move) === 'Special') {
if (!target.getMoveHitData(move).crit && !move.infiltrates) {
@ -733,7 +733,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
onSideResidualOrder: 2,
onSideResidualSubOrder: undefined,
onSideResidualSubOrder: undefined, // no inherit
},
},
lockon: {
@ -749,7 +749,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onSideResidualOrder: 6,
onSideResidualSubOrder: undefined,
onSideResidualSubOrder: undefined, // no inherit
},
},
lunardance: {
@ -797,7 +797,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.actions.useMove(newMove, target, { target: source });
return null;
},
onAllyTryHitSide() {},
onAllyTryHitSide: undefined, // no inherit
},
},
magmastorm: {
@ -822,7 +822,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
condition: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifyDamagePhase2(damage) {
return damage * 1.5;
},
@ -891,7 +891,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
mirrormove: {
inherit: true,
onTryHit() {},
onTryHit: undefined, // no inherit
onHit(pokemon) {
const lastAttackedBy = pokemon.getLastAttackedBy();
if (!lastAttackedBy?.source.lastMove || !lastAttackedBy.move) {
@ -912,7 +912,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onSideResidualOrder: 3,
onSideResidualSubOrder: undefined,
onSideResidualSubOrder: undefined, // no inherit
},
},
moonlight: {
@ -1109,7 +1109,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
condition: {
inherit: true,
onAnyModifyDamage() {},
onAnyModifyDamage: undefined, // no inherit
onAnyModifyDamagePhase1(damage, source, target, move) {
if (target !== source && this.effectState.target.hasAlly(target) && this.getCategory(move) === 'Physical') {
if (!target.getMoveHitData(move).crit && !move.infiltrates) {
@ -1120,7 +1120,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
onSideResidualOrder: 1,
onSideResidualSubOrder: undefined,
onSideResidualSubOrder: undefined, // no inherit
},
},
reversal: {
@ -1167,7 +1167,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onSideResidualOrder: 4,
onSideResidualSubOrder: undefined,
onSideResidualSubOrder: undefined, // no inherit
},
},
sandtomb: {
@ -1250,7 +1250,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
flags: { metronome: 1, mustpressure: 1 },
condition: {
inherit: true,
onSwitchIn() {},
onSwitchIn: undefined, // no inherit
onEntryHazard(pokemon) {
if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) return;
const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4
@ -1267,7 +1267,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
flags: { metronome: 1, mustpressure: 1 },
condition: {
inherit: true,
onSwitchIn() {},
onSwitchIn: undefined, // no inherit
onEntryHazard(pokemon) {
if (pokemon.hasItem('heavydutyboots')) return;
const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6);
@ -1385,7 +1385,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return spe * 2;
},
onSideResidualOrder: 5,
onSideResidualSubOrder: undefined,
onSideResidualSubOrder: undefined, // no inherit
},
},
taunt: {
@ -1393,7 +1393,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
flags: { protect: 1, mirror: 1, bypasssub: 1, metronome: 1 },
condition: {
inherit: true,
duration: undefined,
duration: undefined, // no inherit
durationCallback() {
return this.random(3, 6);
},
@ -1436,7 +1436,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
flags: { metronome: 1, mustpressure: 1 },
condition: {
inherit: true,
onSwitchIn() {},
onSwitchIn: undefined, // no inherit
onEntryHazard(pokemon) {
if (!pokemon.isGrounded()) return;
if (pokemon.hasType('Poison')) {
@ -1468,7 +1468,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onFieldResidualOrder: 13,
onFieldResidualSubOrder: undefined,
onFieldResidualSubOrder: undefined, // no inherit
},
},
uproar: {
@ -1476,7 +1476,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
basePower: 50,
condition: {
inherit: true,
duration: undefined,
duration: undefined, // no inherit
durationCallback() {
return this.random(3, 7);
},

View File

@ -31,7 +31,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
keeneye: {
inherit: true,
onModifyMove() {},
onModifyMove: undefined, // no inherit
},
magicbounce: {
inherit: true,
@ -68,13 +68,13 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
onImmunity(type, pokemon) {
if (type === 'sandstorm' || type === 'hail') return false;
},
onTryHit() {},
onTryHit: undefined, // no inherit
flags: {},
rating: 0.5,
},
sapsipper: {
inherit: true,
onAllyTryHitSide() {},
onAllyTryHitSide: undefined, // no inherit
},
serenegrace: {
inherit: true,
@ -89,7 +89,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
soundproof: {
inherit: true,
onAllyTryHitSide() {},
onAllyTryHitSide: undefined, // no inherit
},
rebound: {
inherit: true,

View File

@ -36,7 +36,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
autotomize: {
inherit: true,
volatileStatus: 'autotomize',
onHit() {},
onHit: undefined, // no inherit
condition: {
noCopy: true, // doesn't get copied by Baton Pass
onStart(pokemon) {
@ -152,7 +152,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
cottonspore: {
inherit: true,
onTryHit() {},
onTryHit: undefined, // no inherit
target: "normal",
},
covet: {
@ -485,7 +485,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
knockoff: {
inherit: true,
basePower: 20,
onBasePower() {},
onBasePower: undefined, // no inherit
},
leafstorm: {
inherit: true,
@ -565,7 +565,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pp: 20,
condition: {
inherit: true,
onAccuracy() {},
onAccuracy: undefined, // no inherit
},
},
moonlight: {
@ -578,7 +578,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
mudsport: {
inherit: true,
pseudoWeather: undefined,
pseudoWeather: undefined, // no inherit
volatileStatus: 'mudsport',
condition: {
noCopy: true,
@ -596,7 +596,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
naturepower: {
inherit: true,
onTryHit() {},
onTryHit: undefined, // no inherit
onHit(pokemon) {
this.actions.useMove('earthquake', pokemon);
},
@ -628,7 +628,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
poisonpowder: {
inherit: true,
onTryHit() {},
onTryHit: undefined, // no inherit
},
powergem: {
inherit: true,
@ -780,7 +780,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
sleeppowder: {
inherit: true,
onTryHit() {},
onTryHit: undefined, // no inherit
},
smellingsalts: {
inherit: true,
@ -813,7 +813,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
spore: {
inherit: true,
onTryHit() {},
onTryHit: undefined, // no inherit
},
stormthrow: {
inherit: true,
@ -831,7 +831,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
stunspore: {
inherit: true,
onTryHit() {},
onTryHit: undefined, // no inherit
},
substitute: {
inherit: true,
@ -924,7 +924,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
toxic: {
inherit: true,
onPrepareHit() {},
onPrepareHit: undefined, // no inherit
},
uproar: {
inherit: true,
@ -952,7 +952,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
watersport: {
inherit: true,
pseudoWeather: undefined,
pseudoWeather: undefined, // no inherit
volatileStatus: 'watersport',
condition: {
noCopy: true,

View File

@ -54,7 +54,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
move.type = 'Normal';
}
},
onBasePower() {},
onBasePower: undefined, // no inherit
rating: -1,
},
parentalbond: {
@ -93,7 +93,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
const targetForme = (move.id === 'kingsshield' ? 'Aegislash' : 'Aegislash-Blade');
if (attacker.species.name !== targetForme) attacker.formeChange(targetForme);
},
onModifyMove() {},
onModifyMove: undefined, // no inherit
},
symbiosis: {
inherit: true,

View File

@ -40,6 +40,6 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
},
choicelock: {
inherit: true,
onBeforeMove() {},
onBeforeMove: undefined, // no inherit
},
};

View File

@ -165,7 +165,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
souldew: {
inherit: true,
onBasePower() {},
onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, pokemon) {
if (pokemon.baseSpecies.num === 380 || pokemon.baseSpecies.num === 381) {

View File

@ -14,7 +14,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
darkvoid: {
inherit: true,
accuracy: 80,
onTry() {},
onTry: undefined, // no inherit
},
destinybond: {
inherit: true,
@ -24,7 +24,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
diamondstorm: {
inherit: true,
self: null,
self: undefined, // no inherit
secondary: {
chance: 50,
self: {
@ -66,7 +66,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
condition: {
inherit: true,
onTryAddVolatile() {},
onTryAddVolatile: undefined, // no inherit
},
},
mysticalfire: {

View File

@ -33,8 +33,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
inherit: true,
// Ability suppression cancelled in scripts.ts
// new Ability suppression implemented in scripts.ts
onSwitchIn(pokemon) {},
onEnd(source) {},
onSwitchIn: undefined, // no inherit
onEnd: undefined, // no inherit
onStart(pokemon) {
this.add('-ability', pokemon, 'Neutralizing Gas');
},

View File

@ -34,7 +34,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
innerfocus: {
inherit: true,
rating: 1,
onTryBoost() {},
onTryBoost: undefined, // no inherit
},
moody: {
inherit: true,
@ -65,19 +65,19 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
oblivious: {
inherit: true,
onTryBoost() {},
onTryBoost: undefined, // no inherit
},
owntempo: {
inherit: true,
onTryBoost() {},
onTryBoost: undefined, // no inherit
},
rattled: {
inherit: true,
onAfterBoost() {},
onAfterBoost: undefined, // no inherit
},
scrappy: {
inherit: true,
onTryBoost() {},
onTryBoost: undefined, // no inherit
},
slowstart: {
inherit: true,

View File

@ -273,7 +273,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
grassknot: {
inherit: true,
onTryHit() {},
onTryHit: undefined, // no inherit
},
grasswhistle: {
inherit: true,
@ -367,11 +367,11 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
heatcrash: {
inherit: true,
onTryHit() {},
onTryHit: undefined, // no inherit
},
heavyslam: {
inherit: true,
onTryHit() {},
onTryHit: undefined, // no inherit
},
hiddenpower: {
inherit: true,
@ -536,7 +536,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
lowkick: {
inherit: true,
onTryHit() {},
onTryHit: undefined, // no inherit
},
luckychant: {
inherit: true,
@ -775,7 +775,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
rapidspin: {
inherit: true,
basePower: 20,
secondary: null,
secondary: undefined, // no inherit
},
razorwind: {
inherit: true,
@ -1081,6 +1081,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
basePower: 50,
pp: 15,
willCrit: true,
secondary: null,
secondary: undefined, // no inherit
},
};

View File

@ -428,8 +428,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
heatproof: {
inherit: true,
onSourceModifyAtk() {},
onSourceModifySpA() {},
onSourceModifyAtk: undefined, // no inherit
onSourceModifySpA: undefined, // no inherit
onSourceBasePowerPriority: 18,
onSourceBasePower(basePower, attacker, defender, move) {
if (move.type === 'Fire') {
@ -481,8 +481,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
illuminate: {
inherit: true,
onTryBoost() {},
onModifyMove() {},
onTryBoost: undefined, // no inherit
onModifyMove: undefined, // no inherit
flags: {},
rating: 0,
},

View File

@ -2,7 +2,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
allyswitch: {
inherit: true,
// Prevents setting the volatile used to check for Ally Switch failure
onPrepareHit() {},
onPrepareHit: undefined, // no inherit
},
anchorshot: {
inherit: true,

View File

@ -58,8 +58,8 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
vivillonfancy: {
inherit: true,
abilities: { 0: "Shield Dust", 1: "Compound Eyes" },
prevo: undefined,
evoLevel: undefined,
prevo: undefined, // no inherit
evoLevel: undefined, // no inherit
},
vivillonpokeball: {
inherit: true,

View File

@ -0,0 +1,10 @@
export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
dragonize: {
inherit: true,
isNonstandard: null,
},
megasol: {
inherit: true,
isNonstandard: null,
},
};

View File

@ -20,18 +20,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
baseStats: { hp: 60, atk: 100, def: 105, spa: 130, spd: 105, spe: 120 },
abilities: { 0: "Pure Power" },
},
dragonitemega: {
inherit: true,
abilities: { 0: "Sheer Force" },
},
meganiummega: {
inherit: true,
abilities: { 0: "Flower Veil" },
},
feraligatrmega: {
inherit: true,
abilities: { 0: "Dragon's Maw" },
},
ampharosmega: {
inherit: true,
abilities: { 0: "Fluffy" },
@ -64,10 +52,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Sharpness" },
},
froslassmega: {
inherit: true,
abilities: { 0: "Snow Warning" },
},
garchompmegaz: {
inherit: true,
abilities: { 0: "Rough Skin" },
@ -84,10 +68,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Dark Aura" },
},
emboarmega: {
inherit: true,
abilities: { 0: "Supreme Overlord" },
},
excadrillmega: {
inherit: true,
abilities: { 0: "Sand Rush" },
@ -116,18 +96,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Magic Guard" },
},
chesnaughtmega: {
inherit: true,
abilities: { 0: "Grassy Surge" },
},
delphoxmega: {
inherit: true,
abilities: { 0: "Levitate" },
},
greninjamega: {
inherit: true,
abilities: { 0: "Protean" },
},
meowsticmmega: {
inherit: true,
abilities: { 0: "Psychic Surge" },

View File

@ -13,8 +13,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
illuminate: {
inherit: true,
onTryBoost() {},
onModifyMove() {},
onTryBoost: undefined, // no inherit
onModifyMove: undefined, // no inherit
flags: {},
rating: 0,
},

View File

@ -37,7 +37,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
jetpunch: {
inherit: true,
hasSheerForce: true,
hasSheerForceBoost: true,
},
matchagotcha: {
inherit: true,

View File

@ -84,7 +84,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
source.eatItem(true);
},
},
secondary: null,
target: "normal",
type: "Steel",
},
@ -109,7 +108,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', pokemon, 'Shift Gear', pokemon);
this.boost({ spe: 2, atk: 1 });
},
secondary: null,
target: "self",
type: "Steel",
},
@ -141,7 +139,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
spa: -2,
},
},
secondary: null,
target: "normal",
type: "Ghost",
},
@ -188,7 +185,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
secondary: null,
target: "self",
type: "Water",
},
@ -218,7 +214,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (target.addVolatile('healblock', source)) success = true;
return success;
},
secondary: null,
target: "normal",
type: "Grass",
},
@ -299,7 +294,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.boost({ spa: -1, spd: -1 }, source);
}
},
secondary: null,
target: "normal",
type: "Normal",
},
@ -370,7 +364,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Flower Trick', target);
this.add('-anim', source, 'Flower Trick', target);
},
secondary: null,
target: "normal",
type: "Grass",
},
@ -474,7 +467,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
changeSet(this, pokemon, ssbSets['A Quag To The Past'], true);
}
},
secondary: null,
target: "self",
type: "Ground",
},
@ -512,7 +504,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return success;
},
isZ: "lilligantiumz",
secondary: null,
target: "self",
type: "Grass",
},
@ -563,7 +554,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
multihit: 5,
multiaccuracy: true,
forceSTAB: true,
secondary: null,
target: 'normal',
type: "Fire",
},
@ -614,7 +604,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.heal(source.baseMaxhp / 2, source);
}
},
secondary: null,
target: "self",
type: "Psychic",
},
@ -638,7 +627,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Earthquake', target);
},
volatileStatus: 'flinch',
secondary: null,
target: "normal",
type: "???",
},
@ -766,7 +754,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
spa: 2,
spd: 1,
},
secondary: null,
target: "self",
type: "Psychic",
},
@ -999,7 +986,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onAfterMoveSecondarySelf(pokemon, target, move) {
if (!target || target.fainted || target.hp <= 0) this.boost({ atk: 2 }, pokemon, pokemon, move);
},
secondary: null,
target: "normal",
type: "Bug",
},
@ -1030,7 +1016,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-item', pokemon, item, '[from] move: what kind');
this.heal(pokemon.baseMaxhp / 4, pokemon);
},
secondary: null,
target: "self",
type: "Water",
},
@ -1117,7 +1102,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
secondary: null,
target: "self",
type: "Dark",
},
@ -1218,7 +1202,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
secondary: null,
target: "self",
type: "Normal",
},
@ -1241,7 +1224,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onEffectiveness(typeMod, target, type, move) {
return typeMod + this.dex.getEffectiveness('Fire', type);
},
secondary: null,
target: "normal",
type: "Water",
},
@ -1280,7 +1262,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
source.skipBeforeSwitchOutEventFlag = false;
}
},
secondary: null,
target: "self",
type: "Normal",
},
@ -1366,7 +1347,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
}
},
secondary: null,
target: "self",
type: "Normal",
// bird type crashes during testing (runStatusImmunity for Bird at sim\pokemon.ts:2101:10). no-go.
@ -1476,7 +1456,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pokemon.setStatus(status);
}
},
secondary: null,
target: "self",
type: "Electric",
},
@ -1542,7 +1521,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onMoveFail(target, source, move) {
this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('High Jump Kick'));
},
secondary: null,
target: "normal",
type: "Grass",
},
@ -1578,7 +1556,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
const success = !!this.heal(this.modify(source.maxhp, 0.25));
return source.addVolatile('magnetrise', source, move) || success;
},
secondary: null,
target: "self",
type: "Normal",
},
@ -1665,7 +1642,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onHit(target) {
this.actions.useMove('batonpass', target);
},
secondary: null,
target: "self",
type: "Normal",
},
@ -1742,7 +1718,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return target.addVolatile('trapped', source, move, 'trapper') || success;
},
zMove: { effect: 'heal' },
secondary: null,
target: "normal",
type: "Ghost",
},
@ -1769,7 +1744,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'U-turn', target);
},
selfSwitch: true,
secondary: null,
target: "normal",
type: "Flying",
},
@ -1980,7 +1954,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onDamage(damage, target, source, effect) {
if (damage >= target.hp) return target.hp - 1;
},
secondary: null,
target: "normal",
type: "Dark",
},
@ -2021,7 +1994,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
target.addVolatile('hacked');
},
secondary: null,
target: "normal",
type: "Ghost",
},
@ -2062,7 +2034,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
def: 2,
},
// passive recovery implemented in conditions.ts
secondary: null,
target: "self",
type: "Normal",
},
@ -2132,7 +2103,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
};
pokemon.moveSlots[teaIndex] = newMoveSlot;
},
secondary: null,
target: 'self',
type: "Flying",
},
@ -2151,7 +2121,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.attrLastMove('[anim] Bleakwind Storm');
},
multihit: 5,
secondary: null,
target: 'normal',
type: "Flying",
},
@ -2176,7 +2145,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
selfSwitch: true,
recoil: [33, 100],
secondary: null,
target: 'normal',
type: "Fighting",
},
@ -2214,7 +2182,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
secondary: null,
target: 'normal',
type: "Grass",
},
@ -2251,7 +2218,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
target.addVolatile('taunt', source);
}
},
secondary: null,
target: 'normal',
type: "Bug",
},
@ -2323,7 +2289,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
spe: 1,
atk: 1,
},
secondary: null,
target: 'self',
type: "Poison",
},
@ -2351,7 +2316,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.field.addPseudoWeather('gravity', source);
},
},
secondary: null,
target: 'normal',
type: "???",
},
@ -2428,7 +2392,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
self: {
volatileStatus: 'protect',
},
secondary: null,
target: "normal",
type: "Normal",
},
@ -2492,7 +2455,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
duration: 1,
// reviving implemented in side.ts, kind of
},
secondary: null,
target: "self",
type: "Dark",
},
@ -2660,7 +2622,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
self: {
sideCondition: 'safeguard',
},
secondary: null,
multihit: 3,
target: "normal",
type: "Ground",
@ -2751,7 +2712,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add(`c:|${getName((source.illusion || source).name)}|${msg}`);
},
isZ: "irpatuziniumz",
secondary: null,
target: "normal",
type: "Fairy",
},
@ -2769,7 +2729,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onPrepareHit(target, source) {
this.attrLastMove('[anim] High Jump Kick');
},
secondary: null,
target: "allAdjacent",
type: "Psychic",
},
@ -2797,7 +2756,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Snowscape', target);
},
weather: 'snowscape',
secondary: null,
target: "self",
type: "Ice",
},
@ -2813,7 +2771,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pp: 5,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
recoil: [1, 2],
secondary: null,
priority: 0,
onTryMove() {
this.attrLastMove('[still]');
@ -2848,7 +2805,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onTryMove() {
this.attrLastMove('[still]');
},
secondary: null,
target: "normal",
type: "Fighting",
},
@ -2987,7 +2943,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
def: -1,
spe: -1,
},
secondary: null,
target: "normal",
type: "Rock",
},
@ -3099,7 +3054,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-fieldend', 'move: Anfield Atmosphere');
},
},
secondary: null,
target: "all",
type: "Psychic",
},
@ -3135,7 +3089,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pokemon.forceSwitchFlag = true;
}
},
secondary: null,
target: "all",
type: "Flying",
},
@ -3213,7 +3166,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
priority: 1,
flags: { protect: 1, mirror: 1, metronome: 1 },
multihit: [2, 5],
secondary: null,
onTryMove() {
this.attrLastMove('[still]');
},
@ -3329,7 +3281,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
secondary: null,
target: "normal",
type: "Steel",
contestType: "Clever",
@ -3380,7 +3331,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-end', target, 'Rise Above');
},
},
secondary: null,
target: "self",
type: "Electric",
},
@ -3404,7 +3354,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
pseudoWeather: 'trickroom',
volatileStatus: 'powertrick',
secondary: null,
target: "self",
type: "Psychic",
},
@ -3506,8 +3455,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
attacker.addVolatile('twoturnmove', defender);
return null;
},
secondary: null,
hasSheerForce: true,
hasSheerForceBoost: true,
onPrepareHit(target, source) {
this.attrLastMove('[still]');
this.add('-anim', source, 'Lunar Dance', target);
@ -3545,7 +3493,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-start', source, 'typeadd', 'Fire', '[from] move: Wrath of Frozen Flames');
}
},
secondary: null,
target: "normal",
type: "Dragon",
},
@ -3567,7 +3514,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onPrepareHit() {
this.attrLastMove('[anim] Core Enforcer');
},
secondary: null,
target: "normal",
type: "Ghost",
},
@ -3593,7 +3539,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add(`c:|${getName((source.illusion || source).name)}|Sorry i tried to fix smth but accidentally broke your ability :( will fix it next week`);
},
ignoreAbility: true,
secondary: null,
target: "normal",
type: "Normal",
},
@ -3630,7 +3575,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pokemon.forceSwitchFlag = true;
}
},
secondary: null,
target: "all",
type: "Electric",
},
@ -3685,7 +3629,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
source.addVolatile('imprison', source);
source.m.usedPlagiarism = true;
},
secondary: null,
target: "normal",
type: "Dark",
},
@ -3719,7 +3662,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
spe: 1,
},
},
secondary: null,
target: "all",
type: "Dragon",
},
@ -3745,7 +3687,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onEffectiveness(typeMod, target, type) {
if (type === 'Water') return 1;
},
secondary: null,
target: "normal",
type: "Ice",
},
@ -3795,7 +3736,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
} // This is easier than implementing each condition manually
this.heal(target.maxhp / 4, target, target, this.effect);
},
secondary: null,
target: "self",
type: "Grass",
},
@ -3889,7 +3829,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
selfSwitch: true,
secondary: null,
target: "normal",
type: "Ice",
},
@ -3960,7 +3899,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
secondary: null,
target: "all",
type: "Steel",
},
@ -4024,7 +3962,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
target.addVolatile('taunt', source, move);
}
},
secondary: null,
target: "normal",
type: "Ghost",
},
@ -4159,7 +4096,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-message', `${pokemon.name} gained 10 levels!`);
},
isZ: "pearyumz",
secondary: null,
target: "self",
type: "Steel",
},
@ -4565,7 +4501,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return success || !!this.canSwitch(source.side);
},
selfSwitch: true,
secondary: null,
target: "self",
type: "Normal",
},
@ -4604,7 +4539,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
isZ: "rainiumz",
secondary: null,
target: "self",
type: "Water",
},
@ -4627,7 +4561,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onPrepareHit(target, source) {
this.add('-anim', source, 'Photon Geyser', target);
},
secondary: null,
target: "normal",
type: "Psychic",
},
@ -4721,7 +4654,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Dragon Dance', source);
this.add('-anim', source, 'Lock-On', source);
},
secondary: null,
target: "self",
type: "Fire",
},
@ -4811,7 +4743,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
const success = !!this.heal(this.modify(pokemon.maxhp, 0.5));
return pokemon.cureStatus() || success;
},
secondary: null,
target: "self",
type: "Water",
},
@ -4944,7 +4875,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.actions.useMove(icebeam, target);
return null;
},
secondary: null,
target: "self",
type: "Electric",
},
@ -4989,7 +4919,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
target.addVolatile('leechseed', source);
}
},
secondary: null,
target: "normal",
type: "Grass",
},
@ -5022,7 +4951,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
secondary: null,
target: "normal",
type: "Grass",
},
@ -5143,7 +5071,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (target?.positiveBoosts()) return priority + 1;
return priority;
},
secondary: null,
target: "normal",
type: "Steel",
},
@ -5167,7 +5094,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onPrepareHit(target, source) {
this.add('-anim', source, 'Burn Up', target);
},
secondary: null,
target: "normal",
type: "Fire",
},
@ -5242,7 +5168,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
def: 1,
spd: 1,
},
secondary: null,
target: "self",
type: "Fire",
},
@ -5289,7 +5214,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pokemon.removeVolatile('phantomweapon');
},
},
secondary: null,
target: "normal",
type: "Ghost",
},
@ -5314,7 +5238,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Nasty Plot', source);
this.add('-anim', source, 'Head Smash', target);
},
secondary: null,
target: "normal",
type: "Steel",
},
@ -5340,7 +5263,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onPrepareHit(target, source) {
this.add('-anim', source, 'Aura Sphere', source);
},
secondary: null,
target: "normal",
type: "Fighting",
},
@ -5366,7 +5288,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
multihit: 10,
multiaccuracy: true,
secondary: null,
target: "normal",
type: "Poison",
},
@ -5395,7 +5316,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
target?.faint(source);
},
ignoreImmunity: true,
secondary: null,
target: "normal",
type: "Ghost",
},
@ -5441,7 +5361,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Focus Energy', target);
this.add('-anim', source, 'Agility', target);
},
secondary: null,
target: "self",
type: "Psychic",
},
@ -5501,7 +5420,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add(`c:|${getName((pokemon.illusion || pokemon).name)}|he do be searching for rocks tho`);
return !!this.queue.willAct() && this.runEvent('StallMove', pokemon);
},
secondary: null,
target: "self",
type: "Ground",
},
@ -5566,7 +5484,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return success;
},
},
secondary: null,
target: "normal",
type: "Ghost",
},
@ -5595,7 +5512,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
target.addVolatile('attract', source);
target.addVolatile('confusion', source);
},
secondary: null,
target: "normal",
type: "Normal",
},
@ -5631,7 +5547,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
}
},
secondary: null,
target: "normal",
type: "Psychic",
},
@ -5667,7 +5582,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-end', pokemon, 'Symphonie du Ze\u0301ro');
},
},
secondary: null,
target: "normal",
type: "Fairy",
},
@ -5744,7 +5658,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'U-Turn', target);
},
selfSwitch: true,
secondary: null,
target: "normal",
type: "Flying",
},
@ -5782,7 +5695,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
this.boost({ atk: boost }, pokemon, pokemon, move);
},
secondary: null,
target: "normal",
type: "Steel",
},
@ -5831,7 +5743,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return success;
},
ignoreAbility: true,
secondary: null,
target: "normal",
type: "Flying",
},
@ -5874,7 +5785,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('detailschange', pokemon, details);
}
},
secondary: null,
target: "normal",
type: "Grass",
},
@ -5890,7 +5800,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pp: 10,
priority: 0,
flags: { sound: 1, failcopycat: 1 },
secondary: null,
onTryMove() {
this.attrLastMove('[still]');
},
@ -5933,7 +5842,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pp: 10,
priority: 0,
flags: {},
secondary: null,
selfSwitch: true,
onTryMove() {
this.attrLastMove('[still]');
@ -6010,7 +5918,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
attacker.addVolatile('twoturnmove', defender);
return null;
},
secondary: null,
target: "normal",
type: "Flying",
},
@ -6027,7 +5934,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, heal: 1, metronome: 1 },
drain: [1, 2],
secondary: null,
target: "allAdjacent",
type: "Water",
onTryMove() {
@ -6087,7 +5993,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return this.chainModify(1.5);
},
},
secondary: null,
target: "self",
type: "Normal",
},
@ -6117,7 +6022,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return this.chainModify(1.75);
}
},
secondary: null,
target: "normal",
type: "Fire",
},
@ -6135,7 +6039,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
flags: { reflectable: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1, noassist: 1, failcopycat: 1, wind: 1 },
forceSwitch: true,
status: 'tox',
secondary: null,
target: "normal",
type: "Poison",
},
@ -6170,7 +6073,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
}
},
secondary: null,
target: "normal",
type: "Dark",
},
@ -6200,7 +6102,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
this.add(`c:|${getName((source.illusion || source).name)}|A blank canvas.`);
},
secondary: null,
target: "normal",
type: "Ice",
},
@ -6234,7 +6135,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
},
selfSwitch: true,
secondary: null,
target: "self",
type: "Dark",
},
@ -6298,7 +6198,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
didSomething = pokemon.addVolatile('aquaring') || didSomething;
return didSomething;
},
secondary: null,
target: "self",
type: "Water",
},
@ -6330,7 +6229,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
target.trySetStatus('par', source, move);
},
secondary: null,
target: "normal",
type: "Normal",
},
@ -6370,7 +6268,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
ignoreNegativeOffensive: true,
breaksProtect: true,
ignoreAccuracy: true,
secondary: null,
target: "normal",
type: "Normal",
},
@ -6409,7 +6306,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
spd: 1,
},
},
secondary: null,
target: "self",
type: "Fire",
},
@ -6426,7 +6322,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
overrideOffensivePokemon: 'target',
secondary: null,
target: "normal",
type: "Dark",
onTryMove() {
@ -7062,7 +6957,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.actions.useMove(randomMove, target);
},
multihit: [2, 5],
secondary: null,
target: "self",
type: "???",
},

View File

@ -1,6 +1,8 @@
export const Scripts: ModdedBattleScriptsData = {
gen: 9,
init() {
this.modData('Abilities', 'dragonize').isNonstandard = null;
this.modData('Abilities', 'megasol').isNonstandard = null;
for (const i in this.data.Items) {
const item = this.data.Items[i];
if (!item.megaStone && !item.onDrive && !(item.onPlate && !item.zMove) && !item.onMemory) continue;

File diff suppressed because it is too large Load Diff

View File

@ -3352,7 +3352,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
forme: "Mega",
types: ["Dragon", "Flying"],
baseStats: { hp: 91, atk: 124, def: 115, spa: 145, spd: 125, spe: 100 },
abilities: { 0: "Inner Focus", H: "Multiscale" },
abilities: { 0: "Multiscale" },
heightm: 2.2,
weightkg: 290,
color: "Brown",
@ -3470,7 +3470,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
types: ["Grass", "Fairy"],
genderRatio: { M: 0.875, F: 0.125 },
baseStats: { hp: 80, atk: 92, def: 115, spa: 143, spd: 115, spe: 80 },
abilities: { 0: "Overgrow", H: "Leaf Guard" },
abilities: { 0: "Mega Sol" },
heightm: 2.4,
weightkg: 201,
color: "Green",
@ -3590,7 +3590,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
types: ["Water", "Dragon"],
genderRatio: { M: 0.875, F: 0.125 },
baseStats: { hp: 85, atk: 160, def: 125, spa: 89, spd: 93, spe: 78 },
abilities: { 0: "Torrent", H: "Sheer Force" },
abilities: { 0: "Dragonize" },
heightm: 2.3,
weightkg: 108.8,
color: "Blue",
@ -8708,7 +8708,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
types: ["Ice", "Ghost"],
gender: "F",
baseStats: { hp: 70, atk: 80, def: 70, spa: 140, spd: 100, spe: 120 },
abilities: { 0: "Snow Cloak", H: "Cursed Body" },
abilities: { 0: "Snow Warning" },
heightm: 2.6,
weightkg: 29.6,
color: "White",
@ -9484,7 +9484,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
types: ["Fire", "Fighting"],
genderRatio: { M: 0.875, F: 0.125 },
baseStats: { hp: 110, atk: 148, def: 75, spa: 110, spd: 110, spe: 75 },
abilities: { 0: "Blaze", H: "Reckless" },
abilities: { 0: "Mold Breaker" },
heightm: 1.8,
weightkg: 180.3,
color: "Red",
@ -20678,15 +20678,30 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
eggGroups: ["Dragon", "Mineral"],
gen: 9,
},
flox: {
num: -76,
name: "Flox",
types: ["Normal", "Electric"],
baseStats: { hp: 96, atk: 25, def: 67, spa: 73, spd: 68, spe: 61 },
abilities: { 0: "Static", 1: "Sticky Hold", H: "Cud Chew" },
heightm: 0.9,
weightkg: 66.6,
color: "Brown",
evos: ["Shox"],
eggGroups: ["Field"],
gen: 9,
},
shox: {
num: -77,
name: "Shox",
types: ["Electric", "Normal"],
types: ["Normal", "Electric"],
baseStats: { hp: 136, atk: 55, def: 87, spa: 108, spd: 108, spe: 56 },
abilities: { 0: "Electromorphosis", 1: "Sticky Hold", H: "Cud Chew" },
heightm: 3,
weightkg: 99.9,
color: "Brown",
prevo: "Flox",
evoLevel: 34,
eggGroups: ["Field"],
gen: 9,
},

View File

@ -199,7 +199,7 @@ export class RandomGen7Teams extends RandomGen8Teams {
if (move.priority > 0) counter.add('priority');
}
// Moves with secondary effects:
if (move.secondary || move.hasSheerForce) {
if (move.secondary || move.hasSheerForceBoost) {
counter.add('sheerforce');
if (sereneGraceBenefits(move)) {
counter.add('serenegrace');

View File

@ -433,7 +433,7 @@ export class RandomTeams {
}
}
// Moves with secondary effects:
if (move.secondary || move.hasSheerForce) {
if (move.secondary || move.hasSheerForceBoost) {
counter.add('sheerforce');
if (sereneGraceBenefits(move)) {
counter.add('serenegrace');

View File

@ -754,7 +754,9 @@ export const commands: Chat.ChatCommands = {
const pastGensOnly = (move.isNonstandard === "Past" && dex.gen >= 8) ||
(move.isNonstandard === "Gigantamax" && dex.gen !== 8);
if (pastGensOnly) details["&#10007; Past Gens Only"] = "";
if (move.secondary || move.secondaries || move.hasSheerForce) details["&#10003; Boosted by Sheer Force"] = "";
if (move.secondary || move.secondaries || move.hasSheerForceBoost) {
details["&#10003; Boosted by Sheer Force"] = "";
}
if (move.flags['contact'] && dex.gen >= 3) details["&#10003; Contact"] = "";
if (move.flags['sound'] && dex.gen >= 3) details["&#10003; Sound"] = "";
if (move.flags['bullet'] && dex.gen >= 6) details["&#10003; Bullet"] = "";

View File

@ -2118,7 +2118,7 @@ function runMovesearch(target: string, cmd: string, message: string, isTest: boo
for (const flag in alts.flags) {
if (flag === 'secondary') {
if (!(move.secondary || move.secondaries || move.hasSheerForce) === !alts.flags[flag]) {
if (!(move.secondary || move.secondaries || move.hasSheerForceBoost) === !alts.flags[flag]) {
matched = true;
break;
}

View File

@ -52,7 +52,9 @@ class SSBMoveHTML extends Chat.JSX.Component<{ sigMove: Move, dex: ModdedDex }>
};
if (sigMove.isNonstandard === "Past" && dex.gen >= 8) details["Past Gens Only"] = "x";
if (sigMove.secondary || sigMove.secondaries || sigMove.hasSheerForce) details["Boosted by Sheer Force"] = "";
if (sigMove.secondary || sigMove.secondaries || sigMove.hasSheerForceBoost) {
details["Boosted by Sheer Force"] = "";
}
if (sigMove.flags['contact'] && dex.gen >= 3) details["Contact"] = "";
if (sigMove.flags['sound'] && dex.gen >= 3) details["Sound"] = "";
if (sigMove.flags['bullet'] && dex.gen >= 6) details["Bullet"] = "";

View File

@ -70,7 +70,7 @@ export interface HitEffect {
onHit?: MoveEventMethods['onHit'];
// set pokemon conditions
boosts?: SparseBoostsTable | null;
boosts?: SparseBoostsTable;
status?: string;
volatileStatus?: string;
@ -190,7 +190,7 @@ export interface MoveData extends EffectData, MoveEventMethods, HitEffect {
// -----------
ohko?: boolean | 'Ice';
thawsTarget?: boolean;
heal?: number[] | null;
heal?: number[];
forceSwitch?: boolean;
selfSwitch?: 'copyvolatile' | 'shedtail' | boolean;
selfBoost?: { boosts?: SparseBoostsTable };
@ -207,10 +207,13 @@ export interface MoveData extends EffectData, MoveEventMethods, HitEffect {
mindBlownRecoil?: boolean;
stealsBoosts?: boolean;
struggleRecoil?: boolean;
secondary?: SecondaryEffect | null;
secondaries?: SecondaryEffect[] | null;
self?: SecondaryEffect | null;
hasSheerForce?: boolean;
secondary?: SecondaryEffect;
secondaries?: SecondaryEffect[];
self?: SecondaryEffect;
/**
* Boosted by Sheer Force without suppressing secondary effects.
*/
hasSheerForceBoost?: boolean;
dustproof?: boolean;
// Hit effect modifiers
@ -378,18 +381,18 @@ export class DataMove extends BasicEffect implements Readonly<BasicEffect & Move
* Secondary effect. You usually don't want to access this
* directly; but through the secondaries array.
*/
readonly secondary: SecondaryEffect | null;
readonly secondary?: SecondaryEffect;
/**
* Secondary effects. An array because there can be more than one
* (for instance, Fire Fang has both a burn and a flinch
* secondary).
*/
readonly secondaries: SecondaryEffect[] | null;
readonly secondaries?: SecondaryEffect[];
/**
* Moves manually boosted by Sheer Force that don't have secondary effects.
* e.g. Jet Punch
* Moves manually boosted by Sheer Force.
* e.g. Electro Shot and Order Up.
*/
readonly hasSheerForce: boolean;
readonly hasSheerForceBoost: boolean;
/**
* Immune to Shield Dust and Covert Cloak if the move hits multiple targets
*/
@ -489,9 +492,9 @@ export class DataMove extends BasicEffect implements Readonly<BasicEffect & Move
this.accuracy = data.accuracy!;
this.critRatio = Number(data.critRatio) || 1;
this.baseMoveType = Utils.getString(data.baseMoveType) || this.type;
this.secondary = data.secondary || null;
this.secondaries = data.secondaries || (this.secondary && [this.secondary]) || null;
this.hasSheerForce = !!(data.hasSheerForce && !this.secondaries);
this.secondary = data.secondary || undefined;
this.secondaries = data.secondaries || (this.secondary && [this.secondary]) || undefined;
this.hasSheerForceBoost = data.hasSheerForceBoost || false;
this.dustproof = data.dustproof;
this.priority = Number(data.priority) || 0;
this.category = data.category!;

View File

@ -2177,6 +2177,7 @@ export class Pokemon {
case 'primordialsea':
if (this.hasItem('utilityumbrella')) return '';
}
if (this.hasAbility('megasol') && this.battle.activePokemon === this) return 'sunnyday';
return weather;
}

View File

@ -112,6 +112,11 @@ export class PokemonSources {
* Used to deal with compatibility issues for prevo/evo-exclusive moves
*/
learnsetDomain?: string[] | null;
/**
* A list of moves which are incompatible with a Pokemon GO origin,
* used to generate error messages
*/
goIncompatibleMoves?: string[];
/**
* Some Pokemon evolve by having a move in their learnset (like Piloswine
* with Ancient Power). These can only carry three other moves from their
@ -311,6 +316,16 @@ export class PokemonSources {
this.dreamWorldMoveCount += other.dreamWorldMoveCount;
if (other.sourcesAfter > this.sourcesAfter) this.sourcesAfter = other.sourcesAfter;
if (other.isHidden) this.isHidden = true;
if (other.sourcesBefore < 8 && !other.sources.some(source => source === '8V') && this.restrictiveMoves) {
this.addGoIncompatibleMove(this.restrictiveMoves[this.restrictiveMoves.length - 1]);
}
}
addGoIncompatibleMove(move: string) {
if (!this.goIncompatibleMoves) this.goIncompatibleMoves = [];
if (move) this.goIncompatibleMoves.push(move);
this.isFromPokemonGo = false;
}
}
@ -854,6 +869,16 @@ export class TeamValidator {
if (ruleTable.has('obtainablemoves')) {
moveProblems = this.validateMoves(outOfBattleSpecies, set.moves, setSources, set, name, moveLegalityWhitelist);
problems.push(...moveProblems);
const incompatibleMoves = setSources.goIncompatibleMoves;
if (pokemonGoProblems && incompatibleMoves) {
if (incompatibleMoves?.length) {
pokemonGoProblems.push(`${name}'s move${incompatibleMoves.length === 1 ? `` : `s`} ${incompatibleMoves.join(`, `)} ` +
`${incompatibleMoves.length === 1 ? `is` : `are`} incompatible with a Pokemon GO origin.`);
} else {
pokemonGoProblems.push(`${name} has moves which are incompatible with a Pokemon GO origin.`);
}
}
}
let eventOnlyData;
@ -1005,7 +1030,6 @@ export class TeamValidator {
// Hardcoded forced validation for Pokemon GO
const pokemonGoOnlySpecies = ['meltan', 'melmetal', 'gimmighoulroaming'];
if (ruleTable.has('obtainablemisc') && (pokemonGoOnlySpecies.includes(species.id))) {
setSources.isFromPokemonGo = true;
if (pokemonGoProblems?.length) {
problems.push(`${name} is only obtainable from Pokemon GO, and failed to validate because:`);
for (const pokemonGoProblem of pokemonGoProblems) {
@ -1014,17 +1038,6 @@ export class TeamValidator {
}
}
// Attempt move validation again after verifying Pokemon GO origin
if (ruleTable.has('obtainablemoves') && setSources.isFromPokemonGo) {
setSources.restrictiveMoves = [];
setSources.sources = ['8V'];
setSources.sourcesBefore = 0;
if (moveProblems && !moveProblems.length) {
problems.push(...this.validateMoves(outOfBattleSpecies, set.moves, setSources, set, name,
moveLegalityWhitelist));
}
}
if (ruleTable.has('obtainablemoves')) {
if (species.id === 'keldeo' && set.moves.includes('secretsword') && this.minSourceGen > 5 && dex.gen <= 7) {
problems.push(`${name} has Secret Sword, which is only compatible with Keldeo-Ordinary obtained from Gen 5.`);
@ -2359,9 +2372,11 @@ export class TeamValidator {
if (otherProblems) {
problems = otherProblems;
} else {
setSources.isFromPokemonGo = false;
return null;
}
} else {
setSources.isFromPokemonGo = false;
return null;
}
} else {
@ -2655,8 +2670,7 @@ export class TeamValidator {
} else if (this.ruleTable.has('pomegglitchclause') && level >= 5 && learnedGen === 3 && species.canHatch) {
// Pomeg Glitch
learned = `${learnedGen}Epomeg` as MoveSource;
} else if (species.gender !== 'N' &&
learnedGen >= 2 && species.canHatch && !setSources.isFromPokemonGo) {
} else if (species.gender !== 'N' && learnedGen >= 2 && species.canHatch) {
// available as egg move
if (species.gender === 'M' && !this.motherCanLearn(toID(species.mother), moveid)) {
// male-only Pokemon can have level-up egg moves if it can have a mother that learns the move
@ -2678,10 +2692,8 @@ export class TeamValidator {
if (learnedGen === dex.gen && learned.charAt(1) !== 'R') {
// current-gen level-up, TM or tutor moves:
// always available
if (!(learnedGen >= 8 && learned.charAt(1) === 'E') && babyOnly &&
setSources.isFromPokemonGo && species.evoLevel) {
cantLearnReason = `is from a prevo, which is incompatible with its Pokemon GO origin.`;
continue;
if (!(learnedGen >= 8 && learned.charAt(1) === 'E') && babyOnly && species.evoLevel) {
setSources.addGoIncompatibleMove(move.name);
}
if (!moveSources.moveEvoCarryCount && !babyOnly) return null;
}
@ -2740,9 +2752,8 @@ export class TeamValidator {
} else if (learned.charAt(1) === 'V' && this.minSourceGen < learnedGen) {
// Virtual Console or Let's Go transfer moves:
// only if that was the source
if (learned === '8V' && setSources.isFromPokemonGo && babyOnly && species.evoLevel) {
cantLearnReason = `is from a prevo, which is incompatible with its Pokemon GO origin.`;
continue;
if (learned === '8V' && babyOnly && species.evoLevel) {
setSources.addGoIncompatibleMove(move.name);
}
moveSources.add(learned);
}
@ -2822,8 +2833,7 @@ export class TeamValidator {
}
const checkedSpecies = babyOnly ? fullLearnset[fullLearnset.length - 1].species : baseSpecies;
if (checkedSpecies && setSources.isFromPokemonGo &&
(setSources.pokemonGoSource === 'purified' || checkedSpecies.id === 'mew')) {
if (checkedSpecies && (setSources.pokemonGoSource === 'purified' || checkedSpecies.id === 'mew')) {
// Pokemon that cannot be sent from Pokemon GO to Let's Go can only access Let's Go moves through HOME
// It can only obtain a chain of four level up moves and cannot have TM moves
const pokemonGoData = dex.species.getPokemonGoData(checkedSpecies.id);
@ -2836,10 +2846,8 @@ export class TeamValidator {
for (const restrictiveMove in pokemonGoData.LGPERestrictiveMoves) {
const moveLevel = pokemonGoData.LGPERestrictiveMoves[restrictiveMove];
if (toID(move) === restrictiveMove) {
if (!moveLevel) {
return `'s move ${move.name} is incompatible with its Pokemon GO origin.`;
} else if (set.level && set.level < moveLevel) {
return ` must be at least level ${moveLevel} to learn ${move.name} due to its Pokemon GO origin.`;
if (!moveLevel || (set.level && set.level < moveLevel)) {
setSources.addGoIncompatibleMove(move.name);
}
}
if (levelUpMoveCount) levelUpMoveCount++;
@ -2847,7 +2855,8 @@ export class TeamValidator {
if (!levelUpMoveCount) {
levelUpMoveCount++;
} else if (levelUpMoveCount > 4) {
return `'s moves ${(setSources.restrictiveMoves || []).join(', ')} are incompatible with its Pokemon GO origin.`;
// Moves which are only incompatible when together
setSources.addGoIncompatibleMove('');
}
}
}
@ -2901,7 +2910,6 @@ export class TeamValidator {
// prevents a crash if OMs override `checkCanLearn` to keep validating after an error
setSources.sources = backupSources;
setSources.sourcesBefore = backupSourcesBefore;
if (setSources.isFromPokemonGo) return `'s move ${move.name} is incompatible with its Pokemon GO origin.`;
return `'s moves ${(setSources.restrictiveMoves || []).join(', ')} are incompatible.`;
}

View File

@ -83,7 +83,7 @@ describe(`Poison Touch`, () => {
battle.onEvent('ModifyMove', battle.format, -99, move => {
if (move.id === 'falseswipe') {
// If False Swipe had a psn secondary, it would have a 60% chance to activate
assert.equal(move.secondaries, null);
assert.equal(move.secondaries, undefined);
}
});

View File

@ -10,7 +10,7 @@ describe('Order Up', () => {
battle.destroy();
});
it.skip(`should boost Dondozo's stat even if Sheer Force-boosted`, () => {
it(`should boost Dondozo's stat even if Sheer Force-boosted`, () => {
battle = common.createBattle({ gameType: 'doubles' }, [[
{ species: 'wynaut', moves: ['sleeptalk'] },
{ species: 'mew', ability: 'shellarmor', moves: ['sleeptalk'] },