merge from beta

This commit is contained in:
ImperialSympathizer 2024-09-23 19:25:13 -04:00
commit 4d8d605c02
558 changed files with 12613 additions and 1717 deletions

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

72
src/data/ability.ts Executable file → Normal file
View File

@ -366,6 +366,10 @@ export class TypeImmunityAbAttr extends PreDefendAbAttr {
return false;
}
getImmuneType(): Type | null {
return this.immuneType;
}
override getCondition(): AbAttrCondition | null {
return this.condition;
}
@ -1798,6 +1802,61 @@ export class PostDefendStealHeldItemAbAttr extends PostDefendAbAttr {
}
}
/**
* Base class for defining all {@linkcode Ability} Attributes after a status effect has been set.
* @see {@linkcode applyPostSetStatus()}.
*/
export class PostSetStatusAbAttr extends AbAttr {
/**
* Does nothing after a status condition is set.
* @param pokemon {@linkcode Pokemon} that status condition was set on.
* @param sourcePokemon {@linkcode Pokemon} that that set the status condition. Is `null` if status was not set by a Pokemon.
* @param passive Whether this ability is a passive.
* @param effect {@linkcode StatusEffect} that was set.
* @param args Set of unique arguments needed by this attribute.
* @returns `true` if application of the ability succeeds.
*/
applyPostSetStatus(pokemon: Pokemon, sourcePokemon: Pokemon | null = null, passive: boolean, effect: StatusEffect, simulated: boolean, args: any[]) : boolean | Promise<boolean> {
return false;
}
}
/**
* If another Pokemon burns, paralyzes, poisons, or badly poisons this Pokemon,
* that Pokemon receives the same non-volatile status condition as part of this
* ability attribute. For Synchronize ability.
*/
export class SynchronizeStatusAbAttr extends PostSetStatusAbAttr {
/**
* If the `StatusEffect` that was set is Burn, Paralysis, Poison, or Toxic, and the status
* was set by a source Pokemon, set the source Pokemon's status to the same `StatusEffect`.
* @param pokemon {@linkcode Pokemon} that status condition was set on.
* @param sourcePokemon {@linkcode Pokemon} that that set the status condition. Is null if status was not set by a Pokemon.
* @param passive Whether this ability is a passive.
* @param effect {@linkcode StatusEffect} that was set.
* @param args Set of unique arguments needed by this attribute.
* @returns `true` if application of the ability succeeds.
*/
override applyPostSetStatus(pokemon: Pokemon, sourcePokemon: Pokemon | null = null, passive: boolean, effect: StatusEffect, simulated: boolean, args: any[]): boolean {
/** Synchronizable statuses */
const syncStatuses = new Set<StatusEffect>([
StatusEffect.BURN,
StatusEffect.PARALYSIS,
StatusEffect.POISON,
StatusEffect.TOXIC
]);
if (sourcePokemon && syncStatuses.has(effect)) {
if (!simulated) {
sourcePokemon.trySetStatus(effect, true, pokemon);
}
return true;
}
return false;
}
}
export class PostVictoryAbAttr extends AbAttr {
applyPostVictory(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise<boolean> {
return false;
@ -4241,6 +4300,10 @@ export class ReduceBerryUseThresholdAbAttr extends AbAttr {
}
}
/**
* Ability attribute used for abilites that change the ability owner's weight
* Used for Heavy Metal (doubling weight) and Light Metal (halving weight)
*/
export class WeightMultiplierAbAttr extends AbAttr {
private multiplier: integer;
@ -4677,6 +4740,10 @@ export function applyStatMultiplierAbAttrs(attrType: Constructor<StatMultiplierA
pokemon: Pokemon, stat: BattleStat, statValue: Utils.NumberHolder, simulated: boolean = false, ...args: any[]): Promise<void> {
return applyAbAttrsInternal<StatMultiplierAbAttr>(attrType, pokemon, (attr, passive) => attr.applyStatStage(pokemon, passive, simulated, stat, statValue, args), args);
}
export function applyPostSetStatusAbAttrs(attrType: Constructor<PostSetStatusAbAttr>,
pokemon: Pokemon, effect: StatusEffect, sourcePokemon?: Pokemon | null, simulated: boolean = false, ...args: any[]): Promise<void> {
return applyAbAttrsInternal<PostSetStatusAbAttr>(attrType, pokemon, (attr, passive) => attr.applyPostSetStatus(pokemon, sourcePokemon, passive, effect, simulated, args), args, false, simulated);
}
/**
* Applies a field Stat multiplier attribute
@ -4907,7 +4974,8 @@ export function initAbilities() {
.attr(EffectSporeAbAttr),
new Ability(Abilities.SYNCHRONIZE, 3)
.attr(SyncEncounterNatureAbAttr)
.unimplemented(),
.attr(SynchronizeStatusAbAttr)
.partial(), // interaction with psycho shift needs work, keeping to old Gen interaction for now
new Ability(Abilities.CLEAR_BODY, 3)
.attr(ProtectStatAbAttr)
.ignorable(),
@ -5879,6 +5947,6 @@ export function initAbilities() {
new Ability(Abilities.POISON_PUPPETEER, 9)
.attr(UncopiableAbilityAbAttr)
.attr(UnswappableAbilityAbAttr)
.conditionalAttr(pokemon => pokemon.species.speciesId===Species.PECHARUNT, ConfusionOnStatusEffectAbAttr, StatusEffect.POISON, StatusEffect.TOXIC)
.attr(ConfusionOnStatusEffectAbAttr, StatusEffect.POISON, StatusEffect.TOXIC)
);
}

View File

@ -915,12 +915,12 @@ export abstract class BattleAnim {
this.srcLine = [ userFocusX, userFocusY, targetFocusX, targetFocusY ];
this.dstLine = [ userInitialX, userInitialY, targetInitialX, targetInitialY ];
let r = anim!.frames.length; // TODO: is this bang correct?
let r = anim?.frames.length ?? 0;
let f = 0;
scene.tweens.addCounter({
duration: Utils.getFrameMs(3),
repeat: anim!.frames.length, // TODO: is this bang correct?
repeat: anim?.frames.length ?? 0,
onRepeat: () => {
if (!f) {
userSprite.setVisible(false);
@ -1264,7 +1264,7 @@ export class CommonBattleAnim extends BattleAnim {
}
getAnim(): AnimConfig | null {
return this.commonAnim ? commonAnims.get(this.commonAnim)! : null; // TODO: is this bang correct?
return this.commonAnim ? commonAnims.get(this.commonAnim) ?? null : null;
}
isOppAnim(): boolean {
@ -1284,7 +1284,7 @@ export class MoveAnim extends BattleAnim {
getAnim(): AnimConfig {
return moveAnims.get(this.move) instanceof AnimConfig
? moveAnims.get(this.move) as AnimConfig
: moveAnims.get(this.move)![this.user?.isPlayer() ? 0 : 1] as AnimConfig; // TODO: is this bang correct?
: moveAnims.get(this.move)?.[this.user?.isPlayer() ? 0 : 1] as AnimConfig;
}
isOppAnim(): boolean {
@ -1316,7 +1316,7 @@ export class MoveChargeAnim extends MoveAnim {
getAnim(): AnimConfig {
return chargeAnims.get(this.chargeAnim) instanceof AnimConfig
? chargeAnims.get(this.chargeAnim) as AnimConfig
: chargeAnims.get(this.chargeAnim)![this.user?.isPlayer() ? 0 : 1] as AnimConfig; // TODO: is this bang correct?
: chargeAnims.get(this.chargeAnim)?.[this.user?.isPlayer() ? 0 : 1] as AnimConfig;
}
}

View File

@ -2281,6 +2281,36 @@ export class TarShotTag extends BattlerTag {
}
}
/**
* Battler Tag that keeps track of how many times the user has Autotomized
* Each count of Autotomization reduces the weight by 100kg
*/
export class AutotomizedTag extends BattlerTag {
public autotomizeCount: number = 0;
constructor(sourceMove: Moves = Moves.AUTOTOMIZE) {
super(BattlerTagType.AUTOTOMIZED, BattlerTagLapseType.CUSTOM, 1, sourceMove);
}
/**
* Adds an autotomize count to the Pokemon. Each stack reduces weight by 100kg
* If the Pokemon is over 0.1kg it also displays a message.
* @param pokemon The Pokemon that is being autotomized
*/
onAdd(pokemon: Pokemon): void {
const minWeight = 0.1;
if (pokemon.getWeight() > minWeight) {
pokemon.scene.queueMessage(i18next.t("battlerTags:autotomizeOnAdd", {
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon)
}));
}
this.autotomizeCount += 1;
}
onOverlap(pokemon: Pokemon): void {
this.onAdd(pokemon);
}
}
export class SubstituteTag extends BattlerTag {
/** The substitute's remaining HP. If HP is depleted, the Substitute fades. */
public hp: number;
@ -2568,6 +2598,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: number, source
return new GorillaTacticsTag();
case BattlerTagType.SUBSTITUTE:
return new SubstituteTag(sourceMove, sourceId);
case BattlerTagType.AUTOTOMIZED:
return new AutotomizedTag();
case BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON:
return new MysteryEncounterPostSummonTag();
case BattlerTagType.HEAL_BLOCK:

View File

@ -172,11 +172,9 @@ export abstract class Challenge {
* @param overrideValue {@link integer} The value to check for. If undefined, gets the current value.
* @returns {@link string} The localised name for the current value.
*/
getValue(overrideValue?: integer): string {
if (overrideValue === undefined) {
overrideValue = this.value;
}
return i18next.t(`challenges:${this.geti18nKey()}.value.${this.value}`);
getValue(overrideValue?: number): string {
const value = overrideValue ?? this.value;
return i18next.t(`challenges:${this.geti18nKey()}.value.${value}`);
}
/**
@ -184,11 +182,9 @@ export abstract class Challenge {
* @param overrideValue {@link integer} The value to check for. If undefined, gets the current value.
* @returns {@link string} The localised description for the current value.
*/
getDescription(overrideValue?: integer): string {
if (overrideValue === undefined) {
overrideValue = this.value;
}
return `${i18next.t([`challenges:${this.geti18nKey()}.desc.${this.value}`, `challenges:${this.geti18nKey()}.desc`])}`;
getDescription(overrideValue?: number): string {
const value = overrideValue ?? this.value;
return `${i18next.t([`challenges:${this.geti18nKey()}.desc.${value}`, `challenges:${this.geti18nKey()}.desc`])}`;
}
/**
@ -451,30 +447,6 @@ export class SingleGenerationChallenge extends Challenge {
applyFixedBattle(waveIndex: Number, battleConfig: FixedBattleConfig): boolean {
let trainerTypes: TrainerType[] = [];
switch (waveIndex) {
case 35:
trainerTypes = [ TrainerType.ROCKET_GRUNT, TrainerType.ROCKET_GRUNT, Utils.randSeedItem([ TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT ]), TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, Utils.randSeedItem([ TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT ]), TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ];
break;
case 62:
trainerTypes = [ TrainerType.ROCKET_GRUNT, TrainerType.ROCKET_GRUNT, Utils.randSeedItem([ TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT ]), TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, Utils.randSeedItem([ TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT ]), TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ];
break;
case 64:
trainerTypes = [ TrainerType.ROCKET_GRUNT, TrainerType.ROCKET_GRUNT, Utils.randSeedItem([ TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT ]), TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, Utils.randSeedItem([ TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT ]), TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ];
break;
case 66:
trainerTypes = [ Utils.randSeedItem([ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ]), Utils.randSeedItem([ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ]), Utils.randSeedItem([ TrainerType.TABITHA, TrainerType.COURTNEY, TrainerType.MATT, TrainerType.SHELLY ]), Utils.randSeedItem([ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ]), Utils.randSeedItem([ TrainerType.ZINZOLIN, TrainerType.ROOD ]), Utils.randSeedItem([ TrainerType.XEROSIC, TrainerType.BRYONY ]), Utils.randSeedItem([ TrainerType.FABA, TrainerType.PLUMERIA ]), TrainerType.OLEANA, Utils.randSeedItem([ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]) ];
break;
case 112:
trainerTypes = [ TrainerType.ROCKET_GRUNT, TrainerType.ROCKET_GRUNT, Utils.randSeedItem([ TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT ]), TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, Utils.randSeedItem([ TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT ]), TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ];
break;
case 114:
trainerTypes = [ Utils.randSeedItem([ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ]), Utils.randSeedItem([ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ]), Utils.randSeedItem([ TrainerType.TABITHA, TrainerType.COURTNEY, TrainerType.MATT, TrainerType.SHELLY ]), Utils.randSeedItem([ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ]), Utils.randSeedItem([ TrainerType.ZINZOLIN, TrainerType.ROOD ]), Utils.randSeedItem([ TrainerType.XEROSIC, TrainerType.BRYONY ]), Utils.randSeedItem([ TrainerType.FABA, TrainerType.PLUMERIA ]), TrainerType.OLEANA, Utils.randSeedItem([ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]) ];
break;
case 115:
trainerTypes = [ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.ROCKET_BOSS_GIOVANNI_1, Utils.randSeedItem([ TrainerType.MAXIE, TrainerType.ARCHIE ]), TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE, Utils.randSeedItem([ TrainerType.LUSAMINE, TrainerType.GUZMA ]), TrainerType.ROSE, TrainerType.PENNY ];
break;
case 165:
trainerTypes = [ TrainerType.ROCKET_BOSS_GIOVANNI_2, TrainerType.ROCKET_BOSS_GIOVANNI_2, Utils.randSeedItem([ TrainerType.MAXIE_2, TrainerType.ARCHIE_2 ]), TrainerType.CYRUS_2, TrainerType.GHETSIS_2, TrainerType.LYSANDRE_2, Utils.randSeedItem([ TrainerType.LUSAMINE_2, TrainerType.GUZMA_2 ]), TrainerType.ROSE_2, TrainerType.PENNY_2 ];
break;
case 182:
trainerTypes = [ TrainerType.LORELEI, TrainerType.WILL, TrainerType.SIDNEY, TrainerType.AARON, TrainerType.SHAUNTAL, TrainerType.MALVA, Utils.randSeedItem([ TrainerType.HALA, TrainerType.MOLAYNE ]), TrainerType.MARNIE_ELITE, TrainerType.RIKA ];
break;
@ -511,14 +483,12 @@ export class SingleGenerationChallenge extends Challenge {
* @param {value} overrideValue The value to check for. If undefined, gets the current value.
* @returns {string} The localised name for the current value.
*/
getValue(overrideValue?: integer): string {
if (overrideValue === undefined) {
overrideValue = this.value;
}
if (this.value === 0) {
getValue(overrideValue?: number): string {
const value = overrideValue ?? this.value;
if (value === 0) {
return i18next.t("settings:off");
}
return i18next.t(`starterSelectUiHandler:gen${this.value}`);
return i18next.t(`starterSelectUiHandler:gen${value}`);
}
/**
@ -526,14 +496,12 @@ export class SingleGenerationChallenge extends Challenge {
* @param {value} overrideValue The value to check for. If undefined, gets the current value.
* @returns {string} The localised description for the current value.
*/
getDescription(overrideValue?: integer): string {
if (overrideValue === undefined) {
overrideValue = this.value;
}
if (this.value === 0) {
getDescription(overrideValue?: number): string {
const value = overrideValue ?? this.value;
if (value === 0) {
return i18next.t("challenges:singleGeneration.desc_default");
}
return i18next.t("challenges:singleGeneration.desc", { gen: i18next.t(`challenges:singleGeneration.gen_${this.value}`) });
return i18next.t("challenges:singleGeneration.desc", { gen: i18next.t(`challenges:singleGeneration.gen_${value}`) });
}

View File

@ -650,7 +650,7 @@ export default class Move implements Localizable {
}
/**
* Applies each {@linkcode MoveCondition} of this move to the params
* Applies each {@linkcode MoveCondition} function of this move to the params, determines if the move can be used prior to calling each attribute's apply()
* @param user {@linkcode Pokemon} to apply conditions to
* @param target {@linkcode Pokemon} to apply conditions to
* @param move {@linkcode Move} to apply conditions to
@ -2091,21 +2091,20 @@ export class PsychoShiftEffectAttr extends MoveEffectAttr {
if (target.status) {
return false;
}
//@ts-ignore - how can target.status.effect be checked when we return `false` before when it's defined?
if (!target.status || (target.status.effect === statusToApply && move.chance < 0)) { // TODO: resolve ts-ignore
const statusAfflictResult = target.trySetStatus(statusToApply, true, user);
if (statusAfflictResult) {
} else {
const canSetStatus = target.canSetStatus(statusToApply, true, false, user);
if (canSetStatus) {
if (user.status) {
user.scene.queueMessage(getStatusEffectHealText(user.status.effect, getPokemonNameWithAffix(user)));
}
user.resetStatus();
user.updateInfo();
target.trySetStatus(statusToApply, true, user);
}
return statusAfflictResult;
}
return false;
return canSetStatus;
}
}
getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number {
@ -5175,31 +5174,29 @@ export class RevivalBlessingAttr extends MoveEffectAttr {
}
export class ForceSwitchOutAttr extends MoveEffectAttr {
private user: boolean;
private batonPass: boolean;
constructor(user?: boolean, batonPass?: boolean) {
constructor(
private selfSwitch: boolean = false,
private batonPass: boolean = false
) {
super(false, MoveEffectTrigger.POST_APPLY, false, true);
this.user = !!user;
this.batonPass = !!batonPass;
}
isBatonPass() {
return this.batonPass;
}
// TODO: Why is this a Promise?
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
return new Promise(resolve => {
// Check if the move category is not STATUS or if the switch out condition is not met
if (!this.getSwitchOutCondition()(user, target, move)) {
return resolve(false);
}
// Move the switch out logic inside the conditional block
// This ensures that the switch out only happens when the conditions are met
const switchOutTarget = this.user ? user : target;
if (switchOutTarget instanceof PlayerPokemon) {
// Move the switch out logic inside the conditional block
// This ensures that the switch out only happens when the conditions are met
const switchOutTarget = this.selfSwitch ? user : target;
if (switchOutTarget instanceof PlayerPokemon) {
switchOutTarget.leaveField(!this.batonPass);
if (switchOutTarget.hp > 0) {
@ -5208,41 +5205,43 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
} else {
resolve(false);
}
return;
} else if (user.scene.currentBattle.battleType !== BattleType.WILD) {
// Switch out logic for trainer battles
return;
} else if (user.scene.currentBattle.battleType !== BattleType.WILD) {
// Switch out logic for trainer battles
switchOutTarget.leaveField(!this.batonPass);
if (switchOutTarget.hp > 0) {
// for opponent switching out
user.scene.prependToPhase(new SwitchSummonPhase(user.scene, switchOutTarget.getFieldIndex(), (user.scene.currentBattle.trainer ? user.scene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot) : 0), false, this.batonPass, false), MoveEndPhase);
if (switchOutTarget.hp > 0) {
// for opponent switching out
user.scene.prependToPhase(new SwitchSummonPhase(user.scene, switchOutTarget.getFieldIndex(),
(user.scene.currentBattle.trainer ? user.scene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot) : 0),
false, this.batonPass, false), MoveEndPhase);
}
} else {
// Switch out logic for everything else (eg: WILD battles)
switchOutTarget.leaveField(false);
} else {
// Switch out logic for everything else (eg: WILD battles)
switchOutTarget.leaveField(false);
if (switchOutTarget.hp) {
user.scene.queueMessage(i18next.t("moveTriggers:fled", {pokemonName: getPokemonNameWithAffix(switchOutTarget)}), null, true, 500);
if (switchOutTarget.hp) {
user.scene.queueMessage(i18next.t("moveTriggers:fled", {pokemonName: getPokemonNameWithAffix(switchOutTarget)}), null, true, 500);
// in double battles redirect potential moves off fled pokemon
if (switchOutTarget.scene.currentBattle.double) {
const allyPokemon = switchOutTarget.getAlly();
switchOutTarget.scene.redirectPokemonMoves(switchOutTarget, allyPokemon);
}
}
}
if (!switchOutTarget.getAlly()?.isActive(true)) {
user.scene.clearEnemyHeldItemModifiers();
if (!switchOutTarget.getAlly()?.isActive(true)) {
user.scene.clearEnemyHeldItemModifiers();
if (switchOutTarget.hp) {
user.scene.pushPhase(new BattleEndPhase(user.scene));
user.scene.pushPhase(new NewBattlePhase(user.scene));
}
}
}
if (switchOutTarget.hp) {
user.scene.pushPhase(new BattleEndPhase(user.scene));
user.scene.pushPhase(new NewBattlePhase(user.scene));
}
}
}
resolve(true);
});
resolve(true);
});
}
getCondition(): MoveConditionFunc {
@ -5257,29 +5256,33 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
getSwitchOutCondition(): MoveConditionFunc {
return (user, target, move) => {
const switchOutTarget = (this.user ? user : target);
const switchOutTarget = (this.selfSwitch ? user : target);
const player = switchOutTarget instanceof PlayerPokemon;
if (!this.user && move.hitsSubstitute(user, target)) {
return false;
if (!this.selfSwitch) {
if (move.hitsSubstitute(user, target)) {
return false;
}
const blockedByAbility = new Utils.BooleanHolder(false);
applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility);
return !blockedByAbility.value;
}
if (!this.user && move.category === MoveCategory.STATUS && (target.hasAbilityWithAttr(ForceSwitchOutImmunityAbAttr))) {
return false;
}
if (!player && !user.scene.currentBattle.battleType) {
if (!player && user.scene.currentBattle.battleType === BattleType.WILD) {
if (this.batonPass) {
return false;
}
// Don't allow wild opponents to flee on the boss stage since it can ruin a run early on
if (!(user.scene.currentBattle.waveIndex % 10)) {
if (user.scene.currentBattle.waveIndex % 10 === 0) {
return false;
}
}
const party = player ? user.scene.getParty() : user.scene.getEnemyParty();
return (!player && !user.scene.currentBattle.battleType) || party.filter(p => p.isAllowedInBattle() && (player || (p as EnemyPokemon).trainerSlot === (switchOutTarget as EnemyPokemon).trainerSlot)).length > user.scene.currentBattle.getBattlerCount();
return (!player && !user.scene.currentBattle.battleType)
|| party.filter(p => p.isAllowedInBattle()
&& (player || (p as EnemyPokemon).trainerSlot === (switchOutTarget as EnemyPokemon).trainerSlot)).length > user.scene.currentBattle.getBattlerCount();
};
}
@ -5287,8 +5290,8 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
if (!user.scene.getEnemyParty().find(p => p.isActive() && !p.isOnField())) {
return -20;
}
let ret = this.user ? Math.floor((1 - user.getHpRatio()) * 20) : super.getUserBenefitScore(user, target, move);
if (this.user && this.batonPass) {
let ret = this.selfSwitch ? Math.floor((1 - user.getHpRatio()) * 20) : super.getUserBenefitScore(user, target, move);
if (this.selfSwitch && this.batonPass) {
const statStageTotal = user.getStatStages().reduce((s: integer, total: integer) => total += s, 0);
ret = ret / 2 + (Phaser.Tweens.Builders.GetEaseFunction("Sine.easeOut")(Math.min(Math.abs(statStageTotal), 10) / 10) * (statStageTotal >= 0 ? 10 : -10));
}
@ -5296,6 +5299,21 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
}
}
export class ChillyReceptionAttr extends ForceSwitchOutAttr {
// using inherited constructor
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
user.scene.arena.trySetWeather(WeatherType.SNOW, true);
return super.apply(user, target, move, args);
}
getCondition(): MoveConditionFunc {
// chilly reception move will go through if the weather is change-able to snow, or the user can switch out, else move will fail
return (user, target, move) => user.scene.arena.trySetWeather(WeatherType.SNOW, true) || super.getSwitchOutCondition()(user, target, move);
}
}
export class RemoveTypeAttr extends MoveEffectAttr {
private removedType: Type;
@ -8091,7 +8109,7 @@ export function initMoves() {
.attr(MovePowerMultiplierAttr, (user, target, move) => target.status && (target.status.effect === StatusEffect.POISON || target.status.effect === StatusEffect.TOXIC) ? 2 : 1),
new SelfStatusMove(Moves.AUTOTOMIZE, Type.STEEL, -1, 15, -1, 0, 5)
.attr(StatStageChangeAttr, [ Stat.SPD ], 2, true)
.partial(),
.attr(AddBattlerTagAttr, BattlerTagType.AUTOTOMIZED, true),
new SelfStatusMove(Moves.RAGE_POWDER, Type.BUG, -1, 20, -1, 2, 5)
.powderMove()
.attr(AddBattlerTagAttr, BattlerTagType.CENTER_OF_ATTENTION, true),
@ -9073,8 +9091,7 @@ export function initMoves() {
new AttackMove(Moves.AURA_WHEEL, Type.ELECTRIC, MoveCategory.PHYSICAL, 110, 100, 10, 100, 0, 8)
.attr(StatStageChangeAttr, [ Stat.SPD ], 1, true)
.makesContact(false)
.attr(AuraWheelTypeAttr)
.condition((user, target, move) => [user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.MORPEKO)), // Missing custom fail message
.attr(AuraWheelTypeAttr),
new AttackMove(Moves.BREAKING_SWIPE, Type.DRAGON, MoveCategory.PHYSICAL, 60, 100, 15, 100, 0, 8)
.target(MoveTarget.ALL_NEAR_ENEMIES)
.attr(StatStageChangeAttr, [ Stat.ATK ], -1),
@ -9486,10 +9503,9 @@ export function initMoves() {
.makesContact(),
new SelfStatusMove(Moves.SHED_TAIL, Type.NORMAL, -1, 10, -1, 0, 9)
.unimplemented(),
new StatusMove(Moves.CHILLY_RECEPTION, Type.ICE, -1, 10, -1, 0, 9)
.attr(WeatherChangeAttr, WeatherType.SNOW)
.attr(ForceSwitchOutAttr, true, false)
.target(MoveTarget.BOTH_SIDES),
new SelfStatusMove(Moves.CHILLY_RECEPTION, Type.ICE, -1, 10, -1, 0, 9)
.attr(PreMoveMessageAttr, (user, move) => i18next.t("moveTriggers:chillyReception", {pokemonName: getPokemonNameWithAffix(user)}))
.attr(ChillyReceptionAttr, true, false),
new SelfStatusMove(Moves.TIDY_UP, Type.NORMAL, -1, 10, -1, 0, 9)
.attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPD ], 1, true, null, true, true)
.attr(RemoveArenaTrapAttr, true)

View File

@ -339,7 +339,7 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig:
loadEnemyAssets.push(enemyPokemon.loadAssets());
console.log(enemyPokemon.name, enemyPokemon.species.speciesId, enemyPokemon.stats);
console.log(`Pokemon: ${enemyPokemon.name}`, `Species ID: ${enemyPokemon.species.speciesId}`, `Stats: ${enemyPokemon.stats}`, `Ability: ${enemyPokemon.getAbility().name}`, `Passive Ability: ${enemyPokemon.getPassiveAbility().name}`);
});
scene.pushPhase(new MysteryEncounterBattlePhase(scene, partyConfig.disableSwitch));

View File

@ -597,7 +597,7 @@ export class TrainerConfig {
case "flare": {
return {
[TrainerPoolTier.COMMON]: [Species.FLETCHLING, Species.LITLEO, Species.INKAY, Species.HELIOPTILE, Species.ELECTRIKE, Species.SKORUPI, Species.PURRLOIN, Species.CLAWITZER, Species.PANCHAM, Species.ESPURR, Species.BUNNELBY],
[TrainerPoolTier.UNCOMMON]: [Species.LITWICK, Species.SNEASEL, Species.PUMPKABOO, Species.PHANTUMP, Species.HONEDGE, Species.BINACLE, Species.BERGMITE, Species.HOUNDOUR, Species.SKRELP, Species.SLIGGOO],
[TrainerPoolTier.UNCOMMON]: [Species.LITWICK, Species.SNEASEL, Species.PUMPKABOO, Species.PHANTUMP, Species.HONEDGE, Species.BINACLE, Species.HOUNDOUR, Species.SKRELP, Species.SLIGGOO],
[TrainerPoolTier.RARE]: [Species.NOIVERN, Species.HISUI_AVALUGG, Species.HISUI_SLIGGOO]
};
}
@ -640,14 +640,14 @@ export class TrainerConfig {
return {
[TrainerPoolTier.COMMON]: [ Species.ZUBAT, Species.GRIMER, Species.STUNKY, Species.FOONGUS, Species.MAREANIE, Species.TOXEL, Species.SHROODLE, Species.PALDEA_WOOPER ],
[TrainerPoolTier.UNCOMMON]: [ Species.GASTLY, Species.SEVIPER, Species.SKRELP, Species.ALOLA_GRIMER, Species.GALAR_SLOWPOKE, Species.HISUI_QWILFISH ],
[TrainerPoolTier.RARE]: [ Species.BULBASAUR, Species.GLIMMET ]
[TrainerPoolTier.RARE]: [ Species.GLIMMET, Species.BULBASAUR ]
};
}
case "star_4": {
return {
[TrainerPoolTier.COMMON]: [ Species.CLEFFA, Species.IGGLYBUFF, Species.AZURILL, Species.COTTONEE, Species.FLABEBE, Species.HATENNA, Species.IMPIDIMP, Species.TINKATINK ],
[TrainerPoolTier.UNCOMMON]: [ Species.TOGEPI, Species.GARDEVOIR, Species.SYLVEON, Species.KLEFKI, Species.MIMIKYU, Species.ALOLA_VULPIX ],
[TrainerPoolTier.RARE]: [ Species.POPPLIO, Species.GALAR_PONYTA ]
[TrainerPoolTier.RARE]: [ Species.GALAR_PONYTA, Species.POPPLIO ]
};
}
case "star_5": {
@ -1509,7 +1509,7 @@ export const trainerConfigs: TrainerConfigs = {
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [Species.CARVANHA, Species.WAILMER, Species.ZIGZAGOON, Species.LOTAD, Species.CORPHISH, Species.SPHEAL, Species.REMORAID, Species.QWILFISH, Species.BARBOACH],
[TrainerPoolTier.UNCOMMON]: [Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.AZURILL, Species.CLOBBOPUS, Species.HORSEA],
[TrainerPoolTier.RARE]: [Species.MANTINE, Species.DHELMISE, Species.HISUI_QWILFISH, Species.ARROKUDA, Species.PALDEA_WOOPER, Species.SKRELP],
[TrainerPoolTier.RARE]: [Species.MANTYKE, Species.DHELMISE, Species.HISUI_QWILFISH, Species.ARROKUDA, Species.PALDEA_WOOPER, Species.SKRELP],
[TrainerPoolTier.SUPER_RARE]: [Species.DONDOZO, Species.BASCULEGION]
}),
[TrainerType.MATT]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin", "aqua", [Species.SHARPEDO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
@ -1527,8 +1527,8 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerType.PLASMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Plasma Grunt Female").setHasDouble("Plasma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.SCRAFTY, Species.WOOBAT, Species.VANILLITE, Species.SANDILE, Species.TRUBBISH, Species.TYMPOLE],
[TrainerPoolTier.UNCOMMON]: [Species.FRILLISH, Species.VENIPEDE, Species.GOLETT, Species.TIMBURR, Species.DARUMAKA, Species.FOONGUS, Species.JOLTIK],
[TrainerPoolTier.RARE]: [Species.PAWNIARD, Species.RUFFLET, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK, Species.CUBCHOO, Species.MIENFOO, Species.DURANT, Species.BOUFFALANT],
[TrainerPoolTier.UNCOMMON]: [Species.FRILLISH, Species.VENIPEDE, Species.GOLETT, Species.TIMBURR, Species.DARUMAKA, Species.FOONGUS, Species.JOLTIK, Species.CUBCHOO, Species.KLINK],
[TrainerPoolTier.RARE]: [Species.PAWNIARD, Species.RUFFLET, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.MIENFOO, Species.DURANT, Species.BOUFFALANT],
[TrainerPoolTier.SUPER_RARE]: [Species.DRUDDIGON, Species.HISUI_ZORUA, Species.AXEW, Species.DEINO]
}),
[TrainerType.ZINZOLIN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [Species.CRYOGONAL]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
@ -1537,7 +1537,7 @@ export const trainerConfigs: TrainerConfigs = {
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [Species.FLETCHLING, Species.LITLEO, Species.PONYTA, Species.INKAY, Species.HOUNDOUR, Species.SKORUPI, Species.SCRAFTY, Species.CROAGUNK, Species.SCATTERBUG, Species.ESPURR],
[TrainerPoolTier.UNCOMMON]: [Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.PANCHAM, Species.PURRLOIN, Species.POOCHYENA, Species.BINACLE, Species.CLAUNCHER, Species.PUMPKABOO, Species.PHANTUMP],
[TrainerPoolTier.RARE]: [Species.LITWICK, Species.SNEASEL, Species.PAWNIARD, Species.BERGMITE, Species.SLIGGOO],
[TrainerPoolTier.RARE]: [Species.LITWICK, Species.SNEASEL, Species.PAWNIARD, Species.SLIGGOO],
[TrainerPoolTier.SUPER_RARE]: [Species.NOIVERN, Species.HISUI_SLIGGOO, Species.HISUI_AVALUGG]
}),
[TrainerType.BRYONY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin_female", "flare", [Species.LIEPARD]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
@ -1545,15 +1545,15 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerType.AETHER_GRUNT]: new TrainerConfig(++t).setHasGenders("Aether Grunt Female").setHasDouble("Aether Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.PIKIPEK, Species.ROCKRUFF, Species.ALOLA_DIGLETT, Species.ALOLA_EXEGGUTOR, Species.YUNGOOS, Species.CORSOLA, Species.ALOLA_GEODUDE, Species.ALOLA_RAICHU, Species.BOUNSWEET, Species.LILLIPUP, Species.KOMALA, Species.MORELULL, Species.COMFEY, Species.TOGEDEMARU],
[TrainerPoolTier.UNCOMMON]: [ Species.POLIWAG, Species.STUFFUL, Species.ORANGURU, Species.PASSIMIAN, Species.BRUXISH, Species.MINIOR, Species.WISHIWASHI, Species.CRABRAWLER, Species.CUTIEFLY, Species.ORICORIO, Species.MUDBRAY, Species.PYUKUMUKU, Species.ALOLA_MAROWAK],
[TrainerPoolTier.RARE]: [ Species.GALAR_CORSOLA, Species.ALOLA_SANDSHREW, Species.ALOLA_VULPIX, Species.TURTONATOR, Species.DRAMPA],
[TrainerPoolTier.UNCOMMON]: [ Species.POLIWAG, Species.STUFFUL, Species.ORANGURU, Species.PASSIMIAN, Species.BRUXISH, Species.MINIOR, Species.WISHIWASHI, Species.ALOLA_SANDSHREW, Species.ALOLA_VULPIX, Species.CRABRAWLER, Species.CUTIEFLY, Species.ORICORIO, Species.MUDBRAY, Species.PYUKUMUKU, Species.ALOLA_MAROWAK],
[TrainerPoolTier.RARE]: [ Species.GALAR_CORSOLA, Species.TURTONATOR, Species.MIMIKYU, Species.MAGNEMITE, Species.DRAMPA],
[TrainerPoolTier.SUPER_RARE]: [Species.JANGMO_O, Species.PORYGON]
}),
[TrainerType.FABA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aether_admin", "aether", [Species.HYPNO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
[TrainerType.SKULL_GRUNT]: new TrainerConfig(++t).setHasGenders("Skull Grunt Female").setHasDouble("Skull Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.SALANDIT, Species.ALOLA_RATTATA, Species.EKANS, Species.ALOLA_MEOWTH, Species.SCRAGGY, Species.KOFFING, Species.ALOLA_GRIMER, Species.MAREANIE, Species.SPINARAK, Species.TRUBBISH],
[TrainerPoolTier.UNCOMMON]: [ Species.FOMANTIS, Species.SABLEYE, Species.SANDILE, Species.HOUNDOUR, Species.ALOLA_MAROWAK, Species.GASTLY, Species.PANCHAM, Species.DROWZEE, Species.ZUBAT, Species.VENIPEDE, Species.VULLABY],
[TrainerPoolTier.COMMON]: [ Species.SALANDIT, Species.ALOLA_RATTATA, Species.EKANS, Species.ALOLA_MEOWTH, Species.SCRAGGY, Species.KOFFING, Species.ALOLA_GRIMER, Species.MAREANIE, Species.SPINARAK, Species.TRUBBISH, Species.DROWZEE],
[TrainerPoolTier.UNCOMMON]: [ Species.FOMANTIS, Species.SABLEYE, Species.SANDILE, Species.HOUNDOUR, Species.ALOLA_MAROWAK, Species.GASTLY, Species.PANCHAM, Species.ZUBAT, Species.VENIPEDE, Species.VULLABY],
[TrainerPoolTier.RARE]: [Species.SANDYGAST, Species.PAWNIARD, Species.MIMIKYU, Species.DHELMISE, Species.WISHIWASHI, Species.NYMBLE],
[TrainerPoolTier.SUPER_RARE]: [Species.GRUBBIN, Species.DEWPIDER]
}),
@ -1916,7 +1916,14 @@ export const trainerConfigs: TrainerConfigs = {
p.formIndex = 1; // Mega Kangaskhan
p.generateName();
}))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.GASTRODON, Species.SEISMITOAD]))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.GASTRODON, Species.SEISMITOAD], TrainerSlot.TRAINER, true, p => {
//Storm Drain Gastrodon, Water Absorb Seismitoad
if (p.species.speciesId === Species.GASTRODON) {
p.abilityIndex = 0;
} else if (p.species.speciesId === Species.SEISMITOAD) {
p.abilityIndex = 2;
}
}))
.setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.MEWTWO], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
@ -2060,7 +2067,7 @@ export const trainerConfigs: TrainerConfigs = {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ULTRA_BALL;
p.formIndex = Utils.randSeedInt(5, 1); // Shock, Burn, Chill, or Douse Drive
p.formIndex = Utils.randSeedInt(4, 1); // Shock, Burn, Chill, or Douse Drive
}))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BASCULEGION, Species.JELLICENT ], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
@ -2153,9 +2160,23 @@ export const trainerConfigs: TrainerConfigs = {
p.pokeball = PokeballType.MASTER_BALL;
})),
[TrainerType.GUZMA]: new TrainerConfig(++t).setName("Guzma").initForEvilTeamLeader("Skull Boss", []).setMixedBattleBgm("battle_skull_boss").setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LOKIX, Species.YANMEGA ]))
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LOKIX, Species.YANMEGA ], TrainerSlot.TRAINER, true, p => {
//Tinted Lens Lokix, Tinted Lens Yanmega
if (p.species.speciesId === Species.LOKIX) {
p.abilityIndex = 2;
} else if (p.species.speciesId === Species.YANMEGA) {
p.abilityIndex = 1;
}
}))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HERACROSS ]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ], TrainerSlot.TRAINER, true, p => {
//Technician Scizor, Sharpness Kleavor
if (p.species.speciesId === Species.SCIZOR) {
p.abilityIndex = 1;
} else if (p.species.speciesId === Species.KLEAVOR) {
p.abilityIndex = 2;
}
}))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GALVANTULA, Species.VIKAVOLT]))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.PINSIR ], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
@ -2175,25 +2196,32 @@ export const trainerConfigs: TrainerConfigs = {
p.abilityIndex = 2; //Anticipation
p.pokeball = PokeballType.ULTRA_BALL;
}))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HISUI_SAMUROTT, Species.CRAWDAUNT ], TrainerSlot.TRAINER, true, p => {
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ], TrainerSlot.TRAINER, true, p => {
//Technician Scizor, Sharpness Kleavor
if (p.species.speciesId === Species.SCIZOR) {
p.abilityIndex = 1;
} else if (p.species.speciesId === Species.KLEAVOR) {
p.abilityIndex = 2;
}
}))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.HISUI_SAMUROTT, Species.CRAWDAUNT ], TrainerSlot.TRAINER, true, p => {
p.abilityIndex = 2; //Sharpness Hisui Samurott, Adaptability Crawdaunt
}))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ]))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.PINSIR ], TrainerSlot.TRAINER, true, p => {
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.BUZZWOLE ], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ROGUE_BALL;
}))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.XURKITREE ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ROGUE_BALL;
}))
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.PINSIR ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.formIndex = 1;
p.generateAndPopulateMoveset();
p.generateName();
p.pokeball = PokeballType.ULTRA_BALL;
}))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.BUZZWOLE ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ROGUE_BALL;
}))
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.XURKITREE ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ROGUE_BALL;
})),
[TrainerType.ROSE]: new TrainerConfig(++t).setName("Rose").initForEvilTeamLeader("Macro Boss", []).setMixedBattleBgm("battle_macro_boss").setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ]))
@ -2209,17 +2237,16 @@ export const trainerConfigs: TrainerConfigs = {
p.pokeball = PokeballType.ULTRA_BALL;
})),
[TrainerType.ROSE_2]: new TrainerConfig(++t).setName("Rose").initForEvilTeamLeader("Macro Boss", [], true).setMixedBattleBgm("battle_macro_boss").setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.MELMETAL ], TrainerSlot.TRAINER, true, p => {
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ULTRA_BALL;
}))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.AEGISLASH, Species.GHOLDENGO ]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.DRACOVISH, Species.DRACOZOLT ], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.abilityIndex = 1; //Strong Jaw Dracovish, Hustle Dracozolt
}))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.ARCHALUDON ]))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MELMETAL ]))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GALAR_ARTICUNO, Species.GALAR_ZAPDOS, Species.GALAR_MOLTRES ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();

View File

@ -79,6 +79,7 @@ export enum BattlerTagType {
TAR_SHOT = "TAR_SHOT",
BURNED_UP = "BURNED_UP",
DOUBLE_SHOCKED = "DOUBLE_SHOCKED",
AUTOTOMIZED = "AUTOTOMIZED",
MYSTERY_ENCOUNTER_POST_SUMMON = "MYSTERY_ENCOUNTER_POST_SUMMON",
HEAL_BLOCK = "HEAL_BLOCK",
}

View File

@ -33,6 +33,7 @@ export class Arena {
public tags: ArenaTag[];
public bgm: string;
public ignoreAbilities: boolean;
public ignoringEffectSource: BattlerIndex | null;
private lastTimeOfDay: TimeOfDay;
@ -569,8 +570,9 @@ export class Arena {
}
}
setIgnoreAbilities(ignoreAbilities: boolean = true): void {
setIgnoreAbilities(ignoreAbilities: boolean, ignoringEffectSource: BattlerIndex | null = null): void {
this.ignoreAbilities = ignoreAbilities;
this.ignoringEffectSource = ignoreAbilities ? ignoringEffectSource : null;
}
/**

View File

@ -17,10 +17,10 @@ import { initMoveAnim, loadMoveAnimAssets } from "../data/battle-anims";
import { Status, StatusEffect, getRandomStatus } from "../data/status-effect";
import { pokemonEvolutions, pokemonPrevolutions, SpeciesFormEvolution, SpeciesEvolutionCondition, FusionSpeciesFormEvolution } from "../data/pokemon-evolutions";
import { reverseCompatibleTms, tmSpecies, tmPoolTiers } from "../data/tms";
import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, SubstituteTag, TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, TypeBoostTag, MoveRestrictionBattlerTag, ExposedTag, DragonCheerTag, CritBoostTag, TrappedTag, TarShotTag } from "../data/battler-tags";
import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, SubstituteTag, TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, TypeBoostTag, MoveRestrictionBattlerTag, ExposedTag, DragonCheerTag, CritBoostTag, TrappedTag, TarShotTag, AutotomizedTag } from "../data/battler-tags";
import { WeatherType } from "../data/weather";
import { ArenaTagSide, NoCritTag, WeakenMoveScreenTag } from "../data/arena-tag";
import { Ability, AbAttr, StatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatStagesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, FieldMultiplyStatAbAttr, AddSecondStrikeAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr } from "../data/ability";
import { Ability, AbAttr, StatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatStagesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, FieldMultiplyStatAbAttr, AddSecondStrikeAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr, PostSetStatusAbAttr, applyPostSetStatusAbAttrs } from "../data/ability";
import PokemonData from "../system/pokemon-data";
import { BattlerIndex } from "../battle";
import { Mode } from "../ui/ui";
@ -1364,7 +1364,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
if (this.isFusion() && ability.hasAttr(NoFusionAbilityAbAttr)) {
return false;
}
if (this.scene?.arena.ignoreAbilities && ability.isIgnorable) {
const arena = this.scene?.arena;
if (arena.ignoreAbilities && arena.ignoringEffectSource !== this.getBattlerIndex() && ability.isIgnorable) {
return false;
}
if (this.summonData?.abilitySuppressed && !ability.hasAttr(UnsuppressableAbilityAbAttr)) {
@ -1426,11 +1427,23 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
return false;
}
/**
* Gets the weight of the Pokemon with subtractive modifiers (Autotomize) happening first
* and then multiplicative modifiers happening after (Heavy Metal and Light Metal)
* @returns the kg of the Pokemon (minimum of 0.1)
*/
getWeight(): number {
const weight = new Utils.NumberHolder(this.species.weight);
const autotomizedTag = this.getTag(AutotomizedTag);
let weightRemoved = 0;
if (!Utils.isNullOrUndefined(autotomizedTag)) {
weightRemoved = 100 * autotomizedTag!.autotomizeCount;
}
const minWeight = 0.1;
const weight = new Utils.NumberHolder(this.species.weight - weightRemoved);
// This will trigger the ability overlay so only call this function when necessary
applyAbAttrs(WeightMultiplierAbAttr, this, null, false, weight);
return weight.value;
return Math.max(minWeight, weight.value);
}
/**
@ -3365,7 +3378,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
}
if (asPhase) {
this.scene.unshiftPhase(new ObtainStatusEffectPhase(this.scene, this.getBattlerIndex(), effect, cureTurn, sourceText!, sourcePokemon!)); // TODO: are these bangs correct?
this.scene.unshiftPhase(new ObtainStatusEffectPhase(this.scene, this.getBattlerIndex(), effect, cureTurn, sourceText, sourcePokemon));
return true;
}
@ -3399,6 +3412,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
if (effect !== StatusEffect.FAINT) {
this.scene.triggerPokemonFormChange(this, SpeciesFormChangeStatusEffectTrigger, true);
applyPostSetStatusAbAttrs(PostSetStatusAbAttr, this, effect, sourcePokemon);
}
return true;

View File

@ -1,5 +1,4 @@
import { GachaType } from "./enums/gacha-types";
import { trainerConfigs } from "./data/trainer-config";
import { getBiomeHasProps } from "./field/arena";
import CacheBustedLoaderPlugin from "./plugins/cache-busted-loader-plugin";
import { SceneBase } from "./scene-base";
@ -21,7 +20,6 @@ import i18next from "i18next";
import { initStatsKeys } from "./ui/game-stats-ui-handler";
import { initVouchers } from "./system/voucher";
import { Biome } from "#enums/biome";
import { TrainerType } from "#enums/trainer-type";
import {initMysteryEncounters} from "#app/data/mystery-encounters/mystery-encounters";
export class LoadingScene extends SceneBase {
@ -208,14 +206,6 @@ export class LoadingScene extends SceneBase {
this.loadAtlas("trainer_f_back", "trainer");
this.loadAtlas("trainer_f_back_pb", "trainer");
Utils.getEnumValues(TrainerType).map(tt => {
const config = trainerConfigs[tt];
this.loadAtlas(config.getSpriteKey(), "trainer");
if (config.doubleOnly || config.hasDouble) {
this.loadAtlas(config.getSpriteKey(true), "trainer");
}
});
// Load character sprites
this.loadAtlas("c_rival_m", "character", "rival_m");
this.loadAtlas("c_rival_f", "character", "rival_f");

View File

@ -53,7 +53,49 @@ import terrain from "./terrain.json";
import modifierSelectUiHandler from "./modifier-select-ui-handler.json";
import moveTriggers from "./move-trigger.json";
import runHistory from "./run-history.json";
import mysteryEncounterMessages from "./mystery-encounter-messages.json";
import lostAtSea from "./mystery-encounters/lost-at-sea-dialogue.json";
import mysteriousChest from "./mystery-encounters/mysterious-chest-dialogue.json";
import mysteriousChallengers from "./mystery-encounters/mysterious-challengers-dialogue.json";
import darkDeal from "./mystery-encounters/dark-deal-dialogue.json";
import departmentStoreSale from "./mystery-encounters/department-store-sale-dialogue.json";
import fieldTrip from "./mystery-encounters/field-trip-dialogue.json";
import fieryFallout from "./mystery-encounters/fiery-fallout-dialogue.json";
import fightOrFlight from "./mystery-encounters/fight-or-flight-dialogue.json";
import safariZone from "./mystery-encounters/safari-zone-dialogue.json";
import shadyVitaminDealer from "./mystery-encounters/shady-vitamin-dealer-dialogue.json";
import slumberingSnorlax from "./mystery-encounters/slumbering-snorlax-dialogue.json";
import trainingSession from "./mystery-encounters/training-session-dialogue.json";
import theStrongStuff from "./mystery-encounters/the-strong-stuff-dialogue.json";
import pokemonSalesman from "./mystery-encounters/the-pokemon-salesman-dialogue.json";
import offerYouCantRefuse from "./mystery-encounters/an-offer-you-cant-refuse-dialogue.json";
import delibirdy from "./mystery-encounters/delibirdy-dialogue.json";
import absoluteAvarice from "./mystery-encounters/absolute-avarice-dialogue.json";
import aTrainersTest from "./mystery-encounters/a-trainers-test-dialogue.json";
import trashToTreasure from "./mystery-encounters/trash-to-treasure-dialogue.json";
import berriesAbound from "./mystery-encounters/berries-abound-dialogue.json";
import clowningAround from "./mystery-encounters/clowning-around-dialogue.json";
import partTimer from "./mystery-encounters/part-timer-dialogue.json";
import dancingLessons from "./mystery-encounters/dancing-lessons-dialogue.json";
import weirdDream from "./mystery-encounters/weird-dream-dialogue.json";
import theWinstrateChallenge from "./mystery-encounters/the-winstrate-challenge-dialogue.json";
import teleportingHijinks from "./mystery-encounters/teleporting-hijinks-dialogue.json";
import bugTypeSuperfan from "./mystery-encounters/bug-type-superfan-dialogue.json";
import funAndGames from "./mystery-encounters/fun-and-games-dialogue.json";
import uncommonBreed from "./mystery-encounters/uncommon-breed-dialogue.json";
import globalTradeSystem from "./mystery-encounters/global-trade-system-dialogue.json";
import expertPokemonBreeder from "./mystery-encounters/the-expert-pokemon-breeder-dialogue.json";
/**
* Dialogue/Text token injection patterns that can be used:
* - `$` will be treated as a new line for Message and Dialogue strings.
* - `@d{<number>}` will add a time delay to text animation for Message and Dialogue strings.
* - `@s{<sound_effect_key>}` will play a specified sound effect for Message and Dialogue strings.
* - `@f{<number>}` will fade the screen to black for the given duration, then fade back in for Message and Dialogue strings.
* - `{{<token>}}` (MYSTERY ENCOUNTERS ONLY) will auto-inject the matching dialogue token value that is stored in {@link IMysteryEncounter.dialogueTokens}.
* - (see [i18next interpolations](https://www.i18next.com/translation-function/interpolation)) for more details.
* - `@[<TextStyle>]{<text>}` (STATIC TEXT ONLY, NOT USEABLE WITH {@link UI.showText()} OR {@link UI.showDialogue()}) will auto-color the given text to a specified {@link TextStyle} (e.g. `TextStyle.SUMMARY_GREEN`).
*/
export const caEsConfig = {
ability,
abilityTriggers,
@ -110,4 +152,40 @@ export const caEsConfig = {
modifierSelectUiHandler,
moveTriggers,
runHistory,
mysteryEncounter: {
// DO NOT REMOVE
"unit_test_dialogue": "{{test}}{{test}} {{test{{test}}}} {{test1}} {{test\}} {{test\\}} {{test\\\}} {test}}",
mysteriousChallengers,
mysteriousChest,
darkDeal,
fightOrFlight,
slumberingSnorlax,
trainingSession,
departmentStoreSale,
shadyVitaminDealer,
fieldTrip,
safariZone,
lostAtSea,
fieryFallout,
theStrongStuff,
pokemonSalesman,
offerYouCantRefuse,
delibirdy,
absoluteAvarice,
aTrainersTest,
trashToTreasure,
berriesAbound,
clowningAround,
partTimer,
dancingLessons,
weirdDream,
theWinstrateChallenge,
teleportingHijinks,
bugTypeSuperfan,
funAndGames,
uncommonBreed,
globalTradeSystem,
expertPokemonBreeder
},
mysteryEncounterMessages
};

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -1237,6 +1237,6 @@
},
"poisonPuppeteer": {
"name": "Giftpuppenspiel",
"description": "Wenn Infamomo ein Ziel mit einer Attacke vergiftet, so wird dieses auch verwirrt."
"description": "Wenn das Pokémon ein Ziel mit einer Attacke vergiftet, so wird dieses auch verwirrt."
}
}

View File

@ -273,5 +273,9 @@
"INVERSE_BATTLE": {
"name": "Spieglein, Spieglein an der Wand",
"description": "Schließe die 'Umkehrkampf' Herausforderung ab"
},
"BREEDERS_IN_SPACE": {
"name": "Züchter im Weltall!",
"description": "Besiege die Pokémon-Züchter-Expertin im Stratosphären Biome."
}
}

View File

@ -14,6 +14,10 @@
"moneyWon": "Du gewinnst {{moneyAmount}} ₽!",
"moneyPickedUp": "Du hebst {{moneyAmount}} ₽ auf!",
"pokemonCaught": "{{pokemonName}} wurde gefangen!",
"pokemonObtained": "Du erhältst {{pokemonName}}!",
"pokemonBrokeFree": "Mist!\nDas Pokémon hat sich befreit!",
"pokemonFled": "Das wilde {{pokemonName}} ist geflohen!",
"playerFled": "Du bist vor dem wilden {{pokemonName}} geflohen!",
"addedAsAStarter": "{{pokemonName}} wurde als Starterpokémon hinzugefügt!",
"partyFull": "Dein Team ist voll. Möchtest du ein Pokémon durch {{pokemonName}} ersetzen?",
"pokemon": "Pokémon",
@ -49,6 +53,7 @@
"noPokeballTrainer": "Du kannst das Pokémon eines anderen Trainers nicht fangen!",
"noPokeballMulti": "Du kannst erst einen Pokéball werfen, wenn nur noch ein Pokémon übrig ist!",
"noPokeballStrong": "Das Ziel-Pokémon ist zu stark, um gefangen zu werden! Du musst es zuerst schwächen!",
"noPokeballMysteryEncounter": "You aren't able to\ncatch this Pokémon!",
"noEscapeForce": "Eine unsichtbare Kraft verhindert die Flucht.",
"noEscapeTrainer": "Du kannst nicht aus einem Trainerkampf fliehen!",
"noEscapePokemon": "{{moveName}} von {{pokemonName}} verhindert {{escapeVerb}}!",
@ -97,6 +102,7 @@
"congratulations": "Glückwunsch!",
"beatModeFirstTime": "{{speciesName}} hat den {{gameMode}} Modus zum ersten Mal beendet! Du erhältst {{newModifier}}!",
"eggSkipPrompt": "Zur Ei-Zusammenfassung springen?",
"mysteryEncounterAppeared": "Was ist das?",
"battlerTagsHealBlock": "{{pokemonNameWithAffix}} kann nicht geheilt werden, da die Heilung blockiert wird!",
"battlerTagsHealBlockOnRemove": "{{pokemonNameWithAffix}} kann wieder geheilt werden!"
}

View File

@ -77,23 +77,26 @@
"end_summit": "PMDDX Gipfel des Himmelturms",
"battle_rocket_grunt": "HGSS Vs. Team Rocket Rüpel",
"battle_aqua_magma_grunt": "ORAS Vs. Team Aqua & Magma",
"battle_galactic_grunt": "BDSP Vs. Team Galaktik Rüpel",
"battle_galactic_grunt": "SDLP Vs. Team Galaktik Rüpel",
"battle_plasma_grunt": "SW Vs. Team Plasma Rüpel",
"battle_flare_grunt": "XY Vs. Team Flare Rüpel",
"battle_aether_grunt": "SM Vs. Æther Foundation",
"battle_skull_grunt": "SM Vs. Team Skull Rüpel",
"battle_macro_grunt": "SWSH Vs. Trainer",
"battle_galactic_admin": "BDSP Vs. Team Galactic Commander",
"battle_star_grunt": "KAPU Vs. Team Star",
"battle_galactic_admin": "SDLP Vs. Team Galactic Commander",
"battle_skull_admin": "SM Vs. Team Skull Vorstand",
"battle_oleana": "SWSH Vs. Oleana",
"battle_oleana": "SWSH Vs. Olivia",
"battle_star_admin": "KAPU Vs. Team Star Boss",
"battle_rocket_boss": "USUM Vs. Giovanni",
"battle_aqua_magma_boss": "ORAS Vs. Team Aqua & Magma Boss",
"battle_galactic_boss": "BDSP Vs. Zyrus",
"battle_galactic_boss": "SDLP Vs. Zyrus",
"battle_plasma_boss": "S2W2 Vs. G-Cis",
"battle_flare_boss": "XY Vs. Flordelis",
"battle_aether_boss": "SM Vs. Samantha",
"battle_skull_boss": "SM Vs. Bromley",
"battle_macro_boss": "SWSH Vs. Rose",
"battle_star_boss": "KAPU Vs. Cosima",
"abyss": "PMD Erkundungsteam Himmel Dunkelkrater",
"badlands": "PMD Erkundungsteam Himmel Kargtal",
@ -108,17 +111,17 @@
"forest": "PMD Erkundungsteam Himmel Düsterwald",
"grass": "PMD Erkundungsteam Himmel Apfelwald",
"graveyard": "PMD Erkundungsteam Himmel Verwirrwald",
"ice_cave": "PMD Erkundungsteam Himmel Rieseneisberg",
"ice_cave": "Firel - -50°C",
"island": "PMD Erkundungsteam Himmel Schroffküste",
"jungle": "Lmz - Jungle",
"laboratory": "Firel - Laboratory",
"lake": "PMD Erkundungsteam Himmel Kristallhöhle",
"lake": "Lmz - Lake",
"meadow": "PMD Erkundungsteam Himmel Himmelsgipfel-Wald",
"metropolis": "Firel - Metropolis",
"mountain": "PMD Erkundungsteam Himmel Hornberg",
"plains": "PMD Erkundungsteam Himmel Himmelsgipfel-Prärie",
"power_plant": "PMD Erkundungsteam Himmel Weite Ampere-Ebene",
"ruins": "PMD Erkundungsteam Himmel Tiefes Ruinenverlies",
"plains": "Firel - Route 888",
"power_plant": "Firel - The Klink",
"ruins": "Lmz - Ancient Ruins",
"sea": "Andr06 - Marine Mystique",
"seabed": "Firel - Seabed",
"slum": "Andr06 - Sneaky Snom",
@ -128,7 +131,7 @@
"tall_grass": "PMD Erkundungsteam Himmel Nebelwald",
"temple": "PMD Erkundungsteam Himmel Ägishöhle",
"town": "PMD Erkundungsteam Himmel Zufälliges Dungeon-Theme 3",
"volcano": "PMD Erkundungsteam Himmel Dunsthöhle",
"volcano": "Firel - Twisturn Volcano",
"wasteland": "PMD Erkundungsteam Himmel Verborgenes Hochland",
"encounter_ace_trainer": "SW Trainerblicke treffen sich (Ass-Trainer)",
"encounter_backpacker": "SW Trainerblicke treffen sich (Backpacker)",
@ -146,5 +149,11 @@
"encounter_youngster": "SW Trainerblicke treffen sich (Knirps)",
"heal": "SW Pokémon-Heilung",
"menu": "PMD Erkundungsteam Himmel Willkommen in der Welt der Pokémon!",
"title": "PMD Erkundungsteam Himmel Top-Menü-Thema"
"title": "PMD Erkundungsteam Himmel Top-Menü-Thema",
"mystery_encounter_weird_dream": "PMD Erkundungsteam Himmel Zeitturmspitze",
"mystery_encounter_fun_and_games": "PMD Erkundungsteam Himmel Gildenmeister Knuddeluff",
"mystery_encounter_gen_5_gts": "SW GTS",
"mystery_encounter_gen_6_gts": "XY GTS",
"mystery_encounter_delibirdy": "Firel - DeliDelivery!"
}

View File

@ -53,7 +53,49 @@ import terrain from "./terrain.json";
import modifierSelectUiHandler from "./modifier-select-ui-handler.json";
import moveTriggers from "./move-trigger.json";
import runHistory from "./run-history.json";
import mysteryEncounterMessages from "./mystery-encounter-messages.json";
import lostAtSea from "./mystery-encounters/lost-at-sea-dialogue.json";
import mysteriousChest from "./mystery-encounters/mysterious-chest-dialogue.json";
import mysteriousChallengers from "./mystery-encounters/mysterious-challengers-dialogue.json";
import darkDeal from "./mystery-encounters/dark-deal-dialogue.json";
import departmentStoreSale from "./mystery-encounters/department-store-sale-dialogue.json";
import fieldTrip from "./mystery-encounters/field-trip-dialogue.json";
import fieryFallout from "./mystery-encounters/fiery-fallout-dialogue.json";
import fightOrFlight from "./mystery-encounters/fight-or-flight-dialogue.json";
import safariZone from "./mystery-encounters/safari-zone-dialogue.json";
import shadyVitaminDealer from "./mystery-encounters/shady-vitamin-dealer-dialogue.json";
import slumberingSnorlax from "./mystery-encounters/slumbering-snorlax-dialogue.json";
import trainingSession from "./mystery-encounters/training-session-dialogue.json";
import theStrongStuff from "./mystery-encounters/the-strong-stuff-dialogue.json";
import pokemonSalesman from "./mystery-encounters/the-pokemon-salesman-dialogue.json";
import offerYouCantRefuse from "./mystery-encounters/an-offer-you-cant-refuse-dialogue.json";
import delibirdy from "./mystery-encounters/delibirdy-dialogue.json";
import absoluteAvarice from "./mystery-encounters/absolute-avarice-dialogue.json";
import aTrainersTest from "./mystery-encounters/a-trainers-test-dialogue.json";
import trashToTreasure from "./mystery-encounters/trash-to-treasure-dialogue.json";
import berriesAbound from "./mystery-encounters/berries-abound-dialogue.json";
import clowningAround from "./mystery-encounters/clowning-around-dialogue.json";
import partTimer from "./mystery-encounters/part-timer-dialogue.json";
import dancingLessons from "./mystery-encounters/dancing-lessons-dialogue.json";
import weirdDream from "./mystery-encounters/weird-dream-dialogue.json";
import theWinstrateChallenge from "./mystery-encounters/the-winstrate-challenge-dialogue.json";
import teleportingHijinks from "./mystery-encounters/teleporting-hijinks-dialogue.json";
import bugTypeSuperfan from "./mystery-encounters/bug-type-superfan-dialogue.json";
import funAndGames from "./mystery-encounters/fun-and-games-dialogue.json";
import uncommonBreed from "./mystery-encounters/uncommon-breed-dialogue.json";
import globalTradeSystem from "./mystery-encounters/global-trade-system-dialogue.json";
import expertPokemonBreeder from "./mystery-encounters/the-expert-pokemon-breeder-dialogue.json";
/**
* Dialogue/Text token injection patterns that can be used:
* - `$` will be treated as a new line for Message and Dialogue strings.
* - `@d{<number>}` will add a time delay to text animation for Message and Dialogue strings.
* - `@s{<sound_effect_key>}` will play a specified sound effect for Message and Dialogue strings.
* - `@f{<number>}` will fade the screen to black for the given duration, then fade back in for Message and Dialogue strings.
* - `{{<token>}}` (MYSTERY ENCOUNTERS ONLY) will auto-inject the matching dialogue token value that is stored in {@link IMysteryEncounter.dialogueTokens}.
* - (see [i18next interpolations](https://www.i18next.com/translation-function/interpolation)) for more details.
* - `@[<TextStyle>]{<text>}` (STATIC TEXT ONLY, NOT USEABLE WITH {@link UI.showText()} OR {@link UI.showDialogue()}) will auto-color the given text to a specified {@link TextStyle} (e.g. `TextStyle.SUMMARY_GREEN`).
*/
export const deConfig = {
ability,
abilityTriggers,
@ -110,4 +152,40 @@ export const deConfig = {
modifierSelectUiHandler,
moveTriggers,
runHistory,
mysteryEncounter: {
// DO NOT REMOVE
"unit_test_dialogue": "{{test}}{{test}} {{test{{test}}}} {{test1}} {{test\}} {{test\\}} {{test\\\}} {test}}",
mysteriousChallengers,
mysteriousChest,
darkDeal,
fightOrFlight,
slumberingSnorlax,
trainingSession,
departmentStoreSale,
shadyVitaminDealer,
fieldTrip,
safariZone,
lostAtSea,
fieryFallout,
theStrongStuff,
pokemonSalesman,
offerYouCantRefuse,
delibirdy,
absoluteAvarice,
aTrainersTest,
trashToTreasure,
berriesAbound,
clowningAround,
partTimer,
dancingLessons,
weirdDream,
theWinstrateChallenge,
teleportingHijinks,
bugTypeSuperfan,
funAndGames,
uncommonBreed,
globalTradeSystem,
expertPokemonBreeder
},
mysteryEncounterMessages
};

View File

@ -715,12 +715,16 @@
"encounter": {
"1": "Achtung hier ist Endstation für dich!",
"2": "Du bist ein Trainer, oder? Wir von MC Wertpapiere wissen so etwas.\n$Ich fürchte, das gibt dir trotzdem nicht das Recht, sich in unsere Arbeit einzumischen.",
"3": "Ich bin von MC Versicherungen! Hast du eine Lebensversicherung?"
"3": "Ich bin von MC Versicherungen! Hast du eine Lebensversicherung?",
"4": "Ich habe dich gefunden! Das bedeutet es ist Zeit für einen Pokémon-Kampf!",
"5": "Eine Standpauke von Frau Olivia ist schlimmer als alles, was Sie tun können!"
},
"victory": {
"1": "Ich habe keine andere Wahl, als respektvoll zurückzutreten.",
"2": "Mein Erspartes aufzugeben bringt mich in die roten Zahlen...",
"3": "Okay zurück an die Arbeit. Versicherungen verkauft sich nicht von alleine."
"3": "Okay zurück an die Arbeit. Versicherungen verkauft sich nicht von alleine.",
"4": "Ich habe sogar meine Pokémon ausgetauscht...",
"5": "Kämpfen hat nicht funktioniert... Jetzt können wir nur noch rennen!"
}
},
"oleana": {
@ -735,6 +739,73 @@
"3": "Ich bin eine müde Olivia... Ob es Macro Cosmos Betten gibt?"
}
},
"star_grunt": {
"encounter": {
"1": "Wir sind von Team Star, wo jeder nach den Sternen greifen kann!",
"2": "Wir werden mit voller Kraft auf dich losgehen - Hasta la vistar! ★",
"3": "Könntest du bitte wieder abzischen? Sonst muss ich dich davonjagen. Aus reinem Selbstschutz!",
"4": "Es tut mir furchtbar leid, aber wenn du nicht umkehrst, könnte es ungemütlich für dich werden.",
"4_female": "Es tut mir furchtbar leid, aber wenn du nicht umkehrst, könnte es ungemütlich für dich werden.",
"5": "Och nee, nicht noch so ein Clown..."
},
"victory": {
"1": "Jetzt bin ich die Person, die Sterne sieht...",
"2": "Jemand wie du wäre bei Team Star wahrscheinlich im Nullkommanichts an der Spitze.$Alle hätten Angst vor dir. Trotzdem...",
"3": "Da war meine Selbstverteidigung wohl nicht gut genug...",
"4": "H-hasta la vistar... ★",
"5": "Als neues Mitglied bei Team Star bekommt man echt nur die Drecksarbeit ab..."
}
},
"giacomo": {
"encounter": {
"1": "Du willst dich echt mit Team Star anlegen? Bist du lebensmüde, oder was?",
"2": "Weil ich so nett bin, leg ich zu deinem Abgang auch ein fettes Requiem auf!$Lass uns die Party in Schwung bringen"
},
"victory": {
"1": " Besser hätte ich es auch nicht sagen können...",
"2": "Uff, da hab ich schon bessere Shows gegeben... Schade, aber verloren ist verloren."
}
},
"mela": {
"encounter": {
"1": "Du bist also diese Pfeife, die sich unbedingt mit uns anlegen will...$Dir werd ich zeigen, was mit Leuten passiert, die sich mit uns anlegen!",
"2": "Yeah, lassen wirs krachen!"
},
"victory": {
"1": "Uff, ich hab echt versagt... Das wars dann wohl...",
"2": "Ich... brannte so sehr auf diesen Kampf. Doch jetzt ist meine Flamme erloschen..."
}
},
"atticus": {
"encounter": {
"1": "hr habt Team Star Leid angetan, unverschämter Schurke! Mein Gift soll Euer Niedergang sein!",
"2": "Eure Bereitschaft zum Duell erfreut mich! Möge der Kampf ein ehrwürdiger sein!"
},
"victory": {
"1": "Meine Gefährten... Vergebt mir...",
"2": "Ich habe eine klare Niederlage erlitten, bei der Groll und Bitterkeit fehl am Platz wären."
}
},
"ortega": {
"encounter": {
"1": "Wenn ich mit dir fertig bin, wirst du heulend nach Hause rennen!",
"2": "Ich werde gewinnen, also spar dir deinen überheblichen Auftritt!"
},
"victory": {
"1": "Was?! Wie konnte ich nur verlieren? Warum? Warum nur?!",
"2": "Graaaah! Du bist viel zu stark, das ist so was von unfair!"
}
},
"eri": {
"encounter": {
"1": "Wer auch immer es auf Team Star abgesehen hat, wird zerschmettert!",
"2": "Ich kann genauso gut austeilen wie einstecken! Wer am Ende noch steht, gewinnt."
},
"victory": {
"1": "Leute, es tut mir so leid...",
"2": "Ich habe alles gegeben... Ich bereue nichts..."
}
},
"rocket_boss_giovanni_1": {
"encounter": {
"1": "Ich bin beeindruckt, du hast es bis hierher geschafft!\n$Ich bin Giovanni, der Anführer von Team Rocket!\n$Wir regieren den Untergrund von Kanto!\n$Und wir lassen sicherlich nicht zu, dass ein Kind uns aufhält!"
@ -933,6 +1004,138 @@
"1": "Ich nehme an, es muss den Anschein haben, dass ich etwas Schreckliches tue.\n$Ich erwarte nicht, dass du es verstehst. Aber ich muss der Galar-Region grenzenlose Energie\n$bereitstellen, um ewigen Wohlstand zu gewährleisten."
}
},
"star_boss_penny_1": {
"encounter": {
"1": "Ich bin Team Stars Big Boss. Mein Name ist Cassiopeia...$Die Gründerin von Team Star ist kampfbereit! Verneigt euch vor meiner unermesslichen Kraft!"
},
"victory": {
"1": "... ... .."
},
"defeat": {
"1": "Heh..."
}
},
"star_boss_penny_2": {
"encounter": {
"1": "Ich werde mich in diesem Kampf nicht zurückhalten! Ich werde dem Kodex von Team Star treu bleiben!$Unsere Evoli-Power verwandelt euch in Sternenstaub!"
},
"victory": {
"1": "Es ist vorbei..."
},
"defeat": {
"1": "Du bist unfassbar stark. Kein Wunder, dass die anderen Bosse gegen dich verloren haben..."
}
},
"stat_trainer_buck": {
"encounter": {
"1": "...Ich sag dir jetzt mal was. Ich bin echt stark. Tue überrascht!",
"2": "Ich fühle, wie meine Pokémon in ihren Pokébällen zittern!"
},
"victory": {
"1": "Hehehehe! So heiß bist du!",
"2": "Hehehehe! So heiß bist du!"
},
"defeat": {
"1": "Whoa! Du scheinst ja wirklich erschöpft zu sein.",
"2": "Whoa! Du scheinst ja wirklich erschöpft zu sein."
}
},
"stat_trainer_cheryl": {
"encounter": {
"1": "Meine Pokémon können es kaum erwarten, zu kämpfen.",
"2": "Ich sollte dich warnen, meine Pokémon können ziemlich wild sein."
},
"victory": {
"1": "Ein gutes Verhältnis von Angriff und Verteidigung... Das ist nicht einfach.",
"2": "Ein gutes Verhältnis von Angriff und Verteidigung... Das ist nicht einfach."
},
"defeat": {
"1": "Brauchen deine Pokémon Heilung?",
"2": "Brauchen deine Pokémon Heilung?"
}
},
"stat_trainer_marley": {
"encounter": {
"1": "...OK. Ich werde mein Bestes geben.",
"2": "...OK. Ich werde nicht verlieren...!"
},
"victory": {
"1": "... Awww.",
"2": "... Awww."
},
"defeat": {
"1": "... Auf Wiedersehen.",
"2": "... Auf Wiedersehen."
}
},
"stat_trainer_mira": {
"encounter": {
"1": "Du wirst von Mira schockiert sein!",
"2": "Mira wird dir zeigen, dass Mira sich nicht mehr verirrt!"
},
"victory": {
"1": "Mira wundern, ob sie in diesem Land weit kommen kann.",
"2": "Mira wundern, ob sie in diesem Land weit kommen kann."
},
"defeat": {
"1": "Mira wuss, dass sie gewinnen würde!",
"2": "Mira wuss, dass sie gewinnen würde!"
}
},
"stat_trainer_riley": {
"encounter": {
"1": "Kämpfe sind unsere Art der Begrüßung.",
"2": "Wir setzen alles daran, deine Pokémon zu besiegen."
},
"victory": {
"1": "Manchmal kämpfen wir, und manchmal schließen wir uns zusammen...\n$Es ist großartig, wie Trainer interagieren können.",
"2": "Manchmal kämpfen wir, und manchmal schließen wir uns zusammen...\n$Es ist großartig, wie Trainer interagieren können."
},
"defeat": {
"1": "Du hast dich gut geschlagen. Bis zum nächsten Mal.",
"2": "Du hast dich gut geschlagen. Bis zum nächsten Mal."
}
},
"winstrates_victor": {
"encounter": {
"1": "Das ist der Kampfgeist den ich sehen will! Ich mag dich!"
},
"victory": {
"1": "Ahh! Du bist stärker als ich dachte!"
}
},
"winstrates_victoria": {
"encounter": {
"1": "Mein Gott! Bist du nicht etwas jung?\n$Du musst ein ziemlich guter Trainer sein, um meinen Mann zu besiegen.\n$Jetzt bin ich wohl an der Reihe!"
},
"victory": {
"1": "Waas? Wie stark bist du denn?"
}
},
"winstrates_vivi": {
"encounter": {
"1": "Du bist stärker als Mama? Wow! Aber ich bin auch stark! Wirklich! Ehrlich!"
},
"victory": {
"1": "Huh? Habe ich wirklich verloren?\nSchnief... Omaaa!"
}
},
"winstrates_vicky": {
"encounter": {
"1": "Wie kannst du es wagen, meine kostbare Enkelin zum Weinen zu bringen!\n$Ich sehe, ich muss dir eine Lektion erteilen.\n$Mach dich bereit, eine Niederlage zu erleiden!"
},
"victory": {
"1": "Wow! So stark!\nMeine Enkelin hat nicht gelogen."
}
},
"winstrates_vito": {
"encounter": {
"1": "Ich habe zusammen mit meiner ganzen Familie trainiert, mit jedem von uns!\n$Ich verliere gegen niemanden!"
},
"victory": {
"1": "Ich war besser als jeder in meiner Familie. Ich habe noch nie verloren..."
}
},
"brock": {
"encounter": {
"1": "Meine Expertise in Bezug auf Gesteins-Pokémon wird dich besiegen! Komm schon!",

View File

@ -11,6 +11,7 @@
"gachaTypeLegendary": "Erhöhte Chance auf legendäre Eier.",
"gachaTypeMove": "Erhöhte Chance auf Eier mit seltenen Attacken.",
"gachaTypeShiny": "Erhöhte Chance auf schillernde Eier.",
"eventType": "Geheimnisvolles Ereignis",
"selectMachine": "Wähle eine Maschine.",
"notEnoughVouchers": "Du hast nicht genug Ei-Gutscheine!",
"tooManyEggs": "Du hast schon zu viele Eier!",
@ -23,4 +24,4 @@
"moveUPGacha": "Mehr\nEi-Attacken!",
"shinyUPGacha": "Mehr\nSchillernde!",
"legendaryUPGacha": "erscheint\nöfter!"
}
}

View File

@ -8,5 +8,7 @@
"lockRaritiesDesc": "Setze die Seltenheit der Items fest. (Beeinflusst die Rollkosten).",
"checkTeamDesc": "Überprüfe dein Team or nutze Formänderungsitems.",
"rerollCost": "{{formattedMoney}}₽",
"itemCost": "{{formattedMoney}}₽"
}
"itemCost": "{{formattedMoney}}₽",
"continueNextWaveButton": "Fortfahren",
"continueNextWaveDescription": "Zur nächsten Welle fortfahren."
}

View File

@ -68,6 +68,20 @@
"BaseStatBoosterModifierType": {
"description": "Erhöht den {{stat}} Basiswert des Trägers um 10%. Das Stapellimit erhöht sich, je höher dein IS-Wert ist."
},
"PokemonBaseStatTotalModifierType": {
"name": "Pottrottsaft",
"description": "{{increaseDecrease}} alle Basiswerte des Trägers um {{statValue}}. Du wurdest von Pottrott {{blessCurse}}.",
"extra": {
"increase": "Erhöht",
"decrease": "Verringert",
"blessed": "gesegnet",
"cursed": "verflucht"
}
},
"PokemonBaseStatFlatModifierType": {
"name": "Spezialität",
"description": "Erhöht den {{stats}}-Wert des Trägers um {{statValue}}. Nach einem komischen Traum gefunden."
},
"AllPokemonFullHpRestoreModifierType": {
"description": "Stellt 100% der KP aller Pokémon her."
},
@ -401,7 +415,13 @@
"ENEMY_FUSED_CHANCE": {
"name": "Fusionsmarke",
"description": "Fügt eine 1%ige Chance hinzu, dass ein wildes Pokémon eine Fusion ist."
}
},
"MYSTERY_ENCOUNTER_SHUCKLE_JUICE": { "name": "Pottrottsaft" },
"MYSTERY_ENCOUNTER_BLACK_SLUDGE": { "name": "Giftschleim", "description": "Der Geruch ist so stark, dass die Geschäfte ihre Items nur zu einem stark erhöhten Preis verkaufen." },
"MYSTERY_ENCOUNTER_MACHO_BRACE": { "name": "Machoschiene", "description": "Das Besiegen eines Pokémon gewährt dem Besitzer einen Machoschiene-Stapel. Jeder Stapel steigert die Werte leicht, mit einem zusätzlichen Bonus bei maximalen Stapeln." },
"MYSTERY_ENCOUNTER_OLD_GATEAU": { "name": "Spezialität", "description": "Erhöht den {{stats}}-Wert des Trägers um {{statValue}}." },
"MYSTERY_ENCOUNTER_GOLDEN_BUG_NET": { "name": "Golden Bug Net", "description": "Erhöht die Chance, dass der Besitzer mehr Pokémon vom Typ Käfer findet. Hat ein seltsames Gewicht." }
},
"SpeciesBoosterItem": {
"LIGHT_BALL": {

View File

@ -65,6 +65,7 @@
"suppressAbilities": "Die Fähigkeit von {{pokemonName}} wirkt nicht mehr!",
"revivalBlessing": "{{pokemonName}} ist wieder fit und kampfbereit!",
"swapArenaTags": "{{pokemonName}} hat die Effekte, die auf den beiden Seiten des Kampffeldes wirken, miteinander getauscht!",
"chillyReception": "{{pokemonName}} erzählt einen schlechten Witz, der nicht besonders gut ankommt...",
"exposedMove": "{{pokemonName}} erkennt {{targetPokemonName}}!",
"safeguard": "{{targetName}} wird durch Bodyguard geschützt!",
"afterYou": "{{targetName}} lässt sich auf Galanterie ein!"

View File

@ -3129,7 +3129,7 @@
},
"auraWheel": {
"name": "Aura-Rad",
"effect": "Mithilfe der in den Backentaschen gespeicherten Energie greift der Anwender an und erhöht seine Initiative. Der Typ der Attacke hängt von Morpekos Form ab."
"effect": "Mithilfe der in den Backentaschen gespeicherten Energie greift der Anwender an und erhöht seine Initiative. Wenn dies von Morpeko verwendet wird hängt der Typ der Attacke von dessen Form ab."
},
"breakingSwipe": {
"name": "Breitseite",

View File

@ -0,0 +1,7 @@
{
"paid_money": "Du bezahlst {{amount, number}} ₽.",
"receive_money": "Du erhältst {{amount, number}} ₽!",
"affects_pokedex": "Beeinflusst Pokédex-Daten",
"cancel_option": "Zurück zur Auswahl der Begegnungsoptionen.",
"view_party_button": "Team überprüfen"
}

View File

@ -0,0 +1,47 @@
{
"intro": "Ein sehr starker Trainer kommt auf dich zu...",
"buck": {
"intro_dialogue": "Yo, Trainer! Mein Name ist Avenaro.$Ich habe ein super Angebot für einen starken Trainer wie dich!$Ich trage zwei seltene Pokémon-Eier bei mir, aber ich möchte, dass sich jemand anderes um eines kümmert.$Wenn du mir beweisen kannst, dass du ein starker Trainer bist, werde ich dir das seltenere Ei geben!",
"accept": "Wohooo! Ich bin Feuer und Flamme!",
"decline": "Manno, es sieht so aus, als wäre dein Team nicht in Bestform.$Hier, lass mich dir helfen."
},
"cheryl": {
"intro_dialogue": "Hallo mein Name ist Raissa, ich habe eine besondere Bitte an dich, einen starken Trainer.$Ich trage zwei seltene Pokémon-Eier bei mir, aber ich möchte, dass sich jemand anderes um eines kümmert.$Wenn du mir beweisen kannst, dass du ein starker Trainer bist, werde ich dir das seltenere Ei geben!",
"accept": "Ich hoffe, du bist bereit!",
"decline": "Ich verstehe, es sieht so aus, als wäre dein Team nicht in der besten Verfassung.$Hier, lass mich dir helfen."
},
"marley": {
"intro_dialogue": "...@d{64} Ich bin Charlie.$Ich habe ein Angebot für dich...$Ich trage zwei Pokémon-Eier bei mir, aber ich möchte, dass sich jemand anderes um eines kümmert.$Wenn du stärker bist als ich, werde ich dir das seltenere Ei geben.",
"accept": "...So ist das also.",
"decline": "...Deine Pokémon sehen verletzt aus...Lass mich helfen."
},
"mira": {
"intro_dialogue": "Hi, ich bin Orisa!$Ich habe eine Bitte an dich, einen starken Trainer.$Ich trage zwei seltene Pokémon-Eier bei mir, aber ich möchte, dass sich jemand anderes um eines kümmert.$Wenn du mir beweisen kannst, dass du ein starker Trainer bist, werde ich dir das seltenere Ei geben!",
"accept": "Du wirst Orisa herausfordern? Juhu!",
"decline": "Aww, kein Kampf? Das ist okay!$Hier, Orisa wird dein Team heilen!"
},
"riley": {
"intro_dialogue": "Ich Urs, ich habe eine Bitte an dich, einen starken Trainer.$Ich trage zwei seltene Pokémon-Eier bei mir, aber ich möchte, dass sich jemand anderes um eines kümmert.$Wenn du mir beweisen kannst, dass du ein starker Trainer bist, werde ich dir das seltenere Ei geben!",
"accept": "Dieser Blick...Lass uns das machen.",
"decline": "Ich verstehe, dein Team sieht geschlagen aus.$Hier, lass mich dir helfen."
},
"title": "Ein Trainer-Test",
"description": "Es scheint als würde dieser Trainer dir ein Ei geben, egal wie du dich entscheidest. Wenn du es jedoch schaffst, diesen starken Trainer zu besiegen, wirst du ein viel selteneres Ei erhalten.",
"query": "Was wirst du tun?",
"option": {
"1": {
"label": "Die Herausforderung annehmen",
"tooltip": "(-) Schwerer Kampf\n(+) Erhalte ein @[TOOLTIP_TITLE]{Sehr seltenes Ei}"
},
"2": {
"label": "Die Herausforderung ablehnen",
"tooltip": "(+) Team wird geheilt\n(+) Erhalte ein @[TOOLTIP_TITLE]{Ei}"
}
},
"eggTypes": {
"rare": "seltenes Ei",
"epic": "episches Ei",
"legendary": "legendäres Ei"
},
"outro": "{{statTrainerName}} gibt dir ein {{eggType}}!"
}

View File

@ -0,0 +1,25 @@
{
"intro": "Ein {{greedentName}} überfällt dich und stiehlt die Beeren deines Teams!",
"title": "Absoluter Geiz",
"description": "Der {{greedentName}} hat dich total überrascht und all deine Beeren gestohlen!\nEs sieht so aus, als ob das {{greedentName}} sie gleich essen würde, aber dann hält es inne und sieht dich interessiert an.",
"query": "Was wirst du tun?",
"option": {
"1": {
"label": "Kampf beginnen",
"tooltip": "(-) Schwerer Kampf\n(+) Belohnungen aus seinem Beerenversteck",
"selected": "Der {{greedentName}} füllt seine Backen und bereitet sich auf den Kampf vor!",
"boss_enraged": "{{greedentName}} Liebe für Essen hat es aufgebracht!",
"food_stash": "Es scheint, als ob das {{greedentName}} ein riesiges Nahrungslager bewacht hat!$Jedes Pokémon in deinem Team erhält {{foodReward}}!"
},
"2": {
"label": "Verhandeln",
"tooltip": "(+) Einige Beeren zurückbekommen",
"selected": "Deine Bitte berührt das {{greedentName}}.$Es gibt dir nicht alle Beeren zurück, aber wirft dir trotzdem ein paar zu."
},
"3": {
"label": "Beeren überlassen",
"tooltip": "(-) Alle Beeren verlieren\n(?) Das {{greedentName}} wird dich mögen",
"selected": "Das {{greedentName}} verschlingt den gesamten Beerenversteck in einem Blitz!$Es klopft sich auf den Bauch und sieht dich dankbar an.$Vielleicht könntest du ihm auf deinem Abenteuer mehr Beeren geben...$@s{level_up_fanfare}Das {{greedentName}} möchte sich deiner Gruppe anschließen!"
}
}
}

View File

@ -0,0 +1,26 @@
{
"intro": "Du wirst von einem reich aussehenden Jungen aufgehalten.",
"speaker": "Reicher Junge",
"intro_dialogue": "Guten Tag!$Ich kann nicht anders, als zu bemerken, dass dein\n{{strongestPokemon}} einfach göttlich aussieht!$Ich habe schon immer ein Pokémon wie dieses haben wollen!$Ich würde es dir großzügig bezahlen, und dir auch diesen alten Kram geben!",
"title": "Ein Angebot das du nicht ablehnen kannst",
"description": "Dir wird ein @[TOOLTIP_TITLE]{Schillerpin} und {{price, money}} für dein {{strongestPokemon}} angeboten!\nEs ist ein extrem gutes Angebot, aber kannst du es wirklich ertragen, dich von einem so starken Teammitglied zu trennen?",
"query": "Was wirst du tun?",
"option": {
"1": {
"label": "Den Deal annehmen",
"tooltip": "(-) Verliere {{strongestPokemon}}\n(+) Erhalte einen @[TOOLTIP_TITLE]{Schillerpin}\n(+) Erhalte {{price, money}}",
"selected": "Wunderbar!@d{32} Komm mit, {{strongestPokemon}}!$Es ist Zeit, dich allen im Yachtclub zu zeigen!$Die werden so neidisch sein!"
},
"2": {
"label": "Das Kind erpressen",
"tooltip": "(+) {{option2PrimaryName}} setzt {{moveOrAbility}} ein\n(+) Erhalte {{price, money}}",
"tooltip_disabled": "Dein Pokémon muss bestimmte Attacken oder Fähigkeiten haben, um diese Option zu wählen",
"selected": "Mein Gott, wir werden ausgeraubt, {{liepardName}}!$Du wirst von meinen Anwälten hören!"
},
"3": {
"label": "Weggehen",
"tooltip": "(-) Keine Belohnung",
"selected": "Was ein beschissener Tag...$Ach, was solls. Lass uns zurück zum Yachtclub gehen, {{liepardName}}."
}
}
}

View File

@ -0,0 +1,26 @@
{
"intro": "Da ist ein riesiger Beerenstrauch in der Nähe dieses Pokémons!",
"title": "Überall Beeren",
"description": "Es scheint, als ob ein starkes Pokémon einen Beerenstrauch bewacht. Ein Kampf wäre der direkte Weg, aber es sieht stark aus. Vielleicht könnte ein schnelles Pokémon ein paar Beeren schnappen, ohne erwischt zu werden?",
"query": "Was wirst du tun?",
"berries": "Berren!",
"option": {
"1": {
"label": "Kampf beginnen",
"tooltip": "(-) Schwerer Kampf\n(+) Beeren erhalten",
"selected": "Du trittst dem Pokémon ohne Furcht entgegen."
},
"2": {
"label": "Zum Strauch rennen",
"tooltip": "(-) {{fastestPokemon}} nutzt seine Geschwindigkeit\n(+) Beeren erhalten",
"selected": "Dein {{fastestPokemon}} rennt zum Strauch!$Es schafft es, {{numBerries}} zu schnappen, bevor das {{enemyPokemon}} reagieren kann!$Du ziehst dich schnell mit deiner neuen Beute zurück.",
"selected_bad": "Dein {{fastestPokemon}} rennt zum Strauch!$Oh nein! Das {{enemyPokemon}} war schneller und hat den Weg blockiert!",
"boss_enraged": "Das gegnerische {{enemyPokemon}} ist wütend geworden!"
},
"3": {
"label": "Verlassen",
"tooltip": "(-) Keine Belohnung",
"selected": "Du lässt das starke Pokémon mit seinem Item zurück und gehst weiter."
}
}
}

View File

@ -0,0 +1,40 @@
{
"intro": "Ein ungewöhnlicher Trainer mit allerlei Käfer-Schnickschnack versperrt dir den Weg!",
"intro_dialogue": "Hey, Trainer! Ich bin auf einer Mission, um die seltensten Käfer-Pokémon zu finden!$Du musst Käfer-Pokémon auch lieben, oder? Jeder liebt Käfer-Pokémon!",
"title": "Der Käfersammler-Superfan",
"speaker": "Käfersammler-Superfan",
"description": "Der Trainer plappert drauf los, ohne auf eine Antwort zu warten...\nEs scheint, als gäbe es nur einen Weg, um aus dieser Situation herauszukommen... Die Aufmerksamkeit des Trainers zu erregen!",
"query": "Was wirst du tun?",
"option": {
"1": {
"label": "Pokémon-Kampf",
"tooltip": "(-) Herausfordernder Kampf\n(+) Einem Pokémon eine Käfer-Attacke beibringen",
"selected": "Ein Pokémon-Kampf? Meine Käfer-Pokémon sind mehr als bereit für dich!"
},
"2": {
"label": "Käfer-Pokémon zeigen",
"tooltip": "(+) Erhalte ein Geschenk",
"disabled_tooltip": "Du brauchst mindestens 1 Käfer-Pokémon in deinem Team, um das auszuwählen.",
"selected": "Du zeigst dem Trainer all deine Käfer-Pokémon...",
"selected_0_to_1": "Huh? Du hast nur {{numBugTypes}} Käfer-Pokémon...$Ich verschwende hier meine Zeit...",
"selected_2_to_3": "Hey, du hast {{numBugTypes}}! Nicht schlecht.$Hier, das könnte dir auf deiner Reise helfen, mehr zu fangen!",
"selected_4_to_5": "Was? Du hast {{numBugTypes}}? Nicht schlecht!$Du bist noch nicht ganz auf meinem Level, aber ich kann mich in dir erkennen! $Nimm das, mein junger Padawan!",
"selected_6": "Wow! {{numBugTypes}}!$Du musst Käfer-Pokémon fast so sehr lieben wie ich!$Hier, nimm das als Zeichen unserer Kameradschaft!"
},
"3": {
"label": "Verschenke ein Käfer-Item",
"tooltip": "(-) Du gibst dem Trainer ein {{requiredBugItems}}\n(+) Erhalte ein Geschenk",
"disabled_tooltip": "Du brauchst ein {{requiredBugItems}}, um das auszuwählen.",
"select_prompt": "Wählen Sie ein Item aus, um es zu verschenken.",
"invalid_selection": "Das Pokémon hat kein solches Item.",
"selected": "Du gibst {{selectedItem}} an dem Trainer .",
"selected_dialogue": "Wow! {{selectedItem}}, für mich? Du bist nicht so schlecht, Junge!$Als Zeichen meiner Anerkennung möchte ich, dass du dieses besondere Geschenk bekommst!$Es wurde in meiner Familie weitergegeben, und jetzt möchte ich, dass du es hast!"
}
},
"battle_won": "Dein Wissen und Können waren perfekt, um unsere Schwächen auszunutzen!$Als Gegenleistung für die wertvolle Lektion, erlaube mir, einem deiner Pokémon eine Käfer-Attacke beizubringen!",
"teach_move_prompt": "Wähle eine Attacke aus die du deinem Pokémon beibringen möchtest.",
"confirm_no_teach": "Bist du sicher, dass du keine dieser großartigen Attacken lernen möchtest?",
"outro": "Ich sehe großartige Käfer-Pokémon in deiner Zukunft! Mögen sich unsere Wege wieder kreuzen!$Mach's gut!",
"numBugTypes_one": "{{count}} Käfer-Pokémon",
"numBugTypes_other": "{{count}} Käfer-Pokémon"
}

View File

@ -0,0 +1,35 @@
{
"intro": "Es ist...@d{64} ein Clown?",
"speaker": "Clown",
"intro_dialogue": "Du tollpatschiger Trottel, bereite dich auf einen brillanten Kampf vor!\nDu wirst von diesem prügelnden Straßenmusikanten besiegt!",
"title": "Rumgeblödel",
"description": "Irgendwas stimmt nicht mit dieser Begegnung. Der Clown scheint darauf aus zu sein, dich zu einem Kampf zu provozieren, aber zu welchem Zweck?\n\nDas {{blacephalonName}} ist besonders seltsam, als hätte es @[TOOLTIP_TITLE]{seltsame Typen} und eine @[TOOLTIP_TITLE]{Fähigkeit.}",
"query": "Was wirst du tun?",
"option": {
"1": {
"label": "Kampf beginnen",
"tooltip": "(-) Komischer Kampf\n(?) Beeinflusst Pokémon-Fähigkeiten",
"selected": "Deine erbärmlichen Pokémon sind bereit für eine erbärmliche Vorstellung!",
"apply_ability_dialogue": "Eine sensationelle Vorstellung! Dein Können passt zu einer sensationellen Fähigkeit als Beute!",
"apply_ability_message": "Der Clown bietet an, die Fähigkeit eines deiner Pokémon dauerhaft auf {{ability}} zu wechseln!",
"ability_prompt": "Soll eines deiner Pokémon die Fähigkeit {{ability}} dauerhaft erlangen?",
"ability_gained": "@s{level_up_fanfare}{{chosenPokemon}} hat die Fähigkeit {{ability}} erhalten!"
},
"2": {
"label": "Nicht provozieren lassen",
"tooltip": "(-) Der Clown ist beleidigt\n(?) Beeinflusst Pokémon-Items",
"selected": "Du erbärmlicher Feigling, du verweigerst einen wunderbaren Kampf? Fühle meinen Zorn!",
"selected_2": "Das {{blacephalonName}} des Clowns verwendet Trickbetrug! Alle Items deines {{switchPokemon}} wurden zufällig vertauscht!",
"selected_3": "Meine perfekte List hat dich in die Irre geführt!"
},
"3": {
"label": "Die Beleidigungen erwidern",
"tooltip": "(-) Den Clown verärgern\n(?) Beeinflusst Pokémon-Typen",
"selected": "Du erbärmlicher Feigling verweigerst einen wunderbaren Kampf? Fühle meinen Zorn!",
"selected_2": "Das {{blacephalonName}} des Clowns verwendet eine seltsame Attacke! Alle Typen deines Teams wurden zufällig vertauscht!",
"selected_3": "Meine perfekte List hat dich in die Irre geführt!"
}
},
"outro": "Der Clown und seine Kumpanen verschwinden in einer Rauchwolke."
}

View File

@ -0,0 +1,27 @@
{
"intro": "Ein {{oricorioName}} tanzt traurig allein, ohne einen Partner.",
"title": "Tanzstunden",
"description": "Das {{oricorioName}} scheint nicht aggressiv zu sein, im Gegenteil, es scheint traurig zu sein.\nVielleicht möchte es einfach nur mit jemandem tanzen...",
"query": "Was wirst du tun?",
"option": {
"1": {
"label": "Kampf beginnen",
"tooltip": "(-) Schwerer Kampf\n(+) Erhalte ein Stab",
"selected": "Das {{oricorioName}} ist verstört und verteidigt sich!",
"boss_enraged": "Das {{oricorioName}} ist wütend und steigert seine Werte!"
},
"2": {
"label": "Lerne den Tanz",
"tooltip": "(+) Bringe einem Pokémon Wecktanz bei",
"selected": "Du schaust dem {{oricorioName}} genau zu, wie es seinen Tanz aufführt...$@s{level_up_fanfare}Dein {{selectedPokemon}} hat von {{oricorioName}} gelernt!"
},
"3": {
"label": "Zeig einen Tanz",
"tooltip": "(-) Bringe dem {{oricorioName}} einen Tanz bei\n(+) Das {{oricorioName}} wird dich mögen",
"disabled_tooltip": "Dein Pokémon muss einen Tanz beherrschen, um diese Option zu wählen.",
"select_prompt": "Wählen Sie eine Tanzattacke aus, die verwendet werden soll.",
"selected": "Das {{oricorioName}} schaut fasziniert zu, wie {{selectedPokemon}} {{selectedMove}} vorführt!$Es liebt die Vorführung!$@s{level_up_fanfare}Das {{oricorioName}} möchte sich dir anschließen!"
}
},
"invalid_selection": "Das Pokémon kennt keine Tanzattacke"
}

View File

@ -0,0 +1,24 @@
{
"intro": "Ein seltsamer Mann in einem zerrissenen Mantel steht dir im Weg...",
"speaker": "Seltsamer Mann",
"intro_dialogue": "Hey, du!$Ich habe an einem neuen Gerät gearbeitet, um die verborgene Kraft eines Pokémon zum Vorschein zu bringen!$Es bindet die Atome des Pokémon auf molekularer Ebene vollständig neu und bringt sie in eine$weitaus mächtigere Form.$Hehe...@d{64} Ich brauche nur ein paar Opf-@d{32} Ähm, Testpersonen, um zu beweisen, dass es funktioniert.",
"title": "Dunkler Handel",
"description": "Der verstörende Typ hält einige Pokébälle hoch.\n\"Es wird such für dich lohnen! Du kannst diese tollen Pokébälle als Bezahlung haben, alles was ich brauche ist ein Pokémon aus deinem Team! Hehe...\"",
"query": "Was wirst du tun?",
"option": {
"1": {
"label": "Aktzeptieren",
"tooltip": "(+) 5 Roguebälle\n(?) Ein zufälliges Pokémon wird verbessert",
"selected_dialogue": "Lass mich mal sehen...${{pokeName}} ist eine gute Wahl!$Denk dran, ich bin nicht verantwortlich, wenn etwas schief geht!@d{32} Hehe...",
"selected_message": "Der Mann übergibt dir 5 Roguebälle.${{pokeName}} springt in die seltsame Maschine...$Blinkende Lichter und seltsame Geräusche kommen aus der Maschine!$...@d{96} Etwas kommt aus der Maschine,\nwütend und wild!"
},
"2": {
"label": "Ablehnen",
"tooltip": "(-) Keine Belohnung",
"selected": "Du willst einem armen Kerl nicht helfen? Pah!"
}
},
"outro": "Nach der schrecklichen Begegnung, sammelst du dich und gehst weiter."
}

View File

@ -0,0 +1,29 @@
{
"intro": "Ein Schwarm {{delibirdName}} ist aufgetaucht!",
"title": "Botogel-Bande",
"description": "Die {{delibirdName}} schauen dich erwartungsvoll an, als ob sie etwas wollen. Vielleicht würde es sie zufriedenstellen, wenn du ihnen ein Item oder etwas Geld gibst?",
"query": "Was möchtest du ihnen geben?",
"invalid_selection": "Das Pokémon hat kein solches Item.",
"option": {
"1": {
"label": "Geld geben",
"tooltip": "(-) Den {{delibirdName}} {{money, money}} geben\n(+) Erhalte ein Geschenk",
"selected": "Du wirfst das Geld zu den {{delibirdName}}, die aufgeregt miteinander schnattern.$Sie drehen sich zu dir um und geben dir glücklich ein Geschenk!"
},
"2": {
"label": "Futter geben",
"tooltip": "(-) Gib den {{delibirdName}} eine Beere oder einen Belebersamen\n(+) Erhalte ein Geschenk",
"select_prompt": "Wähle ein Item aus.",
"selected": "Du wirfst {{chosenItem}} zu den {{delibirdName}}, die aufgeregt miteinander schnattern.$Sie drehen sich zu dir um und geben dir glücklich ein Geschenk!"
},
"3": {
"label": "Ein Item geben",
"tooltip": "(-) Gebe den {{delibirdName}} ein Item\n(+) Erhalte ein Geschenk",
"select_prompt": "Wähle ein Item aus.",
"selected": "Du wirfst {{chosenItem}} zu den {{delibirdName}}, die aufgeregt miteinander schnattern.$Sie drehen sich zu dir um und geben dir glücklich ein Geschenk!"
}
},
"outro": "Die {{delibirdName}} watscheln glücklich davon.$Was für ein seltsamer kleiner Austausch!"
}

View File

@ -0,0 +1,27 @@
{
"intro": "Es ist eine Dame mit vielen Einkaufstüten.",
"speaker": "Einkäuferin",
"intro_dialogue": "Hallo! Bist du auch wegen der tollen Angebote hier?$Es gibt einen speziellen Gutschein, den du während des Verkaufs einlösen kannst!$Ich habe einen zusätzlichen. Hier, bitte!",
"title": "Einkaufszentrum-Verkauf",
"description": "Es gibt Angebote in jede Richtung! Es sieht so aus, als ob es 4 Kassen gibt, an denen du den Gutschein gegen verschiedene Artikel eintauschen kannst. Die Möglichkeiten sind endlos!",
"query": "Welche Kasse wählst du?",
"option": {
"1": {
"label": "TM-Kasse",
"tooltip": "(+) TM Shop"
},
"2": {
"label": "Nährstoff-Kasse",
"tooltip": "(+) Nährstoff Shop"
},
"3": {
"label": "Kampf-Item-Kasse",
"tooltip": "(+) X-Item Shop"
},
"4": {
"label": "Pokéball-Kasse",
"tooltip": "(+) Pokéball Shop"
}
},
"outro": "Was für ein Schnäppchen! Du solltest öfter hier einkaufen."
}

View File

@ -0,0 +1,31 @@
{
"intro": "Eine Lehrerin und ein paar Schulkinder stehen auf einmal vor dir!",
"speaker": "Lehrerin",
"intro_dialogue": "Hallo! Könntest du eine Minute für meine Schüler erübrigen?$Ich bringe ihnen gerade bei, wie Pokémon-Attacken funktionieren und würde ihnen gerne$eine Demonstration zeigen.$Würdest du uns eine Attacke deines Pokémon vorführen?",
"title": "Exkursion",
"description": "Eine Lehrerin fragt nach einer Attackenvorführung eines Pokémon. Je nachdem, welche Attacke du wählst, hat sie vielleicht etwas Nützliches für dich als Belohnung.",
"query": "Welchen Attacken-Typ wählst du?",
"option": {
"1": {
"label": "Physische Attacke",
"tooltip": "(+) Physische Item-Belohnungen"
},
"2": {
"label": "Spezielle Attacke",
"tooltip": "(+) Spezielle Item-Belohnungen"
},
"3": {
"label": "Status-Attacke",
"tooltip": "(+) Status Item-Belohnungen"
},
"selected": "{{pokeName}} zeigt eine beeindruckende Vorführung von {{move}}!"
},
"second_option_prompt": "Wähle eine Attacke die dein Pokémon einsetzen soll.",
"incorrect": "...$Das ist keine {{moveCategory}}Attacke!\nEs tut mir leid, aber ich kann dir nichts geben.$Kommt Kinder, wir suchen uns woanders einen besseren Trainer.",
"incorrect_exp": "Es scheint, als hättest du eine wertvolle Lektion gelernt?$Dein Pokémon hat auch etwas Erfahrung gesammelt.",
"correct": "Ich dank dir vielmals für deine Freundlichkeit!$Ich hoffe, diese Items sind nützlich für dich.",
"correct_exp": "{{pokeName}} hat auch etwas wertvolle Erfahrung gesammelt!",
"status": "Status-",
"physical": "physische ",
"special": "spezielle "
}

View File

@ -0,0 +1,26 @@
{
"intro": "Du hast einen Sturm aus Rauch und Asche entdeckt!",
"title": "Feurige Folgen",
"description": "Die umherwirbelnde Asche und Glut haben die Sicht auf fast Null reduziert. Es scheint, als könnte es eine... Quelle geben, die diese Bedingungen verursacht. Aber was könnte hinter einem Phänomen dieser Größe stecken?",
"query": "Was wirst du tun?",
"option": {
"1": {
"label": "Finde die Quelle",
"tooltip": "(?) Entdecke die Quelle\n(-) Schwieriger Kampf",
"selected": "Du hast die Quelle des Sturms gefunden!$Es sind zwei {{volcaronaName}}, die in der Mitte eines Paarungstanzes sind!$Sie nehmen die Unterbrechung nicht gut auf und greifen an!"
},
"2": {
"label": "Sich einigeln",
"tooltip": "(-) Die Folgen des Wetters erleiden",
"selected": "Die Folgen des Wetters sind verheerend!$Deine Pokémon nehmen 20% ihrer maximalen KP als Schaden!",
"target_burned": "Dein {{burnedPokemon}} wurde auch verbrannt!"
},
"3": {
"label": "Dein Feuer-Pokémon hilft",
"tooltip": "(+) Das Wetter klärt auf\n(+) Erhalte ein Holzkohle",
"disabled_tooltip": "Du benötigst mindestens 2 Feuer-Pokémon, um diese Option auszuwählen",
"selected": "Dein {{option3PrimaryName}} und {{option3SecondaryName}} führen dich zu zwei {{volcaronaName}}, die in der Mitte eines Paarungstanzes sind!$Zum Glück können deine Pokémon sie beruhigen,und sie ziehen ohne Probleme ab."
}
},
"found_charcoal": "Nachdem das Wetter aufklart, entdeckt dein {{leadPokemon}} etwas auf dem Boden.$@s{item_fanfare}{{leadPokemon}} erhält eine Holzkohle!"
}

View File

@ -0,0 +1,25 @@
{
"intro": "Etwas Glänzendes liegt auf dem Boden in der Nähe dieses Pokémons!",
"title": "Kampf oder Flucht",
"description": "Es scheint, als würde ein starkes Pokémon ein Item bewachen. Ein Kampf wäre der direkte Weg, aber es sieht stark aus. Vielleicht könntest du das Item stehlen, wenn du das richtige Pokémon für den Job hast.",
"query": "Was wirst du tun?",
"option": {
"1": {
"label": "Kampf beginnen",
"tooltip": "(-) Schwerer Kampf\n(+) Neues Item",
"selected": "Du trittst dem Pokémon ohne Furcht entgegen.",
"stat_boost": "Die Stärke von {{enemyPokemon}} erhöht einen seiner Werte!"
},
"2": {
"label": "Das Item stehlen",
"disabled_tooltip": "Dein Pokémon muss eine bestimmte Attacken beherrschen, um diese Option zu wählen.",
"tooltip": "(+) {{option2PrimaryName}} setzt {{option2PrimaryMove}} ein",
"selected": ".@d{32}.@d{32}.@d{32}$Dein {{option2PrimaryName}} hilft dir und setzt {{option2PrimaryMove}} ein!$Du hast das Item gestohlen!"
},
"3": {
"label": "Verlassen",
"tooltip": "(-) Keine Belohnung",
"selected": "Du lässt das starke Pokémon mit seinem Item zurück und gehst weiter."
}
}
}

View File

@ -0,0 +1,30 @@
{
"intro_dialogue": "Kommen Sie näher, meine Damen und Herren!$Versuchen Sie Ihr Glück mit dem brandneuen {{wobbuffetName}}-Hau-den-Lukas!",
"speaker": "Animateur",
"title": "Spaß und Spiele!",
"description": "Du hast ein {{wobbuffetName}} gefunden, das ein Spiel spielt! Du hast @[TOOLTIP_TITLE]{3 Züge}, um das {{wobbuffetName}} so nah wie möglich an @[TOOLTIP_TITLE]{1 KP} heranzubringen, @[TOOLTIP_TITLE]{ohne es zu besiegen}, damit es eine riesige Gegenattacke auf der Glockenmaschine ausführen kann.\nAber sei vorsichtig! Wenn du das {{wobbuffetName}} besiegst, musst du die Kosten für die Wiederbelebung bezahlen!",
"query": "Möchtest du spielen?",
"option": {
"1": {
"label": "Das Spiel spielen",
"tooltip": "(-) Zahle {{option1Money, money}}\n(+) Spiele {{wobbuffetName}} Hau-den-Lukas",
"selected": "Zeit dein Glück herauszufordern!"
},
"2": {
"label": "Weggehen",
"tooltip": "(-) Keine Belohnung",
"selected": "Du beeilst dich auf deinem Weg, mit einem leichten Gefühl der Reue."
}
},
"ko": "Oh nein! Das {{wobbuffetName}} ist ohnmächtig geworden!$Du verlierst das Spiel und musst die Kosten für die Wiederbelebung bezahlen...",
"charging_continue": "Das {{wobbuffetName}} lädt seine Gegenattacke auf!",
"turn_remaining_3": "Drei Runden verbleiben!",
"turn_remaining_2": "Zwei Runden verbleiben!",
"turn_remaining_1": "Nur noch eine Runde!",
"end_game": "Die Zeit ist um!$Das {{wobbuffetName}} holt zum Gegenangriff aus und@d{16}.@d{16}.@d{16}.",
"best_result": "Das {{wobbuffetName}} schlägt so hart auf den Knopf, dass die Glocke vom oberen Teil abbricht!$Du gewinnst den Hauptpreis!",
"great_result": "Das {{wobbuffetName}} schlägt den Knopf so hart, dass die Glocke fast getroffen wird!$So nah! Du gewinnst den zweiten Preis!",
"good_result": "Das {{wobbuffetName}} trifft den Knopf stark genug, um die Hälfte der Skala zu erreichen!$Du verdienst den dritten Preis!",
"bad_result": "Das {{wobbuffetName}} trifft den Knopf kaum und nichts passiert...$Oh nein! Du gewinnst nichts!",
"outro": "Das war ein lustiges kleines Spiel!"
}

View File

@ -0,0 +1,32 @@
{
"intro": "Es ist eine Schnittstelle für die Globale Tauschstation, das GTS.",
"title": "Das GTS",
"description": "Ah, das GTS! Ein technologisches Wunder, mit dem du dich mit jedem auf der Welt verbinden kannst, um Pokémon mit ihnen zu tauschen! Wird das Glück dir heute hold sein?",
"query": "Was wirst du tun?",
"option": {
"1": {
"label": "Tauschangebote prüfen",
"tooltip": "(+) Wähle ein Tauschangebot für eines deiner Pokémon aus",
"trade_options_prompt": "Wähle ein Pokémon aus, das du erhalten möchtest."
},
"2": {
"label": "Zaubertausch",
"tooltip": "(+) Seine eine deiner Pokémon an die GTS und erhalte ein zufälliges Pokémon im Austausch"
},
"3": {
"label": "Tausche ein Item",
"trade_options_prompt": "Wähle ein Item aus, das du senden möchtest.",
"invalid_selection": "Dieses Pokémon hat keine Items die getauscht werden können.",
"tooltip": "(+) Sende eines deiner Items an die GTS und erhalte ein zufälliges Item im Austausch"
},
"4": {
"label": "Weggehen",
"tooltip": "(-) Keine Belohnung",
"selected": "Heute ist keine Zeit zum Tauschen! Du gehst weiter."
}
},
"pokemon_trade_selected": "{{tradedPokemon}} wird an {{tradeTrainerName}} gesendet.",
"pokemon_trade_goodbye": "Machs gut, {{tradedPokemon}}!",
"item_trade_selected": "{{chosenItem}} wird an {{tradeTrainerName}} gesendet.$.@d{64}.@d{64}.@d{64}\n@s{level_up_fanfare}Tausch abgeschlossen!$Du hast {{itemName}} von {{tradeTrainerName}} erhalten!",
"trade_received": "@s{evolution_fanfare}{{tradeTrainerName}} hat dir {{received}} geschickt!"
}

View File

@ -0,0 +1,28 @@
{
"intro": "Du warst auf dem Meer umhergeirrt und effektiv nirgendwohin gekommen.",
"title": "Verloren auf See",
"description": "Die See ist in diesem Gebiet stürmisch und du hast kaum noch Energie. Das ist schlecht. Gibt es einen Ausweg aus der Situation?",
"query": "Was wirst du tun?",
"option": {
"1": {
"label": "{{option1PrimaryName}} kann helfen",
"label_disabled": "Kein {{option1RequiredMove}}",
"tooltip": "(+) {{option1PrimaryName}} rettet dich\n(+) {{option1PrimaryName}} erhält etwas EP",
"tooltip_disabled": "Du hast kein Pokémon, das {{option1RequiredMove}} erlernen kann",
"selected": "{{option1PrimaryName}} schwimmt voraus und führt dich zurück auf den richtigen Weg.${{option1PrimaryName}} scheint auch stärker geworden zu sein in dieser Zeit der Not!"
},
"2": {
"label": "{{option2PrimaryName}} kann helfen",
"label_disabled": "Kein {{option2RequiredMove}}",
"tooltip": "(+) {{option2PrimaryName}} rettet dich\n(+) {{option2PrimaryName}} erhält etwas EP",
"tooltip_disabled": "Du hast kein Pokémon, das {{option2RequiredMove}} erlernen kann",
"selected": "{{option2PrimaryName}} fliegt vor deinem Boot und führt dich zurück auf den richtigen Weg.${{option2PrimaryName}} scheint auch stärker geworden zu sein in dieser Zeit der Not!"
},
"3": {
"label": "Umherirren",
"tooltip": "(-) Jedes deiner Pokémon verliert {{damagePercentage}}% seiner maximalen KP",
"selected": "Du treibst im Boot umher, steuerst ohne Richtung, bis du endlich ein Wahrzeichen siehst, das du wiedererkennst.$Du und deine Pokémon sind erschöpft von dem ganzen Vorfall."
}
},
"outro": "Du bist wieder auf dem richtigen Weg."
}

View File

@ -0,0 +1,22 @@
{
"intro": "Mysteriöse Herausforderer sind aufgetaucht!",
"title": "Mysteriöse Herausforderer",
"description": "Wenn du einen Herausforderer besiegst, könntest du sie beeindrucken und eine Belohnung erhalten. Aber manche sehen ziemlich stark aus. Bist du bereit für die Herausforderung?",
"query": "Wen wirst du bekämpfen?",
"option": {
"1": {
"label": "Schlauer Trainer",
"tooltip": "(-) Standardkampf\n(+) TM Belohnungen"
},
"2": {
"label": "Starker Trainer",
"tooltip": "(-) Harter Kampf\n(+) Gute Belohnungen"
},
"3": {
"label": "Mächtigster Trainer",
"tooltip": "(-) Brutaler Kampf\n(+) Großartige Belohnungen"
},
"selected": "Der Herausforderer tritt vor..."
},
"outro": "Der mysteriöse Herausforderer wurde besiegt!"
}

View File

@ -0,0 +1,23 @@
{
"intro": "Du hast...@d{32} eine Truhe gefunden?",
"title": "Die mysteriöse Truhe",
"description": "Eine wunderschön verzierte Truhe steht auf dem Boden. Da muss doch etwas Gutes drin sein... oder?",
"query": "Wirst du sie öffnen?",
"option": {
"1": {
"label": "Öffnen",
"tooltip": "@[SUMMARY_BLUE]{({{trapPercent}}%) Etwas Schreckliches}\n@[SUMMARY_GREEN]{({{commonPercent}}%) Standard Belohnung}\n@[SUMMARY_GREEN]{({{ultraPercent}}%) Gute Belohnung}\n@[SUMMARY_GREEN]{({{roguePercent}}%) Großartige Belohnung}\n@[SUMMARY_GREEN]{({{masterPercent}}%) Erstaunliche Belohnung}",
"selected": "Du öffnest die Truhe und findest...",
"normal": "Einfach ein paar normale Werkzeuge und Gegenstände.",
"good": "Ein paar ziemlich gute Werkzeuge und Gegenstände.",
"great": "Ein paar großartige Werkzeuge und Gegenstände.",
"amazing": "Ein erstaunlichen Gegenstand!",
"bad": "Oh nein!@d{32}\nDie Truhe war tatsächlich ein {{gimmighoulName}}!$Dein {{pokeName}} springt schützend vor dich aber wird dabei besiegt!"
},
"2": {
"label": "Zu riskant, weggehen",
"tooltip": "(-) Keine Belohnung",
"selected": "Du gehst schnell weiter, mit einem leichten Gefühl der Reue."
}
}
}

View File

@ -0,0 +1,31 @@
{
"intro": "Eine geschäftige Person spricht dich an.",
"speaker": "Arbeitende Person",
"intro_dialogue": "Du siehst aus, als hättest du viele fähige Pokémon!$Wir können dich bezahlen, wenn du uns bei einigen Teilzeitjobs hilfst!",
"title": "Teilzeitjob",
"description": "Es scheint, als gäbe es viele Aufgaben, die erledigt werden müssen. Je besser dein Pokémon für eine Aufgabe geeignet ist, desto mehr Geld kann es verdienen.",
"query": "Welchen Job wählst du?",
"invalid_selection": "Das Pokémon muss genug KP haben.",
"option": {
"1": {
"label": "Lieferdienst",
"tooltip": "(-) Dein Pokémon nutzt seine Geschwindigkeit\n(+) Verdiene @[MONEY]{Geld}",
"selected": "Dein {{selectedPokemon}} arbeitet eine Schicht lang damit, Bestellungen an Kunden auszuliefern."
},
"2": {
"label": "Lagerarbeit",
"tooltip": "(-) Dein Pokémon nutzt seine Stärke und Ausdauer\n(+) Verdiene @[MONEY]{Geld}",
"selected": "Dein {{selectedPokemon}} arbeitet eine Schicht lang damit, Gegenstände im Lager zu bewegen."
},
"3": {
"label": "Verkäufer",
"tooltip": "(-) Dein {{option3PrimaryName}} nutzt {{option3PrimaryMove}}\n(+) Verdiene @[MONEY]{Geld}",
"disabled_tooltip": "Dein Pokémon muss bestimmte Attacken kennen, um diesen Job zu erledigen",
"selected": "Dein {{option3PrimaryName}} verbringt den Tag damit, {{option3PrimaryMove}} einzusetzen, um Kunden in den Laden zu locken!"
}
},
"job_complete_good": "Danke für die Hilfe! Dein {{selectedPokemon}} war unglaublich hilfreich!$Hier ist dein Gehalt für den Tag.",
"job_complete_bad": "Dein {{selectedPokemon}} hat uns ein wenig geholfen!$Hier ist dein Gehalt für den Tag.",
"pokemon_tired": "Dein {{selectedPokemon}} ist erschöpft! Die AP aller seiner Attacken wurden auf 2 reduziert!",
"outro": "Komm doch bald wieder und hilf uns erneut!"
}

View File

@ -0,0 +1,46 @@
{
"intro": "Es ist die Safari-Zone!",
"title": "Die Safari-Zone",
"description": "Es gibt alle Arten von seltenen und besonderen Pokémon, die hier gefunden werden können!\nWenn du dich entscheidest, einzutreten, hast du kannst du in den nächsten 3 Wellen versuchen, besondere Pokémon zu fangen.\nAber sei gewarnt, diese Pokémon können fliehen, bevor du sie fangen kannst!",
"query": "Willst du eintreten?",
"option": {
"1": {
"label": "Eintreten",
"tooltip": "(-) Zahle {{option1Money, money}}\n@[SUMMARY_GREEN]{(?) Safari Zone}",
"selected": "Zeit, dein Glück herauszufordern!"
},
"2": {
"label": "Weggehen",
"tooltip": "(-) Keine Belohnung",
"selected": "Du gehst deines Weges, mit einem leichten Gefühl der Reue."
}
},
"safari": {
"1": {
"label": "Pokéball werfen",
"tooltip": "(+) Werfe einen Pokéball",
"selected": "Du wirfst einen Pokéball!"
},
"2": {
"label": "Köder werfen",
"tooltip": "(+) Erhöht die Fangrate\n(-) Erhöht die Fluchtchance",
"selected": "Du wirfst einen Köder!"
},
"3": {
"label":"Matsch werfen",
"tooltip": "(+) Vermindert die Fluchtchance\n(-) Chance, die Fangrate zu verringern",
"selected": "Du wirst ein wenig Matsch!"
},
"4": {
"label": "Fliehen",
"tooltip": "(?) Fliehe vor diesem Pokémon"
},
"watching": "{{pokemonName}} beobachtet alles aufmerksam!",
"eating": "{{pokemonName}} frisst!",
"busy_eating": "{{pokemonName}} konzentriert sich aufs Futter!",
"angry": "{{pokemonName}} ist wütend!",
"beside_itself_angry": "{{pokemonName}} ist außer sich vor Wut!",
"remaining_count": "{{remainingCount}} Pokémon übrig!"
},
"outro": "Das war ein spannendes Abenteuer in der Safari-Zone!"
}

View File

@ -0,0 +1,27 @@
{
"intro": "Ein Mann in einem dunklen Mantel kommt auf dich zu.",
"speaker": "Zwielichtiger Verkäufer",
"intro_dialogue": ".@d{16}.@d{16}.@d{16}$Ich habe die Ware, wenn du das Geld hast.$Aber sei sicher, dass deine Pokémon es vertragen können.",
"title": "Der Nährstoff-Verkäufer",
"description": "Der Mann öffnet seinen Mantel und zeigt dir einige Pokémon-Nährstoffe. Die Preise, die er nennt, scheinen ein wirklich gutes Angebot zu sein. Fast zu gut...\nEr bietet dir zwei Möglichkeiten zur Auswahl an.",
"query": "Welches Angebot wirst du wählen?",
"invalid_selection": "Pokémon must be healthy enough.",
"option": {
"1": {
"label": "Der billige Deal",
"tooltip": "(-) Zahle {{option1Money, money}}\n(-) Nebenwirkungen?\n(+) Das gewählte Pokémon erhält 2 zufällige Nährstoffe"
},
"2": {
"label": "Der teure Deal",
"tooltip": "(-) Zahle {{option2Money, money}}\n(+) Das gewählte Pokémon erhält 2 zufällige Nährstoffe"
},
"3": {
"label": "Weggehen",
"tooltip": "(-) Keine Belohnung",
"selected": "Ey, hätte ich nicht gedacht, dass du ein Feigling bist."
},
"selected": "Der Mann überreicht dir zwei Flaschen und verschwindet schnell.${{selectedPokemon}} erhält {{boost1}} und {{boost2}} Nährstoffe!"
},
"cheap_side_effects": "Aber die Medizin hatte Nebenwirkungen!$Dein {{selectedPokemon}} nimmt etwas Schaden,\nund sein Wesen wurde zu {{newNature}} geändert!",
"no_bad_effects": "Es scheint, als hätten die Nährstoffe keine Nebenwirkungen."
}

View File

@ -0,0 +1,25 @@
{
"intro": "Als du einen schmalen Pfad entlang gehst, siehst du eine riesige Silhouette, die deinen Weg blockiert.$Du kommst näher, um zu sehen, dass ein {{snorlaxName}} friedlich schläft.$Es scheint, als gäbe es keinen Weg daran vorbei.",
"title": "Schlafendes {{snorlaxName}}",
"description": "Du könntest es angreifen, um es zum Bewegen zu bringen, oder einfach warten, bis es aufwacht. Wer weiß, wie lange das dauern könnte...",
"query": "Was wirst du tun?",
"option": {
"1": {
"label": "Kampf beginnen",
"tooltip": "(-) Schlafendes {{snorlaxName}} greift an\n(+) Spezielle Belohnung",
"selected": "Du trittst dem Pokémon ohne Furcht entgegen."
},
"2": {
"label":"Warte, bis es sich bewegt",
"tooltip": "(-) Warte eine lange Zeit\n(+) Dein Team wird geheilt",
"selected": ".@d{32}.@d{32}.@d{32}$Du wartest sehr lange, bis das {{snorlaxName}} endlich aufwacht. Dein Team wird schläfrig...",
"rest_result": "Nachdem ihr alle aufgewacht seid, ist das {{snorlaxName}} nirgends zu finden - aber deine Pokémon sind alle geheilt!"
},
"3": {
"label": "Klaue seine Items",
"tooltip": "(+) {{option3PrimaryName}} setzt {{option3PrimaryMove}} ein\n(+) Spezielle Belohnung",
"disabled_tooltip": "Dein Pokémon muss bestimmte Attacken beherrschen, um diese Option zu wählen.",
"selected": "Dein {{option3PrimaryName}} setzt {{option3PrimaryMove}} ein!$@s{item_fanfare}Es stiehlt die Überreste des schlafenden {{snorlaxName}}s und ihr macht euch aus dem Staub!"
}
}
}

View File

@ -0,0 +1,27 @@
{
"intro": "Es ist eine seltsame Maschine, die laut summt...",
"title": "Teleportierende Streiche",
"description": "Die Maschine hat ein Schild, auf dem steht:\n\"Geld einwerfen und in die Kapsel steigen.\"\nVielleicht kann sie dich irgendwohin transportieren...",
"query": "Was wirst du tun?",
"option": {
"1": {
"label": "Geld einwerfen",
"tooltip": "(-) Bezahle {{price, money}}\n(?) Teleportiere dich in ein neues Biom",
"selected": "Du wirfst etwas Geld ein, und die Kapsel öffnet sich.\nDu steigst ein..."
},
"2": {
"label": "Ein Pokémon hilft",
"tooltip": "(-) {{option2PrimaryName}} hilft\n(+) {{option2PrimaryName}} erhält EXP\n(?) Teleportiere dich in ein neues Biom",
"disabled_tooltip": "Du brauchst ein Stahl- oder Elektro-Pokémon, um diese Option zu wählen.",
"selected": "Der Typ von {{option2PrimaryName}} ermöglicht es ihm, die Bezahlschranke der Maschine zu umgehen!$Die Kapsel öffnet sich, und du steigst ein..."
},
"3": {
"label": "Maschine inspizieren",
"tooltip": "(-) Pokémon-Kampf",
"selected": "Du wirst von den blinkenden Lichtern und den seltsamen Geräuschen der Maschine angezogen...$Du bemerkst nicht einmal, wie ein wildes Pokémon sich anschleicht und dich überfällt!"
}
},
"transport": "Die Maschine zittert heftig und macht seltsame Geräusche!$Kaum hat es begonnen, wird es wieder ruhig.",
"attacked": "Du trittst in eine völlig neue Gegend und erschreckst ein wildes Pokémon!$Das wilde Pokémon greift an!",
"boss_enraged": "Das wilde {{enemyPokemon}} ist wütend geworden!"
}

View File

@ -0,0 +1,31 @@
{
"intro": "Ein Trainer mit vielen Pokémon-Eiern!",
"intro_dialogue": "Hey Trainer!$Es sieht so aus, als ob einige deiner Pokémon sich ein wenig niedergeschlagen fühlen.$Warum kämpfst du nicht gegen mich, um sie aufzumuntern?",
"title": "Triff die Pokémon-Züchter-Expertin!",
"description": "Du wurdest zu einem Kampf herausgefordert, bei dem du nur @[TOOLTIP_TITLE]{ein einziges Pokémon verwenden darfst}. Es könnte schwierig werden, aber es würde sicherlich die Bindung vertiefen, die du mit dem Pokémon hast, das du wählst!$Wenn du gewinnst, wird die Züchterin dir einige @[TOOLTIP_TITLE]{Pokémon-Eier} geben!",
"query": "Wer wird für dich kämpfen?",
"cleffa_1_nickname": "Ass-Pii-Rin",
"cleffa_2_nickname": "Pi-mal-Daumen",
"cleffa_3_nickname": "Pii-cknick",
"option": {
"1": {
"label": "{{pokemon1Name}}",
"tooltip_base": "(-) Harter Kampf\n(+) Erhöhe Freundschaft mit {{pokemon1Name}}"
},
"2": {
"label": "{{pokemon2Name}}",
"tooltip_base": "(-) Harter Kampf\n(+) Erhöhe Freundschaft mit {{pokemon2Name}}"
},
"3": {
"label": "{{pokemon3Name}}",
"tooltip_base": "(-) Harter Kampf\n(+) Erhöhe Freundschaft mit {{pokemon3Name}}"
},
"selected": "Lass uns beginnen!"
},
"outro": "Schau wie glücklich dein {{chosenPokemon}} nun ist!$Hier, diese Pokémon-Eier kannst du auch haben.",
"outro_failed": "Wie enttäuschend...$Es sieht so aus, als hättest du noch einen langen Weg vor dir, um das Vertrauen deines Pokémon zu gewinnen!",
"gained_eggs": "@s{item_fanfare}Du erhählst {{numEggs}}!",
"eggs_tooltip": "\n(+) Erhalte {{eggs}}",
"numEggs_one": "{{count}} Ei der Stufe {{rarity}}",
"numEggs_other": "{{count}} Eier der Stufe {{rarity}}"
}

View File

@ -0,0 +1,23 @@
{
"intro": "Ein fröhlicher älterer Mann kommt auf dich zu.",
"speaker": "Reicher Mann",
"intro_dialogue": "Hallo! Ich habe ein Angebot, das du nicht ablehnen kannst!",
"title": "Der Pokémon-Verkäufer",
"description": "Dieses {{purchasePokemon}} ist extrem einzigartig und hat eine Fähigkeit, die normalerweise nicht bei seiner Art zu finden ist! Ich lasse dich dieses tolle {{purchasePokemon}} für gerade einmal {{price, money}} haben!\"\n\"Was sagst du dazu?\"",
"description_shiny": "Dieses {{purchasePokemon}} ist extrem einzigartig und hat eine Farbe, die normalerweise nicht bei seiner Art zu finden ist! Ich lasse dich dieses tolle {{purchasePokemon}} für gerade einmal {{price, money}} haben!\"\n\"Was sagst du dazu?\"",
"query": "Was wirst du tun?",
"option": {
"1": {
"label": "Akzeptieren",
"tooltip": "(-) Bezahlen {{price, money}}\n(+) Erhalte ein {{purchasePokemon}} mit seiner versteckten Fähigkeit",
"tooltip_shiny": "(-) Bezahlen {{price, money}}\n(+) Erhalte ein schillerndes {{purchasePokemon}}",
"selected_message": "Du bezahlst einen unverschämten Betrag und kaufst das {{purchasePokemon}}.",
"selected_dialogue": "Ausgezeichnete Wahl!$Ich sehe, dass du ein gutes Auge für Geschäfte hast.$Oh, ja...@d{64} Rückgaben werden nicht akzeptiert, hast du das verstanden?"
},
"2": {
"label": "Ablehnen",
"tooltip": "(-) Keine Belohnung",
"selected": "Nein?@d{32} Du sagst nein?$Ich mache das nur als Gefallen für dich!"
}
}
}

View File

@ -0,0 +1,21 @@
{
"intro": "Es ist ein riesiger {{shuckleName}} und ein riesiger Vorrat an... Saft?",
"title": "Das gute Zeug",
"description": "Das {{shuckleName}} das deinen Weg blockiert, sieht unglaublich stark aus. In der Zwischenzeit strahlt der Saft daneben eine Art Kraft aus.\nDas {{shuckleName}} streckt seine Fühler in deine Richtung aus. Es scheint, als wolle es etwas tun...",
"query": "Was wirst du tun?",
"option": {
"1": {
"label": "Dem {{shuckleName}} näher kommen",
"tooltip": "(?) Etwas Schreckliches oder Wunderbares könnte passieren",
"selected": "Dir wird schwarz vor Augen...",
"selected_2": "@f{150}Als du aufwachst, ist das {{shuckleName}} verschwunden und der Saftvorrat komplett geleert.${{highBstPokemon1}} und {{highBstPokemon2}} fühlen eine schreckliche Lethargie über sich kommen!$Ihre Basiswerte wurden um {{reductionValue}} reduziert!$Deine verbleibenden Pokémon fühlen jedoch eine unglaubliche Vitalität!$Ihre Basiswerte werden um {{increaseValue}} erhöht!"
},
"2": {
"label": "Das {{shuckleName}} bekämpfen",
"tooltip": "(-) Schwieriger Kampf\n(+) Spezielle Belohnungen",
"selected": "Das {{shuckleName}} wird wütend und trinkt etwas von seinem Saft, bevor es angreift!",
"stat_boost": "Der Saft des {{shuckleName}} erhöht seine Werte!"
}
},
"outro": "Was ist hier gerade passiert?"
}

View File

@ -0,0 +1,22 @@
{
"intro": "Eine Familie steht vor ihrem Haus!",
"speaker": "Die Sihgers",
"intro_dialogue": "Wir sind die Sihgers!$Wie wäre es, wenn du gegen unsere Familie in einer Reihe von Pokémon-Kämpfen antrittst?",
"title": "Die Sihgers-Herausforderung",
"description": "Die Sihgers sind eine Familie von 5 Trainern, und sie wollen kämpfen! Wenn du sie alle hintereinander besiegst, bekommst du einen grandiosen Preis. Aber kannst du die Hitze aushalten?",
"query": "Was wirst du tun?",
"option": {
"1": {
"label": "Die Herausforderung annehmen",
"tooltip": "(-) Brutaler Kampf\n(+) Spezielle Belohnung",
"selected": "Lass die Herausforderung beginnen!"
},
"2": {
"label": "Die Herausforderung ablehnen",
"tooltip": "(+) Team wird geheilt\n(+) Erhalte ein Supersondererbonbon",
"selected": "Das ist zu schade. Dein Team sieht ziemlich mitgenommen aus, warum ruhst du dich nicht eine Weile aus?"
}
},
"victory": "Glückwunsch, du hast unsere Herausforderung gemeistert!$Zuerst möchten wir dir diesen Gutschein geben.",
"victory_2": "Außerdem benutzt unsere Familie diese Machoschiene, um unsere Pokémon effektiver zu tranieren.$Du brauchst es vielleicht nicht, da du uns alle geschlagen hast, aber wir hoffen, dass du es trotzdem annimmst!"
}

View File

@ -0,0 +1,33 @@
{
"intro": "Du stolperst über einige Trainingsutensilien und Vorräte.",
"title": "Traningssitzung",
"description": "Diese Vorräte sehen so aus, als könnten sie verwendet werden, um ein Mitglied deines Teams zu trainieren! Es gibt ein paar Möglichkeiten, wie du dein Pokémon trainieren könntest, indem du gegen es mit dem Rest deines Teams kämpfst.",
"query": "Wie möchtest du trainieren?",
"invalid_selection": "Pokémon muss genügend KP haben.",
"option": {
"1": {
"label": "Leichtes Training",
"tooltip": "(-) Leichter Kampf\n(+) Verbessere 2 zufällige IS-Werte des Pokémon",
"finished": "{{selectedPokemon}} kommt zurück, fühlt sich erschöpft aber zufrieden!$Seine {{stat1}} und {{stat2}} IS-Werte wurden verbessert!"
},
"2": {
"label": "Moderates Training",
"tooltip": "(-) Moderater Kampf\n(+) Ändere das Wesen des Pokémon",
"select_prompt": "Wähle ein neues Wesen aus, um dein Pokémon zu trainieren.",
"finished": "{{selectedPokemon}} kehrt zurück, fühlt sich erschöpft aber zufrieden!$Es hat nun ein neues Wesen: {{nature}}!"
},
"3": {
"label": "Schweres Training",
"tooltip": "(-) Harter Kampf\n(+) Ändere die Fähigkeit des Pokémon",
"select_prompt": "Wähle eine neue Fähigkeit aus, um dein Pokémon zu trainieren.",
"finished": "{{selectedPokemon}} kehrt zurück, fühlt sich erschöpft aber zufrieden!$Seine Fähigkeit wurde zu {{ability}} geändert!"
},
"4": {
"label": "Weggehen",
"tooltip": "(-) Keine Belohnung",
"selected": "Du hast keine Zeit für Training und gehst weiter."
},
"selected": "{{selectedPokemon}} bewegt sich über die Lichtung, um dir gegenüberzutreten..."
},
"outro": "Das war eine erfolgreiche Trainingssitzung!"
}

View File

@ -0,0 +1,20 @@
{
"intro":"Ein riesieger Haufen Müll. Wo kommt der auf einmal her?",
"title": "Vom Müllhaufen zum Schatzhaufen",
"description": "Der Müllberg ragt über dir auf und du kannst einige wertvolle Gegenstände im Müll entdecken. Bist du sicher, dass du dich in den Dreck wälzen willst, um sie zu bekommen?",
"query": "Was willst du tun?",
"option": {
"1": {
"label": "Nach Wertsachen suchen",
"tooltip": "(-) Heilitems kosten ab jetzt das Dreifache\n(+) Erhalte tolle Items",
"selected": "Du arbeitest dich durch den Müllhaufen und wirst von Dreck überzogen.$Kein respektabler Ladenbesitzer wird dir in deinem schmutzigen Zustand etwas verkaufen!$Aber es gibt ja auch andere... weniger respektable.$Natürlich verlangen sie höhere Preise.$Aber du hast einige unglaubliche Items im Müll gefunden!"
},
"2": {
"label": "Genauer untersuchen",
"tooltip": "(?) Finde die Quelle des Mülls",
"selected": "Du wanderst um den Müllhaufen herum und suchst nach Hinweisen, wie dieser hier gelandet sein könnte...",
"selected_2": "Der Müll bewegt sich! Es war nicht nur Müll, es war ein Pokémon!"
}
}
}

View File

@ -0,0 +1,26 @@
{
"intro": "Das ist kein gewöhnliches Pokémon!",
"title": "Ungewöhnliche Züchtung",
"description": "Das {{enemyPokemon}} sieht im Vergleich zu anderen seiner Art besonders aus. @[TOOLTIP_TITLE]{Vielleicht kennt es einen besondere Attacke?} Du könntest es einfach bekämpfen und fangen, aber es gibt vielleicht auch eine Möglichkeit, es zu befreunden.",
"query": "Was wirst du tun?",
"option": {
"1": {
"label": "Kampf beginnen",
"tooltip": "(-) Schwieriger Kampf\n(+) Starkes fangbares Pokémon",
"selected": "Du stellst dich dem {{enemyPokemon}} ohne Furcht.",
"stat_boost": "Die gesteigerten Fähigkeiten des {{enemyPokemon}} erhöhen seine Werte!"
},
"2": {
"label": "Ihm Futter geben",
"disabled_tooltip": "Du brauchst 4 Beeren, um diese Option zu wählen",
"tooltip": "(-) Gib 4 Beeren\n(+) Das {{enemyPokemon}} mag dich",
"selected": "Du wirfst die Beeren zu {{enemyPokemon}}!$Es frisst sie glücklich!$Das {{enemyPokemon}} möchte sich dir anschließen!"
},
"3": {
"label": "Es befreunden",
"disabled_tooltip": "Dein Pokémon muss bestimmte Attacken kennen, um diese Option zu wählen",
"tooltip": "(+) {{option3PrimaryName}} setzt {{option3PrimaryMove}} ein\n(+) Das {{enemyPokemon}} mag dich",
"selected": "Dein {{option3PrimaryName}} setzt {{option3PrimaryMove}} ein, um das {{enemyPokemon}} zu bezaubern!$Das {{enemyPokemon}} möchte sich dir anschließen!"
}
}
}

View File

@ -0,0 +1,22 @@
{
"intro": "Eine schemenhafte Frau versperrt dir den Weg. Irgendetwas an ihr ist beunruhigend...",
"speaker": "Frau",
"intro_dialogue": "Ich habe deine Zukünfte gesehen, deine Vergangenheiten...$Siehst du sie auch?",
"title": "???",
"description": "Die Worte der Frau hallen in deinem Kopf wider. Es war nicht nur eine einzelne Stimme, sondern eine unendliche Vielzahl aus allen Zeiten und Realitäten. Dir wird schwindelig, die Frage bleibt in deinem Kopf hängen...\n@[TOOLTIP_TITLE]{\"Ich habe deine Zukünfte gesehen, deine Vergangenheiten...Siehst du sie auch?\"}",
"query": "Was wirst du tun?",
"option": {
"1": {
"label": "\"Ich sehe sie\"",
"tooltip": "@[SUMMARY_GREEN]{(?) Beeinflusst deine Pokémon}",
"selected": "Ihre Hand berührt dich und alles wird schwarz.$Dann...@d{64} Du siehst alles. Jede Zeitlinie, all deine verschiedenen Ichs, Vergangenheit und Zukunft.$Alles, was dich ausmacht, alles, was du sein wirst...@d{64}",
"cutscene": "Du siehst deine Pokémon,@d{32} wie sie sich aus jeder Realität vereinen, um etwas Neues zu werden...@d{64}",
"dream_complete": "Als du erwachst, ist die Frau - war es eine Frau oder ein Geist? - verschwunden...$.@d{32}.@d{32}.@d{32}$Dein Pokémon-Team hat sich verändert... Oder ist es das gleiche Team, das du schon immer hattest?"
},
"2": {
"label": "Schnell wegrennen",
"tooltip": "(-) Beeinflusst deine Pokémon",
"selected": "Du reißt deinen Geist aus einem betäubenden Griff und fliehst hastig.$Als du schließlich anhältst, um dich zu sammeln, überprüfst du die Pokémon in deinem Team.$Aus irgendeinem Grund hat sich das Level aller Pokémon verringert!"
}
}
}

View File

@ -15,6 +15,7 @@
"UNPAUSE_EVOLUTION": "Entwicklung fortsetzen",
"REVIVE": "Wiederbeleben",
"RENAME": "Umbenennen",
"SELECT": "Auswählen",
"choosePokemon": "Wähle ein Pokémon.",
"doWhatWithThisPokemon": "Was soll mit diesem Pokémon geschehen?",
"noEnergy": "{{pokemonName}} ist nicht fit genug, um zu kämpfen!",
@ -44,4 +45,4 @@
"untilWeMeetAgain": "Bis wir uns wiedersehen, {{pokemonName}}!",
"sayonara": "Sayonara, {{pokemonName}}!",
"smellYaLater": "Also dann, man riecht sich! Ciao!, {{pokemonName}}!"
}
}

View File

@ -1,4 +1,5 @@
{
"pikachu": "Normal",
"pikachuCosplay": "Cosplay",
"pikachuCoolCosplay": "Rocker-Pikachu",
"pikachuBeautyCosplay": "Damen-Pikachu",
@ -6,7 +7,9 @@
"pikachuSmartCosplay": "Professoren-Pikachu",
"pikachuToughCosplay": "Wrestler-Pikachu",
"pikachuPartner": "Partner-Pikachu",
"eevee": "Normal",
"eeveePartner": "Partner-Evoli",
"pichu": "Normal",
"pichuSpiky": "Strubbelohr-Pichu",
"unownA": "A",
"unownB": "B",
@ -36,36 +39,65 @@
"unownZ": "Z",
"unownExclamation": "!",
"unownQuestion": "?",
"castform": "Normalform",
"castformSunny": "Sonnenform",
"castformRainy": "Regenform",
"castformSnowy": "Schneeform",
"deoxysNormal": "Normalform",
"deoxysAttack": "Angriffsform",
"deoxysDefense": "Verteidigungsform",
"deoxysSpeed": "Initiativeform",
"burmyPlant": "Pflanzenumhang",
"burmySandy": "Sandumhang",
"burmyTrash": "Lumpenumhang",
"cherubiOvercast": "Wolkenform",
"cherubiSunshine": "Sonnenform",
"shellosEast": "Östliches Meer",
"shellosWest": "Westliches Meer",
"rotom": "Normalform",
"rotomHeat": "Hitze-Rotom",
"rotomWash": "Wasch-Rotom",
"rotomFrost": "Frost-Rotom",
"rotomFan": "Wirbel-Rotom",
"rotomMow": "Schneid-Rotom",
"dialga": "Normalform",
"dialgaOrigin": "Urform",
"palkia": "Normalform",
"palkiaOrigin": "Urform",
"giratinaAltered": "Wandelform",
"giratinaOrigin": "Urform",
"shayminLand": "Landform",
"shayminSky": "Zenitform",
"basculinRedStriped": "Rotlinige Form",
"basculinBlueStriped": "Blaulinige Form",
"basculinWhiteStriped": "Weißlinige Form",
"darumaka": "Normalmodus",
"darumakaZen": "Trance-Modus",
"deerlingSpring": "Frühlingsform",
"deerlingSummer": "Sommerform",
"deerlingAutumn": "Herbstform",
"deerlingWinter": "Winterform",
"tornadusIncarnate": "Inkarnationsform",
"tornadusTherian": "Tiergeistform",
"thundurusIncarnate": "Inkarnationsform",
"thundurusTherian": "Tiergeistform",
"landorusIncarnate": "Inkarnationsform",
"landorusTherian": "Tiergeistform",
"kyurem": "Normal",
"kyuremBlack": "Schwarzes Kyurem",
"kyuremWhite": "Weißes Kyurem",
"keldeoOrdinary": "Standardform",
"keldeoResolute": "Resolutform",
"meloettaAria": "Gesangsform",
"meloettaPirouette": "Tanzform",
"froakieBattleBond": "Ash-Form",
"genesect": "Normal",
"genesectShock": "Blitzmodul",
"genesectBurn": "Flammenmodul",
"genesectChill": "Gefriermodul",
"genesectDouse": "Aquamodul",
"froakie": "Normalform",
"froakieBattleBond": "Freundschaftsakt",
"froakieAsh": "Ash-Form",
"scatterbugMeadow": "Blumenmeermuster",
"scatterbugIcySnow": "Frostmuster",
"scatterbugPolar": "Schneefeldmuster",
@ -91,6 +123,7 @@
"flabebeOrange": "Orangeblütler",
"flabebeBlue": "Blaublütler",
"flabebeWhite": "Weißblütler",
"furfrou": "Zottelform",
"furfrouHeart": "Herzchenschnitt",
"furfrouStar": "Sternchenschnitt",
"furfrouDiamond": "Diamantenschitt",
@ -100,6 +133,11 @@
"furfrouLaReine": "Königinnenschnitt",
"furfrouKabuki": "Kabuki-Schnitt",
"furfrouPharaoh": "Herrscherschnitt",
"espurrMale": "männlich",
"espurrFemale": "weiblich",
"honedgeShiled": "Schildform",
"honedgeBlade": "Klingenform",
"pumpkaboo": "Größe M",
"pumpkabooSmall": "Größe S",
"pumpkabooLarge": "Größe L",
"pumpkabooSuper": "Größe XL",
@ -110,11 +148,37 @@
"zygarde50Pc": "50% Form Scharwandel",
"zygarde10Pc": "10% Form Scharwandel",
"zygardeComplete": "Optimum-Form",
"hoopa": "Gebanntes Hoopa",
"hoopaUnbound": "Entfesseltes Hoopa",
"oricorioBaile": "Flamenco-Stil",
"oricorioPompom": "Cheerleading-Stil",
"oricorioPau": "Hula-Stil",
"oricorioSensu": "Buyo-Stil",
"rockruff": "Normalform",
"rockruffOwnTempo": "Gleichmut",
"rockruffMidday": "Tagform",
"rockruffMidnight": "Nachtform",
"rockruffDusk": "Zwielichtform",
"wishiwashi": "Einzelform",
"wishiwashiSchool": "Schwarmform",
"typeNullNormal": "Typ:Normal",
"typeNullFighting": "Typ:Kampf",
"typeNullFlying": "Typ:Flug",
"typeNullPoison": "Typ:Gift",
"typeNullGround": "Typ:Boden",
"typeNullRock": "Typ:Gestein",
"typeNullBug": "Typ:Käfer",
"typeNullGhost": "Typ:Geist",
"typeNullSteel": "Typ:Stahl",
"typeNullFire": "Typ:Feuer",
"typeNullWater": "Typ:Wasser",
"typeNullGrass": "Typ:Pflanze",
"typeNullElectric": "Typ:Elektro",
"typeNullPsychic": "Typ:Psycho",
"typeNullIce": "Typ:Eis",
"typeNullDragon": "Typ:Drache",
"typeNullDark": "Typ:Unlicht",
"typeNullFairy": "Typ:Fee",
"miniorRedMeteor": "Rote-Meteorform",
"miniorOrangeMeteor": "Oranger-Meteorform",
"miniorYellowMeteor": "Gelber-Meteorform",
@ -131,25 +195,66 @@
"miniorViolet": "Violetter Kern",
"mimikyuDisguised": "Verkleidete Form",
"mimikyuBusted": "Entlarvte Form",
"necrozma": "Normalform",
"necrozmaDuskMane": "Abendmähne",
"necrozmaDawnWings": "Morgenschwingen",
"necrozmaUltra": "Ultra-Necrozma",
"magearna": "Normalform",
"magearnaOriginal": "Originalfarbe",
"marshadow": "Normalform",
"marshadowZenith": "Zenitform",
"cramorant": "Normalform",
"cramorantGulping": "Schlingform",
"cramorantGorging": "Stopfform",
"toxelAmped": "Hoch-Form",
"toxelLowkey": "Tief-Form",
"sinisteaPhony": "Fälschungsform",
"sinisteaAntique": "Originalform",
"milceryVanillaCream": "Vanille-Creme",
"milceryRubyCream": "Ruby-Creme",
"milceryMatchaCream": "Matcha-Creme",
"milceryMintCream": "Minz-Creme",
"milceryLemonCream": "Zitronen-Creme",
"milcerySaltedCream": "Salz-Creme",
"milceryRubySwirl": "Ruby-Mix",
"milceryCaramelSwirl": "Karamell-Mix",
"milceryRainbowSwirl": "Trio-Mix",
"eiscue": "Tiefkühlkopf",
"eiscueNoIce": "Wohlfühlkopf",
"indeedeeMale": "männlich",
"indeedeeFemale": "weiblich",
"morpekoFullBelly": "Pappsattmuster",
"morpekoHangry": "Kohldampfmuster",
"zacianHeroOfManyBattles": "Heldenhafter Krieger",
"zacianCrowned": "König des Schwertes",
"zamazentaHeroOfManyBattles": "Heldenhafter Krieger",
"zamazentaCrowned": "König des Schildes",
"kubfuSingleStrike": "Fokussierter Stil",
"kubfuRapidStrike": "Fließender Stil",
"zarude": "Normalform",
"zarudeDada": "Papa",
"calyrex": "Normalform",
"calyrexIce": "Schimmelreiter",
"calyrexShadow": "Rappenreiter",
"basculinMale": "männlich",
"basculinFemale": "weiblich",
"enamorusIncarnate": "Inkarnationsform",
"enamorusTherian": "Tiergeistform",
"lechonkMale": "männlich",
"lechonkFemale": "weiblich",
"tandemausFour": "Dreierfamilie",
"tandemausThree": "Viererfamilie",
"squawkabillyGreenPlumage": "Grüngefiedert",
"squawkabillyBluePlumage": "Blaugefiedert",
"squawkabillyYellowPlumage": "Gelbgefiedert",
"squawkabillyWhitePlumage": "Weißgefiedert",
"finizenZero": "Alltagsform",
"finizenHero": "Heldenform",
"tatsugiriCurly": "Gebogene Form",
"tatsugiriDroopy": "Hängende Form",
"tatsugiriStretchy": "Gestrekte Form",
"dunsparceTwo": "Zweisegmentform",
"dunsparceThree": "Dreisegmentform",
"gimmighoulChest": "Truhenform",
"gimmighoulRoaming": "Wanderform",
"koraidonApexBuild": "Vollkommene Gestalt",
@ -164,7 +269,22 @@
"miraidonGlideMode": "Gleitmodus",
"poltchageistCounterfeit": "Imitationsform",
"poltchageistArtisan": "Kostbarkeitsform",
"poltchageistUnremarkable": "Simple Form",
"poltchageistMasterpiece": "Edle Form",
"ogerponTealMask": "Türkisgrüne Maske",
"ogerponTealMaskTera": "Türkisgrüne Maske (Terakristallisiert)",
"ogerponWellspringMask": "Brunnenmaske",
"ogerponWellspringMaskTera": "Brunnenmaske (Terakristallisiert)",
"ogerponHearthflameMask": "Ofenmaske",
"ogerponHearthflameMaskTera": "Ofenmaske (Terakristallisiert)",
"ogerponCornerstoneMask": "Fundamentmaske",
"ogerponCornerstoneMaskTera": "Fundamentmaske (Terakristallisiert)",
"terpagos": "Normalform",
"terpagosTerastal": "Terakristall-Form",
"terpagosStellar": "Stellarform",
"galarDarumaka": "Normalmodus",
"galarDarumakaZen": "Trance-Modus",
"paldeaTaurosCombat": "Gefechtsvariante",
"paldeaTaurosBlaze": "Flammenvariante",
"paldeaTaurosAqua": "Flutenvariante"
}
}

