Skip to content

Commit

Permalink
Merge branch 'smogon:master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
im-tofa authored Sep 25, 2023
2 parents 4265c40 + 0b58494 commit fbfabf9
Show file tree
Hide file tree
Showing 117 changed files with 125,479 additions and 12,386 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ jobs:

steps:
- uses: actions/checkout@v3
with:
fetch-depth: 100 # assumes PR/push to master is no larger than 100 commits. Other solutions are needlessly complex.

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
Expand Down
1 change: 1 addition & 0 deletions CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ server/chat-plugins/responder.ts @mia-pi-git
server/chat-plugins/rock-paper-scissors.ts @mia-pi-git
server/chat-plugins/sample-teams.ts @KrisXV
server/chat-plugins/scavenger*.ts @xfix @sparkychildcharlie @PartMan7
sever/chat-plugins/teams.ts @mia-pi-git
server/chat-plugins/the-studio.ts @KrisXV
server/chat-plugins/trivia/ @AnnikaCodes
server/chat-plugins/username-prefixes.ts @AnnikaCodes
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,10 @@ Staff
- Andrew Werner [HoeenHero] - Development
- Annika L. [Annika] - Development
- Chris Monsanto [chaos] - Development, Sysadmin
- Leonard Craft III - Research (game mechanics)
- Kris Johnson [Kris] - Development
- Leonard Craft III [DaWoblefet] - Research (game mechanics)
- Mathieu Dias-Martins [Marty-D] - Research (game mechanics), Development
- Mia A [Mia] - Development

Contributors

Expand Down
1,245 changes: 1,003 additions & 242 deletions config/formats.ts

Large diffs are not rendered by default.

