Add Annihilape with Rage Fist move
After Width: | Height: | Size: 6.9 KiB |
|
@ -0,0 +1,41 @@
|
||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "979.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 72,
|
||||||
|
"h": 75
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "0001.png",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 74,
|
||||||
|
"h": 77
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 1,
|
||||||
|
"w": 72,
|
||||||
|
"h": 75
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 72,
|
||||||
|
"h": 75
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:91e878fd2a0bca81b918e97740b65869:a640148a929eeb1aa680eed467e4eb62:351422d30d3be13e0d9d234ec7c8c043$"
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 1.2 KiB |
|
@ -0,0 +1,41 @@
|
||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "979.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 72,
|
||||||
|
"h": 75
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "0001.png",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 74,
|
||||||
|
"h": 77
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 1,
|
||||||
|
"w": 72,
|
||||||
|
"h": 75
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 72,
|
||||||
|
"h": 75
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:91e878fd2a0bca81b918e97740b65869:a640148a929eeb1aa680eed467e4eb62:351422d30d3be13e0d9d234ec7c8c043$"
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 6.9 KiB |
|
@ -4,8 +4,8 @@
|
||||||
"image": "pokemon_icons_6.png",
|
"image": "pokemon_icons_6.png",
|
||||||
"format": "RGBA8888",
|
"format": "RGBA8888",
|
||||||
"size": {
|
"size": {
|
||||||
"w": 99,
|
"w": 192,
|
||||||
"h": 98
|
"h": 58
|
||||||
},
|
},
|
||||||
"scale": 1,
|
"scale": 1,
|
||||||
"frames": [
|
"frames": [
|
||||||
|
@ -44,32 +44,11 @@
|
||||||
"w": 55,
|
"w": 55,
|
||||||
"h": 42
|
"h": 42
|
||||||
},
|
},
|
||||||
"frame": {
|
|
||||||
"x": 0,
|
|
||||||
"y": 56,
|
|
||||||
"w": 55,
|
|
||||||
"h": 42
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "717",
|
|
||||||
"rotated": false,
|
|
||||||
"trimmed": true,
|
|
||||||
"sourceSize": {
|
|
||||||
"w": 56,
|
|
||||||
"h": 42
|
|
||||||
},
|
|
||||||
"spriteSourceSize": {
|
|
||||||
"x": 13,
|
|
||||||
"y": 14,
|
|
||||||
"w": 32,
|
|
||||||
"h": 28
|
|
||||||
},
|
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 67,
|
"x": 67,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"w": 32,
|
"w": 55,
|
||||||
"h": 28
|
"h": 42
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -87,8 +66,8 @@
|
||||||
"h": 31
|
"h": 31
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 67,
|
"x": 122,
|
||||||
"y": 28,
|
"y": 0,
|
||||||
"w": 31,
|
"w": 31,
|
||||||
"h": 31
|
"h": 31
|
||||||
}
|
}
|
||||||
|
@ -108,11 +87,53 @@
|
||||||
"h": 27
|
"h": 27
|
||||||
},
|
},
|
||||||
"frame": {
|
"frame": {
|
||||||
"x": 55,
|
"x": 122,
|
||||||
"y": 59,
|
"y": 31,
|
||||||
"w": 38,
|
"w": 38,
|
||||||
"h": 27
|
"h": 27
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "979",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 40,
|
||||||
|
"h": 30
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 3,
|
||||||
|
"y": 0,
|
||||||
|
"w": 32,
|
||||||
|
"h": 30
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 160,
|
||||||
|
"y": 0,
|
||||||
|
"w": 32,
|
||||||
|
"h": 30
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "717",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 56,
|
||||||
|
"h": 42
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 13,
|
||||||
|
"y": 14,
|
||||||
|
"w": 32,
|
||||||
|
"h": 28
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 160,
|
||||||
|
"y": 30,
|
||||||
|
"w": 32,
|
||||||
|
"h": 28
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -120,6 +141,6 @@
|
||||||
"meta": {
|
"meta": {
|
||||||
"app": "https://www.codeandweb.com/texturepacker",
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
"version": "3.0",
|
"version": "3.0",
|
||||||
"smartupdate": "$TexturePacker:SmartUpdate:da1c77f10b290cc824b731ed2920ec48:84485c60eaa201508ddb6ef0365267bf:96737d38f2029744a75c1ee001bc1929$"
|
"smartupdate": "$TexturePacker:SmartUpdate:56c494a24236874eac973adb00bb5fd9:06e134328126c54e98e3c55aa35c82b0:6a6cc46d6db7bee1b3e18054101832f5$"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 9.6 KiB |
|
@ -34,6 +34,7 @@ import { Species } from "./data/species";
|
||||||
import { HealAchv, LevelAchv, MoneyAchv, achvs } from "./system/achv";
|
import { HealAchv, LevelAchv, MoneyAchv, achvs } from "./system/achv";
|
||||||
import { DexEntry } from "./system/game-data";
|
import { DexEntry } from "./system/game-data";
|
||||||
import { pokemonPrevolutions } from "./data/pokemon-evolutions";
|
import { pokemonPrevolutions } from "./data/pokemon-evolutions";
|
||||||
|
import { getPokemonSpecies } from "./data/pokemon-species";
|
||||||
|
|
||||||
export class CheckLoadPhase extends BattlePhase {
|
export class CheckLoadPhase extends BattlePhase {
|
||||||
private loaded: boolean;
|
private loaded: boolean;
|
||||||
|
@ -312,10 +313,15 @@ export class EncounterPhase extends BattlePhase {
|
||||||
doEncounter() {
|
doEncounter() {
|
||||||
this.scene.playBgm(undefined, true);
|
this.scene.playBgm(undefined, true);
|
||||||
|
|
||||||
if (startingWave > 10) {
|
/*if (startingWave > 10) {
|
||||||
for (let m = 0; m < Math.min(Math.floor(startingWave / 10), 99); m++)
|
for (let m = 0; m < Math.min(Math.floor(startingWave / 10), 99); m++)
|
||||||
this.scene.addModifier(getPlayerModifierTypeOptionsForWave((m + 1) * 10, 1, this.scene.getParty())[0].type.newModifier(), true);
|
this.scene.addModifier(getPlayerModifierTypeOptionsForWave((m + 1) * 10, 1, this.scene.getParty())[0].type.newModifier(), true);
|
||||||
this.scene.updateModifiers(true);
|
this.scene.updateModifiers(true);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
for (let pokemon of this.scene.getParty()) {
|
||||||
|
if (pokemon)
|
||||||
|
pokemon.resetBattleData();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena.biomeType), false);
|
this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena.biomeType), false);
|
||||||
|
@ -441,6 +447,11 @@ export class NewBiomeEncounterPhase extends NextEncounterPhase {
|
||||||
}
|
}
|
||||||
|
|
||||||
doEncounter(): void {
|
doEncounter(): void {
|
||||||
|
for (let pokemon of this.scene.getParty()) {
|
||||||
|
if (pokemon)
|
||||||
|
pokemon.resetBattleData();
|
||||||
|
}
|
||||||
|
|
||||||
this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena.biomeType), false);
|
this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena.biomeType), false);
|
||||||
|
|
||||||
const enemyField = this.scene.getEnemyField();
|
const enemyField = this.scene.getEnemyField();
|
||||||
|
|
|
@ -682,6 +682,10 @@ export default class BattleScene extends Phaser.Scene {
|
||||||
if (showTrainer) {
|
if (showTrainer) {
|
||||||
playerField.forEach((_, p) => this.unshiftPhase(new ReturnPhase(this, p)));
|
playerField.forEach((_, p) => this.unshiftPhase(new ReturnPhase(this, p)));
|
||||||
this.unshiftPhase(new ShowTrainerPhase(this));
|
this.unshiftPhase(new ShowTrainerPhase(this));
|
||||||
|
for (let pokemon of this.getParty()) {
|
||||||
|
if (pokemon)
|
||||||
|
pokemon.resetBattleData();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (this.gameMode === GameMode.CLASSIC && !isNewBiome)
|
if (this.gameMode === GameMode.CLASSIC && !isNewBiome)
|
||||||
this.pushPhase(new NextEncounterPhase(this));
|
this.pushPhase(new NextEncounterPhase(this));
|
||||||
|
|
|
@ -207,6 +207,7 @@ export class ConfusedTag extends BattlerTag {
|
||||||
pokemon.scene.queueMessage('It hurt itself in its\nconfusion!');
|
pokemon.scene.queueMessage('It hurt itself in its\nconfusion!');
|
||||||
pokemon.scene.unshiftPhase(new DamagePhase(pokemon.scene, pokemon.getBattlerIndex()));
|
pokemon.scene.unshiftPhase(new DamagePhase(pokemon.scene, pokemon.getBattlerIndex()));
|
||||||
pokemon.damage(damage);
|
pokemon.damage(damage);
|
||||||
|
pokemon.battleData.hitCount++;
|
||||||
(pokemon.scene.getCurrentPhase() as MovePhase).cancel();
|
(pokemon.scene.getCurrentPhase() as MovePhase).cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -820,7 +820,8 @@ export enum Moves {
|
||||||
PHANTOM_FORCE,
|
PHANTOM_FORCE,
|
||||||
GEOMANCY,
|
GEOMANCY,
|
||||||
OBLIVION_WING,
|
OBLIVION_WING,
|
||||||
DYNAMAX_CANNON
|
DYNAMAX_CANNON,
|
||||||
|
RAGE_FIST
|
||||||
}
|
}
|
||||||
|
|
||||||
export abstract class MoveAttr {
|
export abstract class MoveAttr {
|
||||||
|
@ -1618,7 +1619,7 @@ export class SolarBeamPowerAttr extends VariablePowerAttr {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class WinCountPowerMoveAttr extends VariablePowerAttr {
|
export class WinCountPowerAttr extends VariablePowerAttr {
|
||||||
private invert: boolean;
|
private invert: boolean;
|
||||||
|
|
||||||
constructor(invert?: boolean) {
|
constructor(invert?: boolean) {
|
||||||
|
@ -1639,6 +1640,14 @@ export class WinCountPowerMoveAttr extends VariablePowerAttr {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class HitCountPowerAttr extends VariablePowerAttr {
|
||||||
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||||
|
(args[0] as Utils.NumberHolder).value += Math.min(user.battleData.hitCount, 6) * 50;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class VariableAccuracyAttr extends MoveAttr {
|
export class VariableAccuracyAttr extends MoveAttr {
|
||||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||||
//const accuracy = args[0] as Utils.NumberHolder;
|
//const accuracy = args[0] as Utils.NumberHolder;
|
||||||
|
@ -2901,11 +2910,11 @@ export function initMoves() {
|
||||||
.target(MoveTarget.USER_AND_ALLIES)
|
.target(MoveTarget.USER_AND_ALLIES)
|
||||||
.soundBased(),
|
.soundBased(),
|
||||||
new AttackMove(Moves.RETURN, "Return", Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 20, -1, "Power increases with higher Friendship.", -1, 0, 2)
|
new AttackMove(Moves.RETURN, "Return", Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 20, -1, "Power increases with higher Friendship.", -1, 0, 2)
|
||||||
.attr(WinCountPowerMoveAttr),
|
.attr(WinCountPowerAttr),
|
||||||
new AttackMove(Moves.PRESENT, "Present (N)", Type.NORMAL, MoveCategory.PHYSICAL, -1, 90, 15, -1, "Either deals damage or heals.", -1, 0, 2)
|
new AttackMove(Moves.PRESENT, "Present (N)", Type.NORMAL, MoveCategory.PHYSICAL, -1, 90, 15, -1, "Either deals damage or heals.", -1, 0, 2)
|
||||||
.makesContact(false),
|
.makesContact(false),
|
||||||
new AttackMove(Moves.FRUSTRATION, "Frustration", Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 20, -1, "Power decreases with higher Friendship.", -1, 0, 2)
|
new AttackMove(Moves.FRUSTRATION, "Frustration", Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 20, -1, "Power decreases with higher Friendship.", -1, 0, 2)
|
||||||
.attr(WinCountPowerMoveAttr, true),
|
.attr(WinCountPowerAttr, true),
|
||||||
new SelfStatusMove(Moves.SAFEGUARD, "Safeguard (N)", Type.NORMAL, -1, 25, -1, "The user's party is protected from status conditions.", -1, 0, 2)
|
new SelfStatusMove(Moves.SAFEGUARD, "Safeguard (N)", Type.NORMAL, -1, 25, -1, "The user's party is protected from status conditions.", -1, 0, 2)
|
||||||
.target(MoveTarget.USER_SIDE),
|
.target(MoveTarget.USER_SIDE),
|
||||||
new StatusMove(Moves.PAIN_SPLIT, "Pain Split", Type.NORMAL, -1, 20, -1, "The user's and opponent's HP becomes the average of both.", -1, 0, 2)
|
new StatusMove(Moves.PAIN_SPLIT, "Pain Split", Type.NORMAL, -1, 20, -1, "The user's and opponent's HP becomes the average of both.", -1, 0, 2)
|
||||||
|
@ -3634,6 +3643,8 @@ export function initMoves() {
|
||||||
.target(MoveTarget.OTHER),
|
.target(MoveTarget.OTHER),
|
||||||
new AttackMove(Moves.DYNAMAX_CANNON, "Dynamax Cannon", Type.DRAGON, MoveCategory.SPECIAL, 100, 100, 5, -1, "Power is doubled if the target is over level 200.", -1, 0, 8)
|
new AttackMove(Moves.DYNAMAX_CANNON, "Dynamax Cannon", Type.DRAGON, MoveCategory.SPECIAL, 100, 100, 5, -1, "Power is doubled if the target is over level 200.", -1, 0, 8)
|
||||||
.attr(MovePowerMultiplierAttr, (user: Pokemon, target: Pokemon, move: Move) => target.level > 200 ? 2 : 1)
|
.attr(MovePowerMultiplierAttr, (user: Pokemon, target: Pokemon, move: Move) => target.level > 200 ? 2 : 1)
|
||||||
.ignoresVirtual()
|
.ignoresVirtual(),
|
||||||
|
new AttackMove(Moves.RAGE_FIST, "Rage Fist", Type.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, "The more times the user has been hit by attacks, the greater the move's power.", -1, 0, 9)
|
||||||
|
.attr(HitCountPowerAttr)
|
||||||
);
|
);
|
||||||
}
|
}
|
|
@ -951,6 +951,9 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
||||||
[Species.SHELMET]: [
|
[Species.SHELMET]: [
|
||||||
new SpeciesEvolution(Species.ACCELGOR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition((p: Pokemon) => !!p.scene.getParty().find(p => p.species.speciesId === Species.KARRABLAST)), SpeciesWildEvolutionDelay.LONG)
|
new SpeciesEvolution(Species.ACCELGOR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition((p: Pokemon) => !!p.scene.getParty().find(p => p.species.speciesId === Species.KARRABLAST)), SpeciesWildEvolutionDelay.LONG)
|
||||||
],
|
],
|
||||||
|
[Species.PRIMEAPE]: [
|
||||||
|
new SpeciesEvolution(Species.ANNIHILAPE, 1, null, new SpeciesEvolutionCondition((p: Pokemon) => p.moveset.filter(m => m.moveId === Moves.RAGE_FIST).length > 0), SpeciesWildEvolutionDelay.VERY_LONG)
|
||||||
|
],
|
||||||
[Species.PICHU]: [
|
[Species.PICHU]: [
|
||||||
new SpeciesEvolution(Species.PIKACHU, 1, null, new SpeciesEvolutionCondition((p: Pokemon) => p.winCount >= 10), SpeciesWildEvolutionDelay.SHORT)
|
new SpeciesEvolution(Species.PIKACHU, 1, null, new SpeciesEvolutionCondition((p: Pokemon) => p.winCount >= 10), SpeciesWildEvolutionDelay.SHORT)
|
||||||
],
|
],
|
||||||
|
|
|
@ -886,10 +886,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
||||||
[ 9, Moves.FURY_SWIPES ],
|
[ 9, Moves.FURY_SWIPES ],
|
||||||
[ 13, Moves.KARATE_CHOP ],
|
[ 13, Moves.KARATE_CHOP ],
|
||||||
[ 17, Moves.SEISMIC_TOSS ],
|
[ 17, Moves.SEISMIC_TOSS ],
|
||||||
|
[ 19, Moves.SWAGGER ],
|
||||||
[ 21, Moves.SCREECH ],
|
[ 21, Moves.SCREECH ],
|
||||||
[ 25, Moves.ASSURANCE ],
|
[ 25, Moves.ASSURANCE ],
|
||||||
[ 28, Moves.RAGE ],
|
[ 28, Moves.RAGE ],
|
||||||
[ 35, Moves.SWAGGER ],
|
[ 35, Moves.RAGE_FIST ],
|
||||||
[ 41, Moves.CROSS_CHOP ],
|
[ 41, Moves.CROSS_CHOP ],
|
||||||
[ 47, Moves.THRASH ],
|
[ 47, Moves.THRASH ],
|
||||||
[ 53, Moves.PUNISHMENT ],
|
[ 53, Moves.PUNISHMENT ],
|
||||||
|
@ -10974,7 +10975,28 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
|
||||||
[ 72, Moves.RECOVER ],
|
[ 72, Moves.RECOVER ],
|
||||||
[ 80, Moves.HYPER_BEAM ],
|
[ 80, Moves.HYPER_BEAM ],
|
||||||
[ 88, Moves.OUTRAGE ]
|
[ 88, Moves.OUTRAGE ]
|
||||||
]
|
],
|
||||||
|
[Species.ANNIHILAPE]: [
|
||||||
|
[ 1, Moves.LEER ],
|
||||||
|
[ 1, Moves.FOCUS_ENERGY ],
|
||||||
|
[ 1, Moves.LOW_KICK ],
|
||||||
|
[ 1, Moves.SCRATCH ],
|
||||||
|
[ 1, Moves.FLING ],
|
||||||
|
[ 9, Moves.FURY_SWIPES ],
|
||||||
|
[ 13, Moves.KARATE_CHOP ],
|
||||||
|
[ 17, Moves.SEISMIC_TOSS ],
|
||||||
|
[ 19, Moves.SWAGGER ],
|
||||||
|
[ 21, Moves.SCREECH ],
|
||||||
|
[ 25, Moves.ASSURANCE ],
|
||||||
|
[ 28, Moves.RAGE ],
|
||||||
|
[ 35, Moves.RAGE_FIST ],
|
||||||
|
[ 41, Moves.CROSS_CHOP ],
|
||||||
|
[ 47, Moves.THRASH ],
|
||||||
|
[ 53, Moves.PUNISHMENT ],
|
||||||
|
[ 59, Moves.CLOSE_COMBAT ],
|
||||||
|
[ 63, Moves.FINAL_GAMBIT ],
|
||||||
|
[ 68, Moves.OUTRAGE ]
|
||||||
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
|
export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { Abilities } from './ability';
|
import { Abilities, Ability } from './ability';
|
||||||
import BattleScene, { AnySound } from '../battle-scene';
|
import BattleScene, { AnySound } from '../battle-scene';
|
||||||
import { GrowthRate } from './exp';
|
import { GrowthRate } from './exp';
|
||||||
import { SpeciesWildEvolutionDelay, pokemonEvolutions, pokemonPrevolutions } from './pokemon-evolutions';
|
import { SpeciesWildEvolutionDelay, pokemonEvolutions, pokemonPrevolutions } from './pokemon-evolutions';
|
||||||
|
@ -82,7 +82,7 @@ export abstract class PokemonSpeciesForm {
|
||||||
}
|
}
|
||||||
|
|
||||||
isObtainable() {
|
isObtainable() {
|
||||||
return this.generation <= 5 && this.getFormSpriteKey(this.formIndex) !== 'mega';
|
return (this.generation <= 5 || pokemonPrevolutions.hasOwnProperty(this.speciesId)) && this.getFormSpriteKey(this.formIndex) !== 'mega';
|
||||||
}
|
}
|
||||||
|
|
||||||
getSpriteAtlasPath(female: boolean, formIndex?: integer, shiny?: boolean): string {
|
getSpriteAtlasPath(female: boolean, formIndex?: integer, shiny?: boolean): string {
|
||||||
|
@ -1186,9 +1186,10 @@ export function initSpecies() {
|
||||||
),
|
),
|
||||||
new PokemonSpecies(Species.XERNEAS, "Xerneas", 6, false, true, false, "Life Pokémon", Type.FAIRY, null, 3, 215, Abilities.FAIRY_AURA, Abilities.NONE, Abilities.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 306, GrowthRate.SLOW, "Undiscovered", null, null, 120, false),
|
new PokemonSpecies(Species.XERNEAS, "Xerneas", 6, false, true, false, "Life Pokémon", Type.FAIRY, null, 3, 215, Abilities.FAIRY_AURA, Abilities.NONE, Abilities.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 306, GrowthRate.SLOW, "Undiscovered", null, null, 120, false),
|
||||||
new PokemonSpecies(Species.YVELTAL, "Yveltal", 6, false, true, false, "Destruction Pokémon", Type.DARK, Type.FLYING, 5.8, 203, Abilities.DARK_AURA, Abilities.NONE, Abilities.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 306, GrowthRate.SLOW, "Undiscovered", null, null, 120, false),
|
new PokemonSpecies(Species.YVELTAL, "Yveltal", 6, false, true, false, "Destruction Pokémon", Type.DARK, Type.FLYING, 5.8, 203, Abilities.DARK_AURA, Abilities.NONE, Abilities.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 306, GrowthRate.SLOW, "Undiscovered", null, null, 120, false),
|
||||||
new PokemonSpecies(Species.ETERNATUS, "Eternatus", 8, false, true, false, "Gigantic Pokemon", Type.POISON, Type.DRAGON, 20, 950, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 690, 140, 85, 95, 145, 95, 130, 255, 0, 345, GrowthRate.SLOW, "Undiscovered", null, null, 120, false, false,
|
new PokemonSpecies(Species.ETERNATUS, "Eternatus", 8, false, true, false, "Gigantic Pokémon", Type.POISON, Type.DRAGON, 20, 950, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 690, 140, 85, 95, 145, 95, 130, 255, 0, 345, GrowthRate.SLOW, "Undiscovered", null, null, 120, false, false,
|
||||||
new PokemonForm("Normal", "", Type.POISON, Type.DRAGON, 20, 950, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 690, 140, 85, 95, 145, 95, 130, 255, 0, 345, GrowthRate.SLOW, "Undiscovered", null, null, 120, false),
|
new PokemonForm("Normal", "", Type.POISON, Type.DRAGON, 20, 950, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 690, 140, 85, 95, 145, 95, 130, 255, 0, 345, GrowthRate.SLOW, "Undiscovered", null, null, 120, false),
|
||||||
new PokemonForm("Eternamax", "eternamax", Type.POISON, Type.DRAGON, 100, 950, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 1125, 255, 115, 250, 125, 250, 130, 255, 0, 345, GrowthRate.SLOW, "Undiscovered", null, null, 120, false))
|
new PokemonForm("Eternamax", "eternamax", Type.POISON, Type.DRAGON, 100, 950, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 1125, 255, 115, 250, 125, 250, 130, 255, 0, 345, GrowthRate.SLOW, "Undiscovered", null, null, 120, false)),
|
||||||
|
new PokemonSpecies(Species.ANNIHILAPE, "Annihilape", 9, false, false, false, "Rage Monkey Pokémon", Type.FIGHTING, Type.GHOST, 1.2, 56, Abilities.VITAL_SPIRIT, Abilities.INNER_FOCUS, Abilities.DEFIANT, 535, 110, 115, 80, 50, 90, 90, 45, 50, 268, GrowthRate.MEDIUM_FAST, "Field", null, 50, 20, false)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -650,5 +650,6 @@ export enum Species {
|
||||||
GENESECT,
|
GENESECT,
|
||||||
XERNEAS = 716,
|
XERNEAS = 716,
|
||||||
YVELTAL,
|
YVELTAL,
|
||||||
ETERNATUS = 890
|
ETERNATUS = 890,
|
||||||
|
ANNIHILAPE = 979
|
||||||
};
|
};
|
|
@ -381,7 +381,7 @@ export abstract class PokemonHeldItemModifier extends PersistentModifier {
|
||||||
const isIconShown = pokemon instanceof PlayerPokemon || scene.currentBattle.seenEnemyPartyMemberIds.has(pokemon.id);
|
const isIconShown = pokemon instanceof PlayerPokemon || scene.currentBattle.seenEnemyPartyMemberIds.has(pokemon.id);
|
||||||
const iconAtlasKey = isIconShown ? pokemon.getIconAtlasKey() : 'pokemon_icons_0';
|
const iconAtlasKey = isIconShown ? pokemon.getIconAtlasKey() : 'pokemon_icons_0';
|
||||||
const pokemonIcon = scene.add.sprite(0, 8, iconAtlasKey);
|
const pokemonIcon = scene.add.sprite(0, 8, iconAtlasKey);
|
||||||
if (pokemon.getSpeciesForm().isObtainable()) {
|
if (pokemon.getSpeciesForm().generation <= 5) {
|
||||||
const iconKey = isIconShown ? pokemon.getIconKey() : 'pkmn_icon__000';
|
const iconKey = isIconShown ? pokemon.getIconKey() : 'pkmn_icon__000';
|
||||||
pokemonIcon.play(iconKey).stop();
|
pokemonIcon.play(iconKey).stop();
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -74,6 +74,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||||
public fusionGender: Gender;
|
public fusionGender: Gender;
|
||||||
|
|
||||||
public summonData: PokemonSummonData;
|
public summonData: PokemonSummonData;
|
||||||
|
public battleData: PokemonBattleData;
|
||||||
public battleSummonData: PokemonBattleSummonData;
|
public battleSummonData: PokemonBattleSummonData;
|
||||||
public turnData: PokemonTurnData;
|
public turnData: PokemonTurnData;
|
||||||
|
|
||||||
|
@ -921,6 +922,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||||
if (source.isPlayer())
|
if (source.isPlayer())
|
||||||
this.scene.validateAchvs(DamageAchv, damage);
|
this.scene.validateAchvs(DamageAchv, damage);
|
||||||
source.turnData.damageDealt += damage.value;
|
source.turnData.damageDealt += damage.value;
|
||||||
|
this.battleData.hitCount++;
|
||||||
this.turnData.attacksReceived.unshift({ move: move.id, result: result as DamageResult, damage: damage.value, critical: isCritical, sourceId: source.id });
|
this.turnData.attacksReceived.unshift({ move: move.id, result: result as DamageResult, damage: damage.value, critical: isCritical, sourceId: source.id });
|
||||||
if (source.isPlayer() && !this.isPlayer())
|
if (source.isPlayer() && !this.isPlayer())
|
||||||
this.scene.applyModifiers(DamageMoneyRewardModifier, true, source, damage)
|
this.scene.applyModifiers(DamageMoneyRewardModifier, true, source, damage)
|
||||||
|
@ -1302,9 +1304,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||||
this.updateFusionPalette();
|
this.updateFusionPalette();
|
||||||
}
|
}
|
||||||
this.summonData = new PokemonSummonData();
|
this.summonData = new PokemonSummonData();
|
||||||
|
if (!this.battleData)
|
||||||
|
this.resetBattleData();
|
||||||
this.resetBattleSummonData();
|
this.resetBattleSummonData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resetBattleData(): void {
|
||||||
|
this.battleData = new PokemonBattleData();
|
||||||
|
}
|
||||||
|
|
||||||
resetBattleSummonData(): void {
|
resetBattleSummonData(): void {
|
||||||
this.battleSummonData = new PokemonBattleSummonData();
|
this.battleSummonData = new PokemonBattleSummonData();
|
||||||
if (this.getTag(BattlerTagType.SEEDED))
|
if (this.getTag(BattlerTagType.SEEDED))
|
||||||
|
@ -1983,6 +1991,10 @@ export class PokemonSummonData {
|
||||||
public types: Type[];
|
public types: Type[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class PokemonBattleData {
|
||||||
|
public hitCount: integer = 0;
|
||||||
|
}
|
||||||
|
|
||||||
export class PokemonBattleSummonData {
|
export class PokemonBattleSummonData {
|
||||||
public turnCount: integer = 1;
|
public turnCount: integer = 1;
|
||||||
public moveHistory: TurnMove[] = [];
|
public moveHistory: TurnMove[] = [];
|
||||||
|
|
|
@ -740,7 +740,12 @@ class PartySlot extends Phaser.GameObjects.Container {
|
||||||
this.add(slotPb);
|
this.add(slotPb);
|
||||||
|
|
||||||
const pokemonIcon = this.scene.add.sprite(slotPb.x, slotPb.y, this.pokemon.getIconAtlasKey(true));
|
const pokemonIcon = this.scene.add.sprite(slotPb.x, slotPb.y, this.pokemon.getIconAtlasKey(true));
|
||||||
|
if (this.pokemon.getSpeciesForm().generation <= 5)
|
||||||
pokemonIcon.play(this.pokemon.getIconKey(true));
|
pokemonIcon.play(this.pokemon.getIconKey(true));
|
||||||
|
else {
|
||||||
|
pokemonIcon.setFrame(this.pokemon.getIconId());
|
||||||
|
pokemonIcon.setScale(0.75);
|
||||||
|
}
|
||||||
|
|
||||||
this.add(pokemonIcon);
|
this.add(pokemonIcon);
|
||||||
|
|
||||||
|
|