View File

@ -126,5 +126,8 @@
"skull_grunts": "Rüpel von Team Skull",
"macro_grunt": "Angestellter von Macro Cosmos",
"macro_grunt_female": "Angestellte von Macro Cosmos",
"macro_grunts": "Angestellte von Macro Cosmos"
"macro_grunts": "Angestellte von Macro Cosmos",
"star_grunt": "Rüpel von Team Star",
"star_grunt_female": "Rüpel von Team Star",
"star_grunts": "Rüpel von Team Star"
}

View File

@ -142,6 +142,11 @@
"faba": "Fabian",
"plumeria": "Fran",
"oleana": "Olivia",
"giacomo": "Pinio",
"mela": "Irsa",
"atticus": "Shugi",
"ortega": "Otis",
"eri": "Rioba",
"maxie": "Marc",
"archie": "Adrian",
@ -151,6 +156,7 @@
"lusamine": "Samantha",
"guzma": "Bromley",
"rose": "Rose",
"cassiopeia": "Cosima",
"blue_red_double": "Blau & Rot",
"red_blue_double": "Rot & Blau",
@ -161,5 +167,19 @@
"alder_iris_double": "Lauro & Lilia",
"iris_alder_double": "Lilia & Lauro",
"piers_marnie_double": "Nezz & Mary",
"marnie_piers_double": "Mary & Nezz"
"marnie_piers_double": "Mary & Nezz",
"buck": "Avenaro",
"cheryl": "Raissa",
"marley": "Charlie",
"mira": "Orisa",
"riley": "Urs",
"victor": "Viktor",
"victoria": "Viktoria",
"vivi": "Sieglinde",
"vicky": "Vicky",
"vito": "Paul",
"bug_type_superfan": "Käfersammler-Superfan",
"expert_pokemon_breeder": "Pokémon-Züchter-Expertin"
}

