mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-06 08:22:16 +02:00
Merge branch 'pagefaultgames:main' into main
This commit is contained in:
commit
bc0048b897
4
.github/workflows/deploy.yml
vendored
4
.github/workflows/deploy.yml
vendored
@ -41,4 +41,6 @@ jobs:
|
|||||||
files: |
|
files: |
|
||||||
https://pokerogue.net/
|
https://pokerogue.net/
|
||||||
https://pokerogue.net/index.html
|
https://pokerogue.net/index.html
|
||||||
https://pokerogue.net/manifest.json
|
https://pokerogue.net/manifest.json
|
||||||
|
https://pokerogue.net/manifest.webmanifest
|
||||||
|
https://pokerogue.net/service-worker.js
|
Binary file not shown.
Before Width: | Height: | Size: 458 B After Width: | Height: | Size: 318 B |
BIN
public/images/ui/achv_bar_5.png
Normal file
BIN
public/images/ui/achv_bar_5.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 458 B |
Binary file not shown.
Before Width: | Height: | Size: 433 B After Width: | Height: | Size: 344 B |
BIN
public/images/ui/legacy/achv_bar_5.png
Normal file
BIN
public/images/ui/legacy/achv_bar_5.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 433 B |
@ -3,8 +3,8 @@
|
|||||||
"short_name": "PokéRogue",
|
"short_name": "PokéRogue",
|
||||||
"description": "A Pokémon fangame heavily inspired by the roguelite genre. Battle endlessly while gathering stacking items, exploring many different biomes, and reaching Pokémon stats you never thought possible.",
|
"description": "A Pokémon fangame heavily inspired by the roguelite genre. Battle endlessly while gathering stacking items, exploring many different biomes, and reaching Pokémon stats you never thought possible.",
|
||||||
"scope": "/",
|
"scope": "/",
|
||||||
"start_url": "/",
|
"start_url": "https://pokerogue.net",
|
||||||
"display": "standalone",
|
"display": "fullscreen",
|
||||||
"background_color": "#8c8c8c",
|
"background_color": "#8c8c8c",
|
||||||
"theme_color": "#8c8c8c",
|
"theme_color": "#8c8c8c",
|
||||||
"icons": [
|
"icons": [
|
||||||
|
@ -205,8 +205,8 @@ export default class BattleScene extends SceneBase {
|
|||||||
[Button.SUBMIT]: 17, // touchpad
|
[Button.SUBMIT]: 17, // touchpad
|
||||||
[Button.ACTION]: 0, // X
|
[Button.ACTION]: 0, // X
|
||||||
[Button.CANCEL]: 1, // O
|
[Button.CANCEL]: 1, // O
|
||||||
[Button.MENU]: 8, // share
|
[Button.MENU]: 9, // options
|
||||||
[Button.STATS]: 9, // options
|
[Button.STATS]: 8, // share
|
||||||
[Button.CYCLE_SHINY]: 5, // RB
|
[Button.CYCLE_SHINY]: 5, // RB
|
||||||
[Button.CYCLE_FORM]: 4, // LB
|
[Button.CYCLE_FORM]: 4, // LB
|
||||||
[Button.CYCLE_GENDER]: 6, // LT
|
[Button.CYCLE_GENDER]: 6, // LT
|
||||||
@ -617,7 +617,7 @@ export default class BattleScene extends SceneBase {
|
|||||||
[Button.ACTION]: [keyCodes.SPACE, keyCodes.ENTER, keyCodes.Z],
|
[Button.ACTION]: [keyCodes.SPACE, keyCodes.ENTER, keyCodes.Z],
|
||||||
[Button.CANCEL]: [keyCodes.BACKSPACE, keyCodes.X],
|
[Button.CANCEL]: [keyCodes.BACKSPACE, keyCodes.X],
|
||||||
[Button.MENU]: [keyCodes.ESC, keyCodes.M],
|
[Button.MENU]: [keyCodes.ESC, keyCodes.M],
|
||||||
[Button.STATS]: [keyCodes.C],
|
[Button.STATS]: [keyCodes.SHIFT, keyCodes.C],
|
||||||
[Button.CYCLE_SHINY]: [keyCodes.R],
|
[Button.CYCLE_SHINY]: [keyCodes.R],
|
||||||
[Button.CYCLE_FORM]: [keyCodes.F],
|
[Button.CYCLE_FORM]: [keyCodes.F],
|
||||||
[Button.CYCLE_GENDER]: [keyCodes.G],
|
[Button.CYCLE_GENDER]: [keyCodes.G],
|
||||||
@ -1437,7 +1437,7 @@ export default class BattleScene extends SceneBase {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let pressed = false;
|
let pressed = false;
|
||||||
if (this.buttonJustReleased(Button.STATS) || (pressed = this.buttonJustPressed(Button.STATS))) {
|
if (this.ui && (this.buttonJustReleased(Button.STATS) || (pressed = this.buttonJustPressed(Button.STATS)))) {
|
||||||
for (let p of this.getField().filter(p => p?.isActive(true)))
|
for (let p of this.getField().filter(p => p?.isActive(true)))
|
||||||
p.toggleStats(pressed);
|
p.toggleStats(pressed);
|
||||||
if (pressed)
|
if (pressed)
|
||||||
|
@ -679,6 +679,19 @@ export class PostDefendContactApplyStatusEffectAbAttr extends PostDefendAbAttr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class EffectSporeAbAttr extends PostDefendContactApplyStatusEffectAbAttr {
|
||||||
|
constructor() {
|
||||||
|
super(10, StatusEffect.POISON, StatusEffect.PARALYSIS, StatusEffect.SLEEP);
|
||||||
|
}
|
||||||
|
|
||||||
|
applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean {
|
||||||
|
if (attacker.hasAbility(Abilities.OVERCOAT) || attacker.isOfType(Type.GRASS)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return super.applyPostDefend(pokemon, passive, attacker, move, hitResult, args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class PostDefendContactApplyTagChanceAbAttr extends PostDefendAbAttr {
|
export class PostDefendContactApplyTagChanceAbAttr extends PostDefendAbAttr {
|
||||||
private chance: integer;
|
private chance: integer;
|
||||||
private tagType: BattlerTagType;
|
private tagType: BattlerTagType;
|
||||||
@ -906,8 +919,8 @@ export class MovePowerBoostAbAttr extends VariableMovePowerAbAttr {
|
|||||||
private condition: PokemonAttackCondition;
|
private condition: PokemonAttackCondition;
|
||||||
private powerMultiplier: number;
|
private powerMultiplier: number;
|
||||||
|
|
||||||
constructor(condition: PokemonAttackCondition, powerMultiplier: number) {
|
constructor(condition: PokemonAttackCondition, powerMultiplier: number, showAbility: boolean = true) {
|
||||||
super(true);
|
super(showAbility);
|
||||||
this.condition = condition;
|
this.condition = condition;
|
||||||
this.powerMultiplier = powerMultiplier;
|
this.powerMultiplier = powerMultiplier;
|
||||||
}
|
}
|
||||||
@ -2572,7 +2585,7 @@ export function initAbilities() {
|
|||||||
.attr(TypeImmunityAbAttr, Type.GROUND, (pokemon: Pokemon) => !pokemon.getTag(BattlerTagType.IGNORE_FLYING) && !pokemon.scene.arena.getTag(ArenaTagType.GRAVITY) && !pokemon.getTag(BattlerTagType.GROUNDED))
|
.attr(TypeImmunityAbAttr, Type.GROUND, (pokemon: Pokemon) => !pokemon.getTag(BattlerTagType.IGNORE_FLYING) && !pokemon.scene.arena.getTag(ArenaTagType.GRAVITY) && !pokemon.getTag(BattlerTagType.GROUNDED))
|
||||||
.ignorable(),
|
.ignorable(),
|
||||||
new Ability(Abilities.EFFECT_SPORE, 3)
|
new Ability(Abilities.EFFECT_SPORE, 3)
|
||||||
.attr(PostDefendContactApplyStatusEffectAbAttr, 10, StatusEffect.POISON, StatusEffect.PARALYSIS, StatusEffect.SLEEP),
|
.attr(EffectSporeAbAttr),
|
||||||
new Ability(Abilities.SYNCHRONIZE, 3)
|
new Ability(Abilities.SYNCHRONIZE, 3)
|
||||||
.attr(SyncEncounterNatureAbAttr)
|
.attr(SyncEncounterNatureAbAttr)
|
||||||
.unimplemented(),
|
.unimplemented(),
|
||||||
@ -2712,7 +2725,7 @@ export function initAbilities() {
|
|||||||
.attr(TypeImmunityStatChangeAbAttr, Type.ELECTRIC, BattleStat.SPD, 1)
|
.attr(TypeImmunityStatChangeAbAttr, Type.ELECTRIC, BattleStat.SPD, 1)
|
||||||
.ignorable(),
|
.ignorable(),
|
||||||
new Ability(Abilities.RIVALRY, 4)
|
new Ability(Abilities.RIVALRY, 4)
|
||||||
.attr(MovePowerBoostAbAttr, (user, target, move) => user.gender !== Gender.GENDERLESS && target.gender !== Gender.GENDERLESS && user.gender === target.gender, 1.25)
|
.attr(MovePowerBoostAbAttr, (user, target, move) => user.gender !== Gender.GENDERLESS && target.gender !== Gender.GENDERLESS && user.gender === target.gender, 1.25, true)
|
||||||
.attr(MovePowerBoostAbAttr, (user, target, move) => user.gender !== Gender.GENDERLESS && target.gender !== Gender.GENDERLESS && user.gender !== target.gender, 0.75),
|
.attr(MovePowerBoostAbAttr, (user, target, move) => user.gender !== Gender.GENDERLESS && target.gender !== Gender.GENDERLESS && user.gender !== target.gender, 0.75),
|
||||||
new Ability(Abilities.STEADFAST, 4)
|
new Ability(Abilities.STEADFAST, 4)
|
||||||
.attr(FlinchStatChangeAbAttr, BattleStat.SPD, 1),
|
.attr(FlinchStatChangeAbAttr, BattleStat.SPD, 1),
|
||||||
|
@ -482,6 +482,20 @@ export class GravityTag extends ArenaTag {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class TailwindTag extends ArenaTag {
|
||||||
|
constructor(turnCount: integer, sourceId: integer, side: ArenaTagSide) {
|
||||||
|
super(ArenaTagType.TAILWIND, turnCount, Moves.TAILWIND, sourceId, side);
|
||||||
|
}
|
||||||
|
|
||||||
|
onAdd(arena: Arena): void {
|
||||||
|
arena.scene.queueMessage(`The Tailwind blew from behind${this.side === ArenaTagSide.PLAYER ? '\nyour' : this.side === ArenaTagSide.ENEMY ? '\nthe opposing' : ''} team!`);
|
||||||
|
}
|
||||||
|
|
||||||
|
onRemove(arena: Arena): void {
|
||||||
|
arena.scene.queueMessage(`${this.side === ArenaTagSide.PLAYER ? 'Your' : this.side === ArenaTagSide.ENEMY ? 'The opposing' : ''} team's Tailwind petered out!`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMove: Moves, sourceId: integer, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH): ArenaTag {
|
export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMove: Moves, sourceId: integer, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH): ArenaTag {
|
||||||
switch (tagType) {
|
switch (tagType) {
|
||||||
case ArenaTagType.MIST:
|
case ArenaTagType.MIST:
|
||||||
@ -513,5 +527,7 @@ export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMov
|
|||||||
return new LightScreenTag(turnCount, sourceId, side);
|
return new LightScreenTag(turnCount, sourceId, side);
|
||||||
case ArenaTagType.AURORA_VEIL:
|
case ArenaTagType.AURORA_VEIL:
|
||||||
return new AuroraVeilTag(turnCount, sourceId, side);
|
return new AuroraVeilTag(turnCount, sourceId, side);
|
||||||
|
case ArenaTagType.TAILWIND:
|
||||||
|
return new TailwindTag(turnCount, sourceId, side);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,8 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc {
|
|||||||
case BerryType.SITRUS:
|
case BerryType.SITRUS:
|
||||||
case BerryType.ENIGMA:
|
case BerryType.ENIGMA:
|
||||||
return (pokemon: Pokemon) => {
|
return (pokemon: Pokemon) => {
|
||||||
|
if (pokemon.battleData)
|
||||||
|
pokemon.battleData.berriesEaten.push(berryType);
|
||||||
const hpHealed = new Utils.NumberHolder(Math.floor(pokemon.getMaxHp() / 4));
|
const hpHealed = new Utils.NumberHolder(Math.floor(pokemon.getMaxHp() / 4));
|
||||||
applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, hpHealed);
|
applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, hpHealed);
|
||||||
pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(),
|
pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(),
|
||||||
@ -106,6 +108,8 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc {
|
|||||||
};
|
};
|
||||||
case BerryType.LUM:
|
case BerryType.LUM:
|
||||||
return (pokemon: Pokemon) => {
|
return (pokemon: Pokemon) => {
|
||||||
|
if (pokemon.battleData)
|
||||||
|
pokemon.battleData.berriesEaten.push(berryType);
|
||||||
if (pokemon.status) {
|
if (pokemon.status) {
|
||||||
pokemon.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectHealText(pokemon.status.effect)));
|
pokemon.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectHealText(pokemon.status.effect)));
|
||||||
pokemon.resetStatus();
|
pokemon.resetStatus();
|
||||||
@ -119,6 +123,8 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc {
|
|||||||
case BerryType.APICOT:
|
case BerryType.APICOT:
|
||||||
case BerryType.SALAC:
|
case BerryType.SALAC:
|
||||||
return (pokemon: Pokemon) => {
|
return (pokemon: Pokemon) => {
|
||||||
|
if (pokemon.battleData)
|
||||||
|
pokemon.battleData.berriesEaten.push(berryType);
|
||||||
const battleStat = (berryType - BerryType.LIECHI) as BattleStat;
|
const battleStat = (berryType - BerryType.LIECHI) as BattleStat;
|
||||||
const statLevels = new Utils.NumberHolder(1);
|
const statLevels = new Utils.NumberHolder(1);
|
||||||
applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, statLevels);
|
applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, statLevels);
|
||||||
@ -126,16 +132,22 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc {
|
|||||||
};
|
};
|
||||||
case BerryType.LANSAT:
|
case BerryType.LANSAT:
|
||||||
return (pokemon: Pokemon) => {
|
return (pokemon: Pokemon) => {
|
||||||
|
if (pokemon.battleData)
|
||||||
|
pokemon.battleData.berriesEaten.push(berryType);
|
||||||
pokemon.addTag(BattlerTagType.CRIT_BOOST);
|
pokemon.addTag(BattlerTagType.CRIT_BOOST);
|
||||||
};
|
};
|
||||||
case BerryType.STARF:
|
case BerryType.STARF:
|
||||||
return (pokemon: Pokemon) => {
|
return (pokemon: Pokemon) => {
|
||||||
|
if (pokemon.battleData)
|
||||||
|
pokemon.battleData.berriesEaten.push(berryType);
|
||||||
const statLevels = new Utils.NumberHolder(2);
|
const statLevels = new Utils.NumberHolder(2);
|
||||||
applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, statLevels);
|
applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, statLevels);
|
||||||
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ BattleStat.RAND ], statLevels.value));
|
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ BattleStat.RAND ], statLevels.value));
|
||||||
};
|
};
|
||||||
case BerryType.LEPPA:
|
case BerryType.LEPPA:
|
||||||
return (pokemon: Pokemon) => {
|
return (pokemon: Pokemon) => {
|
||||||
|
if (pokemon.battleData)
|
||||||
|
pokemon.battleData.berriesEaten.push(berryType);
|
||||||
const ppRestoreMove = pokemon.getMoveset().find(m => !m.getPpRatio());
|
const ppRestoreMove = pokemon.getMoveset().find(m => !m.getPpRatio());
|
||||||
ppRestoreMove.ppUsed = Math.max(ppRestoreMove.ppUsed - 10, 0);
|
ppRestoreMove.ppUsed = Math.max(ppRestoreMove.ppUsed - 10, 0);
|
||||||
pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` restored PP to its move ${ppRestoreMove.getName()}\nusing its ${getBerryName(berryType)}!`));
|
pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` restored PP to its move ${ppRestoreMove.getName()}\nusing its ${getBerryName(berryType)}!`));
|
||||||
|
@ -615,7 +615,7 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.DAY]: [],
|
[TimeOfDay.DAY]: [],
|
||||||
[TimeOfDay.DUSK]: [],
|
[TimeOfDay.DUSK]: [],
|
||||||
[TimeOfDay.NIGHT]: [],
|
[TimeOfDay.NIGHT]: [],
|
||||||
[TimeOfDay.ALL]: [ Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, { 1: [ Species.MANTYKE ], 20: [ Species.MANTINE ] }, Species.ALOMOMOLA, { 1: [ Species.TYNAMO ], 39: [ Species.EELEKTRIK ] }, Species.DHELMISE ]
|
[TimeOfDay.ALL]: [ Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, { 1: [ Species.MANTYKE ], 52: [ Species.MANTINE ] }, Species.ALOMOMOLA, { 1: [ Species.TYNAMO ], 39: [ Species.EELEKTRIK ] }, Species.DHELMISE ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.SUPER_RARE]: {
|
[BiomePoolTier.SUPER_RARE]: {
|
||||||
[TimeOfDay.DAWN]: [],
|
[TimeOfDay.DAWN]: [],
|
||||||
@ -1128,8 +1128,8 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.BRONZOR ], 33: [ Species.BRONZONG ] }, Species.KLEFKI ] },
|
[BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.BRONZOR ], 33: [ Species.BRONZONG ] }, Species.KLEFKI ] },
|
||||||
[BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
[BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ] } ] },
|
||||||
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ] }, { 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ] } ] },
|
[BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ] } ] },
|
||||||
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GENESECT, Species.MAGEARNA ] },
|
[BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GENESECT, Species.MAGEARNA ] },
|
||||||
[BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KLINKLANG, Species.KLEFKI ] },
|
[BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KLINKLANG, Species.KLEFKI ] },
|
||||||
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
[BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] },
|
||||||
@ -1319,7 +1319,7 @@ export const biomePokemonPools: BiomePokemonPools = {
|
|||||||
[TimeOfDay.DAY]: [ Species.VESPIQUEN, { 1: [ Species.CHERUBI ], 25: [ Species.CHERRIM ] }, { 1: [ Species.SEWADDLE ], 20: [ Species.SWADLOON ], 30: [ Species.LEAVANNY ] } ],
|
[TimeOfDay.DAY]: [ Species.VESPIQUEN, { 1: [ Species.CHERUBI ], 25: [ Species.CHERRIM ] }, { 1: [ Species.SEWADDLE ], 20: [ Species.SWADLOON ], 30: [ Species.LEAVANNY ] } ],
|
||||||
[TimeOfDay.DUSK]: [ Species.SHROOMISH, { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ] }, { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ] } ],
|
[TimeOfDay.DUSK]: [ Species.SHROOMISH, { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ] }, { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ] } ],
|
||||||
[TimeOfDay.NIGHT]: [ { 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ] }, Species.SHROOMISH, { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ] }, { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ] } ],
|
[TimeOfDay.NIGHT]: [ { 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ] }, Species.SHROOMISH, { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ] }, { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ] } ],
|
||||||
[TimeOfDay.ALL]: [ Species.AIPOM, { 1: [ Species.BLITZLE ], 27: [ Species.ZEBSTRIKA ] }, { 1: [ Species.PIKIPEK ], 14: [ Species.TRUMBEAK ], 36: [ Species.TOUCANNON ] } ]
|
[TimeOfDay.ALL]: [ Species.AIPOM, { 1: [ Species.BLITZLE ], 27: [ Species.ZEBSTRIKA ] }, { 1: [ Species.PIKIPEK ], 14: [ Species.TRUMBEAK ], 28: [ Species.TOUCANNON ] } ]
|
||||||
},
|
},
|
||||||
[BiomePoolTier.UNCOMMON]: {
|
[BiomePoolTier.UNCOMMON]: {
|
||||||
[TimeOfDay.DAWN]: [ Species.EXEGGCUTE, Species.TROPIUS, Species.COMBEE, Species.KOMALA ],
|
[TimeOfDay.DAWN]: [ Species.EXEGGCUTE, Species.TROPIUS, Species.COMBEE, Species.KOMALA ],
|
||||||
@ -2708,7 +2708,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.PORYGON, Type.NORMAL, -1, [
|
[ Species.PORYGON, Type.NORMAL, -1, [
|
||||||
[ Biome.FACTORY, BiomePoolTier.SUPER_RARE ],
|
[ Biome.FACTORY, BiomePoolTier.RARE ],
|
||||||
[ Biome.SPACE, BiomePoolTier.SUPER_RARE ],
|
[ Biome.SPACE, BiomePoolTier.SUPER_RARE ],
|
||||||
[ Biome.LABORATORY, BiomePoolTier.RARE ]
|
[ Biome.LABORATORY, BiomePoolTier.RARE ]
|
||||||
]
|
]
|
||||||
@ -3165,7 +3165,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
[ Species.PORYGON2, Type.NORMAL, -1, [
|
[ Species.PORYGON2, Type.NORMAL, -1, [
|
||||||
[ Biome.FACTORY, BiomePoolTier.SUPER_RARE ],
|
[ Biome.FACTORY, BiomePoolTier.RARE ],
|
||||||
[ Biome.SPACE, BiomePoolTier.SUPER_RARE ],
|
[ Biome.SPACE, BiomePoolTier.SUPER_RARE ],
|
||||||
[ Biome.LABORATORY, BiomePoolTier.RARE ]
|
[ Biome.LABORATORY, BiomePoolTier.RARE ]
|
||||||
]
|
]
|
||||||
|
@ -15,5 +15,6 @@ export enum ArenaTagType {
|
|||||||
GRAVITY = "GRAVITY",
|
GRAVITY = "GRAVITY",
|
||||||
REFLECT = "REFLECT",
|
REFLECT = "REFLECT",
|
||||||
LIGHT_SCREEN = "LIGHT_SCREEN",
|
LIGHT_SCREEN = "LIGHT_SCREEN",
|
||||||
AURORA_VEIL = "AURORA_VEIL"
|
AURORA_VEIL = "AURORA_VEIL",
|
||||||
|
TAILWIND = "TAILWIND"
|
||||||
}
|
}
|
||||||
|
@ -557,7 +557,7 @@ export class TargetHalfHpDamageAttr extends FixedDamageAttr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||||
(args[0] as Utils.IntegerHolder).value = Math.floor(target.hp / 2);
|
(args[0] as Utils.IntegerHolder).value = Math.max(Math.floor(target.hp / 2), 1);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -2615,7 +2615,7 @@ export class CurseAttr extends MoveEffectAttr {
|
|||||||
}
|
}
|
||||||
let curseRecoilDamage = Math.floor(user.getMaxHp() / 2);
|
let curseRecoilDamage = Math.floor(user.getMaxHp() / 2);
|
||||||
user.damageAndUpdate(curseRecoilDamage, HitResult.OTHER, false, true, true);
|
user.damageAndUpdate(curseRecoilDamage, HitResult.OTHER, false, true, true);
|
||||||
user.scene.queueMessage(getPokemonMessage(user, ' cut its own HP!'));
|
user.scene.queueMessage(getPokemonMessage(user, ` cut its own HP\nand laid a curse on the ${target.name}!`));
|
||||||
target.addTag(BattlerTagType.CURSED, 0, move.id, user.id);
|
target.addTag(BattlerTagType.CURSED, 0, move.id, user.id);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
@ -3612,6 +3612,23 @@ export class SwitchAbilitiesAttr extends MoveEffectAttr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class SuppressAbilitiesAttr extends MoveEffectAttr {
|
||||||
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||||
|
if (!super.apply(user, target, move, args))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
target.summonData.abilitySuppressed = true;
|
||||||
|
|
||||||
|
target.scene.queueMessage(getPokemonMessage(target, ` ability\nwas suppressed!`));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
getCondition(): MoveConditionFunc {
|
||||||
|
return (user, target, move) => !target.getAbility().hasAttr(UnsuppressableAbilityAbAttr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class TransformAttr extends MoveEffectAttr {
|
export class TransformAttr extends MoveEffectAttr {
|
||||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
@ -3663,6 +3680,20 @@ export class MoneyAttr extends MoveEffectAttr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class LastResortAttr extends MoveAttr {
|
||||||
|
getCondition(): MoveConditionFunc {
|
||||||
|
return (user: Pokemon, target: Pokemon, move: Move) => {
|
||||||
|
const uniqueUsedMoveIds = new Set<Moves>();
|
||||||
|
const movesetMoveIds = user.getMoveset().map(m => m.moveId);
|
||||||
|
user.getMoveHistory().map(m => {
|
||||||
|
if (m.move !== move.id && movesetMoveIds.find(mm => mm === m.move))
|
||||||
|
uniqueUsedMoveIds.add(m.move);
|
||||||
|
});
|
||||||
|
return uniqueUsedMoveIds.size >= movesetMoveIds.length - 1;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const failOnGravityCondition: MoveConditionFunc = (user, target, move) => !user.scene.arena.getTag(ArenaTagType.GRAVITY);
|
const failOnGravityCondition: MoveConditionFunc = (user, target, move) => !user.scene.arena.getTag(ArenaTagType.GRAVITY);
|
||||||
|
|
||||||
const failOnBossCondition: MoveConditionFunc = (user, target, move) => !target.isBossImmune();
|
const failOnBossCondition: MoveConditionFunc = (user, target, move) => !target.isBossImmune();
|
||||||
@ -3724,6 +3755,19 @@ export class FirstMoveCondition extends MoveCondition {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class hitsSameTypeAttr extends VariableMoveTypeMultiplierAttr {
|
||||||
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||||
|
const multiplier = args[0] as Utils.NumberHolder;
|
||||||
|
if (!user.getTypes().some(type => target.getTypes().includes(type))){
|
||||||
|
multiplier.value = 0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const unknownTypeCondition: MoveConditionFunc = (user, target, move) => !user.getTypes().includes(Type.UNKNOWN);
|
||||||
|
|
||||||
export type MoveTargetSet = {
|
export type MoveTargetSet = {
|
||||||
targets: BattlerIndex[];
|
targets: BattlerIndex[];
|
||||||
multiple: boolean;
|
multiple: boolean;
|
||||||
@ -4779,8 +4823,8 @@ export function initMoves() {
|
|||||||
.partial(),
|
.partial(),
|
||||||
new StatusMove(Moves.TAILWIND, Type.FLYING, -1, 15, -1, 0, 4)
|
new StatusMove(Moves.TAILWIND, Type.FLYING, -1, 15, -1, 0, 4)
|
||||||
.windMove()
|
.windMove()
|
||||||
.target(MoveTarget.USER_SIDE)
|
.attr(AddArenaTagAttr, ArenaTagType.TAILWIND, 4, true)
|
||||||
.unimplemented(),
|
.target(MoveTarget.USER_SIDE),
|
||||||
new StatusMove(Moves.ACUPRESSURE, Type.NORMAL, -1, 30, -1, 0, 4)
|
new StatusMove(Moves.ACUPRESSURE, Type.NORMAL, -1, 30, -1, 0, 4)
|
||||||
.attr(StatChangeAttr, BattleStat.RAND, 2)
|
.attr(StatChangeAttr, BattleStat.RAND, 2)
|
||||||
.target(MoveTarget.USER_OR_NEAR_ALLY),
|
.target(MoveTarget.USER_OR_NEAR_ALLY),
|
||||||
@ -4822,7 +4866,7 @@ export function initMoves() {
|
|||||||
new SelfStatusMove(Moves.POWER_TRICK, Type.PSYCHIC, -1, 10, -1, 0, 4)
|
new SelfStatusMove(Moves.POWER_TRICK, Type.PSYCHIC, -1, 10, -1, 0, 4)
|
||||||
.unimplemented(),
|
.unimplemented(),
|
||||||
new StatusMove(Moves.GASTRO_ACID, Type.POISON, 100, 10, -1, 0, 4)
|
new StatusMove(Moves.GASTRO_ACID, Type.POISON, 100, 10, -1, 0, 4)
|
||||||
.unimplemented(),
|
.attr(SuppressAbilitiesAttr),
|
||||||
new StatusMove(Moves.LUCKY_CHANT, Type.NORMAL, -1, 30, -1, 0, 4)
|
new StatusMove(Moves.LUCKY_CHANT, Type.NORMAL, -1, 30, -1, 0, 4)
|
||||||
.attr(AddBattlerTagAttr, BattlerTagType.NO_CRIT, false, false, 5)
|
.attr(AddBattlerTagAttr, BattlerTagType.NO_CRIT, false, false, 5)
|
||||||
.target(MoveTarget.USER_SIDE)
|
.target(MoveTarget.USER_SIDE)
|
||||||
@ -4841,15 +4885,7 @@ export function initMoves() {
|
|||||||
new AttackMove(Moves.PUNISHMENT, Type.DARK, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4)
|
new AttackMove(Moves.PUNISHMENT, Type.DARK, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4)
|
||||||
.unimplemented(),
|
.unimplemented(),
|
||||||
new AttackMove(Moves.LAST_RESORT, Type.NORMAL, MoveCategory.PHYSICAL, 140, 100, 5, -1, 0, 4)
|
new AttackMove(Moves.LAST_RESORT, Type.NORMAL, MoveCategory.PHYSICAL, 140, 100, 5, -1, 0, 4)
|
||||||
.condition((user, target, move) => {
|
.attr(LastResortAttr),
|
||||||
const uniqueUsedMoveIds = new Set<Moves>();
|
|
||||||
const movesetMoveIds = user.getMoveset().map(m => m.moveId);
|
|
||||||
user.getMoveHistory().map(m => {
|
|
||||||
if (m.move !== move.id && movesetMoveIds.find(mm => mm === m.move))
|
|
||||||
uniqueUsedMoveIds.add(m.move);
|
|
||||||
});
|
|
||||||
return uniqueUsedMoveIds.size >= movesetMoveIds.length - 1;
|
|
||||||
}),
|
|
||||||
new StatusMove(Moves.WORRY_SEED, Type.GRASS, 100, 10, -1, 0, 4)
|
new StatusMove(Moves.WORRY_SEED, Type.GRASS, 100, 10, -1, 0, 4)
|
||||||
.attr(AbilityChangeAttr, Abilities.INSOMNIA),
|
.attr(AbilityChangeAttr, Abilities.INSOMNIA),
|
||||||
new AttackMove(Moves.SUCKER_PUNCH, Type.DARK, MoveCategory.PHYSICAL, 70, 100, 5, -1, 1, 4)
|
new AttackMove(Moves.SUCKER_PUNCH, Type.DARK, MoveCategory.PHYSICAL, 70, 100, 5, -1, 1, 4)
|
||||||
@ -5105,7 +5141,8 @@ export function initMoves() {
|
|||||||
.condition(failOnMaxCondition),
|
.condition(failOnMaxCondition),
|
||||||
new AttackMove(Moves.SYNCHRONOISE, Type.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 5)
|
new AttackMove(Moves.SYNCHRONOISE, Type.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 5)
|
||||||
.target(MoveTarget.ALL_NEAR_OTHERS)
|
.target(MoveTarget.ALL_NEAR_OTHERS)
|
||||||
.partial(),
|
.condition(unknownTypeCondition)
|
||||||
|
.attr(hitsSameTypeAttr),
|
||||||
new AttackMove(Moves.ELECTRO_BALL, Type.ELECTRIC, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 5)
|
new AttackMove(Moves.ELECTRO_BALL, Type.ELECTRIC, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 5)
|
||||||
.attr(BattleStatRatioPowerAttr, Stat.SPD)
|
.attr(BattleStatRatioPowerAttr, Stat.SPD)
|
||||||
.ballBombMove(),
|
.ballBombMove(),
|
||||||
@ -5175,7 +5212,7 @@ export function initMoves() {
|
|||||||
new StatusMove(Moves.QUASH, Type.DARK, 100, 15, -1, 0, 5)
|
new StatusMove(Moves.QUASH, Type.DARK, 100, 15, -1, 0, 5)
|
||||||
.unimplemented(),
|
.unimplemented(),
|
||||||
new AttackMove(Moves.ACROBATICS, Type.FLYING, MoveCategory.PHYSICAL, 55, 100, 15, -1, 0, 5)
|
new AttackMove(Moves.ACROBATICS, Type.FLYING, MoveCategory.PHYSICAL, 55, 100, 15, -1, 0, 5)
|
||||||
.partial(),
|
.attr(MovePowerMultiplierAttr, (user, target, move) => Math.max(1, 2 - 0.2 * user.getHeldItems().reduce((v, m) => v + m.stackCount, 0))),
|
||||||
new StatusMove(Moves.REFLECT_TYPE, Type.NORMAL, -1, 15, -1, 0, 5)
|
new StatusMove(Moves.REFLECT_TYPE, Type.NORMAL, -1, 15, -1, 0, 5)
|
||||||
.attr(CopyTypeAttr),
|
.attr(CopyTypeAttr),
|
||||||
new AttackMove(Moves.RETALIATE, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 5, -1, 0, 5)
|
new AttackMove(Moves.RETALIATE, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 5, -1, 0, 5)
|
||||||
@ -5305,7 +5342,7 @@ export function initMoves() {
|
|||||||
new StatusMove(Moves.MAT_BLOCK, Type.FIGHTING, -1, 10, -1, 0, 6)
|
new StatusMove(Moves.MAT_BLOCK, Type.FIGHTING, -1, 10, -1, 0, 6)
|
||||||
.unimplemented(),
|
.unimplemented(),
|
||||||
new AttackMove(Moves.BELCH, Type.POISON, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 6)
|
new AttackMove(Moves.BELCH, Type.POISON, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 6)
|
||||||
.partial(),
|
.condition((user, target, move) => user.battleData.berriesEaten.length > 0),
|
||||||
new StatusMove(Moves.ROTOTILLER, Type.GROUND, -1, 10, 100, 0, 6)
|
new StatusMove(Moves.ROTOTILLER, Type.GROUND, -1, 10, 100, 0, 6)
|
||||||
.target(MoveTarget.ALL)
|
.target(MoveTarget.ALL)
|
||||||
.unimplemented(),
|
.unimplemented(),
|
||||||
@ -6336,8 +6373,7 @@ export function initMoves() {
|
|||||||
}), // TODO Add Instruct/Encore interaction
|
}), // TODO Add Instruct/Encore interaction
|
||||||
new AttackMove(Moves.COMEUPPANCE, Type.DARK, MoveCategory.PHYSICAL, 1, 100, 10, -1, 0, 9)
|
new AttackMove(Moves.COMEUPPANCE, Type.DARK, MoveCategory.PHYSICAL, 1, 100, 10, -1, 0, 9)
|
||||||
.attr(CounterDamageAttr, (move: Move) => (move.category === MoveCategory.PHYSICAL || move.category === MoveCategory.SPECIAL), 1.5)
|
.attr(CounterDamageAttr, (move: Move) => (move.category === MoveCategory.PHYSICAL || move.category === MoveCategory.SPECIAL), 1.5)
|
||||||
.target(MoveTarget.ATTACKER)
|
.target(MoveTarget.ATTACKER),
|
||||||
.partial(),
|
|
||||||
new AttackMove(Moves.AQUA_CUTTER, Type.WATER, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 9)
|
new AttackMove(Moves.AQUA_CUTTER, Type.WATER, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 9)
|
||||||
.attr(HighCritAttr)
|
.attr(HighCritAttr)
|
||||||
.slicingMove()
|
.slicingMove()
|
||||||
|
@ -4278,6 +4278,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 30, Moves.ANCIENT_POWER ],
|
[ 30, Moves.ANCIENT_POWER ],
|
||||||
[ 40, Moves.LIFE_DEW ],
|
[ 40, Moves.LIFE_DEW ],
|
||||||
[ 50, Moves.LEECH_SEED ],
|
[ 50, Moves.LEECH_SEED ],
|
||||||
|
[ 55, Moves.HEAL_BLOCK ],
|
||||||
[ 60, Moves.RECOVER ],
|
[ 60, Moves.RECOVER ],
|
||||||
[ 70, Moves.FUTURE_SIGHT ],
|
[ 70, Moves.FUTURE_SIGHT ],
|
||||||
[ 80, Moves.HEALING_WISH ],
|
[ 80, Moves.HEALING_WISH ],
|
||||||
@ -4976,6 +4977,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 23, Moves.ABSORB ],
|
[ 23, Moves.ABSORB ],
|
||||||
[ 29, Moves.SHADOW_SNEAK ],
|
[ 29, Moves.SHADOW_SNEAK ],
|
||||||
[ 36, Moves.FURY_SWIPES ],
|
[ 36, Moves.FURY_SWIPES ],
|
||||||
|
[ 41, Moves.HEAL_BLOCK ],
|
||||||
[ 43, Moves.MIND_READER ],
|
[ 43, Moves.MIND_READER ],
|
||||||
[ 50, Moves.SHADOW_BALL ],
|
[ 50, Moves.SHADOW_BALL ],
|
||||||
[ 57, Moves.SPITE ],
|
[ 57, Moves.SPITE ],
|
||||||
@ -5796,6 +5798,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 20, Moves.PSYSHOCK ],
|
[ 20, Moves.PSYSHOCK ],
|
||||||
[ 25, Moves.COSMIC_POWER ],
|
[ 25, Moves.COSMIC_POWER ],
|
||||||
[ 30, Moves.PSYCHIC ],
|
[ 30, Moves.PSYCHIC ],
|
||||||
|
[ 33, Moves.HEAL_BLOCK ],
|
||||||
[ 35, Moves.STONE_EDGE ],
|
[ 35, Moves.STONE_EDGE ],
|
||||||
[ 40, Moves.FUTURE_SIGHT ],
|
[ 40, Moves.FUTURE_SIGHT ],
|
||||||
[ 45, Moves.MAGIC_ROOM ],
|
[ 45, Moves.MAGIC_ROOM ],
|
||||||
@ -5814,6 +5817,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 20, Moves.ZEN_HEADBUTT ],
|
[ 20, Moves.ZEN_HEADBUTT ],
|
||||||
[ 25, Moves.COSMIC_POWER ],
|
[ 25, Moves.COSMIC_POWER ],
|
||||||
[ 30, Moves.PSYCHIC ],
|
[ 30, Moves.PSYCHIC ],
|
||||||
|
[ 33, Moves.HEAL_BLOCK ],
|
||||||
[ 35, Moves.STONE_EDGE ],
|
[ 35, Moves.STONE_EDGE ],
|
||||||
[ 40, Moves.SOLAR_BEAM ],
|
[ 40, Moves.SOLAR_BEAM ],
|
||||||
[ 45, Moves.WONDER_ROOM ],
|
[ 45, Moves.WONDER_ROOM ],
|
||||||
@ -5890,6 +5894,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 3, Moves.RAPID_SPIN ],
|
[ 3, Moves.RAPID_SPIN ],
|
||||||
[ 6, Moves.CONFUSION ],
|
[ 6, Moves.CONFUSION ],
|
||||||
[ 9, Moves.ROCK_TOMB ],
|
[ 9, Moves.ROCK_TOMB ],
|
||||||
|
[ 10, Moves.HEAL_BLOCK ],
|
||||||
[ 12, Moves.POWER_TRICK ],
|
[ 12, Moves.POWER_TRICK ],
|
||||||
[ 15, Moves.PSYBEAM ],
|
[ 15, Moves.PSYBEAM ],
|
||||||
[ 18, Moves.ANCIENT_POWER ],
|
[ 18, Moves.ANCIENT_POWER ],
|
||||||
@ -5911,6 +5916,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 1, Moves.MUD_SLAP ],
|
[ 1, Moves.MUD_SLAP ],
|
||||||
[ 1, Moves.RAPID_SPIN ],
|
[ 1, Moves.RAPID_SPIN ],
|
||||||
[ 9, Moves.ROCK_TOMB ],
|
[ 9, Moves.ROCK_TOMB ],
|
||||||
|
[ 10, Moves.HEAL_BLOCK ],
|
||||||
[ 12, Moves.POWER_TRICK ],
|
[ 12, Moves.POWER_TRICK ],
|
||||||
[ 15, Moves.PSYBEAM ],
|
[ 15, Moves.PSYBEAM ],
|
||||||
[ 18, Moves.ANCIENT_POWER ],
|
[ 18, Moves.ANCIENT_POWER ],
|
||||||
@ -6506,6 +6512,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[Species.LATIOS]: [
|
[Species.LATIOS]: [
|
||||||
[ 1, Moves.DRAGON_DANCE ],
|
[ 1, Moves.DRAGON_DANCE ],
|
||||||
[ 1, Moves.STORED_POWER ],
|
[ 1, Moves.STORED_POWER ],
|
||||||
|
[ 1, Moves.HEAL_BLOCK ],
|
||||||
[ 5, Moves.HELPING_HAND ],
|
[ 5, Moves.HELPING_HAND ],
|
||||||
[ 10, Moves.RECOVER ],
|
[ 10, Moves.RECOVER ],
|
||||||
[ 15, Moves.CONFUSION ],
|
[ 15, Moves.CONFUSION ],
|
||||||
@ -7364,6 +7371,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 36, Moves.IRON_DEFENSE ],
|
[ 36, Moves.IRON_DEFENSE ],
|
||||||
[ 40, Moves.METAL_SOUND ],
|
[ 40, Moves.METAL_SOUND ],
|
||||||
[ 44, Moves.FUTURE_SIGHT ],
|
[ 44, Moves.FUTURE_SIGHT ],
|
||||||
|
[ 45, Moves.HEAL_BLOCK ],
|
||||||
],
|
],
|
||||||
[Species.BRONZONG]: [
|
[Species.BRONZONG]: [
|
||||||
[ 0, Moves.BLOCK ],
|
[ 0, Moves.BLOCK ],
|
||||||
@ -7382,6 +7390,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 38, Moves.IRON_DEFENSE ],
|
[ 38, Moves.IRON_DEFENSE ],
|
||||||
[ 44, Moves.METAL_SOUND ],
|
[ 44, Moves.METAL_SOUND ],
|
||||||
[ 50, Moves.FUTURE_SIGHT ],
|
[ 50, Moves.FUTURE_SIGHT ],
|
||||||
|
[ 52, Moves.HEAL_BLOCK ],
|
||||||
[ 56, Moves.RAIN_DANCE ],
|
[ 56, Moves.RAIN_DANCE ],
|
||||||
],
|
],
|
||||||
[Species.BONSLY]: [
|
[Species.BONSLY]: [
|
||||||
@ -9491,6 +9500,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[Species.YAMASK]: [
|
[Species.YAMASK]: [
|
||||||
[ 1, Moves.PROTECT ],
|
[ 1, Moves.PROTECT ],
|
||||||
[ 1, Moves.ASTONISH ],
|
[ 1, Moves.ASTONISH ],
|
||||||
|
[ 1, Moves.HEAL_BLOCK ],
|
||||||
[ 4, Moves.HAZE ],
|
[ 4, Moves.HAZE ],
|
||||||
[ 8, Moves.NIGHT_SHADE ],
|
[ 8, Moves.NIGHT_SHADE ],
|
||||||
[ 12, Moves.DISABLE ],
|
[ 12, Moves.DISABLE ],
|
||||||
@ -9513,6 +9523,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 1, Moves.PROTECT ],
|
[ 1, Moves.PROTECT ],
|
||||||
[ 1, Moves.SCARY_FACE ],
|
[ 1, Moves.SCARY_FACE ],
|
||||||
[ 1, Moves.ASTONISH ],
|
[ 1, Moves.ASTONISH ],
|
||||||
|
[ 1, Moves.HEAL_BLOCK ],
|
||||||
[ 12, Moves.DISABLE ],
|
[ 12, Moves.DISABLE ],
|
||||||
[ 16, Moves.WILL_O_WISP ],
|
[ 16, Moves.WILL_O_WISP ],
|
||||||
[ 20, Moves.CRAFTY_SHIELD ],
|
[ 20, Moves.CRAFTY_SHIELD ],
|
||||||
@ -9720,6 +9731,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 24, Moves.HYPNOSIS ],
|
[ 24, Moves.HYPNOSIS ],
|
||||||
[ 28, Moves.FAKE_TEARS ],
|
[ 28, Moves.FAKE_TEARS ],
|
||||||
[ 33, Moves.PSYCH_UP ],
|
[ 33, Moves.PSYCH_UP ],
|
||||||
|
[ 34, Moves.HEAL_BLOCK ],
|
||||||
[ 36, Moves.PSYCHIC ],
|
[ 36, Moves.PSYCHIC ],
|
||||||
[ 40, Moves.FLATTER ],
|
[ 40, Moves.FLATTER ],
|
||||||
[ 44, Moves.FUTURE_SIGHT ],
|
[ 44, Moves.FUTURE_SIGHT ],
|
||||||
@ -9735,6 +9747,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 20, Moves.PSYSHOCK ],
|
[ 20, Moves.PSYSHOCK ],
|
||||||
[ 24, Moves.HYPNOSIS ],
|
[ 24, Moves.HYPNOSIS ],
|
||||||
[ 28, Moves.FAKE_TEARS ],
|
[ 28, Moves.FAKE_TEARS ],
|
||||||
|
[ 34, Moves.HEAL_BLOCK ],
|
||||||
[ 35, Moves.PSYCH_UP ],
|
[ 35, Moves.PSYCH_UP ],
|
||||||
[ 46, Moves.FLATTER ],
|
[ 46, Moves.FLATTER ],
|
||||||
[ 52, Moves.FUTURE_SIGHT ],
|
[ 52, Moves.FUTURE_SIGHT ],
|
||||||
@ -9750,6 +9763,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 20, Moves.PSYSHOCK ],
|
[ 20, Moves.PSYSHOCK ],
|
||||||
[ 24, Moves.HYPNOSIS ],
|
[ 24, Moves.HYPNOSIS ],
|
||||||
[ 28, Moves.FAKE_TEARS ],
|
[ 28, Moves.FAKE_TEARS ],
|
||||||
|
[ 34, Moves.HEAL_BLOCK ],
|
||||||
[ 35, Moves.PSYCH_UP ],
|
[ 35, Moves.PSYCH_UP ],
|
||||||
[ 40, Moves.PSYCHIC ],
|
[ 40, Moves.PSYCHIC ],
|
||||||
[ 48, Moves.FLATTER ],
|
[ 48, Moves.FLATTER ],
|
||||||
@ -9771,6 +9785,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 36, Moves.PSYCHIC ],
|
[ 36, Moves.PSYCHIC ],
|
||||||
[ 40, Moves.SKILL_SWAP ],
|
[ 40, Moves.SKILL_SWAP ],
|
||||||
[ 44, Moves.FUTURE_SIGHT ],
|
[ 44, Moves.FUTURE_SIGHT ],
|
||||||
|
[ 46, Moves.HEAL_BLOCK ],
|
||||||
[ 48, Moves.WONDER_ROOM ],
|
[ 48, Moves.WONDER_ROOM ],
|
||||||
],
|
],
|
||||||
[Species.DUOSION]: [
|
[Species.DUOSION]: [
|
||||||
@ -9787,6 +9802,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 35, Moves.PAIN_SPLIT ],
|
[ 35, Moves.PAIN_SPLIT ],
|
||||||
[ 40, Moves.PSYCHIC ],
|
[ 40, Moves.PSYCHIC ],
|
||||||
[ 46, Moves.SKILL_SWAP ],
|
[ 46, Moves.SKILL_SWAP ],
|
||||||
|
[ 50, Moves.HEAL_BLOCK ],
|
||||||
[ 52, Moves.FUTURE_SIGHT ],
|
[ 52, Moves.FUTURE_SIGHT ],
|
||||||
[ 58, Moves.WONDER_ROOM ],
|
[ 58, Moves.WONDER_ROOM ],
|
||||||
],
|
],
|
||||||
@ -9805,6 +9821,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 35, Moves.PAIN_SPLIT ],
|
[ 35, Moves.PAIN_SPLIT ],
|
||||||
[ 40, Moves.PSYCHIC ],
|
[ 40, Moves.PSYCHIC ],
|
||||||
[ 48, Moves.SKILL_SWAP ],
|
[ 48, Moves.SKILL_SWAP ],
|
||||||
|
[ 54, Moves.HEAL_BLOCK ],
|
||||||
[ 56, Moves.FUTURE_SIGHT ],
|
[ 56, Moves.FUTURE_SIGHT ],
|
||||||
[ 64, Moves.WONDER_ROOM ],
|
[ 64, Moves.WONDER_ROOM ],
|
||||||
],
|
],
|
||||||
@ -10209,6 +10226,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 1, Moves.GROWL ],
|
[ 1, Moves.GROWL ],
|
||||||
[ 1, Moves.CONFUSION ],
|
[ 1, Moves.CONFUSION ],
|
||||||
[ 6, Moves.IMPRISON ],
|
[ 6, Moves.IMPRISON ],
|
||||||
|
[ 8, Moves.HEAL_BLOCK ],
|
||||||
[ 12, Moves.TELEPORT ],
|
[ 12, Moves.TELEPORT ],
|
||||||
[ 18, Moves.PSYBEAM ],
|
[ 18, Moves.PSYBEAM ],
|
||||||
[ 24, Moves.GUARD_SPLIT ],
|
[ 24, Moves.GUARD_SPLIT ],
|
||||||
@ -10226,6 +10244,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 1, Moves.TELEPORT ],
|
[ 1, Moves.TELEPORT ],
|
||||||
[ 1, Moves.IMPRISON ],
|
[ 1, Moves.IMPRISON ],
|
||||||
[ 1, Moves.PSYCHIC_TERRAIN ],
|
[ 1, Moves.PSYCHIC_TERRAIN ],
|
||||||
|
[ 8, Moves.HEAL_BLOCK ],
|
||||||
[ 18, Moves.PSYBEAM ],
|
[ 18, Moves.PSYBEAM ],
|
||||||
[ 24, Moves.GUARD_SPLIT ],
|
[ 24, Moves.GUARD_SPLIT ],
|
||||||
[ 24, Moves.POWER_SPLIT ],
|
[ 24, Moves.POWER_SPLIT ],
|
||||||
@ -10884,6 +10903,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 20, Moves.SHOCK_WAVE ],
|
[ 20, Moves.SHOCK_WAVE ],
|
||||||
[ 25, Moves.AGILITY ],
|
[ 25, Moves.AGILITY ],
|
||||||
[ 30, Moves.CHARGE ],
|
[ 30, Moves.CHARGE ],
|
||||||
|
[ 31, Moves.HEAL_BLOCK ],
|
||||||
[ 35, Moves.VOLT_SWITCH ],
|
[ 35, Moves.VOLT_SWITCH ],
|
||||||
[ 40, Moves.CRUNCH ],
|
[ 40, Moves.CRUNCH ],
|
||||||
[ 45, Moves.DISCHARGE ],
|
[ 45, Moves.DISCHARGE ],
|
||||||
@ -11972,6 +11992,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 40, Moves.PLAY_ROUGH ],
|
[ 40, Moves.PLAY_ROUGH ],
|
||||||
[ 44, Moves.MAGIC_ROOM ],
|
[ 44, Moves.MAGIC_ROOM ],
|
||||||
[ 48, Moves.FOUL_PLAY ],
|
[ 48, Moves.FOUL_PLAY ],
|
||||||
|
[ 50, Moves.HEAL_BLOCK ],
|
||||||
[ 52, Moves.LAST_RESORT ],
|
[ 52, Moves.LAST_RESORT ],
|
||||||
],
|
],
|
||||||
[Species.PHANTUMP]: [
|
[Species.PHANTUMP]: [
|
||||||
@ -13045,6 +13066,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 45, Moves.IRON_HEAD ],
|
[ 45, Moves.IRON_HEAD ],
|
||||||
[ 50, Moves.TAKE_DOWN ],
|
[ 50, Moves.TAKE_DOWN ],
|
||||||
[ 55, Moves.DOUBLE_EDGE ],
|
[ 55, Moves.DOUBLE_EDGE ],
|
||||||
|
[ 60, Moves.HEAL_BLOCK ],
|
||||||
],
|
],
|
||||||
[Species.SILVALLY]: [
|
[Species.SILVALLY]: [
|
||||||
[ 0, Moves.MULTI_ATTACK ],
|
[ 0, Moves.MULTI_ATTACK ],
|
||||||
@ -13059,6 +13081,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
|||||||
[ 1, Moves.ICE_FANG ],
|
[ 1, Moves.ICE_FANG ],
|
||||||
[ 1, Moves.FIRE_FANG ],
|
[ 1, Moves.FIRE_FANG ],
|
||||||
[ 1, Moves.IRON_HEAD ],
|
[ 1, Moves.IRON_HEAD ],
|
||||||
|
[ 1, Moves.HEAL_BLOCK ],
|
||||||
[ 15, Moves.DOUBLE_HIT ],
|
[ 15, Moves.DOUBLE_HIT ],
|
||||||
[ 20, Moves.METAL_SOUND ],
|
[ 20, Moves.METAL_SOUND ],
|
||||||
[ 25, Moves.CRUSH_CLAW ],
|
[ 25, Moves.CRUSH_CLAW ],
|
||||||
|
@ -138,9 +138,9 @@ export abstract class PokemonSpeciesForm {
|
|||||||
this.genderDiffs = genderDiffs;
|
this.genderDiffs = genderDiffs;
|
||||||
}
|
}
|
||||||
|
|
||||||
getRootSpeciesId(): Species {
|
getRootSpeciesId(forStarter: boolean = false): Species {
|
||||||
let ret = this.speciesId;
|
let ret = this.speciesId;
|
||||||
while (pokemonPrevolutions.hasOwnProperty(ret))
|
while (pokemonPrevolutions.hasOwnProperty(ret) && (!forStarter || !speciesStarters.hasOwnProperty(ret)))
|
||||||
ret = pokemonPrevolutions[ret];
|
ret = pokemonPrevolutions[ret];
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
435
src/data/tms.ts
435
src/data/tms.ts
@ -29550,7 +29550,6 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.MURKROW,
|
Species.MURKROW,
|
||||||
Species.SLOWKING,
|
Species.SLOWKING,
|
||||||
Species.MISDREAVUS,
|
Species.MISDREAVUS,
|
||||||
Species.UNOWN,
|
|
||||||
Species.GIRAFARIG,
|
Species.GIRAFARIG,
|
||||||
Species.PINECO,
|
Species.PINECO,
|
||||||
Species.FORRETRESS,
|
Species.FORRETRESS,
|
||||||
@ -62012,21 +62011,49 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.ALOLA_MAROWAK,
|
Species.ALOLA_MAROWAK,
|
||||||
],
|
],
|
||||||
[Moves.TERA_BLAST]: [
|
[Moves.TERA_BLAST]: [
|
||||||
|
Species.BULBASAUR,
|
||||||
|
Species.IVYSAUR,
|
||||||
|
Species.VENUSAUR,
|
||||||
Species.CHARMANDER,
|
Species.CHARMANDER,
|
||||||
Species.CHARMELEON,
|
Species.CHARMELEON,
|
||||||
Species.CHARIZARD,
|
Species.CHARIZARD,
|
||||||
|
Species.SQUIRTLE,
|
||||||
|
Species.WARTORTLE,
|
||||||
|
Species.BLASTOISE,
|
||||||
|
Species.BUTTERFREE,
|
||||||
|
Species.BEEDRILL,
|
||||||
|
Species.PIDGEY,
|
||||||
|
Species.PIDGEOTTO,
|
||||||
|
Species.PIDGEOT,
|
||||||
|
Species.RATTATA,
|
||||||
|
Species.RATICATE,
|
||||||
|
Species.SPEAROW,
|
||||||
|
Species.FEAROW,
|
||||||
Species.EKANS,
|
Species.EKANS,
|
||||||
Species.ARBOK,
|
Species.ARBOK,
|
||||||
Species.PIKACHU,
|
Species.PIKACHU,
|
||||||
Species.RAICHU,
|
Species.RAICHU,
|
||||||
Species.SANDSHREW,
|
Species.SANDSHREW,
|
||||||
Species.SANDSLASH,
|
Species.SANDSLASH,
|
||||||
|
Species.NIDORAN_F,
|
||||||
|
Species.NIDORINA,
|
||||||
|
Species.NIDOQUEEN,
|
||||||
|
Species.NIDORAN_M,
|
||||||
|
Species.NIDORINO,
|
||||||
|
Species.NIDOKING,
|
||||||
Species.CLEFAIRY,
|
Species.CLEFAIRY,
|
||||||
Species.CLEFABLE,
|
Species.CLEFABLE,
|
||||||
Species.VULPIX,
|
Species.VULPIX,
|
||||||
Species.NINETALES,
|
Species.NINETALES,
|
||||||
Species.JIGGLYPUFF,
|
Species.JIGGLYPUFF,
|
||||||
Species.WIGGLYTUFF,
|
Species.WIGGLYTUFF,
|
||||||
|
Species.ZUBAT,
|
||||||
|
Species.GOLBAT,
|
||||||
|
Species.ODDISH,
|
||||||
|
Species.GLOOM,
|
||||||
|
Species.VILEPLUME,
|
||||||
|
Species.PARAS,
|
||||||
|
Species.PARASECT,
|
||||||
Species.VENONAT,
|
Species.VENONAT,
|
||||||
Species.VENOMOTH,
|
Species.VENOMOTH,
|
||||||
Species.DIGLETT,
|
Species.DIGLETT,
|
||||||
@ -62042,16 +62069,31 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.POLIWAG,
|
Species.POLIWAG,
|
||||||
Species.POLIWHIRL,
|
Species.POLIWHIRL,
|
||||||
Species.POLIWRATH,
|
Species.POLIWRATH,
|
||||||
|
Species.ABRA,
|
||||||
|
Species.KADABRA,
|
||||||
|
Species.ALAKAZAM,
|
||||||
|
Species.MACHOP,
|
||||||
|
Species.MACHOKE,
|
||||||
|
Species.MACHAMP,
|
||||||
Species.BELLSPROUT,
|
Species.BELLSPROUT,
|
||||||
Species.WEEPINBELL,
|
Species.WEEPINBELL,
|
||||||
Species.VICTREEBEL,
|
Species.VICTREEBEL,
|
||||||
|
Species.TENTACOOL,
|
||||||
|
Species.TENTACRUEL,
|
||||||
Species.GEODUDE,
|
Species.GEODUDE,
|
||||||
Species.GRAVELER,
|
Species.GRAVELER,
|
||||||
Species.GOLEM,
|
Species.GOLEM,
|
||||||
|
Species.PONYTA,
|
||||||
|
Species.RAPIDASH,
|
||||||
Species.SLOWPOKE,
|
Species.SLOWPOKE,
|
||||||
Species.SLOWBRO,
|
Species.SLOWBRO,
|
||||||
Species.MAGNEMITE,
|
Species.MAGNEMITE,
|
||||||
Species.MAGNETON,
|
Species.MAGNETON,
|
||||||
|
Species.FARFETCHD,
|
||||||
|
Species.DODUO,
|
||||||
|
Species.DODRIO,
|
||||||
|
Species.SEEL,
|
||||||
|
Species.DEWGONG,
|
||||||
Species.GRIMER,
|
Species.GRIMER,
|
||||||
Species.MUK,
|
Species.MUK,
|
||||||
Species.SHELLDER,
|
Species.SHELLDER,
|
||||||
@ -62059,20 +62101,52 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.GASTLY,
|
Species.GASTLY,
|
||||||
Species.HAUNTER,
|
Species.HAUNTER,
|
||||||
Species.GENGAR,
|
Species.GENGAR,
|
||||||
|
Species.ONIX,
|
||||||
Species.DROWZEE,
|
Species.DROWZEE,
|
||||||
Species.HYPNO,
|
Species.HYPNO,
|
||||||
|
Species.KRABBY,
|
||||||
|
Species.KINGLER,
|
||||||
Species.VOLTORB,
|
Species.VOLTORB,
|
||||||
Species.ELECTRODE,
|
Species.ELECTRODE,
|
||||||
|
Species.EXEGGCUTE,
|
||||||
|
Species.EXEGGUTOR,
|
||||||
|
Species.CUBONE,
|
||||||
|
Species.MAROWAK,
|
||||||
|
Species.HITMONLEE,
|
||||||
|
Species.HITMONCHAN,
|
||||||
|
Species.LICKITUNG,
|
||||||
Species.KOFFING,
|
Species.KOFFING,
|
||||||
Species.WEEZING,
|
Species.WEEZING,
|
||||||
|
Species.RHYHORN,
|
||||||
|
Species.RHYDON,
|
||||||
Species.CHANSEY,
|
Species.CHANSEY,
|
||||||
|
Species.TANGELA,
|
||||||
|
Species.KANGASKHAN,
|
||||||
|
Species.HORSEA,
|
||||||
|
Species.SEADRA,
|
||||||
|
Species.GOLDEEN,
|
||||||
|
Species.SEAKING,
|
||||||
|
Species.STARYU,
|
||||||
|
Species.STARMIE,
|
||||||
|
Species.MR_MIME,
|
||||||
Species.SCYTHER,
|
Species.SCYTHER,
|
||||||
|
Species.JYNX,
|
||||||
|
Species.ELECTABUZZ,
|
||||||
|
Species.MAGMAR,
|
||||||
|
Species.PINSIR,
|
||||||
Species.TAUROS,
|
Species.TAUROS,
|
||||||
Species.GYARADOS,
|
Species.GYARADOS,
|
||||||
|
Species.LAPRAS,
|
||||||
Species.EEVEE,
|
Species.EEVEE,
|
||||||
Species.VAPOREON,
|
Species.VAPOREON,
|
||||||
Species.JOLTEON,
|
Species.JOLTEON,
|
||||||
Species.FLAREON,
|
Species.FLAREON,
|
||||||
|
Species.PORYGON,
|
||||||
|
Species.OMANYTE,
|
||||||
|
Species.OMASTAR,
|
||||||
|
Species.KABUTO,
|
||||||
|
Species.KABUTOPS,
|
||||||
|
Species.AERODACTYL,
|
||||||
Species.SNORLAX,
|
Species.SNORLAX,
|
||||||
Species.ARTICUNO,
|
Species.ARTICUNO,
|
||||||
Species.ZAPDOS,
|
Species.ZAPDOS,
|
||||||
@ -62082,21 +62156,37 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.DRAGONITE,
|
Species.DRAGONITE,
|
||||||
Species.MEWTWO,
|
Species.MEWTWO,
|
||||||
Species.MEW,
|
Species.MEW,
|
||||||
|
Species.CHIKORITA,
|
||||||
|
Species.BAYLEEF,
|
||||||
|
Species.MEGANIUM,
|
||||||
Species.CYNDAQUIL,
|
Species.CYNDAQUIL,
|
||||||
Species.QUILAVA,
|
Species.QUILAVA,
|
||||||
Species.TYPHLOSION,
|
Species.TYPHLOSION,
|
||||||
|
Species.TOTODILE,
|
||||||
|
Species.CROCONAW,
|
||||||
|
Species.FERALIGATR,
|
||||||
Species.SENTRET,
|
Species.SENTRET,
|
||||||
Species.FURRET,
|
Species.FURRET,
|
||||||
Species.HOOTHOOT,
|
Species.HOOTHOOT,
|
||||||
Species.NOCTOWL,
|
Species.NOCTOWL,
|
||||||
|
Species.LEDYBA,
|
||||||
|
Species.LEDIAN,
|
||||||
Species.SPINARAK,
|
Species.SPINARAK,
|
||||||
Species.ARIADOS,
|
Species.ARIADOS,
|
||||||
|
Species.CROBAT,
|
||||||
|
Species.CHINCHOU,
|
||||||
|
Species.LANTURN,
|
||||||
Species.PICHU,
|
Species.PICHU,
|
||||||
Species.CLEFFA,
|
Species.CLEFFA,
|
||||||
Species.IGGLYBUFF,
|
Species.IGGLYBUFF,
|
||||||
|
Species.TOGEPI,
|
||||||
|
Species.TOGETIC,
|
||||||
|
Species.NATU,
|
||||||
|
Species.XATU,
|
||||||
Species.MAREEP,
|
Species.MAREEP,
|
||||||
Species.FLAAFFY,
|
Species.FLAAFFY,
|
||||||
Species.AMPHAROS,
|
Species.AMPHAROS,
|
||||||
|
Species.BELLOSSOM,
|
||||||
Species.MARILL,
|
Species.MARILL,
|
||||||
Species.AZUMARILL,
|
Species.AZUMARILL,
|
||||||
Species.SUDOWOODO,
|
Species.SUDOWOODO,
|
||||||
@ -62120,8 +62210,12 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.FORRETRESS,
|
Species.FORRETRESS,
|
||||||
Species.DUNSPARCE,
|
Species.DUNSPARCE,
|
||||||
Species.GLIGAR,
|
Species.GLIGAR,
|
||||||
|
Species.STEELIX,
|
||||||
|
Species.SNUBBULL,
|
||||||
|
Species.GRANBULL,
|
||||||
Species.QWILFISH,
|
Species.QWILFISH,
|
||||||
Species.SCIZOR,
|
Species.SCIZOR,
|
||||||
|
Species.SHUCKLE,
|
||||||
Species.HERACROSS,
|
Species.HERACROSS,
|
||||||
Species.SNEASEL,
|
Species.SNEASEL,
|
||||||
Species.TEDDIURSA,
|
Species.TEDDIURSA,
|
||||||
@ -62130,24 +62224,58 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.MAGCARGO,
|
Species.MAGCARGO,
|
||||||
Species.SWINUB,
|
Species.SWINUB,
|
||||||
Species.PILOSWINE,
|
Species.PILOSWINE,
|
||||||
|
Species.CORSOLA,
|
||||||
|
Species.REMORAID,
|
||||||
|
Species.OCTILLERY,
|
||||||
Species.DELIBIRD,
|
Species.DELIBIRD,
|
||||||
|
Species.MANTINE,
|
||||||
|
Species.SKARMORY,
|
||||||
Species.HOUNDOUR,
|
Species.HOUNDOUR,
|
||||||
Species.HOUNDOOM,
|
Species.HOUNDOOM,
|
||||||
|
Species.KINGDRA,
|
||||||
Species.PHANPY,
|
Species.PHANPY,
|
||||||
Species.DONPHAN,
|
Species.DONPHAN,
|
||||||
|
Species.PORYGON2,
|
||||||
Species.STANTLER,
|
Species.STANTLER,
|
||||||
|
Species.TYROGUE,
|
||||||
|
Species.HITMONTOP,
|
||||||
|
Species.SMOOCHUM,
|
||||||
|
Species.ELEKID,
|
||||||
|
Species.MAGBY,
|
||||||
|
Species.MILTANK,
|
||||||
Species.BLISSEY,
|
Species.BLISSEY,
|
||||||
|
Species.RAIKOU,
|
||||||
|
Species.ENTEI,
|
||||||
|
Species.SUICUNE,
|
||||||
Species.LARVITAR,
|
Species.LARVITAR,
|
||||||
Species.PUPITAR,
|
Species.PUPITAR,
|
||||||
Species.TYRANITAR,
|
Species.TYRANITAR,
|
||||||
|
Species.LUGIA,
|
||||||
|
Species.HO_OH,
|
||||||
|
Species.CELEBI,
|
||||||
|
Species.TREECKO,
|
||||||
|
Species.GROVYLE,
|
||||||
|
Species.SCEPTILE,
|
||||||
|
Species.TORCHIC,
|
||||||
|
Species.COMBUSKEN,
|
||||||
|
Species.BLAZIKEN,
|
||||||
|
Species.MUDKIP,
|
||||||
|
Species.MARSHTOMP,
|
||||||
|
Species.SWAMPERT,
|
||||||
Species.POOCHYENA,
|
Species.POOCHYENA,
|
||||||
Species.MIGHTYENA,
|
Species.MIGHTYENA,
|
||||||
|
Species.ZIGZAGOON,
|
||||||
|
Species.LINOONE,
|
||||||
|
Species.BEAUTIFLY,
|
||||||
|
Species.DUSTOX,
|
||||||
Species.LOTAD,
|
Species.LOTAD,
|
||||||
Species.LOMBRE,
|
Species.LOMBRE,
|
||||||
Species.LUDICOLO,
|
Species.LUDICOLO,
|
||||||
Species.SEEDOT,
|
Species.SEEDOT,
|
||||||
Species.NUZLEAF,
|
Species.NUZLEAF,
|
||||||
Species.SHIFTRY,
|
Species.SHIFTRY,
|
||||||
|
Species.TAILLOW,
|
||||||
|
Species.SWELLOW,
|
||||||
Species.WINGULL,
|
Species.WINGULL,
|
||||||
Species.PELIPPER,
|
Species.PELIPPER,
|
||||||
Species.RALTS,
|
Species.RALTS,
|
||||||
@ -62160,49 +62288,101 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.SLAKOTH,
|
Species.SLAKOTH,
|
||||||
Species.VIGOROTH,
|
Species.VIGOROTH,
|
||||||
Species.SLAKING,
|
Species.SLAKING,
|
||||||
|
Species.NINCADA,
|
||||||
|
Species.NINJASK,
|
||||||
|
Species.SHEDINJA,
|
||||||
|
Species.WHISMUR,
|
||||||
|
Species.LOUDRED,
|
||||||
|
Species.EXPLOUD,
|
||||||
Species.MAKUHITA,
|
Species.MAKUHITA,
|
||||||
Species.HARIYAMA,
|
Species.HARIYAMA,
|
||||||
Species.AZURILL,
|
Species.AZURILL,
|
||||||
Species.NOSEPASS,
|
Species.NOSEPASS,
|
||||||
|
Species.SKITTY,
|
||||||
|
Species.DELCATTY,
|
||||||
Species.SABLEYE,
|
Species.SABLEYE,
|
||||||
|
Species.MAWILE,
|
||||||
|
Species.ARON,
|
||||||
|
Species.LAIRON,
|
||||||
|
Species.AGGRON,
|
||||||
Species.MEDITITE,
|
Species.MEDITITE,
|
||||||
Species.MEDICHAM,
|
Species.MEDICHAM,
|
||||||
|
Species.ELECTRIKE,
|
||||||
|
Species.MANECTRIC,
|
||||||
|
Species.PLUSLE,
|
||||||
|
Species.MINUN,
|
||||||
Species.VOLBEAT,
|
Species.VOLBEAT,
|
||||||
Species.ILLUMISE,
|
Species.ILLUMISE,
|
||||||
|
Species.ROSELIA,
|
||||||
Species.GULPIN,
|
Species.GULPIN,
|
||||||
Species.SWALOT,
|
Species.SWALOT,
|
||||||
|
Species.CARVANHA,
|
||||||
|
Species.SHARPEDO,
|
||||||
|
Species.WAILMER,
|
||||||
|
Species.WAILORD,
|
||||||
Species.NUMEL,
|
Species.NUMEL,
|
||||||
Species.CAMERUPT,
|
Species.CAMERUPT,
|
||||||
Species.TORKOAL,
|
Species.TORKOAL,
|
||||||
Species.SPOINK,
|
Species.SPOINK,
|
||||||
Species.GRUMPIG,
|
Species.GRUMPIG,
|
||||||
|
Species.SPINDA,
|
||||||
|
Species.TRAPINCH,
|
||||||
|
Species.VIBRAVA,
|
||||||
|
Species.FLYGON,
|
||||||
Species.CACNEA,
|
Species.CACNEA,
|
||||||
Species.CACTURNE,
|
Species.CACTURNE,
|
||||||
Species.SWABLU,
|
Species.SWABLU,
|
||||||
Species.ALTARIA,
|
Species.ALTARIA,
|
||||||
Species.ZANGOOSE,
|
Species.ZANGOOSE,
|
||||||
Species.SEVIPER,
|
Species.SEVIPER,
|
||||||
|
Species.LUNATONE,
|
||||||
|
Species.SOLROCK,
|
||||||
Species.BARBOACH,
|
Species.BARBOACH,
|
||||||
Species.WHISCASH,
|
Species.WHISCASH,
|
||||||
Species.CORPHISH,
|
Species.CORPHISH,
|
||||||
Species.CRAWDAUNT,
|
Species.CRAWDAUNT,
|
||||||
|
Species.BALTOY,
|
||||||
|
Species.CLAYDOL,
|
||||||
|
Species.LILEEP,
|
||||||
|
Species.CRADILY,
|
||||||
|
Species.ANORITH,
|
||||||
|
Species.ARMALDO,
|
||||||
Species.FEEBAS,
|
Species.FEEBAS,
|
||||||
Species.MILOTIC,
|
Species.MILOTIC,
|
||||||
|
Species.CASTFORM,
|
||||||
|
Species.KECLEON,
|
||||||
Species.SHUPPET,
|
Species.SHUPPET,
|
||||||
Species.BANETTE,
|
Species.BANETTE,
|
||||||
Species.DUSKULL,
|
Species.DUSKULL,
|
||||||
Species.DUSCLOPS,
|
Species.DUSCLOPS,
|
||||||
Species.TROPIUS,
|
Species.TROPIUS,
|
||||||
Species.CHIMECHO,
|
Species.CHIMECHO,
|
||||||
|
Species.ABSOL,
|
||||||
Species.SNORUNT,
|
Species.SNORUNT,
|
||||||
Species.GLALIE,
|
Species.GLALIE,
|
||||||
|
Species.SPHEAL,
|
||||||
|
Species.SEALEO,
|
||||||
|
Species.WALREIN,
|
||||||
|
Species.CLAMPERL,
|
||||||
|
Species.HUNTAIL,
|
||||||
|
Species.GOREBYSS,
|
||||||
|
Species.RELICANTH,
|
||||||
Species.LUVDISC,
|
Species.LUVDISC,
|
||||||
Species.BAGON,
|
Species.BAGON,
|
||||||
Species.SHELGON,
|
Species.SHELGON,
|
||||||
Species.SALAMENCE,
|
Species.SALAMENCE,
|
||||||
|
Species.METANG,
|
||||||
|
Species.METAGROSS,
|
||||||
|
Species.REGIROCK,
|
||||||
|
Species.REGICE,
|
||||||
|
Species.REGISTEEL,
|
||||||
|
Species.LATIAS,
|
||||||
|
Species.LATIOS,
|
||||||
Species.KYOGRE,
|
Species.KYOGRE,
|
||||||
Species.GROUDON,
|
Species.GROUDON,
|
||||||
Species.RAYQUAZA,
|
Species.RAYQUAZA,
|
||||||
|
Species.JIRACHI,
|
||||||
|
Species.DEOXYS,
|
||||||
Species.TURTWIG,
|
Species.TURTWIG,
|
||||||
Species.GROTLE,
|
Species.GROTLE,
|
||||||
Species.TORTERRA,
|
Species.TORTERRA,
|
||||||
@ -62215,30 +62395,49 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.STARLY,
|
Species.STARLY,
|
||||||
Species.STARAVIA,
|
Species.STARAVIA,
|
||||||
Species.STARAPTOR,
|
Species.STARAPTOR,
|
||||||
|
Species.BIDOOF,
|
||||||
|
Species.BIBAREL,
|
||||||
Species.KRICKETOT,
|
Species.KRICKETOT,
|
||||||
Species.KRICKETUNE,
|
Species.KRICKETUNE,
|
||||||
Species.SHINX,
|
Species.SHINX,
|
||||||
Species.LUXIO,
|
Species.LUXIO,
|
||||||
Species.LUXRAY,
|
Species.LUXRAY,
|
||||||
|
Species.BUDEW,
|
||||||
|
Species.ROSERADE,
|
||||||
|
Species.CRANIDOS,
|
||||||
|
Species.RAMPARDOS,
|
||||||
|
Species.SHIELDON,
|
||||||
|
Species.BASTIODON,
|
||||||
|
Species.BURMY,
|
||||||
|
Species.WORMADAM,
|
||||||
|
Species.MOTHIM,
|
||||||
Species.COMBEE,
|
Species.COMBEE,
|
||||||
Species.VESPIQUEN,
|
Species.VESPIQUEN,
|
||||||
Species.PACHIRISU,
|
Species.PACHIRISU,
|
||||||
Species.BUIZEL,
|
Species.BUIZEL,
|
||||||
Species.FLOATZEL,
|
Species.FLOATZEL,
|
||||||
|
Species.CHERUBI,
|
||||||
|
Species.CHERRIM,
|
||||||
Species.SHELLOS,
|
Species.SHELLOS,
|
||||||
Species.GASTRODON,
|
Species.GASTRODON,
|
||||||
Species.AMBIPOM,
|
Species.AMBIPOM,
|
||||||
Species.DRIFLOON,
|
Species.DRIFLOON,
|
||||||
Species.DRIFBLIM,
|
Species.DRIFBLIM,
|
||||||
|
Species.BUNEARY,
|
||||||
|
Species.LOPUNNY,
|
||||||
Species.MISMAGIUS,
|
Species.MISMAGIUS,
|
||||||
Species.HONCHKROW,
|
Species.HONCHKROW,
|
||||||
|
Species.GLAMEOW,
|
||||||
|
Species.PURUGLY,
|
||||||
Species.CHINGLING,
|
Species.CHINGLING,
|
||||||
Species.STUNKY,
|
Species.STUNKY,
|
||||||
Species.SKUNTANK,
|
Species.SKUNTANK,
|
||||||
Species.BRONZOR,
|
Species.BRONZOR,
|
||||||
Species.BRONZONG,
|
Species.BRONZONG,
|
||||||
Species.BONSLY,
|
Species.BONSLY,
|
||||||
|
Species.MIME_JR,
|
||||||
Species.HAPPINY,
|
Species.HAPPINY,
|
||||||
|
Species.CHATOT,
|
||||||
Species.SPIRITOMB,
|
Species.SPIRITOMB,
|
||||||
Species.GIBLE,
|
Species.GIBLE,
|
||||||
Species.GABITE,
|
Species.GABITE,
|
||||||
@ -62248,19 +62447,30 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.LUCARIO,
|
Species.LUCARIO,
|
||||||
Species.HIPPOPOTAS,
|
Species.HIPPOPOTAS,
|
||||||
Species.HIPPOWDON,
|
Species.HIPPOWDON,
|
||||||
|
Species.SKORUPI,
|
||||||
|
Species.DRAPION,
|
||||||
Species.CROAGUNK,
|
Species.CROAGUNK,
|
||||||
Species.TOXICROAK,
|
Species.TOXICROAK,
|
||||||
|
Species.CARNIVINE,
|
||||||
Species.FINNEON,
|
Species.FINNEON,
|
||||||
Species.LUMINEON,
|
Species.LUMINEON,
|
||||||
|
Species.MANTYKE,
|
||||||
Species.SNOVER,
|
Species.SNOVER,
|
||||||
Species.ABOMASNOW,
|
Species.ABOMASNOW,
|
||||||
Species.WEAVILE,
|
Species.WEAVILE,
|
||||||
Species.MAGNEZONE,
|
Species.MAGNEZONE,
|
||||||
|
Species.LICKILICKY,
|
||||||
|
Species.RHYPERIOR,
|
||||||
|
Species.TANGROWTH,
|
||||||
|
Species.ELECTIVIRE,
|
||||||
|
Species.MAGMORTAR,
|
||||||
|
Species.TOGEKISS,
|
||||||
Species.YANMEGA,
|
Species.YANMEGA,
|
||||||
Species.LEAFEON,
|
Species.LEAFEON,
|
||||||
Species.GLACEON,
|
Species.GLACEON,
|
||||||
Species.GLISCOR,
|
Species.GLISCOR,
|
||||||
Species.MAMOSWINE,
|
Species.MAMOSWINE,
|
||||||
|
Species.PORYGON_Z,
|
||||||
Species.GALLADE,
|
Species.GALLADE,
|
||||||
Species.PROBOPASS,
|
Species.PROBOPASS,
|
||||||
Species.DUSKNOIR,
|
Species.DUSKNOIR,
|
||||||
@ -62272,39 +62482,127 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.DIALGA,
|
Species.DIALGA,
|
||||||
Species.PALKIA,
|
Species.PALKIA,
|
||||||
Species.HEATRAN,
|
Species.HEATRAN,
|
||||||
|
Species.REGIGIGAS,
|
||||||
Species.GIRATINA,
|
Species.GIRATINA,
|
||||||
Species.CRESSELIA,
|
Species.CRESSELIA,
|
||||||
|
Species.PHIONE,
|
||||||
|
Species.MANAPHY,
|
||||||
|
Species.DARKRAI,
|
||||||
|
Species.SHAYMIN,
|
||||||
Species.ARCEUS,
|
Species.ARCEUS,
|
||||||
|
Species.VICTINI,
|
||||||
|
Species.SNIVY,
|
||||||
|
Species.SERVINE,
|
||||||
|
Species.SERPERIOR,
|
||||||
|
Species.TEPIG,
|
||||||
|
Species.PIGNITE,
|
||||||
|
Species.EMBOAR,
|
||||||
Species.OSHAWOTT,
|
Species.OSHAWOTT,
|
||||||
Species.DEWOTT,
|
Species.DEWOTT,
|
||||||
Species.SAMUROTT,
|
Species.SAMUROTT,
|
||||||
|
Species.PATRAT,
|
||||||
|
Species.WATCHOG,
|
||||||
|
Species.LILLIPUP,
|
||||||
|
Species.HERDIER,
|
||||||
|
Species.STOUTLAND,
|
||||||
|
Species.PURRLOIN,
|
||||||
|
Species.LIEPARD,
|
||||||
|
Species.PANSAGE,
|
||||||
|
Species.SIMISAGE,
|
||||||
|
Species.PANSEAR,
|
||||||
|
Species.SIMISEAR,
|
||||||
|
Species.PANPOUR,
|
||||||
|
Species.SIMIPOUR,
|
||||||
|
Species.MUNNA,
|
||||||
|
Species.MUSHARNA,
|
||||||
|
Species.PIDOVE,
|
||||||
|
Species.TRANQUILL,
|
||||||
|
Species.UNFEZANT,
|
||||||
|
Species.BLITZLE,
|
||||||
|
Species.ZEBSTRIKA,
|
||||||
|
Species.ROGGENROLA,
|
||||||
|
Species.BOLDORE,
|
||||||
|
Species.GIGALITH,
|
||||||
|
Species.WOOBAT,
|
||||||
|
Species.SWOOBAT,
|
||||||
|
Species.DRILBUR,
|
||||||
|
Species.EXCADRILL,
|
||||||
|
Species.AUDINO,
|
||||||
Species.TIMBURR,
|
Species.TIMBURR,
|
||||||
Species.GURDURR,
|
Species.GURDURR,
|
||||||
Species.CONKELDURR,
|
Species.CONKELDURR,
|
||||||
|
Species.TYMPOLE,
|
||||||
|
Species.PALPITOAD,
|
||||||
|
Species.SEISMITOAD,
|
||||||
|
Species.THROH,
|
||||||
|
Species.SAWK,
|
||||||
Species.SEWADDLE,
|
Species.SEWADDLE,
|
||||||
Species.SWADLOON,
|
Species.SWADLOON,
|
||||||
Species.LEAVANNY,
|
Species.LEAVANNY,
|
||||||
|
Species.VENIPEDE,
|
||||||
|
Species.WHIRLIPEDE,
|
||||||
|
Species.SCOLIPEDE,
|
||||||
|
Species.COTTONEE,
|
||||||
|
Species.WHIMSICOTT,
|
||||||
Species.PETILIL,
|
Species.PETILIL,
|
||||||
Species.LILLIGANT,
|
Species.LILLIGANT,
|
||||||
Species.BASCULIN,
|
Species.BASCULIN,
|
||||||
Species.SANDILE,
|
Species.SANDILE,
|
||||||
Species.KROKOROK,
|
Species.KROKOROK,
|
||||||
Species.KROOKODILE,
|
Species.KROOKODILE,
|
||||||
|
Species.DARUMAKA,
|
||||||
|
Species.DARMANITAN,
|
||||||
|
Species.MARACTUS,
|
||||||
|
Species.DWEBBLE,
|
||||||
|
Species.CRUSTLE,
|
||||||
|
Species.SCRAGGY,
|
||||||
|
Species.SCRAFTY,
|
||||||
|
Species.SIGILYPH,
|
||||||
|
Species.YAMASK,
|
||||||
|
Species.COFAGRIGUS,
|
||||||
|
Species.TIRTOUGA,
|
||||||
|
Species.CARRACOSTA,
|
||||||
|
Species.ARCHEN,
|
||||||
|
Species.ARCHEOPS,
|
||||||
|
Species.TRUBBISH,
|
||||||
|
Species.GARBODOR,
|
||||||
Species.ZORUA,
|
Species.ZORUA,
|
||||||
Species.ZOROARK,
|
Species.ZOROARK,
|
||||||
|
Species.MINCCINO,
|
||||||
|
Species.CINCCINO,
|
||||||
Species.GOTHITA,
|
Species.GOTHITA,
|
||||||
Species.GOTHORITA,
|
Species.GOTHORITA,
|
||||||
Species.GOTHITELLE,
|
Species.GOTHITELLE,
|
||||||
|
Species.SOLOSIS,
|
||||||
|
Species.DUOSION,
|
||||||
|
Species.REUNICLUS,
|
||||||
Species.DUCKLETT,
|
Species.DUCKLETT,
|
||||||
Species.SWANNA,
|
Species.SWANNA,
|
||||||
|
Species.VANILLITE,
|
||||||
|
Species.VANILLISH,
|
||||||
|
Species.VANILLUXE,
|
||||||
Species.DEERLING,
|
Species.DEERLING,
|
||||||
Species.SAWSBUCK,
|
Species.SAWSBUCK,
|
||||||
|
Species.EMOLGA,
|
||||||
|
Species.KARRABLAST,
|
||||||
|
Species.ESCAVALIER,
|
||||||
Species.FOONGUS,
|
Species.FOONGUS,
|
||||||
Species.AMOONGUSS,
|
Species.AMOONGUSS,
|
||||||
|
Species.FRILLISH,
|
||||||
|
Species.JELLICENT,
|
||||||
Species.ALOMOMOLA,
|
Species.ALOMOMOLA,
|
||||||
|
Species.JOLTIK,
|
||||||
|
Species.GALVANTULA,
|
||||||
|
Species.FERROSEED,
|
||||||
|
Species.FERROTHORN,
|
||||||
|
Species.KLINK,
|
||||||
|
Species.KLANG,
|
||||||
|
Species.KLINKLANG,
|
||||||
Species.TYNAMO,
|
Species.TYNAMO,
|
||||||
Species.EELEKTRIK,
|
Species.EELEKTRIK,
|
||||||
Species.EELEKTROSS,
|
Species.EELEKTROSS,
|
||||||
|
Species.ELGYEM,
|
||||||
|
Species.BEHEEYEM,
|
||||||
Species.LITWICK,
|
Species.LITWICK,
|
||||||
Species.LAMPENT,
|
Species.LAMPENT,
|
||||||
Species.CHANDELURE,
|
Species.CHANDELURE,
|
||||||
@ -62314,23 +62612,40 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.CUBCHOO,
|
Species.CUBCHOO,
|
||||||
Species.BEARTIC,
|
Species.BEARTIC,
|
||||||
Species.CRYOGONAL,
|
Species.CRYOGONAL,
|
||||||
|
Species.SHELMET,
|
||||||
|
Species.ACCELGOR,
|
||||||
|
Species.STUNFISK,
|
||||||
Species.MIENFOO,
|
Species.MIENFOO,
|
||||||
Species.MIENSHAO,
|
Species.MIENSHAO,
|
||||||
|
Species.DRUDDIGON,
|
||||||
|
Species.GOLETT,
|
||||||
|
Species.GOLURK,
|
||||||
Species.PAWNIARD,
|
Species.PAWNIARD,
|
||||||
Species.BISHARP,
|
Species.BISHARP,
|
||||||
|
Species.BOUFFALANT,
|
||||||
Species.RUFFLET,
|
Species.RUFFLET,
|
||||||
Species.BRAVIARY,
|
Species.BRAVIARY,
|
||||||
Species.VULLABY,
|
Species.VULLABY,
|
||||||
Species.MANDIBUZZ,
|
Species.MANDIBUZZ,
|
||||||
|
Species.HEATMOR,
|
||||||
|
Species.DURANT,
|
||||||
Species.DEINO,
|
Species.DEINO,
|
||||||
Species.ZWEILOUS,
|
Species.ZWEILOUS,
|
||||||
Species.HYDREIGON,
|
Species.HYDREIGON,
|
||||||
Species.LARVESTA,
|
Species.LARVESTA,
|
||||||
Species.VOLCARONA,
|
Species.VOLCARONA,
|
||||||
|
Species.COBALION,
|
||||||
|
Species.TERRAKION,
|
||||||
|
Species.VIRIZION,
|
||||||
Species.TORNADUS,
|
Species.TORNADUS,
|
||||||
Species.THUNDURUS,
|
Species.THUNDURUS,
|
||||||
|
Species.RESHIRAM,
|
||||||
|
Species.ZEKROM,
|
||||||
Species.LANDORUS,
|
Species.LANDORUS,
|
||||||
|
Species.KYUREM,
|
||||||
|
Species.KELDEO,
|
||||||
Species.MELOETTA,
|
Species.MELOETTA,
|
||||||
|
Species.GENESECT,
|
||||||
Species.CHESPIN,
|
Species.CHESPIN,
|
||||||
Species.QUILLADIN,
|
Species.QUILLADIN,
|
||||||
Species.CHESNAUGHT,
|
Species.CHESNAUGHT,
|
||||||
@ -62345,6 +62660,8 @@ export const tmSpecies: TmSpecies = {
|
|||||||
'battle-bond',
|
'battle-bond',
|
||||||
'ash',
|
'ash',
|
||||||
],
|
],
|
||||||
|
Species.BUNNELBY,
|
||||||
|
Species.DIGGERSBY,
|
||||||
Species.FLETCHLING,
|
Species.FLETCHLING,
|
||||||
Species.FLETCHINDER,
|
Species.FLETCHINDER,
|
||||||
Species.TALONFLAME,
|
Species.TALONFLAME,
|
||||||
@ -62354,14 +62671,43 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.LITLEO,
|
Species.LITLEO,
|
||||||
Species.PYROAR,
|
Species.PYROAR,
|
||||||
Species.FLABEBE,
|
Species.FLABEBE,
|
||||||
Species.FLOETTE,
|
[
|
||||||
|
Species.FLOETTE,
|
||||||
|
'red',
|
||||||
|
'yellow',
|
||||||
|
'orange',
|
||||||
|
'blue',
|
||||||
|
'white',
|
||||||
|
],
|
||||||
Species.FLORGES,
|
Species.FLORGES,
|
||||||
Species.SKIDDO,
|
Species.SKIDDO,
|
||||||
Species.GOGOAT,
|
Species.GOGOAT,
|
||||||
|
Species.PANCHAM,
|
||||||
|
Species.PANGORO,
|
||||||
|
Species.FURFROU,
|
||||||
|
Species.ESPURR,
|
||||||
|
Species.MEOWSTIC,
|
||||||
|
Species.HONEDGE,
|
||||||
|
Species.DOUBLADE,
|
||||||
|
Species.AEGISLASH,
|
||||||
|
Species.SPRITZEE,
|
||||||
|
Species.AROMATISSE,
|
||||||
|
Species.SWIRLIX,
|
||||||
|
Species.SLURPUFF,
|
||||||
|
Species.INKAY,
|
||||||
|
Species.MALAMAR,
|
||||||
|
Species.BINACLE,
|
||||||
|
Species.BARBARACLE,
|
||||||
Species.SKRELP,
|
Species.SKRELP,
|
||||||
Species.DRAGALGE,
|
Species.DRAGALGE,
|
||||||
Species.CLAUNCHER,
|
Species.CLAUNCHER,
|
||||||
Species.CLAWITZER,
|
Species.CLAWITZER,
|
||||||
|
Species.HELIOPTILE,
|
||||||
|
Species.HELIOLISK,
|
||||||
|
Species.TYRUNT,
|
||||||
|
Species.TYRANTRUM,
|
||||||
|
Species.AMAURA,
|
||||||
|
Species.AURORUS,
|
||||||
Species.SYLVEON,
|
Species.SYLVEON,
|
||||||
Species.HAWLUCHA,
|
Species.HAWLUCHA,
|
||||||
Species.DEDENNE,
|
Species.DEDENNE,
|
||||||
@ -62372,16 +62718,30 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.KLEFKI,
|
Species.KLEFKI,
|
||||||
Species.PHANTUMP,
|
Species.PHANTUMP,
|
||||||
Species.TREVENANT,
|
Species.TREVENANT,
|
||||||
|
Species.PUMPKABOO,
|
||||||
|
Species.GOURGEIST,
|
||||||
Species.BERGMITE,
|
Species.BERGMITE,
|
||||||
Species.AVALUGG,
|
Species.AVALUGG,
|
||||||
Species.NOIBAT,
|
Species.NOIBAT,
|
||||||
Species.NOIVERN,
|
Species.NOIVERN,
|
||||||
|
Species.XERNEAS,
|
||||||
|
Species.YVELTAL,
|
||||||
|
Species.ZYGARDE,
|
||||||
Species.DIANCIE,
|
Species.DIANCIE,
|
||||||
Species.HOOPA,
|
Species.HOOPA,
|
||||||
Species.VOLCANION,
|
Species.VOLCANION,
|
||||||
Species.ROWLET,
|
Species.ROWLET,
|
||||||
Species.DARTRIX,
|
Species.DARTRIX,
|
||||||
Species.DECIDUEYE,
|
Species.DECIDUEYE,
|
||||||
|
Species.LITTEN,
|
||||||
|
Species.TORRACAT,
|
||||||
|
Species.INCINEROAR,
|
||||||
|
Species.POPPLIO,
|
||||||
|
Species.BRIONNE,
|
||||||
|
Species.PRIMARINA,
|
||||||
|
Species.PIKIPEK,
|
||||||
|
Species.TRUMBEAK,
|
||||||
|
Species.TOUCANNON,
|
||||||
Species.YUNGOOS,
|
Species.YUNGOOS,
|
||||||
Species.GUMSHOOS,
|
Species.GUMSHOOS,
|
||||||
Species.GRUBBIN,
|
Species.GRUBBIN,
|
||||||
@ -62394,28 +62754,84 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.RIBOMBEE,
|
Species.RIBOMBEE,
|
||||||
Species.ROCKRUFF,
|
Species.ROCKRUFF,
|
||||||
Species.LYCANROC,
|
Species.LYCANROC,
|
||||||
|
Species.WISHIWASHI,
|
||||||
Species.MAREANIE,
|
Species.MAREANIE,
|
||||||
Species.TOXAPEX,
|
Species.TOXAPEX,
|
||||||
Species.MUDBRAY,
|
Species.MUDBRAY,
|
||||||
Species.MUDSDALE,
|
Species.MUDSDALE,
|
||||||
|
Species.DEWPIDER,
|
||||||
|
Species.ARAQUANID,
|
||||||
Species.FOMANTIS,
|
Species.FOMANTIS,
|
||||||
Species.LURANTIS,
|
Species.LURANTIS,
|
||||||
|
Species.MORELULL,
|
||||||
|
Species.SHIINOTIC,
|
||||||
Species.SALANDIT,
|
Species.SALANDIT,
|
||||||
Species.SALAZZLE,
|
Species.SALAZZLE,
|
||||||
|
Species.STUFFUL,
|
||||||
|
Species.BEWEAR,
|
||||||
Species.BOUNSWEET,
|
Species.BOUNSWEET,
|
||||||
Species.STEENEE,
|
Species.STEENEE,
|
||||||
Species.TSAREENA,
|
Species.TSAREENA,
|
||||||
|
Species.COMFEY,
|
||||||
Species.ORANGURU,
|
Species.ORANGURU,
|
||||||
Species.PASSIMIAN,
|
Species.PASSIMIAN,
|
||||||
|
Species.WIMPOD,
|
||||||
|
Species.GOLISOPOD,
|
||||||
Species.SANDYGAST,
|
Species.SANDYGAST,
|
||||||
Species.PALOSSAND,
|
Species.PALOSSAND,
|
||||||
|
Species.TYPE_NULL,
|
||||||
|
Species.SILVALLY,
|
||||||
|
Species.MINIOR,
|
||||||
Species.KOMALA,
|
Species.KOMALA,
|
||||||
|
Species.TURTONATOR,
|
||||||
|
Species.TOGEDEMARU,
|
||||||
Species.MIMIKYU,
|
Species.MIMIKYU,
|
||||||
Species.BRUXISH,
|
Species.BRUXISH,
|
||||||
|
Species.DRAMPA,
|
||||||
|
Species.DHELMISE,
|
||||||
Species.JANGMO_O,
|
Species.JANGMO_O,
|
||||||
Species.HAKAMO_O,
|
Species.HAKAMO_O,
|
||||||
Species.KOMMO_O,
|
Species.KOMMO_O,
|
||||||
|
Species.TAPU_KOKO,
|
||||||
|
Species.TAPU_LELE,
|
||||||
|
Species.TAPU_BULU,
|
||||||
|
Species.TAPU_FINI,
|
||||||
|
Species.SOLGALEO,
|
||||||
|
Species.LUNALA,
|
||||||
|
Species.NIHILEGO,
|
||||||
|
Species.BUZZWOLE,
|
||||||
|
Species.PHEROMOSA,
|
||||||
|
Species.XURKITREE,
|
||||||
|
Species.CELESTEELA,
|
||||||
|
Species.KARTANA,
|
||||||
|
Species.GUZZLORD,
|
||||||
|
Species.NECROZMA,
|
||||||
Species.MAGEARNA,
|
Species.MAGEARNA,
|
||||||
|
Species.MARSHADOW,
|
||||||
|
Species.POIPOLE,
|
||||||
|
Species.NAGANADEL,
|
||||||
|
Species.STAKATAKA,
|
||||||
|
Species.BLACEPHALON,
|
||||||
|
Species.ZERAORA,
|
||||||
|
Species.ALOLA_RATTATA,
|
||||||
|
Species.ALOLA_RATICATE,
|
||||||
|
Species.ALOLA_RAICHU,
|
||||||
|
Species.ALOLA_SANDSHREW,
|
||||||
|
Species.ALOLA_SANDSLASH,
|
||||||
|
Species.ALOLA_VULPIX,
|
||||||
|
Species.ALOLA_NINETALES,
|
||||||
|
Species.ALOLA_DIGLETT,
|
||||||
|
Species.ALOLA_DUGTRIO,
|
||||||
|
Species.ALOLA_MEOWTH,
|
||||||
|
Species.ALOLA_PERSIAN,
|
||||||
|
Species.ALOLA_GEODUDE,
|
||||||
|
Species.ALOLA_GRAVELER,
|
||||||
|
Species.ALOLA_GOLEM,
|
||||||
|
Species.ALOLA_GRIMER,
|
||||||
|
Species.ALOLA_MUK,
|
||||||
|
Species.ALOLA_EXEGGUTOR,
|
||||||
|
Species.ALOLA_MAROWAK,
|
||||||
|
Species.ETERNAL_FLOETTE,
|
||||||
Species.GROOKEY,
|
Species.GROOKEY,
|
||||||
Species.THWACKEY,
|
Species.THWACKEY,
|
||||||
Species.RILLABOOM,
|
Species.RILLABOOM,
|
||||||
@ -62596,21 +63012,6 @@ export const tmSpecies: TmSpecies = {
|
|||||||
Species.MUNKIDORI,
|
Species.MUNKIDORI,
|
||||||
Species.FEZANDIPITI,
|
Species.FEZANDIPITI,
|
||||||
Species.OGERPON,
|
Species.OGERPON,
|
||||||
Species.ALOLA_RAICHU,
|
|
||||||
Species.ALOLA_SANDSHREW,
|
|
||||||
Species.ALOLA_SANDSLASH,
|
|
||||||
Species.ALOLA_VULPIX,
|
|
||||||
Species.ALOLA_NINETALES,
|
|
||||||
Species.ALOLA_DIGLETT,
|
|
||||||
Species.ALOLA_DUGTRIO,
|
|
||||||
Species.ALOLA_MEOWTH,
|
|
||||||
Species.ALOLA_PERSIAN,
|
|
||||||
Species.ALOLA_GEODUDE,
|
|
||||||
Species.ALOLA_GRAVELER,
|
|
||||||
Species.ALOLA_GOLEM,
|
|
||||||
Species.ALOLA_GRIMER,
|
|
||||||
Species.ALOLA_MUK,
|
|
||||||
Species.ETERNAL_FLOETTE,
|
|
||||||
Species.GALAR_MEOWTH,
|
Species.GALAR_MEOWTH,
|
||||||
Species.GALAR_SLOWPOKE,
|
Species.GALAR_SLOWPOKE,
|
||||||
Species.GALAR_SLOWBRO,
|
Species.GALAR_SLOWBRO,
|
||||||
|
@ -43,7 +43,9 @@ import { Nature, getNatureStatMultiplier } from '../data/nature';
|
|||||||
import { SpeciesFormChange, SpeciesFormChangeActiveTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangeStatusEffectTrigger } from '../data/pokemon-forms';
|
import { SpeciesFormChange, SpeciesFormChangeActiveTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangeStatusEffectTrigger } from '../data/pokemon-forms';
|
||||||
import { TerrainType } from '../data/terrain';
|
import { TerrainType } from '../data/terrain';
|
||||||
import { TrainerSlot } from '../data/trainer-config';
|
import { TrainerSlot } from '../data/trainer-config';
|
||||||
|
import { BerryType } from '../data/berry';
|
||||||
import { ABILITY_OVERRIDE, MOVE_OVERRIDE, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE, OPP_SHINY_OVERRIDE, OPP_VARIANT_OVERRIDE } from '../overrides';
|
import { ABILITY_OVERRIDE, MOVE_OVERRIDE, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE, OPP_SHINY_OVERRIDE, OPP_VARIANT_OVERRIDE } from '../overrides';
|
||||||
|
import i18next from '../plugins/i18n';
|
||||||
|
|
||||||
export enum FieldPosition {
|
export enum FieldPosition {
|
||||||
CENTER,
|
CENTER,
|
||||||
@ -455,6 +457,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getHeldItems(): PokemonHeldItemModifier[] {
|
||||||
|
if (!this.scene)
|
||||||
|
return [];
|
||||||
|
return this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === this.id, this.isPlayer()) as PokemonHeldItemModifier[];
|
||||||
|
}
|
||||||
|
|
||||||
updateScale(): void {
|
updateScale(): void {
|
||||||
this.setScale(this.getSpriteScale());
|
this.setScale(this.getSpriteScale());
|
||||||
}
|
}
|
||||||
@ -581,6 +589,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
ret *= 1.5;
|
ret *= 1.5;
|
||||||
break;
|
break;
|
||||||
case Stat.SPD:
|
case Stat.SPD:
|
||||||
|
// Check both the player and enemy to see if Tailwind should be multiplying the speed of the Pokemon
|
||||||
|
if ((this.isPlayer() && this.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER))
|
||||||
|
|| (!this.isPlayer() && this.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.ENEMY)))
|
||||||
|
ret *= 2;
|
||||||
|
|
||||||
if (this.getTag(BattlerTagType.SLOW_START))
|
if (this.getTag(BattlerTagType.SLOW_START))
|
||||||
ret >>= 1;
|
ret >>= 1;
|
||||||
if (this.status && this.status.effect === StatusEffect.PARALYSIS)
|
if (this.status && this.status.effect === StatusEffect.PARALYSIS)
|
||||||
@ -1410,7 +1423,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
damage.value = this.damageAndUpdate(damage.value, result as DamageResult, isCritical, oneHitKo, oneHitKo);
|
damage.value = this.damageAndUpdate(damage.value, result as DamageResult, isCritical, oneHitKo, oneHitKo);
|
||||||
this.turnData.damageTaken += damage.value;
|
this.turnData.damageTaken += damage.value;
|
||||||
if (isCritical)
|
if (isCritical)
|
||||||
this.scene.queueMessage('A critical hit!');
|
this.scene.queueMessage(i18next.t('battle:hitResultCriticalHit'));
|
||||||
this.scene.setPhaseQueueSplice();
|
this.scene.setPhaseQueueSplice();
|
||||||
if (source.isPlayer()) {
|
if (source.isPlayer()) {
|
||||||
this.scene.validateAchvs(DamageAchv, damage);
|
this.scene.validateAchvs(DamageAchv, damage);
|
||||||
@ -1428,16 +1441,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
if (source.turnData.hitsLeft === 1) {
|
if (source.turnData.hitsLeft === 1) {
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case HitResult.SUPER_EFFECTIVE:
|
case HitResult.SUPER_EFFECTIVE:
|
||||||
this.scene.queueMessage('It\'s super effective!');
|
this.scene.queueMessage(i18next.t('battle:hitResultSuperEffective'));
|
||||||
break;
|
break;
|
||||||
case HitResult.NOT_VERY_EFFECTIVE:
|
case HitResult.NOT_VERY_EFFECTIVE:
|
||||||
this.scene.queueMessage('It\'s not very effective…');
|
this.scene.queueMessage(i18next.t('battle:hitResultNotVeryEffective'));
|
||||||
break;
|
break;
|
||||||
case HitResult.NO_EFFECT:
|
case HitResult.NO_EFFECT:
|
||||||
this.scene.queueMessage(`It doesn\'t affect ${this.name}!`);
|
this.scene.queueMessage(i18next.t('battle:hitResultNoEffect', { pokemonName: this.name }));
|
||||||
break;
|
break;
|
||||||
case HitResult.ONE_HIT_KO:
|
case HitResult.ONE_HIT_KO:
|
||||||
this.scene.queueMessage('It\'s a one-hit KO!');
|
this.scene.queueMessage(i18next.t('battle:hitResultOneHitKO'));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1454,7 +1467,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
defendingSidePlayField.forEach((p) => applyPreDefendAbAttrs(FieldPriorityMoveImmunityAbAttr, p, source, battlerMove, cancelled, typeMultiplier));
|
defendingSidePlayField.forEach((p) => applyPreDefendAbAttrs(FieldPriorityMoveImmunityAbAttr, p, source, battlerMove, cancelled, typeMultiplier));
|
||||||
}
|
}
|
||||||
if (!typeMultiplier.value)
|
if (!typeMultiplier.value)
|
||||||
this.scene.queueMessage(`It doesn\'t affect ${this.name}!`);
|
this.scene.queueMessage(i18next.t('battle:hitResultNoEffect', { pokemonName: this.name }));
|
||||||
result = cancelled.value || !typeMultiplier.value ? HitResult.NO_EFFECT : HitResult.STATUS;
|
result = cancelled.value || !typeMultiplier.value ? HitResult.NO_EFFECT : HitResult.STATUS;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -2673,7 +2686,7 @@ export class EnemyPokemon extends Pokemon {
|
|||||||
for (let mt of moveTargets[move.id]) {
|
for (let mt of moveTargets[move.id]) {
|
||||||
const target = this.scene.getField()[mt];
|
const target = this.scene.getField()[mt];
|
||||||
let targetScore = move.getUserBenefitScore(this, target, move) + move.getTargetBenefitScore(this, target, move) * (mt < BattlerIndex.ENEMY === this.isPlayer() ? 1 : -1);
|
let targetScore = move.getUserBenefitScore(this, target, move) + move.getTargetBenefitScore(this, target, move) * (mt < BattlerIndex.ENEMY === this.isPlayer() ? 1 : -1);
|
||||||
if (move.name.endsWith(' (N)'))
|
if (move.name.endsWith(' (N)') || !move.applyConditions(this, target, move))
|
||||||
targetScore = -20;
|
targetScore = -20;
|
||||||
else if (move instanceof AttackMove) {
|
else if (move instanceof AttackMove) {
|
||||||
const effectiveness = target.getAttackMoveEffectiveness(this, pokemonMove);
|
const effectiveness = target.getAttackMoveEffectiveness(this, pokemonMove);
|
||||||
@ -2993,6 +3006,7 @@ export class PokemonSummonData {
|
|||||||
export class PokemonBattleData {
|
export class PokemonBattleData {
|
||||||
public hitCount: integer = 0;
|
public hitCount: integer = 0;
|
||||||
public endured: boolean = false;
|
public endured: boolean = false;
|
||||||
|
public berriesEaten: BerryType[] = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
export class PokemonBattleSummonData {
|
export class PokemonBattleSummonData {
|
||||||
|
@ -67,6 +67,7 @@ export class LoadingScene extends SceneBase {
|
|||||||
this.loadImage('achv_bar_2', 'ui');
|
this.loadImage('achv_bar_2', 'ui');
|
||||||
this.loadImage('achv_bar_3', 'ui');
|
this.loadImage('achv_bar_3', 'ui');
|
||||||
this.loadImage('achv_bar_4', 'ui');
|
this.loadImage('achv_bar_4', 'ui');
|
||||||
|
this.loadImage('achv_bar_5', 'ui');
|
||||||
this.loadImage('shiny_star', 'ui', 'shiny.png');
|
this.loadImage('shiny_star', 'ui', 'shiny.png');
|
||||||
this.loadImage('shiny_star_1', 'ui', 'shiny_1.png');
|
this.loadImage('shiny_star_1', 'ui', 'shiny_1.png');
|
||||||
this.loadImage('shiny_star_2', 'ui', 'shiny_2.png');
|
this.loadImage('shiny_star_2', 'ui', 'shiny_2.png');
|
||||||
|
52
src/locales/de/battle.ts
Normal file
52
src/locales/de/battle.ts
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
|
export const battle: SimpleTranslationEntries = {
|
||||||
|
"bossAppeared": "{{bossName}} erscheint.",
|
||||||
|
"trainerAppeared": "{{trainerName}}\nmöchte kämpfen!",
|
||||||
|
"singleWildAppeared": "Ein wildes {{pokemonName}} erscheint!",
|
||||||
|
"multiWildAppeared": "Ein wildes {{pokemonName1}}\nund {{pokemonName2}} erscheinen!",
|
||||||
|
"playerComeBack": "Komm zurück, {{pokemonName}}!",
|
||||||
|
"trainerComeBack": "{{trainerName}} ruft {{pokemonName}} zurück!",
|
||||||
|
"playerGo": "Los! {{pokemonName}}!",
|
||||||
|
"trainerGo": "{{trainerName}} sendet {{pokemonName}} raus!",
|
||||||
|
"switchQuestion": "Willst du\n{{pokemonName}} auswechseln?",
|
||||||
|
"trainerDefeated": `You defeated\n{{trainerName}}!`,
|
||||||
|
"pokemonCaught": "{{pokemonName}} was caught!",
|
||||||
|
"pokemon": "Pokémon",
|
||||||
|
"sendOutPokemon": "Los! {{pokemonName}}!",
|
||||||
|
"hitResultCriticalHit": "A critical hit!",
|
||||||
|
"hitResultSuperEffective": "It's super effective!",
|
||||||
|
"hitResultNotVeryEffective": "It's not very effective…",
|
||||||
|
"hitResultNoEffect": "It doesn't affect {{pokemonName}}!",
|
||||||
|
"hitResultOneHitKO": "It's a one-hit KO!",
|
||||||
|
"attackFailed": "But it failed!",
|
||||||
|
"attackHitsCount": `Hit {{count}} time(s)!`,
|
||||||
|
"expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!",
|
||||||
|
"levelUp": "{{pokemonName}} grew to\nLv. {{level}}!",
|
||||||
|
"learnMove": "{{pokemonName}} learned\n{{moveName}}!",
|
||||||
|
"learnMovePrompt": "{{pokemonName}} wants to learn the\nmove {{moveName}}.",
|
||||||
|
"learnMoveLimitReached": "However, {{pokemonName}} already\nknows four moves.",
|
||||||
|
"learnMoveReplaceQuestion": "Should a move be forgotten and\nreplaced with {{moveName}}?",
|
||||||
|
"learnMoveStopTeaching": "Stop trying to teach\n{{moveName}}?",
|
||||||
|
"learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.",
|
||||||
|
"learnMoveForgetQuestion": "Which move should be forgotten?",
|
||||||
|
"learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.",
|
||||||
|
"levelCapUp": "Das Levellimit\nhat sich zu {{levelCap}} erhöht!",
|
||||||
|
"moveNotImplemented": "{{moveName}} ist noch nicht implementiert und kann nicht ausgewählt werden.",
|
||||||
|
"moveDisabled": "{{moveName}} ist deaktiviert!",
|
||||||
|
"noPokeballForce": "Eine unsichtbare Kraft\nverhindert die Nutzung von Pokébällen.",
|
||||||
|
"noPokeballTrainer": "Du kannst das Pokémon\neines anderen Trainers nicht fangen!",
|
||||||
|
"noPokeballMulti": "Du kannst erst einen Pokéball werden,\nwenn nur noch ein Pokémon übrig ist!",
|
||||||
|
"noPokeballStrong": "Das Ziel-Pokémon ist zu stark, um gefangen zu werden!\nDu musst es zuerst schwächen!",
|
||||||
|
"noEscapeForce": "Eine unsichtbare Kraft\nverhindert die Flucht.",
|
||||||
|
"noEscapeTrainer": "Du kannst nicht\naus einem Trainerkampf fliehen!",
|
||||||
|
"noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nverhindert {{escapeVerb}}!",
|
||||||
|
"runAwaySuccess": "You got away safely!",
|
||||||
|
"runAwayCannotEscape": 'You can\'t escape!',
|
||||||
|
"escapeVerbSwitch": "auswechseln",
|
||||||
|
"escapeVerbFlee": "flucht",
|
||||||
|
"notDisabled": "{{moveName}} ist\nnicht mehr deaktiviert!",
|
||||||
|
"skipItemQuestion": "Are you sure you want to skip taking an item?",
|
||||||
|
"eggHatching": "Oh?",
|
||||||
|
"ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?"
|
||||||
|
} as const;
|
6
src/locales/de/fight-ui-handler.ts
Normal file
6
src/locales/de/fight-ui-handler.ts
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
|
export const fightUiHandler: SimpleTranslationEntries = {
|
||||||
|
"pp": "PP",
|
||||||
|
"power": "POWER",
|
||||||
|
} as const;
|
@ -35,32 +35,8 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"boyOrGirl": "Bist du ein Junge oder ein Mädchen?",
|
"boyOrGirl": "Bist du ein Junge oder ein Mädchen?",
|
||||||
"boy": "Junge",
|
"boy": "Junge",
|
||||||
"girl": "Mädchen",
|
"girl": "Mädchen",
|
||||||
"bossAppeared": "{{bossName}} erscheint.",
|
|
||||||
"trainerAppeared": "{{trainerName}}\nmöchte kämpfen!",
|
|
||||||
"singleWildAppeared": "Ein wildes {{pokemonName}} erscheint!",
|
|
||||||
"multiWildAppeared": "Ein wildes {{pokemonName1}}\nund {{pokemonName2}} erscheinen!",
|
|
||||||
"playerComeBack": "Komm zurück, {{pokemonName}}!",
|
|
||||||
"trainerComeBack": "{{trainerName}} ruft {{pokemonName}} zurück!",
|
|
||||||
"playerGo": "Los! {{pokemonName}}!",
|
|
||||||
"trainerGo": "{{trainerName}} sendet {{pokemonName}} raus!",
|
|
||||||
"switchQuestion": "Willst du\n{{pokemonName}} auswechseln?",
|
|
||||||
"pokemon": "Pokémon",
|
|
||||||
"sendOutPokemon": "Los! {{pokemonName}}!",
|
|
||||||
"levelCapUp": "Das Levellimit\nhat sich zu {{levelCap}} erhöht!",
|
|
||||||
"moveNotImplemented": "{{moveName}} ist noch nicht implementiert und kann nicht ausgewählt werden.",
|
|
||||||
"moveDisabled": "{{moveName}} ist deaktiviert!",
|
|
||||||
"noPokeballForce": "Eine unsichtbare Kraft\nverhindert die Nutzung von Pokébällen.",
|
|
||||||
"noPokeballTrainer": "Du kannst das Pokémon\neines anderen Trainers nicht fangen!",
|
|
||||||
"noPokeballMulti": "Du kannst erst einen Pokéball werden,\nwenn nur noch ein Pokémon übrig ist!",
|
|
||||||
"noPokeballStrong": "Das Ziel-Pokémon ist zu stark, um gefangen zu werden!\nDu musst es zuerst schwächen!",
|
|
||||||
"noEscapeForce": "Eine unsichtbare Kraft\nverhindert die Flucht.",
|
|
||||||
"noEscapeTrainer": "Du kannst nicht\naus einem Trainerkampf fliehen!",
|
|
||||||
"noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nverhindert {{escapeVerb}}!",
|
|
||||||
"escapeVerbSwitch": "auswechseln",
|
|
||||||
"escapeVerbFlee": "flucht",
|
|
||||||
"notDisabled": "{{moveName}} ist\nnicht mehr deaktiviert!",
|
|
||||||
"rankings": "Rankings",
|
|
||||||
"dailyRankings": "Daily Rankings",
|
"dailyRankings": "Daily Rankings",
|
||||||
|
"weeklyRankings": "Weekly Rankings",
|
||||||
"noRankings": "No Rankings",
|
"noRankings": "No Rankings",
|
||||||
"loading": "Loading…",
|
"loading": "Loading…",
|
||||||
"playersOnline": "Players Online"
|
"playersOnline": "Players Online"
|
||||||
|
@ -22,7 +22,7 @@ export const tutorial: SimpleTranslationEntries = {
|
|||||||
|
|
||||||
"statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled.
|
"statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled.
|
||||||
$Your Pokémon are recalled before a trainer battle and before entering a new biome.
|
$Your Pokémon are recalled before a trainer battle and before entering a new biome.
|
||||||
$You can also view the stat changes for the Pokémon on the field by holding C.`,
|
$You can also view the stat changes for the Pokémon on the field by holding C or Shift.`,
|
||||||
|
|
||||||
"selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one.
|
"selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one.
|
||||||
$These range from consumables, to Pokémon held items, to passive permanent items.
|
$These range from consumables, to Pokémon held items, to passive permanent items.
|
||||||
|
52
src/locales/en/battle.ts
Normal file
52
src/locales/en/battle.ts
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
|
export const battle: SimpleTranslationEntries = {
|
||||||
|
"bossAppeared": "{{bossName}} appeared.",
|
||||||
|
"trainerAppeared": "{{trainerName}}\nwould like to battle!",
|
||||||
|
"singleWildAppeared": "A wild {{pokemonName}} appeared!",
|
||||||
|
"multiWildAppeared": "A wild {{pokemonName1}}\nand {{pokemonName2}} appeared!",
|
||||||
|
"playerComeBack": "Come back, {{pokemonName}}!",
|
||||||
|
"trainerComeBack": "{{trainerName}} withdrew {{pokemonName}}!",
|
||||||
|
"playerGo": "Go! {{pokemonName}}!",
|
||||||
|
"trainerGo": "{{trainerName}} sent out {{pokemonName}}!",
|
||||||
|
"switchQuestion": "Will you switch\n{{pokemonName}}?",
|
||||||
|
"trainerDefeated": `You defeated\n{{trainerName}}!`,
|
||||||
|
"pokemonCaught": "{{pokemonName}} was caught!",
|
||||||
|
"pokemon": "Pokémon",
|
||||||
|
"sendOutPokemon": "Go! {{pokemonName}}!",
|
||||||
|
"hitResultCriticalHit": "A critical hit!",
|
||||||
|
"hitResultSuperEffective": "It's super effective!",
|
||||||
|
"hitResultNotVeryEffective": "It's not very effective…",
|
||||||
|
"hitResultNoEffect": "It doesn't affect {{pokemonName}}!",
|
||||||
|
"hitResultOneHitKO": "It's a one-hit KO!",
|
||||||
|
"attackFailed": "But it failed!",
|
||||||
|
"attackHitsCount": `Hit {{count}} time(s)!`,
|
||||||
|
"expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!",
|
||||||
|
"levelUp": "{{pokemonName}} grew to\nLv. {{level}}!",
|
||||||
|
"learnMove": "{{pokemonName}} learned\n{{moveName}}!",
|
||||||
|
"learnMovePrompt": "{{pokemonName}} wants to learn the\nmove {{moveName}}.",
|
||||||
|
"learnMoveLimitReached": "However, {{pokemonName}} already\nknows four moves.",
|
||||||
|
"learnMoveReplaceQuestion": "Should a move be forgotten and\nreplaced with {{moveName}}?",
|
||||||
|
"learnMoveStopTeaching": "Stop trying to teach\n{{moveName}}?",
|
||||||
|
"learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.",
|
||||||
|
"learnMoveForgetQuestion": "Which move should be forgotten?",
|
||||||
|
"learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.",
|
||||||
|
"levelCapUp": "The level cap\nhas increased to {{levelCap}}!",
|
||||||
|
"moveNotImplemented": "{{moveName}} is not yet implemented and cannot be selected.",
|
||||||
|
"moveDisabled": "{{moveName}} is disabled!",
|
||||||
|
"noPokeballForce": "An unseen force\nprevents using Poké Balls.",
|
||||||
|
"noPokeballTrainer": "You can't catch\nanother trainer's Pokémon!",
|
||||||
|
"noPokeballMulti": "You can only throw a Poké Ball\nwhen there is one Pokémon remaining!",
|
||||||
|
"noPokeballStrong": "The target Pokémon is too strong to be caught!\nYou need to weaken it first!",
|
||||||
|
"noEscapeForce": "An unseen force\nprevents escape.",
|
||||||
|
"noEscapeTrainer": "You can't run\nfrom a trainer battle!",
|
||||||
|
"noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nprevents {{escapeVerb}}!",
|
||||||
|
"runAwaySuccess": "You got away safely!",
|
||||||
|
"runAwayCannotEscape": 'You can\'t escape!',
|
||||||
|
"escapeVerbSwitch": "switching",
|
||||||
|
"escapeVerbFlee": "fleeing",
|
||||||
|
"notDisabled": "{{moveName}} is disabled\nno more!",
|
||||||
|
"skipItemQuestion": "Are you sure you want to skip taking an item?",
|
||||||
|
"eggHatching": "Oh?",
|
||||||
|
"ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?"
|
||||||
|
} as const;
|
@ -35,51 +35,8 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"boyOrGirl": "Are you a boy or a girl?",
|
"boyOrGirl": "Are you a boy or a girl?",
|
||||||
"boy": "Boy",
|
"boy": "Boy",
|
||||||
"girl": "Girl",
|
"girl": "Girl",
|
||||||
"bossAppeared": "{{bossName}} appeared.",
|
|
||||||
"trainerAppeared": "{{trainerName}}\nwould like to battle!",
|
|
||||||
"singleWildAppeared": "A wild {{pokemonName}} appeared!",
|
|
||||||
"multiWildAppeared": "A wild {{pokemonName1}}\nand {{pokemonName2}} appeared!",
|
|
||||||
"playerComeBack": "Come back, {{pokemonName}}!",
|
|
||||||
"trainerComeBack": "{{trainerName}} withdrew {{pokemonName}}!",
|
|
||||||
"playerGo": "Go! {{pokemonName}}!",
|
|
||||||
"trainerGo": "{{trainerName}} sent out {{pokemonName}}!",
|
|
||||||
"switchQuestion": "Will you switch\n{{pokemonName}}?",
|
|
||||||
"trainerDefeated": `You defeated\n{{trainerName}}!`,
|
|
||||||
"pokemonCaught": "{{pokemonName}} was caught!",
|
|
||||||
"pokemon": "Pokémon",
|
|
||||||
"sendOutPokemon": "Go! {{pokemonName}}!",
|
|
||||||
"attackFailed": "But it failed!",
|
|
||||||
"attackHitsCount": `Hit {{count}} time(s)!`,
|
|
||||||
"expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!",
|
|
||||||
"levelUp": "{{pokemonName}} grew to\nLv. {{level}}!",
|
|
||||||
"learnMove": "{{pokemonName}} learned\n{{moveName}}!",
|
|
||||||
"learnMovePrompt": "{{pokemonName}} wants to learn the\nmove {{moveName}}.",
|
|
||||||
"learnMoveLimitReached": "However, {{pokemonName}} already\nknows four moves.",
|
|
||||||
"learnMoveReplaceQuestion": "Should a move be forgotten and\nreplaced with {{moveName}}?",
|
|
||||||
"learnMoveStopTeaching": "Stop trying to teach\n{{moveName}}?",
|
|
||||||
"learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.",
|
|
||||||
"learnMoveForgetQuestion": "Which move should be forgotten?",
|
|
||||||
"learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.",
|
|
||||||
"levelCapUp": "The level cap\nhas increased to {{levelCap}}!",
|
|
||||||
"moveNotImplemented": "{{moveName}} is not yet implemented and cannot be selected.",
|
|
||||||
"moveDisabled": "{{moveName}} is disabled!",
|
|
||||||
"noPokeballForce": "An unseen force\nprevents using Poké Balls.",
|
|
||||||
"noPokeballTrainer": "You can't catch\nanother trainer's Pokémon!",
|
|
||||||
"noPokeballMulti": "You can only throw a Poké Ball\nwhen there is one Pokémon remaining!",
|
|
||||||
"noPokeballStrong": "The target Pokémon is too strong to be caught!\nYou need to weaken it first!",
|
|
||||||
"noEscapeForce": "An unseen force\nprevents escape.",
|
|
||||||
"noEscapeTrainer": "You can't run\nfrom a trainer battle!",
|
|
||||||
"noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nprevents {{escapeVerb}}!",
|
|
||||||
"runAwaySuccess": "You got away safely!",
|
|
||||||
"runAwayCannotEscape": 'You can\'t escape!',
|
|
||||||
"escapeVerbSwitch": "switching",
|
|
||||||
"escapeVerbFlee": "fleeing",
|
|
||||||
"notDisabled": "{{moveName}} is disabled\nno more!",
|
|
||||||
"skipItemQuestion": "Are you sure you want to skip taking an item?",
|
|
||||||
"eggHatching": "Oh?",
|
|
||||||
"ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?",
|
|
||||||
"rankings": "Rankings",
|
|
||||||
"dailyRankings": "Daily Rankings",
|
"dailyRankings": "Daily Rankings",
|
||||||
|
"weeklyRankings": "Weekly Rankings",
|
||||||
"noRankings": "No Rankings",
|
"noRankings": "No Rankings",
|
||||||
"loading": "Loading…",
|
"loading": "Loading…",
|
||||||
"playersOnline": "Players Online"
|
"playersOnline": "Players Online"
|
||||||
|
@ -22,7 +22,7 @@ export const tutorial: SimpleTranslationEntries = {
|
|||||||
|
|
||||||
"statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled.
|
"statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled.
|
||||||
$Your Pokémon are recalled before a trainer battle and before entering a new biome.
|
$Your Pokémon are recalled before a trainer battle and before entering a new biome.
|
||||||
$You can also view the stat changes for the Pokémon on the field by holding C.`,
|
$You can also view the stat changes for the Pokémon on the field by holding C or Shift.`,
|
||||||
|
|
||||||
"selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one.
|
"selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one.
|
||||||
$These range from consumables, to Pokémon held items, to passive permanent items.
|
$These range from consumables, to Pokémon held items, to passive permanent items.
|
||||||
|
52
src/locales/es/battle.ts
Normal file
52
src/locales/es/battle.ts
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
|
export const battle: SimpleTranslationEntries = {
|
||||||
|
"bossAppeared": "¡{{bossName}} te corta el paso!",
|
||||||
|
"trainerAppeared": "¡{{trainerName}}\nte desafía!",
|
||||||
|
"singleWildAppeared": "¡Un {{pokemonName}} salvaje te corta el paso!",
|
||||||
|
"multiWildAppeared": "¡Un {{pokemonName1}} y un {{pokemonName2}} salvajes\nte cortan el paso!",
|
||||||
|
"playerComeBack": "¡{{pokemonName}}, ven aquí!",
|
||||||
|
"trainerComeBack": "¡{{trainerName}} retira a {{pokemonName}} del combate!",
|
||||||
|
"playerGo": "¡Adelante, {{pokemonName}}!",
|
||||||
|
"trainerGo": "¡{{trainerName}} saca a {{pokemonName}}!",
|
||||||
|
"switchQuestion": "¿Quieres cambiar a\n{{pokemonName}}?",
|
||||||
|
"trainerDefeated": "¡Has derrotado a\n{{trainerName}}!",
|
||||||
|
"pokemonCaught": "¡{{pokemonName}} atrapado!",
|
||||||
|
"pokemon": "Pokémon",
|
||||||
|
"sendOutPokemon": "¡Adelante, {{pokemonName}}!",
|
||||||
|
"hitResultCriticalHit": "A critical hit!",
|
||||||
|
"hitResultSuperEffective": "It's super effective!",
|
||||||
|
"hitResultNotVeryEffective": "It's not very effective…",
|
||||||
|
"hitResultNoEffect": "It doesn't affect {{pokemonName}}!",
|
||||||
|
"hitResultOneHitKO": "It's a one-hit KO!",
|
||||||
|
"attackFailed": "¡Pero ha fallado!",
|
||||||
|
"attackHitsCount": `N.º de golpes: {{count}}.`,
|
||||||
|
"expGain": "{{pokemonName}} ha ganado\n{{exp}} puntos de experiencia.",
|
||||||
|
"levelUp": "¡{{pokemonName}} ha subido al \nNv. {{level}}!",
|
||||||
|
"learnMove": "¡{{pokemonName}} ha aprendido {{moveName}}!",
|
||||||
|
"learnMovePrompt": "{{pokemonName}} quiere aprender {{moveName}}.",
|
||||||
|
"learnMoveLimitReached": "Pero, {{pokemonName}} ya conoce\ncuatro movimientos.",
|
||||||
|
"learnMoveReplaceQuestion": "¿Quieres sustituir uno de sus movimientos por {{moveName}}?",
|
||||||
|
"learnMoveStopTeaching": "¿Prefieres que no aprenda\n{{moveName}}?",
|
||||||
|
"learnMoveNotLearned": "{{pokemonName}} no ha aprendido {{moveName}}.",
|
||||||
|
"learnMoveForgetQuestion": "¿Qué movimiento quieres que olvide?",
|
||||||
|
"learnMoveForgetSuccess": "{{pokemonName}} ha olvidado cómo utilizar {{moveName}}.",
|
||||||
|
"levelCapUp": "¡Se ha incrementado el\nnivel máximo a {{levelCap}}!",
|
||||||
|
"moveNotImplemented": "{{moveName}} aún no está implementado y no se puede seleccionar.",
|
||||||
|
"moveDisabled": "!No puede usar {{moveName}} porque ha sido anulado!",
|
||||||
|
"noPokeballForce": "Una fuerza misteriosa\nte impide usar Poké Balls.",
|
||||||
|
"noPokeballTrainer": "¡No puedes atrapar a los\nPokémon de los demás!",
|
||||||
|
"noPokeballMulti": "¡No se pueden lanzar Poké Balls\ncuando hay más de un Pokémon!",
|
||||||
|
"noPokeballStrong": "¡Este Pokémon es demasiado fuerte para ser capturado!\nNecesitas bajarle los PS primero!",
|
||||||
|
"noEscapeForce": "Una fuerza misteriosa\nte impide huir.",
|
||||||
|
"noEscapeTrainer": "¡No puedes huir de los\ncombates contra Entrenadores!",
|
||||||
|
"noEscapePokemon": "¡El movimiento {{moveName}} de {{pokemonName}} impide la huida!",
|
||||||
|
"runAwaySuccess": "¡Escapas sin problemas!",
|
||||||
|
"runAwayCannotEscape": "¡No has podido escapar!",
|
||||||
|
"escapeVerbSwitch": "cambiar",
|
||||||
|
"escapeVerbFlee": "huir",
|
||||||
|
"notDisabled": "¡El movimiento {{moveName}}\nya no está anulado!",
|
||||||
|
"skipItemQuestion": "¿Estás seguro de que no quieres coger un objeto?",
|
||||||
|
"eggHatching": "¿Y esto?",
|
||||||
|
"ivScannerUseQuestion": "¿Quieres usar el Escáner de IVs en {{pokemonName}}?"
|
||||||
|
} as const;
|
6
src/locales/es/fight-ui-handler.ts
Normal file
6
src/locales/es/fight-ui-handler.ts
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
|
export const fightUiHandler: SimpleTranslationEntries = {
|
||||||
|
"pp": "PP",
|
||||||
|
"power": "POTENCIA",
|
||||||
|
} as const;
|
@ -19,51 +19,8 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"boyOrGirl": "¿Eres un chico o una chica?",
|
"boyOrGirl": "¿Eres un chico o una chica?",
|
||||||
"boy": "Chico",
|
"boy": "Chico",
|
||||||
"girl": "Chica",
|
"girl": "Chica",
|
||||||
"bossAppeared": "¡{{bossName}} te corta el paso!",
|
|
||||||
"trainerAppeared": "¡{{trainerName}}\nte desafía!",
|
|
||||||
"singleWildAppeared": "¡Un {{pokemonName}} salvaje te corta el paso!",
|
|
||||||
"multiWildAppeared": "¡Un {{pokemonName1}} y un {{pokemonName2}} salvajes\nte cortan el paso!",
|
|
||||||
"playerComeBack": "¡{{pokemonName}}, ven aquí!",
|
|
||||||
"trainerComeBack": "¡{{trainerName}} retira a {{pokemonName}} del combate!",
|
|
||||||
"playerGo": "¡Adelante, {{pokemonName}}!",
|
|
||||||
"trainerGo": "¡{{trainerName}} saca a {{pokemonName}}!",
|
|
||||||
"switchQuestion": "¿Quieres cambiar a\n{{pokemonName}}?",
|
|
||||||
"trainerDefeated": "¡Has derrotado a\n{{trainerName}}!",
|
|
||||||
"pokemonCaught": "¡{{pokemonName}} atrapado!",
|
|
||||||
"pokemon": "Pokémon",
|
|
||||||
"sendOutPokemon": "¡Adelante, {{pokemonName}}!",
|
|
||||||
"attackFailed": "¡Pero ha fallado!",
|
|
||||||
"attackHitsCount": `N.º de golpes: {{count}}.`,
|
|
||||||
"expGain": "{{pokemonName}} ha ganado\n{{exp}} puntos de experiencia.",
|
|
||||||
"levelUp": "¡{{pokemonName}} ha subido al \nNv. {{level}}!",
|
|
||||||
"learnMove": "¡{{pokemonName}} ha aprendido {{moveName}}!",
|
|
||||||
"learnMovePrompt": "{{pokemonName}} quiere aprender {{moveName}}.",
|
|
||||||
"learnMoveLimitReached": "Pero, {{pokemonName}} ya conoce\ncuatro movimientos.",
|
|
||||||
"learnMoveReplaceQuestion": "¿Quieres sustituir uno de sus movimientos por {{moveName}}?",
|
|
||||||
"learnMoveStopTeaching": "¿Prefieres que no aprenda\n{{moveName}}?",
|
|
||||||
"learnMoveNotLearned": "{{pokemonName}} no ha aprendido {{moveName}}.",
|
|
||||||
"learnMoveForgetQuestion": "¿Qué movimiento quieres que olvide?",
|
|
||||||
"learnMoveForgetSuccess": "{{pokemonName}} ha olvidado cómo utilizar {{moveName}}.",
|
|
||||||
"levelCapUp": "¡Se ha incrementado el\nnivel máximo a {{levelCap}}!",
|
|
||||||
"moveNotImplemented": "{{moveName}} aún no está implementado y no se puede seleccionar.",
|
|
||||||
"moveDisabled": "!No puede usar {{moveName}} porque ha sido anulado!",
|
|
||||||
"noPokeballForce": "Una fuerza misteriosa\nte impide usar Poké Balls.",
|
|
||||||
"noPokeballTrainer": "¡No puedes atrapar a los\nPokémon de los demás!",
|
|
||||||
"noPokeballMulti": "¡No se pueden lanzar Poké Balls\ncuando hay más de un Pokémon!",
|
|
||||||
"noPokeballStrong": "¡Este Pokémon es demasiado fuerte para ser capturado!\nNecesitas bajarle los PS primero!",
|
|
||||||
"noEscapeForce": "Una fuerza misteriosa\nte impide huir.",
|
|
||||||
"noEscapeTrainer": "¡No puedes huir de los\ncombates contra Entrenadores!",
|
|
||||||
"noEscapePokemon": "¡El movimiento {{moveName}} de {{pokemonName}} impide la huida!",
|
|
||||||
"runAwaySuccess": "¡Escapas sin problemas!",
|
|
||||||
"runAwayCannotEscape": "¡No has podido escapar!",
|
|
||||||
"escapeVerbSwitch": "cambiar",
|
|
||||||
"escapeVerbFlee": "huir",
|
|
||||||
"notDisabled": "¡El movimiento {{moveName}}\nya no está anulado!",
|
|
||||||
"skipItemQuestion": "¿Estás seguro de que no quieres coger un objeto?",
|
|
||||||
"eggHatching": "¿Y esto?",
|
|
||||||
"ivScannerUseQuestion": "¿Quieres usar el Escáner de IVs en {{pokemonName}}?",
|
|
||||||
"rankings": "Rankings",
|
|
||||||
"dailyRankings": "Daily Rankings",
|
"dailyRankings": "Daily Rankings",
|
||||||
|
"weeklyRankings": "Weekly Rankings",
|
||||||
"noRankings": "No Rankings",
|
"noRankings": "No Rankings",
|
||||||
"loading": "Loading…",
|
"loading": "Loading…",
|
||||||
"playersOnline": "Players Online"
|
"playersOnline": "Players Online"
|
||||||
|
@ -22,7 +22,7 @@ export const tutorial: SimpleTranslationEntries = {
|
|||||||
|
|
||||||
"statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled.
|
"statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled.
|
||||||
$Your Pokémon are recalled before a trainer battle and before entering a new biome.
|
$Your Pokémon are recalled before a trainer battle and before entering a new biome.
|
||||||
$You can also view the stat changes for the Pokémon on the field by holding C.`,
|
$You can also view the stat changes for the Pokémon on the field by holding C or Shift.`,
|
||||||
|
|
||||||
"selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one.
|
"selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one.
|
||||||
$These range from consumables, to Pokémon held items, to passive permanent items.
|
$These range from consumables, to Pokémon held items, to passive permanent items.
|
||||||
|
52
src/locales/fr/battle.ts
Normal file
52
src/locales/fr/battle.ts
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
|
export const battle: SimpleTranslationEntries = {
|
||||||
|
"bossAppeared": "Un {{bossName}} apparaît.",
|
||||||
|
"trainerAppeared": "Un combat est lancé\npar {{trainerName}} !",
|
||||||
|
"singleWildAppeared": "Un {{pokemonName}} sauvage apparaît !",
|
||||||
|
"multiWildAppeared": "Un {{pokemonName1}} et un {{pokemonName2}}\nsauvages apparaissent !",
|
||||||
|
"playerComeBack": "{{pokemonName}}, on change !\nReviens !",
|
||||||
|
"trainerComeBack": "{{trainerName}} retire {{pokemonName}} !",
|
||||||
|
"playerGo": "{{pokemonName}} ! Go !",
|
||||||
|
"trainerGo": "{{pokemonName}} est envoyé par\n{{trainerName}} !",
|
||||||
|
"switchQuestion": "Voulez-vous changer\n{{pokemonName}} ?",
|
||||||
|
"trainerDefeated": `Vous avez battu\n{{trainerName}} !`,
|
||||||
|
"pokemonCaught": "Vous avez attrapé {{pokemonName}} !",
|
||||||
|
"pokemon": "Pokémon",
|
||||||
|
"sendOutPokemon": "{{pokemonName}} ! Go !",
|
||||||
|
"hitResultCriticalHit": "Coup critique!",
|
||||||
|
"hitResultSuperEffective": "C’est super efficace!",
|
||||||
|
"hitResultNotVeryEffective": "Ce n’est pas très efficace…",
|
||||||
|
"hitResultNoEffect": "Ça n’affecte pas {{pokemonName}}…",
|
||||||
|
"hitResultOneHitKO": "K.O. en un coup!",
|
||||||
|
"attackFailed": "Mais cela échoue !",
|
||||||
|
"attackHitsCount": `Touché {{count}} fois !`,
|
||||||
|
"expGain": "{{pokemonName}} gagne\n{{exp}} Points d’Exp !",
|
||||||
|
"levelUp": "{{pokemonName}} monte au\nN. {{level}} !",
|
||||||
|
"learnMove": "{{pokemonName}} apprend \n{{moveName}} !",
|
||||||
|
"learnMovePrompt": "{{pokemonName}} veut apprendre\n{{moveName}}.",
|
||||||
|
"learnMoveLimitReached": "Cependant, {{pokemonName}} connait\ndéjà quatre capacités.",
|
||||||
|
"learnMoveReplaceQuestion": "Voulez-vous oublier une capacité\net la remplacer par {{moveName}} ?",
|
||||||
|
"learnMoveStopTeaching": "Arrêter d’apprendre\n{{moveName}} ?",
|
||||||
|
"learnMoveNotLearned": "{{pokemonName}} n’a pas appris\n{{moveName}}.",
|
||||||
|
"learnMoveForgetQuestion": "Quelle capacité doit être oubliée ?",
|
||||||
|
"learnMoveForgetSuccess": "{{pokemonName}} oublie comment\nutiliser {{moveName}}.",
|
||||||
|
"levelCapUp": "La limite de niveau\na été augmentée à {{levelCap}} !",
|
||||||
|
"moveNotImplemented": "{{moveName}} n’est pas encore implémenté et ne peut pas être sélectionné.",
|
||||||
|
"moveDisabled": "{{moveName}} est sous entrave !",
|
||||||
|
"noPokeballForce": "Une force mystérieuse\nempêche l’utilisation des Poké Balls.",
|
||||||
|
"noPokeballTrainer": "Le Dresseur détourne la Ball\nVoler, c’est mal !",
|
||||||
|
"noPokeballMulti": "Impossible ! On ne peut pas viser\nquand il y a deux Pokémon!",
|
||||||
|
"noPokeballStrong": "Le Pokémon est trop fort pour être capturé !\nVous devez d’abord l’affaiblir !",
|
||||||
|
"noEscapeForce": "Une force mystérieuse\nempêche la fuite.",
|
||||||
|
"noEscapeTrainer": "On ne s’enfuit pas d’un\ncombat de Dresseurs !",
|
||||||
|
"noEscapePokemon": "{{moveName}} de {{pokemonName}}\nempêche {{escapeVerb}} !",
|
||||||
|
"runAwaySuccess": "Vous prenez la fuite !",
|
||||||
|
"runAwayCannotEscape": "Fuite impossible !",
|
||||||
|
"escapeVerbSwitch": "le changement",
|
||||||
|
"escapeVerbFlee": "la fuite",
|
||||||
|
"notDisabled": "{{moveName}} n’est plus sous entrave !",
|
||||||
|
"skipItemQuestion": "Êtes-vous sûr·e de ne pas vouloir prendre d’objet ?",
|
||||||
|
"eggHatching": "Oh ?",
|
||||||
|
"ivScannerUseQuestion": "Utiliser le Scanner d’IV sur {{pokemonName}} ?"
|
||||||
|
} as const;
|
@ -30,51 +30,8 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"boyOrGirl": "Es-tu un garçon ou une fille ?",
|
"boyOrGirl": "Es-tu un garçon ou une fille ?",
|
||||||
"boy": "Garçon",
|
"boy": "Garçon",
|
||||||
"girl": "Fille",
|
"girl": "Fille",
|
||||||
"bossAppeared": "Un {{bossName}} apparaît.",
|
|
||||||
"trainerAppeared": "Un combat est lancé\npar {{trainerName}} !",
|
|
||||||
"singleWildAppeared": "Un {{pokemonName}} sauvage apparaît !",
|
|
||||||
"multiWildAppeared": "Un {{pokemonName1}} et un {{pokemonName2}}\nsauvages apparaissent !",
|
|
||||||
"playerComeBack": "{{pokemonName}}, on change !\nReviens !",
|
|
||||||
"trainerComeBack": "{{trainerName}} retire {{pokemonName}} !",
|
|
||||||
"playerGo": "{{pokemonName}} ! Go !",
|
|
||||||
"trainerGo": "{{pokemonName}} est envoyé par\n{{trainerName}} !",
|
|
||||||
"switchQuestion": "Voulez-vous changer\n{{pokemonName}} ?",
|
|
||||||
"trainerDefeated": `Vous avez battu\n{{trainerName}} !`,
|
|
||||||
"pokemonCaught": "Vous avez attrapé {{pokemonName}} !",
|
|
||||||
"pokemon": "Pokémon",
|
|
||||||
"sendOutPokemon": "{{pokemonName}} ! Go !",
|
|
||||||
"attackFailed": "Mais cela échoue !",
|
|
||||||
"attackHitsCount": `Touché {{count}} fois !`,
|
|
||||||
"expGain": "{{pokemonName}} gagne\n{{exp}} Points d’Exp !",
|
|
||||||
"levelUp": "{{pokemonName}} monte au\nN. {{level}} !",
|
|
||||||
"learnMove": "{{pokemonName}} apprend \n{{moveName}} !",
|
|
||||||
"learnMovePrompt": "{{pokemonName}} veut apprendre\n{{moveName}}.",
|
|
||||||
"learnMoveLimitReached": "Cependant, {{pokemonName}} connait\ndéjà quatre capacités.",
|
|
||||||
"learnMoveReplaceQuestion": "Voulez-vous oublier une capacité\net la remplacer par {{moveName}} ?",
|
|
||||||
"learnMoveStopTeaching": "Arrêter d’apprendre\n{{moveName}} ?",
|
|
||||||
"learnMoveNotLearned": "{{pokemonName}} n’a pas appris\n{{moveName}}.",
|
|
||||||
"learnMoveForgetQuestion": "Quelle capacité doit être oubliée ?",
|
|
||||||
"learnMoveForgetSuccess": "{{pokemonName}} oublie comment\nutiliser {{moveName}}.",
|
|
||||||
"levelCapUp": "La limite de niveau\na été augmentée à {{levelCap}} !",
|
|
||||||
"moveNotImplemented": "{{moveName}} n’est pas encore implémenté et ne peut pas être sélectionné.",
|
|
||||||
"moveDisabled": "{{moveName}} est sous entrave !",
|
|
||||||
"noPokeballForce": "Une force mystérieuse\nempêche l’utilisation des Poké Balls.",
|
|
||||||
"noPokeballTrainer": "Le Dresseur détourne la Ball\nVoler, c’est mal !",
|
|
||||||
"noPokeballMulti": "Impossible ! On ne peut pas viser\nquand il y a deux Pokémon!",
|
|
||||||
"noPokeballStrong": "Le Pokémon est trop fort pour être capturé !\nVous devez d’abord l’affaiblir !",
|
|
||||||
"noEscapeForce": "Une force mystérieuse\nempêche la fuite.",
|
|
||||||
"noEscapeTrainer": "On ne s’enfuit pas d’un\ncombat de Dresseurs !",
|
|
||||||
"noEscapePokemon": "{{moveName}} de {{pokemonName}}\nempêche {{escapeVerb}} !",
|
|
||||||
"runAwaySuccess": "Vous prenez la fuite !",
|
|
||||||
"runAwayCannotEscape": "Fuite impossible !",
|
|
||||||
"escapeVerbSwitch": "le changement",
|
|
||||||
"escapeVerbFlee": "la fuite",
|
|
||||||
"notDisabled": "{{moveName}} n’est plus sous entrave !",
|
|
||||||
"skipItemQuestion": "Êtes-vous sûr·e de ne pas vouloir prendre d’objet ?",
|
|
||||||
"eggHatching": "Oh ?",
|
|
||||||
"ivScannerUseQuestion": "Utiliser le Scanner d’IV sur {{pokemonName}} ?",
|
|
||||||
"rankings": "Classement",
|
|
||||||
"dailyRankings": "Classement du Jour",
|
"dailyRankings": "Classement du Jour",
|
||||||
|
"weeklyRankings": "Classement de la Semaine",
|
||||||
"noRankings": "Pas de Classement",
|
"noRankings": "Pas de Classement",
|
||||||
"loading": "Chargement…",
|
"loading": "Chargement…",
|
||||||
"playersOnline": "Joueurs Connectés"
|
"playersOnline": "Joueurs Connectés"
|
||||||
|
@ -8,7 +8,7 @@ export const tutorial: SimpleTranslationEntries = {
|
|||||||
$Tout signalement de bugs passe par le serveur Discord.
|
$Tout signalement de bugs passe par le serveur Discord.
|
||||||
$Si le jeu est lent, vérifiez que l’Accélération Matérielle est activée dans les paramètres du navigateur.`,
|
$Si le jeu est lent, vérifiez que l’Accélération Matérielle est activée dans les paramètres du navigateur.`,
|
||||||
|
|
||||||
"accessMenu": `Accédez au menu avec M ou Échap lors de l'attente d’une\naction.
|
"accessMenu": `Accédez au menu avec M ou Échap lors de l’attente d’une\naction.
|
||||||
$Il contient les paramètres et diverses fonctionnalités`,
|
$Il contient les paramètres et diverses fonctionnalités`,
|
||||||
|
|
||||||
"menu": `Vous pouvez accéder aux paramètres depuis ce menu.
|
"menu": `Vous pouvez accéder aux paramètres depuis ce menu.
|
||||||
@ -17,17 +17,20 @@ export const tutorial: SimpleTranslationEntries = {
|
|||||||
$jetez-y un œil !`,
|
$jetez-y un œil !`,
|
||||||
|
|
||||||
"starterSelect": `Choisissez vos starters depuis cet écran.\nIls formeront votre équipe de départ.
|
"starterSelect": `Choisissez vos starters depuis cet écran.\nIls formeront votre équipe de départ.
|
||||||
$Chacun possède une valeur. Votre équipe peut avoir jusqu’à\n6 membres, tant que vous ne dépassez pas un coût de 10.
|
$Chacun possède une valeur. Votre équipe peut avoir jusqu’à\n6 membres, tant que vous ne dépassez pas un cout de 10.
|
||||||
$Vous pouvez aussi choisir le sexe, le talent et la forme en\nfonction des variants déjà capturés ou éclos.
|
$Vous pouvez aussi choisir le sexe, le talent et la forme en\nfonction des variants déjà capturés ou éclos.
|
||||||
$Les IVs d’un starter sont les meilleurs de tous ceux de son\nespèce déjà obtenus. Essayez donc d’en obtenir plusieurs !`,
|
$Les IVs d’un starter sont les meilleurs de tous ceux de son\nespèce déjà obtenus. Essayez donc d’en obtenir plusieurs !`,
|
||||||
|
|
||||||
"pokerus": `Chaque jour, 3 starters tirés aléatoirement ont un contour
|
"pokerus": `Chaque jour, 3 starters tirés aléatoirement ont un contour
|
||||||
$violet. Si un starter que vous possédez l’a, essayez de
|
$violet. Si un starter que vous possédez l’a, essayez de
|
||||||
$ l’ajouter à votre équipe. Vérifiez bien son résumé !`,
|
$l’ajouter à votre équipe. Vérifiez bien son résumé !`,
|
||||||
|
|
||||||
"statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled.
|
"statChange": `Les changements de stats restent à travers les combats tant que le Pokémon
|
||||||
$Your Pokémon are recalled before a trainer battle and before entering a new biome.
|
$n’est pas rappelé.
|
||||||
$You can also view the stat changes for the Pokémon on the field by holding C.`,
|
$Vos Pokémon sont rappelés avant un combat de Dresseur et avant d’entrer
|
||||||
|
$dans un nouveau biome.
|
||||||
|
$Vous pouvez également voir en combat les changements de stats d’un Pokémon
|
||||||
|
$en maintenant C ou Maj.`,
|
||||||
|
|
||||||
"selectItem": `Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre qu’un.
|
"selectItem": `Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre qu’un.
|
||||||
$Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents.
|
$Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents.
|
||||||
@ -44,4 +47,4 @@ export const tutorial: SimpleTranslationEntries = {
|
|||||||
$Les Pokémon issus d’Œufs ont généralement de\nmeilleurs IVs que les Pokémon sauvages.
|
$Les Pokémon issus d’Œufs ont généralement de\nmeilleurs IVs que les Pokémon sauvages.
|
||||||
$Certains Pokémon ne peuvent être obtenus\nque dans des Œufs.
|
$Certains Pokémon ne peuvent être obtenus\nque dans des Œufs.
|
||||||
$Il y a 3 différentes machines à actionner avec différents\nbonus, prenez celle qui vous convient le mieux !`,
|
$Il y a 3 différentes machines à actionner avec différents\nbonus, prenez celle qui vous convient le mieux !`,
|
||||||
} as const;
|
} as const;
|
||||||
|
52
src/locales/it/battle.ts
Normal file
52
src/locales/it/battle.ts
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
|
export const battle: SimpleTranslationEntries = {
|
||||||
|
"bossAppeared": "{{bossName}} appeared.",
|
||||||
|
"trainerAppeared": "{{trainerName}}\nwould like to battle!",
|
||||||
|
"singleWildAppeared": "A wild {{pokemonName}} appeared!",
|
||||||
|
"multiWildAppeared": "A wild {{pokemonName1}}\nand {{pokemonName2}} appeared!",
|
||||||
|
"playerComeBack": "Come back, {{pokemonName}}!",
|
||||||
|
"trainerComeBack": "{{trainerName}} withdrew {{pokemonName}}!",
|
||||||
|
"playerGo": "Go! {{pokemonName}}!",
|
||||||
|
"trainerGo": "{{trainerName}} sent out {{pokemonName}}!",
|
||||||
|
"switchQuestion": "Will you switch\n{{pokemonName}}?",
|
||||||
|
"trainerDefeated": `You defeated\n{{trainerName}}!`,
|
||||||
|
"pokemonCaught": "{{pokemonName}} was caught!",
|
||||||
|
"pokemon": "Pokémon",
|
||||||
|
"sendOutPokemon": "Go! {{pokemonName}}!",
|
||||||
|
"hitResultCriticalHit": "A critical hit!",
|
||||||
|
"hitResultSuperEffective": "It's super effective!",
|
||||||
|
"hitResultNotVeryEffective": "It's not very effective…",
|
||||||
|
"hitResultNoEffect": "It doesn't affect {{pokemonName}}!",
|
||||||
|
"hitResultOneHitKO": "It's a one-hit KO!",
|
||||||
|
"attackFailed": "But it failed!",
|
||||||
|
"attackHitsCount": `Hit {{count}} time(s)!`,
|
||||||
|
"expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!",
|
||||||
|
"levelUp": "{{pokemonName}} grew to\nLv. {{level}}!",
|
||||||
|
"learnMove": "{{pokemonName}} learned\n{{moveName}}!",
|
||||||
|
"learnMovePrompt": "{{pokemonName}} wants to learn the\nmove {{moveName}}.",
|
||||||
|
"learnMoveLimitReached": "However, {{pokemonName}} already\nknows four moves.",
|
||||||
|
"learnMoveReplaceQuestion": "Should a move be forgotten and\nreplaced with {{moveName}}?",
|
||||||
|
"learnMoveStopTeaching": "Stop trying to teach\n{{moveName}}?",
|
||||||
|
"learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.",
|
||||||
|
"learnMoveForgetQuestion": "Which move should be forgotten?",
|
||||||
|
"learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.",
|
||||||
|
"levelCapUp": "The level cap\nhas increased to {{levelCap}}!",
|
||||||
|
"moveNotImplemented": "{{moveName}} is not yet implemented and cannot be selected.",
|
||||||
|
"moveDisabled": "{{moveName}} is disabled!",
|
||||||
|
"noPokeballForce": "An unseen force\nprevents using Poké Balls.",
|
||||||
|
"noPokeballTrainer": "You can't catch\nanother trainer's Pokémon!",
|
||||||
|
"noPokeballMulti": "You can only throw a Poké Ball\nwhen there is one Pokémon remaining!",
|
||||||
|
"noPokeballStrong": "The target Pokémon is too strong to be caught!\nYou need to weaken it first!",
|
||||||
|
"noEscapeForce": "An unseen force\nprevents escape.",
|
||||||
|
"noEscapeTrainer": "You can't run\nfrom a trainer battle!",
|
||||||
|
"noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nprevents {{escapeVerb}}!",
|
||||||
|
"runAwaySuccess": "You got away safely!",
|
||||||
|
"runAwayCannotEscape": 'You can\'t escape!',
|
||||||
|
"escapeVerbSwitch": "switching",
|
||||||
|
"escapeVerbFlee": "fleeing",
|
||||||
|
"notDisabled": "{{moveName}} is disabled\nno more!",
|
||||||
|
"skipItemQuestion": "Are you sure you want to skip taking an item?",
|
||||||
|
"eggHatching": "Oh?",
|
||||||
|
"ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?"
|
||||||
|
} as const;
|
6
src/locales/it/fight-ui-handler.ts
Normal file
6
src/locales/it/fight-ui-handler.ts
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
|
export const fightUiHandler: SimpleTranslationEntries = {
|
||||||
|
"pp": "PP",
|
||||||
|
"power": "POWER",
|
||||||
|
} as const;
|
@ -1,5 +1,10 @@
|
|||||||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The menu namespace holds most miscellaneous text that isn't directly part of the game's
|
||||||
|
* contents or directly related to Pokemon data. This includes menu navigation, settings,
|
||||||
|
* account interactions, descriptive text, etc.
|
||||||
|
*/
|
||||||
export const menu: SimpleTranslationEntries = {
|
export const menu: SimpleTranslationEntries = {
|
||||||
"cancel": "Annulla",
|
"cancel": "Annulla",
|
||||||
"continue": "Continua",
|
"continue": "Continua",
|
||||||
@ -7,8 +12,31 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"loadGame": "Carica Partita",
|
"loadGame": "Carica Partita",
|
||||||
"dailyRun": "Corsa Giornaliera (Beta)",
|
"dailyRun": "Corsa Giornaliera (Beta)",
|
||||||
"selectGameMode": "Seleziona una modalità di gioco.",
|
"selectGameMode": "Seleziona una modalità di gioco.",
|
||||||
"rankings": "Rankings",
|
"logInOrCreateAccount": "Log in or create an account to start. No email required!",
|
||||||
|
"username": "Username",
|
||||||
|
"password": "Password",
|
||||||
|
"login": "Login",
|
||||||
|
"register": "Register",
|
||||||
|
"emptyUsername": "Username must not be empty",
|
||||||
|
"invalidLoginUsername": "The provided username is invalid",
|
||||||
|
"invalidRegisterUsername": "Username must only contain letters, numbers, or underscores",
|
||||||
|
"invalidLoginPassword": "The provided password is invalid",
|
||||||
|
"invalidRegisterPassword": "Password must be 6 characters or longer",
|
||||||
|
"usernameAlreadyUsed": "The provided username is already in use",
|
||||||
|
"accountNonExistent": "The provided user does not exist",
|
||||||
|
"unmatchingPassword": "The provided password does not match",
|
||||||
|
"passwordNotMatchingConfirmPassword": "Password must match confirm password",
|
||||||
|
"confirmPassword": "Confirm Password",
|
||||||
|
"registrationAgeWarning": "By registering, you confirm you are of 13 years of age or older.",
|
||||||
|
"backToLogin": "Back to Login",
|
||||||
|
"failedToLoadSaveData": "Failed to load save data. Please reload the page.\nIf this continues, please contact the administrator.",
|
||||||
|
"sessionSuccess": "Session loaded successfully.",
|
||||||
|
"failedToLoadSession": "Your session data could not be loaded.\nIt may be corrupted.",
|
||||||
|
"boyOrGirl": "Are you a boy or a girl?",
|
||||||
|
"boy": "Boy",
|
||||||
|
"girl": "Girl",
|
||||||
"dailyRankings": "Daily Rankings",
|
"dailyRankings": "Daily Rankings",
|
||||||
|
"weeklyRankings": "Weekly Rankings",
|
||||||
"noRankings": "No Rankings",
|
"noRankings": "No Rankings",
|
||||||
"loading": "Loading…",
|
"loading": "Loading…",
|
||||||
"playersOnline": "Players Online"
|
"playersOnline": "Players Online"
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
export const pokemonStat: SimpleTranslationEntries = {
|
export const pokemonStat: SimpleTranslationEntries = {
|
||||||
"HP": "Max. HP",
|
"HP": "PS Max",
|
||||||
"HPshortened": "MaxHP",
|
"HPshortened": "PS",
|
||||||
"ATK": "Attack",
|
"ATK": "Attacco",
|
||||||
"ATKshortened": "Atk",
|
"ATKshortened": "Att",
|
||||||
"DEF": "Defense",
|
"DEF": "Difensa",
|
||||||
"DEFshortened": "Def",
|
"DEFshortened": "Dif",
|
||||||
"SPATK": "Sp. Atk",
|
"SPATK": "Att. Sp.",
|
||||||
"SPATKshortened": "SpAtk",
|
"SPATKshortened": "AttSp",
|
||||||
"SPDEF": "Sp. Def",
|
"SPDEF": "Dif. Sp.",
|
||||||
"SPDEFshortened": "SpDef",
|
"SPDEFshortened": "DifSp",
|
||||||
"SPD": "Speed",
|
"SPD": "Velocità",
|
||||||
"SPDshortened": "Spd"
|
"SPDshortened": "Vel"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -22,7 +22,7 @@ export const tutorial: SimpleTranslationEntries = {
|
|||||||
|
|
||||||
"statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled.
|
"statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled.
|
||||||
$Your Pokémon are recalled before a trainer battle and before entering a new biome.
|
$Your Pokémon are recalled before a trainer battle and before entering a new biome.
|
||||||
$You can also view the stat changes for the Pokémon on the field by holding C.`,
|
$You can also view the stat changes for the Pokémon on the field by holding C or Shift.`,
|
||||||
|
|
||||||
"selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one.
|
"selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one.
|
||||||
$These range from consumables, to Pokémon held items, to passive permanent items.
|
$These range from consumables, to Pokémon held items, to passive permanent items.
|
||||||
|
17
src/main.ts
17
src/main.ts
@ -9,6 +9,23 @@ import BBCodeText from 'phaser3-rex-plugins/plugins/bbcodetext';
|
|||||||
import TransitionImagePackPlugin from 'phaser3-rex-plugins/templates/transitionimagepack/transitionimagepack-plugin.js';
|
import TransitionImagePackPlugin from 'phaser3-rex-plugins/templates/transitionimagepack/transitionimagepack-plugin.js';
|
||||||
import { LoadingScene } from './loading-scene';
|
import { LoadingScene } from './loading-scene';
|
||||||
|
|
||||||
|
|
||||||
|
// Catch global errors and display them in an alert so users can report the issue.
|
||||||
|
window.onerror = function (message, source, lineno, colno, error) {
|
||||||
|
console.error(error);
|
||||||
|
let errorString = `Received unhandled error. Open browser console and click OK to see details.\nError: ${message}\nSource: ${source}\nLine: ${lineno}\nColumn: ${colno}\nStack: ${error.stack}`;
|
||||||
|
//alert(errorString);
|
||||||
|
// Avoids logging the error a second time.
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Catch global promise rejections and display them in an alert so users can report the issue.
|
||||||
|
window.addEventListener('unhandledrejection', (event) => {
|
||||||
|
let errorString = `Received unhandled promise rejection. Open browser console and click OK to see details.\nReason: ${event.reason}`;
|
||||||
|
console.error(event.reason);
|
||||||
|
//alert(errorString);
|
||||||
|
});
|
||||||
|
|
||||||
const config: Phaser.Types.Core.GameConfig = {
|
const config: Phaser.Types.Core.GameConfig = {
|
||||||
type: Phaser.WEBGL,
|
type: Phaser.WEBGL,
|
||||||
parent: 'app',
|
parent: 'app',
|
||||||
|
@ -19,7 +19,7 @@ import { BattleStat, getBattleStatLevelChangeDescription, getBattleStatName } fr
|
|||||||
import { biomeLinks, getBiomeName } from "./data/biomes";
|
import { biomeLinks, getBiomeName } from "./data/biomes";
|
||||||
import { Biome } from "./data/enums/biome";
|
import { Biome } from "./data/enums/biome";
|
||||||
import { ModifierTier } from "./modifier/modifier-tier";
|
import { ModifierTier } from "./modifier/modifier-tier";
|
||||||
import { FusePokemonModifierType, ModifierPoolType, ModifierType, ModifierTypeFunc, ModifierTypeOption, PokemonModifierType, PokemonMoveModifierType, RememberMoveModifierType, TmModifierType, getDailyRunStarterModifiers, getEnemyBuffModifierForWave, getModifierType, getPlayerModifierTypeOptions, getPlayerShopModifierTypeOptionsForWave, modifierTypes, regenerateModifierPoolThresholds } from "./modifier/modifier-type";
|
import { FusePokemonModifierType, ModifierPoolType, ModifierType, ModifierTypeFunc, ModifierTypeOption, PokemonModifierType, PokemonMoveModifierType, PokemonPpRestoreModifierType, PokemonPpUpModifierType, RememberMoveModifierType, TmModifierType, getDailyRunStarterModifiers, getEnemyBuffModifierForWave, getModifierType, getPlayerModifierTypeOptions, getPlayerShopModifierTypeOptionsForWave, modifierTypes, regenerateModifierPoolThresholds } from "./modifier/modifier-type";
|
||||||
import SoundFade from "phaser3-rex-plugins/plugins/soundfade";
|
import SoundFade from "phaser3-rex-plugins/plugins/soundfade";
|
||||||
import { BattlerTagLapseType, EncoreTag, HideSpriteTag as HiddenTag, ProtectedTag, TrappedTag } from "./data/battler-tags";
|
import { BattlerTagLapseType, EncoreTag, HideSpriteTag as HiddenTag, ProtectedTag, TrappedTag } from "./data/battler-tags";
|
||||||
import { BattlerTagType } from "./data/enums/battler-tag-type";
|
import { BattlerTagType } from "./data/enums/battler-tag-type";
|
||||||
@ -331,6 +331,8 @@ export class TitlePhase extends Phase {
|
|||||||
this.scene.sessionPlayTime = 0;
|
this.scene.sessionPlayTime = 0;
|
||||||
this.end();
|
this.end();
|
||||||
});
|
});
|
||||||
|
}).catch(err => {
|
||||||
|
console.error("Failed to load daily run:\n", err);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -815,14 +817,14 @@ export class EncounterPhase extends BattlePhase {
|
|||||||
const enemyField = this.scene.getEnemyField();
|
const enemyField = this.scene.getEnemyField();
|
||||||
|
|
||||||
if (this.scene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS)
|
if (this.scene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS)
|
||||||
return i18next.t('menu:bossAppeared', {bossName: enemyField[0].name});
|
return i18next.t('battle:bossAppeared', {bossName: enemyField[0].name});
|
||||||
|
|
||||||
if (this.scene.currentBattle.battleType === BattleType.TRAINER)
|
if (this.scene.currentBattle.battleType === BattleType.TRAINER)
|
||||||
return i18next.t('menu:trainerAppeared', {trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true)});
|
return i18next.t('battle:trainerAppeared', {trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true)});
|
||||||
|
|
||||||
return enemyField.length === 1
|
return enemyField.length === 1
|
||||||
? i18next.t('menu:singleWildAppeared', {pokemonName: enemyField[0].name})
|
? i18next.t('battle:singleWildAppeared', {pokemonName: enemyField[0].name})
|
||||||
: i18next.t('menu:multiWildAppeared', {pokemonName1: enemyField[0].name, pokemonName2: enemyField[1].name})
|
: i18next.t('battle:multiWildAppeared', {pokemonName1: enemyField[0].name, pokemonName2: enemyField[1].name})
|
||||||
}
|
}
|
||||||
|
|
||||||
doEncounterCommon(showEncounterMessage: boolean = true) {
|
doEncounterCommon(showEncounterMessage: boolean = true) {
|
||||||
@ -1187,7 +1189,7 @@ export class SummonPhase extends PartyMemberPokemonPhase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.player) {
|
if (this.player) {
|
||||||
this.scene.ui.showText(i18next.t('menu:playerGo', { pokemonName: this.getPokemon().name }));
|
this.scene.ui.showText(i18next.t('battle:playerGo', { pokemonName: this.getPokemon().name }));
|
||||||
if (this.player)
|
if (this.player)
|
||||||
this.scene.pbTray.hide();
|
this.scene.pbTray.hide();
|
||||||
this.scene.trainer.setTexture(`trainer_${this.scene.gameData.gender === PlayerGender.FEMALE ? 'f' : 'm'}_back_pb`);
|
this.scene.trainer.setTexture(`trainer_${this.scene.gameData.gender === PlayerGender.FEMALE ? 'f' : 'm'}_back_pb`);
|
||||||
@ -1355,8 +1357,8 @@ export class SwitchSummonPhase extends SummonPhase {
|
|||||||
applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, pokemon);
|
applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, pokemon);
|
||||||
|
|
||||||
this.scene.ui.showText(this.player ?
|
this.scene.ui.showText(this.player ?
|
||||||
i18next.t('menu:playerComeBack', { pokemonName: pokemon.name }) :
|
i18next.t('battle:playerComeBack', { pokemonName: pokemon.name }) :
|
||||||
i18next.t('menu:trainerComeBack', {
|
i18next.t('battle:trainerComeBack', {
|
||||||
trainerName: this.scene.currentBattle.trainer.getName(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER),
|
trainerName: this.scene.currentBattle.trainer.getName(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER),
|
||||||
pokemonName: pokemon.name
|
pokemonName: pokemon.name
|
||||||
})
|
})
|
||||||
@ -1396,8 +1398,8 @@ export class SwitchSummonPhase extends SummonPhase {
|
|||||||
party[this.fieldIndex] = switchedPokemon;
|
party[this.fieldIndex] = switchedPokemon;
|
||||||
const showTextAndSummon = () => {
|
const showTextAndSummon = () => {
|
||||||
this.scene.ui.showText(this.player ?
|
this.scene.ui.showText(this.player ?
|
||||||
i18next.t('menu:playerGo', { pokemonName: switchedPokemon.name }) :
|
i18next.t('battle:playerGo', { pokemonName: switchedPokemon.name }) :
|
||||||
i18next.t('menu:trainerGo', {
|
i18next.t('battle:trainerGo', {
|
||||||
trainerName: this.scene.currentBattle.trainer.getName(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER),
|
trainerName: this.scene.currentBattle.trainer.getName(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER),
|
||||||
pokemonName: this.getPokemon().name
|
pokemonName: this.getPokemon().name
|
||||||
})
|
})
|
||||||
@ -1544,7 +1546,7 @@ export class CheckSwitchPhase extends BattlePhase {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.scene.ui.showText(i18next.t('menu:switchQuestion', { pokemonName: this.useName ? pokemon.name : i18next.t('menu:pokemon') }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:switchQuestion', { pokemonName: this.useName ? pokemon.name : i18next.t('battle:pokemon') }), null, () => {
|
||||||
this.scene.ui.setMode(Mode.CONFIRM, () => {
|
this.scene.ui.setMode(Mode.CONFIRM, () => {
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.tryRemovePhase(p => p instanceof PostSummonPhase && p.player && p.fieldIndex === this.fieldIndex);
|
this.scene.tryRemovePhase(p => p instanceof PostSummonPhase && p.player && p.fieldIndex === this.fieldIndex);
|
||||||
@ -1564,7 +1566,7 @@ export class SummonMissingPhase extends SummonPhase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
preSummon(): void {
|
preSummon(): void {
|
||||||
this.scene.ui.showText(i18next.t('menu:sendOutPokemon', { pokemonName: this.getPokemon().name}));
|
this.scene.ui.showText(i18next.t('battle:sendOutPokemon', { pokemonName: this.getPokemon().name}));
|
||||||
this.scene.time.delayedCall(250, () => this.summon());
|
this.scene.time.delayedCall(250, () => this.summon());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1579,7 +1581,7 @@ export class LevelCapPhase extends FieldPhase {
|
|||||||
|
|
||||||
this.scene.ui.setMode(Mode.MESSAGE).then(() => {
|
this.scene.ui.setMode(Mode.MESSAGE).then(() => {
|
||||||
this.scene.playSound('level_up_fanfare');
|
this.scene.playSound('level_up_fanfare');
|
||||||
this.scene.ui.showText(i18next.t('menu:levelCapUp', { levelCap: this.scene.getMaxExpLevel() }), null, () => this.end(), null, true);
|
this.scene.ui.showText(i18next.t('battle:levelCapUp', { levelCap: this.scene.getMaxExpLevel() }), null, () => this.end(), null, true);
|
||||||
this.executeForAll(pokemon => pokemon.updateInfo(true));
|
this.executeForAll(pokemon => pokemon.updateInfo(true));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1673,7 +1675,7 @@ export class CommandPhase extends FieldPhase {
|
|||||||
const move = playerPokemon.getMoveset()[cursor];
|
const move = playerPokemon.getMoveset()[cursor];
|
||||||
if (move.getName().endsWith(' (N)')) {
|
if (move.getName().endsWith(' (N)')) {
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.showText(i18next.t('menu:moveNotImplemented', { moveName: move.getName().slice(0, -4) }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:moveNotImplemented', { moveName: move.getName().slice(0, -4) }), null, () => {
|
||||||
this.scene.ui.clearText();
|
this.scene.ui.clearText();
|
||||||
this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex);
|
this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex);
|
||||||
}, null, true);
|
}, null, true);
|
||||||
@ -1692,7 +1694,7 @@ export class CommandPhase extends FieldPhase {
|
|||||||
const move = playerPokemon.getMoveset()[cursor];
|
const move = playerPokemon.getMoveset()[cursor];
|
||||||
if (playerPokemon.summonData.disabledMove === move.moveId) {
|
if (playerPokemon.summonData.disabledMove === move.moveId) {
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.showText(i18next.t('menu:moveDisabled', { moveName: move.getName() }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:moveDisabled', { moveName: move.getName() }), null, () => {
|
||||||
this.scene.ui.clearText();
|
this.scene.ui.clearText();
|
||||||
this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex);
|
this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex);
|
||||||
}, null, true);
|
}, null, true);
|
||||||
@ -1703,14 +1705,14 @@ export class CommandPhase extends FieldPhase {
|
|||||||
if (this.scene.arena.biomeType === Biome.END && (!this.scene.gameMode.isClassic || (this.scene.getEnemyField().filter(p => p.isActive(true)).some(p => !p.scene.gameData.dexData[p.species.speciesId].caughtAttr) && this.scene.gameData.getStarterCount(d => !!d.caughtAttr) < Object.keys(speciesStarters).length - 1))) {
|
if (this.scene.arena.biomeType === Biome.END && (!this.scene.gameMode.isClassic || (this.scene.getEnemyField().filter(p => p.isActive(true)).some(p => !p.scene.gameData.dexData[p.species.speciesId].caughtAttr) && this.scene.gameData.getStarterCount(d => !!d.caughtAttr) < Object.keys(speciesStarters).length - 1))) {
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.showText(i18next.t('menu:noPokeballForce'), null, () => {
|
this.scene.ui.showText(i18next.t('battle:noPokeballForce'), null, () => {
|
||||||
this.scene.ui.showText(null, 0);
|
this.scene.ui.showText(null, 0);
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
}, null, true);
|
}, null, true);
|
||||||
} else if (this.scene.currentBattle.battleType === BattleType.TRAINER) {
|
} else if (this.scene.currentBattle.battleType === BattleType.TRAINER) {
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.showText(i18next.t('menu:noPokeballTrainer'), null, () => {
|
this.scene.ui.showText(i18next.t('battle:noPokeballTrainer'), null, () => {
|
||||||
this.scene.ui.showText(null, 0);
|
this.scene.ui.showText(null, 0);
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
}, null, true);
|
}, null, true);
|
||||||
@ -1719,7 +1721,7 @@ export class CommandPhase extends FieldPhase {
|
|||||||
if (targets.length > 1) {
|
if (targets.length > 1) {
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.showText(i18next.t('menu:noPokeballMulti'), null, () => {
|
this.scene.ui.showText(i18next.t('battle:noPokeballMulti'), null, () => {
|
||||||
this.scene.ui.showText(null, 0);
|
this.scene.ui.showText(null, 0);
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
}, null, true);
|
}, null, true);
|
||||||
@ -1728,7 +1730,7 @@ export class CommandPhase extends FieldPhase {
|
|||||||
if (targetPokemon.isBoss() && targetPokemon.bossSegmentIndex >= 1 && cursor < PokeballType.MASTER_BALL) {
|
if (targetPokemon.isBoss() && targetPokemon.bossSegmentIndex >= 1 && cursor < PokeballType.MASTER_BALL) {
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.showText(i18next.t('menu:noPokeballStrong'), null, () => {
|
this.scene.ui.showText(i18next.t('battle:noPokeballStrong'), null, () => {
|
||||||
this.scene.ui.showText(null, 0);
|
this.scene.ui.showText(null, 0);
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
}, null, true);
|
}, null, true);
|
||||||
@ -1748,14 +1750,14 @@ export class CommandPhase extends FieldPhase {
|
|||||||
if (!isSwitch && this.scene.arena.biomeType === Biome.END) {
|
if (!isSwitch && this.scene.arena.biomeType === Biome.END) {
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.showText(i18next.t('menu:noEscapeForce'), null, () => {
|
this.scene.ui.showText(i18next.t('battle:noEscapeForce'), null, () => {
|
||||||
this.scene.ui.showText(null, 0);
|
this.scene.ui.showText(null, 0);
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
}, null, true);
|
}, null, true);
|
||||||
} else if (!isSwitch && this.scene.currentBattle.battleType === BattleType.TRAINER) {
|
} else if (!isSwitch && this.scene.currentBattle.battleType === BattleType.TRAINER) {
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.showText(i18next.t('menu:noEscapeTrainer'), null, () => {
|
this.scene.ui.showText(i18next.t('battle:noEscapeTrainer'), null, () => {
|
||||||
this.scene.ui.showText(null, 0);
|
this.scene.ui.showText(null, 0);
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
}, null, true);
|
}, null, true);
|
||||||
@ -1778,10 +1780,10 @@ export class CommandPhase extends FieldPhase {
|
|||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
}
|
}
|
||||||
this.scene.ui.showText(
|
this.scene.ui.showText(
|
||||||
i18next.t('menu:noEscapePokemon', {
|
i18next.t('battle:noEscapePokemon', {
|
||||||
pokemonName: this.scene.getPokemonById(trapTag.sourceId).name,
|
pokemonName: this.scene.getPokemonById(trapTag.sourceId).name,
|
||||||
moveName: trapTag.getMoveName(),
|
moveName: trapTag.getMoveName(),
|
||||||
escapeVerb: isSwitch ? i18next.t('menu:escapeVerbSwitch') : i18next.t('menu:escapeVerbFlee')
|
escapeVerb: isSwitch ? i18next.t('battle:escapeVerbSwitch') : i18next.t('battle:escapeVerbFlee')
|
||||||
}),
|
}),
|
||||||
null,
|
null,
|
||||||
() => {
|
() => {
|
||||||
@ -2031,7 +2033,7 @@ export class TurnEndPhase extends FieldPhase {
|
|||||||
pokemon.lapseTags(BattlerTagLapseType.TURN_END);
|
pokemon.lapseTags(BattlerTagLapseType.TURN_END);
|
||||||
|
|
||||||
if (pokemon.summonData.disabledMove && !--pokemon.summonData.disabledTurns) {
|
if (pokemon.summonData.disabledMove && !--pokemon.summonData.disabledTurns) {
|
||||||
this.scene.pushPhase(new MessagePhase(this.scene, i18next.t('menu:notDisabled', { moveName: allMoves[pokemon.summonData.disabledMove].name })));
|
this.scene.pushPhase(new MessagePhase(this.scene, i18next.t('battle:notDisabled', { moveName: allMoves[pokemon.summonData.disabledMove].name })));
|
||||||
pokemon.summonData.disabledMove = Moves.NONE;
|
pokemon.summonData.disabledMove = Moves.NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2339,7 +2341,7 @@ export class MovePhase extends BattlePhase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
showFailedText(failedText: string = null): void {
|
showFailedText(failedText: string = null): void {
|
||||||
this.scene.queueMessage(failedText || i18next.t('menu:attackFailed'));
|
this.scene.queueMessage(failedText || i18next.t('battle:attackFailed'));
|
||||||
}
|
}
|
||||||
|
|
||||||
end() {
|
end() {
|
||||||
@ -2402,7 +2404,7 @@ export class MoveEffectPhase extends PokemonPhase {
|
|||||||
moveHistoryEntry.result = MoveResult.MISS;
|
moveHistoryEntry.result = MoveResult.MISS;
|
||||||
applyMoveAttrs(MissEffectAttr, user, null, this.move.getMove());
|
applyMoveAttrs(MissEffectAttr, user, null, this.move.getMove());
|
||||||
} else {
|
} else {
|
||||||
this.scene.queueMessage(i18next.t('menu:attackFailed'));
|
this.scene.queueMessage(i18next.t('battle:attackFailed'));
|
||||||
moveHistoryEntry.result = MoveResult.FAIL;
|
moveHistoryEntry.result = MoveResult.FAIL;
|
||||||
}
|
}
|
||||||
return this.end();
|
return this.end();
|
||||||
@ -2486,7 +2488,7 @@ export class MoveEffectPhase extends PokemonPhase {
|
|||||||
else {
|
else {
|
||||||
const hitsTotal = user.turnData.hitCount - Math.max(user.turnData.hitsLeft, 0);
|
const hitsTotal = user.turnData.hitCount - Math.max(user.turnData.hitsLeft, 0);
|
||||||
if (hitsTotal > 1)
|
if (hitsTotal > 1)
|
||||||
this.scene.queueMessage(i18next.t('menu:attackHitsCount', { count: hitsTotal }));
|
this.scene.queueMessage(i18next.t('battle:attackHitsCount', { count: hitsTotal }));
|
||||||
this.scene.applyModifiers(HitHealModifier, this.player, user);
|
this.scene.applyModifiers(HitHealModifier, this.player, user);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3342,7 +3344,7 @@ export class TrainerVictoryPhase extends BattlePhase {
|
|||||||
this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, [ modifierTypes.VOUCHER, modifierTypes.VOUCHER, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM ][vouchers[TrainerType[trainerType]].voucherType]));
|
this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, [ modifierTypes.VOUCHER, modifierTypes.VOUCHER, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM ][vouchers[TrainerType[trainerType]].voucherType]));
|
||||||
}
|
}
|
||||||
|
|
||||||
this.scene.ui.showText(i18next.t('menu:trainerDefeated', { trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true) }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:trainerDefeated', { trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true) }), null, () => {
|
||||||
const victoryMessages = this.scene.currentBattle.trainer.getVictoryMessages();
|
const victoryMessages = this.scene.currentBattle.trainer.getVictoryMessages();
|
||||||
const showMessage = () => {
|
const showMessage = () => {
|
||||||
let message: string;
|
let message: string;
|
||||||
@ -3609,7 +3611,7 @@ export class ExpPhase extends PlayerPartyMemberPokemonPhase {
|
|||||||
let exp = new Utils.NumberHolder(this.expValue);
|
let exp = new Utils.NumberHolder(this.expValue);
|
||||||
this.scene.applyModifiers(ExpBoosterModifier, true, exp);
|
this.scene.applyModifiers(ExpBoosterModifier, true, exp);
|
||||||
exp.value = Math.floor(exp.value);
|
exp.value = Math.floor(exp.value);
|
||||||
this.scene.ui.showText(i18next.t('menu:expGain', { pokemonName: pokemon.name, exp: exp.value }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:expGain', { pokemonName: pokemon.name, exp: exp.value }), null, () => {
|
||||||
const lastLevel = pokemon.level;
|
const lastLevel = pokemon.level;
|
||||||
let newLevel: integer;
|
let newLevel: integer;
|
||||||
pokemon.addExp(exp.value);
|
pokemon.addExp(exp.value);
|
||||||
@ -3697,7 +3699,7 @@ export class LevelUpPhase extends PlayerPartyMemberPokemonPhase {
|
|||||||
pokemon.calculateStats();
|
pokemon.calculateStats();
|
||||||
pokemon.updateInfo();
|
pokemon.updateInfo();
|
||||||
this.scene.playSound('level_up_fanfare');
|
this.scene.playSound('level_up_fanfare');
|
||||||
this.scene.ui.showText(i18next.t('menu:levelUp', { pokemonName: this.getPokemon().name, level: this.level }), null, () => this.scene.ui.getMessageHandler().promptLevelUpStats(this.partyMemberIndex, prevStats, false).then(() => this.end()), null, true);
|
this.scene.ui.showText(i18next.t('battle:levelUp', { pokemonName: this.getPokemon().name, level: this.level }), null, () => this.scene.ui.getMessageHandler().promptLevelUpStats(this.partyMemberIndex, prevStats, false).then(() => this.end()), null, true);
|
||||||
if (this.level <= 100) {
|
if (this.level <= 100) {
|
||||||
const levelMoves = this.getPokemon().getLevelMoves(this.lastLevel + 1);
|
const levelMoves = this.getPokemon().getLevelMoves(this.lastLevel + 1);
|
||||||
for (let lm of levelMoves)
|
for (let lm of levelMoves)
|
||||||
@ -3746,7 +3748,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase {
|
|||||||
.then(() => {
|
.then(() => {
|
||||||
this.scene.ui.setMode(messageMode).then(() => {
|
this.scene.ui.setMode(messageMode).then(() => {
|
||||||
this.scene.playSound('level_up_fanfare');
|
this.scene.playSound('level_up_fanfare');
|
||||||
this.scene.ui.showText(i18next.t('menu:learnMove', { pokemonName: pokemon.name, moveName: move.name }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:learnMove', { pokemonName: pokemon.name, moveName: move.name }), null, () => {
|
||||||
this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeMoveLearnedTrigger, true);
|
this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeMoveLearnedTrigger, true);
|
||||||
this.end();
|
this.end();
|
||||||
}, messageMode === Mode.EVOLUTION_SCENE ? 1000 : null, true);
|
}, messageMode === Mode.EVOLUTION_SCENE ? 1000 : null, true);
|
||||||
@ -3755,15 +3757,15 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase {
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.scene.ui.setMode(messageMode).then(() => {
|
this.scene.ui.setMode(messageMode).then(() => {
|
||||||
this.scene.ui.showText(i18next.t('menu:learnMovePrompt', { pokemonName: pokemon.name, moveName: move.name }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:learnMovePrompt', { pokemonName: pokemon.name, moveName: move.name }), null, () => {
|
||||||
this.scene.ui.showText(i18next.t('menu:learnMoveLimitReached', { pokemonName: pokemon.name }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:learnMoveLimitReached', { pokemonName: pokemon.name }), null, () => {
|
||||||
this.scene.ui.showText(i18next.t('menu:learnMoveReplaceQuestion', { moveName: move.name }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:learnMoveReplaceQuestion', { moveName: move.name }), null, () => {
|
||||||
const noHandler = () => {
|
const noHandler = () => {
|
||||||
this.scene.ui.setMode(messageMode).then(() => {
|
this.scene.ui.setMode(messageMode).then(() => {
|
||||||
this.scene.ui.showText(i18next.t('menu:learnMoveStopTeaching', { moveName: move.name }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:learnMoveStopTeaching', { moveName: move.name }), null, () => {
|
||||||
this.scene.ui.setModeWithoutClear(Mode.CONFIRM, () => {
|
this.scene.ui.setModeWithoutClear(Mode.CONFIRM, () => {
|
||||||
this.scene.ui.setMode(messageMode);
|
this.scene.ui.setMode(messageMode);
|
||||||
this.scene.ui.showText(i18next.t('menu:learnMoveNotLearned', { pokemonName: pokemon.name, moveName: move.name }), null, () => this.end(), null, true);
|
this.scene.ui.showText(i18next.t('battle:learnMoveNotLearned', { pokemonName: pokemon.name, moveName: move.name }), null, () => this.end(), null, true);
|
||||||
}, () => {
|
}, () => {
|
||||||
this.scene.ui.setMode(messageMode);
|
this.scene.ui.setMode(messageMode);
|
||||||
this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, this.moveId));
|
this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, this.moveId));
|
||||||
@ -3774,7 +3776,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase {
|
|||||||
};
|
};
|
||||||
this.scene.ui.setModeWithoutClear(Mode.CONFIRM, () => {
|
this.scene.ui.setModeWithoutClear(Mode.CONFIRM, () => {
|
||||||
this.scene.ui.setMode(messageMode);
|
this.scene.ui.setMode(messageMode);
|
||||||
this.scene.ui.showText(i18next.t('menu:learnMoveForgetQuestion'), null, () => {
|
this.scene.ui.showText(i18next.t('battle:learnMoveForgetQuestion'), null, () => {
|
||||||
this.scene.ui.setModeWithoutClear(Mode.SUMMARY, this.getPokemon(), SummaryUiMode.LEARN_MOVE, move, (moveIndex: integer) => {
|
this.scene.ui.setModeWithoutClear(Mode.SUMMARY, this.getPokemon(), SummaryUiMode.LEARN_MOVE, move, (moveIndex: integer) => {
|
||||||
if (moveIndex === 4) {
|
if (moveIndex === 4) {
|
||||||
noHandler();
|
noHandler();
|
||||||
@ -3782,7 +3784,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase {
|
|||||||
}
|
}
|
||||||
this.scene.ui.setMode(messageMode).then(() => {
|
this.scene.ui.setMode(messageMode).then(() => {
|
||||||
this.scene.ui.showText('@d{32}1, @d{15}2, and@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}Poof!', null, () => {
|
this.scene.ui.showText('@d{32}1, @d{15}2, and@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}Poof!', null, () => {
|
||||||
this.scene.ui.showText(i18next.t('menu:learnMoveForgetSuccess', { pokemonName: pokemon.name, moveName: pokemon.moveset[moveIndex].getName() }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:learnMoveForgetSuccess', { pokemonName: pokemon.name, moveName: pokemon.moveset[moveIndex].getName() }), null, () => {
|
||||||
this.scene.ui.showText('And…', null, () => {
|
this.scene.ui.showText('And…', null, () => {
|
||||||
pokemon.setMove(moveIndex, Moves.NONE);
|
pokemon.setMove(moveIndex, Moves.NONE);
|
||||||
this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, this.moveId));
|
this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, this.moveId));
|
||||||
@ -4095,9 +4097,9 @@ export class AttemptCapturePhase extends PokemonPhase {
|
|||||||
|
|
||||||
this.scene.pokemonInfoContainer.show(pokemon, true);
|
this.scene.pokemonInfoContainer.show(pokemon, true);
|
||||||
|
|
||||||
this.scene.gameData.updateSpeciesDexIvs(pokemon.species.speciesId, pokemon.ivs);
|
this.scene.gameData.updateSpeciesDexIvs(pokemon.species.getRootSpeciesId(true), pokemon.ivs);
|
||||||
|
|
||||||
this.scene.ui.showText(i18next.t('menu:pokemonCaught', { pokemonName: pokemon.name }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:pokemonCaught', { pokemonName: pokemon.name }), null, () => {
|
||||||
const end = () => {
|
const end = () => {
|
||||||
this.scene.pokemonInfoContainer.hide();
|
this.scene.pokemonInfoContainer.hide();
|
||||||
this.removePb();
|
this.removePb();
|
||||||
@ -4183,7 +4185,7 @@ export class AttemptRunPhase extends PokemonPhase {
|
|||||||
|
|
||||||
if (playerPokemon.randSeedInt(256) < escapeChance.value) {
|
if (playerPokemon.randSeedInt(256) < escapeChance.value) {
|
||||||
this.scene.playSound('flee');
|
this.scene.playSound('flee');
|
||||||
this.scene.queueMessage(i18next.t('menu:runAwaySuccess'), null, true, 500);
|
this.scene.queueMessage(i18next.t('battle:runAwaySuccess'), null, true, 500);
|
||||||
|
|
||||||
this.scene.tweens.add({
|
this.scene.tweens.add({
|
||||||
targets: [ this.scene.arenaEnemy, enemyField ].flat(),
|
targets: [ this.scene.arenaEnemy, enemyField ].flat(),
|
||||||
@ -4204,7 +4206,7 @@ export class AttemptRunPhase extends PokemonPhase {
|
|||||||
this.scene.pushPhase(new BattleEndPhase(this.scene));
|
this.scene.pushPhase(new BattleEndPhase(this.scene));
|
||||||
this.scene.pushPhase(new NewBattlePhase(this.scene));
|
this.scene.pushPhase(new NewBattlePhase(this.scene));
|
||||||
} else
|
} else
|
||||||
this.scene.queueMessage(i18next.t('menu:runAwayCannotEscape'), null, true, 500);
|
this.scene.queueMessage(i18next.t('battle:runAwayCannotEscape'), null, true, 500);
|
||||||
|
|
||||||
this.end();
|
this.end();
|
||||||
}
|
}
|
||||||
@ -4236,7 +4238,7 @@ export class SelectModifierPhase extends BattlePhase {
|
|||||||
|
|
||||||
const modifierSelectCallback = (rowCursor: integer, cursor: integer) => {
|
const modifierSelectCallback = (rowCursor: integer, cursor: integer) => {
|
||||||
if (rowCursor < 0 || cursor < 0) {
|
if (rowCursor < 0 || cursor < 0) {
|
||||||
this.scene.ui.showText(i18next.t('menu:skipItemQuestion'), null, () => {
|
this.scene.ui.showText(i18next.t('battle:skipItemQuestion'), null, () => {
|
||||||
this.scene.ui.setOverlayMode(Mode.CONFIRM, () => {
|
this.scene.ui.setOverlayMode(Mode.CONFIRM, () => {
|
||||||
this.scene.ui.revertMode();
|
this.scene.ui.revertMode();
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
@ -4340,6 +4342,7 @@ export class SelectModifierPhase extends BattlePhase {
|
|||||||
const isMoveModifier = modifierType instanceof PokemonMoveModifierType;
|
const isMoveModifier = modifierType instanceof PokemonMoveModifierType;
|
||||||
const isTmModifier = modifierType instanceof TmModifierType;
|
const isTmModifier = modifierType instanceof TmModifierType;
|
||||||
const isRememberMoveModifier = modifierType instanceof RememberMoveModifierType;
|
const isRememberMoveModifier = modifierType instanceof RememberMoveModifierType;
|
||||||
|
const isPpRestoreModifier = modifierType instanceof PokemonPpRestoreModifierType;
|
||||||
const partyUiMode = isMoveModifier ? PartyUiMode.MOVE_MODIFIER
|
const partyUiMode = isMoveModifier ? PartyUiMode.MOVE_MODIFIER
|
||||||
: isTmModifier ? PartyUiMode.TM_MODIFIER
|
: isTmModifier ? PartyUiMode.TM_MODIFIER
|
||||||
: isRememberMoveModifier ? PartyUiMode.REMEMBER_MOVE_MODIFIER
|
: isRememberMoveModifier ? PartyUiMode.REMEMBER_MOVE_MODIFIER
|
||||||
@ -4359,7 +4362,7 @@ export class SelectModifierPhase extends BattlePhase {
|
|||||||
});
|
});
|
||||||
} else
|
} else
|
||||||
this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), typeOptions, modifierSelectCallback, this.getRerollCost(typeOptions, this.scene.lockModifierTiers));
|
this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), typeOptions, modifierSelectCallback, this.getRerollCost(typeOptions, this.scene.lockModifierTiers));
|
||||||
}, pokemonModifierType.selectFilter, modifierType instanceof PokemonMoveModifierType ? (modifierType as PokemonMoveModifierType).moveSelectFilter : undefined, tmMoveId);
|
}, pokemonModifierType.selectFilter, modifierType instanceof PokemonMoveModifierType ? (modifierType as PokemonMoveModifierType).moveSelectFilter : undefined, tmMoveId, isPpRestoreModifier);
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
applyModifier(modifierType.newModifier());
|
applyModifier(modifierType.newModifier());
|
||||||
@ -4414,7 +4417,7 @@ export class EggLapsePhase extends Phase {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (eggsToHatch.length) {
|
if (eggsToHatch.length) {
|
||||||
this.scene.queueMessage(i18next.t('menu:eggHatching'));
|
this.scene.queueMessage(i18next.t('battle:eggHatching'));
|
||||||
|
|
||||||
for (let egg of eggsToHatch)
|
for (let egg of eggsToHatch)
|
||||||
this.scene.unshiftPhase(new EggHatchPhase(this.scene, egg));
|
this.scene.unshiftPhase(new EggHatchPhase(this.scene, egg));
|
||||||
@ -4508,7 +4511,7 @@ export class ScanIvsPhase extends PokemonPhase {
|
|||||||
|
|
||||||
const pokemon = this.getPokemon();
|
const pokemon = this.getPokemon();
|
||||||
|
|
||||||
this.scene.ui.showText(i18next.t('menu:ivScannerUseQuestion', { pokemonName: pokemon.name }), null, () => {
|
this.scene.ui.showText(i18next.t('battle:ivScannerUseQuestion', { pokemonName: pokemon.name }), null, () => {
|
||||||
this.scene.ui.setMode(Mode.CONFIRM, () => {
|
this.scene.ui.setMode(Mode.CONFIRM, () => {
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.clearText();
|
this.scene.ui.clearText();
|
||||||
|
@ -13,6 +13,12 @@ import { menuUiHandler as frMenuUiHandler } from '../locales/fr/menu-ui-handler.
|
|||||||
import { menuUiHandler as itMenuUiHandler } from '../locales/it/menu-ui-handler.js';
|
import { menuUiHandler as itMenuUiHandler } from '../locales/it/menu-ui-handler.js';
|
||||||
import { menuUiHandler as deMenuUiHandler } from '../locales/de/menu-ui-handler.js';
|
import { menuUiHandler as deMenuUiHandler } from '../locales/de/menu-ui-handler.js';
|
||||||
|
|
||||||
|
import { battle as enBattle } from '../locales/en/battle';
|
||||||
|
import { battle as esBattle } from '../locales/es/battle';
|
||||||
|
import { battle as itBattle } from '../locales/it/battle';
|
||||||
|
import { battle as frBattle } from '../locales/fr/battle';
|
||||||
|
import { battle as deBattle } from '../locales/de/battle';
|
||||||
|
|
||||||
import { move as enMove } from '../locales/en/move';
|
import { move as enMove } from '../locales/en/move';
|
||||||
import { move as esMove } from '../locales/es/move';
|
import { move as esMove } from '../locales/es/move';
|
||||||
import { move as frMove } from '../locales/fr/move';
|
import { move as frMove } from '../locales/fr/move';
|
||||||
@ -45,7 +51,10 @@ import { commandUiHandler as frCommandUiHandler } from '../locales/fr/command-ui
|
|||||||
import { commandUiHandler as deCommandUiHandler } from '../locales/de/command-ui-handler';
|
import { commandUiHandler as deCommandUiHandler } from '../locales/de/command-ui-handler';
|
||||||
|
|
||||||
import { fightUiHandler as enFightUiHandler } from '../locales/en/fight-ui-handler';
|
import { fightUiHandler as enFightUiHandler } from '../locales/en/fight-ui-handler';
|
||||||
|
import { fightUiHandler as esFightUiHandler } from '../locales/es/fight-ui-handler';
|
||||||
import { fightUiHandler as frFightUiHandler } from '../locales/fr/fight-ui-handler';
|
import { fightUiHandler as frFightUiHandler } from '../locales/fr/fight-ui-handler';
|
||||||
|
import { fightUiHandler as itFightUiHandler } from '../locales/it/fight-ui-handler';
|
||||||
|
import { fightUiHandler as deFightUiHandler } from '../locales/de/fight-ui-handler';
|
||||||
|
|
||||||
import { tutorial as enTutorial } from '../locales/en/tutorial';
|
import { tutorial as enTutorial } from '../locales/en/tutorial';
|
||||||
import { tutorial as esTutorial } from '../locales/es/tutorial';
|
import { tutorial as esTutorial } from '../locales/es/tutorial';
|
||||||
@ -113,6 +122,7 @@ export function initI18n(): void {
|
|||||||
en: {
|
en: {
|
||||||
menu: enMenu,
|
menu: enMenu,
|
||||||
menuUiHandler: enMenuUiHandler,
|
menuUiHandler: enMenuUiHandler,
|
||||||
|
battle: enBattle,
|
||||||
move: enMove,
|
move: enMove,
|
||||||
ability: enAbility,
|
ability: enAbility,
|
||||||
pokeball: enPokeball,
|
pokeball: enPokeball,
|
||||||
@ -125,17 +135,20 @@ export function initI18n(): void {
|
|||||||
es: {
|
es: {
|
||||||
menu: esMenu,
|
menu: esMenu,
|
||||||
menuUiHandler: esMenuUiHandler,
|
menuUiHandler: esMenuUiHandler,
|
||||||
|
battle: esBattle,
|
||||||
move: esMove,
|
move: esMove,
|
||||||
ability: esAbility,
|
ability: esAbility,
|
||||||
pokeball: esPokeball,
|
pokeball: esPokeball,
|
||||||
pokemon: esPokemon,
|
pokemon: esPokemon,
|
||||||
pokemonStat: esPokemonStat,
|
pokemonStat: esPokemonStat,
|
||||||
commandUiHandler: esCommandUiHandler,
|
commandUiHandler: esCommandUiHandler,
|
||||||
|
fightUiHandler: esFightUiHandler,
|
||||||
tutorial: esTutorial,
|
tutorial: esTutorial,
|
||||||
},
|
},
|
||||||
fr: {
|
fr: {
|
||||||
menu: frMenu,
|
menu: frMenu,
|
||||||
menuUiHandler: frMenuUiHandler,
|
menuUiHandler: frMenuUiHandler,
|
||||||
|
battle: frBattle,
|
||||||
move: frMove,
|
move: frMove,
|
||||||
ability: frAbility,
|
ability: frAbility,
|
||||||
pokeball: frPokeball,
|
pokeball: frPokeball,
|
||||||
@ -148,18 +161,22 @@ export function initI18n(): void {
|
|||||||
it: {
|
it: {
|
||||||
menu: itMenu,
|
menu: itMenu,
|
||||||
menuUiHandler: itMenuUiHandler,
|
menuUiHandler: itMenuUiHandler,
|
||||||
|
battle: itBattle,
|
||||||
pokemonStat: itPokemonStat,
|
pokemonStat: itPokemonStat,
|
||||||
|
fightUiHandler: itFightUiHandler,
|
||||||
tutorial: itTutorial,
|
tutorial: itTutorial,
|
||||||
},
|
},
|
||||||
de: {
|
de: {
|
||||||
menu: deMenu,
|
menu: deMenu,
|
||||||
menuUiHandler: deMenuUiHandler,
|
menuUiHandler: deMenuUiHandler,
|
||||||
|
battle: deBattle,
|
||||||
move: deMove,
|
move: deMove,
|
||||||
ability: deAbility,
|
ability: deAbility,
|
||||||
pokeball: dePokeball,
|
pokeball: dePokeball,
|
||||||
pokemon: dePokemon,
|
pokemon: dePokemon,
|
||||||
pokemonStat: dePokemonStat,
|
pokemonStat: dePokemonStat,
|
||||||
commandUiHandler: deCommandUiHandler,
|
commandUiHandler: deCommandUiHandler,
|
||||||
|
fightUiHandler: deFightUiHandler,
|
||||||
tutorial: deTutorial,
|
tutorial: deTutorial,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -173,6 +190,7 @@ declare module 'i18next' {
|
|||||||
menu: typeof enMenu;
|
menu: typeof enMenu;
|
||||||
menuUiHandler: typeof enMenuUiHandler;
|
menuUiHandler: typeof enMenuUiHandler;
|
||||||
move: typeof enMove;
|
move: typeof enMove;
|
||||||
|
battle: typeof enBattle,
|
||||||
ability: typeof enAbility;
|
ability: typeof enAbility;
|
||||||
pokeball: typeof enPokeball;
|
pokeball: typeof enPokeball;
|
||||||
pokemon: typeof enPokemon;
|
pokemon: typeof enPokemon;
|
||||||
|
@ -7,6 +7,7 @@ export enum AchvTier {
|
|||||||
COMMON,
|
COMMON,
|
||||||
GREAT,
|
GREAT,
|
||||||
ULTRA,
|
ULTRA,
|
||||||
|
ROGUE,
|
||||||
MASTER
|
MASTER
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,8 +51,10 @@ export class Achv {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTier(): AchvTier {
|
getTier(): AchvTier {
|
||||||
if (this.score >= 100)
|
if (this.score >= 150)
|
||||||
return AchvTier.MASTER;
|
return AchvTier.MASTER;
|
||||||
|
if (this.score >= 100)
|
||||||
|
return AchvTier.ROGUE;
|
||||||
if (this.score >= 50)
|
if (this.score >= 50)
|
||||||
return AchvTier.ULTRA;
|
return AchvTier.ULTRA;
|
||||||
if (this.score >= 25)
|
if (this.score >= 25)
|
||||||
|
@ -44,7 +44,7 @@ export class Voucher {
|
|||||||
case VoucherType.PREMIUM:
|
case VoucherType.PREMIUM:
|
||||||
return AchvTier.ULTRA;
|
return AchvTier.ULTRA;
|
||||||
case VoucherType.GOLDEN:
|
case VoucherType.GOLDEN:
|
||||||
return AchvTier.MASTER;
|
return AchvTier.ROGUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -498,11 +498,14 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
|
|||||||
this.lastLevel = pokemon.level;
|
this.lastLevel = pokemon.level;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pokemon.summonData) {
|
const battleStats = pokemon.summonData
|
||||||
const battleStats = pokemon.summonData.battleStats.join('');
|
? pokemon.summonData.battleStats
|
||||||
|
: battleStatOrder.map(() => 0);
|
||||||
if (this.lastBattleStats !== battleStats)
|
const battleStatsStr = battleStats.join('');
|
||||||
this.updateBattleStats(pokemon.summonData.battleStats);
|
|
||||||
|
if (this.lastBattleStats !== battleStatsStr) {
|
||||||
|
this.updateBattleStats(battleStats);
|
||||||
|
this.lastBattleStats = battleStatsStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.shinyIcon.setVisible(pokemon.isShiny());
|
this.shinyIcon.setVisible(pokemon.isShiny());
|
||||||
|
@ -5,6 +5,7 @@ import * as Utils from "../utils";
|
|||||||
import MessageUiHandler from "./message-ui-handler";
|
import MessageUiHandler from "./message-ui-handler";
|
||||||
import { getStatName, Stat } from "../data/pokemon-stat";
|
import { getStatName, Stat } from "../data/pokemon-stat";
|
||||||
import { addWindow } from "./ui-theme";
|
import { addWindow } from "./ui-theme";
|
||||||
|
import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext";
|
||||||
|
|
||||||
export default class BattleMessageUiHandler extends MessageUiHandler {
|
export default class BattleMessageUiHandler extends MessageUiHandler {
|
||||||
private levelUpStatsContainer: Phaser.GameObjects.Container;
|
private levelUpStatsContainer: Phaser.GameObjects.Container;
|
||||||
@ -209,7 +210,7 @@ export default class BattleMessageUiHandler extends MessageUiHandler {
|
|||||||
} else
|
} else
|
||||||
shownStats = stats;
|
shownStats = stats;
|
||||||
for (let s of stats)
|
for (let s of stats)
|
||||||
levelUpStatsValuesText += `${shownStats.indexOf(s) > -1 ? this.getIvDescriptor(ivs[s], s) : '???'}\n`;
|
levelUpStatsValuesText += `${shownStats.indexOf(s) > -1 ? this.getIvDescriptor(ivs[s], s, pokemonId) : '???'}\n`;
|
||||||
this.levelUpStatsValuesContent.text = levelUpStatsValuesText;
|
this.levelUpStatsValuesContent.text = levelUpStatsValuesText;
|
||||||
this.levelUpStatsIncrContent.setVisible(false);
|
this.levelUpStatsIncrContent.setVisible(false);
|
||||||
this.levelUpStatsContainer.setVisible(true);
|
this.levelUpStatsContainer.setVisible(true);
|
||||||
@ -222,9 +223,10 @@ export default class BattleMessageUiHandler extends MessageUiHandler {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getIvDescriptor(value: integer, typeIv: integer): string {
|
getIvDescriptor(value: integer, typeIv: integer, pokemonId: integer): string {
|
||||||
let starterIvs: number[] = this.scene.gameData.dexData[this.scene.getEnemyPokemon().species.speciesId].ivs;
|
const starterSpecies = this.scene.getPokemonById(pokemonId).species.getRootSpeciesId(true);
|
||||||
let uiTheme = (this.scene as BattleScene).uiTheme; // Assuming uiTheme is accessible
|
const starterIvs: number[] = this.scene.gameData.dexData[starterSpecies].ivs;
|
||||||
|
const uiTheme = (this.scene as BattleScene).uiTheme; // Assuming uiTheme is accessible
|
||||||
|
|
||||||
// Function to wrap text in color based on comparison
|
// Function to wrap text in color based on comparison
|
||||||
const coloredText = (text: string, isBetter: boolean) => {
|
const coloredText = (text: string, isBetter: boolean) => {
|
||||||
|
@ -11,6 +11,7 @@ interface RankingEntry {
|
|||||||
wave: integer
|
wave: integer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Don't forget to update translations when adding a new category
|
||||||
enum ScoreboardCategory {
|
enum ScoreboardCategory {
|
||||||
DAILY,
|
DAILY,
|
||||||
WEEKLY
|
WEEKLY
|
||||||
@ -40,7 +41,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container {
|
|||||||
const titleWindow = addWindow(this.scene, 0, 0, 114, 18, false, false, null, null, WindowVariant.THIN);
|
const titleWindow = addWindow(this.scene, 0, 0, 114, 18, false, false, null, null, WindowVariant.THIN);
|
||||||
this.add(titleWindow);
|
this.add(titleWindow);
|
||||||
|
|
||||||
this.titleLabel = addTextObject(this.scene, titleWindow.displayWidth / 2, titleWindow.displayHeight / 2, i18next.t('menu:dailyRankings'), TextStyle.WINDOW, { fontSize: '64px' });
|
this.titleLabel = addTextObject(this.scene, titleWindow.displayWidth / 2, titleWindow.displayHeight / 2, i18next.t('menu:loading'), TextStyle.WINDOW, { fontSize: '64px' });
|
||||||
this.titleLabel.setOrigin(0.5, 0.5);
|
this.titleLabel.setOrigin(0.5, 0.5);
|
||||||
this.add(this.titleLabel);
|
this.add(this.titleLabel);
|
||||||
|
|
||||||
@ -156,7 +157,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container {
|
|||||||
.then(jsonResponse => {
|
.then(jsonResponse => {
|
||||||
this.page = page;
|
this.page = page;
|
||||||
this.category = category;
|
this.category = category;
|
||||||
this.titleLabel.setText(`${Utils.toReadableString(ScoreboardCategory[category])} ${i18next.t("menu:rankings")}`);
|
this.titleLabel.setText(`${i18next.t(`menu:${ScoreboardCategory[category].toLowerCase()}Rankings`)}`);
|
||||||
this.prevPageButton.setAlpha(page > 1 ? 1 : 0.5);
|
this.prevPageButton.setAlpha(page > 1 ? 1 : 0.5);
|
||||||
this.nextPageButton.setAlpha(page < this.pageCount ? 1 : 0.5);
|
this.nextPageButton.setAlpha(page < this.pageCount ? 1 : 0.5);
|
||||||
this.pageNumberLabel.setText(page.toString());
|
this.pageNumberLabel.setText(page.toString());
|
||||||
@ -166,7 +167,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container {
|
|||||||
} else
|
} else
|
||||||
this.loadingLabel.setText(i18next.t('menu:noRankings'));
|
this.loadingLabel.setText(i18next.t('menu:noRankings'));
|
||||||
});
|
});
|
||||||
});
|
}).catch(err => { console.error("Failed to load daily rankings:\n", err) });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,6 +90,7 @@ export default class PartyUiHandler extends MessageUiHandler {
|
|||||||
private selectFilter: PokemonSelectFilter | PokemonModifierTransferSelectFilter;
|
private selectFilter: PokemonSelectFilter | PokemonModifierTransferSelectFilter;
|
||||||
private moveSelectFilter: PokemonMoveSelectFilter;
|
private moveSelectFilter: PokemonMoveSelectFilter;
|
||||||
private tmMoveId: Moves;
|
private tmMoveId: Moves;
|
||||||
|
private showMovePp: boolean;
|
||||||
|
|
||||||
private iconAnimHandler: PokemonIconAnimHandler;
|
private iconAnimHandler: PokemonIconAnimHandler;
|
||||||
|
|
||||||
@ -185,6 +186,7 @@ export default class PartyUiHandler extends MessageUiHandler {
|
|||||||
? args[4] as PokemonMoveSelectFilter
|
? args[4] as PokemonMoveSelectFilter
|
||||||
: PartyUiHandler.FilterAllMoves;
|
: PartyUiHandler.FilterAllMoves;
|
||||||
this.tmMoveId = args.length > 5 && args[5] ? args[5] : Moves.NONE;
|
this.tmMoveId = args.length > 5 && args[5] ? args[5] : Moves.NONE;
|
||||||
|
this.showMovePp = args.length > 6 && args[6];
|
||||||
|
|
||||||
this.partyContainer.setVisible(true);
|
this.partyContainer.setVisible(true);
|
||||||
this.partyBg.setTexture(`party_bg${this.scene.currentBattle.double ? '_double' : ''}`);
|
this.partyBg.setTexture(`party_bg${this.scene.currentBattle.double ? '_double' : ''}`);
|
||||||
@ -663,7 +665,14 @@ export default class PartyUiHandler extends MessageUiHandler {
|
|||||||
case PartyOption.MOVE_2:
|
case PartyOption.MOVE_2:
|
||||||
case PartyOption.MOVE_3:
|
case PartyOption.MOVE_3:
|
||||||
case PartyOption.MOVE_4:
|
case PartyOption.MOVE_4:
|
||||||
optionName = pokemon.moveset[option - PartyOption.MOVE_1].getName();
|
const move = pokemon.moveset[option - PartyOption.MOVE_1];
|
||||||
|
if(this.showMovePp) {
|
||||||
|
const maxPP = move.getMovePp();
|
||||||
|
const currPP = maxPP - move.ppUsed;
|
||||||
|
optionName = `${move.getName()} ${currPP}/${maxPP}`;
|
||||||
|
} else {
|
||||||
|
optionName = move.getName();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (formChangeItemModifiers && option >= PartyOption.FORM_CHANGE_ITEM) {
|
if (formChangeItemModifiers && option >= PartyOption.FORM_CHANGE_ITEM) {
|
||||||
|
@ -161,8 +161,9 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container {
|
|||||||
if (isFusion)
|
if (isFusion)
|
||||||
this.pokemonFusionShinyIcon.setTint(getVariantTint(pokemon.fusionVariant));
|
this.pokemonFusionShinyIcon.setTint(getVariantTint(pokemon.fusionVariant));
|
||||||
|
|
||||||
const originalIvs: integer[] = this.scene.gameData.dexData[pokemon.species.speciesId].caughtAttr
|
const starterSpeciesId = pokemon.species.getRootSpeciesId(true);
|
||||||
? this.scene.gameData.dexData[pokemon.species.speciesId].ivs
|
const originalIvs: integer[] = this.scene.gameData.dexData[starterSpeciesId].caughtAttr
|
||||||
|
? this.scene.gameData.dexData[starterSpeciesId].ivs
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
this.statsContainer.updateIvs(pokemon.ivs, originalIvs);
|
this.statsContainer.updateIvs(pokemon.ivs, originalIvs);
|
||||||
|
@ -4,7 +4,8 @@ import { Stat, getStatName } from "../data/pokemon-stat";
|
|||||||
import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./text";
|
import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./text";
|
||||||
|
|
||||||
const ivChartSize = 24;
|
const ivChartSize = 24;
|
||||||
const ivChartStatCoordMultipliers = [ [ 0, 1 ], [ 0.825, 0.5 ], [ 0.825, -0.5 ], [ 0, -1 ], [ -0.825, -0.5 ], [ -0.825, 0.5 ] ];
|
const ivChartStatCoordMultipliers = [ [ 0, -1 ], [ 0.825, -0.5 ], [ 0.825, 0.5 ], [ -0.825, -0.5 ], [ -0.825, 0.5 ], [ 0, 1 ] ];
|
||||||
|
const ivChartStatIndexes = [0,1,2,5,4,3] // swap special attack and speed
|
||||||
const defaultIvChartData = new Array(12).fill(null).map(() => 0);
|
const defaultIvChartData = new Array(12).fill(null).map(() => 0);
|
||||||
|
|
||||||
export class StatsContainer extends Phaser.GameObjects.Container {
|
export class StatsContainer extends Phaser.GameObjects.Container {
|
||||||
@ -22,7 +23,7 @@ export class StatsContainer extends Phaser.GameObjects.Container {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
const ivChartBgData = new Array(6).fill(null).map((_, i: integer) => [ ivChartSize * ivChartStatCoordMultipliers[i][0], ivChartSize * ivChartStatCoordMultipliers[i][1] ] ).flat();
|
const ivChartBgData = new Array(6).fill(null).map((_, i: integer) => [ ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][0], ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][1] ] ).flat();
|
||||||
|
|
||||||
const ivChartBg = this.scene.add.polygon(48, 44, ivChartBgData, 0xd8e0f0, 0.625);
|
const ivChartBg = this.scene.add.polygon(48, 44, ivChartBgData, 0xd8e0f0, 0.625);
|
||||||
ivChartBg.setOrigin(0, 0);
|
ivChartBg.setOrigin(0, 0);
|
||||||
@ -62,7 +63,7 @@ export class StatsContainer extends Phaser.GameObjects.Container {
|
|||||||
|
|
||||||
updateIvs(ivs: integer[], originalIvs?: integer[]): void {
|
updateIvs(ivs: integer[], originalIvs?: integer[]): void {
|
||||||
if (ivs) {
|
if (ivs) {
|
||||||
const ivChartData = new Array(6).fill(null).map((_, i) => [ (ivs[i] / 31) * ivChartSize * ivChartStatCoordMultipliers[i][0], (ivs[i] / 31) * ivChartSize * ivChartStatCoordMultipliers[i][1] ] ).flat();
|
const ivChartData = new Array(6).fill(null).map((_, i) => [ (ivs[ivChartStatIndexes[i]] / 31) * ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][0], (ivs[ivChartStatIndexes[i]] / 31) * ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][1] ] ).flat();
|
||||||
const lastIvChartData = this.statsIvsCache || defaultIvChartData;
|
const lastIvChartData = this.statsIvsCache || defaultIvChartData;
|
||||||
this.statsIvsCache = ivChartData.slice(0);
|
this.statsIvsCache = ivChartData.slice(0);
|
||||||
|
|
||||||
|
@ -65,6 +65,9 @@ export default class TitleUiHandler extends OptionSelectUiHandler {
|
|||||||
this.playerCountLabel.setText(`${stats.playerCount} ${i18next.t("menu:playersOnline")}`);
|
this.playerCountLabel.setText(`${stats.playerCount} ${i18next.t("menu:playersOnline")}`);
|
||||||
if (this.splashMessage === battleCountSplashMessage)
|
if (this.splashMessage === battleCountSplashMessage)
|
||||||
this.splashMessageText.setText(battleCountSplashMessage.replace('{COUNT}', stats.battleCount.toLocaleString('en-US')));
|
this.splashMessageText.setText(battleCountSplashMessage.replace('{COUNT}', stats.battleCount.toLocaleString('en-US')));
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.error("Failed to fetch title stats:\n", err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user