diff --git a/data/mods/earthsky/abilities.ts b/data/mods/earthsky/abilities.ts index 54bff9821a..6edfac8307 100644 --- a/data/mods/earthsky/abilities.ts +++ b/data/mods/earthsky/abilities.ts @@ -3305,6 +3305,19 @@ export const Abilities: {[abilityid: string]: ModdedAbilityData} = { } }, }, + cutecharm: { + onHit(target, source, move) { + if (this.checkMoveMakesContact(move, source, target)) { + if (this.randomChance(3, 10)) { + source.addVolatile('attract', this.effectState.target); + } + } + }, + flags: {}, + name: "Cute Charm", + rating: 0.5, + num: 56, + }, dazzling: { onFoeTryMove(source, target, move) { if (move.target === 'foeSide' || (move.target === 'all' && move.id !== 'perishsong')) { @@ -3323,6 +3336,37 @@ export const Abilities: {[abilityid: string]: ModdedAbilityData} = { rating: 2.5, num: 219, }, + effectspore: { + onHit(target, source, move) { + if (this.checkMoveMakesContact(move, source, target) && !source.status && source.runStatusImmunity('powder')) { + const r = this.random(100); + if (r < 11) { + source.setStatus('slp', target); + } else if (r < 21) { + source.setStatus('par', target); + } else if (r < 30) { + source.setStatus('psn', target); + } + } + }, + flags: {}, + name: "Effect Spore", + rating: 2, + num: 27, + }, + flamebody: { + onHit(target, source, move) { + if (this.checkMoveMakesContact(move, source, target)) { + if (this.randomChance(3, 10)) { + source.trySetStatus('brn', target); + } + } + }, + flags: {}, + name: "Flame Body", + rating: 2, + num: 49, + }, fullmetalbody: { onChangeBoost(boost, target, source, effect) { if (source && target === source) return; @@ -3352,6 +3396,18 @@ export const Abilities: {[abilityid: string]: ModdedAbilityData} = { rating: 2, num: 230, }, + gooey: { + onHit(target, source, move) { + if (this.checkMoveMakesContact(move, source, target, true)) { + this.add('-ability', target, 'Gooey'); + this.boost({spe: -1}, source, target, null, true); + } + }, + flags: {}, + name: "Gooey", + rating: 2, + num: 183, + }, imposter: { onSwitchIn(pokemon) { this.effectState.switchingIn = true; @@ -3375,6 +3431,36 @@ export const Abilities: {[abilityid: string]: ModdedAbilityData} = { num: 150, flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1}, }, + ironbarbs: { + onHitOrder: 1, + onHit(target, source, move) { + if (this.checkMoveMakesContact(move, source, target, true)) { + this.damage(source.baseMaxhp / 8, source, target); + } + }, + flags: {}, + name: "Iron Barbs", + rating: 2.5, + num: 160, + }, + mummy: { + onHit(target, source, move) { + const sourceAbility = source.getAbility(); + if (sourceAbility.flags['cantsuppress'] || sourceAbility.id === 'mummy') { + return; + } + if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) { + const oldAbility = source.setAbility('mummy', target); + if (oldAbility) { + this.add('-activate', target, 'ability: Mummy', this.dex.abilities.get(oldAbility).name, '[of] ' + source); + } + } + }, + flags: {}, + name: "Mummy", + rating: 2, + num: 152, + }, neutralizinggas: { inherit: true, onPreStart(pokemon) { @@ -3437,6 +3523,46 @@ export const Abilities: {[abilityid: string]: ModdedAbilityData} = { }, desc: "When an opposing Pokemon has a stat stage raised, this Pokemon copies the effect, unless the opponent has the Own Tempo Ability or was already copying the boost through Opportunist or a held Mirror Herb.", }, + poisonpoint: { + onHit(target, source, move) { + if (this.checkMoveMakesContact(move, source, target)) { + if (this.randomChance(3, 10)) { + source.trySetStatus('psn', target); + } + } + }, + flags: {}, + name: "Poison Point", + rating: 1.5, + num: 38, + }, + poisontouch: { + onSourceHit(damage, target, source, move) { + // Despite not being a secondary, Shield Dust / Covert Cloak block Poison Touch's effect + if (target.hasAbility('shielddust') || target.hasItem('covertcloak')) return; + if (this.checkMoveMakesContact(move, target, source)) { + if (this.randomChance(3, 10)) { + target.trySetStatus('psn', source); + } + } + }, + flags: {}, + name: "Poison Touch", + rating: 2, + num: 143, + }, + roughskin: { + onHitOrder: 1, + onHit(target, source, move) { + if (this.checkMoveMakesContact(move, source, target, true)) { + this.damage(source.baseMaxhp / 8, source, target); + } + }, + flags: {}, + name: "Rough Skin", + rating: 2.5, + num: 24, + }, scrappy: { inherit: true, onTryBoost(boost, target, source, effect) { @@ -3467,6 +3593,19 @@ export const Abilities: {[abilityid: string]: ModdedAbilityData} = { rating: 3.5, num: 231, }, + static: { + onHit(target, source, move) { + if (this.checkMoveMakesContact(move, source, target)) { + if (this.randomChance(3, 10)) { + source.trySetStatus('par', target); + } + } + }, + flags: {}, + name: "Static", + rating: 2, + num: 9, + }, stickyhold: { onTakeItem(item, pokemon, source) { if (this.suppressingAbility(pokemon) || !pokemon.hp || pokemon.item === 'stickybarb') return; @@ -3515,6 +3654,27 @@ export const Abilities: {[abilityid: string]: ModdedAbilityData} = { rating: 2.5, num: 36, }, + wanderingspirit: { + onHit(target, source, move) { + if (source.getAbility().flags['failskillswap']) return; + if (this.checkMoveMakesContact(move, source, target)) { + const targetCanBeSet = this.runEvent('SetAbility', target, source, this.effect, source.ability); + if (!targetCanBeSet) return targetCanBeSet; + const sourceAbility = source.setAbility('wanderingspirit', target); + if (!sourceAbility) return; + if (target.isAlly(source)) { + this.add('-activate', target, 'Skill Swap', '', '', '[of] ' + source); + } else { + this.add('-activate', target, 'ability: Wandering Spirit', this.dex.abilities.get(sourceAbility).name, 'Wandering Spirit', '[of] ' + source); + } + target.setAbility(sourceAbility); + } + }, + flags: {}, + name: "Wandering Spirit", + rating: 2.5, + num: 254, + }, zenmode: { inherit: true, onResidual(pokemon) { diff --git a/data/mods/earthsky/conditions.ts b/data/mods/earthsky/conditions.ts index a5e2d88282..70fb0b6d12 100644 --- a/data/mods/earthsky/conditions.ts +++ b/data/mods/earthsky/conditions.ts @@ -39,11 +39,11 @@ export const Conditions: {[k: string]: ModdedConditionData} = { onBeforeMovePriority: 10, onBeforeMove(pokemon, target, move) { if (move.flags['defrost'] || (pokemon.volatiles['nointerrupt']?.ignore.includes('frz'))) return; - if (this.randomChance(pokemon.statusData.time, 4)) { + if (this.randomChance(pokemon.statusState.time, 4)) { pokemon.cureStatus(); return; } else if(!pokemon.volatiles['stasis']){ - pokemon.statusData.time++; + pokemon.statusState.time++; } this.add('cant', pokemon, 'frz'); return false; @@ -296,7 +296,7 @@ export const Conditions: {[k: string]: ModdedConditionData} = { if (pokemon.hasAbility('earlybird')) { pokemon.statusState.time--; } - pokemon.statusData.time--; + pokemon.statusState.time--; if (pokemon.statusState.time <= 0) { pokemon.cureStatus(); return; diff --git a/data/mods/earthsky/sprites/back-shiny/chucklava.png b/data/mods/earthsky/sprites/back-shiny/chucklava.png new file mode 100644 index 0000000000..1895078c86 Binary files /dev/null and b/data/mods/earthsky/sprites/back-shiny/chucklava.png differ diff --git a/data/mods/earthsky/sprites/back-shiny/helmuana.png b/data/mods/earthsky/sprites/back-shiny/helmuana.png new file mode 100644 index 0000000000..fb0a17cac4 Binary files /dev/null and b/data/mods/earthsky/sprites/back-shiny/helmuana.png differ diff --git a/data/mods/earthsky/sprites/back-shiny/iguava.png b/data/mods/earthsky/sprites/back-shiny/iguava.png new file mode 100644 index 0000000000..c686275d9f Binary files /dev/null and b/data/mods/earthsky/sprites/back-shiny/iguava.png differ diff --git a/data/mods/earthsky/sprites/back/chucklava.png b/data/mods/earthsky/sprites/back/chucklava.png new file mode 100644 index 0000000000..96d4753c88 Binary files /dev/null and b/data/mods/earthsky/sprites/back/chucklava.png differ diff --git a/data/mods/earthsky/sprites/back/helmuana.png b/data/mods/earthsky/sprites/back/helmuana.png new file mode 100644 index 0000000000..711ba80aaf Binary files /dev/null and b/data/mods/earthsky/sprites/back/helmuana.png differ diff --git a/data/mods/earthsky/sprites/back/iguava.png b/data/mods/earthsky/sprites/back/iguava.png new file mode 100644 index 0000000000..f4c25bcde6 Binary files /dev/null and b/data/mods/earthsky/sprites/back/iguava.png differ diff --git a/data/mods/earthsky/sprites/front-shiny/chucklava.png b/data/mods/earthsky/sprites/front-shiny/chucklava.png new file mode 100644 index 0000000000..87052e5cac Binary files /dev/null and b/data/mods/earthsky/sprites/front-shiny/chucklava.png differ diff --git a/data/mods/earthsky/sprites/front-shiny/helmuana.png b/data/mods/earthsky/sprites/front-shiny/helmuana.png new file mode 100644 index 0000000000..4ed6d65b86 Binary files /dev/null and b/data/mods/earthsky/sprites/front-shiny/helmuana.png differ diff --git a/data/mods/earthsky/sprites/front-shiny/iguava.png b/data/mods/earthsky/sprites/front-shiny/iguava.png new file mode 100644 index 0000000000..b79feb285e Binary files /dev/null and b/data/mods/earthsky/sprites/front-shiny/iguava.png differ diff --git a/data/mods/earthsky/sprites/front/chucklava.png b/data/mods/earthsky/sprites/front/chucklava.png new file mode 100644 index 0000000000..bd6f16f6c1 Binary files /dev/null and b/data/mods/earthsky/sprites/front/chucklava.png differ diff --git a/data/mods/earthsky/sprites/front/helmuana.png b/data/mods/earthsky/sprites/front/helmuana.png new file mode 100644 index 0000000000..baf5102d11 Binary files /dev/null and b/data/mods/earthsky/sprites/front/helmuana.png differ diff --git a/data/mods/earthsky/sprites/front/iguava.png b/data/mods/earthsky/sprites/front/iguava.png new file mode 100644 index 0000000000..6f97402095 Binary files /dev/null and b/data/mods/earthsky/sprites/front/iguava.png differ