From c9ca46daf641633b61988d46cbaff46bcce5ea13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?= Date: Thu, 9 Jan 2025 06:40:06 +0000 Subject: [PATCH 1/7] Refactor details code --- data/abilities.ts | 3 +-- data/mods/gen7pokebilities/scripts.ts | 3 +-- data/mods/gen9ssb/abilities.ts | 3 +-- data/mods/gen9ssb/moves.ts | 6 ++---- data/mods/gen9ssb/scripts.ts | 6 ++---- data/mods/mixandmega/scripts.ts | 6 ++---- data/mods/pokebilities/scripts.ts | 3 +-- sim/battle-actions.ts | 2 +- sim/battle.ts | 3 +-- sim/pokemon.ts | 28 ++++++++++++++------------- 10 files changed, 27 insertions(+), 36 deletions(-) diff --git a/data/abilities.ts b/data/abilities.ts index 8048f5204e6c..4a2d0449a685 100644 --- a/data/abilities.ts +++ b/data/abilities.ts @@ -2030,8 +2030,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = { if (pokemon.illusion) { this.debug('illusion cleared'); pokemon.illusion = null; - const details = pokemon.species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + - (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); + const details = pokemon.getSimpleDetails(); this.add('replace', pokemon, details); this.add('-end', pokemon, 'Illusion'); if (this.ruleTable.has('illusionlevelmod')) { diff --git a/data/mods/gen7pokebilities/scripts.ts b/data/mods/gen7pokebilities/scripts.ts index b0199e4bad6b..b74ad6949f05 100644 --- a/data/mods/gen7pokebilities/scripts.ts +++ b/data/mods/gen7pokebilities/scripts.ts @@ -169,8 +169,7 @@ export const Scripts: ModdedBattleScriptsData = { this.illusion ? this.illusion.species.name : species.baseSpecies; if (isPermanent) { this.baseSpecies = rawSpecies; - this.details = species.name + (this.level === 100 ? '' : ', L' + this.level) + - (this.gender === '' ? '' : ', ' + this.gender) + (this.set.shiny ? ', shiny' : ''); + this.details = this.getSimpleDetails(); this.battle.add('detailschange', this, (this.illusion || this).details); if (source.effectType === 'Item') { this.canTerastallize = null; // National Dex behavior diff --git a/data/mods/gen9ssb/abilities.ts b/data/mods/gen9ssb/abilities.ts index badd191ed69f..11e74ec300a7 100644 --- a/data/mods/gen9ssb/abilities.ts +++ b/data/mods/gen9ssb/abilities.ts @@ -1755,8 +1755,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa target.clearBoosts(); this.add('-clearboost', target); this.boost({atk: 1, def: -1, spa: 1, spd: -1, spe: 1}); - const details = target.species.name + (target.level === 100 ? '' : ', L' + target.level) + - (target.gender === '' ? '' : ', ' + target.gender) + (target.set.shiny ? ', shiny' : ''); + const details = target.getSimpleDetails(); target.details = details; this.add('replace', target, details); } diff --git a/data/mods/gen9ssb/moves.ts b/data/mods/gen9ssb/moves.ts index 35c1284202f1..fd2d9e278187 100644 --- a/data/mods/gen9ssb/moves.ts +++ b/data/mods/gen9ssb/moves.ts @@ -4236,8 +4236,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { pokemon.cureStatus(); this.boost({def: 1, spd: 1}); (pokemon as any).level += 5; - pokemon.details = pokemon.species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + - (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); + pokemon.details = pokemon.getSimpleDetails(); this.add('-anim', pokemon, 'Geomancy', pokemon); this.add('replace', pokemon, pokemon.details); this.add('-message', `${pokemon.name} gained 5 levels!`); @@ -5905,8 +5904,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { this.add(`c:|${getName((source.illusion || source).name)}|lol never do that ever again thanks`); this.add('custom', '-endterastallize', pokemon); delete pokemon.terastallized; - const details = pokemon.species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + - (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); + const details = pokemon.getSimpleDetails(); this.add('detailschange', pokemon, details); } }, diff --git a/data/mods/gen9ssb/scripts.ts b/data/mods/gen9ssb/scripts.ts index 3fe0e55a73b8..98f8877ce552 100644 --- a/data/mods/gen9ssb/scripts.ts +++ b/data/mods/gen9ssb/scripts.ts @@ -89,8 +89,7 @@ export function changeSet(context: Battle, pokemon: Pokemon, newSet: SSBSet, cha pokemon.teraType = newSet.teraType === 'Any' ? context.sample(allTypes) : Array.isArray(newSet.teraType) ? context.sample(newSet.teraType) : newSet.teraType; } - const details = pokemon.species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + - (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); + const details = pokemon.getSimpleDetails(); if (oldShiny !== pokemon.set.shiny || oldGender !== pokemon.gender) context.add('replace', pokemon, details); if (changeAbility) pokemon.setAbility(newSet.ability as string, undefined, true); @@ -386,8 +385,7 @@ export const Scripts: ModdedBattleScriptsData = { const species = pokemon.setSpecies(rawSpecies); if (!species) continue; pokemon.baseSpecies = rawSpecies; - pokemon.details = species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + - (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); + pokemon.details = pokemon.getSimpleDetails(); // pokemon.setAbility(species.abilities['0'], null, true); // pokemon.baseAbility = pokemon.ability; diff --git a/data/mods/mixandmega/scripts.ts b/data/mods/mixandmega/scripts.ts index a687f445ba51..2bed1943aac2 100644 --- a/data/mods/mixandmega/scripts.ts +++ b/data/mods/mixandmega/scripts.ts @@ -67,8 +67,7 @@ export const Scripts: ModdedBattleScriptsData = { const species = pokemon.setSpecies(rawSpecies); if (!species) continue; pokemon.baseSpecies = rawSpecies; - pokemon.details = species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + - (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); + pokemon.details = pokemon.getSimpleDetails(); pokemon.ability = this.toID(species.abilities['0']); pokemon.baseAbility = pokemon.ability; } @@ -118,8 +117,7 @@ export const Scripts: ModdedBattleScriptsData = { const species = pokemon.setSpecies(rawSpecies); if (!species) continue; pokemon.baseSpecies = rawSpecies; - pokemon.details = species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + - (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); + pokemon.details = pokemon.getSimpleDetails(); pokemon.ability = this.toID(species.abilities['0']); pokemon.baseAbility = pokemon.ability; diff --git a/data/mods/pokebilities/scripts.ts b/data/mods/pokebilities/scripts.ts index e9564991a2ac..ecc2cf98647d 100644 --- a/data/mods/pokebilities/scripts.ts +++ b/data/mods/pokebilities/scripts.ts @@ -169,8 +169,7 @@ export const Scripts: ModdedBattleScriptsData = { this.illusion ? this.illusion.species.name : species.baseSpecies; if (isPermanent) { this.baseSpecies = rawSpecies; - this.details = species.name + (this.level === 100 ? '' : ', L' + this.level) + - (this.gender === '' ? '' : ', ' + this.gender) + (this.set.shiny ? ', shiny' : ''); + this.details = this.getSimpleDetails(); this.battle.add('detailschange', this, (this.illusion || this).details); if (source.effectType === 'Item') { this.canTerastallize = null; // National Dex behavior diff --git a/sim/battle-actions.ts b/sim/battle-actions.ts index 4128c3f85d54..ad8e9eafd707 100644 --- a/sim/battle-actions.ts +++ b/sim/battle-actions.ts @@ -1959,7 +1959,7 @@ export class BattleActions { } if (pokemon.species.baseSpecies === 'Morpeko') { pokemon.baseSpecies = pokemon.species; - pokemon.details = pokemon.details.replace('Morpeko', pokemon.species.name); + pokemon.details = pokemon.getSimpleDetails(); } this.battle.runEvent('AfterTerastallization', pokemon); } diff --git a/sim/battle.ts b/sim/battle.ts index dba8f006b52c..c640928ae22b 100644 --- a/sim/battle.ts +++ b/sim/battle.ts @@ -2494,8 +2494,7 @@ export class Battle { const species = pokemon.setSpecies(rawSpecies); if (!species) continue; pokemon.baseSpecies = rawSpecies; - pokemon.details = species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + - (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); + pokemon.details = pokemon.getSimpleDetails(); pokemon.setAbility(species.abilities['0'], null, true); pokemon.baseAbility = pokemon.ability; diff --git a/sim/pokemon.ts b/sim/pokemon.ts index bb954c86b7d5..18199a15b0d2 100644 --- a/sim/pokemon.ts +++ b/sim/pokemon.ts @@ -353,8 +353,7 @@ export class Pokemon { this.position = 0; let displayedSpeciesName = this.species.name; if (displayedSpeciesName === 'Greninja-Bond') displayedSpeciesName = 'Greninja'; - this.details = displayedSpeciesName + (this.level === 100 ? '' : ', L' + this.level) + - (this.gender === '' ? '' : ', ' + this.gender) + (this.set.shiny ? ', shiny' : ''); + this.details = this.getSimpleDetails(displayedSpeciesName); this.status = ''; this.statusState = {}; @@ -509,17 +508,21 @@ export class Pokemon { return this.isActive ? this.getSlot() + fullname.slice(2) : fullname; } + getSimpleDetails(displayedSpeciesName: string | null = null, illusionDetails = false) { + let name = displayedSpeciesName || this.species.name; + let level = this.level; + if (illusionDetails && this.illusion) { + if (this.battle.ruleTable.has('illusionlevelmod')) level = this.illusion.level; + name = this.illusion.species.name; + if (name === 'Greninja-Bond') name = 'Greninja'; + } + return name + (level === 100 ? '' : ', L' + level) + + (this.gender === '' ? '' : ', ' + this.gender) + (this.set.shiny ? ', shiny' : ''); + } + getDetails = () => { const health = this.getHealth(); - let details = this.details; - if (this.illusion) { - const level = this.battle.ruleTable.has('illusionlevelmod') ? this.illusion.level : this.level; - let displayedSpeciesName = this.illusion.species.name; - if (displayedSpeciesName === 'Greninja-Bond') displayedSpeciesName = 'Greninja'; - const illusionDetails = displayedSpeciesName + (level === 100 ? '' : ', L' + level) + - (this.illusion.gender === '' ? '' : ', ' + this.illusion.gender) + (this.illusion.set.shiny ? ', shiny' : ''); - details = illusionDetails; - } + let details = this.getSimpleDetails(null, true); if (this.terastallized) details += `, tera:${this.terastallized}`; return {side: health.side, secret: `${details}|${health.secret}`, shared: `${details}|${health.shared}`}; }; @@ -1387,8 +1390,7 @@ export class Pokemon { this.illusion ? this.illusion.species.name : species.baseSpecies; if (isPermanent) { this.baseSpecies = rawSpecies; - this.details = species.name + (this.level === 100 ? '' : ', L' + this.level) + - (this.gender === '' ? '' : ', ' + this.gender) + (this.set.shiny ? ', shiny' : ''); + this.details = this.getSimpleDetails(); let details = (this.illusion || this).details; if (this.terastallized) details += `, tera:${this.terastallized}`; this.battle.add('detailschange', this, details); From 375ecc077ba578c747e485f54ba5dc4f50ee158d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?= Date: Thu, 9 Jan 2025 06:58:58 +0000 Subject: [PATCH 2/7] Fainted forme regression --- sim/battle.ts | 11 ++++++ sim/pokemon.ts | 3 +- test/sim/moves/revivalblessing.js | 64 +++++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+), 2 deletions(-) diff --git a/sim/battle.ts b/sim/battle.ts index c640928ae22b..1b033e3db1db 100644 --- a/sim/battle.ts +++ b/sim/battle.ts @@ -2375,6 +2375,17 @@ export class Battle { pokemon.illusion = null; pokemon.isActive = false; pokemon.isStarted = false; + if ( + (pokemon.terastallized && ['Ogerpon', 'Terapagos'].includes(pokemon.baseSpecies.baseSpecies)) || + pokemon.baseSpecies.isMega + ) { + const baseSpecies = this.dex.species.get(pokemon.set.species || pokemon.set.name); + pokemon.setSpecies(baseSpecies); + pokemon.baseSpecies = baseSpecies; + pokemon.baseAbility = pokemon.ability = toID(pokemon.set.ability); + pokemon.details = pokemon.getSimpleDetails(); + this.add('detailschange', pokemon, (pokemon.illusion || pokemon).details, '[silent]'); + } delete pokemon.terastallized; pokemon.side.faintedThisTurn = pokemon; if (this.faintQueue.length >= faintQueueLeft) checkWin = true; diff --git a/sim/pokemon.ts b/sim/pokemon.ts index 18199a15b0d2..2d58191e2c00 100644 --- a/sim/pokemon.ts +++ b/sim/pokemon.ts @@ -1323,8 +1323,7 @@ export class Pokemon { // Pokemon transformed into Ogerpon cannot Terastallize // restoring their ability to tera after they untransform is handled ELSEWHERE - if (this.species.baseSpecies === 'Ogerpon' && this.canTerastallize) this.canTerastallize = false; - if (this.species.baseSpecies === 'Terapagos' && this.canTerastallize) this.canTerastallize = false; + if (['Ogerpon', 'Terapagos'].includes(this.species.baseSpecies) && this.canTerastallize) this.canTerastallize = false; return true; } diff --git a/test/sim/moves/revivalblessing.js b/test/sim/moves/revivalblessing.js index 20380a11917f..9f00b2d25dab 100644 --- a/test/sim/moves/revivalblessing.js +++ b/test/sim/moves/revivalblessing.js @@ -82,4 +82,68 @@ describe('Revival Blessing', function () { battle.makeChoices('switch 2', ''); assert.equal(battle.p1.active[1].boosts.evasion, 0, "Lycanroc should not have used Double Team"); }); + + it(`should revert Ogerpon-Tera back to Ogerpon after being revived`, () => { + battle = common.createBattle([[ + {species: 'ogerponwellspring', ability: 'waterabsorb', moves: ['memento']}, + {species: 'pawmot', ability: 'naturalcure', moves: ['revivalblessing']}, + ], [ + {species: 'mareep', ability: 'static', moves: ['sleeptalk']}, + ]]); + const ogerpon = battle.p1.pokemon[0]; + battle.makeChoices('move memento terastallize', 'auto'); + battle.makeChoices('switch pawmot', ''); + battle.makeChoices(); + battle.makeChoices('switch 2', ''); + assert.species(ogerpon, 'Ogerpon-Wellspring'); + assert.equal(ogerpon.ability, 'waterabsorb', `Expected ${ogerpon}'ability to be Water Absorb, not ${ogerpon.baseAbility}`); + }); + + it(`shouldn't revert Terapagos-Terastal back to Terapagos after being revived`, () => { + battle = common.createBattle([[ + {species: 'terapagos', ability: 'terashift', moves: ['memento']}, + {species: 'pawmot', ability: 'naturalcure', moves: ['revivalblessing']}, + ], [ + {species: 'mareep', ability: 'static', moves: ['sleeptalk']}, + ]]); + const terapagos = battle.p1.active[0]; + battle.makeChoices(); + battle.makeChoices('switch pawmot', ''); + battle.makeChoices(); + battle.makeChoices('switch 2', ''); + assert.species(terapagos, 'Terapagos-Terastal'); + assert.equal(terapagos.ability, 'terashell', `Expected ${terapagos}'ability to be Tera Shell, not ${terapagos.ability}`); + }); + + it(`should revert Terapagos-Stellar back to Terapagos after being revived`, () => { + battle = common.createBattle([[ + {species: 'terapagos', ability: 'terashift', moves: ['memento']}, + {species: 'pawmot', ability: 'naturalcure', moves: ['revivalblessing']}, + ], [ + {species: 'mareep', ability: 'static', moves: ['sleeptalk']}, + ]]); + const terapagos = battle.p1.active[0]; + battle.makeChoices('move memento terastallize', 'auto'); + battle.makeChoices('switch pawmot', ''); + battle.makeChoices(); + battle.makeChoices('switch 2', ''); + assert.species(terapagos, 'Terapagos'); + assert.equal(terapagos.ability, 'terashift', `Expected ${terapagos}'ability to be Tera Shift, not ${terapagos.ability}`); + }); + + it(`should revert Mega Evolutions back to their original form after being revived`, () => { + battle = common.createBattle([[ + {species: 'alakazam', ability: 'synchronize', item: 'alakazite', moves: ['memento']}, + {species: 'pawmot', ability: 'naturalcure', moves: ['revivalblessing']}, + ], [ + {species: 'mareep', ability: 'static', moves: ['sleeptalk']}, + ]]); + const alakazam = battle.p1.pokemon[0]; + battle.makeChoices('move memento mega', 'auto'); + battle.makeChoices('switch pawmot', ''); + battle.makeChoices(); + battle.makeChoices('switch 2', ''); + assert.species(alakazam, 'Alakazam'); + assert.equal(alakazam.ability, 'synchronize', `Expected ${alakazam}'ability to be Synchronize, not ${alakazam.baseAbility}`); + }); }); From 5bee8e73ea68d84a83684e51feda42ff3b06b0d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?= Date: Thu, 9 Jan 2025 07:56:31 +0000 Subject: [PATCH 3/7] More logical tests --- test/sim/misc/terapagos.js | 26 +++++++++++++ test/sim/moves/revivalblessing.js | 64 ------------------------------- 2 files changed, 26 insertions(+), 64 deletions(-) diff --git a/test/sim/misc/terapagos.js b/test/sim/misc/terapagos.js index a1276f21a290..23dd92a33895 100644 --- a/test/sim/misc/terapagos.js +++ b/test/sim/misc/terapagos.js @@ -24,6 +24,32 @@ describe(`Terapagos`, function () { assert.false(!!ditto.terastallized); }); + it(`shouldn't revert to Terapagos-Normal if it faints while Terastallized`, function () { + battle = common.createBattle([[ + {species: 'terapagos', ability: 'terashift', moves: ['memento']}, + {species: 'darkrai', moves: ['darkpulse']}, + ], [ + {species: 'mareep', ability: 'static', moves: ['sleeptalk']}, + ]]); + const terapagos = battle.p1.active[0]; + battle.makeChoices(); + assert.species(terapagos, 'Terapagos-Terastal'); + assert.equal(terapagos.ability, 'terashell', `Expected ${terapagos}'ability to be Tera Shell, not ${terapagos.ability}`); + }); + + it(`should revert to Terapagos-Normal if it faints while Terastallized`, function () { + battle = common.createBattle([[ + {species: 'terapagos', ability: 'terashift', moves: ['memento']}, + {species: 'darkrai', moves: ['darkpulse']}, + ], [ + {species: 'mareep', ability: 'static', moves: ['sleeptalk']}, + ]]); + const terapagos = battle.p1.active[0]; + battle.makeChoices('move memento terastallize', 'auto'); + assert.species(terapagos, 'Terapagos'); + assert.equal(terapagos.ability, 'terashift', `Expected ${terapagos}'ability to be Tera Shift, not ${terapagos.ability}`); + }); + it(`[Hackmons] should not cause Terapagos-Terastal to become Terapagos-Stellar if the user is Transformed`, function () { battle = common.createBattle([[ {species: 'terapagos', ability: 'terashift', moves: ['transform'], teraType: 'Stellar'}, diff --git a/test/sim/moves/revivalblessing.js b/test/sim/moves/revivalblessing.js index 9f00b2d25dab..20380a11917f 100644 --- a/test/sim/moves/revivalblessing.js +++ b/test/sim/moves/revivalblessing.js @@ -82,68 +82,4 @@ describe('Revival Blessing', function () { battle.makeChoices('switch 2', ''); assert.equal(battle.p1.active[1].boosts.evasion, 0, "Lycanroc should not have used Double Team"); }); - - it(`should revert Ogerpon-Tera back to Ogerpon after being revived`, () => { - battle = common.createBattle([[ - {species: 'ogerponwellspring', ability: 'waterabsorb', moves: ['memento']}, - {species: 'pawmot', ability: 'naturalcure', moves: ['revivalblessing']}, - ], [ - {species: 'mareep', ability: 'static', moves: ['sleeptalk']}, - ]]); - const ogerpon = battle.p1.pokemon[0]; - battle.makeChoices('move memento terastallize', 'auto'); - battle.makeChoices('switch pawmot', ''); - battle.makeChoices(); - battle.makeChoices('switch 2', ''); - assert.species(ogerpon, 'Ogerpon-Wellspring'); - assert.equal(ogerpon.ability, 'waterabsorb', `Expected ${ogerpon}'ability to be Water Absorb, not ${ogerpon.baseAbility}`); - }); - - it(`shouldn't revert Terapagos-Terastal back to Terapagos after being revived`, () => { - battle = common.createBattle([[ - {species: 'terapagos', ability: 'terashift', moves: ['memento']}, - {species: 'pawmot', ability: 'naturalcure', moves: ['revivalblessing']}, - ], [ - {species: 'mareep', ability: 'static', moves: ['sleeptalk']}, - ]]); - const terapagos = battle.p1.active[0]; - battle.makeChoices(); - battle.makeChoices('switch pawmot', ''); - battle.makeChoices(); - battle.makeChoices('switch 2', ''); - assert.species(terapagos, 'Terapagos-Terastal'); - assert.equal(terapagos.ability, 'terashell', `Expected ${terapagos}'ability to be Tera Shell, not ${terapagos.ability}`); - }); - - it(`should revert Terapagos-Stellar back to Terapagos after being revived`, () => { - battle = common.createBattle([[ - {species: 'terapagos', ability: 'terashift', moves: ['memento']}, - {species: 'pawmot', ability: 'naturalcure', moves: ['revivalblessing']}, - ], [ - {species: 'mareep', ability: 'static', moves: ['sleeptalk']}, - ]]); - const terapagos = battle.p1.active[0]; - battle.makeChoices('move memento terastallize', 'auto'); - battle.makeChoices('switch pawmot', ''); - battle.makeChoices(); - battle.makeChoices('switch 2', ''); - assert.species(terapagos, 'Terapagos'); - assert.equal(terapagos.ability, 'terashift', `Expected ${terapagos}'ability to be Tera Shift, not ${terapagos.ability}`); - }); - - it(`should revert Mega Evolutions back to their original form after being revived`, () => { - battle = common.createBattle([[ - {species: 'alakazam', ability: 'synchronize', item: 'alakazite', moves: ['memento']}, - {species: 'pawmot', ability: 'naturalcure', moves: ['revivalblessing']}, - ], [ - {species: 'mareep', ability: 'static', moves: ['sleeptalk']}, - ]]); - const alakazam = battle.p1.pokemon[0]; - battle.makeChoices('move memento mega', 'auto'); - battle.makeChoices('switch pawmot', ''); - battle.makeChoices(); - battle.makeChoices('switch 2', ''); - assert.species(alakazam, 'Alakazam'); - assert.equal(alakazam.ability, 'synchronize', `Expected ${alakazam}'ability to be Synchronize, not ${alakazam.baseAbility}`); - }); }); From e3aa97b8b67f1e7999bb0e6fff686edc6ee85399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?= <80102738+andrebastosdias@users.noreply.github.com> Date: Thu, 9 Jan 2025 08:03:33 +0000 Subject: [PATCH 4/7] Fix test name --- test/sim/misc/terapagos.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/sim/misc/terapagos.js b/test/sim/misc/terapagos.js index 23dd92a33895..64815320878f 100644 --- a/test/sim/misc/terapagos.js +++ b/test/sim/misc/terapagos.js @@ -24,7 +24,7 @@ describe(`Terapagos`, function () { assert.false(!!ditto.terastallized); }); - it(`shouldn't revert to Terapagos-Normal if it faints while Terastallized`, function () { + it(`shouldn't revert to Terapagos-Normal if it faints while not Terastallized`, function () { battle = common.createBattle([[ {species: 'terapagos', ability: 'terashift', moves: ['memento']}, {species: 'darkrai', moves: ['darkpulse']}, From f4fbc24022a23b5baf7130e28af28fc58bb0153a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?= <80102738+andrebastosdias@users.noreply.github.com> Date: Thu, 9 Jan 2025 10:07:41 +0000 Subject: [PATCH 5/7] Simplify details Co-authored-by: pyuk-bot --- sim/battle.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sim/battle.ts b/sim/battle.ts index 1b033e3db1db..9e9224a7a119 100644 --- a/sim/battle.ts +++ b/sim/battle.ts @@ -2384,7 +2384,7 @@ export class Battle { pokemon.baseSpecies = baseSpecies; pokemon.baseAbility = pokemon.ability = toID(pokemon.set.ability); pokemon.details = pokemon.getSimpleDetails(); - this.add('detailschange', pokemon, (pokemon.illusion || pokemon).details, '[silent]'); + this.add('detailschange', pokemon, pokemon.details, '[silent]'); } delete pokemon.terastallized; pokemon.side.faintedThisTurn = pokemon; From f4891c93a620119ca957e79e2016a2a2f8e9ecbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?= Date: Thu, 9 Jan 2025 10:24:14 +0000 Subject: [PATCH 6/7] Revert Morpeko --- sim/battle.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sim/battle.ts b/sim/battle.ts index 9e9224a7a119..38d2a18cb04c 100644 --- a/sim/battle.ts +++ b/sim/battle.ts @@ -2376,7 +2376,7 @@ export class Battle { pokemon.isActive = false; pokemon.isStarted = false; if ( - (pokemon.terastallized && ['Ogerpon', 'Terapagos'].includes(pokemon.baseSpecies.baseSpecies)) || + (pokemon.terastallized && ['Morpeko', 'Ogerpon', 'Terapagos'].includes(pokemon.baseSpecies.baseSpecies)) || pokemon.baseSpecies.isMega ) { const baseSpecies = this.dex.species.get(pokemon.set.species || pokemon.set.name); From bd62d95dc9a56bb2c7271d33782d436b726f0033 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?= Date: Fri, 10 Jan 2025 05:28:13 +0000 Subject: [PATCH 7/7] Add more species --- sim/battle.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sim/battle.ts b/sim/battle.ts index 38d2a18cb04c..28b426ac0dd8 100644 --- a/sim/battle.ts +++ b/sim/battle.ts @@ -2377,7 +2377,8 @@ export class Battle { pokemon.isStarted = false; if ( (pokemon.terastallized && ['Morpeko', 'Ogerpon', 'Terapagos'].includes(pokemon.baseSpecies.baseSpecies)) || - pokemon.baseSpecies.isMega + ['Greninja-Bond', 'Necrozma-Ultra', 'Zygarde-Complete'].includes(pokemon.baseSpecies.baseSpecies) || + pokemon.baseSpecies.isMega || pokemon.baseSpecies.isPrimal ) { const baseSpecies = this.dex.species.get(pokemon.set.species || pokemon.set.name); pokemon.setSpecies(baseSpecies);