View File

@ -19,6 +19,7 @@
"aether_boss": "Æther-Präsidentin",
"skull_boss": "Skull-Boss",
"macro_boss": "Geschäftsführer von Macro Cosmos",
"star_boss": "Team Star Big Boss",
"rocket_admin": "Team Rocket Vorstand",
"rocket_admin_female": "Team Rocket Vorstand",
"magma_admin": "Team Magma Vorstand",
@ -33,6 +34,8 @@
"flare_admin_female": "Team Flare Vorstand",
"aether_admin": "Æther-Regionalleiter",
"skull_admin": "Team Skull Vorstand",
"macro_admin": "Vizepräsidentin von Macro Cosmos"
"macro_admin": "Vizepräsidentin von Macro Cosmos",
"star_admin": "Team Star Boss",
"the_winstrates": "Sihgers"
}

View File

@ -1237,6 +1237,6 @@
},
"poisonPuppeteer": {
"name": "Poison Puppeteer",
"description": "Pokémon poisoned by Pecharunt's moves will also become confused."
"description": "Pokémon poisoned by this Pokémon's moves will also become confused."
}
}

View File

@ -73,5 +73,6 @@
"tarShotOnAdd": "{{pokemonNameWithAffix}} became weaker to fire!",
"substituteOnAdd": "{{pokemonNameWithAffix}} put in a substitute!",
"substituteOnHit": "The substitute took damage for {{pokemonNameWithAffix}}!",
"substituteOnRemove": "{{pokemonNameWithAffix}}'s substitute faded!"
"substituteOnRemove": "{{pokemonNameWithAffix}}'s substitute faded!",
"autotomizeOnAdd": "{{pokemonNameWIthAffix}} became nimble!"
}

