Add Psychic Terrain priority block effect and terrain messages
parent
47a51c9958
commit
aa1e1a480f
|
@ -1,3 +1,4 @@
|
||||||
|
import Move from "./move";
|
||||||
import { Type } from "./type";
|
import { Type } from "./type";
|
||||||
|
|
||||||
export enum TerrainType {
|
export enum TerrainType {
|
||||||
|
@ -42,6 +43,15 @@ export class Terrain {
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isMoveTerrainCancelled(move: Move): boolean {
|
||||||
|
switch (this.terrainType) {
|
||||||
|
case TerrainType.PSYCHIC:
|
||||||
|
return move.priority > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getTerrainColor(terrainType: TerrainType): [ integer, integer, integer ] {
|
export function getTerrainColor(terrainType: TerrainType): [ integer, integer, integer ] {
|
||||||
|
|
|
@ -194,15 +194,35 @@ export function getWeatherClearMessage(weatherType: WeatherType): string {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getTerrainStartMessage(terrainType: TerrainType): string {
|
export function getTerrainStartMessage(terrainType: TerrainType): string {
|
||||||
return terrainType
|
switch (terrainType) {
|
||||||
? `The terrain became ${Utils.toReadableString(TerrainType[terrainType])}!`
|
case TerrainType.MISTY:
|
||||||
: null;
|
return 'Mist swirled around the battlefield!';
|
||||||
|
case TerrainType.ELECTRIC:
|
||||||
|
return 'An electric current ran across the battlefield!';
|
||||||
|
case TerrainType.GRASSY:
|
||||||
|
return 'Grass grew to cover the battlefield!';
|
||||||
|
case TerrainType.PSYCHIC:
|
||||||
|
return 'The battlefield got weird!';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getTerrainClearMessage(terrainType: TerrainType): string {
|
export function getTerrainClearMessage(terrainType: TerrainType): string {
|
||||||
return terrainType
|
switch (terrainType) {
|
||||||
? `The ${Utils.toReadableString(TerrainType[terrainType])} terrain faded.`
|
case TerrainType.MISTY:
|
||||||
: null;
|
return 'The mist disappeared from the battlefield.';
|
||||||
|
case TerrainType.ELECTRIC:
|
||||||
|
return 'The electricity disappeared from the battlefield.';
|
||||||
|
case TerrainType.GRASSY:
|
||||||
|
return 'The grass disappeared from the battlefield.';
|
||||||
|
case TerrainType.PSYCHIC:
|
||||||
|
return 'The weirdness disappeared from the battlefield!';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getTerrainBlockMessage(pokemon: Pokemon, terrainType: TerrainType): string {
|
||||||
|
if (terrainType === TerrainType.MISTY)
|
||||||
|
return getPokemonMessage(pokemon, ` surrounds itself with a protective mist!`);
|
||||||
|
return getPokemonMessage(pokemon, ` is protected by the ${Utils.toReadableString(TerrainType[terrainType])} Terrain!`);
|
||||||
}
|
}
|
||||||
|
|
||||||
interface WeatherPoolEntry {
|
interface WeatherPoolEntry {
|
||||||
|
|
|
@ -298,6 +298,10 @@ export class Arena {
|
||||||
return this.weather && !this.weather.isEffectSuppressed(this.scene) && this.weather.isMoveWeatherCancelled(move);
|
return this.weather && !this.weather.isEffectSuppressed(this.scene) && this.weather.isMoveWeatherCancelled(move);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isMoveTerrainCancelled(move: Move) {
|
||||||
|
return this.terrain && this.terrain.isMoveTerrainCancelled(move);
|
||||||
|
}
|
||||||
|
|
||||||
getAttackTypeMultiplier(attackType: Type, grounded: boolean): number {
|
getAttackTypeMultiplier(attackType: Type, grounded: boolean): number {
|
||||||
let weatherMultiplier = 1;
|
let weatherMultiplier = 1;
|
||||||
if (this.weather && !this.weather.isEffectSuppressed(this.scene))
|
if (this.weather && !this.weather.isEffectSuppressed(this.scene))
|
||||||
|
|
|
@ -26,7 +26,7 @@ import { BattlerTagType } from "./data/enums/battler-tag-type";
|
||||||
import { getPokemonMessage } from "./messages";
|
import { getPokemonMessage } from "./messages";
|
||||||
import { Starter } from "./ui/starter-select-ui-handler";
|
import { Starter } from "./ui/starter-select-ui-handler";
|
||||||
import { Gender } from "./data/gender";
|
import { Gender } from "./data/gender";
|
||||||
import { Weather, WeatherType, getRandomWeatherType, getWeatherDamageMessage, getWeatherLapseMessage } from "./data/weather";
|
import { Weather, WeatherType, getRandomWeatherType, getTerrainBlockMessage, getWeatherDamageMessage, getWeatherLapseMessage } from "./data/weather";
|
||||||
import { TempBattleStat } from "./data/temp-battle-stat";
|
import { TempBattleStat } from "./data/temp-battle-stat";
|
||||||
import { ArenaTagSide, ArenaTrapTag, MistTag, TrickRoomTag } from "./data/arena-tag";
|
import { ArenaTagSide, ArenaTrapTag, MistTag, TrickRoomTag } from "./data/arena-tag";
|
||||||
import { ArenaTagType } from "./data/enums/arena-tag-type";
|
import { ArenaTagType } from "./data/enums/arena-tag-type";
|
||||||
|
@ -2040,13 +2040,18 @@ export class MovePhase extends BattlePhase {
|
||||||
|
|
||||||
// Assume conditions affecting targets only apply to moves with a single target
|
// Assume conditions affecting targets only apply to moves with a single target
|
||||||
let success = this.move.getMove().applyConditions(this.pokemon, targets[0], this.move.getMove());
|
let success = this.move.getMove().applyConditions(this.pokemon, targets[0], this.move.getMove());
|
||||||
|
let failedText = null;
|
||||||
if (success && this.scene.arena.isMoveWeatherCancelled(this.move.getMove()))
|
if (success && this.scene.arena.isMoveWeatherCancelled(this.move.getMove()))
|
||||||
success = false;
|
success = false;
|
||||||
|
else if (success && this.scene.arena.isMoveTerrainCancelled(this.move.getMove())) {
|
||||||
|
success = false;
|
||||||
|
failedText = getTerrainBlockMessage(targets[0], this.scene.arena.terrain.terrainType);
|
||||||
|
}
|
||||||
if (success)
|
if (success)
|
||||||
this.scene.unshiftPhase(this.getEffectPhase());
|
this.scene.unshiftPhase(this.getEffectPhase());
|
||||||
else {
|
else {
|
||||||
this.pokemon.pushMoveHistory({ move: this.move.moveId, targets: this.targets, result: MoveResult.FAIL, virtual: this.move.virtual });
|
this.pokemon.pushMoveHistory({ move: this.move.moveId, targets: this.targets, result: MoveResult.FAIL, virtual: this.move.virtual });
|
||||||
this.showFailedText();
|
this.showFailedText(failedText);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.end();
|
this.end();
|
||||||
|
@ -2109,8 +2114,8 @@ export class MovePhase extends BattlePhase {
|
||||||
this.scene.queueMessage(getPokemonMessage(this.pokemon, ` used\n${this.move.getName()}!`), 500);
|
this.scene.queueMessage(getPokemonMessage(this.pokemon, ` used\n${this.move.getName()}!`), 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
showFailedText(): void {
|
showFailedText(failedText: string = null): void {
|
||||||
this.scene.queueMessage('But it failed!');
|
this.scene.queueMessage(failedText || 'But it failed!');
|
||||||
}
|
}
|
||||||
|
|
||||||
end() {
|
end() {
|
||||||
|
|
Loading…
Reference in New Issue