Merge branch 'beta' into fix-evolution-hp
2
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@ -35,5 +35,3 @@ body:
|
||||
attributes:
|
||||
label: Additional context
|
||||
description: Add any other context or screenshots about the feature request here.
|
||||
validations:
|
||||
required: true
|
||||
|
BIN
public/images/events/august-variant-update.png
Normal file
After Width: | Height: | Size: 370 KiB |
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 6.2 KiB |
@ -2513,7 +2513,6 @@
|
||||
],
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:edb2df3a947401efb05329a2c96d5d73:f256d83ef4df17c17958acc6e0432ab0:bad05b37c157676604256a043511a6a2$"
|
||||
"version": "3.0"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 326 B After Width: | Height: | Size: 318 B |
Before Width: | Height: | Size: 326 B After Width: | Height: | Size: 318 B |
BIN
public/images/pokemon/icons/variant/2/177_2.png
Normal file
After Width: | Height: | Size: 271 B |
BIN
public/images/pokemon/icons/variant/2/177_3.png
Normal file
After Width: | Height: | Size: 271 B |
BIN
public/images/pokemon/icons/variant/2/178_2.png
Normal file
After Width: | Height: | Size: 318 B |
BIN
public/images/pokemon/icons/variant/2/178_3.png
Normal file
After Width: | Height: | Size: 318 B |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.2 KiB |
@ -3815,6 +3815,11 @@
|
||||
1,
|
||||
1
|
||||
],
|
||||
"178": [
|
||||
0,
|
||||
2,
|
||||
2
|
||||
],
|
||||
"185": [
|
||||
0,
|
||||
1,
|
||||
@ -7833,6 +7838,11 @@
|
||||
1,
|
||||
1
|
||||
],
|
||||
"178": [
|
||||
0,
|
||||
2,
|
||||
2
|
||||
],
|
||||
"185": [
|
||||
0,
|
||||
1,
|
||||
|
BIN
public/images/pokemon/variant/back/177_2.png
Normal file
After Width: | Height: | Size: 7.1 KiB |
BIN
public/images/pokemon/variant/back/177_3.png
Normal file
After Width: | Height: | Size: 7.1 KiB |
2372
public/images/pokemon/variant/back/female/178_2.json
Normal file
BIN
public/images/pokemon/variant/back/female/178_2.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
2372
public/images/pokemon/variant/back/female/178_3.json
Normal file
BIN
public/images/pokemon/variant/back/female/178_3.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
2372
public/images/pokemon/variant/female/178_2.json
Normal file
BIN
public/images/pokemon/variant/female/178_2.png
Normal file
After Width: | Height: | Size: 5.2 KiB |
2372
public/images/pokemon/variant/female/178_3.json
Normal file
BIN
public/images/pokemon/variant/female/178_3.png
Normal file
After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 32 KiB |
@ -5,7 +5,7 @@ import Pokemon, { PlayerPokemon, EnemyPokemon } from "./field/pokemon";
|
||||
import PokemonSpecies, { PokemonSpeciesFilter, allSpecies, getPokemonSpecies } from "./data/pokemon-species";
|
||||
import { Constructor } from "#app/utils";
|
||||
import * as Utils from "./utils";
|
||||
import { Modifier, ModifierBar, ConsumablePokemonModifier, ConsumableModifier, PokemonHpRestoreModifier, HealingBoosterModifier, PersistentModifier, PokemonHeldItemModifier, ModifierPredicate, DoubleBattleChanceBoosterModifier, FusePokemonModifier, PokemonFormChangeItemModifier, TerastallizeModifier, overrideModifiers, overrideHeldItems } from "./modifier/modifier";
|
||||
import { Modifier, ModifierBar, ConsumablePokemonModifier, ConsumableModifier, PokemonHpRestoreModifier, TurnHeldItemTransferModifier, HealingBoosterModifier, PersistentModifier, PokemonHeldItemModifier, ModifierPredicate, DoubleBattleChanceBoosterModifier, FusePokemonModifier, PokemonFormChangeItemModifier, TerastallizeModifier, overrideModifiers, overrideHeldItems } from "./modifier/modifier";
|
||||
import { PokeballType } from "./data/pokeball";
|
||||
import { initCommonAnims, initMoveAnim, loadCommonAnimAssets, loadMoveAnimAssets, populateAnims } from "./data/battle-anims";
|
||||
import { Phase } from "./phase";
|
||||
@ -37,7 +37,7 @@ import UIPlugin from "phaser3-rex-plugins/templates/ui/ui-plugin";
|
||||
import { addUiThemeOverrides } from "./ui/ui-theme";
|
||||
import PokemonData from "./system/pokemon-data";
|
||||
import { Nature } from "./data/nature";
|
||||
import { SpeciesFormChangeManualTrigger, SpeciesFormChangeTimeOfDayTrigger, SpeciesFormChangeTrigger, pokemonFormChanges, FormChangeItem } from "./data/pokemon-forms";
|
||||
import { SpeciesFormChangeManualTrigger, SpeciesFormChangeTimeOfDayTrigger, SpeciesFormChangeTrigger, pokemonFormChanges, FormChangeItem, SpeciesFormChange } from "./data/pokemon-forms";
|
||||
import { FormChangePhase, QuietFormChangePhase } from "./form-change-phase";
|
||||
import { getTypeRgb } from "./data/type";
|
||||
import PokemonSpriteSparkleHandler from "./field/pokemon-sprite-sparkle-handler";
|
||||
@ -2579,7 +2579,7 @@ export default class BattleScene extends SceneBase {
|
||||
|
||||
// in case this is NECROZMA, determine which forms this
|
||||
const matchingFormChangeOpts = pokemonFormChanges[pokemon.species.speciesId].filter(fc => fc.findTrigger(formChangeTriggerType) && fc.canChange(pokemon));
|
||||
let matchingFormChange;
|
||||
let matchingFormChange: SpeciesFormChange | null;
|
||||
if (pokemon.species.speciesId === Species.NECROZMA && matchingFormChangeOpts.length > 1) {
|
||||
// Ultra Necrozma is changing its form back, so we need to figure out into which form it devolves.
|
||||
const formChangeItemModifiers = (this.findModifiers(m => m instanceof PokemonFormChangeItemModifier && m.pokemonId === pokemon.id) as PokemonFormChangeItemModifier[]).filter(m => m.active).map(m => m.formChangeItem);
|
||||
@ -2666,7 +2666,9 @@ export default class BattleScene extends SceneBase {
|
||||
if (pokemon instanceof EnemyPokemon && pokemon.isBoss() && !pokemon.formIndex && pokemon.bossSegmentIndex < 1) {
|
||||
this.fadeOutBgm(Utils.fixedInt(2000), false);
|
||||
this.ui.showDialogue(battleSpecDialogue[BattleSpec.FINAL_BOSS].firstStageWin, pokemon.species.name, undefined, () => {
|
||||
this.addEnemyModifier(getModifierType(modifierTypes.MINI_BLACK_HOLE).newModifier(pokemon) as PersistentModifier, false, true);
|
||||
const finalBossMBH = getModifierType(modifierTypes.MINI_BLACK_HOLE).newModifier(pokemon) as TurnHeldItemTransferModifier;
|
||||
finalBossMBH.setTransferrableFalse();
|
||||
this.addEnemyModifier(finalBossMBH, false, true);
|
||||
pokemon.generateAndPopulateMoveset(1);
|
||||
this.setFieldScale(0.75);
|
||||
this.triggerPokemonFormChange(pokemon, SpeciesFormChangeManualTrigger, false);
|
||||
|
@ -5039,6 +5039,7 @@ export function initAbilities() {
|
||||
(pokemon, abilityName) => i18next.t("abilityTriggers:disguiseAvoidedDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: abilityName }),
|
||||
(pokemon) => Math.floor(pokemon.getMaxHp() / 8))
|
||||
.attr(PostBattleInitFormChangeAbAttr, () => 0)
|
||||
.bypassFaint()
|
||||
.ignorable(),
|
||||
new Ability(Abilities.BATTLE_BOND, 7)
|
||||
.attr(PostVictoryFormChangeAbAttr, () => 2)
|
||||
@ -5191,6 +5192,7 @@ export function initAbilities() {
|
||||
.attr(FormBlockDamageAbAttr, (target, user, move) => move.category === MoveCategory.PHYSICAL && !!target.getTag(BattlerTagType.ICE_FACE), 0, BattlerTagType.ICE_FACE,
|
||||
(pokemon, abilityName) => i18next.t("abilityTriggers:iceFaceAvoidedDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: abilityName }))
|
||||
.attr(PostBattleInitFormChangeAbAttr, () => 0)
|
||||
.bypassFaint()
|
||||
.ignorable(),
|
||||
new Ability(Abilities.POWER_SPOT, 8)
|
||||
.attr(AllyMoveCategoryPowerBoostAbAttr, [MoveCategory.SPECIAL, MoveCategory.PHYSICAL], 1.3),
|
||||
|
@ -37,7 +37,7 @@ export const speciesEggMoves = {
|
||||
[Species.SLOWPOKE]: [ Moves.BOUNCY_BUBBLE, Moves.FLAMETHROWER, Moves.MYSTICAL_POWER, Moves.SHED_TAIL ],
|
||||
[Species.MAGNEMITE]: [ Moves.PARABOLIC_CHARGE, Moves.BODY_PRESS, Moves.ICE_BEAM, Moves.THUNDERCLAP ],
|
||||
[Species.FARFETCHD]: [ Moves.IVY_CUDGEL, Moves.TRIPLE_ARROWS, Moves.ROOST, Moves.VICTORY_DANCE ],
|
||||
[Species.DODUO]: [ Moves.ICE_SPINNER, Moves.MULTI_ATTACK, Moves.FLOATY_FALL, Moves.TRIPLE_ARROWS ],
|
||||
[Species.DODUO]: [ Moves.TRIPLE_AXEL, Moves.MULTI_ATTACK, Moves.FLOATY_FALL, Moves.TRIPLE_ARROWS ],
|
||||
[Species.SEEL]: [ Moves.FREEZE_DRY, Moves.BOUNCY_BUBBLE, Moves.SLACK_OFF, Moves.STEAM_ERUPTION ],
|
||||
[Species.GRIMER]: [ Moves.SUCKER_PUNCH, Moves.CURSE, Moves.STRENGTH_SAP, Moves.NOXIOUS_TORQUE ],
|
||||
[Species.SHELLDER]: [ Moves.ROCK_BLAST, Moves.WATER_SHURIKEN, Moves.BANEFUL_BUNKER, Moves.BONE_RUSH ],
|
||||
@ -198,7 +198,7 @@ export const speciesEggMoves = {
|
||||
[Species.KYOGRE]: [ Moves.BOUNCY_BUBBLE, Moves.HURRICANE, Moves.FREEZE_DRY, Moves.ELECTRO_SHOT ],
|
||||
[Species.GROUDON]: [ Moves.STONE_AXE, Moves.SOLAR_BLADE, Moves.MORNING_SUN, Moves.SACRED_FIRE ],
|
||||
[Species.RAYQUAZA]: [ Moves.V_CREATE, Moves.DRAGON_DARTS, Moves.CORE_ENFORCER, Moves.OBLIVION_WING ],
|
||||
[Species.JIRACHI]: [ Moves.TACHYON_CUTTER, Moves.FLOATY_FALL, Moves.TRIPLE_ARROWS, Moves.SHELL_SMASH ],
|
||||
[Species.JIRACHI]: [ Moves.TACHYON_CUTTER, Moves.TRIPLE_ARROWS, Moves.ROCK_SLIDE, Moves.SHELL_SMASH ],
|
||||
[Species.DEOXYS]: [ Moves.COLLISION_COURSE, Moves.EARTH_POWER, Moves.PARTING_SHOT, Moves.LUMINA_CRASH ],
|
||||
[Species.TURTWIG]: [ Moves.SHELL_SMASH, Moves.MIGHTY_CLEAVE, Moves.ICE_SPINNER, Moves.SAPPY_SEED ],
|
||||
[Species.CHIMCHAR]: [ Moves.FIERY_DANCE, Moves.SECRET_SWORD, Moves.TRIPLE_AXEL, Moves.SACRED_FIRE ],
|
||||
@ -418,7 +418,7 @@ export const speciesEggMoves = {
|
||||
[Species.CELESTEELA]: [ Moves.RECOVER, Moves.BUZZY_BUZZ, Moves.SANDSEAR_STORM, Moves.OBLIVION_WING ],
|
||||
[Species.KARTANA]: [ Moves.MIGHTY_CLEAVE, Moves.PSYBLADE, Moves.BITTER_BLADE, Moves.BEHEMOTH_BLADE ],
|
||||
[Species.GUZZLORD]: [ Moves.SUCKER_PUNCH, Moves.COMEUPPANCE, Moves.SLACK_OFF, Moves.SHED_TAIL ],
|
||||
[Species.NECROZMA]: [ Moves.CLANGOROUS_SOUL, Moves.SACRED_FIRE, Moves.ASTRAL_BARRAGE, Moves.CLANGOROUS_SOUL ],
|
||||
[Species.NECROZMA]: [ Moves.CLANGOROUS_SOUL, Moves.SACRED_FIRE, Moves.ASTRAL_BARRAGE, Moves.DYNAMAX_CANNON ],
|
||||
[Species.MAGEARNA]: [ Moves.STRENGTH_SAP, Moves.EARTH_POWER, Moves.MOONBLAST, Moves.MAKE_IT_RAIN ],
|
||||
[Species.MARSHADOW]: [ Moves.POWER_UP_PUNCH, Moves.TRIPLE_AXEL, Moves.METEOR_MASH, Moves.STORM_THROW ],
|
||||
[Species.POIPOLE]: [ Moves.CORE_ENFORCER, Moves.ICE_BEAM, Moves.SEARING_SHOT, Moves.MALIGNANT_CHAIN ],
|
||||
@ -458,7 +458,7 @@ export const speciesEggMoves = {
|
||||
[Species.MORPEKO]: [ Moves.TRIPLE_AXEL, Moves.OBSTRUCT, Moves.SWORDS_DANCE, Moves.COLLISION_COURSE ],
|
||||
[Species.CUFANT]: [ Moves.LIQUIDATION, Moves.CURSE, Moves.COMBAT_TORQUE, Moves.GIGATON_HAMMER ],
|
||||
[Species.DRACOZOLT]: [ Moves.TRIPLE_AXEL, Moves.DRAGON_HAMMER, Moves.FIRE_LASH, Moves.DRAGON_DANCE ],
|
||||
[Species.ARCTOZOLT]: [ Moves.TRIPLE_AXEL, Moves.AQUA_STEP, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ],
|
||||
[Species.ARCTOZOLT]: [ Moves.MOUNTAIN_GALE, Moves.AQUA_STEP, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ],
|
||||
[Species.DRACOVISH]: [ Moves.TRIPLE_AXEL, Moves.DRAGON_HAMMER, Moves.THUNDER_FANG, Moves.DRAGON_DANCE ],
|
||||
[Species.ARCTOVISH]: [ Moves.ICE_FANG, Moves.THUNDER_FANG, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ],
|
||||
[Species.DURALUDON]: [ Moves.CORE_ENFORCER, Moves.BODY_PRESS, Moves.RECOVER, Moves.TACHYON_CUTTER ],
|
||||
|
@ -837,6 +837,8 @@ export const pokemonFormChanges: PokemonFormChanges = {
|
||||
new SpeciesFormChange(Species.CRAMORANT, "", "gorging", new SpeciesFormChangeManualTrigger, true, new SpeciesFormChangeCondition(p => p.getHpRatio() < .5)),
|
||||
new SpeciesFormChange(Species.CRAMORANT, "gulping", "", new SpeciesFormChangeManualTrigger, true),
|
||||
new SpeciesFormChange(Species.CRAMORANT, "gorging", "", new SpeciesFormChangeManualTrigger, true),
|
||||
new SpeciesFormChange(Species.CRAMORANT, "gulping", "", new SpeciesFormChangeActiveTrigger(false), true),
|
||||
new SpeciesFormChange(Species.CRAMORANT, "gorging", "", new SpeciesFormChangeActiveTrigger(false), true),
|
||||
]
|
||||
};
|
||||
|
||||
|
@ -3559,7 +3559,7 @@ export const starterPassiveAbilities = {
|
||||
[Species.HEATRAN]: Abilities.EARTH_EATER,
|
||||
[Species.REGIGIGAS]: Abilities.MINDS_EYE,
|
||||
[Species.GIRATINA]: Abilities.SHADOW_SHIELD,
|
||||
[Species.CRESSELIA]: Abilities.MAGIC_BOUNCE,
|
||||
[Species.CRESSELIA]: Abilities.UNAWARE,
|
||||
[Species.PHIONE]: Abilities.SIMPLE,
|
||||
[Species.MANAPHY]: Abilities.PRIMORDIAL_SEA,
|
||||
[Species.DARKRAI]: Abilities.UNNERVE,
|
||||
|
@ -1577,11 +1577,11 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
})),
|
||||
|
||||
[TrainerType.RIVAL]: new TrainerConfig((t = TrainerType.RIVAL)).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL)
|
||||
.setModifierRewardFuncs(() => modifierTypes.SUPER_EXP_CHARM, () => modifierTypes.EXP_SHARE)
|
||||
.setModifierRewardFuncs(() => modifierTypes.SUPER_EXP_CHARM, () => modifierTypes.EXP_SHARE, () => modifierTypes.SHINY_CHARM, () => modifierTypes.ABILITY_CHARM)
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.CHIKORITA, Species.CYNDAQUIL, Species.TOTODILE, Species.TREECKO, Species.TORCHIC, Species.MUDKIP, Species.TURTWIG, Species.CHIMCHAR, Species.PIPLUP, Species.SNIVY, Species.TEPIG, Species.OSHAWOTT, Species.CHESPIN, Species.FENNEKIN, Species.FROAKIE, Species.ROWLET, Species.LITTEN, Species.POPPLIO, Species.GROOKEY, Species.SCORBUNNY, Species.SOBBLE, Species.SPRIGATITO, Species.FUECOCO, Species.QUAXLY], TrainerSlot.TRAINER, true))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEY, Species.HOOTHOOT, Species.TAILLOW, Species.STARLY, Species.PIDOVE, Species.FLETCHLING, Species.PIKIPEK, Species.ROOKIDEE, Species.WATTREL], TrainerSlot.TRAINER, true)),
|
||||
[TrainerType.RIVAL_2]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL_2)
|
||||
.setModifierRewardFuncs(() => modifierTypes.EXP_SHARE)
|
||||
.setModifierRewardFuncs(() => modifierTypes.EXP_SHARE, () => modifierTypes.SHINY_CHARM)
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.IVYSAUR, Species.CHARMELEON, Species.WARTORTLE, Species.BAYLEEF, Species.QUILAVA, Species.CROCONAW, Species.GROVYLE, Species.COMBUSKEN, Species.MARSHTOMP, Species.GROTLE, Species.MONFERNO, Species.PRINPLUP, Species.SERVINE, Species.PIGNITE, Species.DEWOTT, Species.QUILLADIN, Species.BRAIXEN, Species.FROGADIER, Species.DARTRIX, Species.TORRACAT, Species.BRIONNE, Species.THWACKEY, Species.RABOOT, Species.DRIZZILE, Species.FLORAGATO, Species.CROCALOR, Species.QUAXWELL], TrainerSlot.TRAINER, true))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOTTO, Species.HOOTHOOT, Species.TAILLOW, Species.STARAVIA, Species.TRANQUILL, Species.FLETCHINDER, Species.TRUMBEAK, Species.CORVISQUIRE, Species.WATTREL], TrainerSlot.TRAINER, true))
|
||||
.setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)),
|
||||
|
@ -924,7 +924,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
*/
|
||||
getLearnableLevelMoves(): Moves[] {
|
||||
let levelMoves = this.getLevelMoves(1, true).map(lm => lm[1]);
|
||||
if (this.metBiome === -1 && !this.scene.gameMode.isFreshStartChallenge()) {
|
||||
if (this.metBiome === -1 && !this.scene.gameMode.isFreshStartChallenge() && !this.scene.gameMode.isDaily) {
|
||||
levelMoves = this.getUnlockedEggMoves().concat(levelMoves);
|
||||
}
|
||||
return levelMoves.filter(lm => !this.moveset.some(m => m?.moveId === lm));
|
||||
@ -3225,14 +3225,18 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
* Causes a Pokemon to leave the field (such as in preparation for a switch out/escape).
|
||||
* @param clearEffects Indicates if effects should be cleared (true) or passed
|
||||
* to the next pokemon, such as during a baton pass (false)
|
||||
* @param hideInfo Indicates if this should also play the animation to hide the Pokemon's
|
||||
* info container.
|
||||
*/
|
||||
leaveField(clearEffects: boolean = true) {
|
||||
leaveField(clearEffects: boolean = true, hideInfo: boolean = true) {
|
||||
this.resetTurnData();
|
||||
if (clearEffects) {
|
||||
this.resetSummonData();
|
||||
this.resetBattleData();
|
||||
}
|
||||
this.hideInfo();
|
||||
if (hideInfo) {
|
||||
this.hideInfo();
|
||||
}
|
||||
this.setVisible(false);
|
||||
this.scene.field.remove(this);
|
||||
this.scene.triggerPokemonFormChange(this, SpeciesFormChangeActiveTrigger, true);
|
||||
@ -3782,7 +3786,7 @@ export class EnemyPokemon extends Pokemon {
|
||||
this.moveset = (formIndex !== undefined ? formIndex : this.formIndex)
|
||||
? [
|
||||
new PokemonMove(Moves.DYNAMAX_CANNON),
|
||||
new PokemonMove(Moves.CROSS_POISON),
|
||||
new PokemonMove(Moves.SLUDGE_BOMB),
|
||||
new PokemonMove(Moves.FLAMETHROWER),
|
||||
new PokemonMove(Moves.RECOVER, 0, -4)
|
||||
]
|
||||
|
@ -62,7 +62,7 @@ export class GameMode implements GameModeConfig {
|
||||
* @returns true if the game mode has that challenge
|
||||
*/
|
||||
hasChallenge(challenge: Challenges): boolean {
|
||||
return this.challenges.some(c => c.id === challenge);
|
||||
return this.challenges.some(c => c.id === challenge && c.value !== 0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -42,6 +42,7 @@ export class LoadingScene extends SceneBase {
|
||||
this.loadImage("loading_bg", "arenas");
|
||||
this.loadImage("logo", "");
|
||||
// this.loadImage("pride-update", "events");
|
||||
this.loadImage("august-variant-update", "events");
|
||||
|
||||
// Load menu images
|
||||
this.loadAtlas("bg", "ui");
|
||||
|
@ -2573,7 +2573,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}Wow… You cleaned me out.\nAre you actually a beginner?
|
||||
$@c{smile}Maybe it was a bit of luck but…\nWho knows you might just be able to go all the way.
|
||||
$By the way, the professor asked me to give you these items. They look pretty cool.
|
||||
$@c{serious_smile_fists}Good luck out there!`
|
||||
$@c{serious_smile_fists}Good luck out there!
|
||||
$@c{smile}Oh- and I hope you enjoy the event!`
|
||||
},
|
||||
},
|
||||
"rival_female": {
|
||||
@ -2587,7 +2588,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}You just started and you're already this strong?!@d{96}\n@c{angry}You totally cheated, didn't you?
|
||||
$@c{smile_wave_wink}Just kidding!@d{64} @c{smile_eclosed}I lost fair and square… I have a feeling you're going to do really well out there.
|
||||
$@c{smile}By the way, the professor wanted me to give you some items. Hopefully they're helpful!
|
||||
$@c{smile_wave}Do your best like always! I believe in you!`
|
||||
$@c{smile_wave}Do your best like always! I believe in you!
|
||||
$@c{smile}Oh- and I hope you enjoy the event!`
|
||||
},
|
||||
},
|
||||
"rival_2": {
|
||||
@ -2603,7 +2605,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
$@c{smile}That's alright, though. I figured this might happen.\n@c{serious_mopen_fists}It just means I need to try harder for next time!\n
|
||||
$@c{smile}Oh, not that you really need the help, but I had an extra one of these lying around and figured you might want it.\n
|
||||
$@c{serious_smile_fists}Don't expect another one after this, though!\nI can't keep giving my opponent an advantage after all.
|
||||
$@c{smile}Anyway, take care!`
|
||||
$@c{smile}Anyway, take care, and enjoy the event!`
|
||||
},
|
||||
},
|
||||
"rival_2_female": {
|
||||
@ -2619,7 +2621,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
$@c{smile}Aw well. That just means I'll have to train even harder for next time!
|
||||
$@c{smile_wave}I also got you another one of these!\n@c{smile_wave_wink}No need to thank me~.
|
||||
$@c{angry_mopen}This is the last one, though! You won't be getting anymore freebies from me after this!
|
||||
$@c{smile_wave}Keep at it!`
|
||||
$@c{smile_wave}Keep at it, and enjoy the event!`
|
||||
},
|
||||
"defeat": {
|
||||
1: "It's OK to lose sometimes…"
|
||||
|
@ -2641,7 +2641,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
$@c{smile}Vielleicht war es einfach etwas Glück, aber…\nWer weiß, vielleicht schaffst du es irgendwann
|
||||
$ja wirklich ganz groß raus zu kommen.
|
||||
$Übrigens, der Professor hat mich gebeten dir diese Items zu geben. Die sehen wirklich cool aus.
|
||||
$@c{serious_smile_fists}Viel Glück da draußen!`
|
||||
$@c{serious_smile_fists}Viel Glück da draußen!
|
||||
$@c{smile}Oh-und genieße das Event!`
|
||||
},
|
||||
},
|
||||
"rival_female": {
|
||||
@ -2656,7 +2657,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}Du hast gerade erst angefangen und bist schon so stark?!@d{96} @c{angry}Du hast sowas von betrogen, oder?
|
||||
$@c{smile_wave_wink}Ich mach nur Spaß!@d{64} @c{smile_eclosed}Ich habe ehrlich verloren… Ich habe das Gefühl, dass du es dort draußen weit bringen wirst.
|
||||
$@c{smile}Übrigens, der Professor hat mich gebeten dir diese Items zu geben. Ich hoffe sie sind hilfreich!
|
||||
$@c{smile_wave}Gib wie immer dein Bestes! Ich glaube an dich!`
|
||||
$@c{smile_wave}Gib wie immer dein Bestes! Ich glaube an dich!
|
||||
$@c{smile}Oh-und genieße das Event!`
|
||||
},
|
||||
},
|
||||
"rival_2": {
|
||||
@ -2674,7 +2676,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
$@c{smile}Nicht, dass du wirklich Hilfe benötigen würdest, aber ich habe hier noch eins von diesen Dingern herumliegen.
|
||||
$Du kannst es haben.\n
|
||||
$@c{serious_smile_fists}Erwarte aber nicht, dass ich dir noch mehr gebe!\nIch kann meinen Rivalen doch keine Vorteile verschaffen.
|
||||
$@c{smile}Egal, pass auf dich auf!`
|
||||
$@c{smile}Egal, pass auf dich auf und genieße das Event!`
|
||||
},
|
||||
},
|
||||
"rival_2_female": {
|
||||
@ -2690,7 +2692,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
$@c{smile}Na gut. Das bedeutet ich muss noch härter tranieren!
|
||||
$@c{smile_wave}Ich habe noch eins von diesen Dingern!\n@c{smile_wave_wink}Kein Grund mir zu danken~.
|
||||
$@c{angry_mopen}Das ist aber das Letzte! Du bekommst ab jett keine Geschenke mehr von mir!
|
||||
$@c{smile_wave}Bleib stark!`
|
||||
$@c{smile_wave}Bleib stark und genieße das Event!`
|
||||
},
|
||||
"defeat": {
|
||||
1: "Es ist Ok manchmal zu verlieren…"
|
||||
|
@ -2574,7 +2574,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}Wow… You cleaned me out.\nAre you actually a beginner?
|
||||
$@c{smile}Maybe it was a bit of luck but…\nWho knows you might just be able to go all the way.
|
||||
$By the way, the professor asked me to give you these items. They look pretty cool.
|
||||
$@c{serious_smile_fists}Good luck out there!`
|
||||
$@c{serious_smile_fists}Good luck out there!
|
||||
$@c{smile}Oh- and I hope you enjoy the event!`
|
||||
},
|
||||
},
|
||||
"rival_female": {
|
||||
@ -2588,7 +2589,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}You just started and you're already this strong?!@d{96}\n@c{angry}You totally cheated, didn't you?
|
||||
$@c{smile_wave_wink}Just kidding!@d{64} @c{smile_eclosed}I lost fair and square… I have a feeling you're going to do really well out there.
|
||||
$@c{smile}By the way, the professor wanted me to give you some items. Hopefully they're helpful!
|
||||
$@c{smile_wave}Do your best like always! I believe in you!`
|
||||
$@c{smile_wave}Do your best like always! I believe in you!
|
||||
$@c{smile}Oh- and I hope you enjoy the event!`
|
||||
},
|
||||
},
|
||||
"rival_2": {
|
||||
@ -2602,9 +2604,9 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
"victory": {
|
||||
1: `@c{neutral_eclosed}Oh. I guess I was overconfident.
|
||||
$@c{smile}That's alright, though. I figured this might happen.\n@c{serious_mopen_fists}It just means I need to try harder for next time!\n
|
||||
$@c{smile}Oh, not that you really need the help, but I had an extra one of these lying around and figured you might want it.\n
|
||||
$@c{smile}Oh, not that you really need the help, but I had an extra one of each of these lying around and figured you might want them.\n
|
||||
$@c{serious_smile_fists}Don't expect another one after this, though!\nI can't keep giving my opponent an advantage after all.
|
||||
$@c{smile}Anyway, take care!`
|
||||
$@c{smile}Anyway, take care, and enjoy the event!`
|
||||
},
|
||||
},
|
||||
"rival_2_female": {
|
||||
@ -2618,9 +2620,9 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
"victory": {
|
||||
1: `@c{neutral}I… wasn't supposed to lose that time…
|
||||
$@c{smile}Aw well. That just means I'll have to train even harder for next time!
|
||||
$@c{smile_wave}I also got you another one of these!\n@c{smile_wave_wink}No need to thank me~.
|
||||
$@c{smile_wave}I also got you another two of these!\n@c{smile_wave_wink}No need to thank me~.
|
||||
$@c{angry_mopen}This is the last one, though! You won't be getting anymore freebies from me after this!
|
||||
$@c{smile_wave}Keep at it!`
|
||||
$@c{smile_wave}Keep at it, and enjoy the event!`
|
||||
},
|
||||
"defeat": {
|
||||
1: "It's OK to lose sometimes…"
|
||||
|
@ -2569,7 +2569,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}Wow… You cleaned me out.\nAre you actually a beginner?
|
||||
$@c{smile}Maybe it was a bit of luck but…\nWho knows you might just be able to go all the way.
|
||||
$By the way, the professor asked me to give you these items. They look pretty cool.
|
||||
$@c{serious_smile_fists}Good luck out there!`
|
||||
$@c{serious_smile_fists}Good luck out there!
|
||||
$@c{smile}Oh- and I hope you enjoy the event!`
|
||||
},
|
||||
},
|
||||
"rival_female": {
|
||||
@ -2583,7 +2584,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}You just started and you're already this strong?!@d{96}\n@c{angry}You totally cheated, didn't you?
|
||||
$@c{smile_wave_wink}Just kidding!@d{64} @c{smile_eclosed}I lost fair and square… I have a feeling you're going to do really well out there.
|
||||
$@c{smile}By the way, the professor wanted me to give you some items. Hopefully they're helpful!
|
||||
$@c{smile_wave}Do your best like always! I believe in you!`
|
||||
$@c{smile_wave}Do your best like always! I believe in you!
|
||||
$@c{smile}Oh- and I hope you enjoy the event!`
|
||||
},
|
||||
},
|
||||
"rival_2": {
|
||||
@ -2599,7 +2601,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
$@c{smile}That's alright, though. I figured this might happen.\n@c{serious_mopen_fists}It just means I need to try harder for next time!\n
|
||||
$@c{smile}Oh, not that you really need the help, but I had an extra one of these lying around and figured you might want it.\n
|
||||
$@c{serious_smile_fists}Don't expect another one after this, though!\nI can't keep giving my opponent an advantage after all.
|
||||
$@c{smile}Anyway, take care!`
|
||||
$@c{smile}Anyway, take care, and enjoy the event!`
|
||||
},
|
||||
},
|
||||
"rival_2_female": {
|
||||
@ -2615,7 +2617,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
$@c{smile}Aw well. That just means I'll have to train even harder for next time!
|
||||
$@c{smile_wave}I also got you another one of these!\n@c{smile_wave_wink}No need to thank me~.
|
||||
$@c{angry_mopen}This is the last one, though! You won't be getting anymore freebies from me after this!
|
||||
$@c{smile_wave}Keep at it!`
|
||||
$@c{smile_wave}Keep at it, and enjoy the event!`
|
||||
},
|
||||
"defeat": {
|
||||
1: "It's OK to lose sometimes…"
|
||||
|
@ -2372,7 +2372,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}Wah… Tu m’as vraiment lavé.\nT’es vraiment un débutant ?
|
||||
$@c{smile}T’as peut-être eu de la chance, mais…\nPeut-être que t’arriveras jusqu’au bout du chemin.
|
||||
$D’ailleurs, le prof m’a demandé de te filer ces objets.\nIls ont l’air sympas.
|
||||
$@c{serious_smile_fists}Bonne chance à toi !`
|
||||
$@c{serious_smile_fists}Bonne chance à toi !
|
||||
$@c{smile}Oh, et profite bien de l’évènement !`
|
||||
},
|
||||
},
|
||||
"rival_female": {
|
||||
@ -2386,7 +2387,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}Tu viens de commencer et t’es déjà si fort ?!@d{96}\n@c{angry}T’as triché non ? Avoue !
|
||||
$@c{smile_wave_wink}J’déconne !@d{64} @c{smile_eclosed}J’ai perdu dans les règles…\nJ’ai le sentiment que tu vas très bien t’en sortir.
|
||||
$@c{smile}D’ailleurs, le prof veut que je te donne ces quelques objets. Ils te seront utiles, pour sûr !
|
||||
$@c{smile_wave}Fais de ton mieux, comme toujours !\nJe crois fort en toi !`
|
||||
$@c{smile_wave}Fais de ton mieux, comme toujours !\nJe crois fort en toi !
|
||||
$@c{smile}Oh, et profite bien de l’évènement !`
|
||||
},
|
||||
},
|
||||
"rival_2": {
|
||||
@ -2402,7 +2404,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
$@c{smile}Pas grave, c’est OK. Je me doutais que ça arriverait.\n@c{serious_mopen_fists}Je vais juste devoir encore plus m’entrainer !\n
|
||||
$@c{smile}Ah, et pas que t’aies réellement besoin d’aide, mais j’ai ça en trop sur moi qui pourrait t’intéresser.\n
|
||||
$@c{serious_smile_fists}Mais n’espère plus en avoir d’autres !\nJe peux pas passer mon temps à aider mon adversaire.
|
||||
$@c{smile}Bref, prends soin de toi !`
|
||||
$@c{smile}Bref, prends soin de toi et profite bien de l’évènement !`
|
||||
},
|
||||
},
|
||||
"rival_2_female": {
|
||||
@ -2417,8 +2419,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{neutral}Je… J’étais pas encore supposée perdre…
|
||||
$@c{smile}Bon. Ça veut juste dire que je vais devoir encore plus m’entrainer !
|
||||
$@c{smile_wave}J’ai aussi ça en rab pour toi !\n@c{smile_wave_wink}Inutile de me remercier ~.
|
||||
$@c{angry_mopen}C’était le dernier, terminé les cadeaux après celui-là !
|
||||
$@c{smile_wave}Allez, tiens le coup !`
|
||||
$@c{angry_mopen}C’étaient les derniers, terminé les cadeaux après ceux-là !
|
||||
$@c{smile_wave}Allez, tiens le coup et profite bien de l’évènement !`
|
||||
},
|
||||
"defeat": {
|
||||
1: "Je suppose que c’est parfois normal de perdre…"
|
||||
@ -5051,7 +5053,8 @@ export const PGFdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}Wah… Tu m’as vraiment lavé.\nT’es vraiment une débutante ?
|
||||
$@c{smile}T’as peut-être eu de la chance, mais…\nPeut-être que t’arriveras jusqu’au bout du chemin.
|
||||
$D’ailleurs, le prof m’a demandé de te filer ces objets.\nIls ont l’air sympas.
|
||||
$@c{serious_smile_fists}Bonne chance à toi !`
|
||||
$@c{serious_smile_fists}Bonne chance à toi !
|
||||
$@c{smile}Oh, et profite bien de l’évènement !`
|
||||
},
|
||||
},
|
||||
"rival_female": {
|
||||
@ -5065,7 +5068,8 @@ export const PGFdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}Tu viens de commencer et t’es déjà si forte ?!@d{96}\n@c{angry}T’as triché non ? Avoue !
|
||||
$@c{smile_wave_wink}J’déconne !@d{64} @c{smile_eclosed}J’ai perdu dans les règles…\nJ’ai le sentiment que tu vas très bien t’en sortir.
|
||||
$@c{smile}D’ailleurs, le prof veut que je te donne ces quelques objets. Ils te seront utiles, pour sûr !
|
||||
$@c{smile_wave}Fais de ton mieux, comme toujours !\nJe crois fort en toi !`
|
||||
$@c{smile_wave}Fais de ton mieux, comme toujours !\nJe crois fort en toi !
|
||||
$@c{smile}Oh, et profite bien de l’évènement !`
|
||||
},
|
||||
},
|
||||
"rival_2": {
|
||||
@ -5081,7 +5085,7 @@ export const PGFdialogue: DialogueTranslationEntries = {
|
||||
$@c{smile}Pas grave, c’est OK. Je me doutais que ça arriverait.\n@c{serious_mopen_fists}Je vais juste devoir encore plus m’entrainer !\n
|
||||
$@c{smile}Ah, et pas que t’aies réellement besoin d’aide, mais j’ai ça en trop sur moi qui pourrait t’intéresser.\n
|
||||
$@c{serious_smile_fists}Mais n’espère plus en avoir d’autres !\nJe peux pas passer mon temps à aider mon adversaire.
|
||||
$@c{smile}Bref, prends soin de toi !`
|
||||
$@c{smile}Bref, prends soin de toi et profite bien de l’évènement !`
|
||||
},
|
||||
},
|
||||
"rival_2_female": {
|
||||
@ -5097,7 +5101,7 @@ export const PGFdialogue: DialogueTranslationEntries = {
|
||||
$@c{smile}Bon. Ça veut juste dire que je vais devoir encore plus m’entrainer !
|
||||
$@c{smile_wave}J’ai aussi ça en rab pour toi !\n@c{smile_wave_wink}Inutile de me remercier ~.
|
||||
$@c{angry_mopen}C’était le dernier, terminé les cadeaux après celui-là !
|
||||
$@c{smile_wave}Allez, tiens le coup !`
|
||||
$@c{smile_wave}Allez, tiens le coup et profite bien de l’évènement !`
|
||||
},
|
||||
"defeat": {
|
||||
1: "Je suppose que c’est parfois normal de perdre…"
|
||||
|
@ -2569,7 +2569,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}Wow… You cleaned me out.\nAre you actually a beginner?
|
||||
$@c{smile}Maybe it was a bit of luck but…\nWho knows you might just be able to go all the way.
|
||||
$By the way, the professor asked me to give you these items. They look pretty cool.
|
||||
$@c{serious_smile_fists}Good luck out there!`
|
||||
$@c{serious_smile_fists}Good luck out there!
|
||||
$@c{smile}Oh- and I hope you enjoy the event!`
|
||||
},
|
||||
},
|
||||
"rival_female": {
|
||||
@ -2583,7 +2584,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}You just started and you're already this strong?!@d{96}\n@c{angry}You totally cheated, didn't you?
|
||||
$@c{smile_wave_wink}Just kidding!@d{64} @c{smile_eclosed}I lost fair and square… I have a feeling you're going to do really well out there.
|
||||
$@c{smile}By the way, the professor wanted me to give you some items. Hopefully they're helpful!
|
||||
$@c{smile_wave}Do your best like always! I believe in you!`
|
||||
$@c{smile_wave}Do your best like always! I believe in you!
|
||||
$@c{smile}Oh- and I hope you enjoy the event!`
|
||||
},
|
||||
},
|
||||
"rival_2": {
|
||||
@ -2599,7 +2601,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
$@c{smile}That's alright, though. I figured this might happen.\n@c{serious_mopen_fists}It just means I need to try harder for next time!\n
|
||||
$@c{smile}Oh, not that you really need the help, but I had an extra one of these lying around and figured you might want it.\n
|
||||
$@c{serious_smile_fists}Don't expect another one after this, though!\nI can't keep giving my opponent an advantage after all.
|
||||
$@c{smile}Anyway, take care!`
|
||||
$@c{smile}Anyway, take care, and enjoy the event!`
|
||||
},
|
||||
},
|
||||
"rival_2_female": {
|
||||
@ -2615,7 +2617,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
$@c{smile}Aw well. That just means I'll have to train even harder for next time!
|
||||
$@c{smile_wave}I also got you another one of these!\n@c{smile_wave_wink}No need to thank me~.
|
||||
$@c{angry_mopen}This is the last one, though! You won't be getting anymore freebies from me after this!
|
||||
$@c{smile_wave}Keep at it!`
|
||||
$@c{smile_wave}Keep at it, and enjoy the event!`
|
||||
},
|
||||
"defeat": {
|
||||
1: "It's OK to lose sometimes…"
|
||||
|
@ -2573,7 +2573,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}Wow… You cleaned me out.\nAre you actually a beginner?
|
||||
$@c{smile}Maybe it was a bit of luck but…\nWho knows you might just be able to go all the way.
|
||||
$By the way, the professor asked me to give you these items. They look pretty cool.
|
||||
$@c{serious_smile_fists}Good luck out there!`
|
||||
$@c{serious_smile_fists}Good luck out there!
|
||||
$@c{smile}Oh- and I hope you enjoy the event!`
|
||||
},
|
||||
},
|
||||
"rival_female": {
|
||||
@ -2587,7 +2588,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}You just started and you're already this strong?!@d{96}\n@c{angry}You totally cheated, didn't you?
|
||||
$@c{smile_wave_wink}Just kidding!@d{64} @c{smile_eclosed}I lost fair and square… I have a feeling you're going to do really well out there.
|
||||
$@c{smile}By the way, the professor wanted me to give you some items. Hopefully they're helpful!
|
||||
$@c{smile_wave}Do your best like always! I believe in you!`
|
||||
$@c{smile_wave}Do your best like always! I believe in you!
|
||||
$@c{smile}Oh- and I hope you enjoy the event!`
|
||||
},
|
||||
},
|
||||
"rival_2": {
|
||||
@ -2603,7 +2605,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
$@c{smile}That's alright, though. I figured this might happen.\n@c{serious_mopen_fists}It just means I need to try harder for next time!\n
|
||||
$@c{smile}Oh, not that you really need the help, but I had an extra one of these lying around and figured you might want it.\n
|
||||
$@c{serious_smile_fists}Don't expect another one after this, though!\nI can't keep giving my opponent an advantage after all.
|
||||
$@c{smile}Anyway, take care!`
|
||||
$@c{smile}Anyway, take care, and enjoy the event!`
|
||||
},
|
||||
},
|
||||
"rival_2_female": {
|
||||
@ -2619,7 +2621,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
$@c{smile}Aw well. That just means I'll have to train even harder for next time!
|
||||
$@c{smile_wave}I also got you another one of these!\n@c{smile_wave_wink}No need to thank me~.
|
||||
$@c{angry_mopen}This is the last one, though! You won't be getting anymore freebies from me after this!
|
||||
$@c{smile_wave}Keep at it!`
|
||||
$@c{smile_wave}Keep at it, and enjoy the event!`
|
||||
},
|
||||
"defeat": {
|
||||
1: "It's OK to lose sometimes…"
|
||||
|
@ -2569,7 +2569,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}와… 정말 깔끔하게 당했네.\n초보자 맞아?
|
||||
$@c{smile}운이 따른 건지도 모르겠지만…\n그래도 정말 꿈을 이룰 지도.
|
||||
$그나저나, 박사님께서 이걸 전해달라고 하시더라.\n좋아 보이던데.
|
||||
$@c{serious_smile_fists}아무튼, 힘 내는거야!`
|
||||
$@c{serious_smile_fists}아무튼, 힘 내는거야!
|
||||
$@c{smile}아- 그리고 이벤트 즐겁게 보내!`
|
||||
},
|
||||
},
|
||||
"rival_female": {
|
||||
@ -2583,7 +2584,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}왜 벌써 이렇게 센 건데?!@d{96}\n@c{angry}아니면 뭔가 속임수, 그런 거?
|
||||
$@c{smile_wave_wink}농담, 농담!@d{64} @c{smile_eclosed}내가 진 거 맞아…\n너 정말 앞으로도 잘 하겠는데.
|
||||
$@c{smile}아 그래, 박사님께서 전해달라던 물건.\n도움이 되면 좋겠어!
|
||||
$@c{smile_wave}항상 최선을 다 하라구! 믿고 있을게!`
|
||||
$@c{smile_wave}항상 최선을 다 하라구! 믿고 있을게!
|
||||
$@c{smile}아- 그리고 이벤트 즐겁게 보내!`
|
||||
},
|
||||
},
|
||||
"rival_2": {
|
||||
@ -2599,7 +2601,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
$@c{smile}그래, 또 지고 말았네.\n@c{serious_mopen_fists}좀 더 열심히 훈련을 해야겠어!\n
|
||||
$@c{smile}너한테 도움이 필요할 것 같지는 않지만, 이거.\n남는 게 있어서 말이야.
|
||||
$@c{serious_smile_fists}물론 이번이 마지막이야, 알겠지?\n공평하게 하지 않으면 그게 내 핑계거리가 되고 말거야.
|
||||
$@c{smile}이제 갈게. 앞으로도 조심하고!`
|
||||
$@c{smile}이제 갈게. 앞으로도 조심하고, 이벤트도 즐겁게 보내!`
|
||||
},
|
||||
},
|
||||
"rival_2_female": {
|
||||
@ -2615,7 +2617,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
$@c{smile}으, 그래. 더 열심히 훈련하면 되겠지!
|
||||
$@c{smile_wave}이것도 하나 더 챙겨왔으니 받아!\n@c{smile_wave_wink}감사 인사는 됐다구~.
|
||||
$@c{angry_mopen}하지만, 마지막이야!\n또 이렇게 공짜로 나눠주진 않을 테니까!
|
||||
$@c{smile_wave}그럼!`
|
||||
$@c{smile_wave}그럼! 이벤트 잘 즐기고!`
|
||||
},
|
||||
"defeat": {
|
||||
1: "가끔은 지는 것도 괜찮아…"
|
||||
|
@ -2541,7 +2541,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}Caramba… Você me limpou.\nVocê é mesmo um novato?
|
||||
$@c{smile}Talvez tenha sido um pouco de sorte, mas…\nQuem sabe você consiga chegar até o fim.
|
||||
$Aliás, o professor me pediu para te dar esses itens. Eles parecem bem legais.
|
||||
$@c{serious_smile_fists}Boa sorte lá fora!`
|
||||
$@c{serious_smile_fists}Boa sorte lá fora!
|
||||
$@c{smile}Ah- e eu espero que você aproveite o evento!`
|
||||
},
|
||||
},
|
||||
"rival_female": {
|
||||
@ -2555,7 +2556,8 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}Você acabou de começar e já está tão forte?!@d{96}\n@c{angry}Você trapaceou, não foi?
|
||||
$@c{smile_wave_wink}Brincadeirinha!@d{64} @c{smile_eclosed}Eu perdi de forma justa… Tenho a sensação de que você vai se sair muito bem lá fora.
|
||||
$@c{smile}Aliás, o professor pediu para eu te dar alguns itens. Espero que sejam úteis!
|
||||
$@c{smile_wave}Dê o seu melhor, como sempre! Eu acredito em você!`
|
||||
$@c{smile_wave}Dê o seu melhor, como sempre! Eu acredito em você!
|
||||
$@c{smile}Ah- e eu espero que você aproveite o evento!`
|
||||
},
|
||||
},
|
||||
"rival_2": {
|
||||
@ -2571,7 +2573,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
$@c{smile}Tudo bem, no entanto. Eu imaginei que isso poderia acontecer.\n@c{serious_mopen_fists}Isso só significa que preciso me esforçar mais para a próxima vez!\n
|
||||
$@c{smile}Ah, não que você precise realmente de ajuda, mas eu tinha um extra desses itens e pensei que você poderia querer.
|
||||
$@c{serious_smile_fists}Não espere outro depois deste!\nNão posso continuar dando vantagem ao meu oponente.
|
||||
$@c{smile}Enfim, cuide-se!`
|
||||
$@c{smile}Enfim, cuide-se, e aproveite o evento!`
|
||||
},
|
||||
},
|
||||
"rival_2_female": {
|
||||
@ -2585,9 +2587,9 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
"victory": {
|
||||
1: `@c{neutral}Eu… não era para eu perder dessa vez…
|
||||
$@c{smile}Ah bem. Isso só significa que vou ter que treinar ainda mais para a próxima vez!
|
||||
$@c{smile_wave}Também consegui mais um desses para você!\n@c{smile_wave_wink}Não precisa me agradecer~.
|
||||
$@c{angry_mopen}Este é o último, hein! Você não vai ganhar mais nenhum presente de mim depois desse!
|
||||
$@c{smile_wave}Continue assim!`
|
||||
$@c{smile_wave}Também consegui mais dois desses para você!\n@c{smile_wave_wink}Não precisa me agradecer~.
|
||||
$@c{angry_mopen}Estes são os últimos, hein! Você não vai ganhar mais nenhum presente de mim depois desse!
|
||||
$@c{smile_wave}Continue assim, e aproveite o evento!`
|
||||
},
|
||||
"defeat": {
|
||||
1: "Está tudo bem perder às vezes…"
|
||||
@ -3819,7 +3821,8 @@ export const PGFdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}Caramba… Você me limpou.\nVocê é mesmo uma novata?
|
||||
$@c{smile}Talvez tenha sido um pouco de sorte, mas…\nQuem sabe você consiga chegar até o fim.
|
||||
$Aliás, o professor me pediu para te dar esses itens. Eles parecem bem legais.
|
||||
$@c{serious_smile_fists}Boa sorte lá fora!`
|
||||
$@c{serious_smile_fists}Boa sorte lá fora!
|
||||
$@c{smile}Ah- e eu espero que você aproveite o evento!`
|
||||
},
|
||||
},
|
||||
"rival_female": {
|
||||
@ -3833,7 +3836,8 @@ export const PGFdialogue: DialogueTranslationEntries = {
|
||||
1: `@c{shock}Você acabou de começar e já está tão forte?!@d{96}\n@c{angry}Você trapaceou, não foi?
|
||||
$@c{smile_wave_wink}Brincadeirinha!@d{64} @c{smile_eclosed}Eu perdi de forma justa… Tenho a sensação de que você vai se sair muito bem lá fora.
|
||||
$@c{smile}Aliás, o professor pediu para eu te dar alguns itens. Espero que sejam úteis!
|
||||
$@c{smile_wave}Dê o seu melhor, como sempre! Eu acredito em você!`
|
||||
$@c{smile_wave}Dê o seu melhor, como sempre! Eu acredito em você!
|
||||
$@c{smile}Ah- e eu espero que você aproveite o evento!`
|
||||
},
|
||||
},
|
||||
"rival_2": {
|
||||
@ -3849,7 +3853,7 @@ export const PGFdialogue: DialogueTranslationEntries = {
|
||||
$@c{smile}Tudo bem, no entanto. Eu imaginei que isso poderia acontecer.\n@c{serious_mopen_fists}Isso só significa que preciso me esforçar mais para a próxima vez!\n
|
||||
$@c{smile}Ah, não que você precise realmente de ajuda, mas eu tinha um extra desses itens e pensei que você poderia querer.
|
||||
$@c{serious_smile_fists}Não espere outro depois deste!\nNão posso continuar dando vantagem ao meu oponente.
|
||||
$@c{smile}Enfim, cuide-se!`
|
||||
$@c{smile}Enfim, cuide-se, e aproveite o evento!`
|
||||
},
|
||||
},
|
||||
"rival_2_female": {
|
||||
@ -3863,9 +3867,9 @@ export const PGFdialogue: DialogueTranslationEntries = {
|
||||
"victory": {
|
||||
1: `@c{neutral}Eu… não era para eu perder dessa vez…
|
||||
$@c{smile}Ah bem. Isso só significa que vou ter que treinar ainda mais para a próxima vez!
|
||||
$@c{smile_wave}Também consegui mais um desses para você!\n@c{smile_wave_wink}Não precisa me agradecer~.
|
||||
$@c{angry_mopen}Este é o último, hein! Você não vai ganhar mais nenhum presente de mim depois desse!
|
||||
$@c{smile_wave}Continue assim!`
|
||||
$@c{smile_wave}Também consegui mais dois desses para você!\n@c{smile_wave_wink}Não precisa me agradecer~.
|
||||
$@c{angry_mopen}Estes são os últimos, hein! Você não vai ganhar mais nenhum presente de mim depois desse!
|
||||
$@c{smile_wave}Continue assim, e aproveite o evento!`
|
||||
},
|
||||
"defeat": {
|
||||
1: "Está tudo bem perder às vezes…"
|
||||
|
@ -2463,7 +2463,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: "@c{smile}嘿,我在找你呢!我知道你急着上路,\n但至少说个再见吧…$@c{smile_eclosed}所以你终于要开始追逐梦想了?\n我几乎不敢相信。$@c{serious_smile_fists}来都来了,来一场对战怎么样?\n毕竟,我想看看你是不是准备周全了。$@c{serious_mopen_fists}不要手下留情,我想让你全力以赴!",
|
||||
},
|
||||
"victory": {
|
||||
1: "@c{shock}哇…你彻底击败了我。\n你是真初学者吗?$@c{smile}也许是靠点运气,但是…\n谁知道,你可能真的能一路走下去。$顺便说一下,博士让我给你这些东西。它们看起来可牛了。$@c{serious_smile_fists}祝你好运!",
|
||||
1: "@c{shock}哇…你彻底击败了我。\n你是真初学者吗?$@c{smile}也许是靠点运气,但是…\n谁知道,你可能真的能一路走下去。$顺便说一下,博士让我给你这些东西。它们看起来可牛了。$@c{serious_smile_fists}祝你好运!$@c{smile}哦!我希望你能喜欢这次的活动! ",
|
||||
},
|
||||
},
|
||||
"rival_female": {
|
||||
@ -2471,7 +2471,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: "@c{smile_wave}你在这儿啊!我到处找你呢!$@c{angry_mopen}你忘了和你最好的朋友说再见了吗?$@c{smile_ehalf}你要去追逐梦想了,对吧?\n从今天开始,是不是…$@c{smile}不管怎样,忘了我的事就原谅你吧,\n但有个条件。@c{smile_wave_wink}你必须和我对战!$@c{angry_mopen}全力以赴!\n你也不想让你的冒险在开始之前就结束了,对吧?",
|
||||
},
|
||||
"victory": {
|
||||
1: "@c{shock}你刚开始就已经这么强了?!@d{96}$@c{angry}你是不是开了?$@c{smile_wave_wink}只是开个玩笑啦!@d{64} @c{smile_eclosed}我输地心服口服了…\n我感觉你出去挺有天赋的。$@c{smile}顺便说一下,博士想让我给你一些东西。\n希望它们能帮上忙!$@c{smile_wave}像往常一样尽力而为!\n我相信你!",
|
||||
1: "@c{shock}你刚开始就已经这么强了?!@d{96}$@c{angry}你是不是开了?$@c{smile_wave_wink}只是开个玩笑啦!@d{64} @c{smile_eclosed}我输地心服口服了…\n我感觉你出去挺有天赋的。$@c{smile}顺便说一下,博士想让我给你一些东西。\n希望它们能帮上忙!$@c{smile_wave}像往常一样尽力而为!\n我相信你!$@c{smile}哦!我希望你能喜欢这次的活动! ",
|
||||
},
|
||||
},
|
||||
"rival_2": {
|
||||
@ -2479,7 +2479,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: "@c{smile}嘿,你也在这里吗?$@c{smile_eclosed}一路过关斩将,是吧?$@c{serious_mopen_fists}我知道看起来好像我尾随着你来到这里,\n怎么可能啦。$@c{serious_smile_fists}说真的,自从你在老家打败我后,\n我就一直很渴望再比一场。$我自己也进行了很多训练,\n所以这次我肯定会好好打一场。$@c{serious_mopen_fists}不要手下留情,就像以前一样!$让我们开始吧!",
|
||||
},
|
||||
"victory": {
|
||||
1: "@c{neutral_eclosed}哦。我过于自信了。$@c{smile}不过没关系。我猜到可能会这样。$@c{serious_mopen_fists}这只意味着我下次需要更努力!$$@c{smile}呃,不是特意帮你,我正好有多余的这个,\n我觉得你可能想要。$$@c{serious_smile_fists}不过这次之后别指望再有了!$我不能一直给我的对手优势。$@c{smile}反正,保重!",
|
||||
1: "@c{neutral_eclosed}哦。我过于自信了。$@c{smile}不过没关系。我猜到可能会这样。$@c{serious_mopen_fists}这只意味着我下次需要更努力!$$@c{smile}呃,不是特意帮你,我正好有多余的这个,\n我觉得你可能想要。$$@c{serious_smile_fists}不过这次之后别指望再有了!$我不能一直给我的对手优势。$@c{smile}反正,保重,要享受活动哦!",
|
||||
},
|
||||
},
|
||||
"rival_2_female": {
|
||||
@ -2487,7 +2487,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: "@c{smile_wave}哦,真巧,在这里遇见你。\n看来你还没输过嘛。@c{angry_mopen}哈……好家伙!$@c{angry_mopen}我知道你在想什么,\n不,我才不会跟踪你什么呢。 @c{smile_eclosed}我只是碰巧在附近。$@c{smile_ehalf}我为你感到高兴,但我只想让你知道\n有时输了是可以接受的。$@c{smile}我们从错误中学到的东西\n往往比我们一直成功时学到的还要多。$@c{angry_mopen}无论如何,我为了我们的复赛已经努力训练了\n所以你最好全力以赴!",
|
||||
},
|
||||
"victory": {
|
||||
1: "@c{neutral}我……没打算会输来着……$@c{smile}嗷……好吧。看来我要再更加努力训练了!$@c{smile_wave}我还给你带了个这个$@c{smile_wave_wink}不用谢我哦~.$@c{angry_mopen}不过,这是最后一个啦!\n你可别想再从我这赚小便宜了~$@c{smile_wave}要保重哦!",
|
||||
1: "@c{neutral}我……没打算会输来着……$@c{smile}嗷……好吧。看来我要再更加努力训练了!$@c{smile_wave}我还给你带了个这个$@c{smile_wave_wink}不用谢我哦~.$@c{angry_mopen}不过,这是最后一个啦!\n你可别想再从我这赚小便宜了~$@c{smile_wave}要保重哦,要享受活动哦!",
|
||||
},
|
||||
"defeat": {
|
||||
1: "输了有时候也不要紧的…",
|
||||
|
@ -2463,7 +2463,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: "@c{smile}嘿,我在找你呢!我知道你急著上路,\n但至少說個再見吧…$@c{smile_eclosed}所以你終於要開始追逐夢想了?\n我幾乎不敢相信。$@c{serious_smile_fists}來都來了,來一場對戰怎麼樣?\n畢竟,我想看看你是不是準備周全了。$@c{serious_mopen_fists}不要手下留情,我想讓你全力以赴!",
|
||||
},
|
||||
"victory": {
|
||||
1: "@c{shock}哇…你徹底擊敗了我。\n你是真初學者嗎?$@c{smile}也許是靠點運氣,但是…\n誰知道,你可能真的能一路走下去。$順便說一下,博士讓我給你這些東西。它們看起來可牛了。$@c{serious_smile_fists}祝你好运!",
|
||||
1: "@c{shock}哇…你徹底擊敗了我。\n你是真初學者嗎?$@c{smile}也許是靠點運氣,但是…\n誰知道,你可能真的能一路走下去。$順便說一下,博士讓我給你這些東西。它們看起來可牛了。$@c{serious_smile_fists}祝你好运!$@c{smile}哦!我希望你能喜歡這次的活動!",
|
||||
},
|
||||
},
|
||||
"rival_female": {
|
||||
@ -2471,7 +2471,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: "@c{smile_wave}你在這兒啊!我到處找你呢!$@c{angry_mopen}你忘了和你最好的朋友說再見了嗎?$@c{smile_ehalf}你要去追逐夢想了,對吧?\n從今天開始,是不是…$@c{smile}不管怎樣,忘了我的事就原諒你吧,\n但有個條件。@c{smile_wave_wink}你必須和我對戰!$@c{angry_mopen}全力以赴!\n你也不想讓你的冒險在開始之前就結束了,對吧?",
|
||||
},
|
||||
"victory": {
|
||||
1: "@c{shock}你剛開始就已經這麼強了?!@d{96}$@c{angry}你是不是開了?$@c{smile_wave_wink}只是開個玩笑啦!@d{64} @c{smile_eclosed}我輸地心服口服了…\n我感覺你出去挺有天賦的。$@c{smile}順便說一下,博士想讓我給你一些東西。\n希望它們能幫上忙!$@c{smile_wave}像往常一樣盡力而為!\n我相信你!",
|
||||
1: "@c{shock}你剛開始就已經這麼強了?!@d{96}$@c{angry}你是不是開了?$@c{smile_wave_wink}只是開個玩笑啦!@d{64} @c{smile_eclosed}我輸地心服口服了…\n我感覺你出去挺有天賦的。$@c{smile}順便說一下,博士想讓我給你一些東西。\n希望它們能幫上忙!$@c{smile_wave}像往常一樣盡力而為!\n我相信你!$@c{smile}哦!我希望你能喜歡這次的活動!",
|
||||
},
|
||||
},
|
||||
"rival_2": {
|
||||
@ -2479,7 +2479,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: "@c{smile}嘿,你也在這裡嗎?$@c{smile_eclosed}一路過關斬將,是吧?$@c{serious_mopen_fists}我知道看起來好像我尾隨著你來到這裡,\n怎麼可能啦。$@c{serious_smile_fists}說真的,自從你在老家打敗我後,\n我就一直很渴望再比一場。$我自己也進行了很多訓練,\n所以這次我肯定會好好打一場。$@c{serious_mopen_fists}不要手下留情,就像以前一樣!$讓我們開始吧!",
|
||||
},
|
||||
"victory": {
|
||||
1: "@c{neutral_eclosed}哦。我過於自信了。$@c{smile}不過沒關係。我猜到可能會這樣。$@c{serious_mopen_fists}這只意味著我下次需要更努力!$$@c{smile}呃,不是特意幫你,我正好有多餘的這個,\n我覺得你可能想要。$$@c{serious_smile_fists}不過這次之後別指望再有了!$我不能一直給我的對手優勢。$@c{smile}反正,保重!",
|
||||
1: "@c{neutral_eclosed}哦。我過於自信了。$@c{smile}不過沒關係。我猜到可能會這樣。$@c{serious_mopen_fists}這只意味著我下次需要更努力!$$@c{smile}呃,不是特意幫你,我正好有多餘的這個,\n我覺得你可能想要。$$@c{serious_smile_fists}不過這次之後別指望再有了!$我不能一直給我的對手優勢。$@c{smile}反正,保重, 要享受活動哦!",
|
||||
},
|
||||
},
|
||||
"rival_2_female": {
|
||||
@ -2487,7 +2487,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
1: "@c{smile_wave}哦,真巧,在這裡遇見你。\n看來你還沒輸過嘛。@c{angry_mopen}哈……好傢伙!$@c{angry_mopen}我知道你在想什麼,\n不,我才不會跟蹤你什麼呢。 @c{smile_eclosed}我只是碰巧在附近。$@c{smile_ehalf}我為你感到高興,但我只想讓你知道\n有時輸了是可以接受的。$@c{smile}我們從錯誤中學到的東西\n往往比我們一直成功時學到的還要多。$@c{angry_mopen}無論如何,我為了我們的複賽已經努力訓練了\n所以你最好全力以赴!",
|
||||
},
|
||||
"victory": {
|
||||
1: "@c{neutral}我……沒打算會輸來著……$@c{smile}嗷……好吧。看來我要再更加努力訓練了!$@c{smile_wave}我還給你帶了個這個$@c{smile_wave_wink}不用謝我哦~.$@c{angry_mopen}不過,這是最後一個啦!\n 你可別想再從我這賺小便宜了~$@c{smile_wave}要保重哦!",
|
||||
1: "@c{neutral}我……沒打算會輸來著……$@c{smile}嗷……好吧。看來我要再更加努力訓練了!$@c{smile_wave}我還給你帶了個這個$@c{smile_wave_wink}不用謝我哦~.$@c{angry_mopen}不過,這是最後一個啦!\n 你可別想再從我這賺小便宜了~$@c{smile_wave}要保重哦,要享受活動哦!",
|
||||
},
|
||||
"defeat": {
|
||||
1: "輸了有時候也不要緊的…",
|
||||
|
@ -2209,7 +2209,7 @@ export function getDefaultModifierTypeForTier(tier: ModifierTier): ModifierType
|
||||
}
|
||||
|
||||
export class ModifierTypeOption {
|
||||
public type: ModifierType | null;
|
||||
public type: ModifierType;
|
||||
public upgradeCount: integer;
|
||||
public cost: integer;
|
||||
|
||||
|
@ -2338,7 +2338,7 @@ export abstract class HeldItemTransferModifier extends PokemonHeldItemModifier {
|
||||
* @see {@linkcode modifierTypes[MINI_BLACK_HOLE]}
|
||||
*/
|
||||
export class TurnHeldItemTransferModifier extends HeldItemTransferModifier {
|
||||
readonly isTransferrable: boolean = true;
|
||||
isTransferrable: boolean = true;
|
||||
constructor(type: ModifierType, pokemonId: integer, stackCount?: integer) {
|
||||
super(type, pokemonId, stackCount);
|
||||
}
|
||||
@ -2362,6 +2362,10 @@ export class TurnHeldItemTransferModifier extends HeldItemTransferModifier {
|
||||
getMaxHeldItemCount(pokemon: Pokemon): integer {
|
||||
return 1;
|
||||
}
|
||||
|
||||
setTransferrableFalse(): void {
|
||||
this.isTransferrable = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1635,7 +1635,7 @@ export class SwitchSummonPhase extends SummonPhase {
|
||||
})
|
||||
);
|
||||
this.scene.playSound("pb_rel");
|
||||
pokemon.hideInfo(); // this is also done by pokemon.leaveField(), but needs to go earlier for animation purposes
|
||||
pokemon.hideInfo();
|
||||
pokemon.tint(getPokeballTintColor(pokemon.pokeball), 1, 250, "Sine.easeIn");
|
||||
this.scene.tweens.add({
|
||||
targets: pokemon,
|
||||
@ -1643,9 +1643,7 @@ export class SwitchSummonPhase extends SummonPhase {
|
||||
ease: "Sine.easeIn",
|
||||
scale: 0.5,
|
||||
onComplete: () => {
|
||||
// 250ms delay on leaveField is necessary to avoid calling hideInfo() twice
|
||||
// and double-animating the stats panel slideout
|
||||
this.scene.time.delayedCall(250, () => pokemon.leaveField(!this.batonPass));
|
||||
pokemon.leaveField(!this.batonPass, false);
|
||||
this.scene.time.delayedCall(750, () => this.switchAndSummon());
|
||||
}
|
||||
});
|
||||
@ -2036,7 +2034,8 @@ export class CommandPhase extends FieldPhase {
|
||||
}
|
||||
break;
|
||||
case Command.BALL:
|
||||
if (!this.scene.gameMode.isFreshStartChallenge() && 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))) {
|
||||
const notInDex = (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.gameMode.isFreshStartChallenge() || notInDex )) {
|
||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||
this.scene.ui.setMode(Mode.MESSAGE);
|
||||
this.scene.ui.showText(i18next.t("battle:noPokeballForce"), null, () => {
|
||||
@ -5580,7 +5579,7 @@ export class SelectModifierPhase extends BattlePhase {
|
||||
} else if (lockRarities) {
|
||||
const tierValues = [50, 125, 300, 750, 2000];
|
||||
for (const opt of typeOptions) {
|
||||
baseValue += opt.type?.tier ? tierValues[opt.type.tier] : 0;
|
||||
baseValue += tierValues[opt.type.tier ?? 0];
|
||||
}
|
||||
} else {
|
||||
baseValue = 250;
|
||||
|
@ -1709,7 +1709,7 @@ export class GameData {
|
||||
}
|
||||
|
||||
getFormAttr(formIndex: integer): bigint {
|
||||
return BigInt(1 << (7 + formIndex));
|
||||
return BigInt(1) << BigInt(7 + formIndex);
|
||||
}
|
||||
|
||||
consolidateDexData(dexData: DexData): void {
|
||||
|
@ -797,10 +797,10 @@ export function setSetting(scene: BattleScene, setting: string, value: integer):
|
||||
label: "日本語",
|
||||
handler: () => changeLocaleHandler("ja")
|
||||
},
|
||||
{
|
||||
label: "Català",
|
||||
handler: () => changeLocaleHandler("ca-ES")
|
||||
},
|
||||
// {
|
||||
// label: "Català",
|
||||
// handler: () => changeLocaleHandler("ca-ES")
|
||||
// },
|
||||
{
|
||||
label: i18next.t("settings:back"),
|
||||
handler: () => cancelHandler()
|
||||
|
@ -2,12 +2,12 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
||||
import GameManager from "#test/utils/gameManager";
|
||||
import { getMovePosition } from "#test/utils/gameManagerUtils";
|
||||
import { Moves } from "#enums/moves";
|
||||
import { Abilities } from "#enums/abilities";
|
||||
import { Species } from "#enums/species";
|
||||
import { StatusEffect } from "#app/data/status-effect.js";
|
||||
import { MoveEffectPhase, MoveEndPhase, TurnEndPhase, TurnInitPhase } from "#app/phases.js";
|
||||
import { CommandPhase, MoveEffectPhase, MoveEndPhase, TurnEndPhase, TurnInitPhase } from "#app/phases.js";
|
||||
import { BattleStat } from "#app/data/battle-stat.js";
|
||||
import { SPLASH_ONLY } from "../utils/testUtils";
|
||||
import { Mode } from "#app/ui/ui.js";
|
||||
|
||||
const TIMEOUT = 20 * 1000;
|
||||
|
||||
@ -38,7 +38,7 @@ describe("Abilities - Disguise", () => {
|
||||
game.override.moveset([Moves.SHADOW_SNEAK, Moves.VACUUM_WAVE, Moves.TOXIC_THREAD, Moves.SPLASH]);
|
||||
}, TIMEOUT);
|
||||
|
||||
it("takes no damage from attacking move and transforms to Busted form, taking 1/8 max HP damage from the disguise breaking", async () => {
|
||||
it("takes no damage from attacking move and transforms to Busted form, takes 1/8 max HP damage from the disguise breaking", async () => {
|
||||
await game.startBattle();
|
||||
|
||||
const mimikyu = game.scene.getEnemyPokemon()!;
|
||||
@ -134,17 +134,30 @@ describe("Abilities - Disguise", () => {
|
||||
expect(mimikyu.formIndex).toBe(bustedForm);
|
||||
}, TIMEOUT);
|
||||
|
||||
it("reverts to Disguised on arena reset", async () => {
|
||||
game.override.startingWave(4);
|
||||
it("persists form change when wave changes with no arena reset", async () => {
|
||||
game.override.starterSpecies(0);
|
||||
game.override.starterForms({
|
||||
[Species.MIMIKYU]: bustedForm
|
||||
});
|
||||
await game.startBattle([Species.FURRET, Species.MIMIKYU]);
|
||||
|
||||
const mimikyu = game.scene.getParty()[1]!;
|
||||
expect(mimikyu.formIndex).toBe(bustedForm);
|
||||
|
||||
game.doAttack(getMovePosition(game.scene, 0, Moves.SPLASH));
|
||||
await game.doKillOpponents();
|
||||
await game.toNextWave();
|
||||
|
||||
expect(mimikyu.formIndex).toBe(bustedForm);
|
||||
}, TIMEOUT);
|
||||
|
||||
it("reverts to Disguised form on arena reset", async () => {
|
||||
game.override.startingWave(4);
|
||||
game.override.starterSpecies(Species.MIMIKYU);
|
||||
game.override.starterForms({
|
||||
[Species.MIMIKYU]: bustedForm
|
||||
});
|
||||
|
||||
game.override.enemySpecies(Species.MAGIKARP);
|
||||
game.override.enemyAbility(Abilities.BALL_FETCH);
|
||||
|
||||
await game.startBattle();
|
||||
|
||||
const mimikyu = game.scene.getPlayerPokemon()!;
|
||||
@ -153,10 +166,41 @@ describe("Abilities - Disguise", () => {
|
||||
|
||||
game.doAttack(getMovePosition(game.scene, 0, Moves.SPLASH));
|
||||
await game.doKillOpponents();
|
||||
await game.phaseInterceptor.to(TurnEndPhase);
|
||||
game.doSelectModifier();
|
||||
await game.phaseInterceptor.to(TurnInitPhase);
|
||||
await game.toNextWave();
|
||||
|
||||
expect(mimikyu.formIndex).toBe(disguisedForm);
|
||||
}, TIMEOUT);
|
||||
|
||||
it("reverts to Disguised form on biome change when fainted", async () => {
|
||||
game.override.startingWave(10);
|
||||
game.override.starterSpecies(0);
|
||||
game.override.starterForms({
|
||||
[Species.MIMIKYU]: bustedForm
|
||||
});
|
||||
|
||||
await game.startBattle([Species.MIMIKYU, Species.FURRET]);
|
||||
|
||||
const mimikyu1 = game.scene.getPlayerPokemon()!;
|
||||
|
||||
expect(mimikyu1.formIndex).toBe(bustedForm);
|
||||
|
||||
game.doAttack(getMovePosition(game.scene, 0, Moves.SPLASH));
|
||||
await game.killPokemon(mimikyu1);
|
||||
game.doSelectPartyPokemon(1);
|
||||
await game.toNextTurn();
|
||||
game.doAttack(getMovePosition(game.scene, 0, Moves.SPLASH));
|
||||
await game.doKillOpponents();
|
||||
game.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => { // TODO: Make tests run in set mode instead of switch mode
|
||||
game.setMode(Mode.MESSAGE);
|
||||
game.endPhase();
|
||||
}, () => game.isCurrentPhase(CommandPhase) || game.isCurrentPhase(TurnInitPhase));
|
||||
|
||||
game.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => {
|
||||
game.setMode(Mode.MESSAGE);
|
||||
game.endPhase();
|
||||
}, () => game.isCurrentPhase(CommandPhase) || game.isCurrentPhase(TurnInitPhase));
|
||||
await game.phaseInterceptor.to("PartyHealPhase");
|
||||
|
||||
expect(mimikyu1.formIndex).toBe(disguisedForm);
|
||||
}, TIMEOUT);
|
||||
});
|
||||
|
@ -84,6 +84,21 @@ describe("Abilities - Gulp Missile", () => {
|
||||
expect(cramorant.formIndex).toBe(GORGING_FORM);
|
||||
});
|
||||
|
||||
it("changes to base form when switched out after Surf or Dive is used", async () => {
|
||||
await game.startBattle([Species.CRAMORANT, Species.MAGIKARP]);
|
||||
const cramorant = game.scene.getPlayerPokemon()!;
|
||||
|
||||
game.doAttack(getMovePosition(game.scene, 0, Moves.SURF));
|
||||
await game.toNextTurn();
|
||||
|
||||
game.doSwitchPokemon(1);
|
||||
await game.toNextTurn(); // form change is delayed until after end of turn
|
||||
|
||||
expect(cramorant.formIndex).toBe(NORMAL_FORM);
|
||||
expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA)).toBeUndefined();
|
||||
expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_PIKACHU)).toBeUndefined();
|
||||
});
|
||||
|
||||
it("changes form during Dive's charge turn", async () => {
|
||||
await game.startBattle([Species.CRAMORANT]);
|
||||
const cramorant = game.scene.getPlayerPokemon()!;
|
||||
|
47
src/test/items/lock_capsule.test.ts
Normal file
@ -0,0 +1,47 @@
|
||||
import GameManager from "#test/utils/gameManager";
|
||||
import Phase from "phaser";
|
||||
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
||||
import { Abilities } from "#app/enums/abilities.js";
|
||||
import { Moves } from "#app/enums/moves.js";
|
||||
import { getMovePosition } from "../utils/gameManagerUtils";
|
||||
import { SelectModifierPhase } from "#app/phases.js";
|
||||
import { ModifierTypeOption, modifierTypes } from "#app/modifier/modifier-type.js";
|
||||
|
||||
describe("Items - Lock Capsule", () => {
|
||||
let phaserGame: Phaser.Game;
|
||||
let game: GameManager;
|
||||
|
||||
beforeAll(() => {
|
||||
phaserGame = new Phase.Game({
|
||||
type: Phaser.HEADLESS,
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
game.phaseInterceptor.restoreOg();
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
game = new GameManager(phaserGame);
|
||||
|
||||
game.override
|
||||
.battleType("single")
|
||||
.startingLevel(200)
|
||||
.moveset([Moves.SURF])
|
||||
.enemyAbility(Abilities.BALL_FETCH)
|
||||
.startingModifier([{name: "LOCK_CAPSULE"}]);
|
||||
});
|
||||
|
||||
it("doesn't set the cost of common tier items to 0", async() => {
|
||||
await game.startBattle();
|
||||
|
||||
game.doAttack(getMovePosition(game.scene, 0, Moves.SURF));
|
||||
await game.phaseInterceptor.to(SelectModifierPhase, false);
|
||||
|
||||
const rewards = game.scene.getCurrentPhase() as SelectModifierPhase;
|
||||
const potion = new ModifierTypeOption(modifierTypes.POTION(), 0, 40); // Common tier item
|
||||
const rerollCost = rewards.getRerollCost([potion, potion, potion], true);
|
||||
|
||||
expect(rerollCost).toBe(150);
|
||||
}, 20000);
|
||||
});
|
@ -84,6 +84,17 @@ export class OverridesHelper extends GameManagerHelper {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Override the player's starting modifiers
|
||||
* @param modifiers the modifiers to set
|
||||
* @returns this
|
||||
*/
|
||||
startingModifier(modifiers: ModifierOverride[]): this {
|
||||
vi.spyOn(Overrides, "STARTING_MODIFIER_OVERRIDE", "get").mockReturnValue(modifiers);
|
||||
this.log(`Player starting modifiers set to: ${modifiers}`);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Override the player (pokemon) {@linkcode Abilities | ability}
|
||||
* @param ability the (pokemon) {@linkcode Abilities | ability} to set
|
||||
|
@ -15,6 +15,7 @@ import {
|
||||
MovePhase,
|
||||
NewBattlePhase,
|
||||
NextEncounterPhase,
|
||||
PartyHealPhase,
|
||||
PostSummonPhase,
|
||||
SelectGenderPhase,
|
||||
SelectModifierPhase,
|
||||
@ -93,6 +94,7 @@ export default class PhaseInterceptor {
|
||||
[QuietFormChangePhase, this.startPhase],
|
||||
[SwitchPhase, this.startPhase],
|
||||
[SwitchSummonPhase, this.startPhase],
|
||||
[PartyHealPhase, this.startPhase],
|
||||
[EvolutionPhase, this.startPhase],
|
||||
[EndEvolutionPhase, this.startPhase],
|
||||
];
|
||||
|
@ -23,6 +23,14 @@ const timedEvents: TimedEvent[] = [
|
||||
endDate: new Date(Date.UTC(2024, 5, 23, 0)),
|
||||
bannerFilename: "pride-update"
|
||||
},
|
||||
{
|
||||
name: "August Variant Update",
|
||||
eventType: EventType.SHINY,
|
||||
shinyMultiplier: 2,
|
||||
startDate: new Date(Date.UTC(2024, 7, 16, 0)),
|
||||
endDate: new Date(Date.UTC(2024, 7, 22, 0)),
|
||||
bannerFilename: "august-variant-update"
|
||||
}
|
||||
];
|
||||
|
||||
export class TimedEventManager {
|
||||
@ -77,22 +85,23 @@ export class TimedEventDisplay extends Phaser.GameObjects.Container {
|
||||
}
|
||||
|
||||
setup() {
|
||||
console.log(this.event?.bannerFilename);
|
||||
this.banner = new Phaser.GameObjects.Image(this.scene, 29, 64, this.event!.bannerFilename!); // TODO: are the bangs correct here?
|
||||
this.banner.setName("img-event-banner");
|
||||
this.banner.setOrigin(0, 0);
|
||||
this.banner.setScale(0.07);
|
||||
this.bannerShadow = new Phaser.GameObjects.Rectangle(
|
||||
this.scene,
|
||||
this.banner.x - 2,
|
||||
this.banner.y + 2,
|
||||
this.banner.width,
|
||||
this.banner.height,
|
||||
0x484848
|
||||
);
|
||||
this.bannerShadow.setName("rect-event-banner-shadow");
|
||||
this.bannerShadow.setScale(0.07);
|
||||
this.bannerShadow.setAlpha(0.5);
|
||||
this.bannerShadow.setOrigin(0,0);
|
||||
this.banner.setOrigin(0.08, -0.35);
|
||||
this.banner.setScale(0.18);
|
||||
// this.bannerShadow = new Phaser.GameObjects.Rectangle(
|
||||
// this.scene,
|
||||
// this.banner.x - 2,
|
||||
// this.banner.y + 2,
|
||||
// this.banner.width,
|
||||
// this.banner.height,
|
||||
// 0x484848
|
||||
// );
|
||||
// this.bannerShadow.setName("rect-event-banner-shadow");
|
||||
// this.bannerShadow.setScale(0.07);
|
||||
// this.bannerShadow.setAlpha(0.5);
|
||||
// this.bannerShadow.setOrigin(0,0);
|
||||
this.eventTimerText = addTextObject(
|
||||
this.scene,
|
||||
this.banner.x + 8,
|
||||
@ -104,7 +113,10 @@ export class TimedEventDisplay extends Phaser.GameObjects.Container {
|
||||
this.eventTimerText.setScale(0.15);
|
||||
this.eventTimerText.setOrigin(0,0);
|
||||
|
||||
this.add([this.eventTimerText, this.bannerShadow, this.banner]);
|
||||
this.add([
|
||||
this.eventTimerText,
|
||||
// this.bannerShadow,
|
||||
this.banner]);
|
||||
}
|
||||
|
||||
show() {
|
||||
|
@ -2295,13 +2295,12 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||
container.cost = this.scene.gameData.getSpeciesStarterValue(container.species.speciesId);
|
||||
|
||||
// First, ensure you have the caught attributes for the species else default to bigint 0
|
||||
const caughtVariants = this.scene.gameData.dexData[container.species.speciesId]?.caughtAttr || BigInt(0);
|
||||
const isCaught = this.scene.gameData.dexData[container.species.speciesId]?.caughtAttr || BigInt(0);
|
||||
|
||||
// Define the variables based on whether their respective variants have been caught
|
||||
const isVariant3Caught = !!(caughtVariants & DexAttr.VARIANT_3);
|
||||
const isVariant2Caught = !!(caughtVariants & DexAttr.VARIANT_2);
|
||||
const isVariantCaught = !!(caughtVariants & DexAttr.SHINY);
|
||||
const isCaught = !!(caughtVariants & DexAttr.NON_SHINY);
|
||||
const isVariant3Caught = !!(isCaught & DexAttr.VARIANT_3);
|
||||
const isVariant2Caught = !!(isCaught & DexAttr.VARIANT_2);
|
||||
const isVariantCaught = !!(isCaught & DexAttr.SHINY);
|
||||
const isUncaught = !isCaught && !isVariantCaught && !isVariant2Caught && !isVariant3Caught;
|
||||
const isPassiveUnlocked = this.scene.gameData.starterData[container.species.speciesId].passiveAttr > 0;
|
||||
const isPassiveUnlockable = this.isPassiveAvailable(container.species.speciesId) && !isPassiveUnlocked;
|
||||
@ -2913,6 +2912,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||
if (species) {
|
||||
const dexEntry = this.scene.gameData.dexData[species.speciesId];
|
||||
const abilityAttr = this.scene.gameData.starterData[species.speciesId].abilityAttr;
|
||||
|
||||
const isCaught = this.scene.gameData.dexData[species.speciesId]?.caughtAttr || BigInt(0);
|
||||
const isVariant3Caught = !!(isCaught & DexAttr.VARIANT_3);
|
||||
const isVariant2Caught = !!(isCaught & DexAttr.VARIANT_2);
|
||||
const isVariantCaught = !!(isCaught & DexAttr.SHINY);
|
||||
const isMaleCaught = !!(isCaught & DexAttr.MALE);
|
||||
const isFemaleCaught = !!(isCaught & DexAttr.FEMALE);
|
||||
|
||||
if (!dexEntry.caughtAttr) {
|
||||
const props = this.scene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId));
|
||||
const defaultAbilityIndex = this.scene.gameData.getStarterSpeciesDefaultAbilityIndex(species);
|
||||
@ -2975,8 +2982,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||
starterSprite.setTexture(species.getIconAtlasKey(formIndex, shiny, variant), species.getIconId(female!, formIndex, shiny, variant));
|
||||
currentFilteredContainer.checkIconId(female, formIndex, shiny, variant);
|
||||
}
|
||||
this.canCycleShiny = !!(dexEntry.caughtAttr & DexAttr.NON_SHINY && dexEntry.caughtAttr & DexAttr.SHINY);
|
||||
this.canCycleGender = !!(dexEntry.caughtAttr & DexAttr.MALE && dexEntry.caughtAttr & DexAttr.FEMALE);
|
||||
|
||||
this.canCycleShiny = isVariantCaught || isVariant2Caught || isVariant3Caught;
|
||||
this.canCycleGender = isMaleCaught && isFemaleCaught;
|
||||
this.canCycleAbility = [ abilityAttr & AbilityAttr.ABILITY_1, (abilityAttr & AbilityAttr.ABILITY_2) && species.ability2, abilityAttr & AbilityAttr.ABILITY_HIDDEN ].filter(a => a).length > 1;
|
||||
this.canCycleForm = species.forms.filter(f => f.isStarterSelectable || !pokemonFormChanges[species.speciesId]?.find(fc => fc.formKey))
|
||||
.map((_, f) => dexEntry.caughtAttr & this.scene.gameData.getFormAttr(f)).filter(f => f).length > 1;
|
||||
@ -2985,7 +2993,12 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||
}
|
||||
|
||||
if (dexEntry.caughtAttr && species.malePercent !== null) {
|
||||
const gender = !female ? Gender.MALE : Gender.FEMALE;
|
||||
let gender: Gender;
|
||||
if ((female && isFemaleCaught) || (!female && !isMaleCaught)) {
|
||||
gender = Gender.FEMALE;
|
||||
} else {
|
||||
gender = Gender.MALE;
|
||||
}
|
||||
this.pokemonGenderText.setText(getGenderSymbol(gender));
|
||||
this.pokemonGenderText.setColor(getGenderColor(gender));
|
||||
this.pokemonGenderText.setShadowColor(getGenderColor(gender, true));
|
||||
|