View File

@ -111,7 +111,7 @@
"forest": "PMD EoS Dusk Forest",
"grass": "PMD EoS Apple Woods",
"graveyard": "PMD EoS Mystifying Forest",
"ice_cave": "Firel - -60F",
"ice_cave": "Firel - -50°C",
"island": "PMD EoS Craggy Coast",
"jungle": "Lmz - Jungle",
"laboratory": "Firel - Laboratory",

View File

@ -55,36 +55,36 @@ import moveTriggers from "./move-trigger.json";
import runHistory from "./run-history.json";
import mysteryEncounterMessages from "./mystery-encounter-messages.json";
import lostAtSea from "./mystery-encounters/lost-at-sea-dialogue.json";
import mysteriousChest from "#app/locales/en/mystery-encounters/mysterious-chest-dialogue.json";
import mysteriousChallengers from "#app/locales/en/mystery-encounters/mysterious-challengers-dialogue.json";
import darkDeal from "#app/locales/en/mystery-encounters/dark-deal-dialogue.json";
import departmentStoreSale from "#app/locales/en/mystery-encounters/department-store-sale-dialogue.json";
import fieldTrip from "#app/locales/en/mystery-encounters/field-trip-dialogue.json";
import fieryFallout from "#app/locales/en/mystery-encounters/fiery-fallout-dialogue.json";
import fightOrFlight from "#app/locales/en/mystery-encounters/fight-or-flight-dialogue.json";
import safariZone from "#app/locales/en/mystery-encounters/safari-zone-dialogue.json";
import shadyVitaminDealer from "#app/locales/en/mystery-encounters/shady-vitamin-dealer-dialogue.json";
import slumberingSnorlax from "#app/locales/en/mystery-encounters/slumbering-snorlax-dialogue.json";
import trainingSession from "#app/locales/en/mystery-encounters/training-session-dialogue.json";
import theStrongStuff from "#app/locales/en/mystery-encounters/the-strong-stuff-dialogue.json";
import pokemonSalesman from "#app/locales/en/mystery-encounters/the-pokemon-salesman-dialogue.json";
import offerYouCantRefuse from "#app/locales/en/mystery-encounters/an-offer-you-cant-refuse-dialogue.json";
import delibirdy from "#app/locales/en/mystery-encounters/delibirdy-dialogue.json";
import absoluteAvarice from "#app/locales/en/mystery-encounters/absolute-avarice-dialogue.json";
import aTrainersTest from "#app/locales/en/mystery-encounters/a-trainers-test-dialogue.json";
import trashToTreasure from "#app/locales/en/mystery-encounters/trash-to-treasure-dialogue.json";
import berriesAbound from "#app/locales/en/mystery-encounters/berries-abound-dialogue.json";
import clowningAround from "#app/locales/en/mystery-encounters/clowning-around-dialogue.json";
import partTimer from "#app/locales/en/mystery-encounters/part-timer-dialogue.json";
import dancingLessons from "#app/locales/en/mystery-encounters/dancing-lessons-dialogue.json";
import weirdDream from "#app/locales/en/mystery-encounters/weird-dream-dialogue.json";
import theWinstrateChallenge from "#app/locales/en/mystery-encounters/the-winstrate-challenge-dialogue.json";
import teleportingHijinks from "#app/locales/en/mystery-encounters/teleporting-hijinks-dialogue.json";
import bugTypeSuperfan from "#app/locales/en/mystery-encounters/bug-type-superfan-dialogue.json";
import funAndGames from "#app/locales/en/mystery-encounters/fun-and-games-dialogue.json";
import uncommonBreed from "#app/locales/en/mystery-encounters/uncommon-breed-dialogue.json";
import globalTradeSystem from "#app/locales/en/mystery-encounters/global-trade-system-dialogue.json";
import expertPokemonBreeder from "#app/locales/en/mystery-encounters/the-expert-pokemon-breeder-dialogue.json";
import mysteriousChest from "./mystery-encounters/mysterious-chest-dialogue.json";
import mysteriousChallengers from "./mystery-encounters/mysterious-challengers-dialogue.json";
import darkDeal from "./mystery-encounters/dark-deal-dialogue.json";
import departmentStoreSale from "./mystery-encounters/department-store-sale-dialogue.json";
import fieldTrip from "./mystery-encounters/field-trip-dialogue.json";
import fieryFallout from "./mystery-encounters/fiery-fallout-dialogue.json";
import fightOrFlight from "./mystery-encounters/fight-or-flight-dialogue.json";
import safariZone from "./mystery-encounters/safari-zone-dialogue.json";
import shadyVitaminDealer from "./mystery-encounters/shady-vitamin-dealer-dialogue.json";
import slumberingSnorlax from "./mystery-encounters/slumbering-snorlax-dialogue.json";
import trainingSession from "./mystery-encounters/training-session-dialogue.json";
import theStrongStuff from "./mystery-encounters/the-strong-stuff-dialogue.json";
import pokemonSalesman from "./mystery-encounters/the-pokemon-salesman-dialogue.json";
import offerYouCantRefuse from "./mystery-encounters/an-offer-you-cant-refuse-dialogue.json";
import delibirdy from "./mystery-encounters/delibirdy-dialogue.json";
import absoluteAvarice from "./mystery-encounters/absolute-avarice-dialogue.json";
import aTrainersTest from "./mystery-encounters/a-trainers-test-dialogue.json";
import trashToTreasure from "./mystery-encounters/trash-to-treasure-dialogue.json";
import berriesAbound from "./mystery-encounters/berries-abound-dialogue.json";
import clowningAround from "./mystery-encounters/clowning-around-dialogue.json";
import partTimer from "./mystery-encounters/part-timer-dialogue.json";
import dancingLessons from "./mystery-encounters/dancing-lessons-dialogue.json";
import weirdDream from "./mystery-encounters/weird-dream-dialogue.json";
import theWinstrateChallenge from "./mystery-encounters/the-winstrate-challenge-dialogue.json";
import teleportingHijinks from "./mystery-encounters/teleporting-hijinks-dialogue.json";
import bugTypeSuperfan from "./mystery-encounters/bug-type-superfan-dialogue.json";
import funAndGames from "./mystery-encounters/fun-and-games-dialogue.json";
import uncommonBreed from "./mystery-encounters/uncommon-breed-dialogue.json";
import globalTradeSystem from "./mystery-encounters/global-trade-system-dialogue.json";
import expertPokemonBreeder from "./mystery-encounters/the-expert-pokemon-breeder-dialogue.json";
/**
* Dialogue/Text token injection patterns that can be used:

View File

@ -766,6 +766,7 @@
"2_female": "You are a trainer aren't you? I'm afraid that doesn't give you the right to interfere in our work.",
"3": "I'm from Macro Cosmos Insurance! Do you have a life insurance policy?",
"4": "I found you! In that case, time for a Pokémon battle!",
"4_female": "I found you! In that case, time for a Pokémon battle!",
"5": "An earful from Ms. Oleana is way worse than anything you can do!"
},
"victory": {
@ -796,7 +797,8 @@
"3": "If you don't clear out real quick-like, I'll hafta come at you in self-defense. You get me?",
"4": "Sorry, but if you don't turn yourself around here, amigo, we'll have to send you packing!",
"4_female": "Sorry, but if you don't turn yourself around here, amiga, we'll have to send you packing!",
"5": "Oh great. Here comes another rando to ruin my day."
"5": "Oh great. Here comes another rando to ruin my day.",
"5_female": "Oh great. Here comes another rando to ruin my day."
},
"victory": {
"1": "How come I'M the one seeing stars?!",
@ -819,6 +821,7 @@
"mela": {
"encounter": {
"1": "So you're the dope who picked a fight with Team Star... Prepare to get messed up.",
"1_female": "So you're the dope who picked a fight with Team Star... Prepare to get messed up.",
"2": "All riiight, BRING IT! I'll blow everythin' sky high!"
},
"victory": {
@ -829,6 +832,7 @@
"atticus": {
"encounter": {
"1": "You have some nerve baring your fangs at Team Star. Come, then, villainous wretch!",
"1_female": "You have some nerve baring your fangs at Team Star. Come, then, villainous wretch!",
"2": "Be warned—I shall spare thee no mercy! En garde!"
},
"victory": {
@ -839,7 +843,8 @@
"ortega": {
"encounter": {
"1": "I promise I'll play nice, so don't blame me when this battle sends you blubbering back home!",
"2": "I'll wipe that smug look off your face for sure! You're going down!"
"2": "I'll wipe that smug look off your face for sure! You're going down!",
"2_female": "I'll wipe that smug look off your face for sure! You're going down!"
},
"victory": {
"1": "Ugh! How could I LOSE! What the HECK!",

View File

@ -66,6 +66,7 @@
"suppressAbilities": "{{pokemonName}}'s ability\nwas suppressed!",
"revivalBlessing": "{{pokemonName}} was revived!",
"swapArenaTags": "{{pokemonName}} swapped the battle effects affecting each side of the field!",
"chillyReception": "{{pokemonName}} is preparing to tell a chillingly bad joke!",
"exposedMove": "{{pokemonName}} identified\n{{targetPokemonName}}!",
"safeguard": "{{targetName}} is protected by Safeguard!",
"substituteOnOverlap": "{{pokemonName}} already\nhas a substitute!",

Some files were not shown because too many files have changed in this diff Show More