update sleeping snorlax encounter
This commit is contained in:
parent
a3664b4624
commit
fd48c3fcae
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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`,
|
||||
},
|
||||
],
|
||||
},
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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,
|
||||
});
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -43,8 +43,8 @@ export interface StartOfBattleEffect {
|
|||
sourceBattlerIndex?: BattlerIndex;
|
||||
targets: BattlerIndex[];
|
||||
move: PokemonMove;
|
||||
ignorePp: boolean;
|
||||
followUp?: boolean;
|
||||
ignorePp?: boolean;
|
||||
}
|
||||
|
||||
export default interface IMysteryEncounter {
|
||||
|
|
|
@ -158,14 +158,15 @@ const anyBiomeEncounters: MysteryEncounterType[] = [
|
|||
*/
|
||||
export const mysteryEncountersByBiome = new Map<Biome, MysteryEncounterType[]>([
|
||||
[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, MysteryEncounterType[]>([
|
|||
[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, []],
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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."
|
||||
};
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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."
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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
|
|
@ -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";
|
||||
|
|
|
@ -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`,
|
||||
},
|
||||
],
|
||||
});
|
||||
|
|
|
@ -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", () => {
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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";
|
||||
|
||||
/**
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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";
|
||||
|
|
Loading…
Reference in New Issue