diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index e78977b56ba..060bf3efa19 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -1554,7 +1554,7 @@ export class MysteryEncounterPostSummonTag extends BattlerTag { const cancelled = new Utils.BooleanHolder(false); applyAbAttrs(ProtectStatAbAttr, pokemon, cancelled); if (!cancelled.value) { - const mysteryEncounterBattleEffects = pokemon.summonData.mysteryEncounterBattleEffects; + const mysteryEncounterBattleEffects = pokemon.mysteryEncounterBattleEffects; if (mysteryEncounterBattleEffects) { mysteryEncounterBattleEffects(pokemon); } diff --git a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts index 103fe82ea9f..23ccba9c32e 100644 --- a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts +++ b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts @@ -13,7 +13,7 @@ import { EnemyPartyConfig, EnemyPokemonConfig, initBattleWithEnemyConfig, leaveE import { getRandomPlayerPokemon, getRandomSpeciesByStarterTier } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; /** i18n namespace for encounter */ -const namespace = "mysteryEncounter:dark_deal"; +const namespace = "mysteryEncounter:darkDeal"; /** Exclude Ultra Beasts (inludes Cosmog/Solgaleo/Lunala/Necrozma), Paradox (includes Miraidon/Koraidon), Eternatus, and egg-locked mythicals */ const excludedBosses = [ @@ -91,32 +91,32 @@ export const DarkDealEncounter: IMysteryEncounter = ]) .withIntroDialogue([ { - text: `${namespace}_intro_message`, + text: `${namespace}:intro`, }, { - speaker: `${namespace}_speaker`, - text: `${namespace}_intro_dialogue`, + speaker: `${namespace}:speaker`, + text: `${namespace}:intro_dialogue`, }, ]) .withSceneWaveRangeRequirement(30, 180) // waves 30 to 180 .withScenePartySizeRequirement(2, 6) // Must have at least 2 pokemon in party .withCatchAllowed(true) - .withTitle(`${namespace}_title`) - .withDescription(`${namespace}_description`) - .withQuery(`${namespace}_query`) + .withTitle(`${namespace}:title`) + .withDescription(`${namespace}:description`) + .withQuery(`${namespace}:query`) .withOption( new MysteryEncounterOptionBuilder() .withOptionMode(EncounterOptionMode.DEFAULT) .withDialogue({ - buttonLabel: `${namespace}_option_1_label`, - buttonTooltip: `${namespace}_option_1_tooltip`, + buttonLabel: `${namespace}:option:1:label`, + buttonTooltip: `${namespace}:option:1:tooltip`, selected: [ { - speaker: `${namespace}_speaker`, - text: `${namespace}_option_1_selected`, + speaker: `${namespace}:speaker`, + text: `${namespace}:option:1:selected_dialogue`, }, { - text: `${namespace}_option_1_selected_message`, + text: `${namespace}:option:1:selected_message`, }, ], }) @@ -126,10 +126,7 @@ export const DarkDealEncounter: IMysteryEncounter = const removedPokemon = getRandomPlayerPokemon(scene, false, true); scene.removePokemonFromPlayerParty(removedPokemon); - scene.currentBattle.mysteryEncounter.setDialogueToken( - "pokeName", - removedPokemon.name - ); + scene.currentBattle.mysteryEncounter.setDialogueToken("pokeName", removedPokemon.name); // Store removed pokemon types scene.currentBattle.mysteryEncounter.misc = [ @@ -158,7 +155,6 @@ export const DarkDealEncounter: IMysteryEncounter = pokemonConfig.formIndex = 0; } const config: EnemyPartyConfig = { - levelAdditiveMultiplier: 0.75, pokemonConfigs: [pokemonConfig], }; return initBattleWithEnemyConfig(scene, config); @@ -167,12 +163,12 @@ export const DarkDealEncounter: IMysteryEncounter = ) .withSimpleOption( { - buttonLabel: `${namespace}_option_2_label`, - buttonTooltip: `${namespace}_option_2_tooltip`, + buttonLabel: `${namespace}:option:2:label`, + buttonTooltip: `${namespace}:option:2:tooltip`, selected: [ { - speaker: `${namespace}_speaker`, - text: `${namespace}_option_2_selected`, + speaker: `${namespace}:speaker`, + text: `${namespace}:option:2:selected`, }, ], }, @@ -184,7 +180,7 @@ export const DarkDealEncounter: IMysteryEncounter = ) .withOutroDialogue([ { - text: `${namespace}_outro` + text: `${namespace}:outro` } ]) .build(); diff --git a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts index 8b61b690bfa..fc8ba869fe9 100644 --- a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts +++ b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts @@ -102,23 +102,23 @@ export const FightOrFlightEncounter: IMysteryEncounter = const primaryPokemon = encounter.options[1].primaryPokemon; if (primaryPokemon) { // Use primaryPokemon to execute the thievery - encounter.options[1].dialogue.buttonTooltip = `${namespace}_option_2_steal_tooltip`; + encounter.options[1].dialogue.buttonTooltip = `${namespace}:option:2:tooltip_special`; } else { - encounter.options[1].dialogue.buttonTooltip = `${namespace}_option_2_tooltip`; + encounter.options[1].dialogue.buttonTooltip = `${namespace}:option:2:tooltip`; } return true; }) - .withTitle(`${namespace}_title`) - .withDescription(`${namespace}_description`) - .withQuery(`${namespace}_query`) + .withTitle(`${namespace}:title`) + .withDescription(`${namespace}:description`) + .withQuery(`${namespace}:query`) .withSimpleOption( { - buttonLabel: `${namespace}_option_1_label`, - buttonTooltip: `${namespace}_option_1_tooltip`, + buttonLabel: `${namespace}:option:1:label`, + buttonTooltip: `${namespace}:option:1:tooltip`, selected: [ { - text: `${namespace}_option_1_selected_message`, + text: `${namespace}:option:1:selected`, }, ], }, @@ -135,8 +135,8 @@ export const FightOrFlightEncounter: IMysteryEncounter = .withOptionMode(EncounterOptionMode.DEFAULT_OR_SPECIAL) .withPrimaryPokemonRequirement(new MoveRequirement(STEALING_MOVES)) // Will set option2PrimaryName and option2PrimaryMove dialogue tokens automatically .withDialogue({ - buttonLabel: `${namespace}_option_2_label`, - buttonTooltip: `${namespace}_option_2_tooltip`, + buttonLabel: `${namespace}:option:2:label`, + buttonTooltip: `${namespace}:option:2:tooltip`, }) .withOptionPhase(async (scene: BattleScene) => { // Pick steal @@ -148,7 +148,7 @@ export const FightOrFlightEncounter: IMysteryEncounter = const primaryPokemon = encounter.options[1].primaryPokemon; if (primaryPokemon) { // Use primaryPokemon to execute the thievery - await showEncounterText(scene, `${namespace}_option_2_steal_result`); + await showEncounterText(scene, `${namespace}:option:2:steal_result`); leaveEncounterWithoutBattle(scene); return; } @@ -160,15 +160,15 @@ export const FightOrFlightEncounter: IMysteryEncounter = config.pokemonConfigs[0].tags = [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON]; config.pokemonConfigs[0].mysteryEncounterBattleEffects = (pokemon: Pokemon) => { pokemon.scene.currentBattle.mysteryEncounter.setDialogueToken("enemyPokemon", pokemon.name); - queueEncounterMessage(pokemon.scene, `${namespace}_boss_enraged`); + queueEncounterMessage(pokemon.scene, `${namespace}:boss_enraged`); pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD], 1)); }; - await showEncounterText(scene, `${namespace}_option_2_bad_result`); + await showEncounterText(scene, `${namespace}:option:2:bad_result`); await initBattleWithEnemyConfig(scene, config); } else { // Steal item (37.5%) // Display result message then proceed to rewards - await showEncounterText(scene, `${namespace}_option_2_good_result`); + await showEncounterText(scene, `${namespace}:option:2:good_result`); leaveEncounterWithoutBattle(scene); } }) @@ -176,11 +176,11 @@ export const FightOrFlightEncounter: IMysteryEncounter = ) .withSimpleOption( { - buttonLabel: `${namespace}_option_3_label`, - buttonTooltip: `${namespace}_option_3_tooltip`, + buttonLabel: `${namespace}:option:3:label`, + buttonTooltip: `${namespace}:option:3:tooltip`, selected: [ { - text: `${namespace}_option_3_selected`, + text: `${namespace}:option:3:selected`, }, ], }, diff --git a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts index 276da15a2ae..fb7d1bcbbb5 100644 --- a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts +++ b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts @@ -16,7 +16,7 @@ const OPTION_2_REQUIRED_MOVE = Moves.FLY; */ const DAMAGE_PERCENTAGE: number = 25; /** The i18n namespace for the encounter */ -const namepsace = "mysteryEncounter:lostAtSeaDialogue"; +const namespace = "mysteryEncounter:lostAtSea"; /** * Lost at sea encounter. @@ -35,7 +35,7 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with y: 3, }, ]) - .withIntroDialogue([{ text: `${namepsace}:intro` }]) + .withIntroDialogue([{ text: `${namespace}:intro` }]) .withOnInit((scene: BattleScene) => { const { mysteryEncounter } = scene.currentBattle; @@ -45,22 +45,22 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with return true; }) - .withTitle(`${namepsace}:title`) - .withDescription(`${namepsace}:description`) - .withQuery(`${namepsace}:query`) + .withTitle(`${namespace}:title`) + .withDescription(`${namespace}:description`) + .withQuery(`${namespace}:query`) .withOption( // Option 1: Use a (non fainted) pokemon that can learn Surf to guide you back/ new MysteryEncounterOptionBuilder() .withPokemonCanLearnMoveRequirement(OPTION_1_REQUIRED_MOVE) .withOptionMode(EncounterOptionMode.DISABLED_OR_DEFAULT) .withDialogue({ - buttonLabel: `${namepsace}:option:1:label`, - disabledButtonLabel: `${namepsace}:option:1:label_disabled`, - buttonTooltip: `${namepsace}:option:1:tooltip`, - disabledButtonTooltip: `${namepsace}:option:1:tooltip_disabled`, + buttonLabel: `${namespace}:option:1:label`, + disabledButtonLabel: `${namespace}:option:1:label_disabled`, + buttonTooltip: `${namespace}:option:1:tooltip`, + disabledButtonTooltip: `${namespace}:option:1:tooltip_disabled`, selected: [ { - text: `${namepsace}:option:1:selected`, + text: `${namespace}:option:1:selected`, }, ], }) @@ -73,13 +73,13 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with .withPokemonCanLearnMoveRequirement(OPTION_2_REQUIRED_MOVE) .withOptionMode(EncounterOptionMode.DISABLED_OR_DEFAULT) .withDialogue({ - buttonLabel: `${namepsace}:option:2:label`, - disabledButtonLabel: `${namepsace}:option:2:label_disabled`, - buttonTooltip: `${namepsace}:option:2:tooltip`, - disabledButtonTooltip: `${namepsace}:option:2:tooltip_disabled`, + buttonLabel: `${namespace}:option:2:label`, + disabledButtonLabel: `${namespace}:option:2:label_disabled`, + buttonTooltip: `${namespace}:option:2:tooltip`, + disabledButtonTooltip: `${namespace}:option:2:tooltip_disabled`, selected: [ { - text: `${namepsace}:option:2:selected`, + text: `${namespace}:option:2:selected`, }, ], }) @@ -89,11 +89,11 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with .withSimpleOption( // Option 3: Wander aimlessly { - buttonLabel: `${namepsace}:option:3:label`, - buttonTooltip: `${namepsace}:option:3:tooltip`, + buttonLabel: `${namespace}:option:3:label`, + buttonTooltip: `${namespace}:option:3:tooltip`, selected: [ { - text: `${namepsace}:option:3:selected`, + text: `${namespace}:option:3:selected`, }, ], }, @@ -113,7 +113,7 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with ) .withOutroDialogue([ { - text: `${namepsace}:outro`, + text: `${namespace}:outro`, }, ]) .build(); diff --git a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts index a2df4968f1d..a46f6fd5f8d 100644 --- a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts @@ -99,7 +99,7 @@ export const MysteriousChallengersEncounter: IMysteryEncounter = const brutalSpriteKey = brutalConfig.getSpriteKey(female, brutalConfig.doubleOnly); encounter.enemyPartyConfigs.push({ trainerConfig: brutalConfig, - levelAdditiveMultiplier: 1.1, + levelAdditiveMultiplier: 1, female: female, }); diff --git a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts index 91c5aaac0c0..67ca533e893 100644 --- a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts @@ -9,7 +9,7 @@ import IMysteryEncounter, { MysteryEncounterBuilder, MysteryEncounterTier, } fro import { EncounterOptionMode, MysteryEncounterOptionBuilder } from "../mystery-encounter-option"; /** i18n namespace for encounter */ -const namespace = "mysteryEncounter:dark_deal"; +const namespace = "mysteryEncounter:mysteriousChest"; /** * Mysterious Chest encounter. diff --git a/src/data/mystery-encounters/encounters/sleeping-snorlax-encounter.ts b/src/data/mystery-encounters/encounters/sleeping-snorlax-encounter.ts index 98013352353..0e60304d9dc 100644 --- a/src/data/mystery-encounters/encounters/sleeping-snorlax-encounter.ts +++ b/src/data/mystery-encounters/encounters/sleeping-snorlax-encounter.ts @@ -1,17 +1,19 @@ import { STEALING_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups"; import { modifierTypes } from "#app/modifier/modifier-type"; -import { BerryType } from "#enums/berry-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; -import BattleScene from "../../../battle-scene"; -import * as Utils from "../../../utils"; -import { getPokemonSpecies } from "../../pokemon-species"; -import { Status, StatusEffect } from "../../status-effect"; +import BattleScene from "#app/battle-scene"; +import { StatusEffect } from "#app/data/status-effect"; import IMysteryEncounter, { MysteryEncounterBuilder, MysteryEncounterTier, } from "../mystery-encounter"; import { EncounterOptionMode, MysteryEncounterOptionBuilder } from "../mystery-encounter-option"; import { MoveRequirement } from "../mystery-encounter-requirements"; -import { EnemyPartyConfig, EnemyPokemonConfig, generateModifierTypeOption, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, setEncounterExp, setEncounterRewards, } from "../utils/encounter-phase-utils"; +import { EnemyPartyConfig, EnemyPokemonConfig, initBattleWithEnemyConfig, initCustomMovesForEncounter, leaveEncounterWithoutBattle, setEncounterExp, setEncounterRewards, } from "../utils/encounter-phase-utils"; import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; +import { Moves } from "#enums/moves"; +import { BattlerIndex } from "#app/battle"; +import { PokemonMove } from "#app/field/pokemon"; +import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { PartyHealPhase } from "#app/phases"; /** i18n namespace for the encounter */ const namespace = "mysteryEncounter:sleeping_snorlax"; @@ -54,13 +56,18 @@ export const SleepingSnorlaxEncounter: IMysteryEncounter = const pokemonConfig: EnemyPokemonConfig = { species: bossSpecies, isBoss: true, - status: StatusEffect.SLEEP, + status: [StatusEffect.SLEEP, 5], // Extra turns on timer for Snorlax's start of fight moves + moveSet: [Moves.REST, Moves.SLEEP_TALK, Moves.CRUNCH, Moves.GIGA_IMPACT] }; const config: EnemyPartyConfig = { - levelAdditiveMultiplier: 2, + levelAdditiveMultiplier: 0.5, pokemonConfigs: [pokemonConfig], }; encounter.enemyPartyConfigs = [config]; + + // Load animations/sfx for Snorlax fight start moves + initCustomMovesForEncounter(scene, [Moves.SNORE]); + return true; }) .withTitle(`${namespace}_title`) @@ -78,12 +85,22 @@ export const SleepingSnorlaxEncounter: IMysteryEncounter = }, async (scene: BattleScene) => { // Pick battle - // TODO: do we want special rewards for this? - // setCustomEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.LEFTOVERS], fillRemaining: true}); - await initBattleWithEnemyConfig( - scene, - scene.currentBattle.mysteryEncounter.enemyPartyConfigs[0] - ); + const encounter = scene.currentBattle.mysteryEncounter; + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.LEFTOVERS], fillRemaining: true}); + encounter.startOfBattleEffects.push( + { + sourceBattlerIndex: BattlerIndex.ENEMY, + targets: [BattlerIndex.PLAYER], + move: new PokemonMove(Moves.SNORE), + ignorePp: true + }, + { + sourceBattlerIndex: BattlerIndex.ENEMY, + targets: [BattlerIndex.PLAYER], + move: new PokemonMove(Moves.SNORE), + ignorePp: true + }); + await initBattleWithEnemyConfig(scene, encounter.enemyPartyConfigs[0]); } ) .withSimpleOption( @@ -97,46 +114,11 @@ export const SleepingSnorlaxEncounter: IMysteryEncounter = ], }, async (scene: BattleScene) => { - const instance = scene.currentBattle.mysteryEncounter; - let roll: integer; - scene.executeWithSeedOffset(() => { - roll = Utils.randSeedInt(16, 0); - }, scene.currentBattle.waveIndex); - - // Half Snorlax exp to entire party - setEncounterExp( - scene, - scene.getParty().map((p) => p.id), - 98 - ); - - if (roll > 4) { - // Fall asleep and get a sitrus berry (75%) - const p = instance.primaryPokemon; - p.status = new Status(StatusEffect.SLEEP, 0, 3); - p.updateInfo(true); - const sitrus = generateModifierTypeOption(scene, modifierTypes.BERRY, [BerryType.SITRUS]); - - setEncounterRewards(scene, { - guaranteedModifierTypeOptions: [sitrus], - fillRemaining: false, - }); - queueEncounterMessage(scene, `${namespace}_option_2_bad_result`); - leaveEncounterWithoutBattle(scene); - } else { - // Heal to full (25%) - for (const pokemon of scene.getParty()) { - pokemon.hp = pokemon.getMaxHp(); - pokemon.resetStatus(); - for (const move of pokemon.moveset) { - move.ppUsed = 0; - } - pokemon.updateInfo(true); - } - - queueEncounterMessage(scene, `${namespace}_option_2_good_result`); - leaveEncounterWithoutBattle(scene); - } + // Fall asleep waiting for Snorlax + // Full heal party + scene.unshiftPhase(new PartyHealPhase(scene, true)); + queueEncounterMessage(scene, `${namespace}_option_2_good_result`); + leaveEncounterWithoutBattle(scene); } ) .withOption( @@ -151,13 +133,10 @@ export const SleepingSnorlaxEncounter: IMysteryEncounter = .withOptionPhase(async (scene: BattleScene) => { // Steal the Snorlax's Leftovers const instance = scene.currentBattle.mysteryEncounter; - setEncounterRewards(scene, { - guaranteedModifierTypeFuncs: [modifierTypes.LEFTOVERS], - fillRemaining: false, - }); + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.LEFTOVERS], fillRemaining: false }); queueEncounterMessage(scene, `${namespace}_option_3_good_result`); // Snorlax exp to Pokemon that did the stealing - setEncounterExp(scene, [instance.primaryPokemon.id], 189); + setEncounterExp(scene, instance.primaryPokemon.id, getPokemonSpecies(Species.SNORLAX).baseExp); leaveEncounterWithoutBattle(scene); }) .build() diff --git a/src/data/mystery-encounters/mystery-encounter.ts b/src/data/mystery-encounters/mystery-encounter.ts index 1c6ad219799..5b65cb12260 100644 --- a/src/data/mystery-encounters/mystery-encounter.ts +++ b/src/data/mystery-encounters/mystery-encounter.ts @@ -43,8 +43,8 @@ export interface StartOfBattleEffect { sourceBattlerIndex?: BattlerIndex; targets: BattlerIndex[]; move: PokemonMove; + ignorePp: boolean; followUp?: boolean; - ignorePp?: boolean; } export default interface IMysteryEncounter { diff --git a/src/data/mystery-encounters/mystery-encounters.ts b/src/data/mystery-encounters/mystery-encounters.ts index 77e22fce9e9..672fb3300a4 100644 --- a/src/data/mystery-encounters/mystery-encounters.ts +++ b/src/data/mystery-encounters/mystery-encounters.ts @@ -158,14 +158,15 @@ const anyBiomeEncounters: MysteryEncounterType[] = [ */ export const mysteryEncountersByBiome = new Map([ [Biome.TOWN, []], - [Biome.PLAINS, []], + [Biome.PLAINS, [ + MysteryEncounterType.SLEEPING_SNORLAX + ]], [Biome.GRASS, [ MysteryEncounterType.SLEEPING_SNORLAX, ]], [Biome.TALL_GRASS, []], [Biome.METROPOLIS, []], [Biome.FOREST, [ - MysteryEncounterType.SLEEPING_SNORLAX, MysteryEncounterType.SAFARI_ZONE ]], @@ -178,13 +179,9 @@ export const mysteryEncountersByBiome = new Map([ [Biome.BEACH, []], [Biome.LAKE, []], [Biome.SEABED, []], - [Biome.MOUNTAIN, [ - MysteryEncounterType.SLEEPING_SNORLAX - ]], + [Biome.MOUNTAIN, []], [Biome.BADLANDS, []], - [Biome.CAVE, [ - MysteryEncounterType.SLEEPING_SNORLAX - ]], + [Biome.CAVE, []], [Biome.DESERT, []], [Biome.ICE_CAVE, []], [Biome.MEADOW, []], diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index 6e13bbb0874..44b9f7c8c7e 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -3,13 +3,13 @@ import { biomeLinks } from "#app/data/biomes"; import MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option"; import { WIGHT_INCREMENT_ON_SPAWN_MISS } from "#app/data/mystery-encounters/mystery-encounters"; import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; -import Pokemon, { FieldPosition, PlayerPokemon } from "#app/field/pokemon"; +import Pokemon, { FieldPosition, PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { ExpBalanceModifier, ExpShareModifier, MultipleParticipantExpBonusModifier, PokemonExpBoosterModifier } from "#app/modifier/modifier"; import { CustomModifierSettings, getModifierPoolForType, ModifierPoolType, ModifierType, ModifierTypeFunc, ModifierTypeGenerator, ModifierTypeOption, modifierTypes, PokemonHeldItemModifierType, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; import * as Overrides from "#app/overrides"; import { BattleEndPhase, EggLapsePhase, ExpPhase, GameOverPhase, ModifierRewardPhase, MovePhase, SelectModifierPhase, ShowPartyExpBarPhase, TrainerVictoryPhase } from "#app/phases"; -import { MysteryEncounterBattlePhase, MysteryEncounterPhase, MysteryEncounterRewardsPhase } from "#app/phases/mystery-encounter-phase"; +import { MysteryEncounterBattlePhase, MysteryEncounterBattleStartCleanupPhase, MysteryEncounterPhase, MysteryEncounterRewardsPhase } from "#app/phases/mystery-encounter-phases"; import PokemonData from "#app/system/pokemon-data"; import { OptionSelectConfig, OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { PartyOption, PartyUiMode } from "#app/ui/party-ui-handler"; @@ -30,25 +30,27 @@ import { Gender } from "#app/data/gender"; import { Moves } from "#enums/moves"; import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; -export class EnemyPokemonConfig { +export interface EnemyPokemonConfig { species: PokemonSpecies; - isBoss: boolean = false; + isBoss: boolean; bossSegments?: number; bossSegmentModifier?: number; // Additive to the determined segment number formIndex?: number; level?: number; gender?: Gender; - modifierTypes?: PokemonHeldItemModifierType[]; - dataSource?: PokemonData; - tags?: BattlerTagType[]; - mysteryEncounterBattleEffects?: (pokemon: Pokemon) => void; - status?: StatusEffect; passive?: boolean; + moveSet?: Moves[]; + /** Can set just the status, or pass a timer on the status turns */ + status?: StatusEffect | [StatusEffect, number]; + mysteryEncounterBattleEffects?: (pokemon: Pokemon) => void; + modifierTypes?: PokemonHeldItemModifierType[]; + tags?: BattlerTagType[]; + dataSource?: PokemonData; } -export class EnemyPartyConfig { - levelAdditiveMultiplier?: number = 0; // Formula for enemy: level += waveIndex / 10 * levelAdditive - doubleBattle?: boolean = false; +export interface EnemyPartyConfig { + levelAdditiveMultiplier?: number; // Formula for enemy: level += waveIndex / 10 * levelAdditive + doubleBattle?: boolean; trainerType?: TrainerType; // Generates trainer battle solely off trainer type trainerConfig?: TrainerConfig; // More customizable option for configuring trainer battle pokemonConfigs?: EnemyPokemonConfig[]; @@ -167,11 +169,6 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig: enemyPokemon.formIndex = config.formIndex; } - // Set gender - if (!isNullOrUndefined(config.gender)) { - enemyPokemon.gender = config.gender; - } - // Set Boss if (config.isBoss) { let segments = !isNullOrUndefined(config.bossSegments) ? config.bossSegments : scene.getEncounterBossSegments(scene.currentBattle.waveIndex, level, enemySpecies, true); @@ -189,21 +186,40 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig: // Set Status if (partyConfig.pokemonConfigs[e].status) { // Default to cureturn 3 for sleep - const cureTurn = partyConfig.pokemonConfigs[e].status === StatusEffect.SLEEP ? 3 : null; - enemyPokemon.status = new Status(partyConfig.pokemonConfigs[e].status, 0, cureTurn); + const status = partyConfig.pokemonConfigs[e].status instanceof Array ? partyConfig.pokemonConfigs[e].status[0] : partyConfig.pokemonConfigs[e].status; + const cureTurn = partyConfig.pokemonConfigs[e].status instanceof Array ? partyConfig.pokemonConfigs[e].status[1] : partyConfig.pokemonConfigs[e].status === StatusEffect.SLEEP ? 3 : null; + enemyPokemon.status = new Status(status, 0, cureTurn); + } + + // Set summon data fields + + // Set gender + if (!isNullOrUndefined(config.gender)) { + enemyPokemon.gender = config.gender; + enemyPokemon.summonData.gender = config.gender; + } + + // Set moves + if (config?.moveSet?.length > 0) { + const moves = config.moveSet.map(m => new PokemonMove(m)); + enemyPokemon.moveset = moves; + enemyPokemon.summonData.moveset = moves; } // Set tags if (config.tags?.length > 0) { const tags = config.tags; tags.forEach(tag => enemyPokemon.addTag(tag)); - // mysteryEncounterBattleEffects can be used IFF MYSTERY_ENCOUNTER_POST_SUMMON tag is applied - enemyPokemon.summonData.mysteryEncounterBattleEffects = config.mysteryEncounterBattleEffects; - - // Requires re-priming summon data so that tags are not cleared on SummonPhase - enemyPokemon.primeSummonData(enemyPokemon.summonData); } + // mysteryEncounterBattleEffects will only be used IFF MYSTERY_ENCOUNTER_POST_SUMMON tag is applied + if (config.mysteryEncounterBattleEffects) { + enemyPokemon.mysteryEncounterBattleEffects = config.mysteryEncounterBattleEffects; + } + + // Requires re-priming summon data to update everything properly + enemyPokemon.primeSummonData(enemyPokemon.summonData); + enemyPokemon.initBattleInfo(); enemyPokemon.getBattleInfo().initInfo(enemyPokemon); } @@ -626,6 +642,9 @@ export function handleEncounterStartOfBattleEffects(scene: BattleScene) { scene.pushPhase(new MovePhase(scene, source, effect.targets, effect.move, effect.followUp, effect.followUp)); }); + // Pseudo turn end phase to reset flinch states, Endure, etc. + scene.pushPhase(new MysteryEncounterBattleStartCleanupPhase(scene)); + encounter.startOfBattleEffectsComplete = true; } } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index ebae5fe8122..65fd982cbdc 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -101,6 +101,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public battleSummonData: PokemonBattleSummonData; public turnData: PokemonTurnData; + public mysteryEncounterBattleEffects: (pokemon: Pokemon) => void = null; + public fieldPosition: FieldPosition; public maskEnabled: boolean; @@ -3931,7 +3933,6 @@ export class PokemonSummonData { public moveset: PokemonMove[]; // If not initialized this value will not be populated from save data. public types: Type[] = null; - public mysteryEncounterBattleEffects: (pokemon: Pokemon) => void = null; } export class PokemonBattleData { diff --git a/src/locales/en/mystery-encounter.ts b/src/locales/en/mystery-encounter.ts index a35815646b7..3e15782d7f0 100644 --- a/src/locales/en/mystery-encounter.ts +++ b/src/locales/en/mystery-encounter.ts @@ -1,4 +1,15 @@ import { lostAtSeaDialogue } from "./mystery-encounters/lost-at-sea-dialogue"; +import { mysteriousChestDialogue } from "#app/locales/en/mystery-encounters/mysterious-chest-dialogue"; +import { mysteriousChallengersDialogue } from "#app/locales/en/mystery-encounters/mysterious-challengers-dialogue"; +import { darkDealDialogue } from "#app/locales/en/mystery-encounters/dark-deal-dialogue"; +import { departmentStoreSaleDialogue } from "#app/locales/en/mystery-encounters/department-store-sale-dialogue"; +import { fieldTripDialogue } from "#app/locales/en/mystery-encounters/field-trip-dialogue"; +import { fieryFalloutDialogue } from "#app/locales/en/mystery-encounters/fiery-fallout-dialogue"; +import { fightOrFlightDialogue } from "#app/locales/en/mystery-encounters/fight-or-flight-dialogue"; +import { safariZoneDialogue } from "#app/locales/en/mystery-encounters/safari-zone-dialogue"; +import { shadyVitaminDealerDialogue } from "#app/locales/en/mystery-encounters/shady-vitamin-dealer-dialogue"; +import { sleepingSnorlaxDialogue } from "#app/locales/en/mystery-encounters/sleeping-snorlax-dialogue"; +import { trainingSessionDialogue } from "#app/locales/en/mystery-encounters/training-session-dialogue"; /** * Patterns that can be used: @@ -21,47 +32,6 @@ export const mysteryEncounter = { "paid_money": "You paid ₽{{amount, number}}.", "receive_money": "You received ₽{{amount, number}}!", - // Mystery Encounters -- Common Tier - - "mysterious_chest_intro_message": "You found...@d{32} a chest?", - "mysterious_chest_title": "The Mysterious Chest", - "mysterious_chest_description": "A beautifully ornamented chest stands on the ground. There must be something good inside... right?", - "mysterious_chest_query": "Will you open it?", - "mysterious_chest_option_1_label": "Open it", - "mysterious_chest_option_1_tooltip": "@[SUMMARY_BLUE]{(35%) Something terrible}\n@[SUMMARY_GREEN]{(40%) Okay Rewards}\n@[SUMMARY_GREEN]{(20%) Good Rewards}\n@[SUMMARY_GREEN]{(4%) Great Rewards}\n@[SUMMARY_GREEN]{(1%) Amazing Rewards}", - "mysterious_chest_option_2_label": "It's too risky, leave", - "mysterious_chest_option_2_tooltip": "(-) No Rewards", - "mysterious_chest_option_1_selected_message": "You open the chest to find...", - "mysterious_chest_option_2_selected_message": "You hurry along your way,\nwith a slight feeling of regret.", - "mysterious_chest_option_1_normal_result": "Just some normal tools and items.", - "mysterious_chest_option_1_good_result": "Some pretty nice tools and items.", - "mysterious_chest_option_1_great_result": "A couple great tools and items!", - "mysterious_chest_option_1_amazing_result": "Whoa! An amazing item!", - "mysterious_chest_option_1_bad_result": `Oh no!@d{32}\nThe chest was trapped! - $Your {{pokeName}} jumps in front of you\nbut is KOed in the process.`, - - "fight_or_flight_intro_message": "Something shiny is sparkling\non the ground near that Pokémon!", - "fight_or_flight_title": "Fight or Flight", - "fight_or_flight_description": "It looks like there's a strong Pokémon guarding an item. Battling is the straightforward approach, but this Pokémon looks strong. You could also try to sneak around, though the Pokémon might catch you.", - "fight_or_flight_query": "What will you do?", - "fight_or_flight_option_1_label": "Battle the Pokémon", - "fight_or_flight_option_1_tooltip": "(-) Hard Battle\n(+) New Item", - "fight_or_flight_option_2_label": "Steal the item", - "fight_or_flight_option_2_tooltip": "@[SUMMARY_GREEN]{(35%) Steal Item}\n@[SUMMARY_BLUE]{(65%) Harder Battle}", - "fight_or_flight_option_2_steal_tooltip": "(+) {{option2PrimaryName}} uses {{option2PrimaryMove}}", - "fight_or_flight_option_3_label": "Leave", - "fight_or_flight_option_3_tooltip": "(-) No Rewards", - "fight_or_flight_option_1_selected_message": "You approach the\nPokémon without fear.", - "fight_or_flight_option_2_good_result": `.@d{32}.@d{32}.@d{32} - $You manage to sneak your way\npast and grab the item!`, - "fight_or_flight_option_2_steal_result": `.@d{32}.@d{32}.@d{32} - $Your {{option2PrimaryName}} helps you out and uses {{option2PrimaryMove}}! - $ You nabbed the item!`, - "fight_or_flight_option_2_bad_result": `.@d{32}.@d{32}.@d{32} - $The Pokémon catches you\nas you try to sneak around!`, - "fight_or_flight_boss_enraged": "The opposing {{enemyPokemon}} has become enraged!", - "fight_or_flight_option_3_selected": "You leave the strong Pokémon\nwith its prize and continue on.", - "department_store_sale_intro_message": "It's a lady with a ton of shopping bags.", "department_store_sale_speaker": "Shopper", "department_store_sale_intro_dialogue": `Hello! Are you here for\nthe amazing sales too? @@ -217,28 +187,6 @@ export const mysteryEncounter = { // Mystery Encounters -- Rogue Tier - "dark_deal_intro_message": "A strange man in a tattered coat\nstands in your way...", - "dark_deal_speaker": "Shady Guy", - "dark_deal_intro_dialogue": `Hey, you! - $I've been working on a new device\nto bring out a Pokémon's latent power! - $It completely rebinds the Pokémon's atoms\nat a molecular level into a far more powerful form. - $Hehe...@d{64} I just need some sac-@d{32}\nErr, test subjects, to prove it works.`, - "dark_deal_title": "Dark Deal", - "dark_deal_description": "The disturbing fellow holds up some Pokéballs.\n\"I'll make it worth your while! You can have these strong Pokéballs as payment, All I need is a Pokémon from your team! Hehe...\"", - "dark_deal_query": "What will you do?", - "dark_deal_option_1_label": "Accept", - "dark_deal_option_1_tooltip": "(+) 5 Rogue Balls\n(?) Enhance a Random Pokémon", - "dark_deal_option_2_label": "Refuse", - "dark_deal_option_2_tooltip": "(-) No Rewards", - "dark_deal_option_1_selected": `Let's see, that {{pokeName}} will do nicely! - $Remember, I'm not responsible\nif anything bad happens!@d{32} Hehe...`, - "dark_deal_option_1_selected_message": `The man hands you 5 Rogue Balls. - \${{pokeName}} hops into the strange machine... - $Flashing lights and weird noises\nstart coming from the machine! - $...@d{96} Something emerges\nfrom the device, raging wildly!`, - "dark_deal_option_2_selected": "Not gonna help a poor fellow out?\nPah!", - "dark_deal_outro": "After the harrowing encounter,\nyou collect yourself and depart.", - "sleeping_snorlax_intro_message": `As you walk down a narrow pathway, you see a towering silhouette blocking your path. $You get closer to see a Snorlax sleeping peacefully.\nIt seems like there's no way around it.`, "sleeping_snorlax_title": "Sleeping Snorlax", @@ -253,12 +201,20 @@ export const mysteryEncounter = { "sleeping_snorlax_option_3_disabled_tooltip": "Your Pokémon need to know certain moves to choose this", "sleeping_snorlax_option_1_selected_message": "You approach the\nPokémon without fear.", "sleeping_snorlax_option_2_selected_message": `.@d{32}.@d{32}.@d{32} - $You wait for a time, but the Snorlax's yawns make your party sleepy.`, - "sleeping_snorlax_option_2_good_result": "When you all awaken, the Snorlax is no where to be found - but your Pokémon are all healed!", - "sleeping_snorlax_option_2_bad_result": `Your {{primaryName}} is still asleep... - $But on the bright side, the Snorlax left something behind... - $@s{item_fanfare}You gained a Berry!`, + $You wait for a time, but the Snorlax's yawns make your party sleepy...`, + "sleeping_snorlax_option_2_good_result": "When you all awaken, the Snorlax is no where to be found -\nbut your Pokémon are all healed!", "sleeping_snorlax_option_3_good_result": "Your {{option3PrimaryName}} uses {{option3PrimaryMove}}! @s{item_fanfare}It steals Leftovers off the sleeping Snorlax and you make out like bandits!", + mysteriousChallengers: mysteriousChallengersDialogue, + mysteriousChest: mysteriousChestDialogue, + darkDeal: darkDealDialogue, + fightOrFlight: fightOrFlightDialogue, + sleepingSnorlax: sleepingSnorlaxDialogue, + trainingSession: trainingSessionDialogue, + departmentStoreSale: departmentStoreSaleDialogue, + shadyVitaminDealer: shadyVitaminDealerDialogue, + fieldTrip: fieldTripDialogue, + safariZone: safariZoneDialogue, lostAtSea: lostAtSeaDialogue, + fieryFallout: fieryFalloutDialogue, } as const; diff --git a/src/locales/en/mystery-encounters/dark-deal-dialogue.ts b/src/locales/en/mystery-encounters/dark-deal-dialogue.ts index 85a238f7b72..113209bf61a 100644 --- a/src/locales/en/mystery-encounters/dark-deal-dialogue.ts +++ b/src/locales/en/mystery-encounters/dark-deal-dialogue.ts @@ -1,31 +1,29 @@ export const darkDealDialogue = { - intro: "Wandering aimlessly, you effectively get nowhere.", - title: "Lost at sea", - description: "The sea is turbulent in this area, and you seem to be running out of fuel.\nThis is bad. Is there a way out of the situation?", + intro: "A strange man in a tattered coat\nstands in your way...", + speaker: "Shady Guy", + intro_dialogue: `Hey, you! + $I've been working on a new device\nto bring out a Pokémon's latent power! + $It completely rebinds the Pokémon's atoms\nat a molecular level into a far more powerful form. + $Hehe...@d{64} I just need some sac-@d{32}\nErr, test subjects, to prove it works.`, + title: "Dark Deal", + description: "The disturbing fellow holds up some Pokéballs.\n\"I'll make it worth your while! You can have these strong Pokéballs as payment, All I need is a Pokémon from your team! Hehe...\"", query: "What will you do?", option: { 1: { - label: "{{option1PrimaryName}} can help", - label_disabled: "Can't {{option1RequiredMove}}", - tooltip: "(+) {{option1PrimaryName}} saves you.\n(+) {{option1PrimaryName}} gains some EXP.", - tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on", - selected: - "{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.", + label: "Accept", + tooltip: "(+) 5 Rogue Balls\n(?) Enhance a Random Pokémon", + selected_dialogue: `Let's see, that {{pokeName}} will do nicely! + $Remember, I'm not responsible\nif anything bad happens!@d{32} Hehe...`, + selected_message: `The man hands you 5 Rogue Balls. + \${{pokeName}} hops into the strange machine... + $Flashing lights and weird noises\nstart coming from the machine! + $...@d{96} Something emerges\nfrom the device, raging wildly!` }, 2: { - label: "{{option2PrimaryName}} can help", - label_disabled: "Can't {{option2RequiredMove}}", - tooltip: "(+) {{option2PrimaryName}} saves you.\n(+) {{option2PrimaryName}} gains some EXP.", - tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with", - selected: - "{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.", - }, - 3: { - label: "Wander aimlessly", - tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.", - selected: `You float about in the boat, steering it aimlessly until you finally get back on track. - $You and your Pokémon get very fatigued during the whole ordeal.`, - }, + label: "Refuse", + tooltip: "(-) No Rewards", + selected: "Not gonna help a poor fellow out?\nPah!", + } }, - outro: "You are back on track." + outro: "After the harrowing encounter,\nyou collect yourself and depart." }; diff --git a/src/locales/en/mystery-encounters/department-store-sale-dialogue.ts b/src/locales/en/mystery-encounters/department-store-sale-dialogue.ts index 608cb0df5ff..287e3c9bae2 100644 --- a/src/locales/en/mystery-encounters/department-store-sale-dialogue.ts +++ b/src/locales/en/mystery-encounters/department-store-sale-dialogue.ts @@ -1,30 +1,30 @@ export const departmentStoreSaleDialogue = { - intro: "Wandering aimlessly, you effectively get nowhere.", - title: "Lost at sea", - description: "The sea is turbulent in this area, and you seem to be running out of fuel.\nThis is bad. Is there a way out of the situation?", + intro: "Wandering aimlessly through the sea, you've effectively gotten nowhere.", + title: "Lost at Sea", + description: "The sea is turbulent in this area, and you're running out of energy.\nThis is bad. Is there a way out of the situation?", query: "What will you do?", option: { 1: { label: "{{option1PrimaryName}} can help", label_disabled: "Can't {{option1RequiredMove}}", - tooltip: "(+) {{option1PrimaryName}} saves you.\n(+) {{option1PrimaryName}} gains some EXP.", + tooltip: "(+) {{option1PrimaryName}} saves you\n(+) {{option1PrimaryName}} gains some EXP", tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on", - selected: - "{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.", + selected: `{{option1PrimaryName}} swims ahead, guiding you back on track. + \${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`, }, 2: { label: "{{option2PrimaryName}} can help", label_disabled: "Can't {{option2RequiredMove}}", - tooltip: "(+) {{option2PrimaryName}} saves you.\n(+) {{option2PrimaryName}} gains some EXP.", + tooltip: "(+) {{option2PrimaryName}} saves you\n(+) {{option2PrimaryName}} gains some EXP", tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with", - selected: - "{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.", + selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track. + \${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`, }, 3: { label: "Wander aimlessly", - tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.", - selected: `You float about in the boat, steering it aimlessly until you finally get back on track. - $You and your Pokémon get very fatigued during the whole ordeal.`, + tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP", + selected: `You float about in the boat, steering without direction until you finally spot a landmark you remember. + $You and your Pokémon are fatigued from the whole ordeal.`, }, }, outro: "You are back on track." diff --git a/src/locales/en/mystery-encounters/field-trip-dialogue.ts b/src/locales/en/mystery-encounters/field-trip-dialogue.ts index 9efa781de95..7e4a4041b92 100644 --- a/src/locales/en/mystery-encounters/field-trip-dialogue.ts +++ b/src/locales/en/mystery-encounters/field-trip-dialogue.ts @@ -1,30 +1,30 @@ export const fieldTripDialogue = { - intro: "Wandering aimlessly, you effectively get nowhere.", - title: "Lost at sea", - description: "The sea is turbulent in this area, and you seem to be running out of fuel.\nThis is bad. Is there a way out of the situation?", + intro: "Wandering aimlessly through the sea, you've effectively gotten nowhere.", + title: "Lost at Sea", + description: "The sea is turbulent in this area, and you're running out of energy.\nThis is bad. Is there a way out of the situation?", query: "What will you do?", option: { 1: { label: "{{option1PrimaryName}} can help", label_disabled: "Can't {{option1RequiredMove}}", - tooltip: "(+) {{option1PrimaryName}} saves you.\n(+) {{option1PrimaryName}} gains some EXP.", + tooltip: "(+) {{option1PrimaryName}} saves you\n(+) {{option1PrimaryName}} gains some EXP", tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on", - selected: - "{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.", + selected: `{{option1PrimaryName}} swims ahead, guiding you back on track. + \${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`, }, 2: { label: "{{option2PrimaryName}} can help", label_disabled: "Can't {{option2RequiredMove}}", - tooltip: "(+) {{option2PrimaryName}} saves you.\n(+) {{option2PrimaryName}} gains some EXP.", + tooltip: "(+) {{option2PrimaryName}} saves you\n(+) {{option2PrimaryName}} gains some EXP", tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with", - selected: - "{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.", + selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track. + \${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`, }, 3: { label: "Wander aimlessly", - tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.", - selected: `You float about in the boat, steering it aimlessly until you finally get back on track. - $You and your Pokémon get very fatigued during the whole ordeal.`, + tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP", + selected: `You float about in the boat, steering without direction until you finally spot a landmark you remember. + $You and your Pokémon are fatigued from the whole ordeal.`, }, }, outro: "You are back on track." diff --git a/src/locales/en/mystery-encounters/fiery-fallout-dialogue.ts b/src/locales/en/mystery-encounters/fiery-fallout-dialogue.ts index a9d1a8c3c49..2c0549a3374 100644 --- a/src/locales/en/mystery-encounters/fiery-fallout-dialogue.ts +++ b/src/locales/en/mystery-encounters/fiery-fallout-dialogue.ts @@ -1,30 +1,30 @@ export const fieryFalloutDialogue = { - intro: "Wandering aimlessly, you effectively get nowhere.", - title: "Lost at sea", - description: "The sea is turbulent in this area, and you seem to be running out of fuel.\nThis is bad. Is there a way out of the situation?", + intro: "Wandering aimlessly through the sea, you've effectively gotten nowhere.", + title: "Lost at Sea", + description: "The sea is turbulent in this area, and you're running out of energy.\nThis is bad. Is there a way out of the situation?", query: "What will you do?", option: { 1: { label: "{{option1PrimaryName}} can help", label_disabled: "Can't {{option1RequiredMove}}", - tooltip: "(+) {{option1PrimaryName}} saves you.\n(+) {{option1PrimaryName}} gains some EXP.", + tooltip: "(+) {{option1PrimaryName}} saves you\n(+) {{option1PrimaryName}} gains some EXP", tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on", - selected: - "{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.", + selected: `{{option1PrimaryName}} swims ahead, guiding you back on track. + \${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`, }, 2: { label: "{{option2PrimaryName}} can help", label_disabled: "Can't {{option2RequiredMove}}", - tooltip: "(+) {{option2PrimaryName}} saves you.\n(+) {{option2PrimaryName}} gains some EXP.", + tooltip: "(+) {{option2PrimaryName}} saves you\n(+) {{option2PrimaryName}} gains some EXP", tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with", - selected: - "{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.", + selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track. + \${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`, }, 3: { label: "Wander aimlessly", - tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.", - selected: `You float about in the boat, steering it aimlessly until you finally get back on track. - $You and your Pokémon get very fatigued during the whole ordeal.`, + tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP", + selected: `You float about in the boat, steering without direction until you finally spot a landmark you remember. + $You and your Pokémon are fatigued from the whole ordeal.`, }, }, outro: "You are back on track." diff --git a/src/locales/en/mystery-encounters/fight-or-flight-dialogue.ts b/src/locales/en/mystery-encounters/fight-or-flight-dialogue.ts index fcacae8ecb2..2ef9d31a821 100644 --- a/src/locales/en/mystery-encounters/fight-or-flight-dialogue.ts +++ b/src/locales/en/mystery-encounters/fight-or-flight-dialogue.ts @@ -1,31 +1,31 @@ export const fightOrFlightDialogue = { - intro: "Wandering aimlessly, you effectively get nowhere.", - title: "Lost at sea", - description: "The sea is turbulent in this area, and you seem to be running out of fuel.\nThis is bad. Is there a way out of the situation?", + intro: "Something shiny is sparkling\non the ground near that Pokémon!", + title: "Fight or Flight", + description: "It looks like there's a strong Pokémon guarding an item. Battling is the straightforward approach, but this Pokémon looks strong. You could also try to sneak around, though the Pokémon might catch you.", query: "What will you do?", option: { 1: { - label: "{{option1PrimaryName}} can help", - label_disabled: "Can't {{option1RequiredMove}}", - tooltip: "(+) {{option1PrimaryName}} saves you.\n(+) {{option1PrimaryName}} gains some EXP.", - tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on", - selected: - "{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.", + label: "Battle the Pokémon", + tooltip: "(-) Hard Battle\n(+) New Item", + selected: "You approach the\nPokémon without fear.", }, 2: { label: "{{option2PrimaryName}} can help", - label_disabled: "Can't {{option2RequiredMove}}", - tooltip: "(+) {{option2PrimaryName}} saves you.\n(+) {{option2PrimaryName}} gains some EXP.", - tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with", - selected: - "{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.", + tooltip: "@[SUMMARY_GREEN]{(35%) Steal Item}\n@[SUMMARY_BLUE]{(65%) Harder Battle}", + tooltip_special: "(+) {{option2PrimaryName}} uses {{option2PrimaryMove}}", + good_result: `.@d{32}.@d{32}.@d{32} + $You manage to sneak your way\npast and grab the item!`, + special_result: `.@d{32}.@d{32}.@d{32} + $Your {{option2PrimaryName}} helps you out and uses {{option2PrimaryMove}}! + $ You nabbed the item!`, + bad_result: `.@d{32}.@d{32}.@d{32} + $The Pokémon catches you\nas you try to sneak around!`, + boss_enraged: "The opposing {{enemyPokemon}} has become enraged!" }, 3: { - label: "Wander aimlessly", - tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.", - selected: `You float about in the boat, steering it aimlessly until you finally get back on track. - $You and your Pokémon get very fatigued during the whole ordeal.`, + label: "Leave", + tooltip: "(-) No Rewards", + selected: "You leave the strong Pokémon\nwith its prize and continue on.", }, - }, - outro: "You are back on track." + } }; diff --git a/src/locales/en/mystery-encounters/lost-at-sea-dialogue.ts b/src/locales/en/mystery-encounters/lost-at-sea-dialogue.ts index 344640610be..cb1de1315cd 100644 --- a/src/locales/en/mystery-encounters/lost-at-sea-dialogue.ts +++ b/src/locales/en/mystery-encounters/lost-at-sea-dialogue.ts @@ -7,7 +7,7 @@ export const lostAtSeaDialogue = { 1: { label: "{{option1PrimaryName}} can help", label_disabled: "Can't {{option1RequiredMove}}", - tooltip: "(+) {{option1PrimaryName}} saves you.\n(+) {{option1PrimaryName}} gains some EXP.", + tooltip: "(+) {{option1PrimaryName}} saves you\n(+) {{option1PrimaryName}} gains some EXP", tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on", selected: `{{option1PrimaryName}} swims ahead, guiding you back on track. \${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`, @@ -15,16 +15,16 @@ export const lostAtSeaDialogue = { 2: { label: "{{option2PrimaryName}} can help", label_disabled: "Can't {{option2RequiredMove}}", - tooltip: "(+) {{option2PrimaryName}} saves you.\n(+) {{option2PrimaryName}} gains some EXP.", + tooltip: "(+) {{option2PrimaryName}} saves you\n(+) {{option2PrimaryName}} gains some EXP", tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with", selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track. \${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`, }, 3: { label: "Wander aimlessly", - tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.", - selected: `You float about in the boat, steering it aimlessly until you finally get back on track. - $You and your Pokémon get very fatigued during the whole ordeal.`, + tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP", + selected: `You float about in the boat, steering without direction until you finally spot a landmark you remember. + $You and your Pokémon are fatigued from the whole ordeal.`, }, }, outro: "You are back on track." diff --git a/src/locales/en/mystery-encounters/mysterious-challengers-dialogue.ts b/src/locales/en/mystery-encounters/mysterious-challengers-dialogue.ts index bdb15b4e7b4..20be45af4c9 100644 --- a/src/locales/en/mystery-encounters/mysterious-challengers-dialogue.ts +++ b/src/locales/en/mystery-encounters/mysterious-challengers-dialogue.ts @@ -1,30 +1,30 @@ export const mysteriousChallengersDialogue = { - intro: "Wandering aimlessly, you effectively get nowhere.", - title: "Lost at sea", - description: "The sea is turbulent in this area, and you seem to be running out of fuel.\nThis is bad. Is there a way out of the situation?", + intro: "Wandering aimlessly through the sea, you've effectively gotten nowhere.", + title: "Lost at Sea", + description: "The sea is turbulent in this area, and you're running out of energy.\nThis is bad. Is there a way out of the situation?", query: "What will you do?", option: { 1: { label: "{{option1PrimaryName}} can help", label_disabled: "Can't {{option1RequiredMove}}", - tooltip: "(+) {{option1PrimaryName}} saves you.\n(+) {{option1PrimaryName}} gains some EXP.", + tooltip: "(+) {{option1PrimaryName}} saves you\n(+) {{option1PrimaryName}} gains some EXP", tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on", - selected: - "{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.", + selected: `{{option1PrimaryName}} swims ahead, guiding you back on track. + \${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`, }, 2: { label: "{{option2PrimaryName}} can help", label_disabled: "Can't {{option2RequiredMove}}", - tooltip: "(+) {{option2PrimaryName}} saves you.\n(+) {{option2PrimaryName}} gains some EXP.", + tooltip: "(+) {{option2PrimaryName}} saves you\n(+) {{option2PrimaryName}} gains some EXP", tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with", - selected: - "{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.", + selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track. + \${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`, }, 3: { label: "Wander aimlessly", - tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.", - selected: `You float about in the boat, steering it aimlessly until you finally get back on track. - $You and your Pokémon get very fatigued during the whole ordeal.`, + tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP", + selected: `You float about in the boat, steering without direction until you finally spot a landmark you remember. + $You and your Pokémon are fatigued from the whole ordeal.`, }, }, outro: "You are back on track." diff --git a/src/locales/en/mystery-encounters/safari-zone-dialogue.ts b/src/locales/en/mystery-encounters/safari-zone-dialogue.ts index 34fb6a9b44e..46952b7b197 100644 --- a/src/locales/en/mystery-encounters/safari-zone-dialogue.ts +++ b/src/locales/en/mystery-encounters/safari-zone-dialogue.ts @@ -1,30 +1,30 @@ export const safariZoneDialogue = { - intro: "Wandering aimlessly, you effectively get nowhere.", - title: "Lost at sea", - description: "The sea is turbulent in this area, and you seem to be running out of fuel.\nThis is bad. Is there a way out of the situation?", + intro: "Wandering aimlessly through the sea, you've effectively gotten nowhere.", + title: "Lost at Sea", + description: "The sea is turbulent in this area, and you're running out of energy.\nThis is bad. Is there a way out of the situation?", query: "What will you do?", option: { 1: { label: "{{option1PrimaryName}} can help", label_disabled: "Can't {{option1RequiredMove}}", - tooltip: "(+) {{option1PrimaryName}} saves you.\n(+) {{option1PrimaryName}} gains some EXP.", + tooltip: "(+) {{option1PrimaryName}} saves you\n(+) {{option1PrimaryName}} gains some EXP", tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on", - selected: - "{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.", + selected: `{{option1PrimaryName}} swims ahead, guiding you back on track. + \${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`, }, 2: { label: "{{option2PrimaryName}} can help", label_disabled: "Can't {{option2RequiredMove}}", - tooltip: "(+) {{option2PrimaryName}} saves you.\n(+) {{option2PrimaryName}} gains some EXP.", + tooltip: "(+) {{option2PrimaryName}} saves you\n(+) {{option2PrimaryName}} gains some EXP", tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with", - selected: - "{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.", + selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track. + \${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`, }, 3: { label: "Wander aimlessly", - tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.", - selected: `You float about in the boat, steering it aimlessly until you finally get back on track. - $You and your Pokémon get very fatigued during the whole ordeal.`, + tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP", + selected: `You float about in the boat, steering without direction until you finally spot a landmark you remember. + $You and your Pokémon are fatigued from the whole ordeal.`, }, }, outro: "You are back on track." diff --git a/src/locales/en/mystery-encounters/shady-vitamin-dealer-dialogue.ts b/src/locales/en/mystery-encounters/shady-vitamin-dealer-dialogue.ts index ffa864a2efe..9bfdc139ea1 100644 --- a/src/locales/en/mystery-encounters/shady-vitamin-dealer-dialogue.ts +++ b/src/locales/en/mystery-encounters/shady-vitamin-dealer-dialogue.ts @@ -1,30 +1,30 @@ export const shadyVitaminDealerDialogue = { - intro: "Wandering aimlessly, you effectively get nowhere.", - title: "Lost at sea", - description: "The sea is turbulent in this area, and you seem to be running out of fuel.\nThis is bad. Is there a way out of the situation?", + intro: "Wandering aimlessly through the sea, you've effectively gotten nowhere.", + title: "Lost at Sea", + description: "The sea is turbulent in this area, and you're running out of energy.\nThis is bad. Is there a way out of the situation?", query: "What will you do?", option: { 1: { label: "{{option1PrimaryName}} can help", label_disabled: "Can't {{option1RequiredMove}}", - tooltip: "(+) {{option1PrimaryName}} saves you.\n(+) {{option1PrimaryName}} gains some EXP.", + tooltip: "(+) {{option1PrimaryName}} saves you\n(+) {{option1PrimaryName}} gains some EXP", tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on", - selected: - "{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.", + selected: `{{option1PrimaryName}} swims ahead, guiding you back on track. + \${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`, }, 2: { label: "{{option2PrimaryName}} can help", label_disabled: "Can't {{option2RequiredMove}}", - tooltip: "(+) {{option2PrimaryName}} saves you.\n(+) {{option2PrimaryName}} gains some EXP.", + tooltip: "(+) {{option2PrimaryName}} saves you\n(+) {{option2PrimaryName}} gains some EXP", tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with", - selected: - "{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.", + selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track. + \${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`, }, 3: { label: "Wander aimlessly", - tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.", - selected: `You float about in the boat, steering it aimlessly until you finally get back on track. - $You and your Pokémon get very fatigued during the whole ordeal.`, + tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP", + selected: `You float about in the boat, steering without direction until you finally spot a landmark you remember. + $You and your Pokémon are fatigued from the whole ordeal.`, }, }, outro: "You are back on track." diff --git a/src/locales/en/mystery-encounters/sleeping-snorlax-dialogue.ts b/src/locales/en/mystery-encounters/sleeping-snorlax-dialogue.ts index bb93657e8f3..bc2dc65e572 100644 --- a/src/locales/en/mystery-encounters/sleeping-snorlax-dialogue.ts +++ b/src/locales/en/mystery-encounters/sleeping-snorlax-dialogue.ts @@ -1,30 +1,30 @@ export const sleepingSnorlaxDialogue = { - intro: "Wandering aimlessly, you effectively get nowhere.", - title: "Lost at sea", - description: "The sea is turbulent in this area, and you seem to be running out of fuel.\nThis is bad. Is there a way out of the situation?", + intro: "Wandering aimlessly through the sea, you've effectively gotten nowhere.", + title: "Lost at Sea", + description: "The sea is turbulent in this area, and you're running out of energy.\nThis is bad. Is there a way out of the situation?", query: "What will you do?", option: { 1: { label: "{{option1PrimaryName}} can help", label_disabled: "Can't {{option1RequiredMove}}", - tooltip: "(+) {{option1PrimaryName}} saves you.\n(+) {{option1PrimaryName}} gains some EXP.", + tooltip: "(+) {{option1PrimaryName}} saves you\n(+) {{option1PrimaryName}} gains some EXP", tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on", - selected: - "{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.", + selected: `{{option1PrimaryName}} swims ahead, guiding you back on track. + \${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`, }, 2: { label: "{{option2PrimaryName}} can help", label_disabled: "Can't {{option2RequiredMove}}", - tooltip: "(+) {{option2PrimaryName}} saves you.\n(+) {{option2PrimaryName}} gains some EXP.", + tooltip: "(+) {{option2PrimaryName}} saves you\n(+) {{option2PrimaryName}} gains some EXP", tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with", - selected: - "{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.", + selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track. + \${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`, }, 3: { label: "Wander aimlessly", - tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.", - selected: `You float about in the boat, steering it aimlessly until you finally get back on track. - $You and your Pokémon get very fatigued during the whole ordeal.`, + tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP", + selected: `You float about in the boat, steering without direction until you finally spot a landmark you remember. + $You and your Pokémon are fatigued from the whole ordeal.`, }, }, outro: "You are back on track." diff --git a/src/locales/en/mystery-encounters/training-session-dialogue.ts b/src/locales/en/mystery-encounters/training-session-dialogue.ts index 905141e57ca..a54adf92492 100644 --- a/src/locales/en/mystery-encounters/training-session-dialogue.ts +++ b/src/locales/en/mystery-encounters/training-session-dialogue.ts @@ -1,30 +1,30 @@ export const trainingSessionDialogue = { - intro: "Wandering aimlessly, you effectively get nowhere.", - title: "Lost at sea", - description: "The sea is turbulent in this area, and you seem to be running out of fuel.\nThis is bad. Is there a way out of the situation?", + intro: "Wandering aimlessly through the sea, you've effectively gotten nowhere.", + title: "Lost at Sea", + description: "The sea is turbulent in this area, and you're running out of energy.\nThis is bad. Is there a way out of the situation?", query: "What will you do?", option: { 1: { label: "{{option1PrimaryName}} can help", label_disabled: "Can't {{option1RequiredMove}}", - tooltip: "(+) {{option1PrimaryName}} saves you.\n(+) {{option1PrimaryName}} gains some EXP.", + tooltip: "(+) {{option1PrimaryName}} saves you\n(+) {{option1PrimaryName}} gains some EXP", tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on", - selected: - "{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.", + selected: `{{option1PrimaryName}} swims ahead, guiding you back on track. + \${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`, }, 2: { label: "{{option2PrimaryName}} can help", label_disabled: "Can't {{option2RequiredMove}}", - tooltip: "(+) {{option2PrimaryName}} saves you.\n(+) {{option2PrimaryName}} gains some EXP.", + tooltip: "(+) {{option2PrimaryName}} saves you\n(+) {{option2PrimaryName}} gains some EXP", tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with", - selected: - "{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.", + selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track. + \${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`, }, 3: { label: "Wander aimlessly", - tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.", - selected: `You float about in the boat, steering it aimlessly until you finally get back on track. - $You and your Pokémon get very fatigued during the whole ordeal.`, + tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP", + selected: `You float about in the boat, steering without direction until you finally spot a landmark you remember. + $You and your Pokémon are fatigued from the whole ordeal.`, }, }, outro: "You are back on track." diff --git a/src/overrides.ts b/src/overrides.ts index e19a5bf20dd..7272f68bcb4 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -117,9 +117,9 @@ export const EGG_GACHA_PULL_COUNT_OVERRIDE: number = 0; */ // 1 to 256, set to null to ignore -export const MYSTERY_ENCOUNTER_RATE_OVERRIDE: number = null; +export const MYSTERY_ENCOUNTER_RATE_OVERRIDE: number = 256; export const MYSTERY_ENCOUNTER_TIER_OVERRIDE: MysteryEncounterTier = null; -export const MYSTERY_ENCOUNTER_OVERRIDE: MysteryEncounterType = null; +export const MYSTERY_ENCOUNTER_OVERRIDE: MysteryEncounterType = MysteryEncounterType.SLEEPING_SNORLAX; /** * MODIFIER / ITEM OVERRIDES diff --git a/src/phases.ts b/src/phases.ts index 015a97ca115..5e4bdf29943 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -66,7 +66,7 @@ import { PlayerGender } from "#enums/player-gender"; import { Species } from "#enums/species"; import { TrainerType } from "#enums/trainer-type"; import { MysteryEncounterVariant } from "#app/data/mystery-encounters/mystery-encounter"; -import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phase"; +import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { handleEncounterStartOfBattleEffects, handleMysteryEncounterVictory } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import ModifierSelectUiHandler, { SHOP_OPTIONS_ROW_LIMIT } from "#app/ui/modifier-select-ui-handler"; import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; diff --git a/src/phases/mystery-encounter-phase.ts b/src/phases/mystery-encounter-phases.ts similarity index 96% rename from src/phases/mystery-encounter-phase.ts rename to src/phases/mystery-encounter-phases.ts index b0acdd3c1e1..6f474500838 100644 --- a/src/phases/mystery-encounter-phase.ts +++ b/src/phases/mystery-encounter-phases.ts @@ -14,6 +14,7 @@ import { IvScannerModifier } from "../modifier/modifier"; import * as Utils from "../utils"; import { isNullOrUndefined } from "../utils"; import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; +import { BattlerTagLapseType } from "#app/data/battler-tags"; /** * Will handle (in order): @@ -165,6 +166,28 @@ export class MysteryEncounterOptionSelectedPhase extends Phase { } } +/** + * Runs at the beginning of an Encounter's battle + * Will cleanup any residual flinches, Endure, etc. that are left over from startOfBattleEffects + * See [TurnEndPhase](../phases.ts) for more details + */ +export class MysteryEncounterBattleStartCleanupPhase extends Phase { + constructor(scene: BattleScene) { + super(scene); + } + + start() { + super.start(); + + const field = this.scene.getField(true).filter(p => p.summonData); + field.forEach(pokemon => { + pokemon.lapseTags(BattlerTagLapseType.TURN_END); + }); + + this.end(); + } +} + /** * Will handle (in order): * - Setting BGM diff --git a/src/test/mystery-encounter/encounterTestUtils.ts b/src/test/mystery-encounter/encounterTestUtils.ts index 1a602b7b239..6caff2a8693 100644 --- a/src/test/mystery-encounter/encounterTestUtils.ts +++ b/src/test/mystery-encounter/encounterTestUtils.ts @@ -1,6 +1,6 @@ import { Button } from "#app/enums/buttons"; import { MessagePhase, VictoryPhase } from "#app/phases"; -import { MysteryEncounterPhase, MysteryEncounterRewardsPhase } from "#app/phases/mystery-encounter-phase"; +import { MysteryEncounterPhase, MysteryEncounterRewardsPhase } from "#app/phases/mystery-encounter-phases"; import MysteryEncounterUiHandler from "#app/ui/mystery-encounter-ui-handler"; import { Mode } from "#app/ui/ui"; import GameManager from "../utils/gameManager"; diff --git a/src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts b/src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts index 48f7275fdff..76a7dca8cdf 100644 --- a/src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts @@ -12,7 +12,7 @@ import GameManager from "#app/test/utils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { runSelectMysteryEncounterOption } from "../encounterTestUtils"; -const namepsace = "mysteryEncounter:lostAtSeaDialogue"; +const namespace = "mysteryEncounter:lostAtSeaDialogue"; /** Blastoise for surf. Pidgeot for fly. Abra for none. */ const defaultParty = [Species.BLASTOISE, Species.PIDGEOT, Species.ABRA]; const defaultBiome = Biome.SEA; @@ -49,10 +49,10 @@ describe("Lost at Sea - Mystery Encounter", () => { expect(LostAtSeaEncounter.encounterType).toBe(MysteryEncounterType.LOST_AT_SEA); expect(LostAtSeaEncounter.dialogue).toBeDefined(); - expect(LostAtSeaEncounter.dialogue.intro).toStrictEqual([{ text: `${namepsace}:intro` }]); - expect(LostAtSeaEncounter.dialogue.encounterOptionsDialogue.title).toBe(`${namepsace}:title`); - expect(LostAtSeaEncounter.dialogue.encounterOptionsDialogue.description).toBe(`${namepsace}:description`); - expect(LostAtSeaEncounter.dialogue.encounterOptionsDialogue.query).toBe(`${namepsace}:query`); + expect(LostAtSeaEncounter.dialogue.intro).toStrictEqual([{ text: `${namespace}:intro` }]); + expect(LostAtSeaEncounter.dialogue.encounterOptionsDialogue.title).toBe(`${namespace}:title`); + expect(LostAtSeaEncounter.dialogue.encounterOptionsDialogue.description).toBe(`${namespace}:description`); + expect(LostAtSeaEncounter.dialogue.encounterOptionsDialogue.query).toBe(`${namespace}:query`); expect(LostAtSeaEncounter.options.length).toBe(3); }); @@ -100,13 +100,13 @@ describe("Lost at Sea - Mystery Encounter", () => { expect(option1.optionMode).toBe(EncounterOptionMode.DISABLED_OR_DEFAULT); expect(option1.dialogue).toBeDefined(); expect(option1.dialogue).toStrictEqual({ - buttonLabel: `${namepsace}:option:1:label`, - disabledButtonLabel: `${namepsace}:option:1:label_disabled`, - buttonTooltip: `${namepsace}:option:1:tooltip`, - disabledButtonTooltip: `${namepsace}:option:1:tooltip_disabled`, + buttonLabel: `${namespace}:option:1:label`, + disabledButtonLabel: `${namespace}:option:1:label_disabled`, + buttonTooltip: `${namespace}:option:1:tooltip`, + disabledButtonTooltip: `${namespace}:option:1:tooltip_disabled`, selected: [ { - text: `${namepsace}:option:1:selected`, + text: `${namespace}:option:1:selected`, }, ], }); @@ -147,13 +147,13 @@ describe("Lost at Sea - Mystery Encounter", () => { expect(option2.optionMode).toBe(EncounterOptionMode.DISABLED_OR_DEFAULT); expect(option2.dialogue).toBeDefined(); expect(option2.dialogue).toStrictEqual({ - buttonLabel: `${namepsace}:option:2:label`, - disabledButtonLabel: `${namepsace}:option:2:label_disabled`, - buttonTooltip: `${namepsace}:option:2:tooltip`, - disabledButtonTooltip: `${namepsace}:option:2:tooltip_disabled`, + buttonLabel: `${namespace}:option:2:label`, + disabledButtonLabel: `${namespace}:option:2:label_disabled`, + buttonTooltip: `${namespace}:option:2:tooltip`, + disabledButtonTooltip: `${namespace}:option:2:tooltip_disabled`, selected: [ { - text: `${namepsace}:option:2:selected`, + text: `${namespace}:option:2:selected`, }, ], }); @@ -197,11 +197,11 @@ describe("Lost at Sea - Mystery Encounter", () => { expect(option3.optionMode).toBe(EncounterOptionMode.DEFAULT); expect(option3.dialogue).toBeDefined(); expect(option3.dialogue).toStrictEqual({ - buttonLabel: `${namepsace}:option:3:label`, - buttonTooltip: `${namepsace}:option:3:tooltip`, + buttonLabel: `${namespace}:option:3:label`, + buttonTooltip: `${namespace}:option:3:tooltip`, selected: [ { - text: `${namepsace}:option:3:selected`, + text: `${namespace}:option:3:selected`, }, ], }); diff --git a/src/test/mystery-encounter/mystery-encounter.test.ts b/src/test/mystery-encounter/mystery-encounter.test.ts index 8ed2e4756ca..b840302278e 100644 --- a/src/test/mystery-encounter/mystery-encounter.test.ts +++ b/src/test/mystery-encounter/mystery-encounter.test.ts @@ -2,7 +2,7 @@ import { afterEach, beforeAll, beforeEach, expect, describe, it } from "vitest"; import GameManager from "#app/test/utils/gameManager"; import Phaser from "phaser"; import { Species } from "#enums/species"; -import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phase"; +import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; describe("Mystery Encounters", () => { diff --git a/src/test/phases/mystery-encounter-phase.test.ts b/src/test/phases/mystery-encounter-phase.test.ts index 91e6a09bb99..9fd989e82b8 100644 --- a/src/test/phases/mystery-encounter-phase.test.ts +++ b/src/test/phases/mystery-encounter-phase.test.ts @@ -2,7 +2,7 @@ import {afterEach, beforeAll, beforeEach, expect, describe, it, vi } from "vites import GameManager from "#app/test/utils/gameManager"; import Phaser from "phaser"; import {Species} from "#enums/species"; -import { MysteryEncounterOptionSelectedPhase, MysteryEncounterPhase } from "#app/phases/mystery-encounter-phase"; +import { MysteryEncounterOptionSelectedPhase, MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import {Mode} from "#app/ui/ui"; import {Button} from "#enums/buttons"; import MysteryEncounterUiHandler from "#app/ui/mystery-encounter-ui-handler"; diff --git a/src/test/utils/gameManager.ts b/src/test/utils/gameManager.ts index f0c7d08c6b7..1b8c5c383a0 100644 --- a/src/test/utils/gameManager.ts +++ b/src/test/utils/gameManager.ts @@ -34,7 +34,7 @@ import { Button } from "#enums/buttons"; import { BattlerIndex } from "#app/battle.js"; import TargetSelectUiHandler from "#app/ui/target-select-ui-handler.js"; import BattleMessageUiHandler from "#app/ui/battle-message-ui-handler"; -import {MysteryEncounterPhase} from "#app/phases/mystery-encounter-phase"; +import {MysteryEncounterPhase} from "#app/phases/mystery-encounter-phases"; import { OverridesHelper } from "./overridesHelper"; /** diff --git a/src/test/utils/phaseInterceptor.ts b/src/test/utils/phaseInterceptor.ts index aa297e4944c..39278c673d4 100644 --- a/src/test/utils/phaseInterceptor.ts +++ b/src/test/utils/phaseInterceptor.ts @@ -44,7 +44,7 @@ import { MysteryEncounterPhase, MysteryEncounterRewardsPhase, PostMysteryEncounterPhase -} from "#app/phases/mystery-encounter-phase"; +} from "#app/phases/mystery-encounter-phases"; export default class PhaseInterceptor { public scene; diff --git a/src/ui/mystery-encounter-ui-handler.ts b/src/ui/mystery-encounter-ui-handler.ts index e6699afbfe8..cfb2dfbd3a8 100644 --- a/src/ui/mystery-encounter-ui-handler.ts +++ b/src/ui/mystery-encounter-ui-handler.ts @@ -4,7 +4,7 @@ import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { Button } from "#enums/buttons"; import { addWindow, WindowVariant } from "./ui-theme"; -import { MysteryEncounterPhase } from "../phases/mystery-encounter-phase"; +import { MysteryEncounterPhase } from "../phases/mystery-encounter-phases"; import { PartyUiMode } from "./party-ui-handler"; import MysteryEncounterOption, { EncounterOptionMode } from "../data/mystery-encounters/mystery-encounter-option"; import * as Utils from "../utils";