mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-17 13:52:18 +02:00
Add Sheer Force move condition
This commit is contained in:
parent
6952fe065b
commit
3a46620fc3
@ -9,7 +9,7 @@ import { BattlerTag } from "./battler-tags";
|
|||||||
import { BattlerTagType } from "./enums/battler-tag-type";
|
import { BattlerTagType } from "./enums/battler-tag-type";
|
||||||
import { StatusEffect, getStatusEffectDescriptor, getStatusEffectHealText } from "./status-effect";
|
import { StatusEffect, getStatusEffectDescriptor, getStatusEffectHealText } from "./status-effect";
|
||||||
import { Gender } from "./gender";
|
import { Gender } from "./gender";
|
||||||
import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, RecoilAttr, StatusMoveTypeImmunityAttr, FlinchAttr, OneHitKOAttr, HitHealAttr, StrengthSapHealAttr, allMoves, StatusMove, VariablePowerAttr, applyMoveAttrs, IncrementMovePriorityAttr } from "./move";
|
import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, RecoilAttr, StatusMoveTypeImmunityAttr, FlinchAttr, OneHitKOAttr, HitHealAttr, StrengthSapHealAttr, allMoves, StatusMove, VariablePowerAttr, applyMoveAttrs, IncrementMovePriorityAttr, StatChangeAttr, StatusEffectAttr } from "./move";
|
||||||
import { ArenaTagSide, ArenaTrapTag } from "./arena-tag";
|
import { ArenaTagSide, ArenaTrapTag } from "./arena-tag";
|
||||||
import { ArenaTagType } from "./enums/arena-tag-type";
|
import { ArenaTagType } from "./enums/arena-tag-type";
|
||||||
import { Stat } from "./pokemon-stat";
|
import { Stat } from "./pokemon-stat";
|
||||||
@ -966,6 +966,49 @@ export class MoveTypeChangePowerMultiplierAbAttr extends VariableMoveTypeAbAttr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getSheerForceApplyCondition(user: Pokemon, target: Pokemon, move: Move): boolean {
|
||||||
|
// Sheer Force only applies to attacking moves
|
||||||
|
if (move.category === MoveCategory.STATUS) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check the move for any attributes that change stats
|
||||||
|
* Sheer Force only applies if the move would increase the user's stats (e.g. Power-Up Punch),
|
||||||
|
* or if the stat change does not apply to the user (e.g. Liquidation).
|
||||||
|
* It does not apply when a move would decrease the user's stats (e.g. Close Combat)
|
||||||
|
*/
|
||||||
|
for (let attr of move.getAttrs(StatChangeAttr)) {
|
||||||
|
let statAttr = attr as StatChangeAttr;
|
||||||
|
if ((statAttr.selfTarget && statAttr.levels > 0) || (!statAttr.selfTarget)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List of outliers based on https://bulbapedia.bulbagarden.net/wiki/Sheer_Force_(Ability)
|
||||||
|
* and others that don't adhere to any of the common negated effects.
|
||||||
|
* TODO: Verify all outliers are covered from Bulbapedia's "affected moves" list.
|
||||||
|
*/
|
||||||
|
const outliers: Moves[] = [
|
||||||
|
Moves.ANCHOR_SHOT,
|
||||||
|
Moves.CEASELESS_EDGE,
|
||||||
|
Moves.EERIE_SPELL,
|
||||||
|
Moves.GENESIS_SUPERNOVA,
|
||||||
|
Moves.SALT_CURE,
|
||||||
|
Moves.SECRET_POWER,
|
||||||
|
Moves.SPARKLING_ARIA,
|
||||||
|
Moves.SPIRIT_SHACKLE,
|
||||||
|
Moves.STONE_AXE,
|
||||||
|
Moves.SYRUP_BOMB
|
||||||
|
];
|
||||||
|
|
||||||
|
// Not sure if there's a cleaner way to use getAttrs() here...
|
||||||
|
return !!move.getAttrs(FlinchAttr).length ||
|
||||||
|
!!move.getAttrs(StatusEffectAttr).length ||
|
||||||
|
outliers.includes(move.id);
|
||||||
|
}
|
||||||
|
|
||||||
export class FieldPreventExplosiveMovesAbAttr extends AbAttr {
|
export class FieldPreventExplosiveMovesAbAttr extends AbAttr {
|
||||||
apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean | Promise<boolean> {
|
apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean | Promise<boolean> {
|
||||||
cancelled.value = true;
|
cancelled.value = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user