Change to nicer type

This commit is contained in:
AJ Fontaine 2025-05-27 20:19:21 -04:00
parent 66574938a5
commit 071d24974c

View File

@ -10,9 +10,9 @@ import { Biome } from "#enums/biome";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import { TimeOfDay } from "#enums/time-of-day";
import { EvoTrackerModifier, EvoTrackerMoveUseModifier, EvoTrackerRecoilModifier, SpeciesStatBoosterModifier, PersistentModifier} from "#app/modifier/modifier";
import { EvoTrackerModifier, EvoTrackerMoveUseModifier, EvoTrackerRecoilModifier, SpeciesStatBoosterModifier } from "#app/modifier/modifier";
import { SpeciesFormKey } from "#enums/species-form-key";
import type { ModifierTypeKeys, SpeciesStatBoosterItem, SpeciesStatBoosterModifierType } from "#app/modifier/modifier-type";
import type { SpeciesStatBoosterItem, SpeciesStatBoosterModifierType } from "#app/modifier/modifier-type";
import { speciesStarterCosts } from "./starters";
import i18next from "i18next";
import { allMoves } from "#app/data/data-lists";
@ -76,6 +76,8 @@ export enum EvolutionItem {
LEADERS_CREST
}
type TyrogueMove = Moves.LOW_SWEEP | Moves.MACH_PUNCH | Moves.RAPID_SPIN;
/**
* Pokemon Evolution tuple type consisting of:
* @property 0 {@linkcode Species} The species of the Pokemon.
@ -83,7 +85,7 @@ export enum EvolutionItem {
*/
export type EvolutionLevel = [species: Species, level: number];
export enum EvoCondKey {
enum EvoCondKey {
NONE,
FRIENDSHIP,
TIME,
@ -104,156 +106,113 @@ export enum EvoCondKey {
HELD_ITEM, // Currently checks only for species stat booster items
}
export interface EvolutionConditionData {
key: EvoCondKey | EvoCondKey[];
friendship?: number;
move?: Moves;
time?: TimeOfDay[];
moveType?: PokemonType;
partyType?: PokemonType;
evoCount?: number;
weather?: WeatherType[];
biome?: Biome[];
randomFormChance?: number;
speciesCaught?: Species;
gender?: Gender;
nature?: Nature[];
itemKey?: SpeciesStatBoosterItem;
}
type EvolutionConditionData =
{key: EvoCondKey.FRIENDSHIP | EvoCondKey.RANDOM_FORM | EvoCondKey.EVO_TREASURE_TRACKER | EvoCondKey.RECOIL_DAMAGE_COUNT, value: number} |
{key: EvoCondKey.MOVE, move: Moves} |
{key: EvoCondKey.TIME, time: TimeOfDay[]} |
{key: EvoCondKey.BIOME, biome: Biome[]} |
{key: EvoCondKey.GENDER, gender: Gender} |
{key: EvoCondKey.MOVE_TYPE | EvoCondKey.PARTY_TYPE, pkmnType: PokemonType} |
{key: EvoCondKey.MOVE_USE_COUNT, move: Moves, value: number} |
{key: EvoCondKey.SPECIES_CAUGHT, speciesCaught: Species} |
{key: EvoCondKey.HELD_ITEM, itemKey: SpeciesStatBoosterItem} |
{key: EvoCondKey.NATURE, nature: Nature[]} |
{key: EvoCondKey.WEATHER, weather: WeatherType[]} |
{key: EvoCondKey.TYROGUE, move: TyrogueMove} |
{key: EvoCondKey.SHEDINJA | EvoCondKey.NONE}
;
export class SpeciesEvolutionCondition {
public data: EvolutionConditionData;
public data: EvolutionConditionData[];
constructor(data: EvolutionConditionData) {
constructor(...data: EvolutionConditionData[]) {
this.data = data;
// Validate data
const keys = Array.isArray(this.data.key) ? this.data.key : [this.data.key];
keys.map(cond => {
if (
(cond === EvoCondKey.FRIENDSHIP && isNullOrUndefined(this.data.friendship)) ||
((cond === EvoCondKey.MOVE || cond === EvoCondKey.TYROGUE) && isNullOrUndefined(this.data.move)) ||
(cond === EvoCondKey.TIME && (isNullOrUndefined(this.data.time) || this.data.time.length === 0)) ||
(cond === EvoCondKey.WEATHER && (isNullOrUndefined(this.data.weather) || this.data.weather.length === 0)) ||
(cond === EvoCondKey.BIOME && (isNullOrUndefined(this.data.biome) || this.data.biome.length === 0)) ||
(cond === EvoCondKey.NATURE && (isNullOrUndefined(this.data.nature) || this.data.nature.length === 0)) ||
(cond === EvoCondKey.MOVE_TYPE && isNullOrUndefined(this.data.moveType)) ||
(cond === EvoCondKey.PARTY_TYPE && isNullOrUndefined(this.data.partyType)) ||
(cond === EvoCondKey.GENDER && isNullOrUndefined(this.data.gender)) ||
((cond === EvoCondKey.EVO_TREASURE_TRACKER || cond === EvoCondKey.RECOIL_DAMAGE_COUNT) && isNullOrUndefined(this.data.evoCount)) ||
(cond === EvoCondKey.RANDOM_FORM && isNullOrUndefined(this.data.randomFormChance)) ||
(cond === EvoCondKey.GENDER && isNullOrUndefined(this.data.gender)) ||
(cond === EvoCondKey.SPECIES_CAUGHT && isNullOrUndefined(this.data.speciesCaught)) ||
(cond === EvoCondKey.MOVE_USE_COUNT && (isNullOrUndefined(this.data.move) || isNullOrUndefined(this.data.evoCount))) ||
(cond === EvoCondKey.HELD_ITEM && (isNullOrUndefined(this.data.itemKey) || this.data.itemKey.length === 0))
) {
console.log("Error! Missing data for evo condition: ", EvoCondKey[cond]);
}
});
}
public get description(): string {
const str: string[] = [];
const keys = Array.isArray(this.data.key) ? this.data.key : [this.data.key];
keys.map(cond => {
switch(cond) {
const str: string[] = this.data.map(cond => {
switch(cond.key) {
case EvoCondKey.FRIENDSHIP:
str.push(i18next.t("pokemonEvolutions:friendship"));
break;
return i18next.t("pokemonEvolutions:friendship");
case EvoCondKey.TIME:
str.push(i18next.t(`pokemonEvolutions:timeOfDay.${TimeOfDay[this.data.time![0]]}`));
break;
return i18next.t(`pokemonEvolutions:timeOfDay.${TimeOfDay[cond.time[0]]}`);
case EvoCondKey.MOVE_TYPE:
str.push(i18next.t("pokemonEvolutions:moveType", {type: i18next.t(`pokemonInfo:Type.${this.data.moveType!}`)}));
break;
return i18next.t("pokemonEvolutions:moveType", {type: i18next.t(`pokemonInfo:Type.${cond.pkmnType}`)});
case EvoCondKey.PARTY_TYPE:
str.push(i18next.t("pokemonEvolutions:partyType", {type: i18next.t(`pokemonInfo:Type.${this.data.partyType!}`)}));
break;
return i18next.t("pokemonEvolutions:partyType", {type: i18next.t(`pokemonInfo:Type.${cond.pkmnType}`)});
case EvoCondKey.GENDER:
str.push(i18next.t(`pokemonEvolutions:gender.${Gender[this.data.gender!]}`));
break;
return i18next.t(`pokemonEvolutions:gender.${Gender[cond.gender]}`);
case EvoCondKey.MOVE:
case EvoCondKey.TYROGUE:
str.push(i18next.t("pokemonEvolutions:move", {move: allMoves[this.data.move!].name}));
break;
return i18next.t("pokemonEvolutions:move", {move: allMoves[cond.move].name});
case EvoCondKey.BIOME:
str.push(i18next.t("pokemonEvolutions:biome"));
break;
return i18next.t("pokemonEvolutions:biome");
case EvoCondKey.NATURE:
str.push(i18next.t("pokemonEvolutions:nature"));
break;
return i18next.t("pokemonEvolutions:nature");
case EvoCondKey.WEATHER:
str.push(i18next.t("pokemonEvolutions:weather"));
break;
return i18next.t("pokemonEvolutions:weather");
case EvoCondKey.SHEDINJA:
str.push(i18next.t("pokemonEvolutions:shedinja"));
break;
return i18next.t("pokemonEvolutions:shedinja");
case EvoCondKey.EVO_TREASURE_TRACKER:
str.push(i18next.t("pokemonEvolutions:treasure"));
break;
return i18next.t("pokemonEvolutions:treasure");
case EvoCondKey.SPECIES_CAUGHT:
str.push(i18next.t("pokemonEvolutions:caught", {species: getPokemonSpecies(this.data.speciesCaught!).name}));
break;
return i18next.t("pokemonEvolutions:caught", {species: getPokemonSpecies(cond.speciesCaught).name});
case EvoCondKey.MOVE_USE_COUNT:
str.push(i18next.t("pokemonEvolutions:useMoveCount", {move: allMoves[this.data.move!].name, count: this.data.evoCount!}));
break;
return i18next.t("pokemonEvolutions:useMoveCount", {move: allMoves[cond.move].name, count: cond.value});
case EvoCondKey.RECOIL_DAMAGE_COUNT:
str.push(i18next.t("pokemonEvolutions:recoil"));
break;
return i18next.t("pokemonEvolutions:recoil");
case EvoCondKey.HELD_ITEM:
str.push(i18next.t("pokemonEvolutions:heldItem"));
break;
return i18next.t("pokemonEvolutions:heldItem");
}
});
}).filter(s => !isNullOrUndefined(s)); // Filter out stringless conditions
return str.join(i18next.t("pokemonEvolutions:connector"));
}
public conditionsFulfilled(pokemon: Pokemon): boolean {
console.log(this.data);
const keys = Array.isArray(this.data.key) ? this.data.key : [this.data.key];
return keys.every(cond => {
switch (cond) {
return this.data.every(cond => {
switch (cond.key) {
case EvoCondKey.FRIENDSHIP:
return pokemon.friendship >= this.data.friendship!;
return pokemon.friendship >= cond.value;
case EvoCondKey.TIME:
return this.data.time?.includes(globalScene.arena.getTimeOfDay());
return cond.time.includes(globalScene.arena.getTimeOfDay());
case EvoCondKey.MOVE:
return pokemon.moveset.some(m => m.moveId === this.data.move);
return pokemon.moveset.some(m => m.moveId === cond.move);
case EvoCondKey.MOVE_TYPE:
return pokemon.moveset.some(m => m.getMove().type === this.data.moveType);
return pokemon.moveset.some(m => m.getMove().type === cond.pkmnType);
case EvoCondKey.PARTY_TYPE:
return !!globalScene.getPlayerParty().find(p => p.getTypes(false, false, true).indexOf(this.data.partyType!) > -1)
return !!globalScene.getPlayerParty().find(p => p.getTypes(false, false, true).indexOf(cond.pkmnType) > -1)
case EvoCondKey.EVO_TREASURE_TRACKER:
return pokemon.getHeldItems().some(m => m instanceof EvoTrackerModifier && m.getStackCount() >= this.data.evoCount!);
return pokemon.getHeldItems().some(m => m instanceof EvoTrackerModifier && m.getStackCount() >= cond.value);
case EvoCondKey.GENDER:
return pokemon.gender === this.data.gender;
return pokemon.gender === cond.gender;
case EvoCondKey.SHEDINJA: // Shedinja cannot be evolved into directly
return false;
case EvoCondKey.BIOME:
return this.data.biome?.includes(globalScene.arena.biomeType);
return cond.biome.includes(globalScene.arena.biomeType);
case EvoCondKey.WEATHER:
return this.data.weather?.includes(globalScene.arena.getWeatherType());
return cond.weather.includes(globalScene.arena.getWeatherType());
case EvoCondKey.TYROGUE:
return pokemon.getMoveset(true).find(m =>
m && [ Moves.LOW_SWEEP, Moves.MACH_PUNCH, Moves.RAPID_SPIN ].includes(m.moveId)
)?.moveId === this.data.move;
m && m.moveId as TyrogueMove
)?.moveId === cond.move;
case EvoCondKey.NATURE:
return this.data.nature?.includes(pokemon.getNature());
return cond.nature.includes(pokemon.getNature());
case EvoCondKey.RANDOM_FORM:
let ret = false;
globalScene.executeWithSeedOffset(() => ret = !randSeedInt(this.data.randomFormChance!), pokemon.id);
globalScene.executeWithSeedOffset(() => ret = !randSeedInt(cond.value), pokemon.id);
return ret;
case EvoCondKey.SPECIES_CAUGHT:
return !!globalScene.gameData.dexData[this.data.speciesCaught!].caughtAttr;
return !!globalScene.gameData.dexData[cond.speciesCaught].caughtAttr;
case EvoCondKey.MOVE_USE_COUNT:
return pokemon.getHeldItems().some(m =>
m instanceof EvoTrackerMoveUseModifier &&
m.shouldApply(pokemon, this.data.move!) &&
m.getStackCount() >= this.data.evoCount!);
m.shouldApply(pokemon, cond.move) &&
m.getStackCount() >= cond.value);
case EvoCondKey.RECOIL_DAMAGE_COUNT:
return pokemon.getHeldItems().some(m => m instanceof EvoTrackerRecoilModifier && m.getStackCount() >= this.data.evoCount!);
return pokemon.getHeldItems().some(m => m instanceof EvoTrackerRecoilModifier && m.getStackCount() >= cond.value);
case EvoCondKey.HELD_ITEM:
return pokemon.getHeldItems().some(m => m instanceof SpeciesStatBoosterModifier && (m.type as SpeciesStatBoosterModifierType).key === this.data.itemKey!)
return pokemon.getHeldItems().some(m => m instanceof SpeciesStatBoosterModifier && (m.type as SpeciesStatBoosterModifierType).key === cond.itemKey)
}
});
}
@ -273,15 +232,20 @@ export class SpeciesFormEvolution {
public wildDelay: SpeciesWildEvolutionDelay;
public desc = "";
constructor(speciesId: Species, preFormKey: string | null, evoFormKey: string | null, level: number, item: EvolutionItem | null, condition: EvolutionConditionData | null, wildDelay?: SpeciesWildEvolutionDelay) {
constructor(speciesId: Species, preFormKey: string | null, evoFormKey: string | null, level: number, item: EvolutionItem | null, condition: EvolutionConditionData | EvolutionConditionData[] | null, wildDelay?: SpeciesWildEvolutionDelay) {
this.speciesId = speciesId;
this.preFormKey = preFormKey;
this.evoFormKey = evoFormKey;
this.level = level;
this.item = item || EvolutionItem.NONE;
if (!isNullOrUndefined(condition)) {
if (Array.isArray(condition)) { // Waiting on coerceArray...
this.condition = new SpeciesEvolutionCondition(...condition);
}
else {
this.condition = new SpeciesEvolutionCondition(condition);
}
}
this.wildDelay = wildDelay ?? SpeciesWildEvolutionDelay.NONE;
}
@ -341,7 +305,7 @@ export class SpeciesFormEvolution {
}
export class SpeciesEvolution extends SpeciesFormEvolution {
constructor(speciesId: Species, level: number, item: EvolutionItem | null, condition: EvolutionConditionData | null, wildDelay?: SpeciesWildEvolutionDelay) {
constructor(speciesId: Species, level: number, item: EvolutionItem | null, condition: EvolutionConditionData | EvolutionConditionData[] | null, wildDelay?: SpeciesWildEvolutionDelay) {
super(speciesId, null, null, level, item, condition, wildDelay);
}
}
@ -1107,7 +1071,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
new SpeciesEvolution(Species.GOGOAT, 32, null, null)
],
[Species.PANCHAM]: [
new SpeciesEvolution(Species.PANGORO, 32, null, {key: EvoCondKey.PARTY_TYPE, partyType: PokemonType.DARK}, SpeciesWildEvolutionDelay.MEDIUM)
new SpeciesEvolution(Species.PANGORO, 32, null, {key: EvoCondKey.PARTY_TYPE, pkmnType: PokemonType.DARK}, SpeciesWildEvolutionDelay.MEDIUM)
],
[Species.ESPURR]: [
new SpeciesFormEvolution(Species.MEOWSTIC, "", "female", 25, null, {key: EvoCondKey.GENDER, gender: Gender.FEMALE}),
@ -1399,7 +1363,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
new SpeciesEvolution(Species.PAWMOT, 32, null, null)
],
[Species.TANDEMAUS]: [
new SpeciesFormEvolution(Species.MAUSHOLD, "", "three", 25, null, {key: EvoCondKey.RANDOM_FORM, randomFormChance: 4}),
new SpeciesFormEvolution(Species.MAUSHOLD, "", "three", 25, null, {key: EvoCondKey.RANDOM_FORM, value: 4}),
new SpeciesFormEvolution(Species.MAUSHOLD, "", "four", 25, null, null)
],
[Species.FIDOUGH]: [
@ -1523,12 +1487,12 @@ export const pokemonEvolutions: PokemonEvolutions = {
new SpeciesEvolution(Species.STARMIE, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG)
],
[Species.EEVEE]: [
new SpeciesFormEvolution(Species.SYLVEON, "", "", 1, null, {key: [EvoCondKey.FRIENDSHIP, EvoCondKey.MOVE_TYPE], friendship: 120, moveType: PokemonType.FAIRY}, SpeciesWildEvolutionDelay.LONG),
new SpeciesFormEvolution(Species.SYLVEON, "partner", "", 1, null, {key: [EvoCondKey.FRIENDSHIP, EvoCondKey.MOVE_TYPE], friendship: 120, moveType: PokemonType.FAIRY}, SpeciesWildEvolutionDelay.LONG),
new SpeciesFormEvolution(Species.ESPEON, "", "", 1, null, {key: [EvoCondKey.FRIENDSHIP, EvoCondKey.TIME], friendship: 120, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}, SpeciesWildEvolutionDelay.LONG),
new SpeciesFormEvolution(Species.ESPEON, "partner", "", 1, null, {key: [EvoCondKey.FRIENDSHIP, EvoCondKey.TIME], friendship: 120, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}, SpeciesWildEvolutionDelay.LONG),
new SpeciesFormEvolution(Species.UMBREON, "", "", 1, null, {key: [EvoCondKey.FRIENDSHIP, EvoCondKey.TIME], friendship: 120, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}, SpeciesWildEvolutionDelay.LONG),
new SpeciesFormEvolution(Species.UMBREON, "partner", "", 1, null, {key: [EvoCondKey.FRIENDSHIP, EvoCondKey.TIME], friendship: 120, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}, SpeciesWildEvolutionDelay.LONG),
new SpeciesFormEvolution(Species.SYLVEON, "", "", 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 120}, {key: EvoCondKey.MOVE_TYPE, pkmnType: PokemonType.FAIRY}], SpeciesWildEvolutionDelay.LONG),
new SpeciesFormEvolution(Species.SYLVEON, "partner", "", 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 120}, {key: EvoCondKey.MOVE_TYPE, pkmnType: PokemonType.FAIRY}], SpeciesWildEvolutionDelay.LONG),
new SpeciesFormEvolution(Species.ESPEON, "", "", 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 120}, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}], SpeciesWildEvolutionDelay.LONG),
new SpeciesFormEvolution(Species.ESPEON, "partner", "", 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 120}, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}], SpeciesWildEvolutionDelay.LONG),
new SpeciesFormEvolution(Species.UMBREON, "", "", 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 120}, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}], SpeciesWildEvolutionDelay.LONG),
new SpeciesFormEvolution(Species.UMBREON, "partner", "", 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 120}, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}], SpeciesWildEvolutionDelay.LONG),
new SpeciesFormEvolution(Species.VAPOREON, "", "", 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG),
new SpeciesFormEvolution(Species.VAPOREON, "partner", "", 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG),
new SpeciesFormEvolution(Species.JOLTEON, "", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG),
@ -1562,7 +1526,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
new SpeciesEvolution(Species.FARIGIRAF, 32, null, {key: EvoCondKey.MOVE, move: Moves.TWIN_BEAM}, SpeciesWildEvolutionDelay.LONG)
],
[Species.DUNSPARCE]: [
new SpeciesFormEvolution(Species.DUDUNSPARCE, "", "three-segment", 32, null, {key: [EvoCondKey.MOVE, EvoCondKey.RANDOM_FORM], move: Moves.HYPER_DRILL, randomFormChance: 4}, SpeciesWildEvolutionDelay.LONG),
new SpeciesFormEvolution(Species.DUDUNSPARCE, "", "three-segment", 32, null, [{key: EvoCondKey.RANDOM_FORM, value: 4}, {key: EvoCondKey.MOVE, move: Moves.HYPER_DRILL}], SpeciesWildEvolutionDelay.LONG),
new SpeciesFormEvolution(Species.DUDUNSPARCE, "", "two-segment", 32, null, {key: EvoCondKey.MOVE, move: Moves.HYPER_DRILL}, SpeciesWildEvolutionDelay.LONG)
],
[Species.GLIGAR]: [
@ -1578,7 +1542,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
new SpeciesEvolution(Species.MAMOSWINE, 1, null, {key: EvoCondKey.MOVE, move: Moves.ANCIENT_POWER}, SpeciesWildEvolutionDelay.VERY_LONG)
],
[Species.STANTLER]: [
new SpeciesEvolution(Species.WYRDEER, 1, null, {key: EvoCondKey.MOVE_USE_COUNT, move: Moves.PSYSHIELD_BASH, evoCount: 10}, SpeciesWildEvolutionDelay.VERY_LONG)
new SpeciesEvolution(Species.WYRDEER, 1, null, {key: EvoCondKey.MOVE_USE_COUNT, move: Moves.PSYSHIELD_BASH, value: 10}, SpeciesWildEvolutionDelay.VERY_LONG)
],
[Species.LOMBRE]: [
new SpeciesEvolution(Species.LUDICOLO, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG)
@ -1599,8 +1563,8 @@ export const pokemonEvolutions: PokemonEvolutions = {
new SpeciesEvolution(Species.SUDOWOODO, 1, null, {key: EvoCondKey.MOVE, move: Moves.MIMIC}, SpeciesWildEvolutionDelay.MEDIUM)
],
[Species.MIME_JR]: [
new SpeciesEvolution(Species.GALAR_MR_MIME, 1, null, {key: [EvoCondKey.MOVE, EvoCondKey.TIME], move: Moves.MIMIC, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}, SpeciesWildEvolutionDelay.MEDIUM),
new SpeciesEvolution(Species.MR_MIME, 1, null, {key: [EvoCondKey.MOVE, EvoCondKey.TIME], move: Moves.MIMIC, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}, SpeciesWildEvolutionDelay.MEDIUM)
new SpeciesEvolution(Species.GALAR_MR_MIME, 1, null, [{key: EvoCondKey.MOVE, move: Moves.MIMIC}, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}], SpeciesWildEvolutionDelay.MEDIUM),
new SpeciesEvolution(Species.MR_MIME, 1, null, [{key: EvoCondKey.MOVE, move: Moves.MIMIC}, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}], SpeciesWildEvolutionDelay.MEDIUM)
],
[Species.PANSAGE]: [
new SpeciesEvolution(Species.SIMISAGE, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG)
@ -1622,8 +1586,8 @@ export const pokemonEvolutions: PokemonEvolutions = {
new SpeciesEvolution(Species.LILLIGANT, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG)
],
[Species.BASCULIN]: [
new SpeciesFormEvolution(Species.BASCULEGION, "white-striped", "female", 1, null, {key: [EvoCondKey.GENDER, EvoCondKey.RECOIL_DAMAGE_COUNT], gender: Gender.FEMALE, evoCount: 294}, SpeciesWildEvolutionDelay.VERY_LONG),
new SpeciesFormEvolution(Species.BASCULEGION, "white-striped", "male", 1, null, {key: [EvoCondKey.GENDER, EvoCondKey.RECOIL_DAMAGE_COUNT], gender: Gender.MALE, evoCount: 294}, SpeciesWildEvolutionDelay.VERY_LONG)
new SpeciesFormEvolution(Species.BASCULEGION, "white-striped", "female", 1, null, [{key: EvoCondKey.GENDER, gender: Gender.FEMALE}, {key: EvoCondKey.RECOIL_DAMAGE_COUNT, value: 294}], SpeciesWildEvolutionDelay.VERY_LONG),
new SpeciesFormEvolution(Species.BASCULEGION, "white-striped", "male", 1, null, [{key: EvoCondKey.GENDER, gender: Gender.MALE}, {key: EvoCondKey.RECOIL_DAMAGE_COUNT, value: 294}], SpeciesWildEvolutionDelay.VERY_LONG)
],
[Species.MINCCINO]: [
new SpeciesEvolution(Species.CINCCINO, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG)
@ -1762,7 +1726,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
new SpeciesEvolution(Species.GENGAR, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG)
],
[Species.ONIX]: [
new SpeciesEvolution(Species.STEELIX, 1, EvolutionItem.LINKING_CORD, {key: EvoCondKey.MOVE_TYPE, moveType: PokemonType.STEEL}, SpeciesWildEvolutionDelay.VERY_LONG)
new SpeciesEvolution(Species.STEELIX, 1, EvolutionItem.LINKING_CORD, {key: EvoCondKey.MOVE_TYPE, pkmnType: PokemonType.STEEL}, SpeciesWildEvolutionDelay.VERY_LONG)
],
[Species.RHYDON]: [
new SpeciesEvolution(Species.RHYPERIOR, 1, EvolutionItem.PROTECTOR, null, SpeciesWildEvolutionDelay.VERY_LONG)
@ -1771,7 +1735,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
new SpeciesEvolution(Species.KINGDRA, 1, EvolutionItem.DRAGON_SCALE, null, SpeciesWildEvolutionDelay.VERY_LONG)
],
[Species.SCYTHER]: [
new SpeciesEvolution(Species.SCIZOR, 1, EvolutionItem.LINKING_CORD, {key: EvoCondKey.MOVE_TYPE, moveType: PokemonType.STEEL}, SpeciesWildEvolutionDelay.VERY_LONG),
new SpeciesEvolution(Species.SCIZOR, 1, EvolutionItem.LINKING_CORD, {key: EvoCondKey.MOVE_TYPE, pkmnType: PokemonType.STEEL}, SpeciesWildEvolutionDelay.VERY_LONG),
new SpeciesEvolution(Species.KLEAVOR, 1, EvolutionItem.BLACK_AUGURITE, null, SpeciesWildEvolutionDelay.VERY_LONG)
],
[Species.ELECTABUZZ]: [
@ -1824,66 +1788,66 @@ export const pokemonEvolutions: PokemonEvolutions = {
new SpeciesEvolution(Species.ALOLA_GOLEM, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG)
],
[Species.PRIMEAPE]: [
new SpeciesEvolution(Species.ANNIHILAPE, 1, null, {key: EvoCondKey.MOVE_USE_COUNT, move: Moves.RAGE_FIST, evoCount: 10}, SpeciesWildEvolutionDelay.VERY_LONG)
new SpeciesEvolution(Species.ANNIHILAPE, 1, null, {key: EvoCondKey.MOVE_USE_COUNT, move: Moves.RAGE_FIST, value: 10}, SpeciesWildEvolutionDelay.VERY_LONG)
],
[Species.GOLBAT]: [
new SpeciesEvolution(Species.CROBAT, 1, null, {key: EvoCondKey.FRIENDSHIP, friendship: 120}, SpeciesWildEvolutionDelay.VERY_LONG)
new SpeciesEvolution(Species.CROBAT, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 120}, SpeciesWildEvolutionDelay.VERY_LONG)
],
[Species.CHANSEY]: [
new SpeciesEvolution(Species.BLISSEY, 1, null, {key: EvoCondKey.FRIENDSHIP, friendship: 200}, SpeciesWildEvolutionDelay.LONG)
new SpeciesEvolution(Species.BLISSEY, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 200}, SpeciesWildEvolutionDelay.LONG)
],
[Species.PICHU]: [
new SpeciesFormEvolution(Species.PIKACHU, "spiky", "partner", 1, null, {key: EvoCondKey.FRIENDSHIP, friendship: 90}, SpeciesWildEvolutionDelay.SHORT),
new SpeciesFormEvolution(Species.PIKACHU, "", "", 1, null, {key: EvoCondKey.FRIENDSHIP, friendship: 90}, SpeciesWildEvolutionDelay.SHORT),
new SpeciesFormEvolution(Species.PIKACHU, "spiky", "partner", 1, null, {key: EvoCondKey.FRIENDSHIP, value: 90}, SpeciesWildEvolutionDelay.SHORT),
new SpeciesFormEvolution(Species.PIKACHU, "", "", 1, null, {key: EvoCondKey.FRIENDSHIP, value: 90}, SpeciesWildEvolutionDelay.SHORT),
],
[Species.CLEFFA]: [
new SpeciesEvolution(Species.CLEFAIRY, 1, null, {key: EvoCondKey.FRIENDSHIP, friendship: 160}, SpeciesWildEvolutionDelay.SHORT)
new SpeciesEvolution(Species.CLEFAIRY, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 160}, SpeciesWildEvolutionDelay.SHORT)
],
[Species.IGGLYBUFF]: [
new SpeciesEvolution(Species.JIGGLYPUFF, 1, null, {key: EvoCondKey.FRIENDSHIP, friendship: 70}, SpeciesWildEvolutionDelay.SHORT)
new SpeciesEvolution(Species.JIGGLYPUFF, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 70}, SpeciesWildEvolutionDelay.SHORT)
],
[Species.TOGEPI]: [
new SpeciesEvolution(Species.TOGETIC, 1, null, {key: EvoCondKey.FRIENDSHIP, friendship: 70}, SpeciesWildEvolutionDelay.SHORT)
new SpeciesEvolution(Species.TOGETIC, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 70}, SpeciesWildEvolutionDelay.SHORT)
],
[Species.AZURILL]: [
new SpeciesEvolution(Species.MARILL, 1, null, {key: EvoCondKey.FRIENDSHIP, friendship: 70}, SpeciesWildEvolutionDelay.SHORT)
new SpeciesEvolution(Species.MARILL, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 70}, SpeciesWildEvolutionDelay.SHORT)
],
[Species.BUDEW]: [
new SpeciesEvolution(Species.ROSELIA, 1, null, {key: [EvoCondKey.FRIENDSHIP, EvoCondKey.TIME], friendship: 70, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}, SpeciesWildEvolutionDelay.SHORT)
new SpeciesEvolution(Species.ROSELIA, 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 70}, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}], SpeciesWildEvolutionDelay.SHORT)
],
[Species.BUNEARY]: [
new SpeciesEvolution(Species.LOPUNNY, 1, null, {key: EvoCondKey.FRIENDSHIP, friendship: 70}, SpeciesWildEvolutionDelay.MEDIUM)
new SpeciesEvolution(Species.LOPUNNY, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 70}, SpeciesWildEvolutionDelay.MEDIUM)
],
[Species.CHINGLING]: [
new SpeciesEvolution(Species.CHIMECHO, 1, null,{key: [EvoCondKey.FRIENDSHIP, EvoCondKey.TIME], friendship: 90, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}, SpeciesWildEvolutionDelay.MEDIUM)
new SpeciesEvolution(Species.CHIMECHO, 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 90}, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}], SpeciesWildEvolutionDelay.MEDIUM)
],
[Species.HAPPINY]: [
new SpeciesEvolution(Species.CHANSEY, 1, null, {key: EvoCondKey.FRIENDSHIP, friendship: 160}, SpeciesWildEvolutionDelay.SHORT)
new SpeciesEvolution(Species.CHANSEY, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 160}, SpeciesWildEvolutionDelay.SHORT)
],
[Species.MUNCHLAX]: [
new SpeciesEvolution(Species.SNORLAX, 1, null, {key: EvoCondKey.FRIENDSHIP, friendship: 120}, SpeciesWildEvolutionDelay.LONG)
new SpeciesEvolution(Species.SNORLAX, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 120}, SpeciesWildEvolutionDelay.LONG)
],
[Species.RIOLU]: [
new SpeciesEvolution(Species.LUCARIO, 1, null, {key: [EvoCondKey.FRIENDSHIP, EvoCondKey.TIME], friendship: 120, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}, SpeciesWildEvolutionDelay.LONG)
new SpeciesEvolution(Species.LUCARIO, 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 120}, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}], SpeciesWildEvolutionDelay.LONG)
],
[Species.WOOBAT]: [
new SpeciesEvolution(Species.SWOOBAT, 1, null, {key: EvoCondKey.FRIENDSHIP, friendship: 90}, SpeciesWildEvolutionDelay.MEDIUM)
new SpeciesEvolution(Species.SWOOBAT, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 90}, SpeciesWildEvolutionDelay.MEDIUM)
],
[Species.SWADLOON]: [
new SpeciesEvolution(Species.LEAVANNY, 1, null, {key: EvoCondKey.FRIENDSHIP, friendship: 120}, SpeciesWildEvolutionDelay.LONG)
new SpeciesEvolution(Species.LEAVANNY, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 120}, SpeciesWildEvolutionDelay.LONG)
],
[Species.TYPE_NULL]: [
new SpeciesEvolution(Species.SILVALLY, 1, null, {key: EvoCondKey.FRIENDSHIP, friendship: 100}, SpeciesWildEvolutionDelay.LONG)
new SpeciesEvolution(Species.SILVALLY, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 100}, SpeciesWildEvolutionDelay.LONG)
],
[Species.ALOLA_MEOWTH]: [
new SpeciesEvolution(Species.ALOLA_PERSIAN, 1, null, {key: EvoCondKey.FRIENDSHIP, friendship: 120}, SpeciesWildEvolutionDelay.LONG)
new SpeciesEvolution(Species.ALOLA_PERSIAN, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 120}, SpeciesWildEvolutionDelay.LONG)
],
[Species.SNOM]: [
new SpeciesEvolution(Species.FROSMOTH, 1, null, {key: [EvoCondKey.FRIENDSHIP, EvoCondKey.TIME], friendship: 90, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}, SpeciesWildEvolutionDelay.MEDIUM)
new SpeciesEvolution(Species.FROSMOTH, 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 90}, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}], SpeciesWildEvolutionDelay.MEDIUM)
],
[Species.GIMMIGHOUL]: [
new SpeciesFormEvolution(Species.GHOLDENGO, "chest", "", 1, null, {key: EvoCondKey.EVO_TREASURE_TRACKER, evoCount: 10}, SpeciesWildEvolutionDelay.VERY_LONG),
new SpeciesFormEvolution(Species.GHOLDENGO, "roaming", "", 1, null, {key: EvoCondKey.EVO_TREASURE_TRACKER, evoCount: 10}, SpeciesWildEvolutionDelay.VERY_LONG)
new SpeciesFormEvolution(Species.GHOLDENGO, "chest", "", 1, null, {key: EvoCondKey.EVO_TREASURE_TRACKER, value: 10}, SpeciesWildEvolutionDelay.VERY_LONG),
new SpeciesFormEvolution(Species.GHOLDENGO, "roaming", "", 1, null, {key: EvoCondKey.EVO_TREASURE_TRACKER, value: 10}, SpeciesWildEvolutionDelay.VERY_LONG)
]
};