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);
|
const cancelled = new Utils.BooleanHolder(false);
|
||||||
applyAbAttrs(ProtectStatAbAttr, pokemon, cancelled);
|
applyAbAttrs(ProtectStatAbAttr, pokemon, cancelled);
|
||||||
if (!cancelled.value) {
|
if (!cancelled.value) {
|
||||||
const mysteryEncounterBattleEffects = pokemon.summonData.mysteryEncounterBattleEffects;
|
const mysteryEncounterBattleEffects = pokemon.mysteryEncounterBattleEffects;
|
||||||
if (mysteryEncounterBattleEffects) {
|
if (mysteryEncounterBattleEffects) {
|
||||||
mysteryEncounterBattleEffects(pokemon);
|
mysteryEncounterBattleEffects(pokemon);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ import { EnemyPartyConfig, EnemyPokemonConfig, initBattleWithEnemyConfig, leaveE
|
||||||
import { getRandomPlayerPokemon, getRandomSpeciesByStarterTier } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
|
import { getRandomPlayerPokemon, getRandomSpeciesByStarterTier } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
|
||||||
|
|
||||||
/** i18n namespace for encounter */
|
/** 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 */
|
/** Exclude Ultra Beasts (inludes Cosmog/Solgaleo/Lunala/Necrozma), Paradox (includes Miraidon/Koraidon), Eternatus, and egg-locked mythicals */
|
||||||
const excludedBosses = [
|
const excludedBosses = [
|
||||||
|
@ -91,32 +91,32 @@ export const DarkDealEncounter: IMysteryEncounter =
|
||||||
])
|
])
|
||||||
.withIntroDialogue([
|
.withIntroDialogue([
|
||||||
{
|
{
|
||||||
text: `${namespace}_intro_message`,
|
text: `${namespace}:intro`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
speaker: `${namespace}_speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}_intro_dialogue`,
|
text: `${namespace}:intro_dialogue`,
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
.withSceneWaveRangeRequirement(30, 180) // waves 30 to 180
|
.withSceneWaveRangeRequirement(30, 180) // waves 30 to 180
|
||||||
.withScenePartySizeRequirement(2, 6) // Must have at least 2 pokemon in party
|
.withScenePartySizeRequirement(2, 6) // Must have at least 2 pokemon in party
|
||||||
.withCatchAllowed(true)
|
.withCatchAllowed(true)
|
||||||
.withTitle(`${namespace}_title`)
|
.withTitle(`${namespace}:title`)
|
||||||
.withDescription(`${namespace}_description`)
|
.withDescription(`${namespace}:description`)
|
||||||
.withQuery(`${namespace}_query`)
|
.withQuery(`${namespace}:query`)
|
||||||
.withOption(
|
.withOption(
|
||||||
new MysteryEncounterOptionBuilder()
|
new MysteryEncounterOptionBuilder()
|
||||||
.withOptionMode(EncounterOptionMode.DEFAULT)
|
.withOptionMode(EncounterOptionMode.DEFAULT)
|
||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}_option_1_label`,
|
buttonLabel: `${namespace}:option:1:label`,
|
||||||
buttonTooltip: `${namespace}_option_1_tooltip`,
|
buttonTooltip: `${namespace}:option:1:tooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
speaker: `${namespace}_speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}_option_1_selected`,
|
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);
|
const removedPokemon = getRandomPlayerPokemon(scene, false, true);
|
||||||
scene.removePokemonFromPlayerParty(removedPokemon);
|
scene.removePokemonFromPlayerParty(removedPokemon);
|
||||||
|
|
||||||
scene.currentBattle.mysteryEncounter.setDialogueToken(
|
scene.currentBattle.mysteryEncounter.setDialogueToken("pokeName", removedPokemon.name);
|
||||||
"pokeName",
|
|
||||||
removedPokemon.name
|
|
||||||
);
|
|
||||||
|
|
||||||
// Store removed pokemon types
|
// Store removed pokemon types
|
||||||
scene.currentBattle.mysteryEncounter.misc = [
|
scene.currentBattle.mysteryEncounter.misc = [
|
||||||
|
@ -158,7 +155,6 @@ export const DarkDealEncounter: IMysteryEncounter =
|
||||||
pokemonConfig.formIndex = 0;
|
pokemonConfig.formIndex = 0;
|
||||||
}
|
}
|
||||||
const config: EnemyPartyConfig = {
|
const config: EnemyPartyConfig = {
|
||||||
levelAdditiveMultiplier: 0.75,
|
|
||||||
pokemonConfigs: [pokemonConfig],
|
pokemonConfigs: [pokemonConfig],
|
||||||
};
|
};
|
||||||
return initBattleWithEnemyConfig(scene, config);
|
return initBattleWithEnemyConfig(scene, config);
|
||||||
|
@ -167,12 +163,12 @@ export const DarkDealEncounter: IMysteryEncounter =
|
||||||
)
|
)
|
||||||
.withSimpleOption(
|
.withSimpleOption(
|
||||||
{
|
{
|
||||||
buttonLabel: `${namespace}_option_2_label`,
|
buttonLabel: `${namespace}:option:2:label`,
|
||||||
buttonTooltip: `${namespace}_option_2_tooltip`,
|
buttonTooltip: `${namespace}:option:2:tooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
speaker: `${namespace}_speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}_option_2_selected`,
|
text: `${namespace}:option:2:selected`,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
@ -184,7 +180,7 @@ export const DarkDealEncounter: IMysteryEncounter =
|
||||||
)
|
)
|
||||||
.withOutroDialogue([
|
.withOutroDialogue([
|
||||||
{
|
{
|
||||||
text: `${namespace}_outro`
|
text: `${namespace}:outro`
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
.build();
|
.build();
|
||||||
|
|
|
@ -102,23 +102,23 @@ export const FightOrFlightEncounter: IMysteryEncounter =
|
||||||
const primaryPokemon = encounter.options[1].primaryPokemon;
|
const primaryPokemon = encounter.options[1].primaryPokemon;
|
||||||
if (primaryPokemon) {
|
if (primaryPokemon) {
|
||||||
// Use primaryPokemon to execute the thievery
|
// 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 {
|
} else {
|
||||||
encounter.options[1].dialogue.buttonTooltip = `${namespace}_option_2_tooltip`;
|
encounter.options[1].dialogue.buttonTooltip = `${namespace}:option:2:tooltip`;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
})
|
})
|
||||||
.withTitle(`${namespace}_title`)
|
.withTitle(`${namespace}:title`)
|
||||||
.withDescription(`${namespace}_description`)
|
.withDescription(`${namespace}:description`)
|
||||||
.withQuery(`${namespace}_query`)
|
.withQuery(`${namespace}:query`)
|
||||||
.withSimpleOption(
|
.withSimpleOption(
|
||||||
{
|
{
|
||||||
buttonLabel: `${namespace}_option_1_label`,
|
buttonLabel: `${namespace}:option:1:label`,
|
||||||
buttonTooltip: `${namespace}_option_1_tooltip`,
|
buttonTooltip: `${namespace}:option:1:tooltip`,
|
||||||
selected: [
|
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)
|
.withOptionMode(EncounterOptionMode.DEFAULT_OR_SPECIAL)
|
||||||
.withPrimaryPokemonRequirement(new MoveRequirement(STEALING_MOVES)) // Will set option2PrimaryName and option2PrimaryMove dialogue tokens automatically
|
.withPrimaryPokemonRequirement(new MoveRequirement(STEALING_MOVES)) // Will set option2PrimaryName and option2PrimaryMove dialogue tokens automatically
|
||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}_option_2_label`,
|
buttonLabel: `${namespace}:option:2:label`,
|
||||||
buttonTooltip: `${namespace}_option_2_tooltip`,
|
buttonTooltip: `${namespace}:option:2:tooltip`,
|
||||||
})
|
})
|
||||||
.withOptionPhase(async (scene: BattleScene) => {
|
.withOptionPhase(async (scene: BattleScene) => {
|
||||||
// Pick steal
|
// Pick steal
|
||||||
|
@ -148,7 +148,7 @@ export const FightOrFlightEncounter: IMysteryEncounter =
|
||||||
const primaryPokemon = encounter.options[1].primaryPokemon;
|
const primaryPokemon = encounter.options[1].primaryPokemon;
|
||||||
if (primaryPokemon) {
|
if (primaryPokemon) {
|
||||||
// Use primaryPokemon to execute the thievery
|
// Use primaryPokemon to execute the thievery
|
||||||
await showEncounterText(scene, `${namespace}_option_2_steal_result`);
|
await showEncounterText(scene, `${namespace}:option:2:steal_result`);
|
||||||
leaveEncounterWithoutBattle(scene);
|
leaveEncounterWithoutBattle(scene);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -160,15 +160,15 @@ export const FightOrFlightEncounter: IMysteryEncounter =
|
||||||
config.pokemonConfigs[0].tags = [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON];
|
config.pokemonConfigs[0].tags = [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON];
|
||||||
config.pokemonConfigs[0].mysteryEncounterBattleEffects = (pokemon: Pokemon) => {
|
config.pokemonConfigs[0].mysteryEncounterBattleEffects = (pokemon: Pokemon) => {
|
||||||
pokemon.scene.currentBattle.mysteryEncounter.setDialogueToken("enemyPokemon", pokemon.name);
|
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));
|
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);
|
await initBattleWithEnemyConfig(scene, config);
|
||||||
} else {
|
} else {
|
||||||
// Steal item (37.5%)
|
// Steal item (37.5%)
|
||||||
// Display result message then proceed to rewards
|
// 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);
|
leaveEncounterWithoutBattle(scene);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -176,11 +176,11 @@ export const FightOrFlightEncounter: IMysteryEncounter =
|
||||||
)
|
)
|
||||||
.withSimpleOption(
|
.withSimpleOption(
|
||||||
{
|
{
|
||||||
buttonLabel: `${namespace}_option_3_label`,
|
buttonLabel: `${namespace}:option:3:label`,
|
||||||
buttonTooltip: `${namespace}_option_3_tooltip`,
|
buttonTooltip: `${namespace}:option:3:tooltip`,
|
||||||
selected: [
|
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;
|
const DAMAGE_PERCENTAGE: number = 25;
|
||||||
/** The i18n namespace for the encounter */
|
/** The i18n namespace for the encounter */
|
||||||
const namepsace = "mysteryEncounter:lostAtSeaDialogue";
|
const namespace = "mysteryEncounter:lostAtSea";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lost at sea encounter.
|
* Lost at sea encounter.
|
||||||
|
@ -35,7 +35,7 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
||||||
y: 3,
|
y: 3,
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
.withIntroDialogue([{ text: `${namepsace}:intro` }])
|
.withIntroDialogue([{ text: `${namespace}:intro` }])
|
||||||
.withOnInit((scene: BattleScene) => {
|
.withOnInit((scene: BattleScene) => {
|
||||||
const { mysteryEncounter } = scene.currentBattle;
|
const { mysteryEncounter } = scene.currentBattle;
|
||||||
|
|
||||||
|
@ -45,22 +45,22 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
})
|
})
|
||||||
.withTitle(`${namepsace}:title`)
|
.withTitle(`${namespace}:title`)
|
||||||
.withDescription(`${namepsace}:description`)
|
.withDescription(`${namespace}:description`)
|
||||||
.withQuery(`${namepsace}:query`)
|
.withQuery(`${namespace}:query`)
|
||||||
.withOption(
|
.withOption(
|
||||||
// Option 1: Use a (non fainted) pokemon that can learn Surf to guide you back/
|
// Option 1: Use a (non fainted) pokemon that can learn Surf to guide you back/
|
||||||
new MysteryEncounterOptionBuilder()
|
new MysteryEncounterOptionBuilder()
|
||||||
.withPokemonCanLearnMoveRequirement(OPTION_1_REQUIRED_MOVE)
|
.withPokemonCanLearnMoveRequirement(OPTION_1_REQUIRED_MOVE)
|
||||||
.withOptionMode(EncounterOptionMode.DISABLED_OR_DEFAULT)
|
.withOptionMode(EncounterOptionMode.DISABLED_OR_DEFAULT)
|
||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namepsace}:option:1:label`,
|
buttonLabel: `${namespace}:option:1:label`,
|
||||||
disabledButtonLabel: `${namepsace}:option:1:label_disabled`,
|
disabledButtonLabel: `${namespace}:option:1:label_disabled`,
|
||||||
buttonTooltip: `${namepsace}:option:1:tooltip`,
|
buttonTooltip: `${namespace}:option:1:tooltip`,
|
||||||
disabledButtonTooltip: `${namepsace}:option:1:tooltip_disabled`,
|
disabledButtonTooltip: `${namespace}:option:1:tooltip_disabled`,
|
||||||
selected: [
|
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)
|
.withPokemonCanLearnMoveRequirement(OPTION_2_REQUIRED_MOVE)
|
||||||
.withOptionMode(EncounterOptionMode.DISABLED_OR_DEFAULT)
|
.withOptionMode(EncounterOptionMode.DISABLED_OR_DEFAULT)
|
||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namepsace}:option:2:label`,
|
buttonLabel: `${namespace}:option:2:label`,
|
||||||
disabledButtonLabel: `${namepsace}:option:2:label_disabled`,
|
disabledButtonLabel: `${namespace}:option:2:label_disabled`,
|
||||||
buttonTooltip: `${namepsace}:option:2:tooltip`,
|
buttonTooltip: `${namespace}:option:2:tooltip`,
|
||||||
disabledButtonTooltip: `${namepsace}:option:2:tooltip_disabled`,
|
disabledButtonTooltip: `${namespace}:option:2:tooltip_disabled`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namepsace}:option:2:selected`,
|
text: `${namespace}:option:2:selected`,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
@ -89,11 +89,11 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
||||||
.withSimpleOption(
|
.withSimpleOption(
|
||||||
// Option 3: Wander aimlessly
|
// Option 3: Wander aimlessly
|
||||||
{
|
{
|
||||||
buttonLabel: `${namepsace}:option:3:label`,
|
buttonLabel: `${namespace}:option:3:label`,
|
||||||
buttonTooltip: `${namepsace}:option:3:tooltip`,
|
buttonTooltip: `${namespace}:option:3:tooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namepsace}:option:3:selected`,
|
text: `${namespace}:option:3:selected`,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
@ -113,7 +113,7 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
||||||
)
|
)
|
||||||
.withOutroDialogue([
|
.withOutroDialogue([
|
||||||
{
|
{
|
||||||
text: `${namepsace}:outro`,
|
text: `${namespace}:outro`,
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
.build();
|
.build();
|
||||||
|
|
|
@ -99,7 +99,7 @@ export const MysteriousChallengersEncounter: IMysteryEncounter =
|
||||||
const brutalSpriteKey = brutalConfig.getSpriteKey(female, brutalConfig.doubleOnly);
|
const brutalSpriteKey = brutalConfig.getSpriteKey(female, brutalConfig.doubleOnly);
|
||||||
encounter.enemyPartyConfigs.push({
|
encounter.enemyPartyConfigs.push({
|
||||||
trainerConfig: brutalConfig,
|
trainerConfig: brutalConfig,
|
||||||
levelAdditiveMultiplier: 1.1,
|
levelAdditiveMultiplier: 1,
|
||||||
female: female,
|
female: female,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ import IMysteryEncounter, { MysteryEncounterBuilder, MysteryEncounterTier, } fro
|
||||||
import { EncounterOptionMode, MysteryEncounterOptionBuilder } from "../mystery-encounter-option";
|
import { EncounterOptionMode, MysteryEncounterOptionBuilder } from "../mystery-encounter-option";
|
||||||
|
|
||||||
/** i18n namespace for encounter */
|
/** i18n namespace for encounter */
|
||||||
const namespace = "mysteryEncounter:dark_deal";
|
const namespace = "mysteryEncounter:mysteriousChest";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mysterious Chest encounter.
|
* Mysterious Chest encounter.
|
||||||
|
|
|
@ -1,17 +1,19 @@
|
||||||
import { STEALING_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups";
|
import { STEALING_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups";
|
||||||
import { modifierTypes } from "#app/modifier/modifier-type";
|
import { modifierTypes } from "#app/modifier/modifier-type";
|
||||||
import { BerryType } from "#enums/berry-type";
|
|
||||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
import BattleScene from "../../../battle-scene";
|
import BattleScene from "#app/battle-scene";
|
||||||
import * as Utils from "../../../utils";
|
import { StatusEffect } from "#app/data/status-effect";
|
||||||
import { getPokemonSpecies } from "../../pokemon-species";
|
|
||||||
import { Status, StatusEffect } from "../../status-effect";
|
|
||||||
import IMysteryEncounter, { MysteryEncounterBuilder, MysteryEncounterTier, } from "../mystery-encounter";
|
import IMysteryEncounter, { MysteryEncounterBuilder, MysteryEncounterTier, } from "../mystery-encounter";
|
||||||
import { EncounterOptionMode, MysteryEncounterOptionBuilder } from "../mystery-encounter-option";
|
import { EncounterOptionMode, MysteryEncounterOptionBuilder } from "../mystery-encounter-option";
|
||||||
import { MoveRequirement } from "../mystery-encounter-requirements";
|
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 { 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 */
|
/** i18n namespace for the encounter */
|
||||||
const namespace = "mysteryEncounter:sleeping_snorlax";
|
const namespace = "mysteryEncounter:sleeping_snorlax";
|
||||||
|
@ -54,13 +56,18 @@ export const SleepingSnorlaxEncounter: IMysteryEncounter =
|
||||||
const pokemonConfig: EnemyPokemonConfig = {
|
const pokemonConfig: EnemyPokemonConfig = {
|
||||||
species: bossSpecies,
|
species: bossSpecies,
|
||||||
isBoss: true,
|
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 = {
|
const config: EnemyPartyConfig = {
|
||||||
levelAdditiveMultiplier: 2,
|
levelAdditiveMultiplier: 0.5,
|
||||||
pokemonConfigs: [pokemonConfig],
|
pokemonConfigs: [pokemonConfig],
|
||||||
};
|
};
|
||||||
encounter.enemyPartyConfigs = [config];
|
encounter.enemyPartyConfigs = [config];
|
||||||
|
|
||||||
|
// Load animations/sfx for Snorlax fight start moves
|
||||||
|
initCustomMovesForEncounter(scene, [Moves.SNORE]);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
})
|
})
|
||||||
.withTitle(`${namespace}_title`)
|
.withTitle(`${namespace}_title`)
|
||||||
|
@ -78,12 +85,22 @@ export const SleepingSnorlaxEncounter: IMysteryEncounter =
|
||||||
},
|
},
|
||||||
async (scene: BattleScene) => {
|
async (scene: BattleScene) => {
|
||||||
// Pick battle
|
// Pick battle
|
||||||
// TODO: do we want special rewards for this?
|
const encounter = scene.currentBattle.mysteryEncounter;
|
||||||
// setCustomEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.LEFTOVERS], fillRemaining: true});
|
setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.LEFTOVERS], fillRemaining: true});
|
||||||
await initBattleWithEnemyConfig(
|
encounter.startOfBattleEffects.push(
|
||||||
scene,
|
{
|
||||||
scene.currentBattle.mysteryEncounter.enemyPartyConfigs[0]
|
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(
|
.withSimpleOption(
|
||||||
|
@ -97,46 +114,11 @@ export const SleepingSnorlaxEncounter: IMysteryEncounter =
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
async (scene: BattleScene) => {
|
async (scene: BattleScene) => {
|
||||||
const instance = scene.currentBattle.mysteryEncounter;
|
// Fall asleep waiting for Snorlax
|
||||||
let roll: integer;
|
// Full heal party
|
||||||
scene.executeWithSeedOffset(() => {
|
scene.unshiftPhase(new PartyHealPhase(scene, true));
|
||||||
roll = Utils.randSeedInt(16, 0);
|
queueEncounterMessage(scene, `${namespace}_option_2_good_result`);
|
||||||
}, scene.currentBattle.waveIndex);
|
leaveEncounterWithoutBattle(scene);
|
||||||
|
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.withOption(
|
.withOption(
|
||||||
|
@ -151,13 +133,10 @@ export const SleepingSnorlaxEncounter: IMysteryEncounter =
|
||||||
.withOptionPhase(async (scene: BattleScene) => {
|
.withOptionPhase(async (scene: BattleScene) => {
|
||||||
// Steal the Snorlax's Leftovers
|
// Steal the Snorlax's Leftovers
|
||||||
const instance = scene.currentBattle.mysteryEncounter;
|
const instance = scene.currentBattle.mysteryEncounter;
|
||||||
setEncounterRewards(scene, {
|
setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.LEFTOVERS], fillRemaining: false });
|
||||||
guaranteedModifierTypeFuncs: [modifierTypes.LEFTOVERS],
|
|
||||||
fillRemaining: false,
|
|
||||||
});
|
|
||||||
queueEncounterMessage(scene, `${namespace}_option_3_good_result`);
|
queueEncounterMessage(scene, `${namespace}_option_3_good_result`);
|
||||||
// Snorlax exp to Pokemon that did the stealing
|
// 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);
|
leaveEncounterWithoutBattle(scene);
|
||||||
})
|
})
|
||||||
.build()
|
.build()
|
||||||
|
|
|
@ -43,8 +43,8 @@ export interface StartOfBattleEffect {
|
||||||
sourceBattlerIndex?: BattlerIndex;
|
sourceBattlerIndex?: BattlerIndex;
|
||||||
targets: BattlerIndex[];
|
targets: BattlerIndex[];
|
||||||
move: PokemonMove;
|
move: PokemonMove;
|
||||||
|
ignorePp: boolean;
|
||||||
followUp?: boolean;
|
followUp?: boolean;
|
||||||
ignorePp?: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default interface IMysteryEncounter {
|
export default interface IMysteryEncounter {
|
||||||
|
|
|
@ -158,14 +158,15 @@ const anyBiomeEncounters: MysteryEncounterType[] = [
|
||||||
*/
|
*/
|
||||||
export const mysteryEncountersByBiome = new Map<Biome, MysteryEncounterType[]>([
|
export const mysteryEncountersByBiome = new Map<Biome, MysteryEncounterType[]>([
|
||||||
[Biome.TOWN, []],
|
[Biome.TOWN, []],
|
||||||
[Biome.PLAINS, []],
|
[Biome.PLAINS, [
|
||||||
|
MysteryEncounterType.SLEEPING_SNORLAX
|
||||||
|
]],
|
||||||
[Biome.GRASS, [
|
[Biome.GRASS, [
|
||||||
MysteryEncounterType.SLEEPING_SNORLAX,
|
MysteryEncounterType.SLEEPING_SNORLAX,
|
||||||
]],
|
]],
|
||||||
[Biome.TALL_GRASS, []],
|
[Biome.TALL_GRASS, []],
|
||||||
[Biome.METROPOLIS, []],
|
[Biome.METROPOLIS, []],
|
||||||
[Biome.FOREST, [
|
[Biome.FOREST, [
|
||||||
MysteryEncounterType.SLEEPING_SNORLAX,
|
|
||||||
MysteryEncounterType.SAFARI_ZONE
|
MysteryEncounterType.SAFARI_ZONE
|
||||||
]],
|
]],
|
||||||
|
|
||||||
|
@ -178,13 +179,9 @@ export const mysteryEncountersByBiome = new Map<Biome, MysteryEncounterType[]>([
|
||||||
[Biome.BEACH, []],
|
[Biome.BEACH, []],
|
||||||
[Biome.LAKE, []],
|
[Biome.LAKE, []],
|
||||||
[Biome.SEABED, []],
|
[Biome.SEABED, []],
|
||||||
[Biome.MOUNTAIN, [
|
[Biome.MOUNTAIN, []],
|
||||||
MysteryEncounterType.SLEEPING_SNORLAX
|
|
||||||
]],
|
|
||||||
[Biome.BADLANDS, []],
|
[Biome.BADLANDS, []],
|
||||||
[Biome.CAVE, [
|
[Biome.CAVE, []],
|
||||||
MysteryEncounterType.SLEEPING_SNORLAX
|
|
||||||
]],
|
|
||||||
[Biome.DESERT, []],
|
[Biome.DESERT, []],
|
||||||
[Biome.ICE_CAVE, []],
|
[Biome.ICE_CAVE, []],
|
||||||
[Biome.MEADOW, []],
|
[Biome.MEADOW, []],
|
||||||
|
|
|
@ -3,13 +3,13 @@ import { biomeLinks } from "#app/data/biomes";
|
||||||
import MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option";
|
import MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option";
|
||||||
import { WIGHT_INCREMENT_ON_SPAWN_MISS } from "#app/data/mystery-encounters/mystery-encounters";
|
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 { 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 { getPokemonNameWithAffix } from "#app/messages";
|
||||||
import { ExpBalanceModifier, ExpShareModifier, MultipleParticipantExpBonusModifier, PokemonExpBoosterModifier } from "#app/modifier/modifier";
|
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 { CustomModifierSettings, getModifierPoolForType, ModifierPoolType, ModifierType, ModifierTypeFunc, ModifierTypeGenerator, ModifierTypeOption, modifierTypes, PokemonHeldItemModifierType, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type";
|
||||||
import * as Overrides from "#app/overrides";
|
import * as Overrides from "#app/overrides";
|
||||||
import { BattleEndPhase, EggLapsePhase, ExpPhase, GameOverPhase, ModifierRewardPhase, MovePhase, SelectModifierPhase, ShowPartyExpBarPhase, TrainerVictoryPhase } from "#app/phases";
|
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 PokemonData from "#app/system/pokemon-data";
|
||||||
import { OptionSelectConfig, OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler";
|
import { OptionSelectConfig, OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler";
|
||||||
import { PartyOption, PartyUiMode } from "#app/ui/party-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 { Moves } from "#enums/moves";
|
||||||
import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims";
|
import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims";
|
||||||
|
|
||||||
export class EnemyPokemonConfig {
|
export interface EnemyPokemonConfig {
|
||||||
species: PokemonSpecies;
|
species: PokemonSpecies;
|
||||||
isBoss: boolean = false;
|
isBoss: boolean;
|
||||||
bossSegments?: number;
|
bossSegments?: number;
|
||||||
bossSegmentModifier?: number; // Additive to the determined segment number
|
bossSegmentModifier?: number; // Additive to the determined segment number
|
||||||
formIndex?: number;
|
formIndex?: number;
|
||||||
level?: number;
|
level?: number;
|
||||||
gender?: Gender;
|
gender?: Gender;
|
||||||
modifierTypes?: PokemonHeldItemModifierType[];
|
|
||||||
dataSource?: PokemonData;
|
|
||||||
tags?: BattlerTagType[];
|
|
||||||
mysteryEncounterBattleEffects?: (pokemon: Pokemon) => void;
|
|
||||||
status?: StatusEffect;
|
|
||||||
passive?: boolean;
|
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 {
|
export interface EnemyPartyConfig {
|
||||||
levelAdditiveMultiplier?: number = 0; // Formula for enemy: level += waveIndex / 10 * levelAdditive
|
levelAdditiveMultiplier?: number; // Formula for enemy: level += waveIndex / 10 * levelAdditive
|
||||||
doubleBattle?: boolean = false;
|
doubleBattle?: boolean;
|
||||||
trainerType?: TrainerType; // Generates trainer battle solely off trainer type
|
trainerType?: TrainerType; // Generates trainer battle solely off trainer type
|
||||||
trainerConfig?: TrainerConfig; // More customizable option for configuring trainer battle
|
trainerConfig?: TrainerConfig; // More customizable option for configuring trainer battle
|
||||||
pokemonConfigs?: EnemyPokemonConfig[];
|
pokemonConfigs?: EnemyPokemonConfig[];
|
||||||
|
@ -167,11 +169,6 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig:
|
||||||
enemyPokemon.formIndex = config.formIndex;
|
enemyPokemon.formIndex = config.formIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set gender
|
|
||||||
if (!isNullOrUndefined(config.gender)) {
|
|
||||||
enemyPokemon.gender = config.gender;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set Boss
|
// Set Boss
|
||||||
if (config.isBoss) {
|
if (config.isBoss) {
|
||||||
let segments = !isNullOrUndefined(config.bossSegments) ? config.bossSegments : scene.getEncounterBossSegments(scene.currentBattle.waveIndex, level, enemySpecies, true);
|
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
|
// Set Status
|
||||||
if (partyConfig.pokemonConfigs[e].status) {
|
if (partyConfig.pokemonConfigs[e].status) {
|
||||||
// Default to cureturn 3 for sleep
|
// Default to cureturn 3 for sleep
|
||||||
const cureTurn = partyConfig.pokemonConfigs[e].status === StatusEffect.SLEEP ? 3 : null;
|
const status = partyConfig.pokemonConfigs[e].status instanceof Array ? partyConfig.pokemonConfigs[e].status[0] : partyConfig.pokemonConfigs[e].status;
|
||||||
enemyPokemon.status = new Status(partyConfig.pokemonConfigs[e].status, 0, cureTurn);
|
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
|
// Set tags
|
||||||
if (config.tags?.length > 0) {
|
if (config.tags?.length > 0) {
|
||||||
const tags = config.tags;
|
const tags = config.tags;
|
||||||
tags.forEach(tag => enemyPokemon.addTag(tag));
|
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.initBattleInfo();
|
||||||
enemyPokemon.getBattleInfo().initInfo(enemyPokemon);
|
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));
|
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;
|
encounter.startOfBattleEffectsComplete = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,6 +101,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||||
public battleSummonData: PokemonBattleSummonData;
|
public battleSummonData: PokemonBattleSummonData;
|
||||||
public turnData: PokemonTurnData;
|
public turnData: PokemonTurnData;
|
||||||
|
|
||||||
|
public mysteryEncounterBattleEffects: (pokemon: Pokemon) => void = null;
|
||||||
|
|
||||||
public fieldPosition: FieldPosition;
|
public fieldPosition: FieldPosition;
|
||||||
|
|
||||||
public maskEnabled: boolean;
|
public maskEnabled: boolean;
|
||||||
|
@ -3931,7 +3933,6 @@ export class PokemonSummonData {
|
||||||
public moveset: PokemonMove[];
|
public moveset: PokemonMove[];
|
||||||
// If not initialized this value will not be populated from save data.
|
// If not initialized this value will not be populated from save data.
|
||||||
public types: Type[] = null;
|
public types: Type[] = null;
|
||||||
public mysteryEncounterBattleEffects: (pokemon: Pokemon) => void = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class PokemonBattleData {
|
export class PokemonBattleData {
|
||||||
|
|
|
@ -1,4 +1,15 @@
|
||||||
import { lostAtSeaDialogue } from "./mystery-encounters/lost-at-sea-dialogue";
|
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:
|
* Patterns that can be used:
|
||||||
|
@ -21,47 +32,6 @@ export const mysteryEncounter = {
|
||||||
"paid_money": "You paid ₽{{amount, number}}.",
|
"paid_money": "You paid ₽{{amount, number}}.",
|
||||||
"receive_money": "You received ₽{{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_intro_message": "It's a lady with a ton of shopping bags.",
|
||||||
"department_store_sale_speaker": "Shopper",
|
"department_store_sale_speaker": "Shopper",
|
||||||
"department_store_sale_intro_dialogue": `Hello! Are you here for\nthe amazing sales too?
|
"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
|
// 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.
|
"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.`,
|
$You get closer to see a Snorlax sleeping peacefully.\nIt seems like there's no way around it.`,
|
||||||
"sleeping_snorlax_title": "Sleeping Snorlax",
|
"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_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_1_selected_message": "You approach the\nPokémon without fear.",
|
||||||
"sleeping_snorlax_option_2_selected_message": `.@d{32}.@d{32}.@d{32}
|
"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.`,
|
$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_good_result": "When you all awaken, the Snorlax is no where to be found -\nbut 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!`,
|
|
||||||
"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!",
|
"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,
|
lostAtSea: lostAtSeaDialogue,
|
||||||
|
fieryFallout: fieryFalloutDialogue,
|
||||||
} as const;
|
} as const;
|
||||||
|
|
|
@ -1,31 +1,29 @@
|
||||||
export const darkDealDialogue = {
|
export const darkDealDialogue = {
|
||||||
intro: "Wandering aimlessly, you effectively get nowhere.",
|
intro: "A strange man in a tattered coat\nstands in your way...",
|
||||||
title: "Lost at sea",
|
speaker: "Shady Guy",
|
||||||
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_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?",
|
query: "What will you do?",
|
||||||
option: {
|
option: {
|
||||||
1: {
|
1: {
|
||||||
label: "{{option1PrimaryName}} can help",
|
label: "Accept",
|
||||||
label_disabled: "Can't {{option1RequiredMove}}",
|
tooltip: "(+) 5 Rogue Balls\n(?) Enhance a Random Pokémon",
|
||||||
tooltip: "(+) {{option1PrimaryName}} saves you.\n(+) {{option1PrimaryName}} gains some EXP.",
|
selected_dialogue: `Let's see, that {{pokeName}} will do nicely!
|
||||||
tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on",
|
$Remember, I'm not responsible\nif anything bad happens!@d{32} Hehe...`,
|
||||||
selected:
|
selected_message: `The man hands you 5 Rogue Balls.
|
||||||
"{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.",
|
\${{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: {
|
2: {
|
||||||
label: "{{option2PrimaryName}} can help",
|
label: "Refuse",
|
||||||
label_disabled: "Can't {{option2RequiredMove}}",
|
tooltip: "(-) No Rewards",
|
||||||
tooltip: "(+) {{option2PrimaryName}} saves you.\n(+) {{option2PrimaryName}} gains some EXP.",
|
selected: "Not gonna help a poor fellow out?\nPah!",
|
||||||
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.`,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
outro: "You are back on track."
|
outro: "After the harrowing encounter,\nyou collect yourself and depart."
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,30 +1,30 @@
|
||||||
export const departmentStoreSaleDialogue = {
|
export const departmentStoreSaleDialogue = {
|
||||||
intro: "Wandering aimlessly, you effectively get nowhere.",
|
intro: "Wandering aimlessly through the sea, you've effectively gotten nowhere.",
|
||||||
title: "Lost at sea",
|
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?",
|
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?",
|
query: "What will you do?",
|
||||||
option: {
|
option: {
|
||||||
1: {
|
1: {
|
||||||
label: "{{option1PrimaryName}} can help",
|
label: "{{option1PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option1RequiredMove}}",
|
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",
|
tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on",
|
||||||
selected:
|
selected: `{{option1PrimaryName}} swims ahead, guiding you back on track.
|
||||||
"{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.",
|
\${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
||||||
},
|
},
|
||||||
2: {
|
2: {
|
||||||
label: "{{option2PrimaryName}} can help",
|
label: "{{option2PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option2RequiredMove}}",
|
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",
|
tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with",
|
||||||
selected:
|
selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.
|
||||||
"{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.",
|
\${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
||||||
},
|
},
|
||||||
3: {
|
3: {
|
||||||
label: "Wander aimlessly",
|
label: "Wander aimlessly",
|
||||||
tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.",
|
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.
|
selected: `You float about in the boat, steering without direction until you finally spot a landmark you remember.
|
||||||
$You and your Pokémon get very fatigued during the whole ordeal.`,
|
$You and your Pokémon are fatigued from the whole ordeal.`,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
outro: "You are back on track."
|
outro: "You are back on track."
|
||||||
|
|
|
@ -1,30 +1,30 @@
|
||||||
export const fieldTripDialogue = {
|
export const fieldTripDialogue = {
|
||||||
intro: "Wandering aimlessly, you effectively get nowhere.",
|
intro: "Wandering aimlessly through the sea, you've effectively gotten nowhere.",
|
||||||
title: "Lost at sea",
|
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?",
|
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?",
|
query: "What will you do?",
|
||||||
option: {
|
option: {
|
||||||
1: {
|
1: {
|
||||||
label: "{{option1PrimaryName}} can help",
|
label: "{{option1PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option1RequiredMove}}",
|
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",
|
tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on",
|
||||||
selected:
|
selected: `{{option1PrimaryName}} swims ahead, guiding you back on track.
|
||||||
"{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.",
|
\${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
||||||
},
|
},
|
||||||
2: {
|
2: {
|
||||||
label: "{{option2PrimaryName}} can help",
|
label: "{{option2PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option2RequiredMove}}",
|
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",
|
tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with",
|
||||||
selected:
|
selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.
|
||||||
"{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.",
|
\${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
||||||
},
|
},
|
||||||
3: {
|
3: {
|
||||||
label: "Wander aimlessly",
|
label: "Wander aimlessly",
|
||||||
tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.",
|
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.
|
selected: `You float about in the boat, steering without direction until you finally spot a landmark you remember.
|
||||||
$You and your Pokémon get very fatigued during the whole ordeal.`,
|
$You and your Pokémon are fatigued from the whole ordeal.`,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
outro: "You are back on track."
|
outro: "You are back on track."
|
||||||
|
|
|
@ -1,30 +1,30 @@
|
||||||
export const fieryFalloutDialogue = {
|
export const fieryFalloutDialogue = {
|
||||||
intro: "Wandering aimlessly, you effectively get nowhere.",
|
intro: "Wandering aimlessly through the sea, you've effectively gotten nowhere.",
|
||||||
title: "Lost at sea",
|
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?",
|
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?",
|
query: "What will you do?",
|
||||||
option: {
|
option: {
|
||||||
1: {
|
1: {
|
||||||
label: "{{option1PrimaryName}} can help",
|
label: "{{option1PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option1RequiredMove}}",
|
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",
|
tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on",
|
||||||
selected:
|
selected: `{{option1PrimaryName}} swims ahead, guiding you back on track.
|
||||||
"{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.",
|
\${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
||||||
},
|
},
|
||||||
2: {
|
2: {
|
||||||
label: "{{option2PrimaryName}} can help",
|
label: "{{option2PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option2RequiredMove}}",
|
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",
|
tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with",
|
||||||
selected:
|
selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.
|
||||||
"{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.",
|
\${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
||||||
},
|
},
|
||||||
3: {
|
3: {
|
||||||
label: "Wander aimlessly",
|
label: "Wander aimlessly",
|
||||||
tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.",
|
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.
|
selected: `You float about in the boat, steering without direction until you finally spot a landmark you remember.
|
||||||
$You and your Pokémon get very fatigued during the whole ordeal.`,
|
$You and your Pokémon are fatigued from the whole ordeal.`,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
outro: "You are back on track."
|
outro: "You are back on track."
|
||||||
|
|
|
@ -1,31 +1,31 @@
|
||||||
export const fightOrFlightDialogue = {
|
export const fightOrFlightDialogue = {
|
||||||
intro: "Wandering aimlessly, you effectively get nowhere.",
|
intro: "Something shiny is sparkling\non the ground near that Pokémon!",
|
||||||
title: "Lost at sea",
|
title: "Fight or Flight",
|
||||||
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?",
|
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?",
|
query: "What will you do?",
|
||||||
option: {
|
option: {
|
||||||
1: {
|
1: {
|
||||||
label: "{{option1PrimaryName}} can help",
|
label: "Battle the Pokémon",
|
||||||
label_disabled: "Can't {{option1RequiredMove}}",
|
tooltip: "(-) Hard Battle\n(+) New Item",
|
||||||
tooltip: "(+) {{option1PrimaryName}} saves you.\n(+) {{option1PrimaryName}} gains some EXP.",
|
selected: "You approach the\nPokémon without fear.",
|
||||||
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.",
|
|
||||||
},
|
},
|
||||||
2: {
|
2: {
|
||||||
label: "{{option2PrimaryName}} can help",
|
label: "{{option2PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option2RequiredMove}}",
|
tooltip: "@[SUMMARY_GREEN]{(35%) Steal Item}\n@[SUMMARY_BLUE]{(65%) Harder Battle}",
|
||||||
tooltip: "(+) {{option2PrimaryName}} saves you.\n(+) {{option2PrimaryName}} gains some EXP.",
|
tooltip_special: "(+) {{option2PrimaryName}} uses {{option2PrimaryMove}}",
|
||||||
tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with",
|
good_result: `.@d{32}.@d{32}.@d{32}
|
||||||
selected:
|
$You manage to sneak your way\npast and grab the item!`,
|
||||||
"{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.",
|
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: {
|
3: {
|
||||||
label: "Wander aimlessly",
|
label: "Leave",
|
||||||
tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.",
|
tooltip: "(-) No Rewards",
|
||||||
selected: `You float about in the boat, steering it aimlessly until you finally get back on track.
|
selected: "You leave the strong Pokémon\nwith its prize and continue on.",
|
||||||
$You and your Pokémon get very fatigued during the whole ordeal.`,
|
|
||||||
},
|
},
|
||||||
},
|
}
|
||||||
outro: "You are back on track."
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,7 +7,7 @@ export const lostAtSeaDialogue = {
|
||||||
1: {
|
1: {
|
||||||
label: "{{option1PrimaryName}} can help",
|
label: "{{option1PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option1RequiredMove}}",
|
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",
|
tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on",
|
||||||
selected: `{{option1PrimaryName}} swims ahead, guiding you back on track.
|
selected: `{{option1PrimaryName}} swims ahead, guiding you back on track.
|
||||||
\${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
\${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
||||||
|
@ -15,16 +15,16 @@ export const lostAtSeaDialogue = {
|
||||||
2: {
|
2: {
|
||||||
label: "{{option2PrimaryName}} can help",
|
label: "{{option2PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option2RequiredMove}}",
|
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",
|
tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with",
|
||||||
selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.
|
selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.
|
||||||
\${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
\${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
||||||
},
|
},
|
||||||
3: {
|
3: {
|
||||||
label: "Wander aimlessly",
|
label: "Wander aimlessly",
|
||||||
tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.",
|
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.
|
selected: `You float about in the boat, steering without direction until you finally spot a landmark you remember.
|
||||||
$You and your Pokémon get very fatigued during the whole ordeal.`,
|
$You and your Pokémon are fatigued from the whole ordeal.`,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
outro: "You are back on track."
|
outro: "You are back on track."
|
||||||
|
|
|
@ -1,30 +1,30 @@
|
||||||
export const mysteriousChallengersDialogue = {
|
export const mysteriousChallengersDialogue = {
|
||||||
intro: "Wandering aimlessly, you effectively get nowhere.",
|
intro: "Wandering aimlessly through the sea, you've effectively gotten nowhere.",
|
||||||
title: "Lost at sea",
|
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?",
|
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?",
|
query: "What will you do?",
|
||||||
option: {
|
option: {
|
||||||
1: {
|
1: {
|
||||||
label: "{{option1PrimaryName}} can help",
|
label: "{{option1PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option1RequiredMove}}",
|
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",
|
tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on",
|
||||||
selected:
|
selected: `{{option1PrimaryName}} swims ahead, guiding you back on track.
|
||||||
"{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.",
|
\${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
||||||
},
|
},
|
||||||
2: {
|
2: {
|
||||||
label: "{{option2PrimaryName}} can help",
|
label: "{{option2PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option2RequiredMove}}",
|
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",
|
tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with",
|
||||||
selected:
|
selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.
|
||||||
"{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.",
|
\${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
||||||
},
|
},
|
||||||
3: {
|
3: {
|
||||||
label: "Wander aimlessly",
|
label: "Wander aimlessly",
|
||||||
tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.",
|
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.
|
selected: `You float about in the boat, steering without direction until you finally spot a landmark you remember.
|
||||||
$You and your Pokémon get very fatigued during the whole ordeal.`,
|
$You and your Pokémon are fatigued from the whole ordeal.`,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
outro: "You are back on track."
|
outro: "You are back on track."
|
||||||
|
|
|
@ -1,30 +1,30 @@
|
||||||
export const safariZoneDialogue = {
|
export const safariZoneDialogue = {
|
||||||
intro: "Wandering aimlessly, you effectively get nowhere.",
|
intro: "Wandering aimlessly through the sea, you've effectively gotten nowhere.",
|
||||||
title: "Lost at sea",
|
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?",
|
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?",
|
query: "What will you do?",
|
||||||
option: {
|
option: {
|
||||||
1: {
|
1: {
|
||||||
label: "{{option1PrimaryName}} can help",
|
label: "{{option1PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option1RequiredMove}}",
|
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",
|
tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on",
|
||||||
selected:
|
selected: `{{option1PrimaryName}} swims ahead, guiding you back on track.
|
||||||
"{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.",
|
\${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
||||||
},
|
},
|
||||||
2: {
|
2: {
|
||||||
label: "{{option2PrimaryName}} can help",
|
label: "{{option2PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option2RequiredMove}}",
|
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",
|
tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with",
|
||||||
selected:
|
selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.
|
||||||
"{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.",
|
\${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
||||||
},
|
},
|
||||||
3: {
|
3: {
|
||||||
label: "Wander aimlessly",
|
label: "Wander aimlessly",
|
||||||
tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.",
|
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.
|
selected: `You float about in the boat, steering without direction until you finally spot a landmark you remember.
|
||||||
$You and your Pokémon get very fatigued during the whole ordeal.`,
|
$You and your Pokémon are fatigued from the whole ordeal.`,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
outro: "You are back on track."
|
outro: "You are back on track."
|
||||||
|
|
|
@ -1,30 +1,30 @@
|
||||||
export const shadyVitaminDealerDialogue = {
|
export const shadyVitaminDealerDialogue = {
|
||||||
intro: "Wandering aimlessly, you effectively get nowhere.",
|
intro: "Wandering aimlessly through the sea, you've effectively gotten nowhere.",
|
||||||
title: "Lost at sea",
|
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?",
|
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?",
|
query: "What will you do?",
|
||||||
option: {
|
option: {
|
||||||
1: {
|
1: {
|
||||||
label: "{{option1PrimaryName}} can help",
|
label: "{{option1PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option1RequiredMove}}",
|
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",
|
tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on",
|
||||||
selected:
|
selected: `{{option1PrimaryName}} swims ahead, guiding you back on track.
|
||||||
"{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.",
|
\${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
||||||
},
|
},
|
||||||
2: {
|
2: {
|
||||||
label: "{{option2PrimaryName}} can help",
|
label: "{{option2PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option2RequiredMove}}",
|
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",
|
tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with",
|
||||||
selected:
|
selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.
|
||||||
"{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.",
|
\${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
||||||
},
|
},
|
||||||
3: {
|
3: {
|
||||||
label: "Wander aimlessly",
|
label: "Wander aimlessly",
|
||||||
tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.",
|
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.
|
selected: `You float about in the boat, steering without direction until you finally spot a landmark you remember.
|
||||||
$You and your Pokémon get very fatigued during the whole ordeal.`,
|
$You and your Pokémon are fatigued from the whole ordeal.`,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
outro: "You are back on track."
|
outro: "You are back on track."
|
||||||
|
|
|
@ -1,30 +1,30 @@
|
||||||
export const sleepingSnorlaxDialogue = {
|
export const sleepingSnorlaxDialogue = {
|
||||||
intro: "Wandering aimlessly, you effectively get nowhere.",
|
intro: "Wandering aimlessly through the sea, you've effectively gotten nowhere.",
|
||||||
title: "Lost at sea",
|
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?",
|
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?",
|
query: "What will you do?",
|
||||||
option: {
|
option: {
|
||||||
1: {
|
1: {
|
||||||
label: "{{option1PrimaryName}} can help",
|
label: "{{option1PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option1RequiredMove}}",
|
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",
|
tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on",
|
||||||
selected:
|
selected: `{{option1PrimaryName}} swims ahead, guiding you back on track.
|
||||||
"{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.",
|
\${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
||||||
},
|
},
|
||||||
2: {
|
2: {
|
||||||
label: "{{option2PrimaryName}} can help",
|
label: "{{option2PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option2RequiredMove}}",
|
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",
|
tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with",
|
||||||
selected:
|
selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.
|
||||||
"{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.",
|
\${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
||||||
},
|
},
|
||||||
3: {
|
3: {
|
||||||
label: "Wander aimlessly",
|
label: "Wander aimlessly",
|
||||||
tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.",
|
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.
|
selected: `You float about in the boat, steering without direction until you finally spot a landmark you remember.
|
||||||
$You and your Pokémon get very fatigued during the whole ordeal.`,
|
$You and your Pokémon are fatigued from the whole ordeal.`,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
outro: "You are back on track."
|
outro: "You are back on track."
|
||||||
|
|
|
@ -1,30 +1,30 @@
|
||||||
export const trainingSessionDialogue = {
|
export const trainingSessionDialogue = {
|
||||||
intro: "Wandering aimlessly, you effectively get nowhere.",
|
intro: "Wandering aimlessly through the sea, you've effectively gotten nowhere.",
|
||||||
title: "Lost at sea",
|
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?",
|
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?",
|
query: "What will you do?",
|
||||||
option: {
|
option: {
|
||||||
1: {
|
1: {
|
||||||
label: "{{option1PrimaryName}} can help",
|
label: "{{option1PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option1RequiredMove}}",
|
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",
|
tooltip_disabled: "You have no Pokémon to {{option1RequiredMove}} on",
|
||||||
selected:
|
selected: `{{option1PrimaryName}} swims ahead, guiding you back on track.
|
||||||
"{{option1PrimaryName}} swims ahead, guiding you back on track.\n{{option1PrimaryName}} seems to also have gotten stronger in this time of need.",
|
\${{option1PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
||||||
},
|
},
|
||||||
2: {
|
2: {
|
||||||
label: "{{option2PrimaryName}} can help",
|
label: "{{option2PrimaryName}} can help",
|
||||||
label_disabled: "Can't {{option2RequiredMove}}",
|
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",
|
tooltip_disabled: "You have no Pokémon to {{option2RequiredMove}} with",
|
||||||
selected:
|
selected: `{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.
|
||||||
"{{option2PrimaryName}} flies ahead of your boat, guiding you back on track.\n{{option2PrimaryName}} seems to also have gotten stronger in this time of need.",
|
\${{option2PrimaryName}} seems to also have gotten stronger in this time of need!`,
|
||||||
},
|
},
|
||||||
3: {
|
3: {
|
||||||
label: "Wander aimlessly",
|
label: "Wander aimlessly",
|
||||||
tooltip: "(-) Each of your Pokémon lose {{damagePercentage}}% of their total HP.",
|
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.
|
selected: `You float about in the boat, steering without direction until you finally spot a landmark you remember.
|
||||||
$You and your Pokémon get very fatigued during the whole ordeal.`,
|
$You and your Pokémon are fatigued from the whole ordeal.`,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
outro: "You are back on track."
|
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
|
// 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_TIER_OVERRIDE: MysteryEncounterTier = null;
|
||||||
export const MYSTERY_ENCOUNTER_OVERRIDE: MysteryEncounterType = null;
|
export const MYSTERY_ENCOUNTER_OVERRIDE: MysteryEncounterType = MysteryEncounterType.SLEEPING_SNORLAX;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MODIFIER / ITEM OVERRIDES
|
* MODIFIER / ITEM OVERRIDES
|
||||||
|
|
|
@ -66,7 +66,7 @@ import { PlayerGender } from "#enums/player-gender";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
import { TrainerType } from "#enums/trainer-type";
|
import { TrainerType } from "#enums/trainer-type";
|
||||||
import { MysteryEncounterVariant } from "#app/data/mystery-encounters/mystery-encounter";
|
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 { 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 ModifierSelectUiHandler, { SHOP_OPTIONS_ROW_LIMIT } from "#app/ui/modifier-select-ui-handler";
|
||||||
import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
|
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 * as Utils from "../utils";
|
||||||
import { isNullOrUndefined } from "../utils";
|
import { isNullOrUndefined } from "../utils";
|
||||||
import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
|
import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
|
||||||
|
import { BattlerTagLapseType } from "#app/data/battler-tags";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Will handle (in order):
|
* 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):
|
* Will handle (in order):
|
||||||
* - Setting BGM
|
* - Setting BGM
|
|
@ -1,6 +1,6 @@
|
||||||
import { Button } from "#app/enums/buttons";
|
import { Button } from "#app/enums/buttons";
|
||||||
import { MessagePhase, VictoryPhase } from "#app/phases";
|
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 MysteryEncounterUiHandler from "#app/ui/mystery-encounter-ui-handler";
|
||||||
import { Mode } from "#app/ui/ui";
|
import { Mode } from "#app/ui/ui";
|
||||||
import GameManager from "../utils/gameManager";
|
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 { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
import { runSelectMysteryEncounterOption } from "../encounterTestUtils";
|
import { runSelectMysteryEncounterOption } from "../encounterTestUtils";
|
||||||
|
|
||||||
const namepsace = "mysteryEncounter:lostAtSeaDialogue";
|
const namespace = "mysteryEncounter:lostAtSeaDialogue";
|
||||||
/** Blastoise for surf. Pidgeot for fly. Abra for none. */
|
/** Blastoise for surf. Pidgeot for fly. Abra for none. */
|
||||||
const defaultParty = [Species.BLASTOISE, Species.PIDGEOT, Species.ABRA];
|
const defaultParty = [Species.BLASTOISE, Species.PIDGEOT, Species.ABRA];
|
||||||
const defaultBiome = Biome.SEA;
|
const defaultBiome = Biome.SEA;
|
||||||
|
@ -49,10 +49,10 @@ describe("Lost at Sea - Mystery Encounter", () => {
|
||||||
|
|
||||||
expect(LostAtSeaEncounter.encounterType).toBe(MysteryEncounterType.LOST_AT_SEA);
|
expect(LostAtSeaEncounter.encounterType).toBe(MysteryEncounterType.LOST_AT_SEA);
|
||||||
expect(LostAtSeaEncounter.dialogue).toBeDefined();
|
expect(LostAtSeaEncounter.dialogue).toBeDefined();
|
||||||
expect(LostAtSeaEncounter.dialogue.intro).toStrictEqual([{ text: `${namepsace}:intro` }]);
|
expect(LostAtSeaEncounter.dialogue.intro).toStrictEqual([{ text: `${namespace}:intro` }]);
|
||||||
expect(LostAtSeaEncounter.dialogue.encounterOptionsDialogue.title).toBe(`${namepsace}:title`);
|
expect(LostAtSeaEncounter.dialogue.encounterOptionsDialogue.title).toBe(`${namespace}:title`);
|
||||||
expect(LostAtSeaEncounter.dialogue.encounterOptionsDialogue.description).toBe(`${namepsace}:description`);
|
expect(LostAtSeaEncounter.dialogue.encounterOptionsDialogue.description).toBe(`${namespace}:description`);
|
||||||
expect(LostAtSeaEncounter.dialogue.encounterOptionsDialogue.query).toBe(`${namepsace}:query`);
|
expect(LostAtSeaEncounter.dialogue.encounterOptionsDialogue.query).toBe(`${namespace}:query`);
|
||||||
expect(LostAtSeaEncounter.options.length).toBe(3);
|
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.optionMode).toBe(EncounterOptionMode.DISABLED_OR_DEFAULT);
|
||||||
expect(option1.dialogue).toBeDefined();
|
expect(option1.dialogue).toBeDefined();
|
||||||
expect(option1.dialogue).toStrictEqual({
|
expect(option1.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namepsace}:option:1:label`,
|
buttonLabel: `${namespace}:option:1:label`,
|
||||||
disabledButtonLabel: `${namepsace}:option:1:label_disabled`,
|
disabledButtonLabel: `${namespace}:option:1:label_disabled`,
|
||||||
buttonTooltip: `${namepsace}:option:1:tooltip`,
|
buttonTooltip: `${namespace}:option:1:tooltip`,
|
||||||
disabledButtonTooltip: `${namepsace}:option:1:tooltip_disabled`,
|
disabledButtonTooltip: `${namespace}:option:1:tooltip_disabled`,
|
||||||
selected: [
|
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.optionMode).toBe(EncounterOptionMode.DISABLED_OR_DEFAULT);
|
||||||
expect(option2.dialogue).toBeDefined();
|
expect(option2.dialogue).toBeDefined();
|
||||||
expect(option2.dialogue).toStrictEqual({
|
expect(option2.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namepsace}:option:2:label`,
|
buttonLabel: `${namespace}:option:2:label`,
|
||||||
disabledButtonLabel: `${namepsace}:option:2:label_disabled`,
|
disabledButtonLabel: `${namespace}:option:2:label_disabled`,
|
||||||
buttonTooltip: `${namepsace}:option:2:tooltip`,
|
buttonTooltip: `${namespace}:option:2:tooltip`,
|
||||||
disabledButtonTooltip: `${namepsace}:option:2:tooltip_disabled`,
|
disabledButtonTooltip: `${namespace}:option:2:tooltip_disabled`,
|
||||||
selected: [
|
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.optionMode).toBe(EncounterOptionMode.DEFAULT);
|
||||||
expect(option3.dialogue).toBeDefined();
|
expect(option3.dialogue).toBeDefined();
|
||||||
expect(option3.dialogue).toStrictEqual({
|
expect(option3.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namepsace}:option:3:label`,
|
buttonLabel: `${namespace}:option:3:label`,
|
||||||
buttonTooltip: `${namepsace}:option:3:tooltip`,
|
buttonTooltip: `${namespace}:option:3:tooltip`,
|
||||||
selected: [
|
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 GameManager from "#app/test/utils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import { Species } from "#enums/species";
|
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";
|
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
|
|
||||||
describe("Mystery Encounters", () => {
|
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 GameManager from "#app/test/utils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import {Species} from "#enums/species";
|
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 {Mode} from "#app/ui/ui";
|
||||||
import {Button} from "#enums/buttons";
|
import {Button} from "#enums/buttons";
|
||||||
import MysteryEncounterUiHandler from "#app/ui/mystery-encounter-ui-handler";
|
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 { BattlerIndex } from "#app/battle.js";
|
||||||
import TargetSelectUiHandler from "#app/ui/target-select-ui-handler.js";
|
import TargetSelectUiHandler from "#app/ui/target-select-ui-handler.js";
|
||||||
import BattleMessageUiHandler from "#app/ui/battle-message-ui-handler";
|
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";
|
import { OverridesHelper } from "./overridesHelper";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -44,7 +44,7 @@ import {
|
||||||
MysteryEncounterPhase,
|
MysteryEncounterPhase,
|
||||||
MysteryEncounterRewardsPhase,
|
MysteryEncounterRewardsPhase,
|
||||||
PostMysteryEncounterPhase
|
PostMysteryEncounterPhase
|
||||||
} from "#app/phases/mystery-encounter-phase";
|
} from "#app/phases/mystery-encounter-phases";
|
||||||
|
|
||||||
export default class PhaseInterceptor {
|
export default class PhaseInterceptor {
|
||||||
public scene;
|
public scene;
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { Mode } from "./ui";
|
||||||
import UiHandler from "./ui-handler";
|
import UiHandler from "./ui-handler";
|
||||||
import { Button } from "#enums/buttons";
|
import { Button } from "#enums/buttons";
|
||||||
import { addWindow, WindowVariant } from "./ui-theme";
|
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 { PartyUiMode } from "./party-ui-handler";
|
||||||
import MysteryEncounterOption, { EncounterOptionMode } from "../data/mystery-encounters/mystery-encounter-option";
|
import MysteryEncounterOption, { EncounterOptionMode } from "../data/mystery-encounters/mystery-encounter-option";
|
||||||
import * as Utils from "../utils";
|
import * as Utils from "../utils";
|
||||||
|
|
Loading…
Reference in New Issue