Code cleanup

pull/812/head
Jakub Hanko 2024-05-13 16:04:25 +02:00
parent b86a20c7b2
commit 86877dc313
No known key found for this signature in database
GPG Key ID: 775D427937A306CC
4 changed files with 31 additions and 20 deletions

View File

@ -1104,8 +1104,8 @@ export class ExposedTag extends BattlerTag {
public immuneType: Type; public immuneType: Type;
public allowedTypes: Type[]; public allowedTypes: Type[];
constructor(tagType: BattlerTagType, sourceMove: Moves, type: Type, allowedTypes: Type[], length: number) { constructor(tagType: BattlerTagType, sourceMove: Moves, type: Type, allowedTypes: Type[]) {
super(tagType, BattlerTagLapseType.TURN_END, length, sourceMove); super(tagType, BattlerTagLapseType.TURN_END, 1, sourceMove);
this.immuneType = type; this.immuneType = type;
this.allowedTypes = allowedTypes; this.allowedTypes = allowedTypes;
} }
@ -1119,8 +1119,14 @@ export class ExposedTag extends BattlerTag {
this.immuneType = source.type as Type; this.immuneType = source.type as Type;
this.allowedTypes = source.allowedTypes as Type[]; this.allowedTypes = source.allowedTypes as Type[];
} }
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
return true; return lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType);
}
ignoreImmunity(pokemon: Pokemon, moveType: Type): boolean {
return pokemon.getTypes(true, true).includes(this.immuneType)
&& this.allowedTypes.includes(moveType);
} }
} }
@ -1383,9 +1389,9 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: integer, sourc
case BattlerTagType.MAGNET_RISEN: case BattlerTagType.MAGNET_RISEN:
return new MagnetRisenTag(tagType, sourceMove); return new MagnetRisenTag(tagType, sourceMove);
case BattlerTagType.ODOR_SLEUTH: case BattlerTagType.ODOR_SLEUTH:
return new ExposedTag(tagType, sourceMove, Type.GHOST, [ Type.NORMAL, Type.FIGHTING ], turnCount); return new ExposedTag(tagType, sourceMove, Type.GHOST, [ Type.NORMAL, Type.FIGHTING ]);
case BattlerTagType.MIRACLE_EYE: case BattlerTagType.MIRACLE_EYE:
return new ExposedTag(tagType, sourceMove, Type.DARK, [ Type.PSYCHIC ], turnCount); return new ExposedTag(tagType, sourceMove, Type.DARK, [ Type.PSYCHIC ]);
case BattlerTagType.NONE: case BattlerTagType.NONE:
default: default:
return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId);

View File

@ -56,5 +56,6 @@ export enum BattlerTagType {
CHARGED = "CHARGED", CHARGED = "CHARGED",
GROUNDED = "GROUNDED", GROUNDED = "GROUNDED",
MAGNET_RISEN = "MAGNET_RISEN", MAGNET_RISEN = "MAGNET_RISEN",
ODOR_SLEUTH = "ODOR_SLEUTH" ODOR_SLEUTH = "ODOR_SLEUTH",
MIRACLE_EYE = "MIRACLE_EYE"
} }

View File

