Merge branch 'main' into 745-localizedTrainerNames_TrainerClasses_And_Titles

This commit is contained in:
Jannik Tappert 2024-05-16 10:50:00 +02:00 committed by GitHub
commit e67c71607c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
21 changed files with 409 additions and 67 deletions

View File

@ -4,6 +4,7 @@ import BattleScene from "../battle-scene";
import { Species } from "./enums/species"; import { Species } from "./enums/species";
import { getPokemonSpecies, speciesStarters } from "./pokemon-species"; import { getPokemonSpecies, speciesStarters } from "./pokemon-species";
import { EggTier } from "./enums/egg-type"; import { EggTier } from "./enums/egg-type";
import i18next from '../plugins/i18n';
export const EGG_SEED = 1073741824; export const EGG_SEED = 1073741824;
@ -56,34 +57,34 @@ export function getEggDescriptor(egg: Egg): string {
return 'Manaphy'; return 'Manaphy';
switch (egg.tier) { switch (egg.tier) {
case EggTier.GREAT: case EggTier.GREAT:
return 'Rare'; return i18next.t('egg:greatTier');
case EggTier.ULTRA: case EggTier.ULTRA:
return 'Epic'; return i18next.t('egg:ultraTier');
case EggTier.MASTER: case EggTier.MASTER:
return 'Legendary'; return i18next.t('egg:masterTier');
default: default:
return 'Common'; return i18next.t('egg:defaultTier');
} }
} }
export function getEggHatchWavesMessage(hatchWaves: integer): string { export function getEggHatchWavesMessage(hatchWaves: integer): string {
if (hatchWaves <= 5) if (hatchWaves <= 5)
return 'Sounds can be heard coming from inside! It will hatch soon!'; return i18next.t('egg:hatchWavesMessageSoon');
if (hatchWaves <= 15) if (hatchWaves <= 15)
return 'It appears to move occasionally. It may be close to hatching.'; return i18next.t('egg:hatchWavesMessageClose');
if (hatchWaves <= 50) if (hatchWaves <= 50)
return 'What will hatch from this? It doesn\'t seem close to hatching.'; return i18next.t('egg:hatchWavesMessageNotClose');
return 'It looks like this Egg will take a long time to hatch.'; return i18next.t('egg:hatchWavesMessageLongTime');
} }
export function getEggGachaTypeDescriptor(scene: BattleScene, egg: Egg): string { export function getEggGachaTypeDescriptor(scene: BattleScene, egg: Egg): string {
switch (egg.gachaType) { switch (egg.gachaType) {
case GachaType.LEGENDARY: case GachaType.LEGENDARY:
return `Legendary Rate Up (${getPokemonSpecies(getLegendaryGachaSpeciesForTimestamp(scene, egg.timestamp)).getName()})`; return `${i18next.t('egg:gachaTypeLegendary')} (${getPokemonSpecies(getLegendaryGachaSpeciesForTimestamp(scene, egg.timestamp)).getName()})`;
case GachaType.MOVE: case GachaType.MOVE:
return 'Rare Egg Move Rate Up'; return i18next.t('egg:gachaTypeMove');
case GachaType.SHINY: case GachaType.SHINY:
return 'Shiny Rate Up'; return i18next.t('egg:gachaTypeShiny');
} }
} }

View File

@ -1,37 +1,45 @@
export const battleCountSplashMessage = '{COUNT} Battles Won!'; import i18next from "../plugins/i18n";
export const splashMessages = Array(10).fill(battleCountSplashMessage); export function getBattleCountSplashMessage(): string {
splashMessages.push(...[ return `{COUNT} ${i18next.t('splashMessages:battlesWon')}`;
'Join the Discord!', }
'Infinite Levels!',
'Everything Stacks!', export function getSplashMessages(): string[] {
'Optional Save Scumming!', const splashMessages = Array(10).fill(getBattleCountSplashMessage());
'35 Biomes!', splashMessages.push(...[
'Open Source!', i18next.t('splashMessages:joinTheDiscord'),
'Play with 5x Speed!', i18next.t('splashMessages:infiniteLevel'),
'Live Bug Testing!', i18next.t('splashMessages:everythingStacks'),
'Heavy RoR2 Influence!', i18next.t('splashMessages:optionalSaveScumming'),
'Pokémon Risk and Pokémon Rain!', i18next.t('splashMessages:biomes'),
'Now with 33% More Salt!', i18next.t('splashMessages:openSource'),
'Infinite Fusion at Home!', i18next.t('splashMessages:playWith5xSpeed'),
'Broken Egg Moves!', i18next.t('splashMessages:liveBugTesting'),
'Magnificent!', i18next.t('splashMessages:heavyRoR2Influence'),
'Mubstitute!', i18next.t('splashMessages:pokemonRiskAndPokemonRain'),
'That\'s Crazy!', i18next.t('splashMessages:nowWithMoreSalt'),
'Orance Juice!', i18next.t('splashMessages:infiniteFusionAtHome'),
'Questionable Balancing!', i18next.t('splashMessages:brokenEggMoves'),
'Cool Shaders!', i18next.t('splashMessages:magnificent'),
'AI-Free!', i18next.t('splashMessages:mubstitute'),
'Sudden Difficulty Spikes!', i18next.t('splashMessages:thatsCrazy'),
'Based on an Unfinished Flash Game!', i18next.t('splashMessages:oranceJuice'),
'More Addictive than Intended!', i18next.t('splashMessages:questionableBalancing'),
'Mostly Consistent Seeds!', i18next.t('splashMessages:coolShaders'),
'Achievement Points Don\'t Do Anything!', i18next.t('splashMessages:aiFree'),
'You Do Not Start at Level 2000!', i18next.t('splashMessages:suddenDifficultySpikes'),
'Don\'t Talk About the Manaphy Egg Incident!', i18next.t('splashMessages:basedOnAnUnfinishedFlashGame'),
'Also Try Pokéngine!', i18next.t('splashMessages:moreAddictiveThanIntended'),
'Also Try Emerald Rogue!', i18next.t('splashMessages:mostlyConsistentSeeds'),
'Also Try Radical Red!', i18next.t('splashMessages:achievementPointsDontDoAnything'),
'Eevee Expo!', i18next.t('splashMessages:youDoNotStartAtLevel'),
'YNOproject!' i18next.t('splashMessages:dontTalkAboutTheManaphyEggIncident'),
]); i18next.t('splashMessages:alsoTryPokengine'),
i18next.t('splashMessages:alsoTryEmeraldRogue'),
i18next.t('splashMessages:alsoTryRadicalRed'),
i18next.t('splashMessages:eeveeExpo'),
i18next.t('splashMessages:ynoproject'),
]);
return splashMessages
}

View File

@ -2,6 +2,7 @@ import { ability } from "./ability";
import { abilityTriggers } from "./ability-trigger"; import { abilityTriggers } from "./ability-trigger";
import { battle } from "./battle"; import { battle } from "./battle";
import { commandUiHandler } from "./command-ui-handler"; import { commandUiHandler } from "./command-ui-handler";
import { egg } from "./egg";
import { fightUiHandler } from "./fight-ui-handler"; import { fightUiHandler } from "./fight-ui-handler";
import { growth } from "./growth"; import { growth } from "./growth";
import { menu } from "./menu"; import { menu } from "./menu";
@ -15,6 +16,7 @@ import { pokemonStat } from "./pokemon-stat";
import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { titles,trainerClasses,trainerNames } from "./trainers"; import { titles,trainerClasses,trainerNames } from "./trainers";
import { splashMessages } from "./splash-messages"
export const deConfig = { export const deConfig = {
@ -22,6 +24,7 @@ export const deConfig = {
abilityTriggers: abilityTriggers, abilityTriggers: abilityTriggers,
battle: battle, battle: battle,
commandUiHandler: commandUiHandler, commandUiHandler: commandUiHandler,
egg: egg,
fightUiHandler: fightUiHandler, fightUiHandler: fightUiHandler,
menuUiHandler: menuUiHandler, menuUiHandler: menuUiHandler,
menu: menu, menu: menu,
@ -34,6 +37,7 @@ export const deConfig = {
trainerClasses: trainerClasses, trainerClasses: trainerClasses,
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
splashMessages: splashMessages,
nature: nature, nature: nature,
growth: growth, growth: growth,
modifierType: modifierType, modifierType: modifierType,

21
src/locales/de/egg.ts Normal file
View File

@ -0,0 +1,21 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const egg: SimpleTranslationEntries = {
"egg": "Egg",
"greatTier": "Rare",
"ultraTier": "Epic",
"masterTier": "Legendary",
"defaultTier": "Common",
"hatchWavesMessageSoon": "Sounds can be heard coming from inside! It will hatch soon!",
"hatchWavesMessageClose": "It appears to move occasionally. It may be close to hatching.",
"hatchWavesMessageNotClose": "What will hatch from this? It doesn't seem close to hatching.",
"hatchWavesMessageLongTime": "It looks like this Egg will take a long time to hatch.",
"gachaTypeLegendary": "Legendary Rate Up",
"gachaTypeMove": "Rare Egg Move Rate Up",
"gachaTypeShiny": "Shiny Rate Up",
"selectMachine": "Select a machine.",
"notEnoughVouchers": "You don't have enough vouchers!",
"tooManyEggs": "You have too many eggs!",
"pull": "Pull",
"pulls": "Pulls"
} as const;

View File

@ -0,0 +1,37 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const splashMessages: SimpleTranslationEntries = {
"battlesWon": "Battles Won!",
"joinTheDiscord": "Join the Discord!",
"infiniteLevels": "Infinite Levels!",
"everythingStacks": "Everything Stacks!",
"optionalSaveScumming": "Optional Save Scumming!",
"biomes": "35 Biomes!",
"openSource": "Open Source!",
"playWithSpeed": "Play with 5x Speed!",
"liveBugTesting": "Live Bug Testing!",
"heavyInfluence": "Heavy RoR2 Influence!",
"pokemonRiskAndPokemonRain": "Pokémon Risk and Pokémon Rain!",
"nowWithMoreSalt": "Now with 33% More Salt!",
"infiniteFusionAtHome": "Infinite Fusion at Home!",
"brokenEggMoves": "Broken Egg Moves!",
"magnificent": "Magnificent!",
"mubstitute": "Mubstitute!",
"thatsCrazy": "That\'s Crazy!",
"oranceJuice": "Orance Juice!",
"questionableBalancing": "Questionable Balancing!",
"coolShaders": "Cool Shaders!",
"aiFree": "AI-Free!",
"suddenDifficultySpikes": "Sudden Difficulty Spikes!",
"basedOnAnUnfinishedFlashGame": "Based on an Unfinished Flash Game!",
"moreAddictiveThanIntended": "More Addictive than Intended!",
"mostlyConsistentSeeds": "Mostly Consistent Seeds!",
"achievementPointsDontDoAnything": "Achievement Points Don\'t Do Anything!",
"youDoNotStartAtLevel": "You Do Not Start at Level 2000!",
"dontTalkAboutTheManaphyEggIncident": "Don\'t Talk About the Manaphy Egg Incident!",
"alsoTryPokengine": "Also Try Pokéngine!",
"alsoTryEmeraldRogue": "Also Try Emerald Rogue!",
"alsoTryRadicalRed": "Also Try Radical Red!",
"eeveeExpo": "Eevee Expo!",
"ynoproject": "YNOproject!",
} as const;

View File

@ -2,6 +2,7 @@ import { ability } from "./ability";
import { abilityTriggers } from "./ability-trigger"; import { abilityTriggers } from "./ability-trigger";
import { battle } from "./battle"; import { battle } from "./battle";
import { commandUiHandler } from "./command-ui-handler"; import { commandUiHandler } from "./command-ui-handler";
import { egg } from "./egg";
import { fightUiHandler } from "./fight-ui-handler"; import { fightUiHandler } from "./fight-ui-handler";
import { growth } from "./growth"; import { growth } from "./growth";
import { menu } from "./menu"; import { menu } from "./menu";
@ -15,6 +16,7 @@ import { pokemonStat } from "./pokemon-stat";
import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { titles,trainerClasses,trainerNames } from "./trainers"; import { titles,trainerClasses,trainerNames } from "./trainers";
import { splashMessages } from "./splash-messages"
import { weather } from "./weather"; import { weather } from "./weather";
@ -23,6 +25,7 @@ export const enConfig = {
abilityTriggers: abilityTriggers, abilityTriggers: abilityTriggers,
battle: battle, battle: battle,
commandUiHandler: commandUiHandler, commandUiHandler: commandUiHandler,
egg: egg,
fightUiHandler: fightUiHandler, fightUiHandler: fightUiHandler,
menuUiHandler: menuUiHandler, menuUiHandler: menuUiHandler,
menu: menu, menu: menu,
@ -35,6 +38,7 @@ export const enConfig = {
trainerClasses: trainerClasses, trainerClasses: trainerClasses,
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
splashMessages: splashMessages,
nature: nature, nature: nature,
growth: growth, growth: growth,
weather: weather, weather: weather,

21
src/locales/en/egg.ts Normal file
View File

@ -0,0 +1,21 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const egg: SimpleTranslationEntries = {
"egg": "Egg",
"greatTier": "Rare",
"ultraTier": "Epic",
"masterTier": "Legendary",
"defaultTier": "Common",
"hatchWavesMessageSoon": "Sounds can be heard coming from inside! It will hatch soon!",
"hatchWavesMessageClose": "It appears to move occasionally. It may be close to hatching.",
"hatchWavesMessageNotClose": "What will hatch from this? It doesn't seem close to hatching.",
"hatchWavesMessageLongTime": "It looks like this Egg will take a long time to hatch.",
"gachaTypeLegendary": "Legendary Rate Up",
"gachaTypeMove": "Rare Egg Move Rate Up",
"gachaTypeShiny": "Shiny Rate Up",
"selectMachine": "Select a machine.",
"notEnoughVouchers": "You don't have enough vouchers!",
"tooManyEggs": "You have too many eggs!",
"pull": "Pull",
"pulls": "Pulls"
} as const;

View File

@ -0,0 +1,37 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const splashMessages: SimpleTranslationEntries = {
"battlesWon": "Battles Won!",
"joinTheDiscord": "Join the Discord!",
"infiniteLevels": "Infinite Levels!",
"everythingStacks": "Everything Stacks!",
"optionalSaveScumming": "Optional Save Scumming!",
"biomes": "35 Biomes!",
"openSource": "Open Source!",
"playWithSpeed": "Play with 5x Speed!",
"liveBugTesting": "Live Bug Testing!",
"heavyInfluence": "Heavy RoR2 Influence!",
"pokemonRiskAndPokemonRain": "Pokémon Risk and Pokémon Rain!",
"nowWithMoreSalt": "Now with 33% More Salt!",
"infiniteFusionAtHome": "Infinite Fusion at Home!",
"brokenEggMoves": "Broken Egg Moves!",
"magnificent": "Magnificent!",
"mubstitute": "Mubstitute!",
"thatsCrazy": "That\'s Crazy!",
"oranceJuice": "Orance Juice!",
"questionableBalancing": "Questionable Balancing!",
"coolShaders": "Cool Shaders!",
"aiFree": "AI-Free!",
"suddenDifficultySpikes": "Sudden Difficulty Spikes!",
"basedOnAnUnfinishedFlashGame": "Based on an Unfinished Flash Game!",
"moreAddictiveThanIntended": "More Addictive than Intended!",
"mostlyConsistentSeeds": "Mostly Consistent Seeds!",
"achievementPointsDontDoAnything": "Achievement Points Don\'t Do Anything!",
"youDoNotStartAtLevel": "You Do Not Start at Level 2000!",
"dontTalkAboutTheManaphyEggIncident": "Don\'t Talk About the Manaphy Egg Incident!",
"alsoTryPokengine": "Also Try Pokéngine!",
"alsoTryEmeraldRogue": "Also Try Emerald Rogue!",
"alsoTryRadicalRed": "Also Try Radical Red!",
"eeveeExpo": "Eevee Expo!",
"ynoproject": "YNOproject!",
} as const;

View File

@ -2,6 +2,7 @@ import { ability } from "./ability";
import { abilityTriggers } from "./ability-trigger"; import { abilityTriggers } from "./ability-trigger";
import { battle } from "./battle"; import { battle } from "./battle";
import { commandUiHandler } from "./command-ui-handler"; import { commandUiHandler } from "./command-ui-handler";
import { egg } from "./egg";
import { fightUiHandler } from "./fight-ui-handler"; import { fightUiHandler } from "./fight-ui-handler";
import { growth } from "./growth"; import { growth } from "./growth";
import { menu } from "./menu"; import { menu } from "./menu";
@ -15,6 +16,7 @@ import { pokemonStat } from "./pokemon-stat";
import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { titles,trainerClasses,trainerNames } from "./trainers"; import { titles,trainerClasses,trainerNames } from "./trainers";
import { splashMessages } from "./splash-messages"
import { weather } from "./weather"; import { weather } from "./weather";
@ -23,6 +25,7 @@ export const esConfig = {
abilityTriggers: abilityTriggers, abilityTriggers: abilityTriggers,
battle: battle, battle: battle,
commandUiHandler: commandUiHandler, commandUiHandler: commandUiHandler,
egg: egg,
fightUiHandler: fightUiHandler, fightUiHandler: fightUiHandler,
menuUiHandler: menuUiHandler, menuUiHandler: menuUiHandler,
menu: menu, menu: menu,
@ -35,6 +38,7 @@ export const esConfig = {
trainerClasses: trainerClasses, trainerClasses: trainerClasses,
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
splashMessages: splashMessages,
nature: nature, nature: nature,
growth: growth, growth: growth,
weather: weather, weather: weather,

21
src/locales/es/egg.ts Normal file
View File

@ -0,0 +1,21 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const egg: SimpleTranslationEntries = {
"egg": "Egg",
"greatTier": "Rare",
"ultraTier": "Epic",
"masterTier": "Legendary",
"defaultTier": "Common",
"hatchWavesMessageSoon": "Sounds can be heard coming from inside! It will hatch soon!",
"hatchWavesMessageClose": "It appears to move occasionally. It may be close to hatching.",
"hatchWavesMessageNotClose": "What will hatch from this? It doesn't seem close to hatching.",
"hatchWavesMessageLongTime": "It looks like this Egg will take a long time to hatch.",
"gachaTypeLegendary": "Legendary Rate Up",
"gachaTypeMove": "Rare Egg Move Rate Up",
"gachaTypeShiny": "Shiny Rate Up",
"selectMachine": "Select a machine.",
"notEnoughVouchers": "You don't have enough vouchers!",
"tooManyEggs": "You have too many eggs!",
"pull": "Pull",
"pulls": "Pulls"
} as const;

View File

@ -0,0 +1,37 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const splashMessages: SimpleTranslationEntries = {
"battlesWon": "Battles Won!",
"joinTheDiscord": "Join the Discord!",
"infiniteLevels": "Infinite Levels!",
"everythingStacks": "Everything Stacks!",
"optionalSaveScumming": "Optional Save Scumming!",
"biomes": "35 Biomes!",
"openSource": "Open Source!",
"playWithSpeed": "Play with 5x Speed!",
"liveBugTesting": "Live Bug Testing!",
"heavyInfluence": "Heavy RoR2 Influence!",
"pokemonRiskAndPokemonRain": "Pokémon Risk and Pokémon Rain!",
"nowWithMoreSalt": "Now with 33% More Salt!",
"infiniteFusionAtHome": "Infinite Fusion at Home!",
"brokenEggMoves": "Broken Egg Moves!",
"magnificent": "Magnificent!",
"mubstitute": "Mubstitute!",
"thatsCrazy": "That\'s Crazy!",
"oranceJuice": "Orance Juice!",
"questionableBalancing": "Questionable Balancing!",
"coolShaders": "Cool Shaders!",
"aiFree": "AI-Free!",
"suddenDifficultySpikes": "Sudden Difficulty Spikes!",
"basedOnAnUnfinishedFlashGame": "Based on an Unfinished Flash Game!",
"moreAddictiveThanIntended": "More Addictive than Intended!",
"mostlyConsistentSeeds": "Mostly Consistent Seeds!",
"achievementPointsDontDoAnything": "Achievement Points Don\'t Do Anything!",
"youDoNotStartAtLevel": "You Do Not Start at Level 2000!",
"dontTalkAboutTheManaphyEggIncident": "Don\'t Talk About the Manaphy Egg Incident!",
"alsoTryPokengine": "Also Try Pokéngine!",
"alsoTryEmeraldRogue": "Also Try Emerald Rogue!",
"alsoTryRadicalRed": "Also Try Radical Red!",
"eeveeExpo": "Eevee Expo!",
"ynoproject": "YNOproject!",
} as const;

View File

@ -2,6 +2,7 @@ import { ability } from "./ability";
import { abilityTriggers } from "./ability-trigger"; import { abilityTriggers } from "./ability-trigger";
import { battle } from "./battle"; import { battle } from "./battle";
import { commandUiHandler } from "./command-ui-handler"; import { commandUiHandler } from "./command-ui-handler";
import { egg } from "./egg";
import { fightUiHandler } from "./fight-ui-handler"; import { fightUiHandler } from "./fight-ui-handler";
import { growth } from "./growth"; import { growth } from "./growth";
import { menu } from "./menu"; import { menu } from "./menu";
@ -15,6 +16,7 @@ import { pokemonStat } from "./pokemon-stat";
import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { titles,trainerClasses,trainerNames } from "./trainers"; import { titles,trainerClasses,trainerNames } from "./trainers";
import { splashMessages } from "./splash-messages"
import { weather } from "./weather"; import { weather } from "./weather";
@ -24,6 +26,7 @@ export const frConfig = {
abilityTriggers: abilityTriggers, abilityTriggers: abilityTriggers,
battle: battle, battle: battle,
commandUiHandler: commandUiHandler, commandUiHandler: commandUiHandler,
egg: egg,
fightUiHandler: fightUiHandler, fightUiHandler: fightUiHandler,
menuUiHandler: menuUiHandler, menuUiHandler: menuUiHandler,
menu: menu, menu: menu,
@ -36,6 +39,7 @@ export const frConfig = {
trainerClasses: trainerClasses, trainerClasses: trainerClasses,
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
splashMessages: splashMessages,
nature: nature, nature: nature,
growth: growth, growth: growth,
weather: weather, weather: weather,

21
src/locales/fr/egg.ts Normal file
View File

@ -0,0 +1,21 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const egg: SimpleTranslationEntries = {
"egg": "Œuf",
"greatTier": "Rare",
"ultraTier": "Épique",
"masterTier": "Légendaire",
"defaultTier": "Commun",
"hatchWavesMessageSoon": "Il fait du bruit. Il va éclore !",
"hatchWavesMessageClose": "Il bouge de temps en temps. Il devrait bientôt éclore.",
"hatchWavesMessageNotClose": "Quest-ce qui va en sortir ? Ça va mettre du temps.",
"hatchWavesMessageLongTime": "Cet Œuf va sûrement mettre du temps à éclore.",
"gachaTypeLegendary": "Taux de Légendaires élevé",
"gachaTypeMove": "Taux de Capacité Œuf Rare élevé",
"gachaTypeShiny": "Taux de Chromatiques élevé",
"selectMachine": "Sélectionnez une machine.",
"notEnoughVouchers": "Vous navez pas assez de coupons !",
"tooManyEggs": "Vous avez trop dŒufs !",
"pull": "Tirage",
"pulls": "Tirages"
} as const;

View File

@ -0,0 +1,37 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const splashMessages: SimpleTranslationEntries = {
"battlesWon": "Battles Won!",
"joinTheDiscord": "Join the Discord!",
"infiniteLevels": "Infinite Levels!",
"everythingStacks": "Everything Stacks!",
"optionalSaveScumming": "Optional Save Scumming!",
"biomes": "35 Biomes!",
"openSource": "Open Source!",
"playWithSpeed": "Play with 5x Speed!",
"liveBugTesting": "Live Bug Testing!",
"heavyInfluence": "Heavy RoR2 Influence!",
"pokemonRiskAndPokemonRain": "Pokémon Risk and Pokémon Rain!",
"nowWithMoreSalt": "Now with 33% More Salt!",
"infiniteFusionAtHome": "Infinite Fusion at Home!",
"brokenEggMoves": "Broken Egg Moves!",
"magnificent": "Magnificent!",
"mubstitute": "Mubstitute!",
"thatsCrazy": "That\'s Crazy!",
"oranceJuice": "Orance Juice!",
"questionableBalancing": "Questionable Balancing!",
"coolShaders": "Cool Shaders!",
"aiFree": "AI-Free!",
"suddenDifficultySpikes": "Sudden Difficulty Spikes!",
"basedOnAnUnfinishedFlashGame": "Based on an Unfinished Flash Game!",
"moreAddictiveThanIntended": "More Addictive than Intended!",
"mostlyConsistentSeeds": "Mostly Consistent Seeds!",
"achievementPointsDontDoAnything": "Achievement Points Don\'t Do Anything!",
"youDoNotStartAtLevel": "You Do Not Start at Level 2000!",
"dontTalkAboutTheManaphyEggIncident": "Don\'t Talk About the Manaphy Egg Incident!",
"alsoTryPokengine": "Also Try Pokéngine!",
"alsoTryEmeraldRogue": "Also Try Emerald Rogue!",
"alsoTryRadicalRed": "Also Try Radical Red!",
"eeveeExpo": "Eevee Expo!",
"ynoproject": "YNOproject!",
} as const;

View File

@ -2,6 +2,7 @@ import { ability } from "./ability";
import { abilityTriggers } from "./ability-trigger"; import { abilityTriggers } from "./ability-trigger";
import { battle } from "./battle"; import { battle } from "./battle";
import { commandUiHandler } from "./command-ui-handler"; import { commandUiHandler } from "./command-ui-handler";
import { egg } from "./egg";
import { fightUiHandler } from "./fight-ui-handler"; import { fightUiHandler } from "./fight-ui-handler";
import { growth } from "./growth"; import { growth } from "./growth";
import { menu } from "./menu"; import { menu } from "./menu";
@ -15,6 +16,7 @@ import { pokemonStat } from "./pokemon-stat";
import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { titles,trainerClasses,trainerNames } from "./trainers"; import { titles,trainerClasses,trainerNames } from "./trainers";
import { splashMessages } from "./splash-messages"
import { weather } from "./weather"; import { weather } from "./weather";
@ -23,6 +25,7 @@ export const itConfig = {
abilityTriggers: abilityTriggers, abilityTriggers: abilityTriggers,
battle: battle, battle: battle,
commandUiHandler: commandUiHandler, commandUiHandler: commandUiHandler,
egg: egg,
fightUiHandler: fightUiHandler, fightUiHandler: fightUiHandler,
menuUiHandler: menuUiHandler, menuUiHandler: menuUiHandler,
menu: menu, menu: menu,
@ -35,6 +38,7 @@ export const itConfig = {
trainerClasses: trainerClasses, trainerClasses: trainerClasses,
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
splashMessages: splashMessages,
nature: nature, nature: nature,
growth: growth, growth: growth,
weather: weather, weather: weather,

21
src/locales/it/egg.ts Normal file
View File

@ -0,0 +1,21 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const egg: SimpleTranslationEntries = {
"egg": "Egg",
"greatTier": "Rare",
"ultraTier": "Epic",
"masterTier": "Legendary",
"defaultTier": "Common",
"hatchWavesMessageSoon": "Sounds can be heard coming from inside! It will hatch soon!",
"hatchWavesMessageClose": "It appears to move occasionally. It may be close to hatching.",
"hatchWavesMessageNotClose": "What will hatch from this? It doesn't seem close to hatching.",
"hatchWavesMessageLongTime": "It looks like this Egg will take a long time to hatch.",
"gachaTypeLegendary": "Legendary Rate Up",
"gachaTypeMove": "Rare Egg Move Rate Up",
"gachaTypeShiny": "Shiny Rate Up",
"selectMachine": "Select a machine.",
"notEnoughVouchers": "You don't have enough vouchers!",
"tooManyEggs": "You have too many eggs!",
"pull": "Pull",
"pulls": "Pulls"
} as const;

View File

@ -0,0 +1,37 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const splashMessages: SimpleTranslationEntries = {
"battlesWon": "Battaglie Vinte!",
"joinTheDiscord": "Entra nel Discord!",
"infiniteLevels": "Livelli Infiniti!",
"everythingStacks": "Tutto si impila!",
"optionalSaveScumming": "Salvataggio Facoltativo!",
"biomes": "35 Biomi!",
"openSource": "Open Source!",
"playWithSpeed": "Gioca con il 5x di Velocità!",
"liveBugTesting": "Test dei Bug in Tempo Reale!",
"heavyInfluence": "Influenzato da RoR2!",
"pokemonRiskAndPokemonRain": "Pokémon Risk e Pokémon Rain!",
"nowWithMoreSalt": "Adesso con il 33% di sale in più!",
"infiniteFusionAtHome": "Fusioni Infinite a Casa!",
"brokenEggMoves": "Mosse delle Uova Rotte!",
"magnificent": "Magnifico!",
"mubstitute": "Mubstitute!",
"thatsCrazy": "È Pazzesco!",
"oranceJuice": "Succo d\'Arancia!",
"questionableBalancing": "Bilanciamento Discutibile!",
"coolShaders": "Shader fantastici!",
"aiFree": "Senza Intelligenza Artificiale!",
"suddenDifficultySpikes": "Picchi di Difficoltà Improvvisi!",
"basedOnAnUnfinishedFlashGame": "Basato su un Gioco Flash Incompiuto!",
"moreAddictiveThanIntended": "Crea Dipendeza più del Dovuto!",
"mostlyConsistentSeeds": "Seeds Consistenti!",
"achievementPointsDontDoAnything": "I Punti Obiettivo non Fanno Nulla!",
"youDoNotStartAtLevel": "Non Cominci dal Livello 2000!",
"dontTalkAboutTheManaphyEggIncident": "Non Parlare dell'Incidente dell'Uovo di Manaphy!",
"alsoTryPokengine": "Prova anche Pokéngine!",
"alsoTryEmeraldRogue": "Prova anche Emerald Rogue!",
"alsoTryRadicalRed": "Prova anche Radical Red!",
"eeveeExpo": "Eevee Expo!",
"ynoproject": "YNOproject!",
} as const;

View File

@ -133,8 +133,10 @@ declare module 'i18next' {
trainerNames: SimpleTranslationEntries; trainerNames: SimpleTranslationEntries;
tutorial: SimpleTranslationEntries; tutorial: SimpleTranslationEntries;
starterSelectUiHandler: SimpleTranslationEntries; starterSelectUiHandler: SimpleTranslationEntries;
splashMessages: SimpleTranslationEntries;
nature: SimpleTranslationEntries; nature: SimpleTranslationEntries;
growth: SimpleTranslationEntries; growth: SimpleTranslationEntries;
egg: SimpleTranslationEntries;
weather: SimpleTranslationEntries; weather: SimpleTranslationEntries;
modifierType: ModifierTypeTranslationEntries; modifierType: ModifierTypeTranslationEntries;
}; };

View File

@ -10,8 +10,7 @@ import { addWindow } from "./ui-theme";
import { Tutorial, handleTutorial } from "../tutorial"; import { Tutorial, handleTutorial } from "../tutorial";
import { EggTier } from "../data/enums/egg-type"; import { EggTier } from "../data/enums/egg-type";
import {Button} from "../enums/buttons"; import {Button} from "../enums/buttons";
import i18next from '../plugins/i18n';
const defaultText = 'Select a machine.';
export default class EggGachaUiHandler extends MessageUiHandler { export default class EggGachaUiHandler extends MessageUiHandler {
private eggGachaContainer: Phaser.GameObjects.Container; private eggGachaContainer: Phaser.GameObjects.Container;
@ -33,6 +32,7 @@ export default class EggGachaUiHandler extends MessageUiHandler {
private cursorObj: Phaser.GameObjects.Image; private cursorObj: Phaser.GameObjects.Image;
private transitioning: boolean; private transitioning: boolean;
private transitionCancelled: boolean; private transitionCancelled: boolean;
private defaultText: string;
constructor(scene: BattleScene) { constructor(scene: BattleScene) {
super(scene, Mode.EGG_GACHA); super(scene, Mode.EGG_GACHA);
@ -43,6 +43,7 @@ export default class EggGachaUiHandler extends MessageUiHandler {
this.gachaInfoContainers = []; this.gachaInfoContainers = [];
this.voucherCountLabels = []; this.voucherCountLabels = [];
this.defaultText = i18next.t('egg:selectMachine');
} }
setup() { setup() {
@ -151,8 +152,27 @@ export default class EggGachaUiHandler extends MessageUiHandler {
this.eggGachaOptionSelectBg.setOrigin(1, 1); this.eggGachaOptionSelectBg.setOrigin(1, 1);
this.eggGachaOptionsContainer.add(this.eggGachaOptionSelectBg); this.eggGachaOptionsContainer.add(this.eggGachaOptionSelectBg);
const optionText = addTextObject(this.scene, 0, 0, ' x1 1 Pull\n x10 10 Pulls\n x1 5 Pulls\n x1 10 Pulls\n x1 25 Pulls\nCancel', TextStyle.WINDOW); const pullOptions = [
optionText.setLineSpacing(12); { multiplier: 'x1', description: `1 ${i18next.t('egg:pull')}` },
{ multiplier: 'x10', description: `10 ${i18next.t('egg:pulls')}` },
{ multiplier: 'x1', description: `5 ${i18next.t('egg:pulls')}` },
{ multiplier: 'x1', description: `10 ${i18next.t('egg:pulls')}` },
{ multiplier: 'x1', description: `25 ${i18next.t('egg:pulls')}` }
];
const pullOptionsText = pullOptions.map(option => ` ${option.multiplier.padEnd(4)} ${option.description}`).join('\n');
const optionText = addTextObject(
this.scene,
0,
0,
`${pullOptionsText}\n${i18next.t('menu:cancel')}`,
TextStyle.WINDOW,
);
optionText.setLineSpacing(28);
optionText.setFontSize('80px');
this.eggGachaOptionsContainer.add(optionText); this.eggGachaOptionsContainer.add(optionText);
optionText.setPositionRelative(this.eggGachaOptionSelectBg, 16, 9); optionText.setPositionRelative(this.eggGachaOptionSelectBg, 16, 9);
@ -223,7 +243,7 @@ export default class EggGachaUiHandler extends MessageUiHandler {
show(args: any[]): boolean { show(args: any[]): boolean {
super.show(args); super.show(args);
this.getUi().showText(defaultText, 0); this.getUi().showText(this.defaultText, 0);
this.setGachaCursor(1); this.setGachaCursor(1);
@ -474,7 +494,7 @@ export default class EggGachaUiHandler extends MessageUiHandler {
showText(text: string, delay?: number, callback?: Function, callbackDelay?: number, prompt?: boolean, promptDelay?: number): void { showText(text: string, delay?: number, callback?: Function, callbackDelay?: number, prompt?: boolean, promptDelay?: number): void {
if (!text) if (!text)
text = defaultText; text = this.defaultText;
if (text?.indexOf('\n') === -1) { if (text?.indexOf('\n') === -1) {
this.eggGachaMessageBox.setSize(320, 32); this.eggGachaMessageBox.setSize(320, 32);
@ -490,7 +510,7 @@ export default class EggGachaUiHandler extends MessageUiHandler {
} }
showError(text: string): void { showError(text: string): void {
this.showText(text, null, () => this.showText(defaultText), Utils.fixedInt(1500)); this.showText(text, null, () => this.showText(this.defaultText), Utils.fixedInt(1500));
} }
setTransitioning(transitioning: boolean): void { setTransitioning(transitioning: boolean): void {
@ -526,27 +546,27 @@ export default class EggGachaUiHandler extends MessageUiHandler {
case 0: case 0:
if (!this.scene.gameData.voucherCounts[VoucherType.REGULAR]) { if (!this.scene.gameData.voucherCounts[VoucherType.REGULAR]) {
error = true; error = true;
this.showError('You don\'t have enough vouchers!'); this.showError(i18next.t('egg:notEnoughVouchers'));
} else if (this.scene.gameData.eggs.length < 99) { } else if (this.scene.gameData.eggs.length < 99) {
this.consumeVouchers(VoucherType.REGULAR, 1); this.consumeVouchers(VoucherType.REGULAR, 1);
this.pull(); this.pull();
success = true; success = true;
} else { } else {
error = true; error = true;
this.showError('You have too many eggs!'); this.showError(i18next.t('egg:tooManyEggs'));
} }
break; break;
case 2: case 2:
if (!this.scene.gameData.voucherCounts[VoucherType.PLUS]) { if (!this.scene.gameData.voucherCounts[VoucherType.PLUS]) {
error = true; error = true;
this.showError('You don\'t have enough vouchers!'); this.showError(i18next.t('egg:notEnoughVouchers'));
} else if (this.scene.gameData.eggs.length < 95) { } else if (this.scene.gameData.eggs.length < 95) {
this.consumeVouchers(VoucherType.PLUS, 1); this.consumeVouchers(VoucherType.PLUS, 1);
this.pull(5); this.pull(5);
success = true; success = true;
} else { } else {
error = true; error = true;
this.showError('You have too many eggs!'); this.showError(i18next.t('egg:tooManyEggs'));
} }
break; break;
case 1: case 1:
@ -554,7 +574,7 @@ export default class EggGachaUiHandler extends MessageUiHandler {
if ((this.cursor === 1 && this.scene.gameData.voucherCounts[VoucherType.REGULAR] < 10) if ((this.cursor === 1 && this.scene.gameData.voucherCounts[VoucherType.REGULAR] < 10)
|| (this.cursor === 3 && !this.scene.gameData.voucherCounts[VoucherType.PREMIUM])) { || (this.cursor === 3 && !this.scene.gameData.voucherCounts[VoucherType.PREMIUM])) {
error = true; error = true;
this.showError('You don\'t have enough vouchers!'); this.showError(i18next.t('egg:notEnoughVouchers'));
} else if (this.scene.gameData.eggs.length < 90) { } else if (this.scene.gameData.eggs.length < 90) {
if (this.cursor === 3) if (this.cursor === 3)
this.consumeVouchers(VoucherType.PREMIUM, 1); this.consumeVouchers(VoucherType.PREMIUM, 1);
@ -564,20 +584,20 @@ export default class EggGachaUiHandler extends MessageUiHandler {
success = true; success = true;
} else { } else {
error = true; error = true;
this.showError('You have too many eggs!'); this.showError(i18next.t('egg:tooManyEggs'));
} }
break; break;
case 4: case 4:
if (!this.scene.gameData.voucherCounts[VoucherType.GOLDEN]) { if (!this.scene.gameData.voucherCounts[VoucherType.GOLDEN]) {
error = true; error = true;
this.showError('You don\'t have enough vouchers!'); this.showError(i18next.t('egg:notEnoughVouchers'));
} else if (this.scene.gameData.eggs.length < 75) { } else if (this.scene.gameData.eggs.length < 75) {
this.consumeVouchers(VoucherType.GOLDEN, 1); this.consumeVouchers(VoucherType.GOLDEN, 1);
this.pull(25); this.pull(25);
success = true; success = true;
} else { } else {
error = true; error = true;
this.showError('You have too many eggs!'); this.showError(i18next.t('egg:tooManyEggs'));
} }
break; break;
case 5: case 5:

View File

@ -7,6 +7,7 @@ import { EGG_SEED, Egg, GachaType, getEggGachaTypeDescriptor, getEggHatchWavesMe
import * as Utils from "../utils"; import * as Utils from "../utils";
import { addWindow } from "./ui-theme"; import { addWindow } from "./ui-theme";
import {Button} from "../enums/buttons"; import {Button} from "../enums/buttons";
import i18next from '../plugins/i18n';
export default class EggListUiHandler extends MessageUiHandler { export default class EggListUiHandler extends MessageUiHandler {
private eggListContainer: Phaser.GameObjects.Container; private eggListContainer: Phaser.GameObjects.Container;
@ -165,7 +166,7 @@ export default class EggListUiHandler extends MessageUiHandler {
setEggDetails(egg: Egg): void { setEggDetails(egg: Egg): void {
this.eggSprite.setFrame(`egg_${egg.getKey()}`); this.eggSprite.setFrame(`egg_${egg.getKey()}`);
this.eggNameText.setText(`Egg (${getEggDescriptor(egg)})`); this.eggNameText.setText(`${i18next.t('egg:egg')} (${getEggDescriptor(egg)})`);
this.eggDateText.setText( this.eggDateText.setText(
new Date(egg.timestamp).toLocaleString(undefined, { new Date(egg.timestamp).toLocaleString(undefined, {
weekday: 'short', weekday: 'short',

View File

@ -4,7 +4,7 @@ import OptionSelectUiHandler from "./option-select-ui-handler";
import { Mode } from "./ui"; import { Mode } from "./ui";
import * as Utils from "../utils"; import * as Utils from "../utils";
import { TextStyle, addTextObject } from "./text"; import { TextStyle, addTextObject } from "./text";
import { battleCountSplashMessage, splashMessages } from "../data/splash-messages"; import { getBattleCountSplashMessage, getSplashMessages } from "../data/splash-messages";
import i18next from "i18next"; import i18next from "i18next";
export default class TitleUiHandler extends OptionSelectUiHandler { export default class TitleUiHandler extends OptionSelectUiHandler {
@ -63,8 +63,8 @@ export default class TitleUiHandler extends OptionSelectUiHandler {
.then(request => request.json()) .then(request => request.json())
.then(stats => { .then(stats => {
this.playerCountLabel.setText(`${stats.playerCount} ${i18next.t("menu:playersOnline")}`); this.playerCountLabel.setText(`${stats.playerCount} ${i18next.t("menu:playersOnline")}`);
if (this.splashMessage === battleCountSplashMessage) if (this.splashMessage === getBattleCountSplashMessage())
this.splashMessageText.setText(battleCountSplashMessage.replace('{COUNT}', stats.battleCount.toLocaleString('en-US'))); this.splashMessageText.setText(getBattleCountSplashMessage().replace('{COUNT}', stats.battleCount.toLocaleString('en-US')));
}) })
.catch(err => { .catch(err => {
console.error("Failed to fetch title stats:\n", err); console.error("Failed to fetch title stats:\n", err);
@ -75,7 +75,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler {
const ret = super.show(args); const ret = super.show(args);
if (ret) { if (ret) {
this.splashMessage = Utils.randItem(splashMessages); this.splashMessage = Utils.randItem(getSplashMessages());
this.splashMessageText.setText(this.splashMessage.replace('{COUNT}', '?')); this.splashMessageText.setText(this.splashMessage.replace('{COUNT}', '?'));
const ui = this.getUi(); const ui = this.getUi();