heal bell and aromatherapy functioning as intended

This commit is contained in:
shayebeadlingkl 2024-04-22 12:01:30 -04:00
parent 3977512cf7
commit 7c761bbc72
3 changed files with 54 additions and 10 deletions

View File

@ -1,6 +1,6 @@
import { Moves } from "./enums/moves";
import { ChargeAnim, MoveChargeAnim, initMoveAnim, loadMoveAnimAssets } from "./battle-anims";
import { BattleEndPhase, MovePhase, NewBattlePhase, PokemonHealPhase, StatChangePhase, SwitchSummonPhase } from "../phases";
import { BattleEndPhase, MovePhase, NewBattlePhase, PartyEffectPhase, PartyStatusCurePhase, PokemonHealPhase, StatChangePhase, SwitchSummonPhase } from "../phases";
import { BattleStat, getBattleStatName } from "./battle-stat";
import { EncoreTag } from "./battler-tags";
import { BattlerTagType } from "./enums/battler-tag-type";
@ -50,7 +50,8 @@ export enum MoveTarget {
ALL,
USER_SIDE,
ENEMY_SIDE,
BOTH_SIDES
BOTH_SIDES,
PARTY
}
export enum MoveFlags {
@ -764,20 +765,26 @@ export class HealAttr extends MoveEffectAttr {
export class StatusCureAttr extends MoveEffectAttr {
private message: string;
private abilityCondition: Abilities;
constructor(message: string) {
constructor(message: string, abilityCondition: Abilities) {
super();
this.message = message;
this.abilityCondition = abilityCondition;
}
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
if (!super.apply(user, target, move, args))
return false;
if (move.moveTarget === MoveTarget.PARTY) {
this.addCurePhase(user);
}
}
addHealPhase(target: Pokemon, healRatio: number) {
target.scene.unshiftPhase(new PokemonHealPhase(target.scene, target.getBattlerIndex(), 0, this.message, true, false));
addCurePhase(user: Pokemon) {
user.scene.unshiftPhase(new PartyStatusCurePhase(user.scene, user, this.message, this.abilityCondition));
}
}
@ -3618,6 +3625,7 @@ export function getMoveTargets(user: Pokemon, move: Moves): MoveTargetSet {
switch (moveTarget) {
case MoveTarget.USER:
case MoveTarget.PARTY:
set = [ user];
break;
case MoveTarget.NEAR_OTHER:
@ -4238,9 +4246,9 @@ export function initMoves() {
.condition((user, target, move) => user.status?.effect === StatusEffect.SLEEP)
.ignoresVirtual(),
new StatusMove(Moves.HEAL_BELL, Type.NORMAL, -1, 5, -1, 0, 2)
.attr(StatusCureAttr, "A bell chimed!")
.attr(StatusCureAttr, "A bell chimed!", Abilities.SOUNDPROOF)
.soundBased()
.target(MoveTarget.BOTH_SIDES),
.target(MoveTarget.PARTY),
new AttackMove(Moves.RETURN, Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 2)
.attr(FriendshipPowerAttr),
new AttackMove(Moves.PRESENT, Type.NORMAL, MoveCategory.PHYSICAL, -1, 90, 15, -1, 0, 2)
@ -4509,8 +4517,8 @@ export function initMoves() {
.attr(MovePowerMultiplierAttr, (user, target, move) => [WeatherType.SUNNY, WeatherType.RAIN, WeatherType.SANDSTORM, WeatherType.HAIL, WeatherType.SNOW, WeatherType.FOG, WeatherType.HEAVY_RAIN, WeatherType.HARSH_SUN].includes(user.scene.arena.weather?.weatherType) && !user.scene.arena.weather?.isEffectSuppressed(user.scene) ? 2 : 1)
.ballBombMove(),
new StatusMove(Moves.AROMATHERAPY, Type.GRASS, -1, 5, -1, 0, 3)
.target(MoveTarget.USER_AND_ALLIES)
.unimplemented(),
.attr(StatusCureAttr, "A soothing aroma wafted through the area!", Abilities.SAP_SIPPER)
.target(MoveTarget.PARTY),
new StatusMove(Moves.FAKE_TEARS, Type.DARK, 100, 20, -1, 0, 3)
.attr(StatChangeAttr, BattleStat.SPDEF, -2),
new AttackMove(Moves.AIR_CUTTER, Type.FLYING, MoveCategory.SPECIAL, 60, 95, 25, -1, 0, 3)

View File

@ -1872,8 +1872,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
return true;
}
resetStatus(): void {
resetStatus(revive: boolean = true): void {
const lastStatus = this.status?.effect;
if (!revive && lastStatus === StatusEffect.FAINT) {
return;
}
this.status = undefined;
if (lastStatus === StatusEffect.SLEEP) {
this.setFrameRate(12);

View File

@ -57,6 +57,7 @@ import { fetchDailyRunSeed, getDailyRunStarters } from "./data/daily-run";
import { GameModes, gameModes } from "./game-mode";
import { getPokemonSpecies, speciesStarters } from "./data/pokemon-species";
import i18next from './plugins/i18n';
import { Abilities } from "./data/enums/abilities";
export class LoginPhase extends Phase {
private showText: boolean;
@ -4360,6 +4361,38 @@ export class AddEnemyBuffModifierPhase extends Phase {
}
}
export class PartyStatusCurePhase extends BattlePhase {
private user: Pokemon;
private message: string;
private abilityCondition: Abilities;
constructor(scene: BattleScene, user: Pokemon, message: string, abilityCondition: Abilities) {
super(scene);
this.user = user;
this.message = message;
this.abilityCondition = abilityCondition;
}
start() {
super.start();
for (let pokemon of this.scene.getParty()) {
if (!pokemon.isOnField() || pokemon === this.user) {
pokemon.resetStatus(false);
pokemon.updateInfo(true);
} else {
if (pokemon.getAbility().id !== this.abilityCondition) {
pokemon.resetStatus();
pokemon.updateInfo(true);
}
}
}
if (this.message)
this.scene.queueMessage(this.message);
this.end();
}
}
export class PartyHealPhase extends BattlePhase {
private resumeBgm: boolean;