From 8b34370639fe19b45cf350d5137b1b9ac7338125 Mon Sep 17 00:00:00 2001 From: AJ Fontaine Date: Wed, 18 Dec 2024 23:30:56 -0500 Subject: [PATCH 1/8] Event stuff --- .../encounters/delibirdy-encounter.ts | 32 ++++++++++++++++++- .../encounters/uncommon-breed-encounter.ts | 12 +++++-- src/timed-event-manager.ts | 30 ++++++++++++++++- 3 files changed, 70 insertions(+), 4 deletions(-) diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index a3a97a01238..e2139314532 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -13,6 +13,7 @@ import { modifierTypes, PokemonHeldItemModifierType } from "#app/modifier/modifi import { ModifierRewardPhase } from "#app/phases/modifier-reward-phase"; import i18next from "#app/plugins/i18n"; import { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; +import { randSeedItem } from "#app/utils"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; @@ -35,6 +36,27 @@ const OPTION_3_DISALLOWED_MODIFIERS = [ const DELIBIRDY_MONEY_PRICE_MULTIPLIER = 2; +const doEventReward = (scene: BattleScene) => { + const event_buff = scene.eventManager.activeEvent()?.delibirdyBuff ?? []; + if (event_buff.length > 0) { + const candidates = event_buff.filter((c => { + const mtype = generateModifierType(scene, modifierTypes[c]); + const existingCharm = scene.findModifier(m => m.type.id === mtype?.id); + return !(existingCharm && existingCharm.getStackCount() >= existingCharm.getMaxStackCount(scene)); + })); + if (candidates.length > 0) { + scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes[randSeedItem(candidates)])); + } + // else { + // // At max stacks, give the first party pokemon a Soothe Bell instead + // const sootheBell = generateModifierType(scene, modifierTypes.SOOTHE_BELL) as PokemonHeldItemModifierType; + // await applyModifierTypeToPlayerPokemon(scene, scene.getPlayerPokemon()!, sootheBell); + // scene.playSound("item_fanfare"); + // await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: sootheBell.name }), null, undefined, true); + // } + } +}; + /** * Delibird-y encounter. * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3804 | GitHub Issue #3804} @@ -42,7 +64,7 @@ const DELIBIRDY_MONEY_PRICE_MULTIPLIER = 2; */ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.DELIBIRDY) - .withEncounterTier(MysteryEncounterTier.GREAT) + .withEncounterTier(MysteryEncounterTier.COMMON) //Change back after event! .withSceneWaveRangeRequirement(...CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES) .withSceneRequirement(new MoneyRequirement(0, DELIBIRDY_MONEY_PRICE_MULTIPLIER)) // Must have enough money for it to spawn at the very least .withPrimaryPokemonRequirement( @@ -136,8 +158,10 @@ export const DelibirdyEncounter: MysteryEncounter = await applyModifierTypeToPlayerPokemon(scene, scene.getPlayerPokemon()!, shellBell); scene.playSound("item_fanfare"); await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), null, undefined, true); + doEventReward(scene); } else { scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.AMULET_COIN)); + doEventReward(scene); } leaveEncounterWithoutBattle(scene, true); @@ -211,8 +235,10 @@ export const DelibirdyEncounter: MysteryEncounter = await applyModifierTypeToPlayerPokemon(scene, scene.getPlayerPokemon()!, shellBell); scene.playSound("item_fanfare"); await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), null, undefined, true); + doEventReward(scene); } else { scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.CANDY_JAR)); + doEventReward(scene); } } else { // Check if the player has max stacks of that Berry Pouch already @@ -224,8 +250,10 @@ export const DelibirdyEncounter: MysteryEncounter = await applyModifierTypeToPlayerPokemon(scene, scene.getPlayerPokemon()!, shellBell); scene.playSound("item_fanfare"); await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), null, undefined, true); + doEventReward(scene); } else { scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.BERRY_POUCH)); + doEventReward(scene); } } @@ -300,8 +328,10 @@ export const DelibirdyEncounter: MysteryEncounter = await applyModifierTypeToPlayerPokemon(scene, scene.getPlayerParty()[0], shellBell); scene.playSound("item_fanfare"); await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), null, undefined, true); + doEventReward(scene); } else { scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.HEALING_CHARM)); + doEventReward(scene); } chosenPokemon.loseHeldItem(modifier, false); diff --git a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts index d3679825ac8..0520d40d245 100644 --- a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts +++ b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts @@ -12,7 +12,7 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import { TrainerSlot } from "#app/data/trainer-config"; import { catchPokemon, getHighestLevelPlayerPokemon, getSpriteKeysFromPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import PokemonData from "#app/system/pokemon-data"; -import { isNullOrUndefined, randSeedInt } from "#app/utils"; +import { isNullOrUndefined, randSeedInt, randSeedItem } from "#app/utils"; import { Moves } from "#enums/moves"; import { BattlerIndex } from "#app/battle"; import { SelfStatusMove } from "#app/data/move"; @@ -23,6 +23,7 @@ import { BerryModifier } from "#app/modifier/modifier"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import PokemonSpecies from "#app/data/pokemon-species"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/uncommonBreed"; @@ -51,7 +52,14 @@ export const UncommonBreedEncounter: MysteryEncounter = // Calculate boss mon // Level equal to 2 below highest party member const level = getHighestLevelPlayerPokemon(scene, false, true).level - 2; - const species = scene.arena.randomSpecies(scene.currentBattle.waveIndex, level, 0, getPartyLuckValue(scene.getPlayerParty()), true); + let species: PokemonSpecies; + if (scene.eventManager.isEventActive() && scene.eventManager.activeEvent()?.uncommonBreedEncounters && randSeedInt(2) === 1) { + const eventEncounter = randSeedItem(scene.eventManager.activeEvent()!.uncommonBreedEncounters!); + species = eventEncounter.species; + species.speciesId = species.getSpeciesForLevel(level, eventEncounter.allowEvolution); + } else { + species = scene.arena.randomSpecies(scene.currentBattle.waveIndex, level, 0, getPartyLuckValue(scene.getPlayerParty()), true); + } const pokemon = new EnemyPokemon(scene, species, level, TrainerSlot.NONE, true); // Pokemon will always have one of its egg moves in its moveset diff --git a/src/timed-event-manager.ts b/src/timed-event-manager.ts index 41b9fec3307..872ae25fb10 100644 --- a/src/timed-event-manager.ts +++ b/src/timed-event-manager.ts @@ -2,6 +2,7 @@ import BattleScene from "#app/battle-scene"; import { TextStyle, addTextObject } from "#app/ui/text"; import { nil } from "#app/utils"; import i18next from "i18next"; +import { Species } from "./enums/species"; export enum EventType { SHINY, @@ -16,6 +17,11 @@ interface EventBanner { availableLangs?: string[]; } +interface EventEncounter { + species: Species; + allowEvolution?: boolean; +} + interface TimedEvent extends EventBanner { name: string; eventType: EventType; @@ -23,6 +29,8 @@ interface TimedEvent extends EventBanner { friendshipMultiplier?: number; startDate: Date; endDate: Date; + uncommonBreedEncounters?: EventEncounter[]; + delibirdyBuff?: string[]; } const timedEvents: TimedEvent[] = [ @@ -35,7 +43,27 @@ const timedEvents: TimedEvent[] = [ endDate: new Date(Date.UTC(2025, 0, 4, 0)), bannerKey: "halloween2024-event-", scale: 0.21, - availableLangs: [ "en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN" ] + availableLangs: [ "en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN" ], + uncommonBreedEncounters: [ + { species: Species.GIMMIGHOUL }, + { species: Species.DELIBIRD }, + { species: Species.STANTLER }, + { species: Species.LITWICK, allowEvolution: true }, + { species: Species.SNOVER, allowEvolution: true }, + { species: Species.ROLYCOLY, allowEvolution: true }, + { species: Species.BALTOY, allowEvolution: true }, + { species: Species.SMOLIV, allowEvolution: true }, + { species: Species.CHESPIN, allowEvolution: true }, + { species: Species.PIPLUP, allowEvolution: true }, + { species: Species.CYNDAQUIL, allowEvolution: true }, + { species: Species.GALAR_DARUMAKA, allowEvolution: true }, + { species: Species.MILCERY, allowEvolution: true }, + { species: Species.ALOLA_VULPIX, allowEvolution: true }, + { species: Species.CHINGLING, allowEvolution: true }, + { species: Species.SWIRLIX, allowEvolution: true }, + { species: Species.MUDBRAY, allowEvolution: true } + ], + delibirdyBuff: [ "CATCHING_CHARM", "SHINY_CHARM", "ABILITY_CHARM", "EXP_CHARM", "SUPER_EXP_CHARM", "HEALING_CHARM" ] } ]; From ccef051f61d4fea446fd66d57e29678e99e686fa Mon Sep 17 00:00:00 2001 From: AJ Fontaine Date: Thu, 19 Dec 2024 13:20:53 -0500 Subject: [PATCH 2/8] Cleaning up --- .../encounters/delibirdy-encounter.ts | 11 ++++------- .../encounters/uncommon-breed-encounter.ts | 5 +++-- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index e2139314532..e3f60dee404 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -46,14 +46,10 @@ const doEventReward = (scene: BattleScene) => { })); if (candidates.length > 0) { scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes[randSeedItem(candidates)])); + } else { + // At max stacks, give a Voucher instead + scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.VOUCHER)); } - // else { - // // At max stacks, give the first party pokemon a Soothe Bell instead - // const sootheBell = generateModifierType(scene, modifierTypes.SOOTHE_BELL) as PokemonHeldItemModifierType; - // await applyModifierTypeToPlayerPokemon(scene, scene.getPlayerPokemon()!, sootheBell); - // scene.playSound("item_fanfare"); - // await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: sootheBell.name }), null, undefined, true); - // } } }; @@ -64,6 +60,7 @@ const doEventReward = (scene: BattleScene) => { */ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.DELIBIRDY) + .withMaxAllowedEncounters(4) .withEncounterTier(MysteryEncounterTier.COMMON) //Change back after event! .withSceneWaveRangeRequirement(...CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES) .withSceneRequirement(new MoneyRequirement(0, DELIBIRDY_MONEY_PRICE_MULTIPLIER)) // Must have enough money for it to spawn at the very least diff --git a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts index 0520d40d245..f07820bb973 100644 --- a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts +++ b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts @@ -23,7 +23,7 @@ import { BerryModifier } from "#app/modifier/modifier"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; -import PokemonSpecies from "#app/data/pokemon-species"; +import PokemonSpecies, { allSpecies } from "#app/data/pokemon-species"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/uncommonBreed"; @@ -35,6 +35,7 @@ const namespace = "mysteryEncounters/uncommonBreed"; */ export const UncommonBreedEncounter: MysteryEncounter = MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.UNCOMMON_BREED) + .withMaxAllowedEncounters(4) .withEncounterTier(MysteryEncounterTier.COMMON) .withSceneWaveRangeRequirement(...CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES) .withCatchAllowed(true) @@ -55,7 +56,7 @@ export const UncommonBreedEncounter: MysteryEncounter = let species: PokemonSpecies; if (scene.eventManager.isEventActive() && scene.eventManager.activeEvent()?.uncommonBreedEncounters && randSeedInt(2) === 1) { const eventEncounter = randSeedItem(scene.eventManager.activeEvent()!.uncommonBreedEncounters!); - species = eventEncounter.species; + species = allSpecies[eventEncounter.species]; species.speciesId = species.getSpeciesForLevel(level, eventEncounter.allowEvolution); } else { species = scene.arena.randomSpecies(scene.currentBattle.waveIndex, level, 0, getPartyLuckValue(scene.getPlayerParty()), true); From 15ca797758d8a213a4927b55faceecf2317bbc1b Mon Sep 17 00:00:00 2001 From: AJ Fontaine Date: Thu, 19 Dec 2024 17:43:07 -0500 Subject: [PATCH 3/8] Fix event banner --- src/loading-scene.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/loading-scene.ts b/src/loading-scene.ts index c49b8d5aaa9..2e9484a847d 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -246,9 +246,9 @@ export class LoadingScene extends SceneBase { } const availableLangs = [ "en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN" ]; if (lang && availableLangs.includes(lang)) { - this.loadImage("halloween2024-event-" + lang, "events"); + this.loadImage("winter_holidays2024-event-" + lang, "events"); } else { - this.loadImage("halloween2024-event-en", "events"); + this.loadImage("winter_holidays2024-event-en", "events"); } this.loadAtlas("statuses", ""); From 29a079cfd3f188c3975ab0eff1ae9f73e44e139d Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Thu, 19 Dec 2024 16:04:12 -0800 Subject: [PATCH 4/8] Revert "[UI/UX] Refactor and enable seasonal splash messages (#5009)" (#5014) This reverts commit 806585f1a69a8059444c00aa87ca5ecedc71cf9b. --- src/constants.ts | 2 +- src/data/splash-messages.ts | 180 +++++++++++++++++++++----- src/test/data/splash_messages.test.ts | 18 +-- src/ui/title-ui-handler.ts | 3 +- 4 files changed, 161 insertions(+), 42 deletions(-) diff --git a/src/constants.ts b/src/constants.ts index 927575c0a28..63f00b9f33f 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -2,7 +2,7 @@ export const PLAYER_PARTY_MAX_SIZE: number = 6; /** Whether to use seasonal splash messages in general */ -export const USE_SEASONAL_SPLASH_MESSAGES: boolean = true; +export const USE_SEASONAL_SPLASH_MESSAGES: boolean = false; /** Name of the session ID cookie */ export const SESSION_ID_COOKIE_NAME: string = "pokerogue_sessionId"; diff --git a/src/data/splash-messages.ts b/src/data/splash-messages.ts index 086a55189d0..1f00ce0d555 100644 --- a/src/data/splash-messages.ts +++ b/src/data/splash-messages.ts @@ -1,5 +1,4 @@ import { USE_SEASONAL_SPLASH_MESSAGES } from "#app/constants"; -import i18next from "i18next"; //#region Interfaces/Types @@ -38,6 +37,8 @@ interface Season { start: `${Month}-${Day}`; /** The end day and month of the season. Format `MM-DD` */ end: `${Month}-${Day}`; + /** Collection of the messages to display (without the `i18next.t()` call!) */ + messages: string[]; } //#region Constants @@ -45,57 +46,176 @@ interface Season { /** The weight multiplier for the battles-won splash message */ const BATTLES_WON_WEIGHT_MULTIPLIER = 10; /** The weight multiplier for the seasonal splash messages */ -const SEASONAL_WEIGHT_MULTIPLIER = 20; +const SEASONAL_WEIGHT_MULTIPLIER = 10; + +//#region Common Messages + +const commonSplashMessages = [ + ...Array(BATTLES_WON_WEIGHT_MULTIPLIER).fill("battlesWon"), + "joinTheDiscord", + "infiniteLevels", + "everythingIsStackable", + "optionalSaveScumming", + "biomes", + "openSource", + "playWithSpeed", + "liveBugTesting", + "heavyInfluence", + "pokemonRiskAndPokemonRain", + "nowWithMoreSalt", + "infiniteFusionAtHome", + "brokenEggMoves", + "magnificent", + "doPeopleReadThis", + "thatsCrazy", + "gottaCatchEmAll", + "questionableBalancing", + "coolShaders", + "aiFree", + "suddenDifficultySpikes", + "basedOnAnUnfinishedFlashGame", + "moreAddictiveThanIntended", + "mostlyConsistentSeeds", + "achievementPointsDontDoAnything", + "nothingBeatsAJellyFilledDonut", + "dontTalkAboutTheTinkatonIncident", + "alsoTryPokengine", + "alsoTryEmeraldRogue", + "alsoTryRadicalRed", + "eeveeExpo", + "checkOutYnoproject", + "breedersInSpace", + "alsoTryPokemonUnbound", + "tryTheJohtoDragonChallenge", + "basicReadingAbilityRecommended", + "shoutoutsToTheArtists", + "gamblingNotEncouraged", + "dontForgetToTakeABreak", + "wEvent", + "ifItsNotAccurateItsAccurate", + "everyLossIsProgressMade", + "liveWoChienReaction", + "itsAFeatureNotABug", + "theEggsAreNotForEating", + "7.8outOf10TooManyWaterBiomes", + "butNothingHappened", + "thePowerOfScienceIsAmazing", + "freeToPlay", + "theresATimeAndPlaceForEverything", + "nowWithShinierShinies", + "smilesGoForMiles", + "certainlyNotDragonFree", + "haveANiceDay", + "redacted", + "hi", + "transRights", + "shinyOddsHigherThanYouThink", + "noFalseTrades", + "notForProfit", + "timeForYourDailyRun", + "moreEggsThanADaycare", + "disclaimerHarshSunDoesNotGiveVitaminD", + "whoNeedsAMap", + "luxrayIsNotADarkType", + "selfDestructiveEncounters", + "mostOptionsAreViable", + "pokerogueMorse", + "smiley", + "beAwareOfPassives", + "asSeenOnTheWorldWideWeb", + "vaultinVeluzas", + "tooManyStarters", + "checkTheWiki", + "winWithYourFavorites", + "alsoTryPokerogueWait", + "theWayISeeItKyogreIsSurrounded", + "tryOutHoneyGather", + "notForTheFaintOfHeart", + "p", + "flipYourDeviceToEvolveInkay", + "inArceusWeTrust", + "whyDidTheTorchicCrossTheRoad", + "goodLuck", + "fuseWisely", + "compensation", + "prepareForTroubleAndMakeItDouble", + "anEggForYourTroubles", + "regirock", + "hereForAGoodTime", + "getGoodOrDont", + "checkTheSubreddit", + "betterNerfGreninja", + "inCaseOfUpdateClearYourCache", + "insertTextHere", + "endingEndlessNotFound", + "iLikeMyEggsVouchered", + "YOU", + "noAddedSugar", + "notSponsored", + "notRated", + "justOneMoreWaveMom", + "saltCured", + "onlyOnPokerogueNet", + "pixelPerfection", + "openSource", + "probablyGood", + "itsAMonsterHouse", + "dontForgetYourPassword", + "tripleTripleTripleAxel", + "questionExclamation", + "clownEncounters", + "fullOfBerries", + "limitsAreMeantToBeBrokenSometimes", + "keepItCasual", + "serversProbablyWorking", + "mew", + "makeItRainAndYourProblemsGoAway", + "customMusicTracks", + "youAreValid", + "number591IsLookingOff", + "timeForYourDeliDelivery", + "goodFirstImpression", + "iPreferRarerCandies", +]; //#region Seasonal Messages const seasonalSplashMessages: Season[] = [ { - name: "halloween", - start: "10-15", - end: "10-31" + name: "Halloween", + start: "09-15", + end: "10-31", + messages: [ "halloween.pumpkabooAbout", "halloween.mayContainSpiders", "halloween.spookyScarySkeledirge", "halloween.gourgeistUsedTrickOrTreat", "halloween.letsSnuggleForever" ], }, { - name: "xmas", - start: "12-16", - end: "12-31" + name: "XMAS", + start: "12-01", + end: "12-26", + messages: [ "xmas.happyHolidays", "xmas.unaffilicatedWithDelibirdServices", "xmas.delibirdSeason", "xmas.diamondsFromTheSky", "xmas.holidayStylePikachuNotIncluded" ], }, { - name: "newYears", - start: "12-31", - end: "01-14" + name: "New Year's", + start: "01-01", + end: "01-31", + messages: [ "newYears.happyNewYear" ], }, ]; //#endregion export function getSplashMessages(): string[] { - const existingKeys = i18next.getResourceBundle(i18next.language, "splashMessages"); - const splashMessages: string[] = [ ...Object.keys(existingKeys["common"]) ].map((message) => `common.${message}`); - if (splashMessages.includes("common.battlesWon")) { - splashMessages.push(...Array(Math.max(BATTLES_WON_WEIGHT_MULTIPLIER - 1, 1)).fill("common.battlesWon")); - } - + const splashMessages: string[] = [ ...commonSplashMessages ]; console.log("use seasonal splash messages", USE_SEASONAL_SPLASH_MESSAGES); if (USE_SEASONAL_SPLASH_MESSAGES) { // add seasonal splash messages if the season is active - for (const { name, start, end } of seasonalSplashMessages) { + for (const { name, start, end, messages } of seasonalSplashMessages) { const now = new Date(); const startDate = new Date(`${start}-${now.getFullYear()}`); const endDate = new Date(`${end}-${now.getFullYear()}`); - if (endDate < startDate) { // If the end date is earlier in the year, that means it's next year - if (now >= startDate) { - endDate.setFullYear(endDate.getFullYear() + 1); //Ends next year - } else if (now <= endDate) { - startDate.setFullYear(startDate.getFullYear() - 1); //Started last year - } - } - console.log(`${name} event starts ${startDate} and ends ${endDate}`); - if (existingKeys.hasOwnProperty(name) && now >= startDate && now <= endDate) { - const existingMessages: string[] = [ ...Object.keys(existingKeys[name]) ].map(m=>`${name}.${m}`); - console.log(`Adding ${existingMessages.length} ${name} splash messages from ${i18next.language} (weight: x${SEASONAL_WEIGHT_MULTIPLIER})`); - existingMessages.forEach((message) => { + if (now >= startDate && now <= endDate) { + console.log(`Adding ${messages.length} ${name} splash messages (weight: x${SEASONAL_WEIGHT_MULTIPLIER})`); + messages.forEach((message) => { const weightedMessage = Array(SEASONAL_WEIGHT_MULTIPLIER).fill(message); splashMessages.push(...weightedMessage); }); diff --git a/src/test/data/splash_messages.test.ts b/src/test/data/splash_messages.test.ts index e4ad547b704..b9ed5b9d365 100644 --- a/src/test/data/splash_messages.test.ts +++ b/src/test/data/splash_messages.test.ts @@ -9,7 +9,7 @@ describe("Data - Splash Messages", () => { // make sure to adjust this test if the weight it changed! it("should add contain 10 `battlesWon` splash messages", () => { - const battlesWonMessages = getSplashMessages().filter((message) => message === "splashMessages:common.battlesWon"); + const battlesWonMessages = getSplashMessages().filter((message) => message === "splashMessages:battlesWon"); expect(battlesWonMessages).toHaveLength(10); }); @@ -22,16 +22,16 @@ describe("Data - Splash Messages", () => { vi.useRealTimers(); // reset system time }); - it("should contain halloween messages from Oct 15 to Oct 31", () => { - testSeason(new Date("2024-10-15"), new Date("2024-10-31"), "halloween"); + it("should contain halloween messages from Sep 15 to Oct 31", () => { + testSeason(new Date("2024-09-15"), new Date("2024-10-31"), "halloween"); }); - it("should contain xmas messages from Dec 16 to Dec 31", () => { - testSeason(new Date("2024-12-16"), new Date("2024-12-31"), "xmas"); + it("should contain xmas messages from Dec 1 to Dec 26", () => { + testSeason(new Date("2024-12-01"), new Date("2024-12-26"), "xmas"); }); - it("should contain new years messages from Dec 31 '24 to Jan 14 '25", () => { - testSeason(new Date("2024-12-31"), new Date("2025-01-14"), "newYears"); + it("should contain new years messages frm Jan 1 to Jan 31", () => { + testSeason(new Date("2024-01-01"), new Date("2024-01-31"), "newYears"); }); }); }); @@ -60,7 +60,7 @@ function testSeason(startDate: Date, endDate: Date, prefix: string) { }); expect(before).toBe(0); - expect(start).toBeGreaterThanOrEqual(20); // make sure to adjust if weight is changed! - expect(end).toBeGreaterThanOrEqual(20); // make sure to adjust if weight is changed! + expect(start).toBeGreaterThanOrEqual(10); // make sure to adjust if weight is changed! + expect(end).toBeGreaterThanOrEqual(10); // make sure to adjust if weight is changed! expect(after).toBe(0); } diff --git a/src/ui/title-ui-handler.ts b/src/ui/title-ui-handler.ts index f1b0a673ea0..aec80f049c9 100644 --- a/src/ui/title-ui-handler.ts +++ b/src/ui/title-ui-handler.ts @@ -83,7 +83,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { .then(stats => { if (stats) { this.playerCountLabel.setText(`${stats.playerCount} ${i18next.t("menu:playersOnline")}`); - if (this.splashMessage === "splashMessages:common.battlesWon") { + if (this.splashMessage === "splashMessages:battlesWon") { this.splashMessageText.setText(i18next.t(this.splashMessage, { count: stats.battleCount })); } } @@ -98,7 +98,6 @@ export default class TitleUiHandler extends OptionSelectUiHandler { if (ret) { this.splashMessage = Utils.randItem(getSplashMessages()); - console.log(this.splashMessage); this.splashMessageText.setText(i18next.t(this.splashMessage, { count: TitleUiHandler.BATTLES_WON_FALLBACK })); this.appVersionText.setText("v" + version); From 6ef15eca4a01d5669aee411b594129c6e6c7796a Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Thu, 19 Dec 2024 16:18:32 -0800 Subject: [PATCH 5/8] [i18n] Update locales submodule --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index 6592ec05fce..3a141b9faed 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 6592ec05fce7035ee93aad253279e97ab6cdc1ab +Subproject commit 3a141b9faed725d2f160c38e441cad1d38d9d5bd From 6511d6fafb4c29cbaf7e10abc861aeb283539688 Mon Sep 17 00:00:00 2001 From: AJ Fontaine Date: Fri, 20 Dec 2024 13:35:03 -0500 Subject: [PATCH 6/8] FoF, BBound, weather changes --- .../encounters/berries-abound-encounter.ts | 12 +++++-- .../encounters/delibirdy-encounter.ts | 2 +- .../encounters/fight-or-flight-encounter.ts | 12 +++++-- .../encounters/uncommon-breed-encounter.ts | 1 - .../mystery-encounters/mystery-encounters.ts | 8 ++--- src/data/weather.ts | 6 +++- src/timed-event-manager.ts | 32 +++++++++++-------- 7 files changed, 49 insertions(+), 24 deletions(-) diff --git a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts index 786ca3e8fc0..090653e7ca9 100644 --- a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts +++ b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts @@ -13,7 +13,7 @@ import { ModifierTypeOption, modifierTypes, regenerateModifierPoolThresholds, } from "#app/modifier/modifier-type"; -import { randSeedInt } from "#app/utils"; +import { randSeedInt, randSeedItem } from "#app/utils"; import { BattlerTagType } from "#enums/battler-tag-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import BattleScene from "#app/battle-scene"; @@ -31,6 +31,7 @@ import { BerryType } from "#enums/berry-type"; import { PERMANENT_STATS, Stat } from "#enums/stat"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import PokemonSpecies, { allSpecies } from "#app/data/pokemon-species"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/berriesAbound"; @@ -58,7 +59,14 @@ export const BerriesAboundEncounter: MysteryEncounter = // Calculate boss mon const level = getEncounterPokemonLevelForWave(scene, STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER); - const bossSpecies = scene.arena.randomSpecies(scene.currentBattle.waveIndex, level, 0, getPartyLuckValue(scene.getPlayerParty()), true); + let bossSpecies: PokemonSpecies; + if (scene.eventManager.isEventActive() && scene.eventManager.activeEvent()?.uncommonBreedEncounters && randSeedInt(2) === 1) { + const eventEncounter = randSeedItem(scene.eventManager.activeEvent()!.uncommonBreedEncounters!); + bossSpecies = allSpecies[eventEncounter.species]; + bossSpecies.speciesId = bossSpecies.getSpeciesForLevel(level, eventEncounter.allowEvolution); + } else { + bossSpecies = scene.arena.randomSpecies(scene.currentBattle.waveIndex, level, 0, getPartyLuckValue(scene.getPlayerParty()), true); + } const bossPokemon = new EnemyPokemon(scene, bossSpecies, level, TrainerSlot.NONE, true); encounter.setDialogueToken("enemyPokemon", getPokemonNameWithAffix(bossPokemon)); const config: EnemyPartyConfig = { diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index e3f60dee404..1df87a3d17f 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -34,7 +34,7 @@ const OPTION_3_DISALLOWED_MODIFIERS = [ "PokemonBaseStatTotalModifier" ]; -const DELIBIRDY_MONEY_PRICE_MULTIPLIER = 2; +const DELIBIRDY_MONEY_PRICE_MULTIPLIER = 1.5; const doEventReward = (scene: BattleScene) => { const event_buff = scene.eventManager.activeEvent()?.delibirdyBuff ?? []; diff --git a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts index 3533e10df29..07e7a15c65c 100644 --- a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts +++ b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts @@ -26,9 +26,10 @@ import { getEncounterPokemonLevelForWave, getSpriteKeysFromPokemon, STANDARD_ENC import PokemonData from "#app/system/pokemon-data"; import { BattlerTagType } from "#enums/battler-tag-type"; import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; -import { randSeedInt } from "#app/utils"; +import { randSeedInt, randSeedItem } from "#app/utils"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import PokemonSpecies, { allSpecies } from "#app/data/pokemon-species"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/fightOrFlight"; @@ -56,7 +57,14 @@ export const FightOrFlightEncounter: MysteryEncounter = // Calculate boss mon const level = getEncounterPokemonLevelForWave(scene, STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER); - const bossSpecies = scene.arena.randomSpecies(scene.currentBattle.waveIndex, level, 0, getPartyLuckValue(scene.getPlayerParty()), true); + let bossSpecies: PokemonSpecies; + if (scene.eventManager.isEventActive() && scene.eventManager.activeEvent()?.uncommonBreedEncounters && randSeedInt(2) === 1) { + const eventEncounter = randSeedItem(scene.eventManager.activeEvent()!.uncommonBreedEncounters!); + bossSpecies = allSpecies[eventEncounter.species]; + bossSpecies.speciesId = bossSpecies.getSpeciesForLevel(level, eventEncounter.allowEvolution); + } else { + bossSpecies = scene.arena.randomSpecies(scene.currentBattle.waveIndex, level, 0, getPartyLuckValue(scene.getPlayerParty()), true); + } const bossPokemon = new EnemyPokemon(scene, bossSpecies, level, TrainerSlot.NONE, true); encounter.setDialogueToken("enemyPokemon", bossPokemon.getNameToRender()); const config: EnemyPartyConfig = { diff --git a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts index f07820bb973..15f7bce8945 100644 --- a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts +++ b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts @@ -35,7 +35,6 @@ const namespace = "mysteryEncounters/uncommonBreed"; */ export const UncommonBreedEncounter: MysteryEncounter = MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.UNCOMMON_BREED) - .withMaxAllowedEncounters(4) .withEncounterTier(MysteryEncounterTier.COMMON) .withSceneWaveRangeRequirement(...CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES) .withCatchAllowed(true) diff --git a/src/data/mystery-encounters/mystery-encounters.ts b/src/data/mystery-encounters/mystery-encounters.ts index 8c1c3bf6de4..8a747cd4cd4 100644 --- a/src/data/mystery-encounters/mystery-encounters.ts +++ b/src/data/mystery-encounters/mystery-encounters.ts @@ -177,7 +177,7 @@ export const allMysteryEncounters: { [encounterType: number]: MysteryEncounter } const extremeBiomeEncounters: MysteryEncounterType[] = []; const nonExtremeBiomeEncounters: MysteryEncounterType[] = [ - MysteryEncounterType.FIELD_TRIP, + // MysteryEncounterType.FIELD_TRIP, Disabled for holiday event MysteryEncounterType.DANCING_LESSONS, // Is also in BADLANDS, DESERT, VOLCANO, WASTELAND, ABYSS ]; @@ -185,14 +185,14 @@ const humanTransitableBiomeEncounters: MysteryEncounterType[] = [ MysteryEncounterType.MYSTERIOUS_CHALLENGERS, MysteryEncounterType.SHADY_VITAMIN_DEALER, MysteryEncounterType.THE_POKEMON_SALESMAN, - MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE, + // MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE, Disabled for holiday event MysteryEncounterType.THE_WINSTRATE_CHALLENGE, MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER ]; const civilizationBiomeEncounters: MysteryEncounterType[] = [ - MysteryEncounterType.DEPARTMENT_STORE_SALE, - MysteryEncounterType.PART_TIMER, + // MysteryEncounterType.DEPARTMENT_STORE_SALE, Disabled for holiday event + // MysteryEncounterType.PART_TIMER, Disabled for holiday event MysteryEncounterType.FUN_AND_GAMES, MysteryEncounterType.GLOBAL_TRADE_SYSTEM ]; diff --git a/src/data/weather.ts b/src/data/weather.ts index 0a76a015402..19092716353 100644 --- a/src/data/weather.ts +++ b/src/data/weather.ts @@ -242,7 +242,7 @@ export function getTerrainBlockMessage(pokemon: Pokemon, terrainType: TerrainTyp return i18next.t("terrain:defaultBlockMessage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), terrainName: getTerrainName(terrainType) }); } -interface WeatherPoolEntry { +export interface WeatherPoolEntry { weatherType: WeatherType; weight: integer; } @@ -373,6 +373,10 @@ export function getRandomWeatherType(arena: any /* Importing from arena causes a break; } + if (arena.scene.eventManager.isEventActive() && arena.scene.eventManager.activeEvent()?.weather?.length > 0) { + arena.scene.eventManager.activeEvent().weather.map(w => weatherPool.push(w)); + } + if (weatherPool.length > 1) { let totalWeight = 0; weatherPool.forEach(w => totalWeight += w.weight); diff --git a/src/timed-event-manager.ts b/src/timed-event-manager.ts index 059abc094a4..db370e0711f 100644 --- a/src/timed-event-manager.ts +++ b/src/timed-event-manager.ts @@ -2,7 +2,9 @@ import BattleScene from "#app/battle-scene"; import { TextStyle, addTextObject } from "#app/ui/text"; import { nil } from "#app/utils"; import i18next from "i18next"; -import { Species } from "./enums/species"; +import { Species } from "#enums/species"; +import { WeatherPoolEntry } from "#app/data/weather"; +import { WeatherType } from "#enums/weather-type"; export enum EventType { SHINY, @@ -31,6 +33,7 @@ interface TimedEvent extends EventBanner { endDate: Date; uncommonBreedEncounters?: EventEncounter[]; delibirdyBuff?: string[]; + weather?: WeatherPoolEntry[]; } const timedEvents: TimedEvent[] = [ @@ -48,22 +51,25 @@ const timedEvents: TimedEvent[] = [ { species: Species.GIMMIGHOUL }, { species: Species.DELIBIRD }, { species: Species.STANTLER }, - { species: Species.LITWICK, allowEvolution: true }, - { species: Species.SNOVER, allowEvolution: true }, - { species: Species.ROLYCOLY, allowEvolution: true }, - { species: Species.BALTOY, allowEvolution: true }, - { species: Species.SMOLIV, allowEvolution: true }, - { species: Species.CHESPIN, allowEvolution: true }, - { species: Species.PIPLUP, allowEvolution: true }, { species: Species.CYNDAQUIL, allowEvolution: true }, - { species: Species.GALAR_DARUMAKA, allowEvolution: true }, - { species: Species.MILCERY, allowEvolution: true }, - { species: Species.ALOLA_VULPIX, allowEvolution: true }, + { species: Species.PIPLUP, allowEvolution: true }, + { species: Species.CHESPIN, allowEvolution: true }, + { species: Species.BALTOY, allowEvolution: true }, + { species: Species.SNOVER, allowEvolution: true }, { species: Species.CHINGLING, allowEvolution: true }, + { species: Species.LITWICK, allowEvolution: true }, + { species: Species.CUBCHOO, allowEvolution: true }, { species: Species.SWIRLIX, allowEvolution: true }, - { species: Species.MUDBRAY, allowEvolution: true } + { species: Species.AMAURA, allowEvolution: true }, + { species: Species.MUDBRAY, allowEvolution: true }, + { species: Species.ROLYCOLY, allowEvolution: true }, + { species: Species.MILCERY, allowEvolution: true }, + { species: Species.SMOLIV, allowEvolution: true }, + { species: Species.ALOLA_VULPIX, allowEvolution: true }, + { species: Species.GALAR_DARUMAKA, allowEvolution: true } ], - delibirdyBuff: [ "CATCHING_CHARM", "SHINY_CHARM", "ABILITY_CHARM", "EXP_CHARM", "SUPER_EXP_CHARM", "HEALING_CHARM" ] + delibirdyBuff: [ "CATCHING_CHARM", "SHINY_CHARM", "ABILITY_CHARM", "EXP_CHARM", "SUPER_EXP_CHARM", "HEALING_CHARM" ], + weather: [{ weatherType: WeatherType.SNOW, weight: 1 }] } ]; From 117176baa596dd6c464dace369978fc82f384a87 Mon Sep 17 00:00:00 2001 From: AJ Fontaine Date: Fri, 20 Dec 2024 13:57:14 -0500 Subject: [PATCH 7/8] Fix German Banner --- .../events/winter_holidays2024-event-de.png | Bin 34388 -> 34954 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/events/winter_holidays2024-event-de.png b/public/images/events/winter_holidays2024-event-de.png index 1a340958912574454a38241fe2dc770fc5880c06..1c2e10086f2bf9679cf4fecdfd700b876a2a315f 100644 GIT binary patch delta 32071 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 Date: Fri, 20 Dec 2024 13:59:09 -0500 Subject: [PATCH 8/8] Add Iron Bundle to event encounters --- src/timed-event-manager.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/timed-event-manager.ts b/src/timed-event-manager.ts index db370e0711f..e4a376ac366 100644 --- a/src/timed-event-manager.ts +++ b/src/timed-event-manager.ts @@ -66,7 +66,8 @@ const timedEvents: TimedEvent[] = [ { species: Species.MILCERY, allowEvolution: true }, { species: Species.SMOLIV, allowEvolution: true }, { species: Species.ALOLA_VULPIX, allowEvolution: true }, - { species: Species.GALAR_DARUMAKA, allowEvolution: true } + { species: Species.GALAR_DARUMAKA, allowEvolution: true }, + { species: Species.IRON_BUNDLE } ], delibirdyBuff: [ "CATCHING_CHARM", "SHINY_CHARM", "ABILITY_CHARM", "EXP_CHARM", "SUPER_EXP_CHARM", "HEALING_CHARM" ], weather: [{ weatherType: WeatherType.SNOW, weight: 1 }]