@ -2,7 +2,7 @@ import { Moves } from "./enums/moves";
import { ChargeAnim, MoveChargeAnim, initMoveAnim, loadMoveAnimAssets } from "./battle-anims"; import { ChargeAnim, MoveChargeAnim, initMoveAnim, loadMoveAnimAssets } from "./battle-anims";
import { BattleEndPhase, MovePhase, NewBattlePhase, PartyStatusCurePhase, PokemonHealPhase, StatChangePhase, SwitchSummonPhase } from "../phases"; import { BattleEndPhase, MovePhase, NewBattlePhase, PartyStatusCurePhase, PokemonHealPhase, StatChangePhase, SwitchSummonPhase } from "../phases";
import { BattleStat, getBattleStatName } from "./battle-stat"; import { BattleStat, getBattleStatName } from "./battle-stat";
import { EncoreTag, ExposedTag } from "./battler-tags"; import { BattlerTag, EncoreTag, ExposedTag } from "./battler-tags";
import { BattlerTagType } from "./enums/battler-tag-type"; import { BattlerTagType } from "./enums/battler-tag-type";
import { getPokemonMessage } from "../messages"; import { getPokemonMessage } from "../messages";
import Pokemon, { AttackMoveResult, EnemyPokemon, HitResult, MoveResult, PlayerPokemon, PokemonMove, TurnMove } from "../field/pokemon"; import Pokemon, { AttackMoveResult, EnemyPokemon, HitResult, MoveResult, PlayerPokemon, PokemonMove, TurnMove } from "../field/pokemon";
@ -1776,12 +1776,21 @@ export class ResetStatsAttr extends MoveEffectAttr {
} }
export class ExposedAttr extends MoveEffectAttr { export class ExposedAttr extends MoveEffectAttr {
private tagType: BattlerTagType;
constructor(tagType: BattlerTagType) {
super();
this.tagType = tagType;
}
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
if (!super.apply(user, target, move, args)) if (!super.apply(user, target, move, args))
return false; return false;
target.summonData.battleStats[BattleStat.EVA] = 0; target.summonData.battleStats[BattleStat.EVA] = 0;
target.updateInfo(); target.updateInfo();
target.addTag(this.tagType, 20, move.id, user.id);
target.scene.queueMessage(`${getPokemonMessage(user, " identified\n")}${getPokemonMessage(target, "!")}`); target.scene.queueMessage(`${getPokemonMessage(user, " identified\n")}${getPokemonMessage(target, "!")}`);
@ -4671,8 +4680,7 @@ export function initMoves() {
.attr(StatusEffectAttr, StatusEffect.PARALYSIS) .attr(StatusEffectAttr, StatusEffect.PARALYSIS)
.ballBombMove(), .ballBombMove(),
new StatusMove(Moves.FORESIGHT, Type.NORMAL, -1, 40, -1, 0, 2) new StatusMove(Moves.FORESIGHT, Type.NORMAL, -1, 40, -1, 0, 2)
.attr(ExposedAttr) .attr(ExposedAttr, BattlerTagType.ODOR_SLEUTH),
.attr(AddBattlerTagAttr, BattlerTagType.ODOR_SLEUTH, false, false, 20),
new SelfStatusMove(Moves.DESTINY_BOND, Type.GHOST, -1, 5, -1, 0, 2) new SelfStatusMove(Moves.DESTINY_BOND, Type.GHOST, -1, 5, -1, 0, 2)
.ignoresProtect() .ignoresProtect()
.condition(failOnBossCondition) .condition(failOnBossCondition)
@ -5022,8 +5030,7 @@ export function initMoves() {
.attr(StatChangeAttr, BattleStat.SPATK, -2, true) .attr(StatChangeAttr, BattleStat.SPATK, -2, true)
.attr(HealStatusEffectAttr, true, StatusEffect.FREEZE), .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE),
new StatusMove(Moves.ODOR_SLEUTH, Type.NORMAL, -1, 40, -1, 0, 3) new StatusMove(Moves.ODOR_SLEUTH, Type.NORMAL, -1, 40, -1, 0, 3)
.attr(ExposedAttr) .attr(ExposedAttr, BattlerTagType.ODOR_SLEUTH),
.attr(AddBattlerTagAttr, BattlerTagType.ODOR_SLEUTH, false, false, 20),
new AttackMove(Moves.ROCK_TOMB, Type.ROCK, MoveCategory.PHYSICAL, 60, 95, 15, 100, 0, 3) new AttackMove(Moves.ROCK_TOMB, Type.ROCK, MoveCategory.PHYSICAL, 60, 95, 15, 100, 0, 3)
.attr(StatChangeAttr, BattleStat.SPD, -1) .attr(StatChangeAttr, BattleStat.SPD, -1)
.makesContact(false), .makesContact(false),
@ -5131,8 +5138,7 @@ export function initMoves() {
.attr(AddArenaTagAttr, ArenaTagType.GRAVITY, 5) .attr(AddArenaTagAttr, ArenaTagType.GRAVITY, 5)
.target(MoveTarget.BOTH_SIDES), .target(MoveTarget.BOTH_SIDES),
new StatusMove(Moves.MIRACLE_EYE, Type.PSYCHIC, -1, 40, -1, 0, 4) new StatusMove(Moves.MIRACLE_EYE, Type.PSYCHIC, -1, 40, -1, 0, 4)
.attr(ExposedAttr) .attr(ExposedAttr, BattlerTagType.MIRACLE_EYE),
.attr(AddBattlerTagAttr, BattlerTagType.MIRACLE_EYE, false, false, 20),
new AttackMove(Moves.WAKE_UP_SLAP, Type.FIGHTING, MoveCategory.PHYSICAL, 70, 100, 10, -1, 0, 4) new AttackMove(Moves.WAKE_UP_SLAP, Type.FIGHTING, MoveCategory.PHYSICAL, 70, 100, 10, -1, 0, 4)
.attr(MovePowerMultiplierAttr, (user, target, move) => target.status?.effect === StatusEffect.SLEEP ? 2 : 1) .attr(MovePowerMultiplierAttr, (user, target, move) => target.status?.effect === StatusEffect.SLEEP ? 2 : 1)
.attr(HealStatusEffectAttr, false, StatusEffect.SLEEP), .attr(HealStatusEffectAttr, false, StatusEffect.SLEEP),

View File

@ -965,6 +965,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
applyAbAttrs(IgnoreTypeImmunityAbAttr, source, ignoreImmunity, moveType, defType); applyAbAttrs(IgnoreTypeImmunityAbAttr, source, ignoreImmunity, moveType, defType);
if (ignoreImmunity.value) if (ignoreImmunity.value)
return 1; return 1;
const exposedTags = this.getTags(ExposedTag) as ExposedTag[];
if (exposedTags.some(t => t.ignoreImmunity(this, moveType))) {
return 1;
}
} }
return getTypeDamageMultiplier(moveType, defType); return getTypeDamageMultiplier(moveType, defType);
@ -1445,13 +1450,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
if (types.find(t => move.isTypeImmune(t))) if (types.find(t => move.isTypeImmune(t)))
typeMultiplier.value = 0; typeMultiplier.value = 0;
if ((this.getTags(ExposedTag) as ExposedTag[]).some(t => {
return t.allowedTypes.includes(move.type)
&& this.getTypes(true, true).includes(t.immuneType);
})) {
typeMultiplier.value = 1;
}
switch (moveCategory) { switch (moveCategory) {
case MoveCategory.PHYSICAL: case MoveCategory.PHYSICAL:
case MoveCategory.SPECIAL: case MoveCategory.SPECIAL: