From 030b701910377850c0011a3918d393d01b38d7d0 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Wed, 20 Aug 2025 19:55:16 -0400 Subject: [PATCH] [Refactor] Change rare egg rate consts to array, rare egg move common egg boosted chance boosted (#6305) * Change rare egg rate consts to array * Update rates.ts 1/24 -> 1/16 * Make new arrays use readonly type hint --------- Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Co-authored-by: damocleas --- src/data/balance/rates.ts | 8 ++++---- src/data/egg.ts | 30 +++++++++++++++--------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/data/balance/rates.ts b/src/data/balance/rates.ts index c5eaf40e608..06f3ee78efd 100644 --- a/src/data/balance/rates.ts +++ b/src/data/balance/rates.ts @@ -42,10 +42,10 @@ export const SAME_SPECIES_EGG_HA_RATE = 8; export const MANAPHY_EGG_MANAPHY_RATE = 8; export const GACHA_EGG_HA_RATE = 192; -// 1/x for legendary eggs, 1/x*2 for epic eggs, 1/x*4 for rare eggs, and 1/x*8 for common eggs -export const GACHA_DEFAULT_RARE_EGGMOVE_RATE = 6; -export const SAME_SPECIES_EGG_RARE_EGGMOVE_RATE = 3; -export const GACHA_MOVE_UP_RARE_EGGMOVE_RATE = 3; +// Odds are 1/x +// [COMMON, RARE, EPIC/MANAPHY, LEGEND] +export const RARE_EGGMOVE_RATES: readonly number[] = [48, 24, 12, 6]; +export const BOOSTED_RARE_EGGMOVE_RATES: readonly number[] = [16, 12, 6, 3]; // #region Variant properties // The chance x/10 of a shiny being a variant, then of being specifically an epic variant diff --git a/src/data/egg.ts b/src/data/egg.ts index 2c567686fc2..5fab276f327 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -3,17 +3,16 @@ import { globalScene } from "#app/global-scene"; import Overrides from "#app/overrides"; import { pokemonPrevolutions } from "#balance/pokemon-evolutions"; import { + BOOSTED_RARE_EGGMOVE_RATES, EGG_PITY_EPIC_THRESHOLD, EGG_PITY_LEGENDARY_THRESHOLD, EGG_PITY_RARE_THRESHOLD, GACHA_DEFAULT_COMMON_EGG_THRESHOLD, GACHA_DEFAULT_EPIC_EGG_THRESHOLD, GACHA_DEFAULT_RARE_EGG_THRESHOLD, - GACHA_DEFAULT_RARE_EGGMOVE_RATE, GACHA_DEFAULT_SHINY_RATE, GACHA_EGG_HA_RATE, GACHA_LEGENDARY_UP_THRESHOLD_OFFSET, - GACHA_MOVE_UP_RARE_EGGMOVE_RATE, GACHA_SHINY_UP_SHINY_RATE, HATCH_WAVES_COMMON_EGG, HATCH_WAVES_EPIC_EGG, @@ -21,8 +20,8 @@ import { HATCH_WAVES_MANAPHY_EGG, HATCH_WAVES_RARE_EGG, MANAPHY_EGG_MANAPHY_RATE, + RARE_EGGMOVE_RATES, SAME_SPECIES_EGG_HA_RATE, - SAME_SPECIES_EGG_RARE_EGGMOVE_RATE, SAME_SPECIES_EGG_SHINY_RATE, SHINY_EPIC_CHANCE, SHINY_VARIANT_CHANCE, @@ -355,21 +354,22 @@ export class Egg { // #region Private methods //// + /** + * Rolls which egg move slot the egg will have. + * 1/x chance for rare, (x-1)/3 chance for each common move. + * x is determined by Egg Tier. Boosted rates used for eggs obtained through Move Up Gacha and Candy. + * @returns the slot for the egg move + */ private rollEggMoveIndex() { - let baseChance = GACHA_DEFAULT_RARE_EGGMOVE_RATE; - switch (this._sourceType) { - case EggSourceType.SAME_SPECIES_EGG: - baseChance = SAME_SPECIES_EGG_RARE_EGGMOVE_RATE; - break; - case EggSourceType.GACHA_MOVE: - baseChance = GACHA_MOVE_UP_RARE_EGGMOVE_RATE; - break; - default: - break; + const tierNum = this.isManaphyEgg() ? 2 : this.tier; + let baseChance: number; + if (this._sourceType === EggSourceType.SAME_SPECIES_EGG || this._sourceType === EggSourceType.GACHA_MOVE) { + baseChance = BOOSTED_RARE_EGGMOVE_RATES[tierNum]; + } else { + baseChance = RARE_EGGMOVE_RATES[tierNum]; } - const tierMultiplier = this.isManaphyEgg() ? 2 : Math.pow(2, 3 - this.tier); - return randSeedInt(baseChance * tierMultiplier) ? randSeedInt(3) : 3; + return randSeedInt(baseChance) ? randSeedInt(3) : 3; } private getEggTierDefaultHatchWaves(eggTier?: EggTier): number {