Update final boss fight and restructure some files

This commit is contained in:
Flashfyre committed 2024-01-13 12:24:24 -05:00
1 parent 25972b68ea
commit 052564f902
52 files changed
+2018 -1669

No files matched your search

+5 -3
View File
@@ -1,16 +1,18 @@
import Pokemon, { HitResult, PokemonMove } from "../pokemon";
import { Type, getTypeDamageMultiplier } from "./type";
import { Type } from "./type";
import * as Utils from "../utils";
import { BattleStat, getBattleStatName } from "./battle-stat";
import { DamagePhase, ObtainStatusEffectPhase, PokemonHealPhase, ShowAbilityPhase, StatChangePhase } from "../battle-phases";
import { getPokemonMessage } from "../messages";
import { Weather, WeatherType } from "./weather";
import { BattlerTag, BattlerTagType } from "./battler-tag";
import { BattlerTag } from "./battler-tags";
import { BattlerTagType } from "./enums/battler-tag-type";
import { StatusEffect, getStatusEffectDescriptor } from "./status-effect";
import Move, { MoveCategory, MoveFlags, Moves, RecoilAttr, StealHeldItemAttr } from "./move";
import Move, { MoveCategory, MoveFlags, RecoilAttr } from "./move";
import { ArenaTagType } from "./arena-tag";
import { Stat } from "./pokemon-stat";
import { PokemonHeldItemModifier } from "../modifier/modifier";
import { Moves } from "./enums/moves";
export class Ability {
public id: Abilities;
+1 -1
View File
@@ -6,7 +6,7 @@ import PokemonSpecies, { PokemonForm, SpeciesFormKey, allSpecies } from './pokem
import { GrowthRate } from './exp';
import { Type } from './type';
import { Abilities, allAbilities } from './ability';
import { Species } from './species';
import { Species } from './enums/species';
import { pokemonFormLevelMoves } from './pokemon-level-moves';
import { tmSpecies } from './tms';
+3 -2
View File
@@ -1,13 +1,14 @@
import { Arena } from "../arena";
import { Type } from "./type";
import * as Utils from "../utils";
import { Moves, allMoves } from "./move";
import { allMoves } from "./move";
import { getPokemonMessage } from "../messages";
import Pokemon, { HitResult, PokemonMove } from "../pokemon";
import { DamagePhase, MoveEffectPhase, ObtainStatusEffectPhase } from "../battle-phases";
import { StatusEffect } from "./status-effect";
import { BattlerTagType } from "./battler-tag";
import { BattlerTagType } from "./enums/battler-tag-type";
import { BattlerIndex } from "../battle";
import { Moves } from "./enums/moves";
export enum ArenaTagType {
NONE,
+2 -1
View File
@@ -1,10 +1,11 @@
//import { battleAnimRawData } from "./battle-anim-raw-data";
import BattleScene from "../battle-scene";
import { AttackMove, ChargeAttr, DelayedAttackAttr, MoveFlags, Moves, SelfStatusMove, allMoves } from "./move";
import { AttackMove, ChargeAttr, DelayedAttackAttr, MoveFlags, SelfStatusMove, allMoves } from "./move";
import Pokemon from "../pokemon";
import * as Utils from "../utils";
import { BattlerIndex } from "../battle";
import stringify, { Element } from "json-stable-stringify";
import { Moves } from "./enums/moves";
//import fs from 'vite-plugin-fs/browser';
export enum AnimFrameTarget {
@@ -5,45 +5,11 @@ import Pokemon, { MoveResult, HitResult } from "../pokemon";
import { Stat } from "./pokemon-stat";
import { StatusEffect } from "./status-effect";
import * as Utils from "../utils";
import { ChargeAttr, Moves, allMoves } from "./move";
import { Moves } from "./enums/moves";
import { ChargeAttr, allMoves } from "./move";
import { Type } from "./type";
import { Abilities } from "./ability";
export enum BattlerTagType {
NONE = "NONE",
RECHARGING = "RECHARGING",
FLINCHED = "FLINCHED",
CONFUSED = "CONFUSED",
INFATUATED = "INFATUATED",
SEEDED = "SEEDED",
NIGHTMARE = "NIGHTMARE",
FRENZY = "FRENZY",
ENCORE = "ENCORE",
INGRAIN = "INGRAIN",
AQUA_RING = "AQUA_RING",
DROWSY = "DROWSY",
TRAPPED = "TRAPPED",
BIND = "BIND",
WRAP = "WRAP",
FIRE_SPIN = "FIRE_SPIN",
WHIRLPOOL = "WHIRLPOOL",
CLAMP = "CLAMP",
SAND_TOMB = "SAND_TOMB",
MAGMA_STORM = "MAGMA_STORM",
PROTECTED = "PROTECTED",
PERISH_SONG = "PERISH_SONG",
TRUANT = "TRUANT",
SLOW_START = "SLOW_START",
FLYING = "FLYING",
UNDERGROUND = "UNDERGROUND",
HIDDEN = "HIDDEN",
FIRE_BOOST = "FIRE_BOOST",
CRIT_BOOST = "CRIT_BOOST",
NO_CRIT = "NO_CRIT",
IGNORE_ACCURACY = "IGNORE_ACCURACY",
BYPASS_SLEEP = "BYPASS_SLEEP",
IGNORE_FLYING = "IGNORE_FLYING"
}
import { BattlerTagType } from "./enums/battler-tag-type";
export enum BattlerTagLapseType {
FAINT,
+1 -1
View File
@@ -3,7 +3,7 @@ import { getPokemonMessage } from "../messages";
import Pokemon, { HitResult } from "../pokemon";
import { getBattleStatName } from "./battle-stat";
import { BattleStat } from "./battle-stat";
import { BattlerTagType } from "./battler-tag";
import { BattlerTagType } from "./enums/battler-tag-type";
import { getStatusEffectHealText } from "./status-effect";
import * as Utils from "../utils";
import { DoubleBerryEffectAbAttr, applyAbAttrs } from "./ability";
+109 -144
View File
@@ -1,49 +1,11 @@
import { pokemonEvolutions, SpeciesEvolution } from "./pokemon-evolutions";
import { Species } from "./species";
import { Species } from "./enums/species";
import { Type } from './type';
import * as Utils from '../utils';
import beautify from 'json-beautify';
import { TrainerType } from "./trainer-type";
import { TimeOfDay } from "../arena";
export enum Biome {
TOWN,
PLAINS,
GRASS,
TALL_GRASS,
METROPOLIS,
FOREST,
SEA,
SWAMP,
BEACH,
LAKE,
SEABED,
MOUNTAIN,
BADLANDS,
CAVE,
DESERT,
ICE_CAVE,
MEADOW,
POWER_PLANT,
VOLCANO,
GRAVEYARD,
DOJO,
FACTORY,
RUINS,
WASTELAND,
ABYSS,
SPACE,
CONSTRUCTION_SITE,
JUNGLE,
FAIRY_CAVE,
TEMPLE,
SLUM,
SNOWY_FOREST,
ISLAND = 40,
LABORATORY,
END = 50
};
import { TrainerType } from "./enums/trainer-type";
import { TimeOfDay } from "./enums/time-of-day";
import { Biome } from "./enums/biome";
import { SpeciesEvolution } from "./pokemon-evolutions";
export function getBiomeName(biome: Biome | -1) {
if (biome === -1)
@@ -7387,118 +7349,121 @@ export const biomeTrainerPools: BiomeTrainerPools = {
traverseBiome(Biome.TOWN, 0);
biomeDepths[Biome.END] = [ Object.values(biomeDepths).map(d => d[0]).reduce((max: integer, value: integer) => Math.max(max, value), 0) + 1, 1 ];
for (let biome of Utils.getEnumValues(Biome)) {
biomePokemonPools[biome] = {};
biomeTrainerPools[biome] = {};
import('./pokemon-evolutions').then(pe => {
const pokemonEvolutions = pe.pokemonEvolutions;
for (let biome of Utils.getEnumValues(Biome)) {
biomePokemonPools[biome] = {};
biomeTrainerPools[biome] = {};
for (let tier of Utils.getEnumValues(BiomePoolTier)) {
biomePokemonPools[biome][tier] = {};
biomeTrainerPools[biome][tier] = [];
for (let tier of Utils.getEnumValues(BiomePoolTier)) {
biomePokemonPools[biome][tier] = {};
biomeTrainerPools[biome][tier] = [];
for (let tod of Utils.getEnumValues(TimeOfDay))
biomePokemonPools[biome][tier][tod] = [];
for (let tod of Utils.getEnumValues(TimeOfDay))
biomePokemonPools[biome][tier][tod] = [];
}
}
}
for (let pb of pokemonBiomes) {
const speciesId = pb[0] as Species;
const biomeEntries = pb[3] as (Biome | BiomePoolTier)[][];
for (let pb of pokemonBiomes) {
const speciesId = pb[0] as Species;
const biomeEntries = pb[3] as (Biome | BiomePoolTier)[][];
const speciesEvolutions: SpeciesEvolution[] = pokemonEvolutions.hasOwnProperty(speciesId)
? pokemonEvolutions[speciesId]
: [];
if (!biomeEntries.filter(b => b[0] !== Biome.END).length && !speciesEvolutions.filter(es => !!((pokemonBiomes.find(p => p[0] === es.speciesId))[3] as any[]).filter(b => b[0] !== Biome.END).length).length)
uncatchableSpecies.push(speciesId);
const speciesEvolutions: SpeciesEvolution[] = pokemonEvolutions.hasOwnProperty(speciesId)
? pokemonEvolutions[speciesId]
: [];
if (!biomeEntries.filter(b => b[0] !== Biome.END).length && !speciesEvolutions.filter(es => !!((pokemonBiomes.find(p => p[0] === es.speciesId))[3] as any[]).filter(b => b[0] !== Biome.END).length).length)
uncatchableSpecies.push(speciesId);
for (let b of biomeEntries) {
const biome = b[0];
const tier = b[1];
const timesOfDay = b.length > 2
? Array.isArray(b[2])
? b[2]
: [ b[2] ]
: [ TimeOfDay.ALL ];
for (let b of biomeEntries) {
const biome = b[0];
const tier = b[1];
const timesOfDay = b.length > 2
? Array.isArray(b[2])
? b[2]
: [ b[2] ]
: [ TimeOfDay.ALL ];
for (let tod of timesOfDay) {
if (!biomePokemonPools.hasOwnProperty(biome) || !biomePokemonPools[biome].hasOwnProperty(tier) || !biomePokemonPools[biome][tier].hasOwnProperty(tod))
for (let tod of timesOfDay) {
if (!biomePokemonPools.hasOwnProperty(biome) || !biomePokemonPools[biome].hasOwnProperty(tier) || !biomePokemonPools[biome][tier].hasOwnProperty(tod))
continue;
const biomeTierPool = biomePokemonPools[biome][tier][tod];
let treeIndex = -1;
let arrayIndex = 0;
for (let t = 0; t < biomeTierPool.length; t++) {
const existingSpeciesIds = biomeTierPool[t] as unknown as Species[];
for (let es = 0; es < existingSpeciesIds.length; es++) {
const existingSpeciesId = existingSpeciesIds[es];
if (pokemonEvolutions.hasOwnProperty(existingSpeciesId) && (pokemonEvolutions[existingSpeciesId] as SpeciesEvolution[]).find(ese => ese.speciesId === speciesId)) {
treeIndex = t;
arrayIndex = es + 1;
break;
} else if (speciesEvolutions && speciesEvolutions.find(se => se.speciesId === existingSpeciesId)) {
treeIndex = t;
arrayIndex = es;
break;
}
}
if (treeIndex > -1)
break;
}
if (treeIndex > -1)
(biomeTierPool[treeIndex] as unknown as Species[]).splice(arrayIndex, 0, speciesId);
else
(biomeTierPool as unknown as Species[][]).push([ speciesId ]);
}
}
}
for (let b of Object.keys(biomePokemonPools)) {
for (let t of Object.keys(biomePokemonPools[b])) {
const tier = parseInt(t) as BiomePoolTier;
for (let tod of Object.keys(biomePokemonPools[b][t])) {
const biomeTierTimePool = biomePokemonPools[b][t][tod];
for (let e = 0; e < biomeTierTimePool.length; e++) {
const entry = biomeTierTimePool[e];
if (entry.length === 1)
biomeTierTimePool[e] = entry[0];
else {
const newEntry = {
1: [ entry[0] ]
};
for (let s = 1; s < entry.length; s++) {
const speciesId = entry[s];
const prevolution = entry.map(s => pokemonEvolutions[s]).flat().find(e => e && e.speciesId === speciesId);
const level = prevolution.level - (prevolution.level === 1 ? 1 : 0) + (prevolution.wildDelay * 10) - (tier >= BiomePoolTier.BOSS ? 10 : 0);
if (!newEntry.hasOwnProperty(level))
newEntry[level] = [ speciesId ];
else
newEntry[level].push(speciesId);
}
biomeTierTimePool[e] = newEntry;
}
}
}
}
}
for (let tb of trainerBiomes) {
const trainerType = tb[0] as TrainerType;
const biomeEntries = tb[1] as BiomePoolTier[][];
for (let b of biomeEntries) {
const biome = b[0];
const tier = b[1];
if (!biomeTrainerPools.hasOwnProperty(biome) || !biomeTrainerPools[biome].hasOwnProperty(tier))
continue;
const biomeTierPool = biomePokemonPools[biome][tier][tod];
let treeIndex = -1;
let arrayIndex = 0;
for (let t = 0; t < biomeTierPool.length; t++) {
const existingSpeciesIds = biomeTierPool[t] as unknown as Species[];
for (let es = 0; es < existingSpeciesIds.length; es++) {
const existingSpeciesId = existingSpeciesIds[es];
if (pokemonEvolutions.hasOwnProperty(existingSpeciesId) && (pokemonEvolutions[existingSpeciesId] as SpeciesEvolution[]).find(ese => ese.speciesId === speciesId)) {
treeIndex = t;
arrayIndex = es + 1;
break;
} else if (speciesEvolutions && speciesEvolutions.find(se => se.speciesId === existingSpeciesId)) {
treeIndex = t;
arrayIndex = es;
break;
}
}
if (treeIndex > -1)
break;
}
if (treeIndex > -1)
(biomeTierPool[treeIndex] as unknown as Species[]).splice(arrayIndex, 0, speciesId);
else
(biomeTierPool as unknown as Species[][]).push([ speciesId ]);
const biomeTierPool = biomeTrainerPools[biome][tier];
biomeTierPool.push(trainerType);
}
}
}
for (let b of Object.keys(biomePokemonPools)) {
for (let t of Object.keys(biomePokemonPools[b])) {
const tier = parseInt(t) as BiomePoolTier;
for (let tod of Object.keys(biomePokemonPools[b][t])) {
const biomeTierTimePool = biomePokemonPools[b][t][tod];
for (let e = 0; e < biomeTierTimePool.length; e++) {
const entry = biomeTierTimePool[e];
if (entry.length === 1)
biomeTierTimePool[e] = entry[0];
else {
const newEntry = {
1: [ entry[0] ]
};
for (let s = 1; s < entry.length; s++) {
const speciesId = entry[s];
const prevolution = entry.map(s => pokemonEvolutions[s]).flat().find(e => e && e.speciesId === speciesId);
const level = prevolution.level - (prevolution.level === 1 ? 1 : 0) + (prevolution.wildDelay * 10) - (tier >= BiomePoolTier.BOSS ? 10 : 0);
if (!newEntry.hasOwnProperty(level))
newEntry[level] = [ speciesId ];
else
newEntry[level].push(speciesId);
}
biomeTierTimePool[e] = newEntry;
}
}
}
}
}
for (let tb of trainerBiomes) {
const trainerType = tb[0] as TrainerType;
const biomeEntries = tb[1] as BiomePoolTier[][];
for (let b of biomeEntries) {
const biome = b[0];
const tier = b[1];
if (!biomeTrainerPools.hasOwnProperty(biome) || !biomeTrainerPools[biome].hasOwnProperty(tier))
continue;
const biomeTierPool = biomeTrainerPools[biome][tier];
biomeTierPool.push(trainerType);
}
}
});
function outputPools() {
const pokemonOutput = {};
+283
View File
@@ -0,0 +1,283 @@
import { trainerConfigs } from "./trainer-config";
import { TrainerType } from "./enums/trainer-type";
import { BattleSpec } from "../enums/battle-spec";
export interface TrainerTypeMessages {
encounter?: string | string[],
victory?: string | string[],
defeat?: string | string[]
}
export interface TrainerTypeDialogue {
[key: integer]: TrainerTypeMessages | [ TrainerTypeMessages, TrainerTypeMessages ]
}
export const trainerTypeDialogue = {
[TrainerType.YOUNGSTER]: [
{
encounter: [
`Hey, wanna battle?`,
`Are you a new trainer too?`,
`Hey, I haven't seen you before. Let's battle!`
],
victory: [
`Wow! You're strong!`,
`I didn't stand a chance, huh.`,
`I'll find you again when I'm older and beat you!`
]
},
{
encounter: [
`Let's have a battle, shall we?`,
`You look like a new trainer. Let's have a battle!`,
`I don't recognize you. How about a battle?`
],
victory: [
`That was impressive! I've got a lot to learn.`,
`I didn't think you'd beat me that bad…`,
`I hope we get to have a rematch some day.`
]
}
],
[TrainerType.ROXANNE]: {
encounter: [
`Would you kindly demonstrate how you battle?`,
`You can learn many things by battling many trainers.`,
`Oh, you caught me strategizing.\nWould you like to battle?`
],
victory: [
`Oh, I appear to have lost.\nI understand.`,
`It seems that I still have so much more to learn when it comes to battle.`,
`I'll take what I learned here today to heart.`
],
defeat: [
`I have learned many things from our battle.\nI hope you have too.`,
`I look forward to battling you again.\nI hope you'll use what you've learned here.`,
`I won due to everything I have learned.`
]
},
[TrainerType.BRAWLY]: {
encounter: [
`Oh man, a challenger!\nLet's see what you can do!`,
`You seem like a big splash.\nLet's battle!`,
`Time to create a storm!\nLet's go!`
],
victory: [
`Oh woah, you've washed me out!`,
`You surfed my wave and crashed me down!`,
`I feel like I'm lost in Granite Cave!`
],
defeat: [
`Haha, I surfed the big wave!\nChallenge me again sometime.`,
`Surf with me again some time!`,
`Just like the tides come in and out, I hope you return to challenge me again.`
]
},
[TrainerType.WATTSON]: {
encounter: [
`Time to get shocked!\nWahahahaha!`,
`I'll make sparks fly!\nWahahahaha!`,
`I hope you brought Paralyz Heal!\nWahahahaha!`
],
victory: [
`Seems like I'm out of charge!\nWahahahaha!`,
`You've completely grounded me!\nWahahahaha!`,
`Thanks for the thrill!\nWahahahaha!`
],
defeat: [
`Recharge your batteries and challenge me again sometime!\nWahahahaha!`,
`I hope you found our battle electrifying!\nWahahahaha!`,
`Aren't you shocked I won?\nWahahahaha!`
]
},
[TrainerType.FLANNERY]: {
encounter: [
`Nice to meet you! Wait, no…\nI will crush you!`,
`I've only been a leader for a little while, but I'll smoke you!`,
`It's time to demonstrate the moves my grandfather has taught me! Let's battle!`
],
victory: [
`You remind me of my grandfather…\nNo wonder I lost.`,
`Am I trying too hard?\nI should relax, can't get too heated.`,
`Losing isn't going to smother me out.\nTime to reignite training!`
],
defeat: [
`I hope I've made my grandfather proud…\nLet's battle again some time.`,
`I…I can't believe I won!\nDoing things my way worked!`,
`Let's exchange burning hot moves again soon!`
]
},
[TrainerType.NORMAN]: {
encounter: [
`I'm surprised you managed to get here.\nLet's battle.`,
`I'll do everything in my power as a Gym Leader to win.\nLet's go!`,
`You better give this your all.\nIt's time to battle!`
],
victory: [
`I lost to you…?\nRules are rules, though.`,
`Was moving from Olivine a mistake…?`,
`I can't believe it.\nThat was a great match.`
],
defeat: [
`We both tried our best.\nI hope we can battle again soon.`,
`You should try challenging my kid instead.\nYou might learn something!`,
`Thank you for the excellent battle.\nBetter luck next time.`
]
},
[TrainerType.WINONA]: {
encounter: [
`I've been soaring the skies looking for prey…\nAnd you're my target!`,
`No matter how our battle is, my Flying Pokémon and I will triumph with grace. Let's battle!`,
`I hope you aren't scared of heights.\nLet's ascend!`
],
victory: [
`You're the first Trainer I've seen with more grace than I.\nExcellently played.`,
`Oh, my Flying Pokémon have plummeted!\nVery well.`,
`Though I may have fallen, my Pokémon will continue to fly!`
],
defeat: [
`My Flying Pokémon and I will forever dance elegantly!`,
`I hope you enjoyed our show.\nOur graceful dance is finished.`,
`Won't you come see our elegant choreography again?`
]
},
[TrainerType.TATE]: {
encounter: [
`Hehehe…\nWere you surprised to see me without my sister?`,
`I can see what you're thinking…\nYou want to battle!`,
`How can you defeat someone…\nWho knows your every move?`
],
victory: [
`It can't be helped…\nI miss Liza…`,
`Your bond with your Pokémon was stronger than mine.`,
`If I were with Liza, we would have won.\nWe can finish each other's thoughts!`
],
defeat: [
`My Pokémon and I are superior!`,
`If you can't even defeat me, you'll never be able to defeat Liza either.`,
`It's all thanks to my strict training with Liza.\nI can make myself one with Pokémon.`
]
},
[TrainerType.LIZA]: {
encounter: [
`Fufufu…\nWere you surprised to see me without my brother?`,
`I can determine what you desire…\nYou want to battle, don't you?`,
`How can you defeat someone…\nWho's one with their Pokémon?`
],
victory: [
`It can't be helped…\nI miss Tate…`,
`Your bond with your Pokémon…\nIt's stronger than mine.`,
`If I were with Tate, we would have won.\nWe can finish each other's sentences!`
],
defeat: [
`My Pokémon and I are victorious.`,
`If you can't even defeat me, you'll never be able to defeat Tate either.`,
`It's all thanks to my strict training with Tate.\nI can synchronize myself with my Pokémon.`
]
},
[TrainerType.JUAN]: {
encounter: [
`Now's not the time to act coy.\nLet's battle!`,
`Ahahaha, You'll be witness to my artistry with Water Pokémon!`,
`A typhoon approaches!\nWill you be able to test me?`
],
victory: [
`You may be a genius who can take on Wallace!`,
`I focused on elegance while you trained.\nIt's only natural that you defeated me.`,
`Ahahaha!\nVery well, You have won this time.`
],
defeat: [
`My Pokémon and I have sculpted an illusion of Water and come out victorious.`,
`Ahahaha, I have won, and you have lost.`,
`Shall I loan you my outfit? It may help you battle!\nAhahaha, I jest!`
]
},
[TrainerType.RIVAL]: {
encounter: [
`There you are! I've been looking everywhere for you!\nDid you forget to say goodbye to your best friend?
$So you're finally pursuing your dream, huh?\nI knew you'd do it one day…
$Anyway, I'll forgive you for forgetting me, but on one condition. You have to battle me!
$You'd better give it your best! Wouldn't want your adventure to be over before it started, right?`
],
victory: [
`You already have three Pokémon?!\nThat's not fair at all!
$Just kidding! I lost fair and square, and now I know you'll do fine out there.
$By the way, the professor wanted me to give you some items. Hopefully they're helpful!
$Do your best like always! I believe in you!`
]
},
[TrainerType.RIVAL_2]: {
encounter: [
`Oh, fancy meeting you here. Looks like you're still undefeated. Right on!
$I know what you're thinking, and no, I wasn't following you. I just happened to be in the area.
$I'm happy for you but I just want to let you know that it's OK to lose sometimes.
$We learn from our mistakes, often more than we would if we kept succeeding.
$In any case, I've been training hard for our rematch, so you'd better give it your all!`
],
victory: [
`I… wasn't supposed to lose that time…`
]
},
[TrainerType.RIVAL_3]: {
encounter: [
`Long time no see! Still haven't lost, huh.\nYou're starting to get on my nerves. Just kidding!
$But really, I think it's about time you came home.\nYour family and friends miss you, you know.
$I know your dream means a lot to you, but the reality is you're going to lose sooner or later.
$And when you do, I'll be there for you like always.\nNow, let me show you how strong I've become!`
],
victory: [
`After all that… it wasn't enough…?`
]
},
[TrainerType.RIVAL_4]: {
encounter: [
`It's me! You didn't forget about me again did you?
$You made it really far! I'm proud of you.\nBut it looks like it's the end of your journey.
$You've awoken something in me I never knew was there.\nIt seems like all I do now is train.
$I hardly even eat or sleep now, I just train my Pokémon all day, getting stronger every time.
$And now, I've finally reached peak performance.\nI don't think anyone could beat me now.
$And you know what? It's all because of you.\nI don't know whether to thank you or hate you.
$Prepare yourself.`
],
victory: [
`What…@d{64} what are you?`
]
},
[TrainerType.RIVAL_5]: {
encounter: [ `…` ],
victory: [ '…' ]
}
};
export const battleSpecDialogue = {
[BattleSpec.FINAL_BOSS]: {
encounter: `It appears the time has finally come once again.\nYou know why you have come here, do you not?
$You were drawn here, because you have been here before.\nCountless times.
$Though, perhaps it can be counted.\nTo be precise, this is in fact your 5,643,853rd cycle.
$Each cycle your mind reverts to its former state.\nEven so, somehow, remnants of your former selves remain.
$Until now you have yet to succeed, but I sense a different presence in you this time.\n
$You are the only one here, though it is as if there is… another.
$Will you finally prove a formidable challenge to me?\nThe challenge I have longed for for millenia?
$We begin.`,
firstStageWin: `I see. The presence I felt was indeed real.\nIt appears I no longer need to hold back.
$Do not disappoint me.`,
secondStageWin: `…Magnificent.`
}
};
export function initTrainerTypeDialogue() {
const trainerTypes = Object.keys(trainerTypeDialogue).map(t => parseInt(t) as TrainerType);
for (let trainerType of trainerTypes) {
const messages = trainerTypeDialogue[trainerType];
const messageTypes = [ 'encounter', 'victory', 'defeat' ];
for (let messageType of messageTypes) {
if (Array.isArray(messages)) {
if (messages[0][messageType])
trainerConfigs[trainerType][`${messageType}Messages`] = messages[0][messageType];
if (messages.length > 1)
trainerConfigs[trainerType][`female${messageType.slice(0, 1).toUpperCase()}${messageType.slice(1)}Messages`] = messages[1][messageType];
} else
trainerConfigs[trainerType][`${messageType}Messages`] = messages[messageType];
}
}
}
+2 -2
View File
@@ -1,8 +1,8 @@
import { ModifierTier } from "../modifier/modifier-type";
import { ModifierTier } from "../modifier/modifier-tier";
import { Type } from "./type";
import * as Utils from "../utils";
import BattleScene from "../battle-scene";
import { Species } from "./species";
import { Species } from "./enums/species";
import { getPokemonSpecies, speciesStarters } from "./pokemon-species";
export const EGG_SEED = 1073741824;
+36
View File
@@ -0,0 +1,36 @@
export enum BattlerTagType {
NONE = "NONE",
RECHARGING = "RECHARGING",
FLINCHED = "FLINCHED",
CONFUSED = "CONFUSED",
INFATUATED = "INFATUATED",
SEEDED = "SEEDED",
NIGHTMARE = "NIGHTMARE",
FRENZY = "FRENZY",
ENCORE = "ENCORE",
INGRAIN = "INGRAIN",
AQUA_RING = "AQUA_RING",
DROWSY = "DROWSY",
TRAPPED = "TRAPPED",
BIND = "BIND",
WRAP = "WRAP",
FIRE_SPIN = "FIRE_SPIN",
WHIRLPOOL = "WHIRLPOOL",
CLAMP = "CLAMP",
SAND_TOMB = "SAND_TOMB",
MAGMA_STORM = "MAGMA_STORM",
PROTECTED = "PROTECTED",
PERISH_SONG = "PERISH_SONG",
TRUANT = "TRUANT",
SLOW_START = "SLOW_START",
FLYING = "FLYING",
UNDERGROUND = "UNDERGROUND",
HIDDEN = "HIDDEN",
FIRE_BOOST = "FIRE_BOOST",
CRIT_BOOST = "CRIT_BOOST",
NO_CRIT = "NO_CRIT",
IGNORE_ACCURACY = "IGNORE_ACCURACY",
BYPASS_SLEEP = "BYPASS_SLEEP",
IGNORE_FLYING = "IGNORE_FLYING"
}
+38
View File
@@ -0,0 +1,38 @@
export enum Biome {
TOWN,
PLAINS,
GRASS,
TALL_GRASS,
METROPOLIS,
FOREST,
SEA,
SWAMP,
BEACH,
LAKE,
SEABED,
MOUNTAIN,
BADLANDS,
CAVE,
DESERT,
ICE_CAVE,
MEADOW,
POWER_PLANT,
VOLCANO,
GRAVEYARD,
DOJO,
FACTORY,
RUINS,
WASTELAND,
ABYSS,
SPACE,
CONSTRUCTION_SITE,
JUNGLE,
FAIRY_CAVE,
TEMPLE,
SLUM,
SNOWY_FOREST,
ISLAND = 40,
LABORATORY,
END = 50
}
+922
View File
@@ -0,0 +1,922 @@
export enum Moves {
NONE,
POUND,
KARATE_CHOP,
DOUBLE_SLAP,
COMET_PUNCH,
MEGA_PUNCH,
PAY_DAY,
FIRE_PUNCH,
ICE_PUNCH,
THUNDER_PUNCH,
SCRATCH,
VICE_GRIP,
GUILLOTINE,
RAZOR_WIND,
SWORDS_DANCE,
CUT,
GUST,
WING_ATTACK,
WHIRLWIND,
FLY,
BIND,
SLAM,
VINE_WHIP,
STOMP,
DOUBLE_KICK,
MEGA_KICK,
JUMP_KICK,
ROLLING_KICK,
SAND_ATTACK,
HEADBUTT,
HORN_ATTACK,
FURY_ATTACK,
HORN_DRILL,
TACKLE,
BODY_SLAM,
WRAP,
TAKE_DOWN,
THRASH,
DOUBLE_EDGE,
TAIL_WHIP,
POISON_STING,
TWINEEDLE,
PIN_MISSILE,
LEER,
BITE,
GROWL,
ROAR,
SING,
SUPERSONIC,
SONIC_BOOM,
DISABLE,
ACID,
EMBER,
FLAMETHROWER,
MIST,
WATER_GUN,
HYDRO_PUMP,
SURF,
ICE_BEAM,
BLIZZARD,
PSYBEAM,
BUBBLE_BEAM,
AURORA_BEAM,
HYPER_BEAM,
PECK,
DRILL_PECK,
SUBMISSION,
LOW_KICK,
COUNTER,
SEISMIC_TOSS,
STRENGTH,
ABSORB,
MEGA_DRAIN,
LEECH_SEED,
GROWTH,
RAZOR_LEAF,
SOLAR_BEAM,
POISON_POWDER,
STUN_SPORE,
SLEEP_POWDER,
PETAL_DANCE,
STRING_SHOT,
DRAGON_RAGE,
FIRE_SPIN,
THUNDER_SHOCK,
THUNDERBOLT,
THUNDER_WAVE,
THUNDER,
ROCK_THROW,
EARTHQUAKE,
FISSURE,
DIG,
TOXIC,
CONFUSION,
PSYCHIC,
HYPNOSIS,
MEDITATE,
AGILITY,
QUICK_ATTACK,
RAGE,
TELEPORT,
NIGHT_SHADE,
MIMIC,
SCREECH,
DOUBLE_TEAM,
RECOVER,
HARDEN,
MINIMIZE,
SMOKESCREEN,
CONFUSE_RAY,
WITHDRAW,
DEFENSE_CURL,
BARRIER,
LIGHT_SCREEN,
HAZE,
REFLECT,
FOCUS_ENERGY,
BIDE,
METRONOME,
MIRROR_MOVE,
SELF_DESTRUCT,
EGG_BOMB,
LICK,
SMOG,
SLUDGE,
BONE_CLUB,
FIRE_BLAST,
WATERFALL,
CLAMP,
SWIFT,
SKULL_BASH,
SPIKE_CANNON,
CONSTRICT,
AMNESIA,
KINESIS,
SOFT_BOILED,
HIGH_JUMP_KICK,
GLARE,
DREAM_EATER,
POISON_GAS,
BARRAGE,
LEECH_LIFE,
LOVELY_KISS,
SKY_ATTACK,
TRANSFORM,
BUBBLE,
DIZZY_PUNCH,
SPORE,
FLASH,
PSYWAVE,
SPLASH,
ACID_ARMOR,
CRABHAMMER,
EXPLOSION,
FURY_SWIPES,
BONEMERANG,
REST,
ROCK_SLIDE,
HYPER_FANG,
SHARPEN,
CONVERSION,
TRI_ATTACK,
SUPER_FANG,
SLASH,
SUBSTITUTE,
STRUGGLE,
SKETCH,
TRIPLE_KICK,
THIEF,
SPIDER_WEB,
MIND_READER,
NIGHTMARE,
FLAME_WHEEL,
SNORE,
CURSE,
FLAIL,
CONVERSION_2,
AEROBLAST,
COTTON_SPORE,
REVERSAL,
SPITE,
POWDER_SNOW,
PROTECT,
MACH_PUNCH,
SCARY_FACE,
FEINT_ATTACK,
SWEET_KISS,
BELLY_DRUM,
SLUDGE_BOMB,
MUD_SLAP,
OCTAZOOKA,
SPIKES,
ZAP_CANNON,
FORESIGHT,
DESTINY_BOND,
PERISH_SONG,
ICY_WIND,
DETECT,
BONE_RUSH,
LOCK_ON,
OUTRAGE,
SANDSTORM,
GIGA_DRAIN,
ENDURE,
CHARM,
ROLLOUT,
FALSE_SWIPE,
SWAGGER,
MILK_DRINK,
SPARK,
FURY_CUTTER,
STEEL_WING,
MEAN_LOOK,
ATTRACT,
SLEEP_TALK,
HEAL_BELL,
RETURN,
PRESENT,
FRUSTRATION,
SAFEGUARD,
PAIN_SPLIT,
SACRED_FIRE,
MAGNITUDE,
DYNAMIC_PUNCH,
MEGAHORN,
DRAGON_BREATH,
BATON_PASS,
ENCORE,
PURSUIT,
RAPID_SPIN,
SWEET_SCENT,
IRON_TAIL,
METAL_CLAW,
VITAL_THROW,
MORNING_SUN,
SYNTHESIS,
MOONLIGHT,
HIDDEN_POWER,
CROSS_CHOP,
TWISTER,
RAIN_DANCE,
SUNNY_DAY,
CRUNCH,
MIRROR_COAT,
PSYCH_UP,
EXTREME_SPEED,
ANCIENT_POWER,
SHADOW_BALL,
FUTURE_SIGHT,
ROCK_SMASH,
WHIRLPOOL,
BEAT_UP,
FAKE_OUT,
UPROAR,
STOCKPILE,
SPIT_UP,
SWALLOW,
HEAT_WAVE,
HAIL,
TORMENT,
FLATTER,
WILL_O_WISP,
MEMENTO,
FACADE,
FOCUS_PUNCH,
SMELLING_SALTS,
FOLLOW_ME,
NATURE_POWER,
CHARGE,
TAUNT,
HELPING_HAND,
TRICK,
ROLE_PLAY,
WISH,
ASSIST,
INGRAIN,
SUPERPOWER,
MAGIC_COAT,
RECYCLE,
REVENGE,
BRICK_BREAK,
YAWN,
KNOCK_OFF,
ENDEAVOR,
ERUPTION,
SKILL_SWAP,
IMPRISON,
REFRESH,
GRUDGE,
SNATCH,
SECRET_POWER,
DIVE,
ARM_THRUST,
CAMOUFLAGE,
TAIL_GLOW,
LUSTER_PURGE,
MIST_BALL,
FEATHER_DANCE,
TEETER_DANCE,
BLAZE_KICK,
MUD_SPORT,
ICE_BALL,
NEEDLE_ARM,
SLACK_OFF,
HYPER_VOICE,
POISON_FANG,
CRUSH_CLAW,
BLAST_BURN,
HYDRO_CANNON,
METEOR_MASH,
ASTONISH,
WEATHER_BALL,
AROMATHERAPY,
FAKE_TEARS,
AIR_CUTTER,
OVERHEAT,
ODOR_SLEUTH,
ROCK_TOMB,
SILVER_WIND,
METAL_SOUND,
GRASS_WHISTLE,
TICKLE,
COSMIC_POWER,
WATER_SPOUT,
SIGNAL_BEAM,
SHADOW_PUNCH,
EXTRASENSORY,
SKY_UPPERCUT,
SAND_TOMB,
SHEER_COLD,
MUDDY_WATER,
BULLET_SEED,
AERIAL_ACE,
ICICLE_SPEAR,
IRON_DEFENSE,
BLOCK,
HOWL,
DRAGON_CLAW,
FRENZY_PLANT,
BULK_UP,
BOUNCE,
MUD_SHOT,
POISON_TAIL,
COVET,
VOLT_TACKLE,
MAGICAL_LEAF,
WATER_SPORT,
CALM_MIND,
LEAF_BLADE,
DRAGON_DANCE,
ROCK_BLAST,
SHOCK_WAVE,
WATER_PULSE,
DOOM_DESIRE,
PSYCHO_BOOST,
ROOST,
GRAVITY,
MIRACLE_EYE,
WAKE_UP_SLAP,
HAMMER_ARM,
GYRO_BALL,
HEALING_WISH,
BRINE,
NATURAL_GIFT,
FEINT,
PLUCK,
TAILWIND,
ACUPRESSURE,
METAL_BURST,
U_TURN,
CLOSE_COMBAT,
PAYBACK,
ASSURANCE,
EMBARGO,
FLING,
PSYCHO_SHIFT,
TRUMP_CARD,
HEAL_BLOCK,
WRING_OUT,
POWER_TRICK,
GASTRO_ACID,
LUCKY_CHANT,
ME_FIRST,
COPYCAT,
POWER_SWAP,
GUARD_SWAP,
PUNISHMENT,
LAST_RESORT,
WORRY_SEED,
SUCKER_PUNCH,
TOXIC_SPIKES,
HEART_SWAP,
AQUA_RING,
MAGNET_RISE,
FLARE_BLITZ,
FORCE_PALM,
AURA_SPHERE,
ROCK_POLISH,
POISON_JAB,
DARK_PULSE,
NIGHT_SLASH,
AQUA_TAIL,
SEED_BOMB,
AIR_SLASH,
X_SCISSOR,
BUG_BUZZ,
DRAGON_PULSE,
DRAGON_RUSH,
POWER_GEM,
DRAIN_PUNCH,
VACUUM_WAVE,
FOCUS_BLAST,
ENERGY_BALL,
BRAVE_BIRD,
EARTH_POWER,
SWITCHEROO,
GIGA_IMPACT,
NASTY_PLOT,
BULLET_PUNCH,
AVALANCHE,
ICE_SHARD,
SHADOW_CLAW,
THUNDER_FANG,
ICE_FANG,
FIRE_FANG,
SHADOW_SNEAK,
MUD_BOMB,
PSYCHO_CUT,
ZEN_HEADBUTT,
MIRROR_SHOT,
FLASH_CANNON,
ROCK_CLIMB,
DEFOG,
TRICK_ROOM,
DRACO_METEOR,
DISCHARGE,
LAVA_PLUME,
LEAF_STORM,
POWER_WHIP,
ROCK_WRECKER,
CROSS_POISON,
GUNK_SHOT,
IRON_HEAD,
MAGNET_BOMB,
STONE_EDGE,
CAPTIVATE,
STEALTH_ROCK,
GRASS_KNOT,
CHATTER,
JUDGMENT,
BUG_BITE,
CHARGE_BEAM,
WOOD_HAMMER,
AQUA_JET,
ATTACK_ORDER,
DEFEND_ORDER,
HEAL_ORDER,
HEAD_SMASH,
DOUBLE_HIT,
ROAR_OF_TIME,
SPACIAL_REND,
LUNAR_DANCE,
CRUSH_GRIP,
MAGMA_STORM,
DARK_VOID,
SEED_FLARE,
OMINOUS_WIND,
SHADOW_FORCE,
HONE_CLAWS,
WIDE_GUARD,
GUARD_SPLIT,
POWER_SPLIT,
WONDER_ROOM,
PSYSHOCK,
VENOSHOCK,
AUTOTOMIZE,
RAGE_POWDER,
TELEKINESIS,
MAGIC_ROOM,
SMACK_DOWN,
STORM_THROW,
FLAME_BURST,
SLUDGE_WAVE,
QUIVER_DANCE,
HEAVY_SLAM,
SYNCHRONOISE,
ELECTRO_BALL,
SOAK,
FLAME_CHARGE,
COIL,
LOW_SWEEP,
ACID_SPRAY,
FOUL_PLAY,
SIMPLE_BEAM,
ENTRAINMENT,
AFTER_YOU,
ROUND,
ECHOED_VOICE,
CHIP_AWAY,
CLEAR_SMOG,
STORED_POWER,
QUICK_GUARD,
ALLY_SWITCH,
SCALD,
SHELL_SMASH,
HEAL_PULSE,
HEX,
SKY_DROP,
SHIFT_GEAR,
CIRCLE_THROW,
INCINERATE,
QUASH,
ACROBATICS,
REFLECT_TYPE,
RETALIATE,
FINAL_GAMBIT,
BESTOW,
INFERNO,
WATER_PLEDGE,
FIRE_PLEDGE,
GRASS_PLEDGE,
VOLT_SWITCH,
STRUGGLE_BUG,
BULLDOZE,
FROST_BREATH,
DRAGON_TAIL,
WORK_UP,
ELECTROWEB,
WILD_CHARGE,
DRILL_RUN,
DUAL_CHOP,
HEART_STAMP,
HORN_LEECH,
SACRED_SWORD,
RAZOR_SHELL,
HEAT_CRASH,
LEAF_TORNADO,
STEAMROLLER,
COTTON_GUARD,
NIGHT_DAZE,
PSYSTRIKE,
TAIL_SLAP,
HURRICANE,
HEAD_CHARGE,
GEAR_GRIND,
SEARING_SHOT,
TECHNO_BLAST,
RELIC_SONG,
SECRET_SWORD,
GLACIATE,
BOLT_STRIKE,
BLUE_FLARE,
FIERY_DANCE,
FREEZE_SHOCK,
ICE_BURN,
SNARL,
ICICLE_CRASH,
V_CREATE,
FUSION_FLARE,
FUSION_BOLT,
FLYING_PRESS,
MAT_BLOCK,
BELCH,
ROTOTILLER,
STICKY_WEB,
FELL_STINGER,
PHANTOM_FORCE,
TRICK_OR_TREAT,
NOBLE_ROAR,
ION_DELUGE,
PARABOLIC_CHARGE,
FORESTS_CURSE,
PETAL_BLIZZARD,
FREEZE_DRY,
DISARMING_VOICE,
PARTING_SHOT,
TOPSY_TURVY,
DRAINING_KISS,
CRAFTY_SHIELD,
FLOWER_SHIELD,
GRASSY_TERRAIN,
MISTY_TERRAIN,
ELECTRIFY,
PLAY_ROUGH,
FAIRY_WIND,
MOONBLAST,
BOOMBURST,
FAIRY_LOCK,
KINGS_SHIELD,
PLAY_NICE,
CONFIDE,
DIAMOND_STORM,
STEAM_ERUPTION,
HYPERSPACE_HOLE,
WATER_SHURIKEN,
MYSTICAL_FIRE,
SPIKY_SHIELD,
AROMATIC_MIST,
EERIE_IMPULSE,
VENOM_DRENCH,
POWDER,
GEOMANCY,
MAGNETIC_FLUX,
HAPPY_HOUR,
ELECTRIC_TERRAIN,
DAZZLING_GLEAM,
CELEBRATE,
HOLD_HANDS,
BABY_DOLL_EYES,
NUZZLE,
HOLD_BACK,
INFESTATION,
POWER_UP_PUNCH,
OBLIVION_WING,
THOUSAND_ARROWS,
THOUSAND_WAVES,
LANDS_WRATH,
LIGHT_OF_RUIN,
ORIGIN_PULSE,
PRECIPICE_BLADES,
DRAGON_ASCENT,
HYPERSPACE_FURY,
BREAKNECK_BLITZ__PHYSICAL,
BREAKNECK_BLITZ__SPECIAL,
ALL_OUT_PUMMELING__PHYSICAL,
ALL_OUT_PUMMELING__SPECIAL,
SUPERSONIC_SKYSTRIKE__PHYSICAL,
SUPERSONIC_SKYSTRIKE__SPECIAL,
ACID_DOWNPOUR__PHYSICAL,
ACID_DOWNPOUR__SPECIAL,
TECTONIC_RAGE__PHYSICAL,
TECTONIC_RAGE__SPECIAL,
CONTINENTAL_CRUSH__PHYSICAL,
CONTINENTAL_CRUSH__SPECIAL,
SAVAGE_SPIN_OUT__PHYSICAL,
SAVAGE_SPIN_OUT__SPECIAL,
NEVER_ENDING_NIGHTMARE__PHYSICAL,
NEVER_ENDING_NIGHTMARE__SPECIAL,
CORKSCREW_CRASH__PHYSICAL,
CORKSCREW_CRASH__SPECIAL,
INFERNO_OVERDRIVE__PHYSICAL,
INFERNO_OVERDRIVE__SPECIAL,
HYDRO_VORTEX__PHYSICAL,
HYDRO_VORTEX__SPECIAL,
BLOOM_DOOM__PHYSICAL,
BLOOM_DOOM__SPECIAL,
GIGAVOLT_HAVOC__PHYSICAL,
GIGAVOLT_HAVOC__SPECIAL,
SHATTERED_PSYCHE__PHYSICAL,
SHATTERED_PSYCHE__SPECIAL,
SUBZERO_SLAMMER__PHYSICAL,
SUBZERO_SLAMMER__SPECIAL,
DEVASTATING_DRAKE__PHYSICAL,
DEVASTATING_DRAKE__SPECIAL,
BLACK_HOLE_ECLIPSE__PHYSICAL,
BLACK_HOLE_ECLIPSE__SPECIAL,
TWINKLE_TACKLE__PHYSICAL,
TWINKLE_TACKLE__SPECIAL,
CATASTROPIKA,
SHORE_UP,
FIRST_IMPRESSION,
BANEFUL_BUNKER,
SPIRIT_SHACKLE,
DARKEST_LARIAT,
SPARKLING_ARIA,
ICE_HAMMER,
FLORAL_HEALING,
HIGH_HORSEPOWER,
STRENGTH_SAP,
SOLAR_BLADE,
LEAFAGE,
SPOTLIGHT,
TOXIC_THREAD,
LASER_FOCUS,
GEAR_UP,
THROAT_CHOP,
POLLEN_PUFF,
ANCHOR_SHOT,
PSYCHIC_TERRAIN,
LUNGE,
FIRE_LASH,
POWER_TRIP,
BURN_UP,
SPEED_SWAP,
SMART_STRIKE,
PURIFY,
REVELATION_DANCE,
CORE_ENFORCER,
TROP_KICK,
INSTRUCT,
BEAK_BLAST,
CLANGING_SCALES,
DRAGON_HAMMER,
BRUTAL_SWING,
AURORA_VEIL,
SINISTER_ARROW_RAID,
MALICIOUS_MOONSAULT,
OCEANIC_OPERETTA,
GUARDIAN_OF_ALOLA,
SOUL_STEALING_7_STAR_STRIKE,
STOKED_SPARKSURFER,
PULVERIZING_PANCAKE,
EXTREME_EVOBOOST,
GENESIS_SUPERNOVA,
SHELL_TRAP,
FLEUR_CANNON,
PSYCHIC_FANGS,
STOMPING_TANTRUM,
SHADOW_BONE,
ACCELEROCK,
LIQUIDATION,
PRISMATIC_LASER,
SPECTRAL_THIEF,
SUNSTEEL_STRIKE,
MOONGEIST_BEAM,
TEARFUL_LOOK,
ZING_ZAP,
NATURES_MADNESS,
MULTI_ATTACK,
TEN_MILLION_VOLT_THUNDERBOLT,
MIND_BLOWN,
PLASMA_FISTS,
PHOTON_GEYSER,
LIGHT_THAT_BURNS_THE_SKY,
SEARING_SUNRAZE_SMASH,
MENACING_MOONRAZE_MAELSTROM,
LETS_SNUGGLE_FOREVER,
SPLINTERED_STORMSHARDS,
CLANGOROUS_SOULBLAZE,
ZIPPY_ZAP,
SPLISHY_SPLASH,
FLOATY_FALL,
PIKA_PAPOW,
BOUNCY_BUBBLE,
BUZZY_BUZZ,
SIZZLY_SLIDE,
GLITZY_GLOW,
BADDY_BAD,
SAPPY_SEED,
FREEZY_FROST,
SPARKLY_SWIRL,
VEEVEE_VOLLEY,
DOUBLE_IRON_BASH,
MAX_GUARD,
DYNAMAX_CANNON,
SNIPE_SHOT,
JAW_LOCK,
STUFF_CHEEKS,
NO_RETREAT,
TAR_SHOT,
MAGIC_POWDER,
DRAGON_DARTS,
TEATIME,
OCTOLOCK,
BOLT_BEAK,
FISHIOUS_REND,
COURT_CHANGE,
MAX_FLARE,
MAX_FLUTTERBY,
MAX_LIGHTNING,
MAX_STRIKE,
MAX_KNUCKLE,
MAX_PHANTASM,
MAX_HAILSTORM,
MAX_OOZE,
MAX_GEYSER,
MAX_AIRSTREAM,
MAX_STARFALL,
MAX_WYRMWIND,
MAX_MINDSTORM,
MAX_ROCKFALL,
MAX_QUAKE,
MAX_DARKNESS,
MAX_OVERGROWTH,
MAX_STEELSPIKE,
CLANGOROUS_SOUL,
BODY_PRESS,
DECORATE,
DRUM_BEATING,
SNAP_TRAP,
PYRO_BALL,
BEHEMOTH_BLADE,
BEHEMOTH_BASH,
AURA_WHEEL,
BREAKING_SWIPE,
BRANCH_POKE,
OVERDRIVE,
APPLE_ACID,
GRAV_APPLE,
SPIRIT_BREAK,
STRANGE_STEAM,
LIFE_DEW,
OBSTRUCT,
FALSE_SURRENDER,
METEOR_ASSAULT,
ETERNABEAM,
STEEL_BEAM,
EXPANDING_FORCE,
STEEL_ROLLER,
SCALE_SHOT,
METEOR_BEAM,
SHELL_SIDE_ARM,
MISTY_EXPLOSION,
GRASSY_GLIDE,
RISING_VOLTAGE,
TERRAIN_PULSE,
SKITTER_SMACK,
BURNING_JEALOUSY,
LASH_OUT,
POLTERGEIST,
CORROSIVE_GAS,
COACHING,
FLIP_TURN,
TRIPLE_AXEL,
DUAL_WINGBEAT,
SCORCHING_SANDS,
JUNGLE_HEALING,
WICKED_BLOW,
SURGING_STRIKES,
THUNDER_CAGE,
DRAGON_ENERGY,
FREEZING_GLARE,
FIERY_WRATH,
THUNDEROUS_KICK,
GLACIAL_LANCE,
ASTRAL_BARRAGE,
EERIE_SPELL,
DIRE_CLAW,
PSYSHIELD_BASH,
POWER_SHIFT,
STONE_AXE,
SPRINGTIDE_STORM,
MYSTICAL_POWER,
RAGING_FURY,
WAVE_CRASH,
CHLOROBLAST,
MOUNTAIN_GALE,
VICTORY_DANCE,
HEADLONG_RUSH,
BARB_BARRAGE,
ESPER_WING,
BITTER_MALICE,
SHELTER,
TRIPLE_ARROWS,
INFERNAL_PARADE,
CEASELESS_EDGE,
BLEAKWIND_STORM,
WILDBOLT_STORM,
SANDSEAR_STORM,
LUNAR_BLESSING,
TAKE_HEART,
TERA_BLAST,
SILK_TRAP,
AXE_KICK,
LAST_RESPECTS,
LUMINA_CRASH,
ORDER_UP,
JET_PUNCH,
SPICY_EXTRACT,
SPIN_OUT,
POPULATION_BOMB,
ICE_SPINNER,
GLAIVE_RUSH,
REVIVAL_BLESSING,
SALT_CURE,
TRIPLE_DIVE,
MORTAL_SPIN,
DOODLE,
FILLET_AWAY,
KOWTOW_CLEAVE,
FLOWER_TRICK,
TORCH_SONG,
AQUA_STEP,
RAGING_BULL,
MAKE_IT_RAIN,
PSYBLADE,
HYDRO_STEAM,
RUINATION,
COLLISION_COURSE,
ELECTRO_DRIFT,
SHED_TAIL,
CHILLY_RECEPTION,
TIDY_UP,
SNOWSCAPE,
POUNCE,
TRAILBLAZE,
CHILLING_WATER,
HYPER_DRILL,
TWIN_BEAM,
RAGE_FIST,
ARMOR_CANNON,
BITTER_BLADE,
DOUBLE_SHOCK,
GIGATON_HAMMER,
COMEUPPANCE,
AQUA_CUTTER,
BLAZING_TORQUE,
WICKED_TORQUE,
NOXIOUS_TORQUE,
COMBAT_TORQUE,
MAGICAL_TORQUE,
BLOOD_MOON,
MATCHA_GOTCHA,
SYRUP_BOMB,
IVY_CUDGEL,
ELECTRO_SHOT,
TERA_STARSTORM,
FICKLE_BEAM,
BURNING_BULWARK,
THUNDERCLAP,
MIGHTY_CLEAVE,
TACHYON_CUTTER,
HARD_PRESS,
DRAGON_CHEER,
ALLURING_VOICE,
TEMPER_FLARE,
SUPERCELL_SLAM,
PSYCHIC_NOISE,
UPPER_HAND,
MALIGNANT_CHAIN,
};
File renamed without changes.
+8
View File
@@ -0,0 +1,8 @@
export enum TimeOfDay {
ALL = -1,
DAWN,
DAY,
DUSK,
NIGHT
}
+178
View File
@@ -0,0 +1,178 @@
export enum TrainerType {
UNKNOWN,
ACE_TRAINER,
ARTIST,
BACKERS,
BACKPACKER,
BAKER,
BEAUTY,
BIKER,
BLACK_BELT,
BREEDER,
CLERK,
CYCLIST,
DANCER,
DEPOT_AGENT,
DOCTOR,
FISHERMAN,
GUITARIST,
HARLEQUIN,
HIKER,
HOOLIGANS,
HOOPSTER,
INFIELDER,
JANITOR,
LINEBACKER,
MAID,
MUSICIAN,
NURSE,
NURSERY_AIDE,
OFFICER,
PARASOL_LADY,
PILOT,
POKEFAN,
PRESCHOOLER,
PSYCHIC,
RANGER,
RICH,
RICH_KID,
ROUGHNECK,
SCIENTIST,
SMASHER,
SNOW_WORKER,
STRIKER,
STUDENT,
SWIMMER,
TWINS,
VETERAN,
WAITER,
WORKER,
YOUNGSTER,
BROCK = 200,
MISTY,
LT_SURGE,
ERIKA,
JANINE,
SABRINA,
BLAINE,
GIOVANNI,
FALKNER,
BUGSY,
WHITNEY,
MORTY,
CHUCK,
JASMINE,
PRYCE,
CLAIR,
ROXANNE,
BRAWLY,
WATTSON,
FLANNERY,
NORMAN,
WINONA,
TATE,
LIZA,
JUAN,
ROARK,
GARDENIA,
MAYLENE,
CRASHER_WAKE,
FANTINA,
BYRON,
CANDICE,
VOLKNER,
CILAN,
CHILI,
CRESS,
CHEREN,
LENORA,
ROXIE,
BURGH,
ELESA,
CLAY,
SKYLA,
BRYCEN,
DRAYDEN,
MARLON,
VIOLA,
GRANT,
KORRINA,
RAMOS,
CLEMONT,
VALERIE,
OLYMPIA,
WULFRIC,
MILO,
NESSA,
KABU,
BEA,
ALLISTER,
OPAL,
BEDE,
GORDIE,
MELONY,
PIERS,
MARNIE,
RAIHAN,
/*KATY,
BRASSIUS,
IONO,
KOFU,
LARRY,
RYME,
TULIP,
GRUSHA*/
LORELEI = 300,
BRUNO,
AGATHA,
LANCE,
WILL,
KOGA,
KAREN,
SIDNEY,
PHOEBE,
GLACIA,
DRAKE,
AARON,
BERTHA,
FLINT,
LUCIAN,
SHAUNTAL,
MARSHAL,
GRIMSLEY,
CAITLIN,
MALVA,
SIEBOLD,
WIKSTROM,
DRASNA,
HALA,
MOLAYNE,
OLIVIA,
ACEROLA,
KAHILI,
/*RIKA,
POPPY,
LARRY_ELITE,
HASSEL*/
BLUE = 350,
RED,
LANCE_CHAMPION,
STEVEN,
WALLACE,
CYNTHIA,
ALDER,
IRIS,
DIANTHA,
LEON,
/*GEETA,
NEMONA,
KIERAN,*/
RIVAL = 375,
RIVAL_2,
RIVAL_3,
RIVAL_4,
RIVAL_5,
RIVAL_6
}
+17 -924
View File
@@ -1,7 +1,9 @@
import { Moves } from "./enums/moves";
import { ChargeAnim, MoveChargeAnim, initMoveAnim, loadMoveAnimAssets } from "./battle-anims";
import { BattleEndPhase, DamagePhase, MovePhase, NewBattlePhase, ObtainStatusEffectPhase, PokemonHealPhase, StatChangePhase, SwitchSummonPhase } from "../battle-phases";
import { BattleStat } from "./battle-stat";
import { BattlerTagType, EncoreTag } from "./battler-tag";
import { EncoreTag } from "./battler-tags";
import { BattlerTagType } from "./enums/battler-tag-type";
import { getPokemonMessage } from "../messages";
import Pokemon, { AttackMoveResult, HitResult, MoveResult, PlayerPokemon, PokemonMove, TurnMove } from "../pokemon";
import { StatusEffect, getStatusEffectDescriptor } from "./status-effect";
@@ -324,929 +326,6 @@ export class SelfStatusMove extends Move {
}
}
export enum Moves {
NONE,
POUND,
KARATE_CHOP,
DOUBLE_SLAP,
COMET_PUNCH,
MEGA_PUNCH,
PAY_DAY,
FIRE_PUNCH,
ICE_PUNCH,
THUNDER_PUNCH,
SCRATCH,
VICE_GRIP,
GUILLOTINE,
RAZOR_WIND,
SWORDS_DANCE,
CUT,
GUST,
WING_ATTACK,
WHIRLWIND,
FLY,
BIND,
SLAM,
VINE_WHIP,
STOMP,
DOUBLE_KICK,
MEGA_KICK,
JUMP_KICK,
ROLLING_KICK,
SAND_ATTACK,
HEADBUTT,
HORN_ATTACK,
FURY_ATTACK,
HORN_DRILL,
TACKLE,
BODY_SLAM,
WRAP,
TAKE_DOWN,
THRASH,
DOUBLE_EDGE,
TAIL_WHIP,
POISON_STING,
TWINEEDLE,
PIN_MISSILE,
LEER,
BITE,
GROWL,
ROAR,
SING,
SUPERSONIC,
SONIC_BOOM,
DISABLE,
ACID,
EMBER,
FLAMETHROWER,
MIST,
WATER_GUN,
HYDRO_PUMP,
SURF,
ICE_BEAM,
BLIZZARD,
PSYBEAM,
BUBBLE_BEAM,
AURORA_BEAM,
HYPER_BEAM,
PECK,
DRILL_PECK,
SUBMISSION,
LOW_KICK,
COUNTER,
SEISMIC_TOSS,
STRENGTH,
ABSORB,
MEGA_DRAIN,
LEECH_SEED,
GROWTH,
RAZOR_LEAF,
SOLAR_BEAM,
POISON_POWDER,
STUN_SPORE,
SLEEP_POWDER,
PETAL_DANCE,
STRING_SHOT,
DRAGON_RAGE,
FIRE_SPIN,
THUNDER_SHOCK,
THUNDERBOLT,
THUNDER_WAVE,
THUNDER,
ROCK_THROW,
EARTHQUAKE,
FISSURE,
DIG,
TOXIC,
CONFUSION,
PSYCHIC,
HYPNOSIS,
MEDITATE,
AGILITY,
QUICK_ATTACK,
RAGE,
TELEPORT,
NIGHT_SHADE,
MIMIC,
SCREECH,
DOUBLE_TEAM,
RECOVER,
HARDEN,
MINIMIZE,
SMOKESCREEN,
CONFUSE_RAY,
WITHDRAW,
DEFENSE_CURL,
BARRIER,
LIGHT_SCREEN,
HAZE,
REFLECT,
FOCUS_ENERGY,
BIDE,
METRONOME,
MIRROR_MOVE,
SELF_DESTRUCT,
EGG_BOMB,
LICK,
SMOG,
SLUDGE,
BONE_CLUB,
FIRE_BLAST,
WATERFALL,
CLAMP,
SWIFT,
SKULL_BASH,
SPIKE_CANNON,
CONSTRICT,
AMNESIA,
KINESIS,
SOFT_BOILED,
HIGH_JUMP_KICK,
GLARE,
DREAM_EATER,
POISON_GAS,
BARRAGE,
LEECH_LIFE,
LOVELY_KISS,
SKY_ATTACK,
TRANSFORM,
BUBBLE,
DIZZY_PUNCH,
SPORE,
FLASH,
PSYWAVE,
SPLASH,
ACID_ARMOR,
CRABHAMMER,
EXPLOSION,
FURY_SWIPES,
BONEMERANG,
REST,
ROCK_SLIDE,
HYPER_FANG,
SHARPEN,
CONVERSION,
TRI_ATTACK,
SUPER_FANG,
SLASH,
SUBSTITUTE,
STRUGGLE,
SKETCH,
TRIPLE_KICK,
THIEF,
SPIDER_WEB,
MIND_READER,
NIGHTMARE,
FLAME_WHEEL,
SNORE,
CURSE,
FLAIL,
CONVERSION_2,
AEROBLAST,
COTTON_SPORE,
REVERSAL,
SPITE,
POWDER_SNOW,
PROTECT,
MACH_PUNCH,
SCARY_FACE,
FEINT_ATTACK,
SWEET_KISS,
BELLY_DRUM,
SLUDGE_BOMB,
MUD_SLAP,
OCTAZOOKA,
SPIKES,
ZAP_CANNON,
FORESIGHT,
DESTINY_BOND,
PERISH_SONG,
ICY_WIND,
DETECT,
BONE_RUSH,
LOCK_ON,
OUTRAGE,
SANDSTORM,
GIGA_DRAIN,
ENDURE,
CHARM,
ROLLOUT,
FALSE_SWIPE,
SWAGGER,
MILK_DRINK,
SPARK,
FURY_CUTTER,
STEEL_WING,
MEAN_LOOK,
ATTRACT,
SLEEP_TALK,
HEAL_BELL,
RETURN,
PRESENT,
FRUSTRATION,
SAFEGUARD,
PAIN_SPLIT,
SACRED_FIRE,
MAGNITUDE,
DYNAMIC_PUNCH,
MEGAHORN,
DRAGON_BREATH,
BATON_PASS,
ENCORE,
PURSUIT,
RAPID_SPIN,
SWEET_SCENT,
IRON_TAIL,
METAL_CLAW,
VITAL_THROW,
MORNING_SUN,
SYNTHESIS,
MOONLIGHT,
HIDDEN_POWER,
CROSS_CHOP,
TWISTER,
RAIN_DANCE,
SUNNY_DAY,
CRUNCH,
MIRROR_COAT,
PSYCH_UP,
EXTREME_SPEED,
ANCIENT_POWER,
SHADOW_BALL,
FUTURE_SIGHT,
ROCK_SMASH,
WHIRLPOOL,
BEAT_UP,
FAKE_OUT,
UPROAR,
STOCKPILE,
SPIT_UP,
SWALLOW,
HEAT_WAVE,
HAIL,
TORMENT,
FLATTER,
WILL_O_WISP,
MEMENTO,
FACADE,
FOCUS_PUNCH,
SMELLING_SALTS,
FOLLOW_ME,
NATURE_POWER,
CHARGE,
TAUNT,
HELPING_HAND,
TRICK,
ROLE_PLAY,
WISH,
ASSIST,
INGRAIN,
SUPERPOWER,
MAGIC_COAT,
RECYCLE,
REVENGE,
BRICK_BREAK,
YAWN,
KNOCK_OFF,
ENDEAVOR,
ERUPTION,
SKILL_SWAP,
IMPRISON,
REFRESH,
GRUDGE,
SNATCH,
SECRET_POWER,
DIVE,
ARM_THRUST,
CAMOUFLAGE,
TAIL_GLOW,
LUSTER_PURGE,
MIST_BALL,
FEATHER_DANCE,
TEETER_DANCE,
BLAZE_KICK,
MUD_SPORT,
ICE_BALL,
NEEDLE_ARM,
SLACK_OFF,
HYPER_VOICE,
POISON_FANG,
CRUSH_CLAW,
BLAST_BURN,
HYDRO_CANNON,
METEOR_MASH,
ASTONISH,
WEATHER_BALL,
AROMATHERAPY,
FAKE_TEARS,
AIR_CUTTER,
OVERHEAT,
ODOR_SLEUTH,
ROCK_TOMB,
SILVER_WIND,
METAL_SOUND,
GRASS_WHISTLE,
TICKLE,
COSMIC_POWER,
WATER_SPOUT,
SIGNAL_BEAM,
SHADOW_PUNCH,
EXTRASENSORY,
SKY_UPPERCUT,
SAND_TOMB,
SHEER_COLD,
MUDDY_WATER,
BULLET_SEED,
AERIAL_ACE,
ICICLE_SPEAR,
IRON_DEFENSE,
BLOCK,
HOWL,
DRAGON_CLAW,
FRENZY_PLANT,
BULK_UP,
BOUNCE,
MUD_SHOT,
POISON_TAIL,
COVET,
VOLT_TACKLE,
MAGICAL_LEAF,
WATER_SPORT,
CALM_MIND,
LEAF_BLADE,
DRAGON_DANCE,
ROCK_BLAST,
SHOCK_WAVE,
WATER_PULSE,
DOOM_DESIRE,
PSYCHO_BOOST,
ROOST,
GRAVITY,
MIRACLE_EYE,
WAKE_UP_SLAP,
HAMMER_ARM,
GYRO_BALL,
HEALING_WISH,
BRINE,
NATURAL_GIFT,
FEINT,
PLUCK,
TAILWIND,
ACUPRESSURE,
METAL_BURST,
U_TURN,
CLOSE_COMBAT,
PAYBACK,
ASSURANCE,
EMBARGO,
FLING,
PSYCHO_SHIFT,
TRUMP_CARD,
HEAL_BLOCK,
WRING_OUT,
POWER_TRICK,
GASTRO_ACID,
LUCKY_CHANT,
ME_FIRST,
COPYCAT,
POWER_SWAP,
GUARD_SWAP,
PUNISHMENT,
LAST_RESORT,
WORRY_SEED,
SUCKER_PUNCH,
TOXIC_SPIKES,
HEART_SWAP,
AQUA_RING,
MAGNET_RISE,
FLARE_BLITZ,
FORCE_PALM,
AURA_SPHERE,
ROCK_POLISH,
POISON_JAB,
DARK_PULSE,
NIGHT_SLASH,
AQUA_TAIL,
SEED_BOMB,
AIR_SLASH,
X_SCISSOR,
BUG_BUZZ,
DRAGON_PULSE,
DRAGON_RUSH,
POWER_GEM,
DRAIN_PUNCH,
VACUUM_WAVE,
FOCUS_BLAST,
ENERGY_BALL,
BRAVE_BIRD,
EARTH_POWER,
SWITCHEROO,
GIGA_IMPACT,
NASTY_PLOT,
BULLET_PUNCH,
AVALANCHE,
ICE_SHARD,
SHADOW_CLAW,
THUNDER_FANG,
ICE_FANG,
FIRE_FANG,
SHADOW_SNEAK,
MUD_BOMB,
PSYCHO_CUT,
ZEN_HEADBUTT,
MIRROR_SHOT,
FLASH_CANNON,
ROCK_CLIMB,
DEFOG,
TRICK_ROOM,
DRACO_METEOR,
DISCHARGE,
LAVA_PLUME,
LEAF_STORM,
POWER_WHIP,
ROCK_WRECKER,
CROSS_POISON,
GUNK_SHOT,
IRON_HEAD,
MAGNET_BOMB,
STONE_EDGE,
CAPTIVATE,
STEALTH_ROCK,
GRASS_KNOT,
CHATTER,
JUDGMENT,
BUG_BITE,
CHARGE_BEAM,
WOOD_HAMMER,
AQUA_JET,
ATTACK_ORDER,
DEFEND_ORDER,
HEAL_ORDER,
HEAD_SMASH,
DOUBLE_HIT,
ROAR_OF_TIME,
SPACIAL_REND,
LUNAR_DANCE,
CRUSH_GRIP,
MAGMA_STORM,
DARK_VOID,
SEED_FLARE,
OMINOUS_WIND,
SHADOW_FORCE,
HONE_CLAWS,
WIDE_GUARD,
GUARD_SPLIT,
POWER_SPLIT,
WONDER_ROOM,
PSYSHOCK,
VENOSHOCK,
AUTOTOMIZE,
RAGE_POWDER,
TELEKINESIS,
MAGIC_ROOM,
SMACK_DOWN,
STORM_THROW,
FLAME_BURST,
SLUDGE_WAVE,
QUIVER_DANCE,
HEAVY_SLAM,
SYNCHRONOISE,
ELECTRO_BALL,
SOAK,
FLAME_CHARGE,
COIL,
LOW_SWEEP,
ACID_SPRAY,
FOUL_PLAY,
SIMPLE_BEAM,
ENTRAINMENT,
AFTER_YOU,
ROUND,
ECHOED_VOICE,
CHIP_AWAY,
CLEAR_SMOG,
STORED_POWER,
QUICK_GUARD,
ALLY_SWITCH,
SCALD,
SHELL_SMASH,
HEAL_PULSE,
HEX,
SKY_DROP,
SHIFT_GEAR,
CIRCLE_THROW,
INCINERATE,
QUASH,
ACROBATICS,
REFLECT_TYPE,
RETALIATE,
FINAL_GAMBIT,
BESTOW,
INFERNO,
WATER_PLEDGE,
FIRE_PLEDGE,
GRASS_PLEDGE,
VOLT_SWITCH,
STRUGGLE_BUG,
BULLDOZE,
FROST_BREATH,
DRAGON_TAIL,
WORK_UP,
ELECTROWEB,
WILD_CHARGE,
DRILL_RUN,
DUAL_CHOP,
HEART_STAMP,
HORN_LEECH,
SACRED_SWORD,
RAZOR_SHELL,
HEAT_CRASH,
LEAF_TORNADO,
STEAMROLLER,
COTTON_GUARD,
NIGHT_DAZE,
PSYSTRIKE,
TAIL_SLAP,
HURRICANE,
HEAD_CHARGE,
GEAR_GRIND,
SEARING_SHOT,
TECHNO_BLAST,
RELIC_SONG,
SECRET_SWORD,
GLACIATE,
BOLT_STRIKE,
BLUE_FLARE,
FIERY_DANCE,
FREEZE_SHOCK,
ICE_BURN,
SNARL,
ICICLE_CRASH,
V_CREATE,
FUSION_FLARE,
FUSION_BOLT,
FLYING_PRESS,
MAT_BLOCK,
BELCH,
ROTOTILLER,
STICKY_WEB,
FELL_STINGER,
PHANTOM_FORCE,
TRICK_OR_TREAT,
NOBLE_ROAR,
ION_DELUGE,
PARABOLIC_CHARGE,
FORESTS_CURSE,
PETAL_BLIZZARD,
FREEZE_DRY,
DISARMING_VOICE,
PARTING_SHOT,
TOPSY_TURVY,
DRAINING_KISS,
CRAFTY_SHIELD,
FLOWER_SHIELD,
GRASSY_TERRAIN,
MISTY_TERRAIN,
ELECTRIFY,
PLAY_ROUGH,
FAIRY_WIND,
MOONBLAST,
BOOMBURST,
FAIRY_LOCK,
KINGS_SHIELD,
PLAY_NICE,
CONFIDE,
DIAMOND_STORM,
STEAM_ERUPTION,
HYPERSPACE_HOLE,
WATER_SHURIKEN,
MYSTICAL_FIRE,
SPIKY_SHIELD,
AROMATIC_MIST,
EERIE_IMPULSE,
VENOM_DRENCH,
POWDER,
GEOMANCY,
MAGNETIC_FLUX,
HAPPY_HOUR,
ELECTRIC_TERRAIN,
DAZZLING_GLEAM,
CELEBRATE,
HOLD_HANDS,
BABY_DOLL_EYES,
NUZZLE,
HOLD_BACK,
INFESTATION,
POWER_UP_PUNCH,
OBLIVION_WING,
THOUSAND_ARROWS,
THOUSAND_WAVES,
LANDS_WRATH,
LIGHT_OF_RUIN,
ORIGIN_PULSE,
PRECIPICE_BLADES,
DRAGON_ASCENT,
HYPERSPACE_FURY,
BREAKNECK_BLITZ__PHYSICAL,
BREAKNECK_BLITZ__SPECIAL,
ALL_OUT_PUMMELING__PHYSICAL,
ALL_OUT_PUMMELING__SPECIAL,
SUPERSONIC_SKYSTRIKE__PHYSICAL,
SUPERSONIC_SKYSTRIKE__SPECIAL,
ACID_DOWNPOUR__PHYSICAL,
ACID_DOWNPOUR__SPECIAL,
TECTONIC_RAGE__PHYSICAL,
TECTONIC_RAGE__SPECIAL,
CONTINENTAL_CRUSH__PHYSICAL,
CONTINENTAL_CRUSH__SPECIAL,
SAVAGE_SPIN_OUT__PHYSICAL,
SAVAGE_SPIN_OUT__SPECIAL,
NEVER_ENDING_NIGHTMARE__PHYSICAL,
NEVER_ENDING_NIGHTMARE__SPECIAL,
CORKSCREW_CRASH__PHYSICAL,
CORKSCREW_CRASH__SPECIAL,
INFERNO_OVERDRIVE__PHYSICAL,
INFERNO_OVERDRIVE__SPECIAL,
HYDRO_VORTEX__PHYSICAL,
HYDRO_VORTEX__SPECIAL,
BLOOM_DOOM__PHYSICAL,
BLOOM_DOOM__SPECIAL,
GIGAVOLT_HAVOC__PHYSICAL,
GIGAVOLT_HAVOC__SPECIAL,
SHATTERED_PSYCHE__PHYSICAL,
SHATTERED_PSYCHE__SPECIAL,
SUBZERO_SLAMMER__PHYSICAL,
SUBZERO_SLAMMER__SPECIAL,
DEVASTATING_DRAKE__PHYSICAL,
DEVASTATING_DRAKE__SPECIAL,
BLACK_HOLE_ECLIPSE__PHYSICAL,
BLACK_HOLE_ECLIPSE__SPECIAL,
TWINKLE_TACKLE__PHYSICAL,
TWINKLE_TACKLE__SPECIAL,
CATASTROPIKA,
SHORE_UP,
FIRST_IMPRESSION,
BANEFUL_BUNKER,
SPIRIT_SHACKLE,
DARKEST_LARIAT,
SPARKLING_ARIA,
ICE_HAMMER,
FLORAL_HEALING,
HIGH_HORSEPOWER,
STRENGTH_SAP,
SOLAR_BLADE,
LEAFAGE,
SPOTLIGHT,
TOXIC_THREAD,
LASER_FOCUS,
GEAR_UP,
THROAT_CHOP,
POLLEN_PUFF,
ANCHOR_SHOT,
PSYCHIC_TERRAIN,
LUNGE,
FIRE_LASH,
POWER_TRIP,
BURN_UP,
SPEED_SWAP,
SMART_STRIKE,
PURIFY,
REVELATION_DANCE,
CORE_ENFORCER,
TROP_KICK,
INSTRUCT,
BEAK_BLAST,
CLANGING_SCALES,
DRAGON_HAMMER,
BRUTAL_SWING,
AURORA_VEIL,
SINISTER_ARROW_RAID,
MALICIOUS_MOONSAULT,
OCEANIC_OPERETTA,
GUARDIAN_OF_ALOLA,
SOUL_STEALING_7_STAR_STRIKE,
STOKED_SPARKSURFER,
PULVERIZING_PANCAKE,
EXTREME_EVOBOOST,
GENESIS_SUPERNOVA,
SHELL_TRAP,
FLEUR_CANNON,
PSYCHIC_FANGS,
STOMPING_TANTRUM,
SHADOW_BONE,
ACCELEROCK,
LIQUIDATION,
PRISMATIC_LASER,
SPECTRAL_THIEF,
SUNSTEEL_STRIKE,
MOONGEIST_BEAM,
TEARFUL_LOOK,
ZING_ZAP,
NATURES_MADNESS,
MULTI_ATTACK,
TEN_MILLION_VOLT_THUNDERBOLT,
MIND_BLOWN,
PLASMA_FISTS,
PHOTON_GEYSER,
LIGHT_THAT_BURNS_THE_SKY,
SEARING_SUNRAZE_SMASH,
MENACING_MOONRAZE_MAELSTROM,
LETS_SNUGGLE_FOREVER,
SPLINTERED_STORMSHARDS,
CLANGOROUS_SOULBLAZE,
ZIPPY_ZAP,
SPLISHY_SPLASH,
FLOATY_FALL,
PIKA_PAPOW,
BOUNCY_BUBBLE,
BUZZY_BUZZ,
SIZZLY_SLIDE,
GLITZY_GLOW,
BADDY_BAD,
SAPPY_SEED,
FREEZY_FROST,
SPARKLY_SWIRL,
VEEVEE_VOLLEY,
DOUBLE_IRON_BASH,
MAX_GUARD,
DYNAMAX_CANNON,
SNIPE_SHOT,
JAW_LOCK,
STUFF_CHEEKS,
NO_RETREAT,
TAR_SHOT,
MAGIC_POWDER,
DRAGON_DARTS,
TEATIME,
OCTOLOCK,
BOLT_BEAK,
FISHIOUS_REND,
COURT_CHANGE,
MAX_FLARE,
MAX_FLUTTERBY,
MAX_LIGHTNING,
MAX_STRIKE,
MAX_KNUCKLE,
MAX_PHANTASM,
MAX_HAILSTORM,
MAX_OOZE,
MAX_GEYSER,
MAX_AIRSTREAM,
MAX_STARFALL,
MAX_WYRMWIND,
MAX_MINDSTORM,
MAX_ROCKFALL,
MAX_QUAKE,
MAX_DARKNESS,
MAX_OVERGROWTH,
MAX_STEELSPIKE,
CLANGOROUS_SOUL,
BODY_PRESS,
DECORATE,
DRUM_BEATING,
SNAP_TRAP,
PYRO_BALL,
BEHEMOTH_BLADE,
BEHEMOTH_BASH,
AURA_WHEEL,
BREAKING_SWIPE,
BRANCH_POKE,
OVERDRIVE,
APPLE_ACID,
GRAV_APPLE,
SPIRIT_BREAK,
STRANGE_STEAM,
LIFE_DEW,
OBSTRUCT,
FALSE_SURRENDER,
METEOR_ASSAULT,
ETERNABEAM,
STEEL_BEAM,
EXPANDING_FORCE,
STEEL_ROLLER,
SCALE_SHOT,
METEOR_BEAM,
SHELL_SIDE_ARM,
MISTY_EXPLOSION,
GRASSY_GLIDE,
RISING_VOLTAGE,
TERRAIN_PULSE,
SKITTER_SMACK,
BURNING_JEALOUSY,
LASH_OUT,
POLTERGEIST,
CORROSIVE_GAS,
COACHING,
FLIP_TURN,
TRIPLE_AXEL,
DUAL_WINGBEAT,
SCORCHING_SANDS,
JUNGLE_HEALING,
WICKED_BLOW,
SURGING_STRIKES,
THUNDER_CAGE,
DRAGON_ENERGY,
FREEZING_GLARE,
FIERY_WRATH,
THUNDEROUS_KICK,
GLACIAL_LANCE,
ASTRAL_BARRAGE,
EERIE_SPELL,
DIRE_CLAW,
PSYSHIELD_BASH,
POWER_SHIFT,
STONE_AXE,
SPRINGTIDE_STORM,
MYSTICAL_POWER,
RAGING_FURY,
WAVE_CRASH,
CHLOROBLAST,
MOUNTAIN_GALE,
VICTORY_DANCE,
HEADLONG_RUSH,
BARB_BARRAGE,
ESPER_WING,
BITTER_MALICE,
SHELTER,
TRIPLE_ARROWS,
INFERNAL_PARADE,
CEASELESS_EDGE,
BLEAKWIND_STORM,
WILDBOLT_STORM,
SANDSEAR_STORM,
LUNAR_BLESSING,
TAKE_HEART,
TERA_BLAST,
SILK_TRAP,
AXE_KICK,
LAST_RESPECTS,
LUMINA_CRASH,
ORDER_UP,
JET_PUNCH,
SPICY_EXTRACT,
SPIN_OUT,
POPULATION_BOMB,
ICE_SPINNER,
GLAIVE_RUSH,
REVIVAL_BLESSING,
SALT_CURE,
TRIPLE_DIVE,
MORTAL_SPIN,
DOODLE,
FILLET_AWAY,
KOWTOW_CLEAVE,
FLOWER_TRICK,
TORCH_SONG,
AQUA_STEP,
RAGING_BULL,
MAKE_IT_RAIN,
PSYBLADE,
HYDRO_STEAM,
RUINATION,
COLLISION_COURSE,
ELECTRO_DRIFT,
SHED_TAIL,
CHILLY_RECEPTION,
TIDY_UP,
SNOWSCAPE,
POUNCE,
TRAILBLAZE,
CHILLING_WATER,
HYPER_DRILL,
TWIN_BEAM,
RAGE_FIST,
ARMOR_CANNON,
BITTER_BLADE,
DOUBLE_SHOCK,
GIGATON_HAMMER,
COMEUPPANCE,
AQUA_CUTTER,
BLAZING_TORQUE,
WICKED_TORQUE,
NOXIOUS_TORQUE,
COMBAT_TORQUE,
MAGICAL_TORQUE,
BLOOD_MOON,
MATCHA_GOTCHA,
SYRUP_BOMB,
IVY_CUDGEL,
ELECTRO_SHOT,
TERA_STARSTORM,
FICKLE_BEAM,
BURNING_BULWARK,
THUNDERCLAP,
MIGHTY_CLEAVE,
TACHYON_CUTTER,
HARD_PRESS,
DRAGON_CHEER,
ALLURING_VOICE,
TEMPER_FLARE,
SUPERCELL_SLAM,
PSYCHIC_NOISE,
UPPER_HAND,
MALIGNANT_CHAIN,
};
export abstract class MoveAttr {
public selfTarget: boolean;
@@ -2913,6 +1992,19 @@ export class TransformAttr extends MoveEffectAttr {
}
}
export class DiscourageFrequentUseAttr extends MoveAttr {
getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer {
const lastMoves = user.getLastXMoves(4);
console.log(lastMoves);
for (let m = 0; m < lastMoves.length; m++) {
if (lastMoves[m].move === move.id)
return (4 - (m + 1)) * -10;
}
return 0;
}
}
const failOnGravityCondition: MoveConditionFunc = (user, target, move) => !user.scene.arena.getTag(ArenaTagType.GRAVITY);
export type MoveAttrFilter = (attr: MoveAttr) => boolean;
@@ -4652,6 +3744,7 @@ export function initMoves() {
.attr(ProtectAttr),
new AttackMove(Moves.DYNAMAX_CANNON, "Dynamax Cannon", Type.DRAGON, MoveCategory.SPECIAL, 100, 100, 5, -1, "The user unleashes a strong beam from its core. This move deals twice the damage if the target is over level 200.", -1, 0, 8)
.attr(MovePowerMultiplierAttr, (user, target, move) => target.level > 200 ? 2 : 1)
.attr(DiscourageFrequentUseAttr)
.ignoresVirtual(),
new AttackMove(Moves.SNIPE_SHOT, "Snipe Shot (N)", Type.WATER, MoveCategory.SPECIAL, 80, 100, 15, -1, "The user ignores the effects of opposing Pokémon's moves and Abilities that draw in moves, allowing this move to hit the chosen target.", -1, 0, 8),
new AttackMove(Moves.JAW_LOCK, "Jaw Lock (N)", Type.DARK, MoveCategory.PHYSICAL, 80, 100, 10, -1, "This move prevents the user and the target from switching out until either of them faints. The effect goes away if either of the Pokémon leaves the field.", -1, 0, 8)
+4 -4
View File
@@ -1,17 +1,17 @@
import { Gender } from "./gender";
import { AttackTypeBoosterModifier, FlinchChanceModifier } from "../modifier/modifier";
import { AttackTypeBoosterModifierType } from "../modifier/modifier-type";
import { Moves } from "./move";
import { Moves } from "./enums/moves";
import { PokeballType } from "./pokeball";
import Pokemon from "../pokemon";
import { Stat } from "./pokemon-stat";
import { Species } from "./species";
import { Species } from "./enums/species";
import { Type } from "./type";
import * as Utils from "../utils";
import { SpeciesFormKey } from "./pokemon-species";
import { WeatherType } from "./weather";
import { Biome } from "./biome";
import { TimeOfDay } from "../arena";
import { Biome } from "./enums/biome";
import { TimeOfDay } from "./enums/time-of-day";
import { Nature } from "./nature";
export enum SpeciesWildEvolutionDelay {
+12 -3
View File
@@ -1,9 +1,9 @@
import { TimeOfDay } from "../arena";
import { TimeOfDay } from "./enums/time-of-day";
import { PokemonFormChangeItemModifier } from "../modifier/modifier";
import Pokemon from "../pokemon";
import { Moves } from "./move";
import { Moves } from "./enums/moves";
import { SpeciesFormKey } from "./pokemon-species";
import { Species } from "./species";
import { Species } from "./enums/species";
import { StatusEffect } from "./status-effect";
export enum FormChangeItem {
@@ -138,6 +138,12 @@ export abstract class SpeciesFormChangeTrigger {
}
}
export class SpeciesFormChangeManualTrigger extends SpeciesFormChangeTrigger {
canChange(pokemon: Pokemon): boolean {
return true;
}
}
export class SpeciesFormChangeCompoundTrigger {
public triggers: SpeciesFormChangeTrigger[];
@@ -442,6 +448,9 @@ export const pokemonFormChanges: PokemonFormChanges = {
[Species.DIANCIE]: [
new SpeciesFormChange(Species.DIANCIE, '', SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.DIANCITE))
],
[Species.ETERNATUS]: [
new SpeciesFormChange(Species.ETERNATUS, '', 'eternamax', new SpeciesFormChangeManualTrigger())
],
[Species.ENAMORUS]: [
new SpeciesFormChange(Species.ENAMORUS, SpeciesFormKey.INCARNATE, SpeciesFormKey.THERIAN, new SpeciesFormChangeItemTrigger(FormChangeItem.REVEAL_GLASS))
]
+2 -2
View File
@@ -1,5 +1,5 @@
import { Moves } from "./move";
import { Species } from "./species";
import { Moves } from "./enums/moves";
import { Species } from "./enums/species";
export type LevelMoves = (integer | Moves)[][];
+2 -2
View File
@@ -2,10 +2,10 @@ import { Abilities } from './ability';
import BattleScene, { AnySound } from '../battle-scene';
import { GrowthRate } from './exp';
import { SpeciesWildEvolutionDelay, pokemonEvolutions, pokemonPrevolutions } from './pokemon-evolutions';
import { Species } from './species';
import { Species } from './enums/species';
import { Type } from './type';
import { LevelMoves, pokemonFormLevelMoves as pokemonSpeciesFormLevelMoves, pokemonSpeciesLevelMoves } from './pokemon-level-moves';
import { uncatchableSpecies } from './biome';
import { uncatchableSpecies } from './biomes';
import * as Utils from '../utils';
export enum Region {
+3 -3
View File
@@ -1,6 +1,6 @@
import { ModifierTier } from "../modifier/modifier-type";
import { Moves } from "./move";
import { Species } from "./species";
import { ModifierTier } from "../modifier/modifier-tier";
import { Moves } from "./enums/moves";
import { Species } from "./enums/species";
interface TmSpecies {
[key: integer]: Array<Species | Array<Species | string>>
@@ -2,194 +2,15 @@ import BattleScene, { startingWave } from "../battle-scene";
import { ModifierTypeFunc, modifierTypes } from "../modifier/modifier-type";
import { EnemyPokemon } from "../pokemon";
import * as Utils from "../utils";
import { Moves } from "./move";
import { TrainerType } from "./enums/trainer-type";
import { Moves } from "./enums/moves";
import { PokeballType } from "./pokeball";
import { pokemonEvolutions, pokemonPrevolutions } from "./pokemon-evolutions";
import PokemonSpecies, { PokemonSpeciesFilter, getPokemonSpecies } from "./pokemon-species";
import { Species } from "./species";
import { Species } from "./enums/species";
import { tmSpecies } from "./tms";
import { Type } from "./type";
export enum TrainerType {
UNKNOWN,
ACE_TRAINER,
ARTIST,
BACKERS,
BACKPACKER,
BAKER,
BEAUTY,
BIKER,
BLACK_BELT,
BREEDER,
CLERK,
CYCLIST,
DANCER,
DEPOT_AGENT,
DOCTOR,
FISHERMAN,
GUITARIST,
HARLEQUIN,
HIKER,
HOOLIGANS,
HOOPSTER,
INFIELDER,
JANITOR,
LINEBACKER,
MAID,
MUSICIAN,
NURSE,
NURSERY_AIDE,
OFFICER,
PARASOL_LADY,
PILOT,
POKEFAN,
PRESCHOOLER,
PSYCHIC,
RANGER,
RICH,
RICH_KID,
ROUGHNECK,
SCIENTIST,
SMASHER,
SNOW_WORKER,
STRIKER,
STUDENT,
SWIMMER,
TWINS,
VETERAN,
WAITER,
WORKER,
YOUNGSTER,
BROCK = 200,
MISTY,
LT_SURGE,
ERIKA,
JANINE,
SABRINA,
BLAINE,
GIOVANNI,
FALKNER,
BUGSY,
WHITNEY,
MORTY,
CHUCK,
JASMINE,
PRYCE,
CLAIR,
ROXANNE,
BRAWLY,
WATTSON,
FLANNERY,
NORMAN,
WINONA,
TATE,
LIZA,
JUAN,
ROARK,
GARDENIA,
MAYLENE,
CRASHER_WAKE,
FANTINA,
BYRON,
CANDICE,
VOLKNER,
CILAN,
CHILI,
CRESS,
CHEREN,
LENORA,
ROXIE,
BURGH,
ELESA,
CLAY,
SKYLA,
BRYCEN,
DRAYDEN,
MARLON,
VIOLA,
GRANT,
KORRINA,
RAMOS,
CLEMONT,
VALERIE,
OLYMPIA,
WULFRIC,
MILO,
NESSA,
KABU,
BEA,
ALLISTER,
OPAL,
BEDE,
GORDIE,
MELONY,
PIERS,
MARNIE,
RAIHAN,
/*KATY,
BRASSIUS,
IONO,
KOFU,
LARRY,
RYME,
TULIP,
GRUSHA*/
LORELEI = 300,
BRUNO,
AGATHA,
LANCE,
WILL,
KOGA,
KAREN,
SIDNEY,
PHOEBE,
GLACIA,
DRAKE,
AARON,
BERTHA,
FLINT,
LUCIAN,
SHAUNTAL,
MARSHAL,
GRIMSLEY,
CAITLIN,
MALVA,
SIEBOLD,
WIKSTROM,
DRASNA,
HALA,
MOLAYNE,
OLIVIA,
ACEROLA,
KAHILI,
/*RIKA,
POPPY,
LARRY_ELITE,
HASSEL*/
BLUE = 350,
RED,
LANCE_CHAMPION,
STEVEN,
WALLACE,
CYNTHIA,
ALDER,
IRIS,
DIANTHA,
LEON,
/*GEETA,
NEMONA,
KIERAN,*/
RIVAL = 375,
RIVAL_2,
RIVAL_3,
RIVAL_4,
RIVAL_5,
RIVAL_6
}
import { initTrainerTypeDialogue } from "./dialogue";
export enum TrainerPoolTier {
COMMON,
@@ -498,24 +319,6 @@ export class TrainerConfig {
return this;
}
setEncounterMessages(messages: string[], femaleMessages?: string[]): TrainerConfig {
this.encounterMessages = messages;
this.femaleEncounterMessages = femaleMessages;
return this;
}
setVictoryMessages(messages: string[], femaleMessages?: string[]): TrainerConfig {
this.victoryMessages = messages;
this.femaleVictoryMessages = femaleMessages;
return this;
}
setDefeatMessages(messages: string[], femaleMessages?: string[]): TrainerConfig {
this.defeatMessages = messages;
this.femaleDefeatMessages = femaleMessages;
return this;
}
setModifierRewardFuncs(...modifierTypeFuncs: (() => ModifierTypeFunc)[]): TrainerConfig {
this.modifierRewardFuncs = modifierTypeFuncs.map(func => () => {
const modifierTypeFunc = func();
@@ -798,24 +601,7 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerType.YOUNGSTER]: new TrainerConfig(++t).setMoneyMultiplier(0.5).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders('Lass', 'lass').setPartyTemplates(trainerPartyTemplates.TWO_WEAKER)
.setSpeciesPools(
[ Species.CATERPIE, Species.WEEDLE, Species.RATTATA, Species.SENTRET, Species.POOCHYENA, Species.ZIGZAGOON, Species.WURMPLE, Species.BIDOOF, Species.PATRAT, Species.LILLIPUP ]
).setEncounterMessages([
`Hey, wanna battle?`,
`Are you a new trainer too?`,
`Hey, I haven't seen you before. Let's battle!`
], [
`Let's have a battle, shall we?`,
`You look like a new trainer. Let's have a battle!`,
`I don't recognize you. How about a battle?`
]).setVictoryMessages([
`Wow! You're strong!`,
`I didn't stand a chance, huh.`,
`I'll find you again when I'm older and beat you!`
], [
`That was impressive! I've got a lot to learn.`,
`I didn't think you'd beat me that bad…`,
`I hope we get to have a rematch some day.`
]),
),
[TrainerType.BROCK]: new TrainerConfig((t = TrainerType.BROCK)).initForGymLeader([ Species.GEODUDE, Species.ONIX ], Type.ROCK),
[TrainerType.MISTY]: new TrainerConfig(++t).initForGymLeader([ Species.STARYU, Species.PSYDUCK ], Type.WATER),
[TrainerType.LT_SURGE]: new TrainerConfig(++t).initForGymLeader([ Species.VOLTORB, Species.PIKACHU, Species.ELECTABUZZ ], Type.ELECTRIC),
@@ -832,132 +618,15 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerType.JASMINE]: new TrainerConfig(++t).initForGymLeader([ Species.MAGNEMITE, Species.STEELIX ], Type.STEEL),
[TrainerType.PRYCE]: new TrainerConfig(++t).initForGymLeader([ Species.SEEL, Species.SWINUB ], Type.ICE),
[TrainerType.CLAIR]: new TrainerConfig(++t).initForGymLeader([ Species.DRATINI, Species.HORSEA, Species.GYARADOS ], Type.DRAGON),
[TrainerType.ROXANNE]: new TrainerConfig(++t).initForGymLeader([ Species.GEODUDE, Species.NOSEPASS ], Type.ROCK)
.setEncounterMessages([
`Would you kindly demonstrate how you battle?`,
`You can learn many things by battling many trainers.`,
`Oh, you caught me strategizing.\nWould you like to battle?`
]).setVictoryMessages([
`Oh, I appear to have lost.\nI understand.`,
`It seems that I still have so much more to learn when it comes to battle.`,
`I'll take what I learned here today to heart.`
]).setDefeatMessages([
`I have learned many things from our battle.\nI hope you have too.`,
`I look forward to battling you again.\nI hope you'll use what you've learned here.`,
`I won due to everything I have learned.`
]),
[TrainerType.BRAWLY]: new TrainerConfig(++t).initForGymLeader([ Species.MACHOP, Species.MAKUHITA ], Type.FIGHTING)
.setEncounterMessages([
`Oh man, a challenger!\nLet's see what you can do!`,
`You seem like a big splash.\nLet's battle!`,
`Time to create a storm!\nLet's go!`
]).setVictoryMessages([
`Oh woah, you've washed me out!`,
`You surfed my wave and crashed me down!`,
`I feel like I'm lost in Granite Cave!`
]).setDefeatMessages([
`Haha, I surfed the big wave!\nChallenge me again sometime.`,
`Surf with me again some time!`,
`Just like the tides come in and out, I hope you return to challenge me again.`
]),
[TrainerType.WATTSON]: new TrainerConfig(++t).initForGymLeader([ Species.MAGNEMITE, Species.VOLTORB, Species.ELECTRIKE ], Type.ELECTRIC)
.setEncounterMessages([
`Time to get shocked!\nWahahahaha!`,
`I'll make sparks fly!\nWahahahaha!`,
`I hope you brought Paralyz Heal!\nWahahahaha!`
]).setVictoryMessages([
`Seems like I'm out of charge!\nWahahahaha!`,
`You've completely grounded me!\nWahahahaha!`,
`Thanks for the thrill!\nWahahahaha!`
]).setDefeatMessages([
`Recharge your batteries and challenge me again sometime!\nWahahahaha!`,
`I hope you found our battle electrifying!\nWahahahaha!`,
`Aren't you shocked I won?\nWahahahaha!`
]),
[TrainerType.FLANNERY]: new TrainerConfig(++t).initForGymLeader([ Species.SLUGMA, Species.TORKOAL, Species.NUMEL ], Type.FIRE)
.setEncounterMessages([
`Nice to meet you! Wait, no…\nI will crush you!`,
`I've only been a leader for a little while, but I'll smoke you!`,
`It's time to demonstrate the moves my grandfather has taught me! Let's battle!`
]).setVictoryMessages([
`You remind me of my grandfather…\nNo wonder I lost.`,
`Am I trying too hard?\nI should relax, can't get too heated.`,
`Losing isn't going to smother me out.\nTime to reignite training!`
]).setDefeatMessages([
`I hope I've made my grandfather proud…\nLet's battle again some time.`,
`I…I can't believe I won!\nDoing things my way worked!`,
`Let's exchange burning hot moves again soon!`
]),
[TrainerType.NORMAN]: new TrainerConfig(++t).initForGymLeader([ Species.SLAKOTH, Species.SPINDA, Species.CHANSEY, Species.KANGASKHAN ], Type.NORMAL)
.setEncounterMessages([
`I'm surprised you managed to get here.\nLet's battle.`,
`I'll do everything in my power as a Gym Leader to win.\nLet's go!`,
`You better give this your all.\nIt's time to battle!`
]).setVictoryMessages([
`I lost to you…?\nRules are rules, though.`,
`Was moving from Olivine a mistake…?`,
`I can't believe it.\nThat was a great match.`
]).setDefeatMessages([
`We both tried our best.\nI hope we can battle again soon.`,
`You should try challenging my kid instead.\nYou might learn something!`,
`Thank you for the excellent battle.\nBetter luck next time.`
]),
[TrainerType.WINONA]: new TrainerConfig(++t).initForGymLeader([ Species.SWABLU, Species.WINGULL, Species.TROPIUS, Species.SKARMORY ], Type.FLYING)
.setEncounterMessages([
`I've been soaring the skies looking for prey…\nAnd you're my target!`,
`No matter how our battle is, my Flying Pokémon and I will triumph with grace. Let's battle!`,
`I hope you aren't scared of heights.\nLet's ascend!`
]).setVictoryMessages([
`You're the first Trainer I've seen with more grace than I.\nExcellently played.`,
`Oh, my Flying Pokémon have plummeted!\nVery well.`,
`Though I may have fallen, my Pokémon will continue to fly!`
]).setDefeatMessages([
`My Flying Pokémon and I will forever dance elegantly!`,
`I hope you enjoyed our show.\nOur graceful dance is finished.`,
`Won't you come see our elegant choreography again?`
]),
[TrainerType.TATE]: new TrainerConfig(++t).initForGymLeader([ Species.SOLROCK, Species.NATU, Species.CHIMECHO, Species.GALLADE ], Type.PSYCHIC)
.setEncounterMessages([
`Hehehe…\nWere you surprised to see me without my sister?`,
`I can see what you're thinking…\nYou want to battle!`,
`How can you defeat someone…\nWho knows your every move?`
]).setVictoryMessages([
`It can't be helped…\nI miss Liza…`,
`Your bond with your Pokémon was stronger than mine.`,
`If I were with Liza, we would have won.\nWe can finish each other's thoughts!`
]).setDefeatMessages([
`My Pokémon and I are superior!`,
`If you can't even defeat me, you'll never be able to defeat Liza either.`,
`It's all thanks to my strict training with Liza.\nI can make myself one with Pokémon.`
]),
[TrainerType.LIZA]: new TrainerConfig(++t).initForGymLeader([ Species.LUNATONE, Species.SPOINK, Species.BALTOY, Species.GARDEVOIR ], Type.PSYCHIC)
.setEncounterMessages([
`Fufufu…\nWere you surprised to see me without my brother?`,
`I can determine what you desire…\nYou want to battle, don't you?`,
`How can you defeat someone…\nWho's one with their Pokémon?`
]).setVictoryMessages([
`It can't be helped…\nI miss Tate…`,
`Your bond with your Pokémon…\nIt's stronger than mine.`,
`If I were with Tate, we would have won.\nWe can finish each other's sentences!`
]).setDefeatMessages([
`My Pokémon and I are victorious.`,
`If you can't even defeat me, you'll never be able to defeat Tate either.`,
`It's all thanks to my strict training with Tate.\nI can synchronize myself with my Pokémon.`
]),
[TrainerType.JUAN]: new TrainerConfig(++t).initForGymLeader([ Species.HORSEA, Species.BARBOACH, Species.SPHEAL, Species.RELICANTH ], Type.WATER)
.setEncounterMessages([
`Now's not the time to act coy.\nLet's battle!`,
`Ahahaha, You'll be witness to my artistry with Water Pokémon!`,
`A typhoon approaches!\nWill you be able to test me?`
]).setVictoryMessages([
`You may be a genius who can take on Wallace!`,
`I focused on elegance while you trained.\nIt's only natural that you defeated me.`,
`Ahahaha!\nVery well, You have won this time.`
]).setDefeatMessages([
`My Pokémon and I have sculpted an illusion of Water and come out victorious.`,
`Ahahaha, I have won, and you have lost.`,
`Shall I loan you my outfit? It may help you battle!\nAhahaha, I jest!`
]),
[TrainerType.ROXANNE]: new TrainerConfig(++t).initForGymLeader([ Species.GEODUDE, Species.NOSEPASS ], Type.ROCK),
[TrainerType.BRAWLY]: new TrainerConfig(++t).initForGymLeader([ Species.MACHOP, Species.MAKUHITA ], Type.FIGHTING),
[TrainerType.WATTSON]: new TrainerConfig(++t).initForGymLeader([ Species.MAGNEMITE, Species.VOLTORB, Species.ELECTRIKE ], Type.ELECTRIC),
[TrainerType.FLANNERY]: new TrainerConfig(++t).initForGymLeader([ Species.SLUGMA, Species.TORKOAL, Species.NUMEL ], Type.FIRE),
[TrainerType.NORMAN]: new TrainerConfig(++t).initForGymLeader([ Species.SLAKOTH, Species.SPINDA, Species.CHANSEY, Species.KANGASKHAN ], Type.NORMAL),
[TrainerType.WINONA]: new TrainerConfig(++t).initForGymLeader([ Species.SWABLU, Species.WINGULL, Species.TROPIUS, Species.SKARMORY ], Type.FLYING),
[TrainerType.TATE]: new TrainerConfig(++t).initForGymLeader([ Species.SOLROCK, Species.NATU, Species.CHIMECHO, Species.GALLADE ], Type.PSYCHIC),
[TrainerType.LIZA]: new TrainerConfig(++t).initForGymLeader([ Species.LUNATONE, Species.SPOINK, Species.BALTOY, Species.GARDEVOIR ], Type.PSYCHIC),
[TrainerType.JUAN]: new TrainerConfig(++t).initForGymLeader([ Species.HORSEA, Species.BARBOACH, Species.SPHEAL, Species.RELICANTH ], Type.WATER),
[TrainerType.ROARK]: new TrainerConfig(++t).initForGymLeader([ Species.CRANIDOS, Species.LARVITAR, Species.GEODUDE ], Type.ROCK),
[TrainerType.GARDENIA]: new TrainerConfig(++t).initForGymLeader([ Species.ROSELIA, Species.TANGELA, Species.TURTWIG ], Type.GRASS),
[TrainerType.MAYLENE]: new TrainerConfig(++t).initForGymLeader([ Species.LUCARIO, Species.MEDITITE, Species.CHIMCHAR ], Type.FIGHTING),
@@ -1059,55 +728,24 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerType.NEMONA]: new TrainerConfig(++t).initForChampion([ Species.LYCANROC, Species.KORAIDON, Species.KOMMO_O, Species.PAWMOT, Species.DUSKNOIR ]),
[TrainerType.KIERAN]: new TrainerConfig(++t).initForChampion([ Species.POLITOED, Species.MIRAIDON, Species.HYDRAPPLE, Species.PORYGON_Z, Species.GRIMMSNARL ]),*/
[TrainerType.RIVAL]: new TrainerConfig((t = TrainerType.RIVAL)).setStaticParty().setEncounterBgm(TrainerType.RIVAL).setBattleBgm('battle_rival').setPartyTemplates(trainerPartyTemplates.RIVAL).setEncounterMessages([
`There you are! I've been looking everywhere for you!\nDid you forget to say goodbye to your best friend?
$So you're finally pursuing your dream, huh?\nI knew you'd do it one day…
$Anyway, I'll forgive you for forgetting me, but on one condition. You have to battle me!
$You'd better give it your best! Wouldn't want your adventure to be over before it started, right?`
]).setVictoryMessages([
`You already have three Pokémon?!\nThat's not fair at all!
$Just kidding! I lost fair and square, and now I know you'll do fine out there.
$By the way, the professor wanted me to give you some items. Hopefully they're helpful!
$Do your best like always! I believe in you!`
]).setModifierRewardFuncs(() => modifierTypes.SUPER_EXP_CHARM, () => modifierTypes.EXP_SHARE).setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.CHIKORITA, Species.CYNDAQUIL, Species.TOTODILE, Species.TREECKO, Species.TORCHIC, Species.MUDKIP, Species.TURTWIG, Species.CHIMCHAR, Species.PIPLUP, Species.SNIVY, Species.TEPIG, Species.OSHAWOTT, Species.CHESPIN, Species.FENNEKIN, Species.FROAKIE, Species.ROWLET, Species.LITTEN, Species.POPPLIO, Species.GROOKEY, Species.SCORBUNNY, Species.SOBBLE ]))
[TrainerType.RIVAL]: new TrainerConfig((t = TrainerType.RIVAL)).setStaticParty().setEncounterBgm(TrainerType.RIVAL).setBattleBgm('battle_rival').setPartyTemplates(trainerPartyTemplates.RIVAL)
.setModifierRewardFuncs(() => modifierTypes.SUPER_EXP_CHARM, () => modifierTypes.EXP_SHARE).setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.CHIKORITA, Species.CYNDAQUIL, Species.TOTODILE, Species.TREECKO, Species.TORCHIC, Species.MUDKIP, Species.TURTWIG, Species.CHIMCHAR, Species.PIPLUP, Species.SNIVY, Species.TEPIG, Species.OSHAWOTT, Species.CHESPIN, Species.FENNEKIN, Species.FROAKIE, Species.ROWLET, Species.LITTEN, Species.POPPLIO, Species.GROOKEY, Species.SCORBUNNY, Species.SOBBLE ]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEY, Species.HOOTHOOT, Species.TAILLOW, Species.STARLY, Species.PIDOVE, Species.FLETCHLING, Species.PIKIPEK, Species.ROOKIDEE ])),
[TrainerType.RIVAL_2]: new TrainerConfig(++t).setStaticParty().setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm('battle_rival').setPartyTemplates(trainerPartyTemplates.RIVAL_2).setEncounterMessages([
`Oh, fancy meeting you here. Looks like you're still undefeated. Right on!
$I know what you're thinking, and no, I wasn't following you. I just happened to be in the area.
$I'm happy for you but I just want to let you know that it's OK to lose sometimes.
$We learn from our mistakes, often more than we would if we kept succeeding.
$In any case, I've been training hard for our rematch, so you'd better give it your all!`
]).setVictoryMessages([
`I… wasn't supposed to lose that time…`
]).setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.IVYSAUR, Species.CHARMELEON, Species.WARTORTLE, Species.BAYLEEF, Species.QUILAVA, Species.CROCONAW, Species.GROVYLE, Species.COMBUSKEN, Species.MARSHTOMP, Species.GROTLE, Species.MONFERNO, Species.PRINPLUP, Species.SERVINE, Species.PIGNITE, Species.DEWOTT, Species.QUILLADIN, Species.BRAIXEN, Species.FROGADIER, Species.DARTRIX, Species.TORRACAT, Species.BRIONNE, Species.THWACKEY, Species.RABOOT, Species.DRIZZILE ]))
[TrainerType.RIVAL_2]: new TrainerConfig(++t).setStaticParty().setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm('battle_rival').setPartyTemplates(trainerPartyTemplates.RIVAL_2)
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.IVYSAUR, Species.CHARMELEON, Species.WARTORTLE, Species.BAYLEEF, Species.QUILAVA, Species.CROCONAW, Species.GROVYLE, Species.COMBUSKEN, Species.MARSHTOMP, Species.GROTLE, Species.MONFERNO, Species.PRINPLUP, Species.SERVINE, Species.PIGNITE, Species.DEWOTT, Species.QUILLADIN, Species.BRAIXEN, Species.FROGADIER, Species.DARTRIX, Species.TORRACAT, Species.BRIONNE, Species.THWACKEY, Species.RABOOT, Species.DRIZZILE ]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEOTTO, Species.HOOTHOOT, Species.TAILLOW, Species.STARAVIA, Species.TRANQUILL, Species.FLETCHINDER, Species.TRUMBEAK, Species.CORVISQUIRE ]))
.setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)),
[TrainerType.RIVAL_3]: new TrainerConfig(++t).setStaticParty().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.RIVAL).setBattleBgm('battle_rival').setPartyTemplates(trainerPartyTemplates.RIVAL_3).setEncounterMessages([
`Long time no see! Still haven't lost, huh.\nYou're starting to get on my nerves. Just kidding!
$But really, I think it's about time you came home.\nYour family and friends miss you, you know.
$I know your dream means a lot to you, but the reality is you're going to lose sooner or later.
$And when you do, I'll be there for you like always.\nNow, let me show you how strong I've become!`
]).setVictoryMessages([
`After all that… it wasn't enough…?`
]).setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON ]))
[TrainerType.RIVAL_3]: new TrainerConfig(++t).setStaticParty().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.RIVAL).setBattleBgm('battle_rival').setPartyTemplates(trainerPartyTemplates.RIVAL_3)
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON ]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT ]))
.setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450))
.setSpeciesFilter(species => species.baseTotal >= 540),
[TrainerType.RIVAL_4]: new TrainerConfig(++t).setBoss().setStaticParty().setMoneyMultiplier(1.75).setEncounterBgm(TrainerType.RIVAL).setBattleBgm('battle_rival_2').setPartyTemplates(trainerPartyTemplates.RIVAL_4).setEncounterMessages([
`It's me! You didn't forget about me again did you?
$You made it really far! I'm proud of you.\nBut it looks like it's the end of your journey.
$You've awoken something in me I never knew was there.\nIt seems like all I do now is train.
$I hardly even eat or sleep now, I just train my Pokémon all day, getting stronger every time.
$And now, I've finally reached peak performance.\nI don't think anyone could beat me now.
$And you know what? It's all because of you.\nI don't know whether to thank you or hate you.
$Prepare yourself.`
]).setVictoryMessages([
`What…@d{64} what are you?`
]).setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON ]))
[TrainerType.RIVAL_4]: new TrainerConfig(++t).setBoss().setStaticParty().setMoneyMultiplier(1.75).setEncounterBgm(TrainerType.RIVAL).setBattleBgm('battle_rival_2').setPartyTemplates(trainerPartyTemplates.RIVAL_4)
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON ]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT ]))
.setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450))
.setSpeciesFilter(species => species.baseTotal >= 540),
[TrainerType.RIVAL_5]: new TrainerConfig(++t).setBoss().setStaticParty().setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm('battle_rival_3').setPartyTemplates(trainerPartyTemplates.RIVAL_5).setEncounterMessages([ `…` ]).setVictoryMessages([ '…' ])
[TrainerType.RIVAL_5]: new TrainerConfig(++t).setBoss().setStaticParty().setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm('battle_rival_3').setPartyTemplates(trainerPartyTemplates.RIVAL_5)
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON ]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT ]))
.setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450))
@@ -1126,4 +764,8 @@ export const trainerConfigs: TrainerConfigs = {
p.pokeball = PokeballType.MASTER_BALL;
p.formIndex = 1;
})),
}
};
(function() {
initTrainerTypeDialogue();
})();
+1 -1
View File
@@ -1,4 +1,4 @@
import { Biome } from "./biome";
import { Biome } from "./enums/biome";
import { getPokemonMessage } from "../messages";
import Pokemon from "../pokemon";
import { Type } from "./type";