add initial commit for trick room

challenge
This commit is contained in:
KimJeongSun 2024-09-20 23:53:14 +09:00
parent 0eea2031fb
commit dc36bcd402
4 changed files with 62 additions and 1 deletions

View File

@ -59,6 +59,10 @@ export enum ChallengeType {
* @see {@linkcode Challenge.applyTypeEffectiveness} * @see {@linkcode Challenge.applyTypeEffectiveness}
*/ */
TYPE_EFFECTIVENESS, TYPE_EFFECTIVENESS,
/**
* Challenge that enables Trick Room in a run
*/
TRICK_ROOM,
/** /**
* Modifies what level the AI pokemon are. UNIMPLEMENTED. * Modifies what level the AI pokemon are. UNIMPLEMENTED.
*/ */
@ -340,6 +344,15 @@ export abstract class Challenge {
return false; return false;
} }
/**
* An apply function for TRICK_ROOM challenges. Derived classes should alter this.
* @param enabled {@link Utils.BooleanHolder} Whether the challenge is enabled.
* @returns {@link boolean} Whether this function did anything.
*/
applyTrickRoom(enabled: Utils.BooleanHolder): boolean {
return false;
}
/** /**
* An apply function for AI_LEVEL challenges. Derived classes should alter this. * An apply function for AI_LEVEL challenges. Derived classes should alter this.
* @param level {@link Utils.IntegerHolder} The generated level. * @param level {@link Utils.IntegerHolder} The generated level.
@ -707,6 +720,35 @@ export class InverseBattleChallenge extends Challenge {
} }
} }
/**
* Challenge that enables Trick Room in a run
*/
export class TrickRoomChallenge extends Challenge {
constructor() {
super(Challenges.TRICK_ROOM, 1);
}
static loadChallenge(source: TrickRoomChallenge | any): TrickRoomChallenge {
const newChallenge = new TrickRoomChallenge();
newChallenge.value = source.value;
newChallenge.severity = source.severity;
return newChallenge;
}
override getDifficulty(): number {
return 0;
}
applyTrickRoom(enabled: Utils.BooleanHolder): boolean {
if (!enabled.value) {
enabled.value = true;
} else {
enabled.value = false;
}
return true;
}
}
/** /**
* Lowers the amount of starter points available. * Lowers the amount of starter points available.
*/ */
@ -834,6 +876,14 @@ export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType
* @returns True if any challenge was successfully applied. * @returns True if any challenge was successfully applied.
*/ */
export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.TYPE_EFFECTIVENESS, effectiveness: Utils.NumberHolder): boolean; export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.TYPE_EFFECTIVENESS, effectiveness: Utils.NumberHolder): boolean;
/**
* Apply all challenges that modify Trick Room.
* @param gameMode {@linkcode GameMode} The current gameMode
* @param challengeType {@linkcode ChallengeType} ChallengeType.TRICK_ROOM
* @param enabled {@linkcode Utils.BooleanHolder} Whether Trick Room is enabled.
* @returns True if any challenge was successfully applied.
*/
export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.TRICK_ROOM, enabled: Utils.BooleanHolder): boolean;
/** /**
* Apply all challenges that modify what level AI are. * Apply all challenges that modify what level AI are.
* @param gameMode {@link GameMode} The current gameMode * @param gameMode {@link GameMode} The current gameMode
@ -918,6 +968,9 @@ export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType
case ChallengeType.TYPE_EFFECTIVENESS: case ChallengeType.TYPE_EFFECTIVENESS:
ret ||= c.applyTypeEffectiveness(args[0]); ret ||= c.applyTypeEffectiveness(args[0]);
break; break;
case ChallengeType.TRICK_ROOM:
ret ||= c.applyTrickRoom(args[0]);
break;
case ChallengeType.AI_LEVEL: case ChallengeType.AI_LEVEL:
ret ||= c.applyLevelChange(args[0], args[1], args[2], args[3]); ret ||= c.applyLevelChange(args[0], args[1], args[2], args[3]);
break; break;
@ -961,6 +1014,8 @@ export function copyChallenge(source: Challenge | any): Challenge {
return FreshStartChallenge.loadChallenge(source); return FreshStartChallenge.loadChallenge(source);
case Challenges.INVERSE_BATTLE: case Challenges.INVERSE_BATTLE:
return InverseBattleChallenge.loadChallenge(source); return InverseBattleChallenge.loadChallenge(source);
case Challenges.TRICK_ROOM:
return TrickRoomChallenge.loadChallenge(source);
} }
throw new Error("Unknown challenge copied"); throw new Error("Unknown challenge copied");
} }
@ -973,5 +1028,6 @@ export function initChallenges() {
new SingleTypeChallenge(), new SingleTypeChallenge(),
new FreshStartChallenge(), new FreshStartChallenge(),
new InverseBattleChallenge(), new InverseBattleChallenge(),
new TrickRoomChallenge(),
); );
} }

View File

@ -5,4 +5,5 @@ export enum Challenges {
LOWER_STARTER_POINTS, LOWER_STARTER_POINTS,
FRESH_START, FRESH_START,
INVERSE_BATTLE, INVERSE_BATTLE,
TRICK_ROOM,
} }

View File

@ -19,6 +19,7 @@ import { TurnEndPhase } from "./turn-end-phase";
import { WeatherEffectPhase } from "./weather-effect-phase"; import { WeatherEffectPhase } from "./weather-effect-phase";
import { BattlerIndex } from "#app/battle"; import { BattlerIndex } from "#app/battle";
import { TrickRoomTag } from "#app/data/arena-tag"; import { TrickRoomTag } from "#app/data/arena-tag";
import { applyChallenges, ChallengeType } from "#app/data/challenge";
export class TurnStartPhase extends FieldPhase { export class TurnStartPhase extends FieldPhase {
constructor(scene: BattleScene) { constructor(scene: BattleScene) {
@ -52,6 +53,7 @@ export class TurnStartPhase extends FieldPhase {
// Next, a check for Trick Room is applied. If Trick Room is present, the order is reversed. // Next, a check for Trick Room is applied. If Trick Room is present, the order is reversed.
const speedReversed = new Utils.BooleanHolder(false); const speedReversed = new Utils.BooleanHolder(false);
this.scene.arena.applyTags(TrickRoomTag, speedReversed); this.scene.arena.applyTags(TrickRoomTag, speedReversed);
applyChallenges(this.scene.gameMode, ChallengeType.TRICK_ROOM, speedReversed);
if (speedReversed.value) { if (speedReversed.value) {
orderedTargets = orderedTargets.reverse(); orderedTargets = orderedTargets.reverse();

View File

@ -489,9 +489,11 @@ export default class RunInfoUiHandler extends UiHandler {
rules.push(i18next.t("challenges:freshStart.name")); rules.push(i18next.t("challenges:freshStart.name"));
break; break;
case Challenges.INVERSE_BATTLE: case Challenges.INVERSE_BATTLE:
//
rules.push(i18next.t("challenges:inverseBattle.shortName")); rules.push(i18next.t("challenges:inverseBattle.shortName"));
break; break;
case Challenges.TRICK_ROOM:
rules.push(i18next.t("challenges:trickRoom.shortName"));
break;
} }
} }
} }