Fix conditionals checking SwitchType

Use `prependToPhase()` instead of `unshiftPhase()`
This commit is contained in:
NightKev 2024-11-15 19:34:51 -08:00
parent 656a51bcc8
commit 8d1cbfb2c5
2 changed files with 59 additions and 39 deletions

View File

@ -5979,24 +5979,35 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
return false; return false;
} }
if (switchOutTarget.hp && SwitchType.FORCE_SWITCH) { if (switchOutTarget.hp > 0) {
switchOutTarget.leaveField(this.switchType === SwitchType.FORCE_SWITCH); if (this.switchType === SwitchType.FORCE_SWITCH) {
const slotIndex = Utils.randIntRange(user.scene.currentBattle.getBattlerCount(), user.scene.getPlayerParty().length); switchOutTarget.leaveField(true);
user.scene.unshiftPhase( const slotIndex = Utils.randIntRange(user.scene.currentBattle.getBattlerCount(), user.scene.getPlayerParty().length);
new SwitchSummonPhase( user.scene.prependToPhase(
user.scene, new SwitchSummonPhase(
this.switchType, user.scene,
switchOutTarget.getFieldIndex(), this.switchType,
slotIndex, switchOutTarget.getFieldIndex(),
false, slotIndex,
true false,
) true
); ),
} MoveEndPhase
if (switchOutTarget.hp > 0 && !SwitchType.FORCE_SWITCH) { );
switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); } else {
user.scene.prependToPhase(new SwitchPhase(user.scene, this.switchType, switchOutTarget.getFieldIndex(), true, true), MoveEndPhase); switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH);
return true; user.scene.prependToPhase(
new SwitchPhase(
user.scene,
this.switchType,
switchOutTarget.getFieldIndex(),
true,
true
),
MoveEndPhase
);
return true;
}
} }
return false; return false;
} else if (user.scene.currentBattle.battleType !== BattleType.WILD) { } else if (user.scene.currentBattle.battleType !== BattleType.WILD) {
@ -6004,26 +6015,36 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
if (switchOutTarget.scene.getEnemyParty().filter((p) => p.isAllowedInBattle() && !p.isOnField()).length < 1) { if (switchOutTarget.scene.getEnemyParty().filter((p) => p.isAllowedInBattle() && !p.isOnField()).length < 1) {
return false; return false;
} }
if (switchOutTarget.hp && SwitchType.FORCE_SWITCH) { if (switchOutTarget.hp > 0) {
switchOutTarget.leaveField(this.switchType === SwitchType.FORCE_SWITCH); if (this.switchType === SwitchType.FORCE_SWITCH) {
const slotIndex = Utils.randIntRange(user.scene.currentBattle.getBattlerCount(), user.scene.getEnemyParty().length); switchOutTarget.leaveField(true);
user.scene.unshiftPhase( const slotIndex = Utils.randIntRange(user.scene.currentBattle.getBattlerCount(), user.scene.getEnemyParty().length);
new SwitchSummonPhase( user.scene.prependToPhase(
user.scene, new SwitchSummonPhase(
this.switchType, user.scene,
switchOutTarget.getFieldIndex(), this.switchType,
slotIndex, switchOutTarget.getFieldIndex(),
false, slotIndex,
false false,
) false
); ),
} MoveEndPhase
if (switchOutTarget.hp > 0 && !SwitchType.FORCE_SWITCH) { );
} else {
// for opponent switching out // for opponent switching out
switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH);
user.scene.prependToPhase(new SwitchSummonPhase(user.scene, this.switchType, switchOutTarget.getFieldIndex(), user.scene.prependToPhase(
(user.scene.currentBattle.trainer ? user.scene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot) : 0), new SwitchSummonPhase(
false, false), MoveEndPhase); user.scene,
this.switchType,
switchOutTarget.getFieldIndex(),
(user.scene.currentBattle.trainer ? user.scene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot) : 0),
false,
false
),
MoveEndPhase
);
}
} }
} else { } else {
/** /**

View File

@ -12,6 +12,5 @@ export enum SwitchType {
/** Transfers the returning Pokemon's Substitute to the switched in Pokemon */ /** Transfers the returning Pokemon's Substitute to the switched in Pokemon */
SHED_TAIL, SHED_TAIL,
/** Force switchout to a random party member */ /** Force switchout to a random party member */
FORCE_SWITCH FORCE_SWITCH,
} }