mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-16 21:32:18 +02:00
Begin implementing torment
This commit is contained in:
parent
56acd16456
commit
61c963cce6
@ -3021,6 +3021,22 @@ export class DisableMoveAttr extends MoveEffectAttr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class TormentAttr extends MoveEffectAttr {
|
||||||
|
constructor() {
|
||||||
|
super(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]) {
|
||||||
|
const ret = this.canApply(user, target, move, args);
|
||||||
|
|
||||||
|
if (ret) {
|
||||||
|
target.summonData.justTormented = true;
|
||||||
|
user.scene.queueMessage(getPokemonMessage(target, ' was subjected to torment!'));
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class FrenzyAttr extends MoveEffectAttr {
|
export class FrenzyAttr extends MoveEffectAttr {
|
||||||
constructor() {
|
constructor() {
|
||||||
super(true, MoveEffectTrigger.HIT);
|
super(true, MoveEffectTrigger.HIT);
|
||||||
@ -5141,7 +5157,9 @@ export function initMoves() {
|
|||||||
.attr(WeatherChangeAttr, WeatherType.HAIL)
|
.attr(WeatherChangeAttr, WeatherType.HAIL)
|
||||||
.target(MoveTarget.BOTH_SIDES),
|
.target(MoveTarget.BOTH_SIDES),
|
||||||
new StatusMove(Moves.TORMENT, Type.DARK, 100, 15, -1, 0, 3)
|
new StatusMove(Moves.TORMENT, Type.DARK, 100, 15, -1, 0, 3)
|
||||||
.unimplemented(),
|
.attr(TormentAttr)
|
||||||
|
.condition((user, target, move) => (!target.summonData.justTormented && !target.summonData.tormented))
|
||||||
|
.partial(),
|
||||||
new StatusMove(Moves.FLATTER, Type.DARK, 100, 15, -1, 0, 3)
|
new StatusMove(Moves.FLATTER, Type.DARK, 100, 15, -1, 0, 3)
|
||||||
.attr(StatChangeAttr, BattleStat.SPATK, 1)
|
.attr(StatChangeAttr, BattleStat.SPATK, 1)
|
||||||
.attr(ConfuseAttr),
|
.attr(ConfuseAttr),
|
||||||
|
@ -3321,6 +3321,8 @@ export class PokemonSummonData {
|
|||||||
public disabledTurns: integer = 0;
|
public disabledTurns: integer = 0;
|
||||||
public tags: BattlerTag[] = [];
|
public tags: BattlerTag[] = [];
|
||||||
public abilitySuppressed: boolean = false;
|
public abilitySuppressed: boolean = false;
|
||||||
|
public justTormented: boolean = false;
|
||||||
|
public tormented: boolean = false;
|
||||||
|
|
||||||
public speciesForm: PokemonSpeciesForm;
|
public speciesForm: PokemonSpeciesForm;
|
||||||
public fusionSpeciesForm: PokemonSpeciesForm;
|
public fusionSpeciesForm: PokemonSpeciesForm;
|
||||||
@ -3398,7 +3400,10 @@ export class PokemonMove {
|
|||||||
}
|
}
|
||||||
|
|
||||||
isUsable(pokemon: Pokemon, ignorePp?: boolean): boolean {
|
isUsable(pokemon: Pokemon, ignorePp?: boolean): boolean {
|
||||||
if (this.moveId && pokemon.summonData?.disabledMove === this.moveId)
|
const isMoveDisabled = this.moveId && pokemon.summonData?.disabledMove === this.moveId;
|
||||||
|
// for torment: check valid move, pokemon is tormented, pokemon has moved this summon, and selected move is the same as previous move
|
||||||
|
const isMoveDisabledTorment = this.moveId && pokemon.summonData.tormented && pokemon.getLastXMoves(1)[0] && pokemon.getLastXMoves(1)[0].move === this.moveId;
|
||||||
|
if (isMoveDisabled || isMoveDisabledTorment)
|
||||||
return false;
|
return false;
|
||||||
return (ignorePp || this.ppUsed < this.getMovePp() || this.getMove().pp === -1) && !this.getMove().name.endsWith(' (N)');
|
return (ignorePp || this.ppUsed < this.getMovePp() || this.getMove().pp === -1) && !this.getMove().name.endsWith(' (N)');
|
||||||
}
|
}
|
||||||
|
@ -1732,13 +1732,23 @@ export class CommandPhase extends FieldPhase {
|
|||||||
const move = playerPokemon.getMoveset()[cursor];
|
const move = playerPokemon.getMoveset()[cursor];
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
|
|
||||||
// Decides between a Disabled, Not Implemented, or No PP translation message
|
// Decides between a Disabled, Not Implemented, Tormented, or No PP translation message
|
||||||
const errorMessage =
|
var errorMessage;
|
||||||
playerPokemon.summonData.disabledMove === move.moveId ? 'battle:moveDisabled' :
|
var canTranslate = true;
|
||||||
move.getName().endsWith(' (N)') ? 'battle:moveNotImplemented' : 'battle:moveNoPP';
|
if (playerPokemon.summonData.disabledMove === move.moveId)
|
||||||
|
errorMessage = 'battle:moveDisabled';
|
||||||
|
else if (move.getName().endsWith(' (N)'))
|
||||||
|
errorMessage = 'battle:moveNotImplemented';
|
||||||
|
else if (playerPokemon.summonData.tormented && playerPokemon.getLastXMoves(1)[0] && playerPokemon.getLastXMoves(1)[0].move === move.moveId) {
|
||||||
|
errorMessage = getPokemonMessage(playerPokemon, ' can\'t use the same move twice in a row due to the torment!');
|
||||||
|
canTranslate = false;
|
||||||
|
} else
|
||||||
|
errorMessage = 'battle:moveNoPP';
|
||||||
|
|
||||||
const moveName = move.getName().replace(' (N)', ''); // Trims off the indicator
|
const moveName = move.getName().replace(' (N)', ''); // Trims off the indicator
|
||||||
|
|
||||||
this.scene.ui.showText(i18next.t(errorMessage, { moveName: moveName }), null, () => {
|
errorMessage = canTranslate ? i18next.t(errorMessage, { moveName: moveName }) : errorMessage;
|
||||||
|
this.scene.ui.showText(errorMessage, null, () => {
|
||||||
this.scene.ui.clearText();
|
this.scene.ui.clearText();
|
||||||
this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex);
|
this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex);
|
||||||
}, null, true);
|
}, null, true);
|
||||||
@ -2092,6 +2102,12 @@ export class TurnEndPhase extends FieldPhase {
|
|||||||
|
|
||||||
const handlePokemon = (pokemon: Pokemon) => {
|
const handlePokemon = (pokemon: Pokemon) => {
|
||||||
pokemon.lapseTags(BattlerTagLapseType.TURN_END);
|
pokemon.lapseTags(BattlerTagLapseType.TURN_END);
|
||||||
|
|
||||||
|
// transition from just tormented (tormented status does not apply on same turn it's given) and tormented
|
||||||
|
if (pokemon.summonData.justTormented && !pokemon.summonData.tormented) {
|
||||||
|
pokemon.summonData.justTormented = false;
|
||||||
|
pokemon.summonData.tormented = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (pokemon.summonData.disabledMove && !--pokemon.summonData.disabledTurns) {
|
if (pokemon.summonData.disabledMove && !--pokemon.summonData.disabledTurns) {
|
||||||
this.scene.pushPhase(new MessagePhase(this.scene, i18next.t('battle:notDisabled', { pokemonName: `${getPokemonPrefix(pokemon)}${pokemon.name}`, moveName: allMoves[pokemon.summonData.disabledMove].name })));
|
this.scene.pushPhase(new MessagePhase(this.scene, i18next.t('battle:notDisabled', { pokemonName: `${getPokemonPrefix(pokemon)}${pokemon.name}`, moveName: allMoves[pokemon.summonData.disabledMove].name })));
|
||||||
|
@ -116,6 +116,8 @@ export default class PokemonData {
|
|||||||
this.summonData.disabledMove = source.summonData.disabledMove;
|
this.summonData.disabledMove = source.summonData.disabledMove;
|
||||||
this.summonData.disabledTurns = source.summonData.disabledTurns;
|
this.summonData.disabledTurns = source.summonData.disabledTurns;
|
||||||
this.summonData.abilitySuppressed = source.summonData.abilitySuppressed;
|
this.summonData.abilitySuppressed = source.summonData.abilitySuppressed;
|
||||||
|
this.summonData.justTormented = source.summonData.justTormented;
|
||||||
|
this.summonData.tormented = source.summonData.tormented;
|
||||||
|
|
||||||
this.summonData.ability = source.summonData.ability;
|
this.summonData.ability = source.summonData.ability;
|
||||||
this.summonData.moveset = source.summonData.moveset?.map(m => PokemonMove.loadMove(m));
|
this.summonData.moveset = source.summonData.moveset?.map(m => PokemonMove.loadMove(m));
|
||||||
|
Loading…
Reference in New Issue
Block a user