[Refactor] Move some relevant files, tables etc to new balance folder (#4510)
* Move biomes.ts * Move starter costs, passives, friendship, starter-candy to starters.ts * Change relative imports to absolute imports * Add docstrings, passives.ts * Constants in rates.ts for egg pity, egg tier rates, hatch waves, variant chances --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>
This commit is contained in:
parent
7473c31c77
commit
8a2900ad29
|
@ -25,7 +25,7 @@ import { trainerConfigs, TrainerSlot } from "./data/trainer-config";
|
||||||
import Trainer, { TrainerVariant } from "./field/trainer";
|
import Trainer, { TrainerVariant } from "./field/trainer";
|
||||||
import TrainerData from "./system/trainer-data";
|
import TrainerData from "./system/trainer-data";
|
||||||
import SoundFade from "phaser3-rex-plugins/plugins/soundfade";
|
import SoundFade from "phaser3-rex-plugins/plugins/soundfade";
|
||||||
import { pokemonPrevolutions } from "./data/pokemon-evolutions";
|
import { pokemonPrevolutions } from "./data/balance/pokemon-evolutions";
|
||||||
import PokeballTray from "./ui/pokeball-tray";
|
import PokeballTray from "./ui/pokeball-tray";
|
||||||
import InvertPostFX from "./pipelines/invert";
|
import InvertPostFX from "./pipelines/invert";
|
||||||
import { Achv, achvs, ModifierAchv, MoneyAchv } from "./system/achv";
|
import { Achv, achvs, ModifierAchv, MoneyAchv } from "./system/achv";
|
||||||
|
@ -42,7 +42,7 @@ import PokemonSpriteSparkleHandler from "./field/pokemon-sprite-sparkle-handler"
|
||||||
import CharSprite from "./ui/char-sprite";
|
import CharSprite from "./ui/char-sprite";
|
||||||
import DamageNumberHandler from "./field/damage-number-handler";
|
import DamageNumberHandler from "./field/damage-number-handler";
|
||||||
import PokemonInfoContainer from "./ui/pokemon-info-container";
|
import PokemonInfoContainer from "./ui/pokemon-info-container";
|
||||||
import { biomeDepths, getBiomeName } from "./data/biomes";
|
import { biomeDepths, getBiomeName } from "./data/balance/biomes";
|
||||||
import { SceneBase } from "./scene-base";
|
import { SceneBase } from "./scene-base";
|
||||||
import CandyBar from "./ui/candy-bar";
|
import CandyBar from "./ui/candy-bar";
|
||||||
import { Variant, variantData } from "./data/variant";
|
import { Variant, variantData } from "./data/variant";
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { Type } from "./type";
|
import { Type } from "#app/data/type";
|
||||||
import * as Utils from "../utils";
|
import * as Utils from "#app/utils";
|
||||||
import { pokemonEvolutions, SpeciesFormEvolution } from "./pokemon-evolutions";
|
import { pokemonEvolutions, SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { Biome } from "#enums/biome";
|
import { Biome } from "#enums/biome";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
|
@ -1,5 +1,5 @@
|
||||||
import { allMoves } from "./move";
|
import { allMoves } from "#app/data/move";
|
||||||
import * as Utils from "../utils";
|
import * as Utils from "#app/utils";
|
||||||
import { Moves } from "#enums/moves";
|
import { Moves } from "#enums/moves";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
|
|
|
@ -0,0 +1,574 @@
|
||||||
|
import { Abilities } from "#app/enums/abilities";
|
||||||
|
import { Species } from "#app/enums/species";
|
||||||
|
|
||||||
|
export const starterPassiveAbilities = {
|
||||||
|
[Species.BULBASAUR]: Abilities.GRASSY_SURGE,
|
||||||
|
[Species.CHARMANDER]: Abilities.BEAST_BOOST,
|
||||||
|
[Species.SQUIRTLE]: Abilities.STURDY,
|
||||||
|
[Species.CATERPIE]: Abilities.MAGICIAN,
|
||||||
|
[Species.WEEDLE]: Abilities.TINTED_LENS,
|
||||||
|
[Species.PIDGEY]: Abilities.SHEER_FORCE,
|
||||||
|
[Species.RATTATA]: Abilities.STRONG_JAW,
|
||||||
|
[Species.SPEAROW]: Abilities.MOXIE,
|
||||||
|
[Species.EKANS]: Abilities.REGENERATOR,
|
||||||
|
[Species.SANDSHREW]: Abilities.TOUGH_CLAWS,
|
||||||
|
[Species.NIDORAN_F]: Abilities.FLARE_BOOST,
|
||||||
|
[Species.NIDORAN_M]: Abilities.GUTS,
|
||||||
|
[Species.VULPIX]: Abilities.FUR_COAT,
|
||||||
|
[Species.ZUBAT]: Abilities.INTIMIDATE,
|
||||||
|
[Species.ODDISH]: Abilities.TRIAGE,
|
||||||
|
[Species.PARAS]: Abilities.TRIAGE,
|
||||||
|
[Species.VENONAT]: Abilities.SIMPLE,
|
||||||
|
[Species.DIGLETT]: Abilities.STURDY,
|
||||||
|
[Species.MEOWTH]: Abilities.TOUGH_CLAWS,
|
||||||
|
[Species.PSYDUCK]: Abilities.SIMPLE,
|
||||||
|
[Species.MANKEY]: Abilities.IRON_FIST,
|
||||||
|
[Species.GROWLITHE]: Abilities.SPEED_BOOST,
|
||||||
|
[Species.POLIWAG]: Abilities.NO_GUARD,
|
||||||
|
[Species.ABRA]: Abilities.PSYCHIC_SURGE,
|
||||||
|
[Species.MACHOP]: Abilities.QUICK_FEET,
|
||||||
|
[Species.BELLSPROUT]: Abilities.FLOWER_GIFT,
|
||||||
|
[Species.TENTACOOL]: Abilities.TOXIC_CHAIN,
|
||||||
|
[Species.GEODUDE]: Abilities.DRY_SKIN,
|
||||||
|
[Species.PONYTA]: Abilities.MAGIC_GUARD,
|
||||||
|
[Species.SLOWPOKE]: Abilities.UNAWARE,
|
||||||
|
[Species.MAGNEMITE]: Abilities.LEVITATE,
|
||||||
|
[Species.FARFETCHD]: Abilities.SNIPER,
|
||||||
|
[Species.DODUO]: Abilities.PARENTAL_BOND,
|
||||||
|
[Species.SEEL]: Abilities.WATER_BUBBLE,
|
||||||
|
[Species.GRIMER]: Abilities.WATER_ABSORB,
|
||||||
|
[Species.SHELLDER]: Abilities.ICE_SCALES,
|
||||||
|
[Species.GASTLY]: Abilities.SHADOW_SHIELD,
|
||||||
|
[Species.ONIX]: Abilities.ROCKY_PAYLOAD,
|
||||||
|
[Species.DROWZEE]: Abilities.MAGICIAN,
|
||||||
|
[Species.KRABBY]: Abilities.THERMAL_EXCHANGE,
|
||||||
|
[Species.VOLTORB]: Abilities.TRANSISTOR,
|
||||||
|
[Species.EXEGGCUTE]: Abilities.RIPEN,
|
||||||
|
[Species.CUBONE]: Abilities.PARENTAL_BOND,
|
||||||
|
[Species.LICKITUNG]: Abilities.CHEEK_POUCH,
|
||||||
|
[Species.KOFFING]: Abilities.PARENTAL_BOND,
|
||||||
|
[Species.RHYHORN]: Abilities.FILTER,
|
||||||
|
[Species.TANGELA]: Abilities.SEED_SOWER,
|
||||||
|
[Species.KANGASKHAN]: Abilities.GUTS,
|
||||||
|
[Species.HORSEA]: Abilities.DRAGONS_MAW,
|
||||||
|
[Species.GOLDEEN]: Abilities.MULTISCALE,
|
||||||
|
[Species.STARYU]: Abilities.REGENERATOR,
|
||||||
|
[Species.SCYTHER]: Abilities.TINTED_LENS,
|
||||||
|
[Species.PINSIR]: Abilities.TINTED_LENS,
|
||||||
|
[Species.TAUROS]: Abilities.STAMINA,
|
||||||
|
[Species.MAGIKARP]: Abilities.MULTISCALE,
|
||||||
|
[Species.LAPRAS]: Abilities.LIGHTNING_ROD,
|
||||||
|
[Species.DITTO]: Abilities.ADAPTABILITY,
|
||||||
|
[Species.EEVEE]: Abilities.PICKUP,
|
||||||
|
[Species.PORYGON]: Abilities.PROTEAN,
|
||||||
|
[Species.OMANYTE]: Abilities.STURDY,
|
||||||
|
[Species.KABUTO]: Abilities.TOUGH_CLAWS,
|
||||||
|
[Species.AERODACTYL]: Abilities.ORICHALCUM_PULSE,
|
||||||
|
[Species.ARTICUNO]: Abilities.SNOW_WARNING,
|
||||||
|
[Species.ZAPDOS]: Abilities.DRIZZLE,
|
||||||
|
[Species.MOLTRES]: Abilities.DROUGHT,
|
||||||
|
[Species.DRATINI]: Abilities.AERILATE,
|
||||||
|
[Species.MEWTWO]: Abilities.NEUROFORCE,
|
||||||
|
[Species.MEW]: Abilities.PROTEAN,
|
||||||
|
[Species.CHIKORITA]: Abilities.THICK_FAT,
|
||||||
|
[Species.CYNDAQUIL]: Abilities.DROUGHT,
|
||||||
|
[Species.TOTODILE]: Abilities.TOUGH_CLAWS,
|
||||||
|
[Species.SENTRET]: Abilities.PICKUP,
|
||||||
|
[Species.HOOTHOOT]: Abilities.AERILATE,
|
||||||
|
[Species.LEDYBA]: Abilities.PRANKSTER,
|
||||||
|
[Species.SPINARAK]: Abilities.PRANKSTER,
|
||||||
|
[Species.CHINCHOU]: Abilities.WATER_BUBBLE,
|
||||||
|
[Species.PICHU]: Abilities.ELECTRIC_SURGE,
|
||||||
|
[Species.CLEFFA]: Abilities.ANALYTIC,
|
||||||
|
[Species.IGGLYBUFF]: Abilities.HUGE_POWER,
|
||||||
|
[Species.TOGEPI]: Abilities.PIXILATE,
|
||||||
|
[Species.NATU]: Abilities.TINTED_LENS,
|
||||||
|
[Species.MAREEP]: Abilities.ELECTROMORPHOSIS,
|
||||||
|
[Species.HOPPIP]: Abilities.FLUFFY,
|
||||||
|
[Species.AIPOM]: Abilities.SCRAPPY,
|
||||||
|
[Species.SUNKERN]: Abilities.DROUGHT,
|
||||||
|
[Species.YANMA]: Abilities.SHEER_FORCE,
|
||||||
|
[Species.WOOPER]: Abilities.COMATOSE,
|
||||||
|
[Species.MURKROW]: Abilities.DARK_AURA,
|
||||||
|
[Species.MISDREAVUS]: Abilities.BEADS_OF_RUIN,
|
||||||
|
[Species.UNOWN]: Abilities.PICKUP,
|
||||||
|
[Species.GIRAFARIG]: Abilities.PARENTAL_BOND,
|
||||||
|
[Species.PINECO]: Abilities.IRON_BARBS,
|
||||||
|
[Species.DUNSPARCE]: Abilities.UNAWARE,
|
||||||
|
[Species.GLIGAR]: Abilities.TOXIC_BOOST,
|
||||||
|
[Species.SNUBBULL]: Abilities.PIXILATE,
|
||||||
|
[Species.QWILFISH]: Abilities.TOXIC_DEBRIS,
|
||||||
|
[Species.SHUCKLE]: Abilities.HARVEST,
|
||||||
|
[Species.HERACROSS]: Abilities.TECHNICIAN,
|
||||||
|
[Species.SNEASEL]: Abilities.TOUGH_CLAWS,
|
||||||
|
[Species.TEDDIURSA]: Abilities.THICK_FAT,
|
||||||
|
[Species.SLUGMA]: Abilities.DESOLATE_LAND,
|
||||||
|
[Species.SWINUB]: Abilities.SLUSH_RUSH,
|
||||||
|
[Species.CORSOLA]: Abilities.STORM_DRAIN,
|
||||||
|
[Species.REMORAID]: Abilities.SIMPLE,
|
||||||
|
[Species.DELIBIRD]: Abilities.HUGE_POWER,
|
||||||
|
[Species.SKARMORY]: Abilities.LIGHTNING_ROD,
|
||||||
|
[Species.HOUNDOUR]: Abilities.DROUGHT,
|
||||||
|
[Species.PHANPY]: Abilities.SPEED_BOOST,
|
||||||
|
[Species.STANTLER]: Abilities.SPEED_BOOST,
|
||||||
|
[Species.SMEARGLE]: Abilities.PRANKSTER,
|
||||||
|
[Species.TYROGUE]: Abilities.MOXIE,
|
||||||
|
[Species.SMOOCHUM]: Abilities.PSYCHIC_SURGE,
|
||||||
|
[Species.ELEKID]: Abilities.SHEER_FORCE,
|
||||||
|
[Species.MAGBY]: Abilities.CONTRARY,
|
||||||
|
[Species.MILTANK]: Abilities.STAMINA,
|
||||||
|
[Species.RAIKOU]: Abilities.TRANSISTOR,
|
||||||
|
[Species.ENTEI]: Abilities.MOXIE,
|
||||||
|
[Species.SUICUNE]: Abilities.UNAWARE,
|
||||||
|
[Species.LARVITAR]: Abilities.SAND_RUSH,
|
||||||
|
[Species.LUGIA]: Abilities.DELTA_STREAM,
|
||||||
|
[Species.HO_OH]: Abilities.MAGIC_GUARD,
|
||||||
|
[Species.CELEBI]: Abilities.PSYCHIC_SURGE,
|
||||||
|
[Species.TREECKO]: Abilities.TINTED_LENS,
|
||||||
|
[Species.TORCHIC]: Abilities.RECKLESS,
|
||||||
|
[Species.MUDKIP]: Abilities.DRIZZLE,
|
||||||
|
[Species.POOCHYENA]: Abilities.TOUGH_CLAWS,
|
||||||
|
[Species.ZIGZAGOON]: Abilities.RUN_AWAY,
|
||||||
|
[Species.WURMPLE]: Abilities.SIMPLE,
|
||||||
|
[Species.LOTAD]: Abilities.DRIZZLE,
|
||||||
|
[Species.SEEDOT]: Abilities.SHARPNESS,
|
||||||
|
[Species.TAILLOW]: Abilities.AERILATE,
|
||||||
|
[Species.WINGULL]: Abilities.SWIFT_SWIM,
|
||||||
|
[Species.RALTS]: Abilities.PSYCHIC_SURGE,
|
||||||
|
[Species.SURSKIT]: Abilities.WATER_BUBBLE,
|
||||||
|
[Species.SHROOMISH]: Abilities.GUTS,
|
||||||
|
[Species.SLAKOTH]: Abilities.GUTS,
|
||||||
|
[Species.NINCADA]: Abilities.MAGIC_GUARD,
|
||||||
|
[Species.WHISMUR]: Abilities.PUNK_ROCK,
|
||||||
|
[Species.MAKUHITA]: Abilities.STAMINA,
|
||||||
|
[Species.AZURILL]: Abilities.MISTY_SURGE,
|
||||||
|
[Species.NOSEPASS]: Abilities.LEVITATE,
|
||||||
|
[Species.SKITTY]: Abilities.SCRAPPY,
|
||||||
|
[Species.SABLEYE]: Abilities.UNNERVE,
|
||||||
|
[Species.MAWILE]: Abilities.UNNERVE,
|
||||||
|
[Species.ARON]: Abilities.EARTH_EATER,
|
||||||
|
[Species.MEDITITE]: Abilities.MINDS_EYE,
|
||||||
|
[Species.ELECTRIKE]: Abilities.ELECTRIC_SURGE,
|
||||||
|
[Species.PLUSLE]: Abilities.POWER_SPOT,
|
||||||
|
[Species.MINUN]: Abilities.POWER_SPOT,
|
||||||
|
[Species.VOLBEAT]: Abilities.HONEY_GATHER,
|
||||||
|
[Species.ILLUMISE]: Abilities.HONEY_GATHER,
|
||||||
|
[Species.GULPIN]: Abilities.EARTH_EATER,
|
||||||
|
[Species.CARVANHA]: Abilities.SHEER_FORCE,
|
||||||
|
[Species.WAILMER]: Abilities.LEVITATE,
|
||||||
|
[Species.NUMEL]: Abilities.FUR_COAT,
|
||||||
|
[Species.TORKOAL]: Abilities.ANALYTIC,
|
||||||
|
[Species.SPOINK]: Abilities.PSYCHIC_SURGE,
|
||||||
|
[Species.SPINDA]: Abilities.SIMPLE,
|
||||||
|
[Species.TRAPINCH]: Abilities.ADAPTABILITY,
|
||||||
|
[Species.CACNEA]: Abilities.SAND_RUSH,
|
||||||
|
[Species.SWABLU]: Abilities.ADAPTABILITY,
|
||||||
|
[Species.ZANGOOSE]: Abilities.POISON_HEAL,
|
||||||
|
[Species.SEVIPER]: Abilities.MULTISCALE,
|
||||||
|
[Species.LUNATONE]: Abilities.SHADOW_SHIELD,
|
||||||
|
[Species.SOLROCK]: Abilities.DROUGHT,
|
||||||
|
[Species.BARBOACH]: Abilities.SIMPLE,
|
||||||
|
[Species.CORPHISH]: Abilities.TOUGH_CLAWS,
|
||||||
|
[Species.BALTOY]: Abilities.WELL_BAKED_BODY,
|
||||||
|
[Species.LILEEP]: Abilities.SEED_SOWER,
|
||||||
|
[Species.ANORITH]: Abilities.WATER_ABSORB,
|
||||||
|
[Species.FEEBAS]: Abilities.MAGIC_GUARD,
|
||||||
|
[Species.CASTFORM]: Abilities.ADAPTABILITY,
|
||||||
|
[Species.KECLEON]: Abilities.ADAPTABILITY,
|
||||||
|
[Species.SHUPPET]: Abilities.SHADOW_SHIELD,
|
||||||
|
[Species.DUSKULL]: Abilities.UNNERVE,
|
||||||
|
[Species.TROPIUS]: Abilities.RIPEN,
|
||||||
|
[Species.ABSOL]: Abilities.SHARPNESS,
|
||||||
|
[Species.WYNAUT]: Abilities.STURDY,
|
||||||
|
[Species.SNORUNT]: Abilities.SNOW_WARNING,
|
||||||
|
[Species.SPHEAL]: Abilities.UNAWARE,
|
||||||
|
[Species.CLAMPERL]: Abilities.DRIZZLE,
|
||||||
|
[Species.RELICANTH]: Abilities.PRIMORDIAL_SEA,
|
||||||
|
[Species.LUVDISC]: Abilities.MULTISCALE,
|
||||||
|
[Species.BAGON]: Abilities.DRAGONS_MAW,
|
||||||
|
[Species.BELDUM]: Abilities.LEVITATE,
|
||||||
|
[Species.REGIROCK]: Abilities.SAND_STREAM,
|
||||||
|
[Species.REGICE]: Abilities.SNOW_WARNING,
|
||||||
|
[Species.REGISTEEL]: Abilities.FILTER,
|
||||||
|
[Species.LATIAS]: Abilities.PRISM_ARMOR,
|
||||||
|
[Species.LATIOS]: Abilities.TINTED_LENS,
|
||||||
|
[Species.KYOGRE]: Abilities.MOLD_BREAKER,
|
||||||
|
[Species.GROUDON]: Abilities.TURBOBLAZE,
|
||||||
|
[Species.RAYQUAZA]: Abilities.UNNERVE,
|
||||||
|
[Species.JIRACHI]: Abilities.COMATOSE,
|
||||||
|
[Species.DEOXYS]: Abilities.PROTEAN,
|
||||||
|
[Species.TURTWIG]: Abilities.THICK_FAT,
|
||||||
|
[Species.CHIMCHAR]: Abilities.BEAST_BOOST,
|
||||||
|
[Species.PIPLUP]: Abilities.DRIZZLE,
|
||||||
|
[Species.STARLY]: Abilities.ROCK_HEAD,
|
||||||
|
[Species.BIDOOF]: Abilities.SAP_SIPPER,
|
||||||
|
[Species.KRICKETOT]: Abilities.SHARPNESS,
|
||||||
|
[Species.SHINX]: Abilities.SPEED_BOOST,
|
||||||
|
[Species.BUDEW]: Abilities.GRASSY_SURGE,
|
||||||
|
[Species.CRANIDOS]: Abilities.ROCK_HEAD,
|
||||||
|
[Species.SHIELDON]: Abilities.EARTH_EATER,
|
||||||
|
[Species.BURMY]: Abilities.STURDY,
|
||||||
|
[Species.COMBEE]: Abilities.INTIMIDATE,
|
||||||
|
[Species.PACHIRISU]: Abilities.HONEY_GATHER,
|
||||||
|
[Species.BUIZEL]: Abilities.MOXIE,
|
||||||
|
[Species.CHERUBI]: Abilities.ORICHALCUM_PULSE,
|
||||||
|
[Species.SHELLOS]: Abilities.REGENERATOR,
|
||||||
|
[Species.DRIFLOON]: Abilities.MAGIC_GUARD,
|
||||||
|
[Species.BUNEARY]: Abilities.ADAPTABILITY,
|
||||||
|
[Species.GLAMEOW]: Abilities.INTIMIDATE,
|
||||||
|
[Species.CHINGLING]: Abilities.PUNK_ROCK,
|
||||||
|
[Species.STUNKY]: Abilities.NEUTRALIZING_GAS,
|
||||||
|
[Species.BRONZOR]: Abilities.BULLETPROOF,
|
||||||
|
[Species.BONSLY]: Abilities.SAP_SIPPER,
|
||||||
|
[Species.MIME_JR]: Abilities.OPPORTUNIST,
|
||||||
|
[Species.HAPPINY]: Abilities.FUR_COAT,
|
||||||
|
[Species.CHATOT]: Abilities.PUNK_ROCK,
|
||||||
|
[Species.SPIRITOMB]: Abilities.VESSEL_OF_RUIN,
|
||||||
|
[Species.GIBLE]: Abilities.SAND_STREAM,
|
||||||
|
[Species.MUNCHLAX]: Abilities.RIPEN,
|
||||||
|
[Species.RIOLU]: Abilities.MINDS_EYE,
|
||||||
|
[Species.HIPPOPOTAS]: Abilities.UNAWARE,
|
||||||
|
[Species.SKORUPI]: Abilities.SUPER_LUCK,
|
||||||
|
[Species.CROAGUNK]: Abilities.MOXIE,
|
||||||
|
[Species.CARNIVINE]: Abilities.ARENA_TRAP,
|
||||||
|
[Species.FINNEON]: Abilities.WATER_BUBBLE,
|
||||||
|
[Species.MANTYKE]: Abilities.UNAWARE,
|
||||||
|
[Species.SNOVER]: Abilities.THICK_FAT,
|
||||||
|
[Species.ROTOM]: Abilities.HADRON_ENGINE,
|
||||||
|
[Species.UXIE]: Abilities.UNAWARE,
|
||||||
|
[Species.MESPRIT]: Abilities.MOODY,
|
||||||
|
[Species.AZELF]: Abilities.NEUROFORCE,
|
||||||
|
[Species.DIALGA]: Abilities.LEVITATE,
|
||||||
|
[Species.PALKIA]: Abilities.SPEED_BOOST,
|
||||||
|
[Species.HEATRAN]: Abilities.EARTH_EATER,
|
||||||
|
[Species.REGIGIGAS]: Abilities.SCRAPPY,
|
||||||
|
[Species.GIRATINA]: Abilities.SHADOW_SHIELD,
|
||||||
|
[Species.CRESSELIA]: Abilities.SHADOW_SHIELD,
|
||||||
|
[Species.PHIONE]: Abilities.SIMPLE,
|
||||||
|
[Species.MANAPHY]: Abilities.PRIMORDIAL_SEA,
|
||||||
|
[Species.DARKRAI]: Abilities.UNNERVE,
|
||||||
|
[Species.SHAYMIN]: Abilities.WIND_RIDER,
|
||||||
|
[Species.ARCEUS]: Abilities.ADAPTABILITY,
|
||||||
|
[Species.VICTINI]: Abilities.SHEER_FORCE,
|
||||||
|
[Species.SNIVY]: Abilities.MULTISCALE,
|
||||||
|
[Species.TEPIG]: Abilities.ROCK_HEAD,
|
||||||
|
[Species.OSHAWOTT]: Abilities.INTREPID_SWORD,
|
||||||
|
[Species.PATRAT]: Abilities.NO_GUARD,
|
||||||
|
[Species.LILLIPUP]: Abilities.FUR_COAT,
|
||||||
|
[Species.PURRLOIN]: Abilities.PICKUP,
|
||||||
|
[Species.PANSAGE]: Abilities.WELL_BAKED_BODY,
|
||||||
|
[Species.PANSEAR]: Abilities.WATER_ABSORB,
|
||||||
|
[Species.PANPOUR]: Abilities.SAP_SIPPER,
|
||||||
|
[Species.MUNNA]: Abilities.NEUTRALIZING_GAS,
|
||||||
|
[Species.PIDOVE]: Abilities.SNIPER,
|
||||||
|
[Species.BLITZLE]: Abilities.ELECTRIC_SURGE,
|
||||||
|
[Species.ROGGENROLA]: Abilities.SOLID_ROCK,
|
||||||
|
[Species.WOOBAT]: Abilities.OPPORTUNIST,
|
||||||
|
[Species.DRILBUR]: Abilities.SAND_STREAM,
|
||||||
|
[Species.AUDINO]: Abilities.FRIEND_GUARD,
|
||||||
|
[Species.TIMBURR]: Abilities.ROCKY_PAYLOAD,
|
||||||
|
[Species.TYMPOLE]: Abilities.POISON_HEAL,
|
||||||
|
[Species.THROH]: Abilities.STAMINA,
|
||||||
|
[Species.SAWK]: Abilities.SCRAPPY,
|
||||||
|
[Species.SEWADDLE]: Abilities.SHARPNESS,
|
||||||
|
[Species.VENIPEDE]: Abilities.STAMINA,
|
||||||
|
[Species.COTTONEE]: Abilities.FLUFFY,
|
||||||
|
[Species.PETILIL]: Abilities.SIMPLE,
|
||||||
|
[Species.BASCULIN]: Abilities.SUPREME_OVERLORD,
|
||||||
|
[Species.SANDILE]: Abilities.TOUGH_CLAWS,
|
||||||
|
[Species.DARUMAKA]: Abilities.GORILLA_TACTICS,
|
||||||
|
[Species.MARACTUS]: Abilities.WELL_BAKED_BODY,
|
||||||
|
[Species.DWEBBLE]: Abilities.ROCKY_PAYLOAD,
|
||||||
|
[Species.SCRAGGY]: Abilities.PROTEAN,
|
||||||
|
[Species.SIGILYPH]: Abilities.FLARE_BOOST,
|
||||||
|
[Species.YAMASK]: Abilities.PURIFYING_SALT,
|
||||||
|
[Species.TIRTOUGA]: Abilities.WATER_ABSORB,
|
||||||
|
[Species.ARCHEN]: Abilities.MULTISCALE,
|
||||||
|
[Species.TRUBBISH]: Abilities.NEUTRALIZING_GAS,
|
||||||
|
[Species.ZORUA]: Abilities.DARK_AURA,
|
||||||
|
[Species.MINCCINO]: Abilities.FUR_COAT,
|
||||||
|
[Species.GOTHITA]: Abilities.UNNERVE,
|
||||||
|
[Species.SOLOSIS]: Abilities.PSYCHIC_SURGE,
|
||||||
|
[Species.DUCKLETT]: Abilities.DRIZZLE,
|
||||||
|
[Species.VANILLITE]: Abilities.SLUSH_RUSH,
|
||||||
|
[Species.DEERLING]: Abilities.FUR_COAT,
|
||||||
|
[Species.EMOLGA]: Abilities.TRANSISTOR,
|
||||||
|
[Species.KARRABLAST]: Abilities.QUICK_DRAW,
|
||||||
|
[Species.FOONGUS]: Abilities.THICK_FAT,
|
||||||
|
[Species.FRILLISH]: Abilities.POISON_HEAL,
|
||||||
|
[Species.ALOMOMOLA]: Abilities.MULTISCALE,
|
||||||
|
[Species.JOLTIK]: Abilities.TRANSISTOR,
|
||||||
|
[Species.FERROSEED]: Abilities.ROUGH_SKIN,
|
||||||
|
[Species.KLINK]: Abilities.STEELY_SPIRIT,
|
||||||
|
[Species.TYNAMO]: Abilities.POISON_HEAL,
|
||||||
|
[Species.ELGYEM]: Abilities.PRISM_ARMOR,
|
||||||
|
[Species.LITWICK]: Abilities.SOUL_HEART,
|
||||||
|
[Species.AXEW]: Abilities.DRAGONS_MAW,
|
||||||
|
[Species.CUBCHOO]: Abilities.TOUGH_CLAWS,
|
||||||
|
[Species.CRYOGONAL]: Abilities.SNOW_WARNING,
|
||||||
|
[Species.SHELMET]: Abilities.PROTEAN,
|
||||||
|
[Species.STUNFISK]: Abilities.STORM_DRAIN,
|
||||||
|
[Species.MIENFOO]: Abilities.NO_GUARD,
|
||||||
|
[Species.DRUDDIGON]: Abilities.INTIMIDATE,
|
||||||
|
[Species.GOLETT]: Abilities.SHADOW_SHIELD,
|
||||||
|
[Species.PAWNIARD]: Abilities.SWORD_OF_RUIN,
|
||||||
|
[Species.BOUFFALANT]: Abilities.ROCK_HEAD,
|
||||||
|
[Species.RUFFLET]: Abilities.SPEED_BOOST,
|
||||||
|
[Species.VULLABY]: Abilities.THICK_FAT,
|
||||||
|
[Species.HEATMOR]: Abilities.CONTRARY,
|
||||||
|
[Species.DURANT]: Abilities.COMPOUND_EYES,
|
||||||
|
[Species.DEINO]: Abilities.PARENTAL_BOND,
|
||||||
|
[Species.LARVESTA]: Abilities.DROUGHT,
|
||||||
|
[Species.COBALION]: Abilities.INTREPID_SWORD,
|
||||||
|
[Species.TERRAKION]: Abilities.ROCKY_PAYLOAD,
|
||||||
|
[Species.VIRIZION]: Abilities.SHARPNESS,
|
||||||
|
[Species.TORNADUS]: Abilities.DRIZZLE,
|
||||||
|
[Species.THUNDURUS]: Abilities.DRIZZLE,
|
||||||
|
[Species.RESHIRAM]: Abilities.ORICHALCUM_PULSE,
|
||||||
|
[Species.ZEKROM]: Abilities.HADRON_ENGINE,
|
||||||
|
[Species.LANDORUS]: Abilities.STORM_DRAIN,
|
||||||
|
[Species.KYUREM]: Abilities.SNOW_WARNING,
|
||||||
|
[Species.KELDEO]: Abilities.GRIM_NEIGH,
|
||||||
|
[Species.MELOETTA]: Abilities.MINDS_EYE,
|
||||||
|
[Species.GENESECT]: Abilities.PROTEAN,
|
||||||
|
[Species.CHESPIN]: Abilities.DAUNTLESS_SHIELD,
|
||||||
|
[Species.FENNEKIN]: Abilities.PSYCHIC_SURGE,
|
||||||
|
[Species.FROAKIE]: Abilities.STAKEOUT,
|
||||||
|
[Species.BUNNELBY]: Abilities.GUTS,
|
||||||
|
[Species.FLETCHLING]: Abilities.MAGIC_GUARD,
|
||||||
|
[Species.SCATTERBUG]: Abilities.PRANKSTER,
|
||||||
|
[Species.LITLEO]: Abilities.BEAST_BOOST,
|
||||||
|
[Species.FLABEBE]: Abilities.GRASSY_SURGE,
|
||||||
|
[Species.SKIDDO]: Abilities.SEED_SOWER,
|
||||||
|
[Species.PANCHAM]: Abilities.FUR_COAT,
|
||||||
|
[Species.FURFROU]: Abilities.FLUFFY,
|
||||||
|
[Species.ESPURR]: Abilities.FUR_COAT,
|
||||||
|
[Species.HONEDGE]: Abilities.SHARPNESS,
|
||||||
|
[Species.SPRITZEE]: Abilities.FUR_COAT,
|
||||||
|
[Species.SWIRLIX]: Abilities.WELL_BAKED_BODY,
|
||||||
|
[Species.INKAY]: Abilities.UNNERVE,
|
||||||
|
[Species.BINACLE]: Abilities.SAP_SIPPER,
|
||||||
|
[Species.SKRELP]: Abilities.DRAGONS_MAW,
|
||||||
|
[Species.CLAUNCHER]: Abilities.SWIFT_SWIM,
|
||||||
|
[Species.HELIOPTILE]: Abilities.PROTEAN,
|
||||||
|
[Species.TYRUNT]: Abilities.RECKLESS,
|
||||||
|
[Species.AMAURA]: Abilities.ICE_SCALES,
|
||||||
|
[Species.HAWLUCHA]: Abilities.MOXIE,
|
||||||
|
[Species.DEDENNE]: Abilities.PIXILATE,
|
||||||
|
[Species.CARBINK]: Abilities.SOLID_ROCK,
|
||||||
|
[Species.GOOMY]: Abilities.REGENERATOR,
|
||||||
|
[Species.KLEFKI]: Abilities.LEVITATE,
|
||||||
|
[Species.PHANTUMP]: Abilities.SHADOW_TAG,
|
||||||
|
[Species.PUMPKABOO]: Abilities.WELL_BAKED_BODY,
|
||||||
|
[Species.BERGMITE]: Abilities.ICE_SCALES,
|
||||||
|
[Species.NOIBAT]: Abilities.PUNK_ROCK,
|
||||||
|
[Species.XERNEAS]: Abilities.HARVEST,
|
||||||
|
[Species.YVELTAL]: Abilities.SOUL_HEART,
|
||||||
|
[Species.ZYGARDE]: Abilities.HUGE_POWER,
|
||||||
|
[Species.DIANCIE]: Abilities.LEVITATE,
|
||||||
|
[Species.HOOPA]: Abilities.OPPORTUNIST,
|
||||||
|
[Species.VOLCANION]: Abilities.FILTER,
|
||||||
|
[Species.ROWLET]: Abilities.SNIPER,
|
||||||
|
[Species.LITTEN]: Abilities.OPPORTUNIST,
|
||||||
|
[Species.POPPLIO]: Abilities.PUNK_ROCK,
|
||||||
|
[Species.PIKIPEK]: Abilities.TECHNICIAN,
|
||||||
|
[Species.YUNGOOS]: Abilities.TOUGH_CLAWS,
|
||||||
|
[Species.GRUBBIN]: Abilities.SPEED_BOOST,
|
||||||
|
[Species.CRABRAWLER]: Abilities.WATER_BUBBLE,
|
||||||
|
[Species.ORICORIO]: Abilities.ADAPTABILITY,
|
||||||
|
[Species.CUTIEFLY]: Abilities.TINTED_LENS,
|
||||||
|
[Species.ROCKRUFF]: Abilities.ROCKY_PAYLOAD,
|
||||||
|
[Species.WISHIWASHI]: Abilities.REGENERATOR,
|
||||||
|
[Species.MAREANIE]: Abilities.TOXIC_DEBRIS,
|
||||||
|
[Species.MUDBRAY]: Abilities.CUD_CHEW,
|
||||||
|
[Species.DEWPIDER]: Abilities.TINTED_LENS,
|
||||||
|
[Species.FOMANTIS]: Abilities.SHARPNESS,
|
||||||
|
[Species.MORELULL]: Abilities.TRIAGE,
|
||||||
|
[Species.SALANDIT]: Abilities.DRAGONS_MAW,
|
||||||
|
[Species.STUFFUL]: Abilities.SCRAPPY,
|
||||||
|
[Species.BOUNSWEET]: Abilities.MOXIE,
|
||||||
|
[Species.COMFEY]: Abilities.FRIEND_GUARD,
|
||||||
|
[Species.ORANGURU]: Abilities.POWER_SPOT,
|
||||||
|
[Species.PASSIMIAN]: Abilities.LIBERO,
|
||||||
|
[Species.WIMPOD]: Abilities.REGENERATOR,
|
||||||
|
[Species.SANDYGAST]: Abilities.SAND_SPIT,
|
||||||
|
[Species.PYUKUMUKU]: Abilities.PURIFYING_SALT,
|
||||||
|
[Species.TYPE_NULL]: Abilities.ADAPTABILITY,
|
||||||
|
[Species.MINIOR]: Abilities.STURDY,
|
||||||
|
[Species.KOMALA]: Abilities.GUTS,
|
||||||
|
[Species.TURTONATOR]: Abilities.DAUNTLESS_SHIELD,
|
||||||
|
[Species.TOGEDEMARU]: Abilities.ROUGH_SKIN,
|
||||||
|
[Species.MIMIKYU]: Abilities.TOUGH_CLAWS,
|
||||||
|
[Species.BRUXISH]: Abilities.MULTISCALE,
|
||||||
|
[Species.DRAMPA]: Abilities.THICK_FAT,
|
||||||
|
[Species.DHELMISE]: Abilities.WATER_BUBBLE,
|
||||||
|
[Species.JANGMO_O]: Abilities.DAUNTLESS_SHIELD,
|
||||||
|
[Species.TAPU_KOKO]: Abilities.TRANSISTOR,
|
||||||
|
[Species.TAPU_LELE]: Abilities.SHEER_FORCE,
|
||||||
|
[Species.TAPU_BULU]: Abilities.TRIAGE,
|
||||||
|
[Species.TAPU_FINI]: Abilities.FAIRY_AURA,
|
||||||
|
[Species.COSMOG]: Abilities.BEAST_BOOST,
|
||||||
|
[Species.NIHILEGO]: Abilities.LEVITATE,
|
||||||
|
[Species.BUZZWOLE]: Abilities.MOXIE,
|
||||||
|
[Species.PHEROMOSA]: Abilities.TINTED_LENS,
|
||||||
|
[Species.XURKITREE]: Abilities.TRANSISTOR,
|
||||||
|
[Species.CELESTEELA]: Abilities.HEATPROOF,
|
||||||
|
[Species.KARTANA]: Abilities.SHARPNESS,
|
||||||
|
[Species.GUZZLORD]: Abilities.POISON_HEAL,
|
||||||
|
[Species.NECROZMA]: Abilities.BEAST_BOOST,
|
||||||
|
[Species.MAGEARNA]: Abilities.STEELY_SPIRIT,
|
||||||
|
[Species.MARSHADOW]: Abilities.IRON_FIST,
|
||||||
|
[Species.POIPOLE]: Abilities.SHEER_FORCE,
|
||||||
|
[Species.STAKATAKA]: Abilities.SOLID_ROCK,
|
||||||
|
[Species.BLACEPHALON]: Abilities.MAGIC_GUARD,
|
||||||
|
[Species.ZERAORA]: Abilities.TOUGH_CLAWS,
|
||||||
|
[Species.MELTAN]: Abilities.STEELY_SPIRIT,
|
||||||
|
[Species.GROOKEY]: Abilities.GRASS_PELT,
|
||||||
|
[Species.SCORBUNNY]: Abilities.NO_GUARD,
|
||||||
|
[Species.SOBBLE]: Abilities.SUPER_LUCK,
|
||||||
|
[Species.SKWOVET]: Abilities.HARVEST,
|
||||||
|
[Species.ROOKIDEE]: Abilities.IRON_BARBS,
|
||||||
|
[Species.BLIPBUG]: Abilities.PSYCHIC_SURGE,
|
||||||
|
[Species.NICKIT]: Abilities.MAGICIAN,
|
||||||
|
[Species.GOSSIFLEUR]: Abilities.GRASSY_SURGE,
|
||||||
|
[Species.WOOLOO]: Abilities.SIMPLE,
|
||||||
|
[Species.CHEWTLE]: Abilities.ROCKY_PAYLOAD,
|
||||||
|
[Species.YAMPER]: Abilities.SHEER_FORCE,
|
||||||
|
[Species.ROLYCOLY]: Abilities.SOLID_ROCK,
|
||||||
|
[Species.APPLIN]: Abilities.DRAGONS_MAW,
|
||||||
|
[Species.SILICOBRA]: Abilities.SAND_RUSH,
|
||||||
|
[Species.CRAMORANT]: Abilities.LIGHTNING_ROD,
|
||||||
|
[Species.ARROKUDA]: Abilities.INTIMIDATE,
|
||||||
|
[Species.TOXEL]: Abilities.ELECTRIC_SURGE,
|
||||||
|
[Species.SIZZLIPEDE]: Abilities.SPEED_BOOST,
|
||||||
|
[Species.CLOBBOPUS]: Abilities.WATER_BUBBLE,
|
||||||
|
[Species.SINISTEA]: Abilities.SHADOW_SHIELD,
|
||||||
|
[Species.HATENNA]: Abilities.FAIRY_AURA,
|
||||||
|
[Species.IMPIDIMP]: Abilities.FUR_COAT,
|
||||||
|
[Species.MILCERY]: Abilities.REGENERATOR,
|
||||||
|
[Species.FALINKS]: Abilities.PARENTAL_BOND,
|
||||||
|
[Species.PINCURCHIN]: Abilities.ELECTROMORPHOSIS,
|
||||||
|
[Species.SNOM]: Abilities.SNOW_WARNING,
|
||||||
|
[Species.STONJOURNER]: Abilities.STURDY,
|
||||||
|
[Species.EISCUE]: Abilities.ICE_SCALES,
|
||||||
|
[Species.INDEEDEE]: Abilities.FRIEND_GUARD,
|
||||||
|
[Species.MORPEKO]: Abilities.MOODY,
|
||||||
|
[Species.CUFANT]: Abilities.EARTH_EATER,
|
||||||
|
[Species.DRACOZOLT]: Abilities.NO_GUARD,
|
||||||
|
[Species.ARCTOZOLT]: Abilities.TRANSISTOR,
|
||||||
|
[Species.DRACOVISH]: Abilities.SWIFT_SWIM,
|
||||||
|
[Species.ARCTOVISH]: Abilities.STRONG_JAW,
|
||||||
|
[Species.DURALUDON]: Abilities.STEELWORKER,
|
||||||
|
[Species.DREEPY]: Abilities.PARENTAL_BOND,
|
||||||
|
[Species.ZACIAN]: Abilities.UNNERVE,
|
||||||
|
[Species.ZAMAZENTA]: Abilities.UNNERVE,
|
||||||
|
[Species.ETERNATUS]: Abilities.NEUTRALIZING_GAS,
|
||||||
|
[Species.KUBFU]: Abilities.IRON_FIST,
|
||||||
|
[Species.ZARUDE]: Abilities.TOUGH_CLAWS,
|
||||||
|
[Species.REGIELEKI]: Abilities.ELECTRIC_SURGE,
|
||||||
|
[Species.REGIDRAGO]: Abilities.MULTISCALE,
|
||||||
|
[Species.GLASTRIER]: Abilities.FILTER,
|
||||||
|
[Species.SPECTRIER]: Abilities.SHADOW_SHIELD,
|
||||||
|
[Species.CALYREX]: Abilities.HARVEST,
|
||||||
|
[Species.ENAMORUS]: Abilities.FAIRY_AURA,
|
||||||
|
[Species.SPRIGATITO]: Abilities.MAGICIAN,
|
||||||
|
[Species.FUECOCO]: Abilities.PUNK_ROCK,
|
||||||
|
[Species.QUAXLY]: Abilities.OPPORTUNIST,
|
||||||
|
[Species.LECHONK]: Abilities.SIMPLE,
|
||||||
|
[Species.TAROUNTULA]: Abilities.HONEY_GATHER,
|
||||||
|
[Species.NYMBLE]: Abilities.GUTS,
|
||||||
|
[Species.PAWMI]: Abilities.TRANSISTOR,
|
||||||
|
[Species.TANDEMAUS]: Abilities.SCRAPPY,
|
||||||
|
[Species.FIDOUGH]: Abilities.WATER_ABSORB,
|
||||||
|
[Species.SMOLIV]: Abilities.RIPEN,
|
||||||
|
[Species.SQUAWKABILLY]: Abilities.MOXIE,
|
||||||
|
[Species.NACLI]: Abilities.SOLID_ROCK,
|
||||||
|
[Species.CHARCADET]: Abilities.PRISM_ARMOR,
|
||||||
|
[Species.TADBULB]: Abilities.STAMINA,
|
||||||
|
[Species.WATTREL]: Abilities.SHEER_FORCE,
|
||||||
|
[Species.MASCHIFF]: Abilities.STRONG_JAW,
|
||||||
|
[Species.SHROODLE]: Abilities.CORROSION,
|
||||||
|
[Species.BRAMBLIN]: Abilities.SHADOW_SHIELD,
|
||||||
|
[Species.TOEDSCOOL]: Abilities.PRANKSTER,
|
||||||
|
[Species.KLAWF]: Abilities.WATER_ABSORB,
|
||||||
|
[Species.CAPSAKID]: Abilities.PARENTAL_BOND,
|
||||||
|
[Species.RELLOR]: Abilities.PRANKSTER,
|
||||||
|
[Species.FLITTLE]: Abilities.DAZZLING,
|
||||||
|
[Species.TINKATINK]: Abilities.STEELWORKER,
|
||||||
|
[Species.WIGLETT]: Abilities.STURDY,
|
||||||
|
[Species.BOMBIRDIER]: Abilities.UNBURDEN,
|
||||||
|
[Species.FINIZEN]: Abilities.IRON_FIST,
|
||||||
|
[Species.VAROOM]: Abilities.LEVITATE,
|
||||||
|
[Species.CYCLIZAR]: Abilities.PROTEAN,
|
||||||
|
[Species.ORTHWORM]: Abilities.REGENERATOR,
|
||||||
|
[Species.GLIMMET]: Abilities.LEVITATE,
|
||||||
|
[Species.GREAVARD]: Abilities.FUR_COAT,
|
||||||
|
[Species.FLAMIGO]: Abilities.MOXIE,
|
||||||
|
[Species.CETODDLE]: Abilities.ICE_SCALES,
|
||||||
|
[Species.VELUZA]: Abilities.SUPER_LUCK,
|
||||||
|
[Species.DONDOZO]: Abilities.PARENTAL_BOND,
|
||||||
|
[Species.TATSUGIRI]: Abilities.ADAPTABILITY,
|
||||||
|
[Species.GREAT_TUSK]: Abilities.INTIMIDATE,
|
||||||
|
[Species.SCREAM_TAIL]: Abilities.UNAWARE,
|
||||||
|
[Species.BRUTE_BONNET]: Abilities.CHLOROPHYLL,
|
||||||
|
[Species.FLUTTER_MANE]: Abilities.DAZZLING,
|
||||||
|
[Species.SLITHER_WING]: Abilities.SCRAPPY,
|
||||||
|
[Species.SANDY_SHOCKS]: Abilities.EARTH_EATER,
|
||||||
|
[Species.IRON_TREADS]: Abilities.STEELY_SPIRIT,
|
||||||
|
[Species.IRON_BUNDLE]: Abilities.SNOW_WARNING,
|
||||||
|
[Species.IRON_HANDS]: Abilities.IRON_FIST,
|
||||||
|
[Species.IRON_JUGULIS]: Abilities.LIGHTNING_ROD,
|
||||||
|
[Species.IRON_MOTH]: Abilities.LEVITATE,
|
||||||
|
[Species.IRON_THORNS]: Abilities.SAND_STREAM,
|
||||||
|
[Species.FRIGIBAX]: Abilities.SNOW_WARNING,
|
||||||
|
[Species.GIMMIGHOUL]: Abilities.HONEY_GATHER,
|
||||||
|
[Species.WO_CHIEN]: Abilities.VESSEL_OF_RUIN,
|
||||||
|
[Species.CHIEN_PAO]: Abilities.INTIMIDATE,
|
||||||
|
[Species.TING_LU]: Abilities.STAMINA,
|
||||||
|
[Species.CHI_YU]: Abilities.BERSERK,
|
||||||
|
[Species.ROARING_MOON]: Abilities.TOUGH_CLAWS,
|
||||||
|
[Species.IRON_VALIANT]: Abilities.ADAPTABILITY,
|
||||||
|
[Species.KORAIDON]: Abilities.OPPORTUNIST,
|
||||||
|
[Species.MIRAIDON]: Abilities.OPPORTUNIST,
|
||||||
|
[Species.WALKING_WAKE]: Abilities.BEAST_BOOST,
|
||||||
|
[Species.IRON_LEAVES]: Abilities.SHARPNESS,
|
||||||
|
[Species.POLTCHAGEIST]: Abilities.TRIAGE,
|
||||||
|
[Species.OKIDOGI]: Abilities.FUR_COAT,
|
||||||
|
[Species.MUNKIDORI]: Abilities.NEUROFORCE,
|
||||||
|
[Species.FEZANDIPITI]: Abilities.LEVITATE,
|
||||||
|
[Species.OGERPON]: Abilities.OPPORTUNIST,
|
||||||
|
[Species.GOUGING_FIRE]: Abilities.BEAST_BOOST,
|
||||||
|
[Species.RAGING_BOLT]: Abilities.BEAST_BOOST,
|
||||||
|
[Species.IRON_BOULDER]: Abilities.SHARPNESS,
|
||||||
|
[Species.IRON_CROWN]: Abilities.SHARPNESS,
|
||||||
|
[Species.TERAPAGOS]: Abilities.SOUL_HEART,
|
||||||
|
[Species.PECHARUNT]: Abilities.TOXIC_CHAIN,
|
||||||
|
[Species.ALOLA_RATTATA]: Abilities.ADAPTABILITY,
|
||||||
|
[Species.ALOLA_SANDSHREW]: Abilities.ICE_SCALES,
|
||||||
|
[Species.ALOLA_VULPIX]: Abilities.SHEER_FORCE,
|
||||||
|
[Species.ALOLA_DIGLETT]: Abilities.STURDY,
|
||||||
|
[Species.ALOLA_MEOWTH]: Abilities.DARK_AURA,
|
||||||
|
[Species.ALOLA_GEODUDE]: Abilities.DRY_SKIN,
|
||||||
|
[Species.ALOLA_GRIMER]: Abilities.TOXIC_DEBRIS,
|
||||||
|
[Species.ETERNAL_FLOETTE]: Abilities.MAGIC_GUARD,
|
||||||
|
[Species.GALAR_MEOWTH]: Abilities.STEELWORKER,
|
||||||
|
[Species.GALAR_PONYTA]: Abilities.MOXIE,
|
||||||
|
[Species.GALAR_SLOWPOKE]: Abilities.UNAWARE,
|
||||||
|
[Species.GALAR_FARFETCHD]: Abilities.INTREPID_SWORD,
|
||||||
|
[Species.GALAR_ARTICUNO]: Abilities.SERENE_GRACE,
|
||||||
|
[Species.GALAR_ZAPDOS]: Abilities.TOUGH_CLAWS,
|
||||||
|
[Species.GALAR_MOLTRES]: Abilities.DARK_AURA,
|
||||||
|
[Species.GALAR_CORSOLA]: Abilities.SHADOW_SHIELD,
|
||||||
|
[Species.GALAR_ZIGZAGOON]: Abilities.POISON_HEAL,
|
||||||
|
[Species.GALAR_DARUMAKA]: Abilities.FLASH_FIRE,
|
||||||
|
[Species.GALAR_YAMASK]: Abilities.TABLETS_OF_RUIN,
|
||||||
|
[Species.GALAR_STUNFISK]: Abilities.ARENA_TRAP,
|
||||||
|
[Species.HISUI_GROWLITHE]: Abilities.RECKLESS,
|
||||||
|
[Species.HISUI_VOLTORB]: Abilities.TRANSISTOR,
|
||||||
|
[Species.HISUI_QWILFISH]: Abilities.MERCILESS,
|
||||||
|
[Species.HISUI_SNEASEL]: Abilities.SCRAPPY,
|
||||||
|
[Species.HISUI_ZORUA]: Abilities.ADAPTABILITY,
|
||||||
|
[Species.PALDEA_TAUROS]: Abilities.ADAPTABILITY,
|
||||||
|
[Species.PALDEA_WOOPER]: Abilities.THICK_FAT,
|
||||||
|
[Species.BLOODMOON_URSALUNA]: Abilities.BERSERK
|
||||||
|
};
|
|
@ -1,11 +1,11 @@
|
||||||
import { Gender } from "./gender";
|
import { Gender } from "#app/data/gender";
|
||||||
import { PokeballType } from "./pokeball";
|
import { PokeballType } from "#app/data/pokeball";
|
||||||
import Pokemon from "../field/pokemon";
|
import Pokemon from "#app/field/pokemon";
|
||||||
import { Stat } from "#enums/stat";
|
import { Stat } from "#enums/stat";
|
||||||
import { Type } from "./type";
|
import { Type } from "#app/data/type";
|
||||||
import * as Utils from "../utils";
|
import * as Utils from "#app/utils";
|
||||||
import { WeatherType } from "./weather";
|
import { WeatherType } from "#app/data/weather";
|
||||||
import { Nature } from "./nature";
|
import { Nature } from "#app/data/nature";
|
||||||
import { Biome } from "#enums/biome";
|
import { Biome } from "#enums/biome";
|
||||||
import { Moves } from "#enums/moves";
|
import { Moves } from "#enums/moves";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
|
@ -0,0 +1,53 @@
|
||||||
|
/**
|
||||||
|
* Rates for shinies and other random properties are defined in this file.
|
||||||
|
* CHANCE is defined as x/65536
|
||||||
|
* RATE is defined as 1/x
|
||||||
|
*/
|
||||||
|
|
||||||
|
// #region Encounterable properties
|
||||||
|
/** `64/65536 -> 1/1024` */
|
||||||
|
export const BASE_SHINY_CHANCE = 64;
|
||||||
|
|
||||||
|
/** `256/65536 -> 1/256` */
|
||||||
|
export const BASE_HIDDEN_ABILITY_CHANCE = 256;
|
||||||
|
|
||||||
|
// #region Egg properties
|
||||||
|
|
||||||
|
// Threshold x at which a gacha egg is determined to be a certain tier
|
||||||
|
// Specifically, the tier is determined by the highest threshold a random value between 0-255 meets or exceeds
|
||||||
|
// Legendary Up Gacha raises these thresholds by 1, thereby giving Legendary eggs 2/256 chance
|
||||||
|
export const GACHA_DEFAULT_COMMON_EGG_THRESHOLD = 52; // Default 204/256 chance, 203/256 chance in Legendary Up Gacha
|
||||||
|
export const GACHA_DEFAULT_RARE_EGG_THRESHOLD = 8; // Default 44/256 chance
|
||||||
|
export const GACHA_DEFAULT_EPIC_EGG_THRESHOLD = 1; // Default 7/256 chance, leaving Legendary as 1/256 chance
|
||||||
|
export const GACHA_LEGENDARY_UP_THRESHOLD_OFFSET = 1; // The offset to threshold for Legendary Up gacha eggs. +x/256 Legendary Egg chance, -x/256 Common Egg chance
|
||||||
|
|
||||||
|
// The number of eggs without finding a certain tier egg it takes for egg pity to kick in and that tier to be forced
|
||||||
|
// These numbers are roughly the 80% mark. That is, 80% of the time you'll get an egg before this gets triggered.
|
||||||
|
export const EGG_PITY_LEGENDARY_THRESHOLD = 412;
|
||||||
|
export const EGG_PITY_EPIC_THRESHOLD = 59;
|
||||||
|
export const EGG_PITY_RARE_THRESHOLD = 9;
|
||||||
|
|
||||||
|
// Waves to hatch an egg of a given tier
|
||||||
|
export const HATCH_WAVES_COMMON_EGG = 10;
|
||||||
|
export const HATCH_WAVES_RARE_EGG = 25;
|
||||||
|
export const HATCH_WAVES_EPIC_EGG = 50;
|
||||||
|
export const HATCH_WAVES_LEGENDARY_EGG = 100;
|
||||||
|
export const HATCH_WAVES_MANAPHY_EGG = 50;
|
||||||
|
|
||||||
|
// Rates for specific random properties in 1/x
|
||||||
|
export const GACHA_DEFAULT_SHINY_RATE = 128;
|
||||||
|
export const GACHA_SHINY_UP_SHINY_RATE = 64;
|
||||||
|
export const SAME_SPECIES_EGG_SHINY_RATE = 12;
|
||||||
|
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;
|
||||||
|
|
||||||
|
// #region Variant properties
|
||||||
|
// The chance x/10 of a shiny being a variant, then of being specifically an epic variant
|
||||||
|
export const SHINY_VARIANT_CHANCE = 4;
|
||||||
|
export const SHINY_EPIC_CHANCE = 1;
|
|
@ -0,0 +1,671 @@
|
||||||
|
import { Species } from "#enums/species";
|
||||||
|
|
||||||
|
export const POKERUS_STARTER_COUNT = 5;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to get the cumulative friendship threshold at which a candy is earned
|
||||||
|
* @param starterCost The cost of the starter, found in {@linkcode speciesStarterCosts}
|
||||||
|
* @returns aforementioned threshold
|
||||||
|
*/
|
||||||
|
export function getStarterValueFriendshipCap(starterCost: number): number {
|
||||||
|
switch (starterCost) {
|
||||||
|
case 1:
|
||||||
|
return 20;
|
||||||
|
case 2:
|
||||||
|
return 40;
|
||||||
|
case 3:
|
||||||
|
return 60;
|
||||||
|
case 4:
|
||||||
|
return 100;
|
||||||
|
case 5:
|
||||||
|
return 140;
|
||||||
|
case 6:
|
||||||
|
return 200;
|
||||||
|
case 7:
|
||||||
|
return 280;
|
||||||
|
case 8:
|
||||||
|
case 9:
|
||||||
|
return 450;
|
||||||
|
default:
|
||||||
|
return 600;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const speciesStarterCosts = {
|
||||||
|
[Species.BULBASAUR]: 3,
|
||||||
|
[Species.CHARMANDER]: 3,
|
||||||
|
[Species.SQUIRTLE]: 3,
|
||||||
|
[Species.CATERPIE]: 2,
|
||||||
|
[Species.WEEDLE]: 1,
|
||||||
|
[Species.PIDGEY]: 1,
|
||||||
|
[Species.RATTATA]: 1,
|
||||||
|
[Species.SPEAROW]: 1,
|
||||||
|
[Species.EKANS]: 2,
|
||||||
|
[Species.PIKACHU]: 3,
|
||||||
|
[Species.SANDSHREW]: 2,
|
||||||
|
[Species.NIDORAN_F]: 3,
|
||||||
|
[Species.NIDORAN_M]: 3,
|
||||||
|
[Species.CLEFAIRY]: 3,
|
||||||
|
[Species.VULPIX]: 3,
|
||||||
|
[Species.JIGGLYPUFF]: 2,
|
||||||
|
[Species.ZUBAT]: 3,
|
||||||
|
[Species.ODDISH]: 3,
|
||||||
|
[Species.PARAS]: 2,
|
||||||
|
[Species.VENONAT]: 2,
|
||||||
|
[Species.DIGLETT]: 2,
|
||||||
|
[Species.MEOWTH]: 3,
|
||||||
|
[Species.PSYDUCK]: 2,
|
||||||
|
[Species.MANKEY]: 4,
|
||||||
|
[Species.GROWLITHE]: 4,
|
||||||
|
[Species.POLIWAG]: 2,
|
||||||
|
[Species.ABRA]: 4,
|
||||||
|
[Species.MACHOP]: 3,
|
||||||
|
[Species.BELLSPROUT]: 2,
|
||||||
|
[Species.TENTACOOL]: 3,
|
||||||
|
[Species.GEODUDE]: 3,
|
||||||
|
[Species.PONYTA]: 2,
|
||||||
|
[Species.SLOWPOKE]: 3,
|
||||||
|
[Species.MAGNEMITE]: 4,
|
||||||
|
[Species.FARFETCHD]: 2,
|
||||||
|
[Species.DODUO]: 3,
|
||||||
|
[Species.SEEL]: 1,
|
||||||
|
[Species.GRIMER]: 2,
|
||||||
|
[Species.SHELLDER]: 5,
|
||||||
|
[Species.GASTLY]: 4,
|
||||||
|
[Species.ONIX]: 3,
|
||||||
|
[Species.DROWZEE]: 2,
|
||||||
|
[Species.KRABBY]: 3,
|
||||||
|
[Species.VOLTORB]: 2,
|
||||||
|
[Species.EXEGGCUTE]: 3,
|
||||||
|
[Species.CUBONE]: 3,
|
||||||
|
[Species.HITMONLEE]: 4,
|
||||||
|
[Species.HITMONCHAN]: 4,
|
||||||
|
[Species.LICKITUNG]: 3,
|
||||||
|
[Species.KOFFING]: 2,
|
||||||
|
[Species.RHYHORN]: 3,
|
||||||
|
[Species.CHANSEY]: 3,
|
||||||
|
[Species.TANGELA]: 3,
|
||||||
|
[Species.KANGASKHAN]: 4,
|
||||||
|
[Species.HORSEA]: 3,
|
||||||
|
[Species.GOLDEEN]: 2,
|
||||||
|
[Species.STARYU]: 3,
|
||||||
|
[Species.MR_MIME]: 3,
|
||||||
|
[Species.SCYTHER]: 5,
|
||||||
|
[Species.JYNX]: 4,
|
||||||
|
[Species.ELECTABUZZ]: 4,
|
||||||
|
[Species.MAGMAR]: 4,
|
||||||
|
[Species.PINSIR]: 4,
|
||||||
|
[Species.TAUROS]: 4,
|
||||||
|
[Species.MAGIKARP]: 4,
|
||||||
|
[Species.LAPRAS]: 4,
|
||||||
|
[Species.DITTO]: 2,
|
||||||
|
[Species.EEVEE]: 3,
|
||||||
|
[Species.PORYGON]: 4,
|
||||||
|
[Species.OMANYTE]: 3,
|
||||||
|
[Species.KABUTO]: 3,
|
||||||
|
[Species.AERODACTYL]: 5,
|
||||||
|
[Species.SNORLAX]: 5,
|
||||||
|
[Species.ARTICUNO]: 6,
|
||||||
|
[Species.ZAPDOS]: 6,
|
||||||
|
[Species.MOLTRES]: 6,
|
||||||
|
[Species.DRATINI]: 4,
|
||||||
|
[Species.MEWTWO]: 8,
|
||||||
|
[Species.MEW]: 6,
|
||||||
|
|
||||||
|
[Species.CHIKORITA]: 2,
|
||||||
|
[Species.CYNDAQUIL]: 3,
|
||||||
|
[Species.TOTODILE]: 3,
|
||||||
|
[Species.SENTRET]: 1,
|
||||||
|
[Species.HOOTHOOT]: 2,
|
||||||
|
[Species.LEDYBA]: 1,
|
||||||
|
[Species.SPINARAK]: 1,
|
||||||
|
[Species.CHINCHOU]: 2,
|
||||||
|
[Species.PICHU]: 2,
|
||||||
|
[Species.CLEFFA]: 2,
|
||||||
|
[Species.IGGLYBUFF]: 1,
|
||||||
|
[Species.TOGEPI]: 3,
|
||||||
|
[Species.NATU]: 2,
|
||||||
|
[Species.MAREEP]: 2,
|
||||||
|
[Species.MARILL]: 4,
|
||||||
|
[Species.SUDOWOODO]: 3,
|
||||||
|
[Species.HOPPIP]: 2,
|
||||||
|
[Species.AIPOM]: 2,
|
||||||
|
[Species.SUNKERN]: 1,
|
||||||
|
[Species.YANMA]: 3,
|
||||||
|
[Species.WOOPER]: 2,
|
||||||
|
[Species.MURKROW]: 3,
|
||||||
|
[Species.MISDREAVUS]: 2,
|
||||||
|
[Species.UNOWN]: 1,
|
||||||
|
[Species.WOBBUFFET]: 2,
|
||||||
|
[Species.GIRAFARIG]: 3,
|
||||||
|
[Species.PINECO]: 2,
|
||||||
|
[Species.DUNSPARCE]: 3,
|
||||||
|
[Species.GLIGAR]: 3,
|
||||||
|
[Species.SNUBBULL]: 2,
|
||||||
|
[Species.QWILFISH]: 3,
|
||||||
|
[Species.SHUCKLE]: 3,
|
||||||
|
[Species.HERACROSS]: 5,
|
||||||
|
[Species.SNEASEL]: 4,
|
||||||
|
[Species.TEDDIURSA]: 4,
|
||||||
|
[Species.SLUGMA]: 2,
|
||||||
|
[Species.SWINUB]: 3,
|
||||||
|
[Species.CORSOLA]: 2,
|
||||||
|
[Species.REMORAID]: 2,
|
||||||
|
[Species.DELIBIRD]: 2,
|
||||||
|
[Species.MANTINE]: 3,
|
||||||
|
[Species.SKARMORY]: 4,
|
||||||
|
[Species.HOUNDOUR]: 3,
|
||||||
|
[Species.PHANPY]: 3,
|
||||||
|
[Species.STANTLER]: 3,
|
||||||
|
[Species.SMEARGLE]: 1,
|
||||||
|
[Species.TYROGUE]: 3,
|
||||||
|
[Species.SMOOCHUM]: 3,
|
||||||
|
[Species.ELEKID]: 3,
|
||||||
|
[Species.MAGBY]: 3,
|
||||||
|
[Species.MILTANK]: 4,
|
||||||
|
[Species.RAIKOU]: 6,
|
||||||
|
[Species.ENTEI]: 6,
|
||||||
|
[Species.SUICUNE]: 6,
|
||||||
|
[Species.LARVITAR]: 4,
|
||||||
|
[Species.LUGIA]: 8,
|
||||||
|
[Species.HO_OH]: 8,
|
||||||
|
[Species.CELEBI]: 6,
|
||||||
|
|
||||||
|
[Species.TREECKO]: 3,
|
||||||
|
[Species.TORCHIC]: 4,
|
||||||
|
[Species.MUDKIP]: 3,
|
||||||
|
[Species.POOCHYENA]: 2,
|
||||||
|
[Species.ZIGZAGOON]: 2,
|
||||||
|
[Species.WURMPLE]: 1,
|
||||||
|
[Species.LOTAD]: 3,
|
||||||
|
[Species.SEEDOT]: 2,
|
||||||
|
[Species.TAILLOW]: 3,
|
||||||
|
[Species.WINGULL]: 2,
|
||||||
|
[Species.RALTS]: 3,
|
||||||
|
[Species.SURSKIT]: 2,
|
||||||
|
[Species.SHROOMISH]: 3,
|
||||||
|
[Species.SLAKOTH]: 4,
|
||||||
|
[Species.NINCADA]: 4,
|
||||||
|
[Species.WHISMUR]: 2,
|
||||||
|
[Species.MAKUHITA]: 3,
|
||||||
|
[Species.AZURILL]: 4,
|
||||||
|
[Species.NOSEPASS]: 2,
|
||||||
|
[Species.SKITTY]: 1,
|
||||||
|
[Species.SABLEYE]: 2,
|
||||||
|
[Species.MAWILE]: 3,
|
||||||
|
[Species.ARON]: 3,
|
||||||
|
[Species.MEDITITE]: 3,
|
||||||
|
[Species.ELECTRIKE]: 2,
|
||||||
|
[Species.PLUSLE]: 2,
|
||||||
|
[Species.MINUN]: 2,
|
||||||
|
[Species.VOLBEAT]: 2,
|
||||||
|
[Species.ILLUMISE]: 2,
|
||||||
|
[Species.ROSELIA]: 3,
|
||||||
|
[Species.GULPIN]: 1,
|
||||||
|
[Species.CARVANHA]: 3,
|
||||||
|
[Species.WAILMER]: 2,
|
||||||
|
[Species.NUMEL]: 2,
|
||||||
|
[Species.TORKOAL]: 3,
|
||||||
|
[Species.SPOINK]: 2,
|
||||||
|
[Species.SPINDA]: 1,
|
||||||
|
[Species.TRAPINCH]: 3,
|
||||||
|
[Species.CACNEA]: 2,
|
||||||
|
[Species.SWABLU]: 2,
|
||||||
|
[Species.ZANGOOSE]: 4,
|
||||||
|
[Species.SEVIPER]: 3,
|
||||||
|
[Species.LUNATONE]: 3,
|
||||||
|
[Species.SOLROCK]: 3,
|
||||||
|
[Species.BARBOACH]: 2,
|
||||||
|
[Species.CORPHISH]: 3,
|
||||||
|
[Species.BALTOY]: 2,
|
||||||
|
[Species.LILEEP]: 3,
|
||||||
|
[Species.ANORITH]: 3,
|
||||||
|
[Species.FEEBAS]: 4,
|
||||||
|
[Species.CASTFORM]: 1,
|
||||||
|
[Species.KECLEON]: 2,
|
||||||
|
[Species.SHUPPET]: 2,
|
||||||
|
[Species.DUSKULL]: 3,
|
||||||
|
[Species.TROPIUS]: 3,
|
||||||
|
[Species.CHIMECHO]: 3,
|
||||||
|
[Species.ABSOL]: 4,
|
||||||
|
[Species.WYNAUT]: 2,
|
||||||
|
[Species.SNORUNT]: 2,
|
||||||
|
[Species.SPHEAL]: 2,
|
||||||
|
[Species.CLAMPERL]: 3,
|
||||||
|
[Species.RELICANTH]: 3,
|
||||||
|
[Species.LUVDISC]: 1,
|
||||||
|
[Species.BAGON]: 4,
|
||||||
|
[Species.BELDUM]: 4,
|
||||||
|
[Species.REGIROCK]: 6,
|
||||||
|
[Species.REGICE]: 6,
|
||||||
|
[Species.REGISTEEL]: 6,
|
||||||
|
[Species.LATIAS]: 7,
|
||||||
|
[Species.LATIOS]: 7,
|
||||||
|
[Species.KYOGRE]: 9,
|
||||||
|
[Species.GROUDON]: 9,
|
||||||
|
[Species.RAYQUAZA]: 9,
|
||||||
|
[Species.JIRACHI]: 7,
|
||||||
|
[Species.DEOXYS]: 7,
|
||||||
|
|
||||||
|
[Species.TURTWIG]: 3,
|
||||||
|
[Species.CHIMCHAR]: 3,
|
||||||
|
[Species.PIPLUP]: 3,
|
||||||
|
[Species.STARLY]: 3,
|
||||||
|
[Species.BIDOOF]: 2,
|
||||||
|
[Species.KRICKETOT]: 1,
|
||||||
|
[Species.SHINX]: 2,
|
||||||
|
[Species.BUDEW]: 3,
|
||||||
|
[Species.CRANIDOS]: 3,
|
||||||
|
[Species.SHIELDON]: 3,
|
||||||
|
[Species.BURMY]: 2,
|
||||||
|
[Species.COMBEE]: 2,
|
||||||
|
[Species.PACHIRISU]: 2,
|
||||||
|
[Species.BUIZEL]: 2,
|
||||||
|
[Species.CHERUBI]: 1,
|
||||||
|
[Species.SHELLOS]: 3,
|
||||||
|
[Species.DRIFLOON]: 2,
|
||||||
|
[Species.BUNEARY]: 2,
|
||||||
|
[Species.GLAMEOW]: 2,
|
||||||
|
[Species.CHINGLING]: 2,
|
||||||
|
[Species.STUNKY]: 2,
|
||||||
|
[Species.BRONZOR]: 3,
|
||||||
|
[Species.BONSLY]: 2,
|
||||||
|
[Species.MIME_JR]: 2,
|
||||||
|
[Species.HAPPINY]: 2,
|
||||||
|
[Species.CHATOT]: 2,
|
||||||
|
[Species.SPIRITOMB]: 4,
|
||||||
|
[Species.GIBLE]: 4,
|
||||||
|
[Species.MUNCHLAX]: 4,
|
||||||
|
[Species.RIOLU]: 3,
|
||||||
|
[Species.HIPPOPOTAS]: 3,
|
||||||
|
[Species.SKORUPI]: 3,
|
||||||
|
[Species.CROAGUNK]: 2,
|
||||||
|
[Species.CARNIVINE]: 2,
|
||||||
|
[Species.FINNEON]: 1,
|
||||||
|
[Species.MANTYKE]: 2,
|
||||||
|
[Species.SNOVER]: 2,
|
||||||
|
[Species.ROTOM]: 5,
|
||||||
|
[Species.UXIE]: 6,
|
||||||
|
[Species.MESPRIT]: 6,
|
||||||
|
[Species.AZELF]: 6,
|
||||||
|
[Species.DIALGA]: 8,
|
||||||
|
[Species.PALKIA]: 8,
|
||||||
|
[Species.HEATRAN]: 6,
|
||||||
|
[Species.REGIGIGAS]: 7,
|
||||||
|
[Species.GIRATINA]: 8,
|
||||||
|
[Species.CRESSELIA]: 6,
|
||||||
|
[Species.PHIONE]: 4,
|
||||||
|
[Species.MANAPHY]: 7,
|
||||||
|
[Species.DARKRAI]: 7,
|
||||||
|
[Species.SHAYMIN]: 6,
|
||||||
|
[Species.ARCEUS]: 9,
|
||||||
|
|
||||||
|
[Species.VICTINI]: 7,
|
||||||
|
[Species.SNIVY]: 3,
|
||||||
|
[Species.TEPIG]: 3,
|
||||||
|
[Species.OSHAWOTT]: 3,
|
||||||
|
[Species.PATRAT]: 1,
|
||||||
|
[Species.LILLIPUP]: 3,
|
||||||
|
[Species.PURRLOIN]: 2,
|
||||||
|
[Species.PANSAGE]: 2,
|
||||||
|
[Species.PANSEAR]: 2,
|
||||||
|
[Species.PANPOUR]: 2,
|
||||||
|
[Species.MUNNA]: 2,
|
||||||
|
[Species.PIDOVE]: 1,
|
||||||
|
[Species.BLITZLE]: 2,
|
||||||
|
[Species.ROGGENROLA]: 3,
|
||||||
|
[Species.WOOBAT]: 3,
|
||||||
|
[Species.DRILBUR]: 4,
|
||||||
|
[Species.AUDINO]: 3,
|
||||||
|
[Species.TIMBURR]: 4,
|
||||||
|
[Species.TYMPOLE]: 3,
|
||||||
|
[Species.THROH]: 4,
|
||||||
|
[Species.SAWK]: 4,
|
||||||
|
[Species.SEWADDLE]: 2,
|
||||||
|
[Species.VENIPEDE]: 3,
|
||||||
|
[Species.COTTONEE]: 3,
|
||||||
|
[Species.PETILIL]: 3,
|
||||||
|
[Species.BASCULIN]: 4,
|
||||||
|
[Species.SANDILE]: 4,
|
||||||
|
[Species.DARUMAKA]: 4,
|
||||||
|
[Species.MARACTUS]: 2,
|
||||||
|
[Species.DWEBBLE]: 2,
|
||||||
|
[Species.SCRAGGY]: 3,
|
||||||
|
[Species.SIGILYPH]: 4,
|
||||||
|
[Species.YAMASK]: 3,
|
||||||
|
[Species.TIRTOUGA]: 3,
|
||||||
|
[Species.ARCHEN]: 3,
|
||||||
|
[Species.TRUBBISH]: 2,
|
||||||
|
[Species.ZORUA]: 3,
|
||||||
|
[Species.MINCCINO]: 3,
|
||||||
|
[Species.GOTHITA]: 3,
|
||||||
|
[Species.SOLOSIS]: 3,
|
||||||
|
[Species.DUCKLETT]: 2,
|
||||||
|
[Species.VANILLITE]: 3,
|
||||||
|
[Species.DEERLING]: 2,
|
||||||
|
[Species.EMOLGA]: 2,
|
||||||
|
[Species.KARRABLAST]: 3,
|
||||||
|
[Species.FOONGUS]: 2,
|
||||||
|
[Species.FRILLISH]: 3,
|
||||||
|
[Species.ALOMOMOLA]: 4,
|
||||||
|
[Species.JOLTIK]: 3,
|
||||||
|
[Species.FERROSEED]: 3,
|
||||||
|
[Species.KLINK]: 3,
|
||||||
|
[Species.TYNAMO]: 2,
|
||||||
|
[Species.ELGYEM]: 2,
|
||||||
|
[Species.LITWICK]: 3,
|
||||||
|
[Species.AXEW]: 4,
|
||||||
|
[Species.CUBCHOO]: 2,
|
||||||
|
[Species.CRYOGONAL]: 4,
|
||||||
|
[Species.SHELMET]: 2,
|
||||||
|
[Species.STUNFISK]: 3,
|
||||||
|
[Species.MIENFOO]: 3,
|
||||||
|
[Species.DRUDDIGON]: 4,
|
||||||
|
[Species.GOLETT]: 3,
|
||||||
|
[Species.PAWNIARD]: 4,
|
||||||
|
[Species.BOUFFALANT]: 4,
|
||||||
|
[Species.RUFFLET]: 3,
|
||||||
|
[Species.VULLABY]: 3,
|
||||||
|
[Species.HEATMOR]: 3,
|
||||||
|
[Species.DURANT]: 4,
|
||||||
|
[Species.DEINO]: 4,
|
||||||
|
[Species.LARVESTA]: 4,
|
||||||
|
[Species.COBALION]: 6,
|
||||||
|
[Species.TERRAKION]: 6,
|
||||||
|
[Species.VIRIZION]: 6,
|
||||||
|
[Species.TORNADUS]: 7,
|
||||||
|
[Species.THUNDURUS]: 7,
|
||||||
|
[Species.RESHIRAM]: 8,
|
||||||
|
[Species.ZEKROM]: 8,
|
||||||
|
[Species.LANDORUS]: 7,
|
||||||
|
[Species.KYUREM]: 8,
|
||||||
|
[Species.KELDEO]: 6,
|
||||||
|
[Species.MELOETTA]: 7,
|
||||||
|
[Species.GENESECT]: 6,
|
||||||
|
|
||||||
|
[Species.CHESPIN]: 3,
|
||||||
|
[Species.FENNEKIN]: 3,
|
||||||
|
[Species.FROAKIE]: 4,
|
||||||
|
[Species.BUNNELBY]: 3,
|
||||||
|
[Species.FLETCHLING]: 3,
|
||||||
|
[Species.SCATTERBUG]: 2,
|
||||||
|
[Species.LITLEO]: 2,
|
||||||
|
[Species.FLABEBE]: 3,
|
||||||
|
[Species.SKIDDO]: 2,
|
||||||
|
[Species.PANCHAM]: 3,
|
||||||
|
[Species.FURFROU]: 3,
|
||||||
|
[Species.ESPURR]: 2,
|
||||||
|
[Species.HONEDGE]: 4,
|
||||||
|
[Species.SPRITZEE]: 2,
|
||||||
|
[Species.SWIRLIX]: 3,
|
||||||
|
[Species.INKAY]: 3,
|
||||||
|
[Species.BINACLE]: 3,
|
||||||
|
[Species.SKRELP]: 2,
|
||||||
|
[Species.CLAUNCHER]: 3,
|
||||||
|
[Species.HELIOPTILE]: 3,
|
||||||
|
[Species.TYRUNT]: 3,
|
||||||
|
[Species.AMAURA]: 3,
|
||||||
|
[Species.HAWLUCHA]: 4,
|
||||||
|
[Species.DEDENNE]: 2,
|
||||||
|
[Species.CARBINK]: 2,
|
||||||
|
[Species.GOOMY]: 4,
|
||||||
|
[Species.KLEFKI]: 3,
|
||||||
|
[Species.PHANTUMP]: 2,
|
||||||
|
[Species.PUMPKABOO]: 2,
|
||||||
|
[Species.BERGMITE]: 3,
|
||||||
|
[Species.NOIBAT]: 3,
|
||||||
|
[Species.XERNEAS]: 8,
|
||||||
|
[Species.YVELTAL]: 8,
|
||||||
|
[Species.ZYGARDE]: 8,
|
||||||
|
[Species.DIANCIE]: 7,
|
||||||
|
[Species.HOOPA]: 7,
|
||||||
|
[Species.VOLCANION]: 6,
|
||||||
|
[Species.ETERNAL_FLOETTE]: 4,
|
||||||
|
|
||||||
|
[Species.ROWLET]: 3,
|
||||||
|
[Species.LITTEN]: 3,
|
||||||
|
[Species.POPPLIO]: 4,
|
||||||
|
[Species.PIKIPEK]: 2,
|
||||||
|
[Species.YUNGOOS]: 2,
|
||||||
|
[Species.GRUBBIN]: 3,
|
||||||
|
[Species.CRABRAWLER]: 3,
|
||||||
|
[Species.ORICORIO]: 3,
|
||||||
|
[Species.CUTIEFLY]: 3,
|
||||||
|
[Species.ROCKRUFF]: 3,
|
||||||
|
[Species.WISHIWASHI]: 2,
|
||||||
|
[Species.MAREANIE]: 2,
|
||||||
|
[Species.MUDBRAY]: 3,
|
||||||
|
[Species.DEWPIDER]: 3,
|
||||||
|
[Species.FOMANTIS]: 2,
|
||||||
|
[Species.MORELULL]: 2,
|
||||||
|
[Species.SALANDIT]: 3,
|
||||||
|
[Species.STUFFUL]: 3,
|
||||||
|
[Species.BOUNSWEET]: 3,
|
||||||
|
[Species.COMFEY]: 4,
|
||||||
|
[Species.ORANGURU]: 4,
|
||||||
|
[Species.PASSIMIAN]: 4,
|
||||||
|
[Species.WIMPOD]: 3,
|
||||||
|
[Species.SANDYGAST]: 3,
|
||||||
|
[Species.PYUKUMUKU]: 2,
|
||||||
|
[Species.TYPE_NULL]: 5,
|
||||||
|
[Species.MINIOR]: 4,
|
||||||
|
[Species.KOMALA]: 3,
|
||||||
|
[Species.TURTONATOR]: 4,
|
||||||
|
[Species.TOGEDEMARU]: 3,
|
||||||
|
[Species.MIMIKYU]: 4,
|
||||||
|
[Species.BRUXISH]: 4,
|
||||||
|
[Species.DRAMPA]: 4,
|
||||||
|
[Species.DHELMISE]: 4,
|
||||||
|
[Species.JANGMO_O]: 4,
|
||||||
|
[Species.TAPU_KOKO]: 6,
|
||||||
|
[Species.TAPU_LELE]: 6,
|
||||||
|
[Species.TAPU_BULU]: 6,
|
||||||
|
[Species.TAPU_FINI]: 6,
|
||||||
|
[Species.COSMOG]: 7,
|
||||||
|
[Species.NIHILEGO]: 6,
|
||||||
|
[Species.BUZZWOLE]: 6,
|
||||||
|
[Species.PHEROMOSA]: 7,
|
||||||
|
[Species.XURKITREE]: 6,
|
||||||
|
[Species.CELESTEELA]: 6,
|
||||||
|
[Species.KARTANA]: 7,
|
||||||
|
[Species.GUZZLORD]: 6,
|
||||||
|
[Species.NECROZMA]: 8,
|
||||||
|
[Species.MAGEARNA]: 7,
|
||||||
|
[Species.MARSHADOW]: 7,
|
||||||
|
[Species.POIPOLE]: 7,
|
||||||
|
[Species.STAKATAKA]: 6,
|
||||||
|
[Species.BLACEPHALON]: 7,
|
||||||
|
[Species.ZERAORA]: 6,
|
||||||
|
[Species.MELTAN]: 6,
|
||||||
|
[Species.ALOLA_RATTATA]: 1,
|
||||||
|
[Species.ALOLA_SANDSHREW]: 2,
|
||||||
|
[Species.ALOLA_VULPIX]: 3,
|
||||||
|
[Species.ALOLA_DIGLETT]: 2,
|
||||||
|
[Species.ALOLA_MEOWTH]: 3,
|
||||||
|
[Species.ALOLA_GEODUDE]: 3,
|
||||||
|
[Species.ALOLA_GRIMER]: 3,
|
||||||
|
|
||||||
|
[Species.GROOKEY]: 3,
|
||||||
|
[Species.SCORBUNNY]: 4,
|
||||||
|
[Species.SOBBLE]: 3,
|
||||||
|
[Species.SKWOVET]: 2,
|
||||||
|
[Species.ROOKIDEE]: 3,
|
||||||
|
[Species.BLIPBUG]: 2,
|
||||||
|
[Species.NICKIT]: 1,
|
||||||
|
[Species.GOSSIFLEUR]: 2,
|
||||||
|
[Species.WOOLOO]: 2,
|
||||||
|
[Species.CHEWTLE]: 3,
|
||||||
|
[Species.YAMPER]: 2,
|
||||||
|
[Species.ROLYCOLY]: 3,
|
||||||
|
[Species.APPLIN]: 3,
|
||||||
|
[Species.SILICOBRA]: 3,
|
||||||
|
[Species.CRAMORANT]: 3,
|
||||||
|
[Species.ARROKUDA]: 3,
|
||||||
|
[Species.TOXEL]: 3,
|
||||||
|
[Species.SIZZLIPEDE]: 3,
|
||||||
|
[Species.CLOBBOPUS]: 2,
|
||||||
|
[Species.SINISTEA]: 3,
|
||||||
|
[Species.HATENNA]: 3,
|
||||||
|
[Species.IMPIDIMP]: 3,
|
||||||
|
[Species.MILCERY]: 3,
|
||||||
|
[Species.FALINKS]: 4,
|
||||||
|
[Species.PINCURCHIN]: 3,
|
||||||
|
[Species.SNOM]: 3,
|
||||||
|
[Species.STONJOURNER]: 3,
|
||||||
|
[Species.EISCUE]: 3,
|
||||||
|
[Species.INDEEDEE]: 4,
|
||||||
|
[Species.MORPEKO]: 3,
|
||||||
|
[Species.CUFANT]: 3,
|
||||||
|
[Species.DRACOZOLT]: 5,
|
||||||
|
[Species.ARCTOZOLT]: 4,
|
||||||
|
[Species.DRACOVISH]: 5,
|
||||||
|
[Species.ARCTOVISH]: 4,
|
||||||
|
[Species.DURALUDON]: 5,
|
||||||
|
[Species.DREEPY]: 4,
|
||||||
|
[Species.ZACIAN]: 9,
|
||||||
|
[Species.ZAMAZENTA]: 8,
|
||||||
|
[Species.ETERNATUS]: 10,
|
||||||
|
[Species.KUBFU]: 6,
|
||||||
|
[Species.ZARUDE]: 6,
|
||||||
|
[Species.REGIELEKI]: 6,
|
||||||
|
[Species.REGIDRAGO]: 6,
|
||||||
|
[Species.GLASTRIER]: 6,
|
||||||
|
[Species.SPECTRIER]: 7,
|
||||||
|
[Species.CALYREX]: 8,
|
||||||
|
[Species.GALAR_MEOWTH]: 3,
|
||||||
|
[Species.GALAR_PONYTA]: 2,
|
||||||
|
[Species.GALAR_SLOWPOKE]: 3,
|
||||||
|
[Species.GALAR_FARFETCHD]: 3,
|
||||||
|
[Species.GALAR_CORSOLA]: 3,
|
||||||
|
[Species.GALAR_ZIGZAGOON]: 3,
|
||||||
|
[Species.GALAR_DARUMAKA]: 4,
|
||||||
|
[Species.GALAR_YAMASK]: 3,
|
||||||
|
[Species.GALAR_STUNFISK]: 2,
|
||||||
|
[Species.GALAR_MR_MIME]: 3,
|
||||||
|
[Species.GALAR_ARTICUNO]: 6,
|
||||||
|
[Species.GALAR_ZAPDOS]: 6,
|
||||||
|
[Species.GALAR_MOLTRES]: 6,
|
||||||
|
[Species.HISUI_GROWLITHE]: 4,
|
||||||
|
[Species.HISUI_VOLTORB]: 3,
|
||||||
|
[Species.HISUI_QWILFISH]: 4,
|
||||||
|
[Species.HISUI_SNEASEL]: 5,
|
||||||
|
[Species.HISUI_ZORUA]: 3,
|
||||||
|
[Species.ENAMORUS]: 7,
|
||||||
|
|
||||||
|
[Species.SPRIGATITO]: 4,
|
||||||
|
[Species.FUECOCO]: 4,
|
||||||
|
[Species.QUAXLY]: 4,
|
||||||
|
[Species.LECHONK]: 2,
|
||||||
|
[Species.TAROUNTULA]: 1,
|
||||||
|
[Species.NYMBLE]: 3,
|
||||||
|
[Species.PAWMI]: 3,
|
||||||
|
[Species.TANDEMAUS]: 4,
|
||||||
|
[Species.FIDOUGH]: 2,
|
||||||
|
[Species.SMOLIV]: 3,
|
||||||
|
[Species.SQUAWKABILLY]: 2,
|
||||||
|
[Species.NACLI]: 4,
|
||||||
|
[Species.CHARCADET]: 4,
|
||||||
|
[Species.TADBULB]: 3,
|
||||||
|
[Species.WATTREL]: 3,
|
||||||
|
[Species.MASCHIFF]: 3,
|
||||||
|
[Species.SHROODLE]: 2,
|
||||||
|
[Species.BRAMBLIN]: 3,
|
||||||
|
[Species.TOEDSCOOL]: 3,
|
||||||
|
[Species.KLAWF]: 3,
|
||||||
|
[Species.CAPSAKID]: 3,
|
||||||
|
[Species.RELLOR]: 2,
|
||||||
|
[Species.FLITTLE]: 3,
|
||||||
|
[Species.TINKATINK]: 4,
|
||||||
|
[Species.WIGLETT]: 2,
|
||||||
|
[Species.BOMBIRDIER]: 3,
|
||||||
|
[Species.FINIZEN]: 3,
|
||||||
|
[Species.VAROOM]: 4,
|
||||||
|
[Species.CYCLIZAR]: 4,
|
||||||
|
[Species.ORTHWORM]: 4,
|
||||||
|
[Species.GLIMMET]: 4,
|
||||||
|
[Species.GREAVARD]: 3,
|
||||||
|
[Species.FLAMIGO]: 4,
|
||||||
|
[Species.CETODDLE]: 3,
|
||||||
|
[Species.VELUZA]: 4,
|
||||||
|
[Species.DONDOZO]: 4,
|
||||||
|
[Species.TATSUGIRI]: 4,
|
||||||
|
[Species.GREAT_TUSK]: 6,
|
||||||
|
[Species.SCREAM_TAIL]: 6,
|
||||||
|
[Species.BRUTE_BONNET]: 6,
|
||||||
|
[Species.FLUTTER_MANE]: 7,
|
||||||
|
[Species.SLITHER_WING]: 6,
|
||||||
|
[Species.SANDY_SHOCKS]: 6,
|
||||||
|
[Species.IRON_TREADS]: 6,
|
||||||
|
[Species.IRON_BUNDLE]: 6,
|
||||||
|
[Species.IRON_HANDS]: 6,
|
||||||
|
[Species.IRON_JUGULIS]: 6,
|
||||||
|
[Species.IRON_MOTH]: 6,
|
||||||
|
[Species.IRON_THORNS]: 6,
|
||||||
|
[Species.FRIGIBAX]: 4,
|
||||||
|
[Species.GIMMIGHOUL]: 4,
|
||||||
|
[Species.WO_CHIEN]: 6,
|
||||||
|
[Species.CHIEN_PAO]: 7,
|
||||||
|
[Species.TING_LU]: 6,
|
||||||
|
[Species.CHI_YU]: 7,
|
||||||
|
[Species.ROARING_MOON]: 6,
|
||||||
|
[Species.IRON_VALIANT]: 6,
|
||||||
|
[Species.KORAIDON]: 9,
|
||||||
|
[Species.MIRAIDON]: 9,
|
||||||
|
[Species.WALKING_WAKE]: 6,
|
||||||
|
[Species.IRON_LEAVES]: 6,
|
||||||
|
[Species.POLTCHAGEIST]: 4,
|
||||||
|
[Species.OKIDOGI]: 6,
|
||||||
|
[Species.MUNKIDORI]: 6,
|
||||||
|
[Species.FEZANDIPITI]: 6,
|
||||||
|
[Species.OGERPON]: 7,
|
||||||
|
[Species.GOUGING_FIRE]: 7,
|
||||||
|
[Species.RAGING_BOLT]: 6,
|
||||||
|
[Species.IRON_BOULDER]: 7,
|
||||||
|
[Species.IRON_CROWN]: 6,
|
||||||
|
[Species.TERAPAGOS]: 8,
|
||||||
|
[Species.PECHARUNT]: 6,
|
||||||
|
[Species.PALDEA_TAUROS]: 5,
|
||||||
|
[Species.PALDEA_WOOPER]: 3,
|
||||||
|
[Species.BLOODMOON_URSALUNA]: 6,
|
||||||
|
};
|
||||||
|
|
||||||
|
const starterCandyCosts: { passive: number; costReduction: [number, number]; egg: number; }[] = [
|
||||||
|
{ passive: 40, costReduction: [25, 60], egg: 30 }, // 1 Cost
|
||||||
|
{ passive: 40, costReduction: [25, 60], egg: 30 }, // 2 Cost
|
||||||
|
{ passive: 35, costReduction: [20, 50], egg: 25 }, // 3 Cost
|
||||||
|
{ passive: 30, costReduction: [15, 40], egg: 20 }, // 4 Cost
|
||||||
|
{ passive: 25, costReduction: [12, 35], egg: 18 }, // 5 Cost
|
||||||
|
{ passive: 20, costReduction: [10, 30], egg: 15 }, // 6 Cost
|
||||||
|
{ passive: 15, costReduction: [8, 20], egg: 12 }, // 7 Cost
|
||||||
|
{ passive: 10, costReduction: [5, 15], egg: 10 }, // 8 Cost
|
||||||
|
{ passive: 10, costReduction: [5, 15], egg: 10 }, // 9 Cost
|
||||||
|
{ passive: 10, costReduction: [5, 15], egg: 10 }, // 10 Cost
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for {@linkcode starterCandyCosts} for passive unlock candy cost based on initial point cost
|
||||||
|
* @param starterCost the default point cost of the starter found in {@linkcode speciesStarterCosts}
|
||||||
|
* @returns the candy cost for passive unlock
|
||||||
|
*/
|
||||||
|
export function getPassiveCandyCount(starterCost: number): number {
|
||||||
|
return starterCandyCosts[starterCost - 1].passive;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for {@linkcode starterCandyCosts} for value reduction unlock candy cost based on initial point cost
|
||||||
|
* @param starterCost the default point cost of the starter found in {@linkcode speciesStarterCosts}
|
||||||
|
* @returns respective candy cost for the two cost reductions as an array 2 numbers
|
||||||
|
*/
|
||||||
|
export function getValueReductionCandyCounts(starterCost: number): [number, number] {
|
||||||
|
return starterCandyCosts[starterCost - 1].costReduction;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for {@linkcode starterCandyCosts} for egg purchase candy cost based on initial point cost
|
||||||
|
* @param starterCost the default point cost of the starter found in {@linkcode speciesStarterCosts}
|
||||||
|
* @returns the candy cost for the purchasable egg
|
||||||
|
*/
|
||||||
|
export function getSameSpeciesEggCandyCounts(starterCost: number): number {
|
||||||
|
return starterCandyCosts[starterCost - 1].egg;
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { ModifierTier } from "../modifier/modifier-tier";
|
import { ModifierTier } from "#app/modifier/modifier-tier";
|
||||||
import { Moves } from "#enums/moves";
|
import { Moves } from "#enums/moves";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
|
|
|
@ -1,20 +1,21 @@
|
||||||
import * as Utils from "../utils";
|
import * as Utils from "#app/utils";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { defaultStarterSpecies, DexAttrProps, GameData } from "#app/system/game-data";
|
import { defaultStarterSpecies, DexAttrProps, GameData } from "#app/system/game-data";
|
||||||
import PokemonSpecies, { getPokemonSpecies, getPokemonSpeciesForm, speciesStarters } from "./pokemon-species";
|
import PokemonSpecies, { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species";
|
||||||
|
import { speciesStarterCosts } from "#app/data/balance/starters";
|
||||||
import Pokemon, { PokemonMove } from "#app/field/pokemon";
|
import Pokemon, { PokemonMove } from "#app/field/pokemon";
|
||||||
import { BattleType, FixedBattleConfig } from "#app/battle";
|
import { BattleType, FixedBattleConfig } from "#app/battle";
|
||||||
import Trainer, { TrainerVariant } from "#app/field/trainer";
|
import Trainer, { TrainerVariant } from "#app/field/trainer";
|
||||||
import { GameMode } from "#app/game-mode";
|
import { GameMode } from "#app/game-mode";
|
||||||
import { Type } from "./type";
|
import { Type } from "#app/data/type";
|
||||||
import { Challenges } from "#enums/challenges";
|
import { Challenges } from "#enums/challenges";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
import { TrainerType } from "#enums/trainer-type";
|
import { TrainerType } from "#enums/trainer-type";
|
||||||
import { Nature } from "./nature";
|
import { Nature } from "#app/data/nature";
|
||||||
import { Moves } from "#app/enums/moves";
|
import { Moves } from "#enums/moves";
|
||||||
import { TypeColor, TypeShadow } from "#app/enums/color";
|
import { TypeColor, TypeShadow } from "#enums/color";
|
||||||
import { pokemonEvolutions } from "./pokemon-evolutions";
|
import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions";
|
||||||
import { pokemonFormChanges } from "./pokemon-forms";
|
import { pokemonFormChanges } from "#app/data/pokemon-forms";
|
||||||
|
|
||||||
/** A constant for the default max cost of the starting party before a run */
|
/** A constant for the default max cost of the starting party before a run */
|
||||||
const DEFAULT_PARTY_MAX_COST = 10;
|
const DEFAULT_PARTY_MAX_COST = 10;
|
||||||
|
@ -637,7 +638,7 @@ export class FreshStartChallenge extends Challenge {
|
||||||
|
|
||||||
applyStarterCost(species: Species, cost: Utils.NumberHolder): boolean {
|
applyStarterCost(species: Species, cost: Utils.NumberHolder): boolean {
|
||||||
if (defaultStarterSpecies.includes(species)) {
|
if (defaultStarterSpecies.includes(species)) {
|
||||||
cost.value = speciesStarters[species];
|
cost.value = speciesStarterCosts[species];
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -719,7 +720,7 @@ export class LowerStarterMaxCostChallenge extends Challenge {
|
||||||
}
|
}
|
||||||
|
|
||||||
applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder): boolean {
|
applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder): boolean {
|
||||||
if (speciesStarters[pokemon.speciesId] > DEFAULT_PARTY_MAX_COST - this.value) {
|
if (speciesStarterCosts[pokemon.speciesId] > DEFAULT_PARTY_MAX_COST - this.value) {
|
||||||
valid.value = false;
|
valid.value = false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
import { PartyMemberStrength } from "#enums/party-member-strength";
|
import { PartyMemberStrength } from "#enums/party-member-strength";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
import BattleScene from "../battle-scene";
|
import BattleScene from "#app/battle-scene";
|
||||||
import { PlayerPokemon } from "../field/pokemon";
|
import { PlayerPokemon } from "#app/field/pokemon";
|
||||||
import { Starter } from "../ui/starter-select-ui-handler";
|
import { Starter } from "#app/ui/starter-select-ui-handler";
|
||||||
import * as Utils from "../utils";
|
import * as Utils from "#app/utils";
|
||||||
import PokemonSpecies, { PokemonSpeciesForm, getPokemonSpecies, getPokemonSpeciesForm, speciesStarters } from "./pokemon-species";
|
import PokemonSpecies, { PokemonSpeciesForm, getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species";
|
||||||
|
import { speciesStarterCosts } from "#app/data/balance/starters";
|
||||||
|
|
||||||
export interface DailyRunConfig {
|
export interface DailyRunConfig {
|
||||||
seed: integer;
|
seed: integer;
|
||||||
|
@ -46,9 +47,9 @@ export function getDailyRunStarters(scene: BattleScene, seed: string): Starter[]
|
||||||
|
|
||||||
for (let c = 0; c < starterCosts.length; c++) {
|
for (let c = 0; c < starterCosts.length; c++) {
|
||||||
const cost = starterCosts[c];
|
const cost = starterCosts[c];
|
||||||
const costSpecies = Object.keys(speciesStarters)
|
const costSpecies = Object.keys(speciesStarterCosts)
|
||||||
.map(s => parseInt(s) as Species)
|
.map(s => parseInt(s) as Species)
|
||||||
.filter(s => speciesStarters[s] === cost);
|
.filter(s => speciesStarterCosts[s] === cost);
|
||||||
const randPkmSpecies = getPokemonSpecies(Utils.randSeedItem(costSpecies));
|
const randPkmSpecies = getPokemonSpecies(Utils.randSeedItem(costSpecies));
|
||||||
const starterSpecies = getPokemonSpecies(randPkmSpecies.getTrainerSpeciesForLevel(startingLevel, true, PartyMemberStrength.STRONGER));
|
const starterSpecies = getPokemonSpecies(randPkmSpecies.getTrainerSpeciesForLevel(startingLevel, true, PartyMemberStrength.STRONGER));
|
||||||
starters.push(getDailyRunStarter(scene, starterSpecies, startingLevel));
|
starters.push(getDailyRunStarter(scene, starterSpecies, startingLevel));
|
||||||
|
|
|
@ -1,30 +1,19 @@
|
||||||
import BattleScene from "../battle-scene";
|
import BattleScene from "#app/battle-scene";
|
||||||
import PokemonSpecies, { getPokemonSpecies, speciesStarters } from "./pokemon-species";
|
import PokemonSpecies, { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
import { VariantTier } from "../enums/variant-tier";
|
import { speciesStarterCosts } from "#app/data/balance/starters";
|
||||||
import * as Utils from "../utils";
|
import { VariantTier } from "#enums/variant-tier";
|
||||||
|
import * as Utils from "#app/utils";
|
||||||
import Overrides from "#app/overrides";
|
import Overrides from "#app/overrides";
|
||||||
import { pokemonPrevolutions } from "./pokemon-evolutions";
|
import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions";
|
||||||
import { PlayerPokemon } from "#app/field/pokemon";
|
import { PlayerPokemon } from "#app/field/pokemon";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { EggTier } from "#enums/egg-type";
|
import { EggTier } from "#enums/egg-type";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
import { EggSourceType } from "#app/enums/egg-source-types";
|
import { EggSourceType } from "#enums/egg-source-types";
|
||||||
|
import { MANAPHY_EGG_MANAPHY_RATE, SAME_SPECIES_EGG_HA_RATE, GACHA_EGG_HA_RATE, GACHA_DEFAULT_RARE_EGGMOVE_RATE, SAME_SPECIES_EGG_RARE_EGGMOVE_RATE, GACHA_MOVE_UP_RARE_EGGMOVE_RATE, GACHA_DEFAULT_SHINY_RATE, GACHA_SHINY_UP_SHINY_RATE, SAME_SPECIES_EGG_SHINY_RATE, EGG_PITY_LEGENDARY_THRESHOLD, EGG_PITY_EPIC_THRESHOLD, EGG_PITY_RARE_THRESHOLD, SHINY_VARIANT_CHANCE, SHINY_EPIC_CHANCE, GACHA_DEFAULT_COMMON_EGG_THRESHOLD, GACHA_DEFAULT_RARE_EGG_THRESHOLD, GACHA_DEFAULT_EPIC_EGG_THRESHOLD, GACHA_LEGENDARY_UP_THRESHOLD_OFFSET, HATCH_WAVES_MANAPHY_EGG, HATCH_WAVES_COMMON_EGG, HATCH_WAVES_RARE_EGG, HATCH_WAVES_EPIC_EGG, HATCH_WAVES_LEGENDARY_EGG } from "#app/data/balance/rates";
|
||||||
|
|
||||||
export const EGG_SEED = 1073741824;
|
export const EGG_SEED = 1073741824;
|
||||||
|
|
||||||
// Rates for specific random properties in 1/x
|
|
||||||
const DEFAULT_SHINY_RATE = 128;
|
|
||||||
const GACHA_SHINY_UP_SHINY_RATE = 64;
|
|
||||||
const SAME_SPECIES_EGG_SHINY_RATE = 12;
|
|
||||||
const SAME_SPECIES_EGG_HA_RATE = 8;
|
|
||||||
const MANAPHY_EGG_MANAPHY_RATE = 8;
|
|
||||||
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
|
|
||||||
const DEFAULT_RARE_EGGMOVE_RATE = 6;
|
|
||||||
const SAME_SPECIES_EGG_RARE_EGGMOVE_RATE = 3;
|
|
||||||
const GACHA_MOVE_UP_RARE_EGGMOVE_RATE = 3;
|
|
||||||
|
|
||||||
/** Egg options to override egg properties */
|
/** Egg options to override egg properties */
|
||||||
export interface IEggOptions {
|
export interface IEggOptions {
|
||||||
/** Id. Used to check if egg type will be manaphy (id % 204 === 0) */
|
/** Id. Used to check if egg type will be manaphy (id % 204 === 0) */
|
||||||
|
@ -323,7 +312,7 @@ export class Egg {
|
||||||
////
|
////
|
||||||
|
|
||||||
private rollEggMoveIndex() {
|
private rollEggMoveIndex() {
|
||||||
let baseChance = DEFAULT_RARE_EGGMOVE_RATE;
|
let baseChance = GACHA_DEFAULT_RARE_EGGMOVE_RATE;
|
||||||
switch (this._sourceType) {
|
switch (this._sourceType) {
|
||||||
case EggSourceType.SAME_SPECIES_EGG:
|
case EggSourceType.SAME_SPECIES_EGG:
|
||||||
baseChance = SAME_SPECIES_EGG_RARE_EGGMOVE_RATE;
|
baseChance = SAME_SPECIES_EGG_RARE_EGGMOVE_RATE;
|
||||||
|
@ -341,24 +330,24 @@ export class Egg {
|
||||||
|
|
||||||
private getEggTierDefaultHatchWaves(eggTier?: EggTier): number {
|
private getEggTierDefaultHatchWaves(eggTier?: EggTier): number {
|
||||||
if (this._species === Species.PHIONE || this._species === Species.MANAPHY) {
|
if (this._species === Species.PHIONE || this._species === Species.MANAPHY) {
|
||||||
return 50;
|
return HATCH_WAVES_MANAPHY_EGG;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (eggTier ?? this._tier) {
|
switch (eggTier ?? this._tier) {
|
||||||
case EggTier.COMMON:
|
case EggTier.COMMON:
|
||||||
return 10;
|
return HATCH_WAVES_COMMON_EGG;
|
||||||
case EggTier.GREAT:
|
case EggTier.GREAT:
|
||||||
return 25;
|
return HATCH_WAVES_RARE_EGG;
|
||||||
case EggTier.ULTRA:
|
case EggTier.ULTRA:
|
||||||
return 50;
|
return HATCH_WAVES_EPIC_EGG;
|
||||||
}
|
}
|
||||||
return 100;
|
return HATCH_WAVES_LEGENDARY_EGG;
|
||||||
}
|
}
|
||||||
|
|
||||||
private rollEggTier(): EggTier {
|
private rollEggTier(): EggTier {
|
||||||
const tierValueOffset = this._sourceType === EggSourceType.GACHA_LEGENDARY ? 1 : 0;
|
const tierValueOffset = this._sourceType === EggSourceType.GACHA_LEGENDARY ? GACHA_LEGENDARY_UP_THRESHOLD_OFFSET : 0;
|
||||||
const tierValue = Utils.randInt(256);
|
const tierValue = Utils.randInt(256);
|
||||||
return tierValue >= 52 + tierValueOffset ? EggTier.COMMON : tierValue >= 8 + tierValueOffset ? EggTier.GREAT : tierValue >= 1 + tierValueOffset ? EggTier.ULTRA : EggTier.MASTER;
|
return tierValue >= GACHA_DEFAULT_COMMON_EGG_THRESHOLD + tierValueOffset ? EggTier.COMMON : tierValue >= GACHA_DEFAULT_RARE_EGG_THRESHOLD + tierValueOffset ? EggTier.GREAT : tierValue >= GACHA_DEFAULT_EPIC_EGG_THRESHOLD + tierValueOffset ? EggTier.ULTRA : EggTier.MASTER;
|
||||||
}
|
}
|
||||||
|
|
||||||
private rollSpecies(scene: BattleScene): Species | null {
|
private rollSpecies(scene: BattleScene): Species | null {
|
||||||
|
@ -409,8 +398,8 @@ export class Egg {
|
||||||
|
|
||||||
const ignoredSpecies = [Species.PHIONE, Species.MANAPHY, Species.ETERNATUS];
|
const ignoredSpecies = [Species.PHIONE, Species.MANAPHY, Species.ETERNATUS];
|
||||||
|
|
||||||
let speciesPool = Object.keys(speciesStarters)
|
let speciesPool = Object.keys(speciesStarterCosts)
|
||||||
.filter(s => speciesStarters[s] >= minStarterValue && speciesStarters[s] <= maxStarterValue)
|
.filter(s => speciesStarterCosts[s] >= minStarterValue && speciesStarterCosts[s] <= maxStarterValue)
|
||||||
.map(s => parseInt(s) as Species)
|
.map(s => parseInt(s) as Species)
|
||||||
.filter(s => !pokemonPrevolutions.hasOwnProperty(s) && getPokemonSpecies(s).isObtainable() && ignoredSpecies.indexOf(s) === -1);
|
.filter(s => !pokemonPrevolutions.hasOwnProperty(s) && getPokemonSpecies(s).isObtainable() && ignoredSpecies.indexOf(s) === -1);
|
||||||
|
|
||||||
|
@ -441,7 +430,7 @@ export class Egg {
|
||||||
let totalWeight = 0;
|
let totalWeight = 0;
|
||||||
const speciesWeights : number[] = [];
|
const speciesWeights : number[] = [];
|
||||||
for (const speciesId of speciesPool) {
|
for (const speciesId of speciesPool) {
|
||||||
let weight = Math.floor((((maxStarterValue - speciesStarters[speciesId]) / ((maxStarterValue - minStarterValue) + 1)) * 1.5 + 1) * 100);
|
let weight = Math.floor((((maxStarterValue - speciesStarterCosts[speciesId]) / ((maxStarterValue - minStarterValue) + 1)) * 1.5 + 1) * 100);
|
||||||
const species = getPokemonSpecies(speciesId);
|
const species = getPokemonSpecies(speciesId);
|
||||||
if (species.isRegional()) {
|
if (species.isRegional()) {
|
||||||
weight = Math.floor(weight / 2);
|
weight = Math.floor(weight / 2);
|
||||||
|
@ -475,7 +464,7 @@ export class Egg {
|
||||||
* @returns True if the egg is shiny
|
* @returns True if the egg is shiny
|
||||||
**/
|
**/
|
||||||
private rollShiny(): boolean {
|
private rollShiny(): boolean {
|
||||||
let shinyChance = DEFAULT_SHINY_RATE;
|
let shinyChance = GACHA_DEFAULT_SHINY_RATE;
|
||||||
switch (this._sourceType) {
|
switch (this._sourceType) {
|
||||||
case EggSourceType.GACHA_SHINY:
|
case EggSourceType.GACHA_SHINY:
|
||||||
shinyChance = GACHA_SHINY_UP_SHINY_RATE;
|
shinyChance = GACHA_SHINY_UP_SHINY_RATE;
|
||||||
|
@ -498,9 +487,9 @@ export class Egg {
|
||||||
}
|
}
|
||||||
|
|
||||||
const rand = Utils.randSeedInt(10);
|
const rand = Utils.randSeedInt(10);
|
||||||
if (rand >= 4) {
|
if (rand >= SHINY_VARIANT_CHANCE) {
|
||||||
return VariantTier.STANDARD; // 6/10
|
return VariantTier.STANDARD; // 6/10
|
||||||
} else if (rand >= 1) {
|
} else if (rand >= SHINY_EPIC_CHANCE) {
|
||||||
return VariantTier.RARE; // 3/10
|
return VariantTier.RARE; // 3/10
|
||||||
} else {
|
} else {
|
||||||
return VariantTier.EPIC; // 1/10
|
return VariantTier.EPIC; // 1/10
|
||||||
|
@ -508,16 +497,16 @@ export class Egg {
|
||||||
}
|
}
|
||||||
|
|
||||||
private checkForPityTierOverrides(scene: BattleScene): void {
|
private checkForPityTierOverrides(scene: BattleScene): void {
|
||||||
const tierValueOffset = this._sourceType === EggSourceType.GACHA_LEGENDARY ? 1 : 0;
|
const tierValueOffset = this._sourceType === EggSourceType.GACHA_LEGENDARY ? GACHA_LEGENDARY_UP_THRESHOLD_OFFSET : 0;
|
||||||
scene.gameData.eggPity[EggTier.GREAT] += 1;
|
scene.gameData.eggPity[EggTier.GREAT] += 1;
|
||||||
scene.gameData.eggPity[EggTier.ULTRA] += 1;
|
scene.gameData.eggPity[EggTier.ULTRA] += 1;
|
||||||
scene.gameData.eggPity[EggTier.MASTER] += 1 + tierValueOffset;
|
scene.gameData.eggPity[EggTier.MASTER] += 1 + tierValueOffset;
|
||||||
// These numbers are roughly the 80% mark. That is, 80% of the time you'll get an egg before this gets triggered.
|
// These numbers are roughly the 80% mark. That is, 80% of the time you'll get an egg before this gets triggered.
|
||||||
if (scene.gameData.eggPity[EggTier.MASTER] >= 412 && this._tier === EggTier.COMMON) {
|
if (scene.gameData.eggPity[EggTier.MASTER] >= EGG_PITY_LEGENDARY_THRESHOLD && this._tier === EggTier.COMMON) {
|
||||||
this._tier = EggTier.MASTER;
|
this._tier = EggTier.MASTER;
|
||||||
} else if (scene.gameData.eggPity[EggTier.ULTRA] >= 59 && this._tier === EggTier.COMMON) {
|
} else if (scene.gameData.eggPity[EggTier.ULTRA] >= EGG_PITY_EPIC_THRESHOLD && this._tier === EggTier.COMMON) {
|
||||||
this._tier = EggTier.ULTRA;
|
this._tier = EggTier.ULTRA;
|
||||||
} else if (scene.gameData.eggPity[EggTier.GREAT] >= 9 && this._tier === EggTier.COMMON) {
|
} else if (scene.gameData.eggPity[EggTier.GREAT] >= EGG_PITY_RARE_THRESHOLD && this._tier === EggTier.COMMON) {
|
||||||
this._tier = EggTier.GREAT;
|
this._tier = EggTier.GREAT;
|
||||||
}
|
}
|
||||||
scene.gameData.eggPity[this._tier] = 0;
|
scene.gameData.eggPity[this._tier] = 0;
|
||||||
|
@ -544,7 +533,7 @@ export class Egg {
|
||||||
}
|
}
|
||||||
|
|
||||||
private getEggTierFromSpeciesStarterValue(): EggTier {
|
private getEggTierFromSpeciesStarterValue(): EggTier {
|
||||||
const speciesStartValue = speciesStarters[this.species];
|
const speciesStartValue = speciesStarterCosts[this.species];
|
||||||
if (speciesStartValue >= 1 && speciesStartValue <= 3) {
|
if (speciesStartValue >= 1 && speciesStartValue <= 3) {
|
||||||
return EggTier.COMMON;
|
return EggTier.COMMON;
|
||||||
}
|
}
|
||||||
|
@ -567,7 +556,7 @@ export class Egg {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getLegendaryGachaSpeciesForTimestamp(scene: BattleScene, timestamp: number): Species {
|
export function getLegendaryGachaSpeciesForTimestamp(scene: BattleScene, timestamp: number): Species {
|
||||||
const legendarySpecies = Object.entries(speciesStarters)
|
const legendarySpecies = Object.entries(speciesStarterCosts)
|
||||||
.filter(s => s[1] >= 8 && s[1] <= 9)
|
.filter(s => s[1] >= 8 && s[1] <= 9)
|
||||||
.map(s => parseInt(s[0]))
|
.map(s => parseInt(s[0]))
|
||||||
.filter(s => getPokemonSpecies(s).isObtainable());
|
.filter(s => getPokemonSpecies(s).isObtainable());
|
||||||
|
@ -594,7 +583,7 @@ export function getLegendaryGachaSpeciesForTimestamp(scene: BattleScene, timesta
|
||||||
* @returns The egg tier of a given pokemon species
|
* @returns The egg tier of a given pokemon species
|
||||||
*/
|
*/
|
||||||
export function getEggTierForSpecies(pokemonSpecies :PokemonSpecies): EggTier {
|
export function getEggTierForSpecies(pokemonSpecies :PokemonSpecies): EggTier {
|
||||||
const speciesBaseValue = speciesStarters[pokemonSpecies.getRootSpeciesId()];
|
const speciesBaseValue = speciesStarterCosts[pokemonSpecies.getRootSpeciesId()];
|
||||||
if (speciesBaseValue <= 3) {
|
if (speciesBaseValue <= 3) {
|
||||||
return EggTier.COMMON;
|
return EggTier.COMMON;
|
||||||
} else if (speciesBaseValue <= 5) {
|
} else if (speciesBaseValue <= 5) {
|
||||||
|
|
|
@ -8,7 +8,8 @@ import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/myst
|
||||||
import { AbilityRequirement, CombinationPokemonRequirement, MoveRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements";
|
import { AbilityRequirement, CombinationPokemonRequirement, MoveRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements";
|
||||||
import { getHighestStatTotalPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
|
import { getHighestStatTotalPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
|
||||||
import { EXTORTION_ABILITIES, EXTORTION_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups";
|
import { EXTORTION_ABILITIES, EXTORTION_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups";
|
||||||
import { getPokemonSpecies, speciesStarters } from "#app/data/pokemon-species";
|
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
|
import { speciesStarterCosts } from "#app/data/balance/starters";
|
||||||
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
||||||
import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode";
|
import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode";
|
||||||
import { ModifierRewardPhase } from "#app/phases/modifier-reward-phase";
|
import { ModifierRewardPhase } from "#app/phases/modifier-reward-phase";
|
||||||
|
@ -71,7 +72,7 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter =
|
||||||
const pokemon = getHighestStatTotalPlayerPokemon(scene, true, true);
|
const pokemon = getHighestStatTotalPlayerPokemon(scene, true, true);
|
||||||
|
|
||||||
const baseSpecies = pokemon.getSpeciesForm().getRootSpeciesId();
|
const baseSpecies = pokemon.getSpeciesForm().getRootSpeciesId();
|
||||||
const starterValue: number = speciesStarters[baseSpecies] ?? 1;
|
const starterValue: number = speciesStarterCosts[baseSpecies] ?? 1;
|
||||||
const multiplier = Math.max(MONEY_MAXIMUM_MULTIPLIER / 10 * starterValue, MONEY_MINIMUM_MULTIPLIER);
|
const multiplier = Math.max(MONEY_MAXIMUM_MULTIPLIER / 10 * starterValue, MONEY_MINIMUM_MULTIPLIER);
|
||||||
const price = scene.getWaveMoneyAmount(multiplier);
|
const price = scene.getWaveMoneyAmount(multiplier);
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,8 @@ import { Biome } from "#enums/biome";
|
||||||
import { TrainerType } from "#enums/trainer-type";
|
import { TrainerType } from "#enums/trainer-type";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
import { getPokemonSpecies, speciesStarters } from "#app/data/pokemon-species";
|
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
|
import { speciesStarterCosts } from "#app/data/balance/starters";
|
||||||
import { Nature } from "#enums/nature";
|
import { Nature } from "#enums/nature";
|
||||||
import { Moves } from "#enums/moves";
|
import { Moves } from "#enums/moves";
|
||||||
import { PlayerPokemon } from "#app/field/pokemon";
|
import { PlayerPokemon } from "#app/field/pokemon";
|
||||||
|
@ -454,8 +455,8 @@ function calculateEggRewardsForPokemon(pokemon: PlayerPokemon): [number, number]
|
||||||
const rootSpecies = pokemon.species.getRootSpeciesId();
|
const rootSpecies = pokemon.species.getRootSpeciesId();
|
||||||
let pointsFromStarterTier = 0;
|
let pointsFromStarterTier = 0;
|
||||||
// 2 points for every 1 below 7 that the pokemon's starter tier is (max 12, min 0)
|
// 2 points for every 1 below 7 that the pokemon's starter tier is (max 12, min 0)
|
||||||
if (speciesStarters.hasOwnProperty(rootSpecies)) {
|
if (speciesStarterCosts.hasOwnProperty(rootSpecies)) {
|
||||||
const starterTier = speciesStarters[rootSpecies];
|
const starterTier = speciesStarterCosts[rootSpecies];
|
||||||
pointsFromStarterTier = Math.min(Math.max(Math.floor(7 - starterTier) * 2, 0), 12);
|
pointsFromStarterTier = Math.min(Math.max(Math.floor(7 - starterTier) * 2, 0), 12);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,8 @@ import BattleScene from "#app/battle-scene";
|
||||||
import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
import { MoneyRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements";
|
import { MoneyRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements";
|
||||||
import { catchPokemon, getRandomSpeciesByStarterTier, getSpriteKeysFromPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
|
import { catchPokemon, getRandomSpeciesByStarterTier, getSpriteKeysFromPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
|
||||||
import { getPokemonSpecies, speciesStarters } from "#app/data/pokemon-species";
|
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
|
import { speciesStarterCosts } from "#app/data/balance/starters";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
import { PokeballType } from "#app/data/pokeball";
|
import { PokeballType } from "#app/data/pokeball";
|
||||||
import { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon";
|
import { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon";
|
||||||
|
@ -88,7 +89,7 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter =
|
||||||
isPokemon: true
|
isPokemon: true
|
||||||
});
|
});
|
||||||
|
|
||||||
const starterTier = speciesStarters[species.speciesId];
|
const starterTier = speciesStarterCosts[species.speciesId];
|
||||||
// Prices decrease by starter tier less than 5, but only reduces cost by half at max
|
// Prices decrease by starter tier less than 5, but only reduces cost by half at max
|
||||||
let priceMultiplier = MAX_POKEMON_PRICE_MULTIPLIER * (Math.max(starterTier, 2.5) / 5);
|
let priceMultiplier = MAX_POKEMON_PRICE_MULTIPLIER * (Math.max(starterTier, 2.5) / 5);
|
||||||
if (pokemon.shiny) {
|
if (pokemon.shiny) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { Ability, allAbilities } from "#app/data/ability";
|
import { Ability, allAbilities } from "#app/data/ability";
|
||||||
import { EnemyPartyConfig, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, selectPokemonForOption, setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils";
|
import { EnemyPartyConfig, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, selectPokemonForOption, setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils";
|
||||||
import { getNatureName, Nature } from "#app/data/nature";
|
import { getNatureName, Nature } from "#app/data/nature";
|
||||||
import { speciesStarters } from "#app/data/pokemon-species";
|
import { speciesStarterCosts } from "#app/data/balance/starters";
|
||||||
import Pokemon, { PlayerPokemon } from "#app/field/pokemon";
|
import Pokemon, { PlayerPokemon } from "#app/field/pokemon";
|
||||||
import { PokemonHeldItemModifier } from "#app/modifier/modifier";
|
import { PokemonHeldItemModifier } from "#app/modifier/modifier";
|
||||||
import { AbilityAttr } from "#app/system/game-data";
|
import { AbilityAttr } from "#app/system/game-data";
|
||||||
|
@ -326,7 +326,7 @@ export const TrainingSessionEncounter: MysteryEncounter =
|
||||||
// Only update the fusion's dex data if the Pokemon is already caught in dex (ignore rentals)
|
// Only update the fusion's dex data if the Pokemon is already caught in dex (ignore rentals)
|
||||||
const rootFusionSpecies = playerPokemon.fusionSpecies?.getRootSpeciesId();
|
const rootFusionSpecies = playerPokemon.fusionSpecies?.getRootSpeciesId();
|
||||||
if (!isNullOrUndefined(rootFusionSpecies)
|
if (!isNullOrUndefined(rootFusionSpecies)
|
||||||
&& speciesStarters.hasOwnProperty(rootFusionSpecies)
|
&& speciesStarterCosts.hasOwnProperty(rootFusionSpecies)
|
||||||
&& !!scene.gameData.dexData[rootFusionSpecies].caughtAttr) {
|
&& !!scene.gameData.dexData[rootFusionSpecies].caughtAttr) {
|
||||||
scene.gameData.starterData[rootFusionSpecies].abilityAttr |= playerPokemon.fusionAbilityIndex !== 1 || playerPokemon.fusionSpecies?.ability2
|
scene.gameData.starterData[rootFusionSpecies].abilityAttr |= playerPokemon.fusionAbilityIndex !== 1 || playerPokemon.fusionSpecies?.ability2
|
||||||
? 1 << playerPokemon.fusionAbilityIndex
|
? 1 << playerPokemon.fusionAbilityIndex
|
||||||
|
|
|
@ -5,12 +5,12 @@ import { Abilities } from "#enums/abilities";
|
||||||
import { Moves } from "#enums/moves";
|
import { Moves } from "#enums/moves";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
import { TimeOfDay } from "#enums/time-of-day";
|
import { TimeOfDay } from "#enums/time-of-day";
|
||||||
import { Nature } from "../nature";
|
import { Nature } from "#app/data/nature";
|
||||||
import { EvolutionItem, pokemonEvolutions } from "../pokemon-evolutions";
|
import { EvolutionItem, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions";
|
||||||
import { FormChangeItem, pokemonFormChanges, SpeciesFormChangeItemTrigger } from "../pokemon-forms";
|
import { FormChangeItem, pokemonFormChanges, SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms";
|
||||||
import { StatusEffect } from "../status-effect";
|
import { StatusEffect } from "#app/data/status-effect";
|
||||||
import { Type } from "../type";
|
import { Type } from "#app/data/type";
|
||||||
import { WeatherType } from "../weather";
|
import { WeatherType } from "#app/data/weather";
|
||||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
import { AttackTypeBoosterModifier } from "#app/modifier/modifier";
|
import { AttackTypeBoosterModifier } from "#app/modifier/modifier";
|
||||||
import { AttackTypeBoosterModifierType } from "#app/modifier/modifier-type";
|
import { AttackTypeBoosterModifierType } from "#app/modifier/modifier-type";
|
||||||
|
|
|
@ -32,7 +32,7 @@ import { FunAndGamesEncounter } from "#app/data/mystery-encounters/encounters/fu
|
||||||
import { UncommonBreedEncounter } from "#app/data/mystery-encounters/encounters/uncommon-breed-encounter";
|
import { UncommonBreedEncounter } from "#app/data/mystery-encounters/encounters/uncommon-breed-encounter";
|
||||||
import { GlobalTradeSystemEncounter } from "#app/data/mystery-encounters/encounters/global-trade-system-encounter";
|
import { GlobalTradeSystemEncounter } from "#app/data/mystery-encounters/encounters/global-trade-system-encounter";
|
||||||
import { TheExpertPokemonBreederEncounter } from "#app/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter";
|
import { TheExpertPokemonBreederEncounter } from "#app/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter";
|
||||||
import { getBiomeName } from "#app/data/biomes";
|
import { getBiomeName } from "#app/data/balance/biomes";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Spawn chance: (BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT + WIGHT_INCREMENT_ON_SPAWN_MISS * <number of missed spawns>) / MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT
|
* Spawn chance: (BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT + WIGHT_INCREMENT_ON_SPAWN_MISS * <number of missed spawns>) / MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import Battle, { BattlerIndex, BattleType } from "#app/battle";
|
import Battle, { BattlerIndex, BattleType } from "#app/battle";
|
||||||
import { biomeLinks, BiomePoolTier } from "#app/data/biomes";
|
import { biomeLinks, BiomePoolTier } from "#app/data/balance/biomes";
|
||||||
import MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option";
|
import MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option";
|
||||||
import { AVERAGE_ENCOUNTERS_PER_RUN_TARGET, WEIGHT_INCREMENT_ON_SPAWN_MISS } from "#app/data/mystery-encounters/mystery-encounters";
|
import { AVERAGE_ENCOUNTERS_PER_RUN_TARGET, WEIGHT_INCREMENT_ON_SPAWN_MISS } from "#app/data/mystery-encounters/mystery-encounters";
|
||||||
import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
|
import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
|
||||||
|
|
|
@ -12,7 +12,8 @@ import { Mode } from "#app/ui/ui";
|
||||||
import { PartyOption, PartyUiMode } from "#app/ui/party-ui-handler";
|
import { PartyOption, PartyUiMode } from "#app/ui/party-ui-handler";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
import { Type } from "#app/data/type";
|
import { Type } from "#app/data/type";
|
||||||
import PokemonSpecies, { getPokemonSpecies, speciesStarters } from "#app/data/pokemon-species";
|
import PokemonSpecies, { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
|
import { speciesStarterCosts } from "#app/data/balance/starters";
|
||||||
import { getEncounterText, queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
|
import { getEncounterText, queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
|
||||||
import { getPokemonNameWithAffix } from "#app/messages";
|
import { getPokemonNameWithAffix } from "#app/messages";
|
||||||
import { modifierTypes, PokemonHeldItemModifierType } from "#app/modifier/modifier-type";
|
import { modifierTypes, PokemonHeldItemModifierType } from "#app/modifier/modifier-type";
|
||||||
|
@ -206,8 +207,8 @@ export function getRandomSpeciesByStarterTier(starterTiers: number | [number, nu
|
||||||
let min = Array.isArray(starterTiers) ? starterTiers[0] : starterTiers;
|
let min = Array.isArray(starterTiers) ? starterTiers[0] : starterTiers;
|
||||||
let max = Array.isArray(starterTiers) ? starterTiers[1] : starterTiers;
|
let max = Array.isArray(starterTiers) ? starterTiers[1] : starterTiers;
|
||||||
|
|
||||||
let filteredSpecies: [PokemonSpecies, number][] = Object.keys(speciesStarters)
|
let filteredSpecies: [PokemonSpecies, number][] = Object.keys(speciesStarterCosts)
|
||||||
.map(s => [parseInt(s) as Species, speciesStarters[s] as number])
|
.map(s => [parseInt(s) as Species, speciesStarterCosts[s] as number])
|
||||||
.filter(s => {
|
.filter(s => {
|
||||||
const pokemonSpecies = getPokemonSpecies(s[0]);
|
const pokemonSpecies = getPokemonSpecies(s[0]);
|
||||||
return pokemonSpecies && (!excludedSpecies || !excludedSpecies.includes(s[0]))
|
return pokemonSpecies && (!excludedSpecies || !excludedSpecies.includes(s[0]))
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,22 +1,22 @@
|
||||||
import BattleScene, { startingWave } from "../battle-scene";
|
import BattleScene, { startingWave } from "#app/battle-scene";
|
||||||
import { ModifierTypeFunc, modifierTypes } from "../modifier/modifier-type";
|
import { ModifierTypeFunc, modifierTypes } from "#app/modifier/modifier-type";
|
||||||
import { EnemyPokemon, PokemonMove } from "../field/pokemon";
|
import { EnemyPokemon, PokemonMove } from "#app/field/pokemon";
|
||||||
import * as Utils from "../utils";
|
import * as Utils from "#app/utils";
|
||||||
import { PokeballType } from "./pokeball";
|
import { PokeballType } from "#app/data/pokeball";
|
||||||
import { pokemonEvolutions, pokemonPrevolutions } from "./pokemon-evolutions";
|
import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions";
|
||||||
import PokemonSpecies, { getPokemonSpecies, PokemonSpeciesFilter } from "./pokemon-species";
|
import PokemonSpecies, { getPokemonSpecies, PokemonSpeciesFilter } from "#app/data/pokemon-species";
|
||||||
import { tmSpecies } from "./tms";
|
import { tmSpecies } from "#app/data/balance/tms";
|
||||||
import { Type } from "./type";
|
import { Type } from "#app/data/type";
|
||||||
import { doubleBattleDialogue } from "./dialogue";
|
import { doubleBattleDialogue } from "#app/data/dialogue";
|
||||||
import { PersistentModifier } from "../modifier/modifier";
|
import { PersistentModifier } from "#app/modifier/modifier";
|
||||||
import { TrainerVariant } from "../field/trainer";
|
import { TrainerVariant } from "#app/field/trainer";
|
||||||
import { getIsInitialized, initI18n } from "#app/plugins/i18n";
|
import { getIsInitialized, initI18n } from "#app/plugins/i18n";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { Moves } from "#enums/moves";
|
import { Moves } from "#enums/moves";
|
||||||
import { PartyMemberStrength } from "#enums/party-member-strength";
|
import { PartyMemberStrength } from "#enums/party-member-strength";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
import { TrainerType } from "#enums/trainer-type";
|
import { TrainerType } from "#enums/trainer-type";
|
||||||
import {Gender} from "./gender";
|
import { Gender } from "#app/data/gender";
|
||||||
|
|
||||||
/** Minimum BST for Pokemon generated onto the Elite Four's teams */
|
/** Minimum BST for Pokemon generated onto the Elite Four's teams */
|
||||||
const ELITE_FOUR_MINIMUM_BST = 460;
|
const ELITE_FOUR_MINIMUM_BST = 460;
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
import BattleScene from "../battle-scene";
|
import BattleScene from "#app/battle-scene";
|
||||||
import { biomePokemonPools, BiomePoolTier, BiomeTierTrainerPools, biomeTrainerPools, PokemonPools } from "../data/biomes";
|
import { biomePokemonPools, BiomePoolTier, BiomeTierTrainerPools, biomeTrainerPools, PokemonPools } from "#app/data/balance/biomes";
|
||||||
import { Constructor } from "#app/utils";
|
import { Constructor } from "#app/utils";
|
||||||
import * as Utils from "../utils";
|
import * as Utils from "#app/utils";
|
||||||
import PokemonSpecies, { getPokemonSpecies } from "../data/pokemon-species";
|
import PokemonSpecies, { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
import { getTerrainClearMessage, getTerrainStartMessage, getWeatherClearMessage, getWeatherStartMessage, Weather, WeatherType } from "../data/weather";
|
import { getTerrainClearMessage, getTerrainStartMessage, getWeatherClearMessage, getWeatherStartMessage, Weather, WeatherType } from "#app/data/weather";
|
||||||
import { CommonAnim } from "../data/battle-anims";
|
import { CommonAnim } from "#app/data/battle-anims";
|
||||||
import { Type } from "../data/type";
|
import { Type } from "#app/data/type";
|
||||||
import Move from "../data/move";
|
import Move from "#app/data/move";
|
||||||
import { ArenaTag, ArenaTagSide, ArenaTrapTag, getArenaTag } from "../data/arena-tag";
|
import { ArenaTag, ArenaTagSide, ArenaTrapTag, getArenaTag } from "#app/data/arena-tag";
|
||||||
import { BattlerIndex } from "../battle";
|
import { BattlerIndex } from "#app/battle";
|
||||||
import { Terrain, TerrainType } from "../data/terrain";
|
import { Terrain, TerrainType } from "#app/data/terrain";
|
||||||
import { applyPostTerrainChangeAbAttrs, applyPostWeatherChangeAbAttrs, PostTerrainChangeAbAttr, PostWeatherChangeAbAttr } from "../data/ability";
|
import { applyPostTerrainChangeAbAttrs, applyPostWeatherChangeAbAttrs, PostTerrainChangeAbAttr, PostWeatherChangeAbAttr } from "#app/data/ability";
|
||||||
import Pokemon from "./pokemon";
|
import Pokemon from "#app/field/pokemon";
|
||||||
import Overrides from "#app/overrides";
|
import Overrides from "#app/overrides";
|
||||||
import { TagAddedEvent, TagRemovedEvent, TerrainChangedEvent, WeatherChangedEvent } from "../events/arena";
|
import { TagAddedEvent, TagRemovedEvent, TerrainChangedEvent, WeatherChangedEvent } from "#app/events/arena";
|
||||||
import { ArenaTagType } from "#enums/arena-tag-type";
|
import { ArenaTagType } from "#enums/arena-tag-type";
|
||||||
import { Biome } from "#enums/biome";
|
import { Biome } from "#enums/biome";
|
||||||
import { Moves } from "#enums/moves";
|
import { Moves } from "#enums/moves";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
import { TimeOfDay } from "#enums/time-of-day";
|
import { TimeOfDay } from "#enums/time-of-day";
|
||||||
import { TrainerType } from "#enums/trainer-type";
|
import { TrainerType } from "#enums/trainer-type";
|
||||||
import { Abilities } from "#app/enums/abilities";
|
import { Abilities } from "#enums/abilities";
|
||||||
import { SpeciesFormChangeRevertWeatherFormTrigger, SpeciesFormChangeWeatherTrigger } from "#app/data/pokemon-forms";
|
import { SpeciesFormChangeRevertWeatherFormTrigger, SpeciesFormChangeWeatherTrigger } from "#app/data/pokemon-forms";
|
||||||
import { CommonAnimPhase } from "#app/phases/common-anim-phase";
|
import { CommonAnimPhase } from "#app/phases/common-anim-phase";
|
||||||
import { ShowAbilityPhase } from "#app/phases/show-ability-phase";
|
import { ShowAbilityPhase } from "#app/phases/show-ability-phase";
|
||||||
|
|
|
@ -1,43 +1,45 @@
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import BattleScene, { AnySound } from "../battle-scene";
|
import BattleScene, { AnySound } from "#app/battle-scene";
|
||||||
import { Variant, VariantSet, variantColorCache } from "#app/data/variant";
|
import { Variant, VariantSet, variantColorCache } from "#app/data/variant";
|
||||||
import { variantData } from "#app/data/variant";
|
import { variantData } from "#app/data/variant";
|
||||||
import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from "../ui/battle-info";
|
import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from "#app/ui/battle-info";
|
||||||
import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, VariableMoveTypeAttr, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatStagesAttr, SacrificialAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatStageChangeAttr, RechargeAttr, ChargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit, OneHitKOAccuracyAttr, RespectAttackTypeImmunityAttr, MoveTarget } from "../data/move";
|
import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, VariableMoveTypeAttr, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatStagesAttr, SacrificialAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatStageChangeAttr, RechargeAttr, ChargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit, OneHitKOAccuracyAttr, RespectAttackTypeImmunityAttr, MoveTarget } from "#app/data/move";
|
||||||
import { default as PokemonSpecies, PokemonSpeciesForm, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities } from "../data/pokemon-species";
|
import { default as PokemonSpecies, PokemonSpeciesForm, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species";
|
||||||
|
import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters";
|
||||||
|
import { starterPassiveAbilities } from "#app/data/balance/passives";
|
||||||
import { Constructor, isNullOrUndefined, randSeedInt } from "#app/utils";
|
import { Constructor, isNullOrUndefined, randSeedInt } from "#app/utils";
|
||||||
import * as Utils from "../utils";
|
import * as Utils from "#app/utils";
|
||||||
import { Type, TypeDamageMultiplier, getTypeDamageMultiplier, getTypeRgb } from "../data/type";
|
import { Type, TypeDamageMultiplier, getTypeDamageMultiplier, getTypeRgb } from "#app/data/type";
|
||||||
import { getLevelTotalExp } from "../data/exp";
|
import { getLevelTotalExp } from "#app/data/exp";
|
||||||
import { Stat, type PermanentStat, type BattleStat, type EffectiveStat, PERMANENT_STATS, BATTLE_STATS, EFFECTIVE_STATS } from "#enums/stat";
|
import { Stat, type PermanentStat, type BattleStat, type EffectiveStat, PERMANENT_STATS, BATTLE_STATS, EFFECTIVE_STATS } from "#enums/stat";
|
||||||
import { DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, BaseStatModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempStatStageBoosterModifier, TempCritBoosterModifier, StatBoosterModifier, CritBoosterModifier, TerastallizeModifier, PokemonBaseStatFlatModifier, PokemonBaseStatTotalModifier, PokemonIncrementingStatModifier, EvoTrackerModifier } from "../modifier/modifier";
|
import { DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, BaseStatModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempStatStageBoosterModifier, TempCritBoosterModifier, StatBoosterModifier, CritBoosterModifier, TerastallizeModifier, PokemonBaseStatFlatModifier, PokemonBaseStatTotalModifier, PokemonIncrementingStatModifier, EvoTrackerModifier } from "#app/modifier/modifier";
|
||||||
import { PokeballType } from "../data/pokeball";
|
import { PokeballType } from "#app/data/pokeball";
|
||||||
import { Gender } from "../data/gender";
|
import { Gender } from "#app/data/gender";
|
||||||
import { initMoveAnim, loadMoveAnimAssets } from "../data/battle-anims";
|
import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims";
|
||||||
import { Status, StatusEffect, getRandomStatus } from "../data/status-effect";
|
import { Status, StatusEffect, getRandomStatus } from "#app/data/status-effect";
|
||||||
import { pokemonEvolutions, pokemonPrevolutions, SpeciesFormEvolution, SpeciesEvolutionCondition, FusionSpeciesFormEvolution } from "../data/pokemon-evolutions";
|
import { pokemonEvolutions, pokemonPrevolutions, SpeciesFormEvolution, SpeciesEvolutionCondition, FusionSpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions";
|
||||||
import { reverseCompatibleTms, tmSpecies, tmPoolTiers } from "../data/tms";
|
import { reverseCompatibleTms, tmSpecies, tmPoolTiers } from "#app/data/balance/tms";
|
||||||
import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, SubstituteTag, TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, TypeBoostTag, MoveRestrictionBattlerTag, ExposedTag, DragonCheerTag, CritBoostTag, TrappedTag, TarShotTag, AutotomizedTag } from "../data/battler-tags";
|
import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, SubstituteTag, TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, TypeBoostTag, MoveRestrictionBattlerTag, ExposedTag, DragonCheerTag, CritBoostTag, TrappedTag, TarShotTag, AutotomizedTag } from "../data/battler-tags";
|
||||||
import { WeatherType } from "../data/weather";
|
import { WeatherType } from "#app/data/weather";
|
||||||
import { ArenaTagSide, NoCritTag, WeakenMoveScreenTag } from "../data/arena-tag";
|
import { ArenaTagSide, NoCritTag, WeakenMoveScreenTag } from "#app/data/arena-tag";
|
||||||
import { Ability, AbAttr, StatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatStagesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, FieldMultiplyStatAbAttr, AddSecondStrikeAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr, PostSetStatusAbAttr, applyPostSetStatusAbAttrs } from "../data/ability";
|
import { Ability, AbAttr, StatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatStagesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, FieldMultiplyStatAbAttr, AddSecondStrikeAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr, PostSetStatusAbAttr, applyPostSetStatusAbAttrs } from "#app/data/ability";
|
||||||
import PokemonData from "../system/pokemon-data";
|
import PokemonData from "#app/system/pokemon-data";
|
||||||
import { BattlerIndex } from "../battle";
|
import { BattlerIndex } from "#app/battle";
|
||||||
import { Mode } from "../ui/ui";
|
import { Mode } from "#app/ui/ui";
|
||||||
import PartyUiHandler, { PartyOption, PartyUiMode } from "../ui/party-ui-handler";
|
import PartyUiHandler, { PartyOption, PartyUiMode } from "#app/ui/party-ui-handler";
|
||||||
import SoundFade from "phaser3-rex-plugins/plugins/soundfade";
|
import SoundFade from "phaser3-rex-plugins/plugins/soundfade";
|
||||||
import { LevelMoves } from "../data/pokemon-level-moves";
|
import { LevelMoves } from "#app/data/balance/pokemon-level-moves";
|
||||||
import { DamageAchv, achvs } from "../system/achv";
|
import { DamageAchv, achvs } from "#app/system/achv";
|
||||||
import { DexAttr, StarterDataEntry, StarterMoveset } from "../system/game-data";
|
import { DexAttr, StarterDataEntry, StarterMoveset } from "#app/system/game-data";
|
||||||
import { QuantizerCelebi, argbFromRgba, rgbaFromArgb } from "@material/material-color-utilities";
|
import { QuantizerCelebi, argbFromRgba, rgbaFromArgb } from "@material/material-color-utilities";
|
||||||
import { Nature, getNatureStatMultiplier } from "../data/nature";
|
import { Nature, getNatureStatMultiplier } from "#app/data/nature";
|
||||||
import { SpeciesFormChange, SpeciesFormChangeActiveTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangeStatusEffectTrigger } from "../data/pokemon-forms";
|
import { SpeciesFormChange, SpeciesFormChangeActiveTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangeStatusEffectTrigger } from "#app/data/pokemon-forms";
|
||||||
import { TerrainType } from "../data/terrain";
|
import { TerrainType } from "#app/data/terrain";
|
||||||
import { TrainerSlot } from "../data/trainer-config";
|
import { TrainerSlot } from "#app/data/trainer-config";
|
||||||
import Overrides from "#app/overrides";
|
import Overrides from "#app/overrides";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { speciesEggMoves } from "../data/egg-moves";
|
import { speciesEggMoves } from "#app/data/balance/egg-moves";
|
||||||
import { ModifierTier } from "../modifier/modifier-tier";
|
import { ModifierTier } from "#app/modifier/modifier-tier";
|
||||||
import { applyChallenges, ChallengeType } from "#app/data/challenge";
|
import { applyChallenges, ChallengeType } from "#app/data/challenge";
|
||||||
import { Abilities } from "#enums/abilities";
|
import { Abilities } from "#enums/abilities";
|
||||||
import { ArenaTagType } from "#enums/arena-tag-type";
|
import { ArenaTagType } from "#enums/arena-tag-type";
|
||||||
|
@ -58,17 +60,12 @@ import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase";
|
||||||
import { SwitchSummonPhase } from "#app/phases/switch-summon-phase";
|
import { SwitchSummonPhase } from "#app/phases/switch-summon-phase";
|
||||||
import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase";
|
import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase";
|
||||||
import { Challenges } from "#enums/challenges";
|
import { Challenges } from "#enums/challenges";
|
||||||
import { PokemonAnimType } from "#app/enums/pokemon-anim-type";
|
import { PokemonAnimType } from "#enums/pokemon-anim-type";
|
||||||
import { PLAYER_PARTY_MAX_SIZE } from "#app/constants";
|
import { PLAYER_PARTY_MAX_SIZE } from "#app/constants";
|
||||||
import { MysteryEncounterPokemonData } from "#app/data/mystery-encounters/mystery-encounter-pokemon-data";
|
import { MysteryEncounterPokemonData } from "#app/data/mystery-encounters/mystery-encounter-pokemon-data";
|
||||||
import { SwitchType } from "#enums/switch-type";
|
import { SwitchType } from "#enums/switch-type";
|
||||||
import { SpeciesFormKey } from "#enums/species-form-key";
|
import { SpeciesFormKey } from "#enums/species-form-key";
|
||||||
|
import { BASE_HIDDEN_ABILITY_CHANCE, BASE_SHINY_CHANCE, SHINY_EPIC_CHANCE, SHINY_VARIANT_CHANCE } from "#app/data/balance/rates";
|
||||||
/** `64/65536 -> 1/1024` */
|
|
||||||
const BASE_SHINY_CHANCE = 64;
|
|
||||||
|
|
||||||
/** `1/256` */
|
|
||||||
const BASE_HIDDEN_ABILITY_CHANCE = 256;
|
|
||||||
|
|
||||||
export enum FieldPosition {
|
export enum FieldPosition {
|
||||||
CENTER,
|
CENTER,
|
||||||
|
@ -1930,9 +1927,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||||
this.scene.executeWithSeedOffset(() => {
|
this.scene.executeWithSeedOffset(() => {
|
||||||
rand.value = Utils.randSeedInt(10);
|
rand.value = Utils.randSeedInt(10);
|
||||||
}, this.id, this.scene.waveSeed);
|
}, this.id, this.scene.waveSeed);
|
||||||
if (rand.value >= 4) {
|
if (rand.value >= SHINY_VARIANT_CHANCE) {
|
||||||
return 0; // 6/10
|
return 0; // 6/10
|
||||||
} else if (rand.value >= 1) {
|
} else if (rand.value >= SHINY_EPIC_CHANCE) {
|
||||||
return 1; // 3/10
|
return 1; // 3/10
|
||||||
} else {
|
} else {
|
||||||
return 2; // 1/10
|
return 2; // 1/10
|
||||||
|
@ -4057,7 +4054,7 @@ export class PlayerPokemon extends Pokemon {
|
||||||
starterData.forEach((sd: StarterDataEntry, i: integer) => {
|
starterData.forEach((sd: StarterDataEntry, i: integer) => {
|
||||||
const speciesId = !i ? starterSpeciesId : fusionStarterSpeciesId as Species;
|
const speciesId = !i ? starterSpeciesId : fusionStarterSpeciesId as Species;
|
||||||
sd.friendship = (sd.friendship || 0) + starterAmount.value;
|
sd.friendship = (sd.friendship || 0) + starterAmount.value;
|
||||||
if (sd.friendship >= getStarterValueFriendshipCap(speciesStarters[speciesId])) {
|
if (sd.friendship >= getStarterValueFriendshipCap(speciesStarterCosts[speciesId])) {
|
||||||
this.scene.gameData.addStarterCandy(getPokemonSpecies(speciesId), 1);
|
this.scene.gameData.addStarterCandy(getPokemonSpecies(speciesId), 1);
|
||||||
sd.friendship = 0;
|
sd.friendship = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import BattleScene from "../battle-scene";
|
import BattleScene from "#app/battle-scene";
|
||||||
import {pokemonPrevolutions} from "../data/pokemon-evolutions";
|
import {pokemonPrevolutions} from "#app/data/balance/pokemon-evolutions";
|
||||||
import PokemonSpecies, {getPokemonSpecies} from "../data/pokemon-species";
|
import PokemonSpecies, {getPokemonSpecies} from "#app/data/pokemon-species";
|
||||||
import {
|
import {
|
||||||
TrainerConfig,
|
TrainerConfig,
|
||||||
TrainerPartyCompoundTemplate,
|
TrainerPartyCompoundTemplate,
|
||||||
|
@ -10,11 +10,11 @@ import {
|
||||||
trainerConfigs,
|
trainerConfigs,
|
||||||
trainerPartyTemplates,
|
trainerPartyTemplates,
|
||||||
signatureSpecies
|
signatureSpecies
|
||||||
} from "../data/trainer-config";
|
} from "#app/data/trainer-config";
|
||||||
import {EnemyPokemon} from "./pokemon";
|
import {EnemyPokemon} from "#app/field/pokemon";
|
||||||
import * as Utils from "../utils";
|
import * as Utils from "#app/utils";
|
||||||
import {PersistentModifier} from "../modifier/modifier";
|
import { PersistentModifier } from "#app/modifier/modifier";
|
||||||
import {trainerNamePools} from "../data/trainer-names";
|
import { trainerNamePools } from "#app/data/trainer-names";
|
||||||
import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag";
|
import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag";
|
||||||
import { getIsInitialized, initI18n } from "#app/plugins/i18n";
|
import { getIsInitialized, initI18n } from "#app/plugins/i18n";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
import { GachaType } from "./enums/gacha-types";
|
import { GachaType } from "#enums/gacha-types";
|
||||||
import { getBiomeHasProps } from "./field/arena";
|
import { getBiomeHasProps } from "#app/field/arena";
|
||||||
import CacheBustedLoaderPlugin from "./plugins/cache-busted-loader-plugin";
|
import CacheBustedLoaderPlugin from "#app/plugins/cache-busted-loader-plugin";
|
||||||
import { SceneBase } from "./scene-base";
|
import { SceneBase } from "#app/scene-base";
|
||||||
import { WindowVariant, getWindowVariantSuffix } from "./ui/ui-theme";
|
import { WindowVariant, getWindowVariantSuffix } from "#app/ui/ui-theme";
|
||||||
import { isMobile } from "./touch-controls";
|
import { isMobile } from "#app/touch-controls";
|
||||||
import * as Utils from "./utils";
|
import * as Utils from "#app/utils";
|
||||||
import { initPokemonPrevolutions } from "#app/data/pokemon-evolutions";
|
import { initPokemonPrevolutions } from "#app/data/balance/pokemon-evolutions";
|
||||||
import { initBiomes } from "#app/data/biomes";
|
import { initBiomes } from "#app/data/balance/biomes";
|
||||||
import { initEggMoves } from "#app/data/egg-moves";
|
import { initEggMoves } from "#app/data/balance/egg-moves";
|
||||||
import { initPokemonForms } from "#app/data/pokemon-forms";
|
import { initPokemonForms } from "#app/data/pokemon-forms";
|
||||||
import { initSpecies } from "#app/data/pokemon-species";
|
import { initSpecies } from "#app/data/pokemon-species";
|
||||||
import { initMoves } from "#app/data/move";
|
import { initMoves } from "#app/data/move";
|
||||||
import { initAbilities } from "#app/data/ability";
|
import { initAbilities } from "#app/data/ability";
|
||||||
import { initAchievements } from "#app/system/achv";
|
import { initAchievements } from "#app/system/achv";
|
||||||
import { initTrainerTypeDialogue } from "#app/data/dialogue";
|
import { initTrainerTypeDialogue } from "#app/data/dialogue";
|
||||||
import { initChallenges } from "./data/challenge";
|
import { initChallenges } from "#app/data/challenge";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { initStatsKeys } from "./ui/game-stats-ui-handler";
|
import { initStatsKeys } from "#app/ui/game-stats-ui-handler";
|
||||||
import { initVouchers } from "./system/voucher";
|
import { initVouchers } from "#app/system/voucher";
|
||||||
import { Biome } from "#enums/biome";
|
import { Biome } from "#enums/biome";
|
||||||
import {initMysteryEncounters} from "#app/data/mystery-encounters/mystery-encounters";
|
import {initMysteryEncounters} from "#app/data/mystery-encounters/mystery-encounters";
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
import * as Modifiers from "./modifier";
|
import * as Modifiers from "#app/modifier/modifier";
|
||||||
import { MoneyMultiplierModifier } from "./modifier";
|
import { MoneyMultiplierModifier } from "#app/modifier/modifier";
|
||||||
import { allMoves, AttackMove, selfStatLowerMoves } from "../data/move";
|
import { allMoves, AttackMove, selfStatLowerMoves } from "#app/data/move";
|
||||||
import { getPokeballCatchMultiplier, getPokeballName, MAX_PER_TYPE_POKEBALLS, PokeballType } from "../data/pokeball";
|
import { getPokeballCatchMultiplier, getPokeballName, MAX_PER_TYPE_POKEBALLS, PokeballType } from "#app/data/pokeball";
|
||||||
import Pokemon, { EnemyPokemon, PlayerPokemon, PokemonMove } from "../field/pokemon";
|
import Pokemon, { EnemyPokemon, PlayerPokemon, PokemonMove } from "#app/field/pokemon";
|
||||||
import { EvolutionItem, pokemonEvolutions } from "../data/pokemon-evolutions";
|
import { EvolutionItem, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions";
|
||||||
import { tmPoolTiers, tmSpecies } from "../data/tms";
|
import { tmPoolTiers, tmSpecies } from "#app/data/balance/tms";
|
||||||
import { Type } from "../data/type";
|
import { Type } from "#app/data/type";
|
||||||
import PartyUiHandler, { PokemonMoveSelectFilter, PokemonSelectFilter } from "../ui/party-ui-handler";
|
import PartyUiHandler, { PokemonMoveSelectFilter, PokemonSelectFilter } from "#app/ui/party-ui-handler";
|
||||||
import * as Utils from "../utils";
|
import * as Utils from "#app/utils";
|
||||||
import { getBerryEffectDescription, getBerryName } from "../data/berry";
|
import { getBerryEffectDescription, getBerryName } from "#app/data/berry";
|
||||||
import { Unlockables } from "../system/unlockables";
|
import { Unlockables } from "#app/system/unlockables";
|
||||||
import { getStatusEffectDescriptor, StatusEffect } from "../data/status-effect";
|
import { getStatusEffectDescriptor, StatusEffect } from "#app/data/status-effect";
|
||||||
import BattleScene from "../battle-scene";
|
import BattleScene from "#app/battle-scene";
|
||||||
import { getVoucherTypeIcon, getVoucherTypeName, VoucherType } from "../system/voucher";
|
import { getVoucherTypeIcon, getVoucherTypeName, VoucherType } from "#app/system/voucher";
|
||||||
import { FormChangeItem, pokemonFormChanges, SpeciesFormChangeCondition, SpeciesFormChangeItemTrigger } from "../data/pokemon-forms";
|
import { FormChangeItem, pokemonFormChanges, SpeciesFormChangeCondition, SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms";
|
||||||
import { ModifierTier } from "./modifier-tier";
|
import { ModifierTier } from "#app/modifier/modifier-tier";
|
||||||
import { getNatureName, getNatureStatMultiplier, Nature } from "#app/data/nature";
|
import { getNatureName, getNatureStatMultiplier, Nature } from "#app/data/nature";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { getModifierTierTextTint } from "#app/ui/text";
|
import { getModifierTierTextTint } from "#app/ui/text";
|
||||||
|
@ -25,7 +25,7 @@ import { BerryType } from "#enums/berry-type";
|
||||||
import { Moves } from "#enums/moves";
|
import { Moves } from "#enums/moves";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
import { getPokemonNameWithAffix } from "#app/messages";
|
import { getPokemonNameWithAffix } from "#app/messages";
|
||||||
import { PermanentStat, TEMP_BATTLE_STATS, TempBattleStat, Stat, getStatKey } from "#app/enums/stat";
|
import { PermanentStat, TEMP_BATTLE_STATS, TempBattleStat, Stat, getStatKey } from "#enums/stat";
|
||||||
import { SpeciesFormKey } from "#enums/species-form-key";
|
import { SpeciesFormKey } from "#enums/species-form-key";
|
||||||
|
|
||||||
const outputModifierData = false;
|
const outputModifierData = false;
|
||||||
|
|
|
@ -1,31 +1,30 @@
|
||||||
import * as ModifierTypes from "./modifier-type";
|
import * as ModifierTypes from "#app/modifier/modifier-type";
|
||||||
import { getModifierType, ModifierType, modifierTypes } from "./modifier-type";
|
import { getModifierType, ModifierType, modifierTypes } from "#app/modifier/modifier-type";
|
||||||
import BattleScene from "../battle-scene";
|
import BattleScene from "#app/battle-scene";
|
||||||
import { getLevelTotalExp } from "../data/exp";
|
import { getLevelTotalExp } from "#app/data/exp";
|
||||||
import { MAX_PER_TYPE_POKEBALLS, PokeballType } from "../data/pokeball";
|
import { MAX_PER_TYPE_POKEBALLS, PokeballType } from "#app/data/pokeball";
|
||||||
import Pokemon, { PlayerPokemon } from "../field/pokemon";
|
import Pokemon, { PlayerPokemon } from "#app/field/pokemon";
|
||||||
import { addTextObject, TextStyle } from "../ui/text";
|
import { addTextObject, TextStyle } from "#app/ui/text";
|
||||||
import { Type } from "../data/type";
|
import { Type } from "#app/data/type";
|
||||||
import { EvolutionPhase } from "../phases/evolution-phase";
|
import { EvolutionPhase } from "#app/phases/evolution-phase";
|
||||||
import { FusionSpeciesFormEvolution, pokemonEvolutions, pokemonPrevolutions } from "../data/pokemon-evolutions";
|
import { FusionSpeciesFormEvolution, pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions";
|
||||||
import { getPokemonNameWithAffix } from "../messages";
|
import { getPokemonNameWithAffix } from "#app/messages";
|
||||||
import * as Utils from "../utils";
|
import * as Utils from "#app/utils";
|
||||||
import { getBerryEffectFunc, getBerryPredicate } from "../data/berry";
|
import { getBerryEffectFunc, getBerryPredicate } from "#app/data/berry";
|
||||||
import { BattlerTagType } from "#enums/battler-tag-type";
|
import { BattlerTagType } from "#enums/battler-tag-type";
|
||||||
import { BerryType } from "#enums/berry-type";
|
import { BerryType } from "#enums/berry-type";
|
||||||
import { getStatusEffectHealText, StatusEffect } from "#app/data/status-effect";
|
import { getStatusEffectHealText, StatusEffect } from "#app/data/status-effect";
|
||||||
import { achvs } from "../system/achv";
|
import { achvs } from "#app/system/achv";
|
||||||
import { VoucherType } from "../system/voucher";
|
import { VoucherType } from "#app/system/voucher";
|
||||||
import { FormChangeItem, SpeciesFormChangeItemTrigger, SpeciesFormChangeLapseTeraTrigger, SpeciesFormChangeTeraTrigger } from "../data/pokemon-forms";
|
import { FormChangeItem, SpeciesFormChangeItemTrigger, SpeciesFormChangeLapseTeraTrigger, SpeciesFormChangeTeraTrigger } from "#app/data/pokemon-forms";
|
||||||
import { Nature } from "#app/data/nature";
|
import { Nature } from "#app/data/nature";
|
||||||
import Overrides from "#app/overrides";
|
import Overrides from "#app/overrides";
|
||||||
import { Command } from "#app/ui/command-ui-handler";
|
import { Command } from "#app/ui/command-ui-handler";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
import { BATTLE_STATS, type PermanentStat, Stat, TEMP_BATTLE_STATS, type TempBattleStat } from "#app/enums/stat";
|
import { BATTLE_STATS, type PermanentStat, Stat, TEMP_BATTLE_STATS, type TempBattleStat } from "#enums/stat";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
import { allMoves } from "#app/data/move";
|
import { allMoves } from "#app/data/move";
|
||||||
import { Abilities } from "#app/enums/abilities";
|
import { Abilities } from "#enums/abilities";
|
||||||
import { LearnMovePhase } from "#app/phases/learn-move-phase";
|
import { LearnMovePhase } from "#app/phases/learn-move-phase";
|
||||||
import { LevelUpPhase } from "#app/phases/level-up-phase";
|
import { LevelUpPhase } from "#app/phases/level-up-phase";
|
||||||
import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase";
|
import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase";
|
||||||
|
|
|
@ -2,7 +2,7 @@ import BattleScene from "#app/battle-scene";
|
||||||
import { TurnCommand, BattleType } from "#app/battle";
|
import { TurnCommand, BattleType } from "#app/battle";
|
||||||
import { TrappedTag, EncoreTag } from "#app/data/battler-tags";
|
import { TrappedTag, EncoreTag } from "#app/data/battler-tags";
|
||||||
import { MoveTargetSet, getMoveTargets } from "#app/data/move";
|
import { MoveTargetSet, getMoveTargets } from "#app/data/move";
|
||||||
import { speciesStarters } from "#app/data/pokemon-species";
|
import { speciesStarterCosts } from "#app/data/balance/starters";
|
||||||
import { Abilities } from "#app/enums/abilities";
|
import { Abilities } from "#app/enums/abilities";
|
||||||
import { BattlerTagType } from "#app/enums/battler-tag-type";
|
import { BattlerTagType } from "#app/enums/battler-tag-type";
|
||||||
import { Biome } from "#app/enums/biome";
|
import { Biome } from "#app/enums/biome";
|
||||||
|
@ -126,7 +126,7 @@ export class CommandPhase extends FieldPhase {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Command.BALL:
|
case Command.BALL:
|
||||||
const notInDex = (this.scene.getEnemyField().filter(p => p.isActive(true)).some(p => !p.scene.gameData.dexData[p.species.speciesId].caughtAttr) && this.scene.gameData.getStarterCount(d => !!d.caughtAttr) < Object.keys(speciesStarters).length - 1);
|
const notInDex = (this.scene.getEnemyField().filter(p => p.isActive(true)).some(p => !p.scene.gameData.dexData[p.species.speciesId].caughtAttr) && this.scene.gameData.getStarterCount(d => !!d.caughtAttr) < Object.keys(speciesStarterCosts).length - 1);
|
||||||
if (this.scene.arena.biomeType === Biome.END && (!this.scene.gameMode.isClassic || this.scene.gameMode.isFreshStartChallenge() || notInDex )) {
|
if (this.scene.arena.biomeType === Biome.END && (!this.scene.gameMode.isClassic || this.scene.gameMode.isFreshStartChallenge() || notInDex )) {
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
import SoundFade from "phaser3-rex-plugins/plugins/soundfade";
|
import SoundFade from "phaser3-rex-plugins/plugins/soundfade";
|
||||||
import { Phase } from "../phase";
|
import { Phase } from "#app/phase";
|
||||||
import BattleScene from "../battle-scene";
|
import BattleScene from "#app/battle-scene";
|
||||||
import { SpeciesFormEvolution } from "../data/pokemon-evolutions";
|
import { SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions";
|
||||||
import EvolutionSceneHandler from "../ui/evolution-scene-handler";
|
import EvolutionSceneHandler from "#app/ui/evolution-scene-handler";
|
||||||
import * as Utils from "../utils";
|
import * as Utils from "#app/utils";
|
||||||
import { Mode } from "../ui/ui";
|
import { Mode } from "#app/ui/ui";
|
||||||
import { cos, sin } from "../field/anims";
|
import { cos, sin } from "#app/field/anims";
|
||||||
import { PlayerPokemon } from "../field/pokemon";
|
import { PlayerPokemon } from "#app/field/pokemon";
|
||||||
import { getTypeRgb } from "../data/type";
|
import { getTypeRgb } from "#app/data/type";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { getPokemonNameWithAffix } from "../messages";
|
import { getPokemonNameWithAffix } from "#app/messages";
|
||||||
import { LearnMovePhase } from "./learn-move-phase";
|
import { LearnMovePhase } from "#app/phases/learn-move-phase";
|
||||||
import { EndEvolutionPhase } from "./end-evolution-phase";
|
import { EndEvolutionPhase } from "#app/phases/end-evolution-phase";
|
||||||
|
|
||||||
export class EvolutionPhase extends Phase {
|
export class EvolutionPhase extends Phase {
|
||||||
protected pokemon: PlayerPokemon;
|
protected pokemon: PlayerPokemon;
|
||||||
|
|
|
@ -2,7 +2,7 @@ import { clientSessionId } from "#app/account";
|
||||||
import { BattleType } from "#app/battle";
|
import { BattleType } from "#app/battle";
|
||||||
import BattleScene from "#app/battle-scene";
|
import BattleScene from "#app/battle-scene";
|
||||||
import { getCharVariantFromDialogue } from "#app/data/dialogue";
|
import { getCharVariantFromDialogue } from "#app/data/dialogue";
|
||||||
import { pokemonEvolutions } from "#app/data/pokemon-evolutions";
|
import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions";
|
||||||
import PokemonSpecies, { getPokemonSpecies } from "#app/data/pokemon-species";
|
import PokemonSpecies, { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
import { trainerConfigs } from "#app/data/trainer-config";
|
import { trainerConfigs } from "#app/data/trainer-config";
|
||||||
import Pokemon from "#app/field/pokemon";
|
import Pokemon from "#app/field/pokemon";
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import BattleScene from "#app/battle-scene";
|
import BattleScene from "#app/battle-scene";
|
||||||
import { biomeLinks, getBiomeName } from "#app/data/biomes";
|
import { biomeLinks, getBiomeName } from "#app/data/balance/biomes";
|
||||||
import { Biome } from "#app/enums/biome";
|
import { Biome } from "#app/enums/biome";
|
||||||
import { MoneyInterestModifier, MapModifier } from "#app/modifier/modifier";
|
import { MoneyInterestModifier, MapModifier } from "#app/modifier/modifier";
|
||||||
import { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler";
|
import { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler";
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { Modifier } from "typescript";
|
import { Modifier } from "typescript";
|
||||||
import BattleScene from "../battle-scene";
|
import BattleScene from "../battle-scene";
|
||||||
import { TurnHeldItemTransferModifier } from "../modifier/modifier";
|
import { TurnHeldItemTransferModifier } from "../modifier/modifier";
|
||||||
import { pokemonEvolutions } from "#app/data/pokemon-evolutions";
|
import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import * as Utils from "../utils";
|
import * as Utils from "../utils";
|
||||||
import { PlayerGender } from "#enums/player-gender";
|
import { PlayerGender } from "#enums/player-gender";
|
||||||
|
|
|
@ -1,52 +1,53 @@
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import BattleScene, { bypassLogin, PokeballCounts } from "../battle-scene";
|
import BattleScene, { bypassLogin, PokeballCounts } from "#app/battle-scene";
|
||||||
import Pokemon, { EnemyPokemon, PlayerPokemon } from "../field/pokemon";
|
import Pokemon, { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon";
|
||||||
import { pokemonPrevolutions } from "../data/pokemon-evolutions";
|
import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions";
|
||||||
import PokemonSpecies, { allSpecies, getPokemonSpecies, noStarterFormKeys, speciesStarters } from "../data/pokemon-species";
|
import PokemonSpecies, { allSpecies, getPokemonSpecies, noStarterFormKeys } from "#app/data/pokemon-species";
|
||||||
import * as Utils from "../utils";
|
import { speciesStarterCosts } from "#app/data/balance/starters";
|
||||||
|
import * as Utils from "#app/utils";
|
||||||
import Overrides from "#app/overrides";
|
import Overrides from "#app/overrides";
|
||||||
import PokemonData from "./pokemon-data";
|
import PokemonData from "#app/system/pokemon-data";
|
||||||
import PersistentModifierData from "./modifier-data";
|
import PersistentModifierData from "#app/system/modifier-data";
|
||||||
import ArenaData from "./arena-data";
|
import ArenaData from "#app/system/arena-data";
|
||||||
import { Unlockables } from "./unlockables";
|
import { Unlockables } from "#app/system/unlockables";
|
||||||
import { GameModes, getGameMode } from "../game-mode";
|
import { GameModes, getGameMode } from "#app/game-mode";
|
||||||
import { BattleType } from "../battle";
|
import { BattleType } from "#app/battle";
|
||||||
import TrainerData from "./trainer-data";
|
import TrainerData from "#app/system/trainer-data";
|
||||||
import { trainerConfigs } from "../data/trainer-config";
|
import { trainerConfigs } from "#app/data/trainer-config";
|
||||||
import { resetSettings, setSetting, SettingKeys } from "./settings/settings";
|
import { resetSettings, setSetting, SettingKeys } from "#app/system/settings/settings";
|
||||||
import { achvs } from "./achv";
|
import { achvs } from "#app/system/achv";
|
||||||
import EggData from "./egg-data";
|
import EggData from "#app/system/egg-data";
|
||||||
import { Egg } from "../data/egg";
|
import { Egg } from "#app/data/egg";
|
||||||
import { vouchers, VoucherType } from "./voucher";
|
import { vouchers, VoucherType } from "#app/system/voucher";
|
||||||
import { AES, enc } from "crypto-js";
|
import { AES, enc } from "crypto-js";
|
||||||
import { Mode } from "../ui/ui";
|
import { Mode } from "#app/ui/ui";
|
||||||
import { clientSessionId, loggedInUser, updateUserInfo } from "../account";
|
import { clientSessionId, loggedInUser, updateUserInfo } from "#app/account";
|
||||||
import { Nature } from "../data/nature";
|
import { Nature } from "#app/data/nature";
|
||||||
import { GameStats } from "./game-stats";
|
import { GameStats } from "#app/system/game-stats";
|
||||||
import { Tutorial } from "../tutorial";
|
import { Tutorial } from "#app/tutorial";
|
||||||
import { speciesEggMoves } from "../data/egg-moves";
|
import { speciesEggMoves } from "#app/data/balance/egg-moves";
|
||||||
import { allMoves } from "../data/move";
|
import { allMoves } from "#app/data/move";
|
||||||
import { TrainerVariant } from "../field/trainer";
|
import { TrainerVariant } from "#app/field/trainer";
|
||||||
import { Variant } from "#app/data/variant";
|
import { Variant } from "#app/data/variant";
|
||||||
import { setSettingGamepad, SettingGamepad, settingGamepadDefaults } from "./settings/settings-gamepad";
|
import { setSettingGamepad, SettingGamepad, settingGamepadDefaults } from "#app/system/settings/settings-gamepad";
|
||||||
import { setSettingKeyboard, SettingKeyboard } from "#app/system/settings/settings-keyboard";
|
import { setSettingKeyboard, SettingKeyboard } from "#app/system/settings/settings-keyboard";
|
||||||
import { TerrainChangedEvent, WeatherChangedEvent } from "#app/events/arena";
|
import { TerrainChangedEvent, WeatherChangedEvent } from "#app/events/arena";
|
||||||
import * as Modifier from "../modifier/modifier";
|
import * as Modifier from "#app/modifier/modifier";
|
||||||
import { StatusEffect } from "#app/data/status-effect";
|
import { StatusEffect } from "#app/data/status-effect";
|
||||||
import ChallengeData from "./challenge-data";
|
import ChallengeData from "#app/system/challenge-data";
|
||||||
import { Device } from "#enums/devices";
|
import { Device } from "#enums/devices";
|
||||||
import { GameDataType } from "#enums/game-data-type";
|
import { GameDataType } from "#enums/game-data-type";
|
||||||
import { Moves } from "#enums/moves";
|
import { Moves } from "#enums/moves";
|
||||||
import { PlayerGender } from "#enums/player-gender";
|
import { PlayerGender } from "#enums/player-gender";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
import { applyChallenges, ChallengeType } from "#app/data/challenge";
|
import { applyChallenges, ChallengeType } from "#app/data/challenge";
|
||||||
import { WeatherType } from "#app/enums/weather-type";
|
import { WeatherType } from "#enums/weather-type";
|
||||||
import { TerrainType } from "#app/data/terrain";
|
import { TerrainType } from "#app/data/terrain";
|
||||||
import { OutdatedPhase } from "#app/phases/outdated-phase";
|
import { OutdatedPhase } from "#app/phases/outdated-phase";
|
||||||
import { ReloadSessionPhase } from "#app/phases/reload-session-phase";
|
import { ReloadSessionPhase } from "#app/phases/reload-session-phase";
|
||||||
import { RUN_HISTORY_LIMIT } from "#app/ui/run-history-ui-handler";
|
import { RUN_HISTORY_LIMIT } from "#app/ui/run-history-ui-handler";
|
||||||
import { applySessionDataPatches, applySettingsDataPatches, applySystemDataPatches } from "./version-converter";
|
import { applySessionDataPatches, applySettingsDataPatches, applySystemDataPatches } from "#app/system/version-converter";
|
||||||
import { MysteryEncounterSaveData } from "../data/mystery-encounters/mystery-encounter-save-data";
|
import { MysteryEncounterSaveData } from "#app/data/mystery-encounters/mystery-encounter-save-data";
|
||||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
import { PokerogueApiClearSessionData } from "#app/@types/pokerogue-api";
|
import { PokerogueApiClearSessionData } from "#app/@types/pokerogue-api";
|
||||||
|
|
||||||
|
@ -1537,7 +1538,7 @@ export class GameData {
|
||||||
private initStarterData(): void {
|
private initStarterData(): void {
|
||||||
const starterData: StarterData = {};
|
const starterData: StarterData = {};
|
||||||
|
|
||||||
const starterSpeciesIds = Object.keys(speciesStarters).map(k => parseInt(k) as Species);
|
const starterSpeciesIds = Object.keys(speciesStarterCosts).map(k => parseInt(k) as Species);
|
||||||
|
|
||||||
for (const speciesId of starterSpeciesIds) {
|
for (const speciesId of starterSpeciesIds) {
|
||||||
starterData[speciesId] = {
|
starterData[speciesId] = {
|
||||||
|
@ -1617,7 +1618,7 @@ export class GameData {
|
||||||
dexEntry.caughtAttr |= dexAttr;
|
dexEntry.caughtAttr |= dexAttr;
|
||||||
|
|
||||||
// Unlock ability
|
// Unlock ability
|
||||||
if (speciesStarters.hasOwnProperty(species.speciesId)) {
|
if (speciesStarterCosts.hasOwnProperty(species.speciesId)) {
|
||||||
this.starterData[species.speciesId].abilityAttr |= pokemon.abilityIndex !== 1 || pokemon.species.ability2
|
this.starterData[species.speciesId].abilityAttr |= pokemon.abilityIndex !== 1 || pokemon.species.ability2
|
||||||
? 1 << pokemon.abilityIndex
|
? 1 << pokemon.abilityIndex
|
||||||
: AbilityAttr.ABILITY_HIDDEN;
|
: AbilityAttr.ABILITY_HIDDEN;
|
||||||
|
@ -1673,7 +1674,7 @@ export class GameData {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if (newCatch && speciesStarters.hasOwnProperty(species.speciesId)) {
|
if (newCatch && speciesStarterCosts.hasOwnProperty(species.speciesId)) {
|
||||||
if (!showMessage) {
|
if (!showMessage) {
|
||||||
resolve(true);
|
resolve(true);
|
||||||
return;
|
return;
|
||||||
|
@ -1801,7 +1802,7 @@ export class GameData {
|
||||||
}
|
}
|
||||||
|
|
||||||
getStarterCount(dexEntryPredicate: (entry: DexEntry) => boolean): integer {
|
getStarterCount(dexEntryPredicate: (entry: DexEntry) => boolean): integer {
|
||||||
const starterKeys = Object.keys(speciesStarters);
|
const starterKeys = Object.keys(speciesStarterCosts);
|
||||||
let starterCount = 0;
|
let starterCount = 0;
|
||||||
for (const s of starterKeys) {
|
for (const s of starterKeys) {
|
||||||
const starterDexEntry = this.dexData[s];
|
const starterDexEntry = this.dexData[s];
|
||||||
|
@ -1875,7 +1876,7 @@ export class GameData {
|
||||||
}
|
}
|
||||||
|
|
||||||
getSpeciesStarterValue(speciesId: Species): number {
|
getSpeciesStarterValue(speciesId: Species): number {
|
||||||
const baseValue = speciesStarters[speciesId];
|
const baseValue = speciesStarterCosts[speciesId];
|
||||||
let value = baseValue;
|
let value = baseValue;
|
||||||
|
|
||||||
const decrementValue = (value: number) => {
|
const decrementValue = (value: number) => {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { pokemonEvolutions, SpeciesFormEvolution, SpeciesWildEvolutionDelay } from "#app/data/pokemon-evolutions";
|
import { pokemonEvolutions, SpeciesFormEvolution, SpeciesWildEvolutionDelay } from "#app/data/balance/pokemon-evolutions";
|
||||||
import { Abilities } from "#app/enums/abilities";
|
import { Abilities } from "#app/enums/abilities";
|
||||||
import { Moves } from "#app/enums/moves";
|
import { Moves } from "#app/enums/moves";
|
||||||
import { Species } from "#app/enums/species";
|
import { Species } from "#app/enums/species";
|
||||||
|
|
|
@ -17,7 +17,7 @@ import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases";
|
||||||
import { CommandPhase } from "#app/phases/command-phase";
|
import { CommandPhase } from "#app/phases/command-phase";
|
||||||
import { UncommonBreedEncounter } from "#app/data/mystery-encounters/encounters/uncommon-breed-encounter";
|
import { UncommonBreedEncounter } from "#app/data/mystery-encounters/encounters/uncommon-breed-encounter";
|
||||||
import { MovePhase } from "#app/phases/move-phase";
|
import { MovePhase } from "#app/phases/move-phase";
|
||||||
import { speciesEggMoves } from "#app/data/egg-moves";
|
import { speciesEggMoves } from "#app/data/balance/egg-moves";
|
||||||
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
import { BerryType } from "#enums/berry-type";
|
import { BerryType } from "#enums/berry-type";
|
||||||
import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase";
|
import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase";
|
||||||
|
|
|
@ -6,7 +6,8 @@ import { Species } from "#enums/species";
|
||||||
import BattleScene from "#app/battle-scene";
|
import BattleScene from "#app/battle-scene";
|
||||||
import { StatusEffect } from "#app/data/status-effect";
|
import { StatusEffect } from "#app/data/status-effect";
|
||||||
import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
import { getPokemonSpecies, speciesStarters } from "#app/data/pokemon-species";
|
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
|
import { speciesStarterCosts } from "#app/data/balance/starters";
|
||||||
import { Type } from "#app/data/type";
|
import { Type } from "#app/data/type";
|
||||||
import { getHighestLevelPlayerPokemon, getLowestLevelPlayerPokemon, getRandomPlayerPokemon, getRandomSpeciesByStarterTier, koPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
|
import { getHighestLevelPlayerPokemon, getLowestLevelPlayerPokemon, getRandomPlayerPokemon, getRandomSpeciesByStarterTier, koPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
|
||||||
import { getEncounterText, queueEncounterMessage, showEncounterDialogue, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
|
import { getEncounterText, queueEncounterMessage, showEncounterDialogue, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
|
||||||
|
@ -209,7 +210,7 @@ describe("Mystery Encounter Utils", () => {
|
||||||
const pokeSpecies = getPokemonSpecies(result);
|
const pokeSpecies = getPokemonSpecies(result);
|
||||||
|
|
||||||
expect(pokeSpecies.speciesId).toBe(result);
|
expect(pokeSpecies.speciesId).toBe(result);
|
||||||
expect(speciesStarters[result]).toBe(5);
|
expect(speciesStarterCosts[result]).toBe(5);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("gets species for a starter tier range", () => {
|
it("gets species for a starter tier range", () => {
|
||||||
|
@ -217,8 +218,8 @@ describe("Mystery Encounter Utils", () => {
|
||||||
const pokeSpecies = getPokemonSpecies(result);
|
const pokeSpecies = getPokemonSpecies(result);
|
||||||
|
|
||||||
expect(pokeSpecies.speciesId).toBe(result);
|
expect(pokeSpecies.speciesId).toBe(result);
|
||||||
expect(speciesStarters[result]).toBeGreaterThanOrEqual(5);
|
expect(speciesStarterCosts[result]).toBeGreaterThanOrEqual(5);
|
||||||
expect(speciesStarters[result]).toBeLessThanOrEqual(8);
|
expect(speciesStarterCosts[result]).toBeLessThanOrEqual(8);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("excludes species from search", () => {
|
it("excludes species from search", () => {
|
||||||
|
|
|
@ -2,11 +2,11 @@ import "vitest-canvas-mock";
|
||||||
|
|
||||||
import { initLoggedInUser } from "#app/account";
|
import { initLoggedInUser } from "#app/account";
|
||||||
import { initAbilities } from "#app/data/ability";
|
import { initAbilities } from "#app/data/ability";
|
||||||
import { initBiomes } from "#app/data/biomes";
|
import { initBiomes } from "#app/data/balance/biomes";
|
||||||
import { initEggMoves } from "#app/data/egg-moves";
|
import { initEggMoves } from "#app/data/balance/egg-moves";
|
||||||
import { initMoves } from "#app/data/move";
|
import { initMoves } from "#app/data/move";
|
||||||
import { initMysteryEncounters } from "#app/data/mystery-encounters/mystery-encounters";
|
import { initMysteryEncounters } from "#app/data/mystery-encounters/mystery-encounters";
|
||||||
import { initPokemonPrevolutions } from "#app/data/pokemon-evolutions";
|
import { initPokemonPrevolutions } from "#app/data/balance/pokemon-evolutions";
|
||||||
import { initPokemonForms } from "#app/data/pokemon-forms";
|
import { initPokemonForms } from "#app/data/pokemon-forms";
|
||||||
import { initSpecies } from "#app/data/pokemon-species";
|
import { initSpecies } from "#app/data/pokemon-species";
|
||||||
import { initAchievements } from "#app/system/achv";
|
import { initAchievements } from "#app/system/achv";
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import BattleScene from "../battle-scene";
|
import BattleScene from "#app/battle-scene";
|
||||||
import { TextStyle, addTextObject } from "./text";
|
import { TextStyle, addTextObject } from "#app/ui/text";
|
||||||
import { Mode } from "./ui";
|
import { Mode } from "#app/ui/ui";
|
||||||
import UiHandler from "./ui-handler";
|
import UiHandler from "#app/ui/ui-handler";
|
||||||
import { addWindow } from "./ui-theme";
|
import { addWindow } from "#app/ui/ui-theme";
|
||||||
import * as Utils from "../utils";
|
import * as Utils from "#app/utils";
|
||||||
import { DexAttr, GameData } from "../system/game-data";
|
import { DexAttr, GameData } from "#app/system/game-data";
|
||||||
import { speciesStarters } from "../data/pokemon-species";
|
import { speciesStarterCosts } from "#app/data/balance/starters";
|
||||||
import { Button } from "#enums/buttons";
|
import { Button } from "#enums/buttons";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { UiTheme } from "#app/enums/ui-theme";
|
import { UiTheme } from "#enums/ui-theme";
|
||||||
|
|
||||||
interface DisplayStat {
|
interface DisplayStat {
|
||||||
label_key?: string;
|
label_key?: string;
|
||||||
|
@ -34,14 +34,14 @@ const displayStats: DisplayStats = {
|
||||||
label_key: "starters",
|
label_key: "starters",
|
||||||
sourceFunc: gameData => {
|
sourceFunc: gameData => {
|
||||||
const starterCount = gameData.getStarterCount(d => !!d.caughtAttr);
|
const starterCount = gameData.getStarterCount(d => !!d.caughtAttr);
|
||||||
return `${starterCount} (${Math.floor((starterCount / Object.keys(speciesStarters).length) * 1000) / 10}%)`;
|
return `${starterCount} (${Math.floor((starterCount / Object.keys(speciesStarterCosts).length) * 1000) / 10}%)`;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
shinyStartersUnlocked: {
|
shinyStartersUnlocked: {
|
||||||
label_key: "shinyStarters",
|
label_key: "shinyStarters",
|
||||||
sourceFunc: gameData => {
|
sourceFunc: gameData => {
|
||||||
const starterCount = gameData.getStarterCount(d => !!(d.caughtAttr & DexAttr.SHINY));
|
const starterCount = gameData.getStarterCount(d => !!(d.caughtAttr & DexAttr.SHINY));
|
||||||
return `${starterCount} (${Math.floor((starterCount / Object.keys(speciesStarters).length) * 1000) / 10}%)`;
|
return `${starterCount} (${Math.floor((starterCount / Object.keys(speciesStarterCosts).length) * 1000) / 10}%)`;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
dexSeen: {
|
dexSeen: {
|
||||||
|
|
|
@ -1,22 +1,22 @@
|
||||||
import BattleScene from "../battle-scene";
|
import BattleScene from "#app/battle-scene";
|
||||||
import Pokemon, { MoveResult, PlayerPokemon, PokemonMove } from "../field/pokemon";
|
import Pokemon, { MoveResult, PlayerPokemon, PokemonMove } from "#app/field/pokemon";
|
||||||
import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "./text";
|
import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "#app/ui/text";
|
||||||
import { Command } from "./command-ui-handler";
|
import { Command } from "#app/ui/command-ui-handler";
|
||||||
import MessageUiHandler from "./message-ui-handler";
|
import MessageUiHandler from "#app/ui/message-ui-handler";
|
||||||
import { Mode } from "./ui";
|
import { Mode } from "#app/ui/ui";
|
||||||
import * as Utils from "../utils";
|
import * as Utils from "#app/utils";
|
||||||
import { PokemonFormChangeItemModifier, PokemonHeldItemModifier, SwitchEffectTransferModifier } from "../modifier/modifier";
|
import { PokemonFormChangeItemModifier, PokemonHeldItemModifier, SwitchEffectTransferModifier } from "#app/modifier/modifier";
|
||||||
import { allMoves, ForceSwitchOutAttr } from "../data/move";
|
import { allMoves, ForceSwitchOutAttr } from "#app/data/move";
|
||||||
import { getGenderColor, getGenderSymbol } from "../data/gender";
|
import { getGenderColor, getGenderSymbol } from "#app/data/gender";
|
||||||
import { StatusEffect } from "../data/status-effect";
|
import { StatusEffect } from "#app/data/status-effect";
|
||||||
import PokemonIconAnimHandler, { PokemonIconAnimMode } from "./pokemon-icon-anim-handler";
|
import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler";
|
||||||
import { pokemonEvolutions } from "../data/pokemon-evolutions";
|
import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions";
|
||||||
import { addWindow } from "./ui-theme";
|
import { addWindow } from "#app/ui/ui-theme";
|
||||||
import { SpeciesFormChangeItemTrigger, FormChangeItem } from "../data/pokemon-forms";
|
import { SpeciesFormChangeItemTrigger, FormChangeItem } from "#app/data/pokemon-forms";
|
||||||
import { getVariantTint } from "#app/data/variant";
|
import { getVariantTint } from "#app/data/variant";
|
||||||
import {Button} from "#enums/buttons";
|
import {Button} from "#enums/buttons";
|
||||||
import { applyChallenges, ChallengeType } from "#app/data/challenge";
|
import { applyChallenges, ChallengeType } from "#app/data/challenge";
|
||||||
import MoveInfoOverlay from "./move-info-overlay";
|
import MoveInfoOverlay from "#app/ui/move-info-overlay";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext";
|
import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext";
|
||||||
import { Moves } from "#enums/moves";
|
import { Moves } from "#enums/moves";
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
import PokemonInfoContainer from "./pokemon-info-container";
|
import PokemonInfoContainer from "#app/ui/pokemon-info-container";
|
||||||
import BattleScene from "../battle-scene";
|
import BattleScene from "#app/battle-scene";
|
||||||
import { Gender } from "../data/gender";
|
import { Gender } from "#app/data/gender";
|
||||||
import { Type } from "../data/type";
|
import { Type } from "#app/data/type";
|
||||||
import * as Utils from "../utils";
|
import * as Utils from "#app/utils";
|
||||||
import { TextStyle, addTextObject } from "./text";
|
import { TextStyle, addTextObject } from "#app/ui/text";
|
||||||
import { speciesEggMoves } from "#app/data/egg-moves";
|
import { speciesEggMoves } from "#app/data/balance/egg-moves";
|
||||||
import { allMoves } from "#app/data/move";
|
import { allMoves } from "#app/data/move";
|
||||||
import { Species } from "#app/enums/species";
|
import { Species } from "#enums/species";
|
||||||
import { getEggTierForSpecies } from "#app/data/egg";
|
import { getEggTierForSpecies } from "#app/data/egg";
|
||||||
import { starterColors } from "../battle-scene";
|
import { starterColors } from "#app/battle-scene";
|
||||||
import { argbFromRgba } from "@material/material-color-utilities";
|
import { argbFromRgba } from "@material/material-color-utilities";
|
||||||
import { EggHatchData } from "#app/data/egg-hatch-data";
|
import { EggHatchData } from "#app/data/egg-hatch-data";
|
||||||
import { PlayerPokemon } from "#app/field/pokemon";
|
import { PlayerPokemon } from "#app/field/pokemon";
|
||||||
|
|
|
@ -1,51 +1,54 @@
|
||||||
import { BattleSceneEventType, CandyUpgradeNotificationChangedEvent } from "../events/battle-scene";
|
import { BattleSceneEventType, CandyUpgradeNotificationChangedEvent } from "#app/events/battle-scene";
|
||||||
import { pokemonPrevolutions } from "#app/data/pokemon-evolutions";
|
import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions";
|
||||||
import { Variant, getVariantTint, getVariantIcon } from "#app/data/variant";
|
import { Variant, getVariantTint, getVariantIcon } from "#app/data/variant";
|
||||||
import { argbFromRgba } from "@material/material-color-utilities";
|
import { argbFromRgba } from "@material/material-color-utilities";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext";
|
import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext";
|
||||||
import BattleScene, { starterColors } from "../battle-scene";
|
import BattleScene, { starterColors } from "#app/battle-scene";
|
||||||
import { allAbilities } from "../data/ability";
|
import { allAbilities } from "#app/data/ability";
|
||||||
import { speciesEggMoves } from "../data/egg-moves";
|
import { speciesEggMoves } from "#app/data/balance/egg-moves";
|
||||||
import { GrowthRate, getGrowthRateColor } from "../data/exp";
|
import { GrowthRate, getGrowthRateColor } from "#app/data/exp";
|
||||||
import { Gender, getGenderColor, getGenderSymbol } from "../data/gender";
|
import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender";
|
||||||
import { allMoves } from "../data/move";
|
import { allMoves } from "#app/data/move";
|
||||||
import { Nature, getNatureName } from "../data/nature";
|
import { Nature, getNatureName } from "#app/data/nature";
|
||||||
import { pokemonFormChanges } from "../data/pokemon-forms";
|
import { pokemonFormChanges } from "#app/data/pokemon-forms";
|
||||||
import { LevelMoves, pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "../data/pokemon-level-moves";
|
import { LevelMoves, pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "#app/data/balance/pokemon-level-moves";
|
||||||
import PokemonSpecies, { allSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities, POKERUS_STARTER_COUNT, getPokerusStarters } from "../data/pokemon-species";
|
import PokemonSpecies, { allSpecies, getPokemonSpeciesForm, getPokerusStarters } from "#app/data/pokemon-species";
|
||||||
import { Type } from "../data/type";
|
import { getStarterValueFriendshipCap, speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters";
|
||||||
import { GameModes } from "../game-mode";
|
import { starterPassiveAbilities } from "#app/data/balance/passives";
|
||||||
import { AbilityAttr, DexAttr, DexAttrProps, DexEntry, StarterMoveset, StarterAttributes, StarterPreferences, StarterPrefs } from "../system/game-data";
|
import { Type } from "#app/data/type";
|
||||||
import { Tutorial, handleTutorial } from "../tutorial";
|
import { GameModes } from "#app/game-mode";
|
||||||
import * as Utils from "../utils";
|
import { AbilityAttr, DexAttr, DexAttrProps, DexEntry, StarterMoveset, StarterAttributes, StarterPreferences, StarterPrefs } from "#app/system/game-data";
|
||||||
import { OptionSelectItem } from "./abstact-option-select-ui-handler";
|
import { Tutorial, handleTutorial } from "#app/tutorial";
|
||||||
import MessageUiHandler from "./message-ui-handler";
|
import * as Utils from "#app/utils";
|
||||||
import PokemonIconAnimHandler, { PokemonIconAnimMode } from "./pokemon-icon-anim-handler";
|
import { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler";
|
||||||
import { StatsContainer } from "./stats-container";
|
import MessageUiHandler from "#app/ui/message-ui-handler";
|
||||||
import { TextStyle, addBBCodeTextObject, addTextObject } from "./text";
|
import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler";
|
||||||
import { Mode } from "./ui";
|
import { StatsContainer } from "#app/ui/stats-container";
|
||||||
import { addWindow } from "./ui-theme";
|
import { TextStyle, addBBCodeTextObject, addTextObject } from "#app/ui/text";
|
||||||
|
import { Mode } from "#app/ui/ui";
|
||||||
|
import { addWindow } from "#app/ui/ui-theme";
|
||||||
import { Egg } from "#app/data/egg";
|
import { Egg } from "#app/data/egg";
|
||||||
import Overrides from "#app/overrides";
|
import Overrides from "#app/overrides";
|
||||||
import { SettingKeyboard } from "#app/system/settings/settings-keyboard";
|
import { SettingKeyboard } from "#app/system/settings/settings-keyboard";
|
||||||
import { Passive as PassiveAttr } from "#enums/passive";
|
import { Passive as PassiveAttr } from "#enums/passive";
|
||||||
import * as Challenge from "../data/challenge";
|
import * as Challenge from "#app/data/challenge";
|
||||||
import MoveInfoOverlay from "./move-info-overlay";
|
import MoveInfoOverlay from "#app/ui/move-info-overlay";
|
||||||
import { getEggTierForSpecies } from "#app/data/egg";
|
import { getEggTierForSpecies } from "#app/data/egg";
|
||||||
import { Device } from "#enums/devices";
|
import { Device } from "#enums/devices";
|
||||||
import { Moves } from "#enums/moves";
|
import { Moves } from "#enums/moves";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
import { Button } from "#enums/buttons";
|
import { Button } from "#enums/buttons";
|
||||||
import { EggSourceType } from "#app/enums/egg-source-types";
|
import { EggSourceType } from "#enums/egg-source-types";
|
||||||
import AwaitableUiHandler from "./awaitable-ui-handler";
|
import AwaitableUiHandler from "#app/ui/awaitable-ui-handler";
|
||||||
import { DropDown, DropDownLabel, DropDownOption, DropDownState, DropDownType, SortCriteria } from "./dropdown";
|
import { DropDown, DropDownLabel, DropDownOption, DropDownState, DropDownType, SortCriteria } from "#app/ui/dropdown";
|
||||||
import { StarterContainer } from "./starter-container";
|
import { StarterContainer } from "#app/ui/starter-container";
|
||||||
import { DropDownColumn, FilterBar } from "./filter-bar";
|
import { DropDownColumn, FilterBar } from "#app/ui/filter-bar";
|
||||||
import { ScrollBar } from "./scroll-bar";
|
import { ScrollBar } from "#app/ui/scroll-bar";
|
||||||
import { SelectChallengePhase } from "#app/phases/select-challenge-phase";
|
import { SelectChallengePhase } from "#app/phases/select-challenge-phase";
|
||||||
import { TitlePhase } from "#app/phases/title-phase";
|
import { TitlePhase } from "#app/phases/title-phase";
|
||||||
import { Abilities } from "#app/enums/abilities";
|
import { Abilities } from "#enums/abilities";
|
||||||
|
import { getPassiveCandyCount, getValueReductionCandyCounts, getSameSpeciesEggCandyCounts } from "#app/data/balance/starters";
|
||||||
|
|
||||||
export type StarterSelectCallback = (starters: Starter[]) => void;
|
export type StarterSelectCallback = (starters: Starter[]) => void;
|
||||||
|
|
||||||
|
@ -119,19 +122,6 @@ const languageSettings: { [key: string]: LanguageSetting } = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const starterCandyCosts: { passive: integer, costReduction: [integer, integer], egg: integer }[] = [
|
|
||||||
{ passive: 40, costReduction: [25, 60], egg: 30 }, // 1 Cost
|
|
||||||
{ passive: 40, costReduction: [25, 60], egg: 30 }, // 2 Cost
|
|
||||||
{ passive: 35, costReduction: [20, 50], egg: 25 }, // 3 Cost
|
|
||||||
{ passive: 30, costReduction: [15, 40], egg: 20 }, // 4 Cost
|
|
||||||
{ passive: 25, costReduction: [12, 35], egg: 18 }, // 5 Cost
|
|
||||||
{ passive: 20, costReduction: [10, 30], egg: 15 }, // 6 Cost
|
|
||||||
{ passive: 15, costReduction: [8, 20], egg: 12 }, // 7 Cost
|
|
||||||
{ passive: 10, costReduction: [5, 15], egg: 10 }, // 8 Cost
|
|
||||||
{ passive: 10, costReduction: [5, 15], egg: 10 }, // 9 Cost
|
|
||||||
{ passive: 10, costReduction: [5, 15], egg: 10 }, // 10 Cost
|
|
||||||
];
|
|
||||||
|
|
||||||
const valueReductionMax = 2;
|
const valueReductionMax = 2;
|
||||||
|
|
||||||
// Position of UI elements
|
// Position of UI elements
|
||||||
|
@ -142,18 +132,6 @@ const teamWindowY = 18;
|
||||||
const teamWindowWidth = 34;
|
const teamWindowWidth = 34;
|
||||||
const teamWindowHeight = 132;
|
const teamWindowHeight = 132;
|
||||||
|
|
||||||
function getPassiveCandyCount(baseValue: integer): integer {
|
|
||||||
return starterCandyCosts[baseValue - 1].passive;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getValueReductionCandyCounts(baseValue: integer): [integer, integer] {
|
|
||||||
return starterCandyCosts[baseValue - 1].costReduction;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getSameSpeciesEggCandyCounts(baseValue: integer): integer {
|
|
||||||
return starterCandyCosts[baseValue - 1].egg;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculates the starter position for a Pokemon of a given UI index
|
* Calculates the starter position for a Pokemon of a given UI index
|
||||||
* @param index UI index to calculate the starter position of
|
* @param index UI index to calculate the starter position of
|
||||||
|
@ -658,7 +636,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||||
starterBoxContainer.add(this.cursorObj);
|
starterBoxContainer.add(this.cursorObj);
|
||||||
|
|
||||||
for (const species of allSpecies) {
|
for (const species of allSpecies) {
|
||||||
if (!speciesStarters.hasOwnProperty(species.speciesId) || !species.isObtainable()) {
|
if (!speciesStarterCosts.hasOwnProperty(species.speciesId) || !species.isObtainable()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1112,7 +1090,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||||
// Get this species ID's starter data
|
// Get this species ID's starter data
|
||||||
const starterData = this.scene.gameData.starterData[speciesId];
|
const starterData = this.scene.gameData.starterData[speciesId];
|
||||||
|
|
||||||
return starterData.candyCount >= getPassiveCandyCount(speciesStarters[speciesId])
|
return starterData.candyCount >= getPassiveCandyCount(speciesStarterCosts[speciesId])
|
||||||
&& !(starterData.passiveAttr & PassiveAttr.UNLOCKED);
|
&& !(starterData.passiveAttr & PassiveAttr.UNLOCKED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1125,7 +1103,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||||
// Get this species ID's starter data
|
// Get this species ID's starter data
|
||||||
const starterData = this.scene.gameData.starterData[speciesId];
|
const starterData = this.scene.gameData.starterData[speciesId];
|
||||||
|
|
||||||
return starterData.candyCount >= getValueReductionCandyCounts(speciesStarters[speciesId])[starterData.valueReduction]
|
return starterData.candyCount >= getValueReductionCandyCounts(speciesStarterCosts[speciesId])[starterData.valueReduction]
|
||||||
&& starterData.valueReduction < valueReductionMax;
|
&& starterData.valueReduction < valueReductionMax;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1138,7 +1116,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||||
// Get this species ID's starter data
|
// Get this species ID's starter data
|
||||||
const starterData = this.scene.gameData.starterData[speciesId];
|
const starterData = this.scene.gameData.starterData[speciesId];
|
||||||
|
|
||||||
return starterData.candyCount >= getSameSpeciesEggCandyCounts(speciesStarters[speciesId]);
|
return starterData.candyCount >= getSameSpeciesEggCandyCounts(speciesStarterCosts[speciesId]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1732,7 +1710,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||||
|
|
||||||
// Unlock passive option
|
// Unlock passive option
|
||||||
if (!(passiveAttr & PassiveAttr.UNLOCKED)) {
|
if (!(passiveAttr & PassiveAttr.UNLOCKED)) {
|
||||||
const passiveCost = getPassiveCandyCount(speciesStarters[this.lastSpecies.speciesId]);
|
const passiveCost = getPassiveCandyCount(speciesStarterCosts[this.lastSpecies.speciesId]);
|
||||||
options.push({
|
options.push({
|
||||||
label: `x${passiveCost} ${i18next.t("starterSelectUiHandler:unlockPassive")} (${allAbilities[starterPassiveAbilities[this.lastSpecies.speciesId]].name})`,
|
label: `x${passiveCost} ${i18next.t("starterSelectUiHandler:unlockPassive")} (${allAbilities[starterPassiveAbilities[this.lastSpecies.speciesId]].name})`,
|
||||||
handler: () => {
|
handler: () => {
|
||||||
|
@ -1768,7 +1746,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||||
// Reduce cost option
|
// Reduce cost option
|
||||||
const valueReduction = starterData.valueReduction;
|
const valueReduction = starterData.valueReduction;
|
||||||
if (valueReduction < valueReductionMax) {
|
if (valueReduction < valueReductionMax) {
|
||||||
const reductionCost = getValueReductionCandyCounts(speciesStarters[this.lastSpecies.speciesId])[valueReduction];
|
const reductionCost = getValueReductionCandyCounts(speciesStarterCosts[this.lastSpecies.speciesId])[valueReduction];
|
||||||
options.push({
|
options.push({
|
||||||
label: `x${reductionCost} ${i18next.t("starterSelectUiHandler:reduceCost")}`,
|
label: `x${reductionCost} ${i18next.t("starterSelectUiHandler:reduceCost")}`,
|
||||||
handler: () => {
|
handler: () => {
|
||||||
|
@ -1802,7 +1780,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Same species egg menu option.
|
// Same species egg menu option.
|
||||||
const sameSpeciesEggCost = getSameSpeciesEggCandyCounts(speciesStarters[this.lastSpecies.speciesId]);
|
const sameSpeciesEggCost = getSameSpeciesEggCandyCounts(speciesStarterCosts[this.lastSpecies.speciesId]);
|
||||||
options.push({
|
options.push({
|
||||||
label: `x${sameSpeciesEggCost} ${i18next.t("starterSelectUiHandler:sameSpeciesEgg")}`,
|
label: `x${sameSpeciesEggCost} ${i18next.t("starterSelectUiHandler:sameSpeciesEgg")}`,
|
||||||
handler: () => {
|
handler: () => {
|
||||||
|
@ -2723,7 +2701,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||||
currentFriendship = 0;
|
currentFriendship = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const friendshipCap = getStarterValueFriendshipCap(speciesStarters[speciesId]);
|
const friendshipCap = getStarterValueFriendshipCap(speciesStarterCosts[speciesId]);
|
||||||
|
|
||||||
return { currentFriendship, friendshipCap };
|
return { currentFriendship, friendshipCap };
|
||||||
}
|
}
|
||||||
|
@ -3356,7 +3334,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||||
|
|
||||||
updateStarterValueLabel(starter: StarterContainer): void {
|
updateStarterValueLabel(starter: StarterContainer): void {
|
||||||
const speciesId = starter.species.speciesId;
|
const speciesId = starter.species.speciesId;
|
||||||
const baseStarterValue = speciesStarters[speciesId];
|
const baseStarterValue = speciesStarterCosts[speciesId];
|
||||||
const starterValue = this.scene.gameData.getSpeciesStarterValue(speciesId);
|
const starterValue = this.scene.gameData.getSpeciesStarterValue(speciesId);
|
||||||
starter.cost = starterValue;
|
starter.cost = starterValue;
|
||||||
let valueStr = starterValue.toString();
|
let valueStr = starterValue.toString();
|
||||||
|
|
|
@ -1,28 +1,28 @@
|
||||||
import BattleScene, { starterColors } from "../battle-scene";
|
import BattleScene, { starterColors } from "#app/battle-scene";
|
||||||
import { Mode } from "./ui";
|
import { Mode } from "#app/ui/ui";
|
||||||
import UiHandler from "./ui-handler";
|
import UiHandler from "#app/ui/ui-handler";
|
||||||
import * as Utils from "../utils";
|
import * as Utils from "#app/utils";
|
||||||
import { PlayerPokemon, PokemonMove } from "../field/pokemon";
|
import { PlayerPokemon, PokemonMove } from "#app/field/pokemon";
|
||||||
import { getStarterValueFriendshipCap, speciesStarters } from "../data/pokemon-species";
|
import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters";
|
||||||
import { argbFromRgba } from "@material/material-color-utilities";
|
import { argbFromRgba } from "@material/material-color-utilities";
|
||||||
import { Type, getTypeRgb } from "../data/type";
|
import { Type, getTypeRgb } from "#app/data/type";
|
||||||
import { TextStyle, addBBCodeTextObject, addTextObject, getBBCodeFrag } from "./text";
|
import { TextStyle, addBBCodeTextObject, addTextObject, getBBCodeFrag } from "#app/ui/text";
|
||||||
import Move, { MoveCategory } from "../data/move";
|
import Move, { MoveCategory } from "#app/data/move";
|
||||||
import { getPokeballAtlasKey } from "../data/pokeball";
|
import { getPokeballAtlasKey } from "#app/data/pokeball";
|
||||||
import { getGenderColor, getGenderSymbol } from "../data/gender";
|
import { getGenderColor, getGenderSymbol } from "#app/data/gender";
|
||||||
import { getLevelRelExp, getLevelTotalExp } from "../data/exp";
|
import { getLevelRelExp, getLevelTotalExp } from "#app/data/exp";
|
||||||
import { PokemonHeldItemModifier } from "../modifier/modifier";
|
import { PokemonHeldItemModifier } from "#app/modifier/modifier";
|
||||||
import { StatusEffect } from "../data/status-effect";
|
import { StatusEffect } from "#app/data/status-effect";
|
||||||
import { getBiomeName } from "../data/biomes";
|
import { getBiomeName } from "#app/data/balance/biomes";
|
||||||
import { Nature, getNatureName, getNatureStatMultiplier } from "../data/nature";
|
import { Nature, getNatureName, getNatureStatMultiplier } from "#app/data/nature";
|
||||||
import { loggedInUser } from "../account";
|
import { loggedInUser } from "#app/account";
|
||||||
import { Variant, getVariantTint } from "#app/data/variant";
|
import { Variant, getVariantTint } from "#app/data/variant";
|
||||||
import { Button } from "#enums/buttons";
|
import { Button } from "#enums/buttons";
|
||||||
import { Ability } from "../data/ability";
|
import { Ability } from "#app/data/ability";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import {modifierSortFunc} from "../modifier/modifier";
|
import { modifierSortFunc } from "#app/modifier/modifier";
|
||||||
import { PlayerGender } from "#enums/player-gender";
|
import { PlayerGender } from "#enums/player-gender";
|
||||||
import { Stat, PERMANENT_STATS, getStatKey } from "#app/enums/stat";
|
import { Stat, PERMANENT_STATS, getStatKey } from "#enums/stat";
|
||||||
|
|
||||||
enum Page {
|
enum Page {
|
||||||
PROFILE,
|
PROFILE,
|
||||||
|
@ -333,7 +333,7 @@ export default class SummaryUiHandler extends UiHandler {
|
||||||
currentFriendship = 0;
|
currentFriendship = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const friendshipCap = getStarterValueFriendshipCap(speciesStarters[this.pokemon.species.getRootSpeciesId()]);
|
const friendshipCap = getStarterValueFriendshipCap(speciesStarterCosts[this.pokemon.species.getRootSpeciesId()]);
|
||||||
const candyCropY = 16 - (16 * (currentFriendship / friendshipCap));
|
const candyCropY = 16 - (16 * (currentFriendship / friendshipCap));
|
||||||
|
|
||||||
if (this.candyShadow.visible) {
|
if (this.candyShadow.visible) {
|
||||||
|
|
Loading…
Reference in New Issue