166 changes: 148 additions & 18 deletions data/abilities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1102,9 +1102,49 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
target.addVolatile('charge');
},
name: "Electromorphosis",
rating: 2.5,
rating: 3,
num: 280,
},
embodyaspectcornerstone: {
onStart(pokemon) {
if (pokemon.baseSpecies.name === 'Ogerpon-Cornerstone-Tera' && !pokemon.transformed) {
this.boost({def: 1}, pokemon);
}
},
name: "Embody Aspect (Cornerstone)",
rating: 3.5,
num: 304,
},
embodyaspecthearthflame: {
onStart(pokemon) {
if (pokemon.baseSpecies.name === 'Ogerpon-Hearthflame-Tera' && !pokemon.transformed) {
this.boost({atk: 1}, pokemon);
}
},
name: "Embody Aspect (Hearthflame)",
rating: 3.5,
num: 303,
},
embodyaspectteal: {
onStart(pokemon) {
if (pokemon.baseSpecies.name === 'Ogerpon-Teal-Tera' && !pokemon.transformed) {
this.boost({spe: 1}, pokemon);
}
},
name: "Embody Aspect (Teal)",
rating: 3.5,
num: 301,
},
embodyaspectwellspring: {
onStart(pokemon) {
if (pokemon.baseSpecies.name === 'Ogerpon-Wellspring-Tera' && !pokemon.transformed) {
this.boost({spd: 1}, pokemon);
}
},
name: "Embody Aspect (Wellspring)",
rating: 3.5,
num: 302,
},
emergencyexit: {
onEmergencyExit(target) {
if (!this.canSwitch(target.side) || target.forceSwitchFlag || target.switchFlag) return;
Expand Down Expand Up @@ -1557,6 +1597,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
this.boost({atk: 1}, target, target, null, false, true);
}
},
isBreakable: true,
name: "Guard Dog",
rating: 2,
num: 275,
Expand Down Expand Up @@ -1613,7 +1654,6 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
return this.chainModify([5461, 4096]);
}
},
isPermanent: true,
name: "Hadron Engine",
rating: 4.5,
num: 289,
Expand Down Expand Up @@ -1650,9 +1690,17 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
num: 131,
},
heatproof: {
onSourceBasePowerPriority: 18,
onSourceBasePower(basePower, attacker, defender, move) {
onSourceModifyAtkPriority: 6,
onSourceModifyAtk(atk, attacker, defender, move) {
if (move.type === 'Fire') {
this.debug('Heatproof Atk weaken');
return this.chainModify(0.5);
}
},
onSourceModifySpAPriority: 5,
onSourceModifySpA(atk, attacker, defender, move) {
if (move.type === 'Fire') {
this.debug('Heatproof SpA weaken');
return this.chainModify(0.5);
}
},
Expand Down Expand Up @@ -1681,6 +1729,16 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
rating: 0,
num: 118,
},
hospitality: {
onStart(pokemon) {
for (const ally of pokemon.adjacentAllies()) {
this.heal(ally.baseMaxhp / 4, ally, pokemon);
}
},
name: "Hospitality",
rating: 0,
num: 299,
},
hugepower: {
onModifyAtkPriority: 5,
onModifyAtk(atk) {
Expand All @@ -1693,7 +1751,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
hungerswitch: {
onResidualOrder: 29,
onResidual(pokemon) {
if (pokemon.species.baseSpecies !== 'Morpeko' || pokemon.transformed) return;
if (pokemon.species.baseSpecies !== 'Morpeko' || pokemon.transformed || pokemon.terastallized) return;
const targetForme = pokemon.species.name === 'Morpeko' ? 'Morpeko-Hangry' : 'Morpeko';
pokemon.formeChange(targetForme);
},
Expand Down Expand Up @@ -1830,8 +1888,21 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
num: 246,
},
illuminate: {
onTryBoost(boost, target, source, effect) {
if (source && target === source) return;
if (boost.accuracy && boost.accuracy < 0) {
delete boost.accuracy;
if (!(effect as ActiveMove).secondaries) {
this.add("-fail", target, "unboost", "accuracy", "[from] ability: Illuminate", "[of] " + target);
}
}
},
onModifyMove(move) {
move.ignoreEvasion = true;
},
isBreakable: true,
name: "Illuminate",
rating: 0,
rating: 0.5,
num: 35,
},
illusion: {
Expand All @@ -1841,7 +1912,11 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
for (let i = pokemon.side.pokemon.length - 1; i > pokemon.position; i--) {
const possibleTarget = pokemon.side.pokemon[i];
if (!possibleTarget.fainted) {
pokemon.illusion = possibleTarget;
// If Ogerpon is in the last slot while the Illusion Pokemon is Terastallized
// Illusion will not disguise as anything
if (!pokemon.terastallized || possibleTarget.species.baseSpecies !== 'Ogerpon') {
pokemon.illusion = possibleTarget;
}
break;
}
}
Expand Down Expand Up @@ -2354,6 +2429,29 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
rating: 0,
num: 250,
},
mindseye: {
onTryBoost(boost, target, source, effect) {
if (source && target === source) return;
if (boost.accuracy && boost.accuracy < 0) {
delete boost.accuracy;
if (!(effect as ActiveMove).secondaries) {
this.add("-fail", target, "unboost", "accuracy", "[from] ability: Mind's Eye", "[of] " + target);
}
}
},
onModifyMovePriority: -5,
onModifyMove(move) {
move.ignoreEvasion = true;
if (!move.ignoreImmunity) move.ignoreImmunity = {};
if (move.ignoreImmunity !== true) {
move.ignoreImmunity['Fighting'] = true;
move.ignoreImmunity['Normal'] = true;
}
},
name: "Mind's Eye",
rating: 0,
num: 300,
},
minus: {
onModifySpAPriority: 5,
onModifySpA(spa, pokemon) {
Expand Down Expand Up @@ -2771,7 +2869,6 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
return this.chainModify([5461, 4096]);
}
},
isPermanent: true,
name: "Orichalcum Pulse",
rating: 4.5,
num: 288,
Expand Down Expand Up @@ -3013,17 +3110,14 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
num: 38,
},
poisontouch: {
// upokecenter says this is implemented as an added secondary effect
onModifyMove(move) {
if (!move?.flags['contact'] || move.target === 'self') return;
if (!move.secondaries) {
move.secondaries = [];
onSourceDamagingHit(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);
}
}
move.secondaries.push({
chance: 30,
status: 'psn',
ability: this.dex.abilities.get('poisontouch'),
});
},
name: "Poison Touch",
rating: 2,
Expand Down Expand Up @@ -4300,6 +4394,28 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
rating: 1.5,
num: 105,
},
supersweetsyrup: {
onStart(pokemon) {
if (pokemon.syrupTriggered) return;
pokemon.syrupTriggered = true;
this.add('-ability', pokemon, 'Supersweet Syrup');
let activated = false;
for (const target of pokemon.adjacentFoes()) {
if (!activated) {
this.add('-ability', pokemon, 'Supersweet Syrup', 'boost');
activated = true;
}
if (target.volatiles['substitute']) {
this.add('-immune', target);
} else {
this.boost({evasion: -1}, target, pokemon, null, true);
}
}
},
name: "Supersweet Syrup",
rating: 1.5,
num: 306,
},
supremeoverlord: {
onStart(pokemon) {
if (pokemon.side.totalFainted) {
Expand Down Expand Up @@ -4609,6 +4725,19 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
rating: 3,
num: 137,
},
toxicchain: {
onSourceDamagingHit(damage, target, source, move) {
// Despite not being a secondary, Shield Dust / Covert Cloak block Toxic Chain's effect
if (target.hasAbility('shielddust') || target.hasItem('covertcloak')) return;

if (this.randomChance(3, 10)) {
target.trySetStatus('tox', source);
}
},
name: "Toxic Chain",
rating: 4.5,
num: 305,
},
toxicdebris: {
onDamagingHit(damage, target, source, move) {
const side = source.isAlly(target) ? source.side.foe : source.side;
Expand Down Expand Up @@ -5053,6 +5182,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
this.boost({atk: 1}, pokemon, pokemon);
}
},
isBreakable: true,
name: "Wind Rider",
rating: 3.5,
// We do not want Brambleghast to get Infiltrator in Randbats
Expand Down
4 changes: 2 additions & 2 deletions data/aliases.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,8 @@ export const Aliases: {[alias: string]: string} = {
gen6ag: "[Gen 6] Anything Goes",
crossevo: "[Gen 9] Cross Evolution",
mayhem: "[Gen 9] Random Battle Mayhem",
omotm: "[Gen 9] 350 Cup",
lcotm: "[Gen 9] Bonus Type",
omotm: "[Gen 9] Frantic Fusions",
lcotm: "[Gen 7] Pure Hackmons",

// mega evos
fabio: "Ampharos-Mega",
Expand Down
Loading

0 comments on commit fbfabf9

Please sign in to comment.