chore: tests for desert triggers
This commit is contained in:
@@ -228,22 +228,21 @@ export function addEffectTriggers(triggers: Triggers) {
|
||||
}
|
||||
});
|
||||
|
||||
// ========== storm: give static card to player on attack ==========
|
||||
triggers.onDamage.use(async (ctx, next) => {
|
||||
// ========== storm: give static card to player when storm enemy attacks ==========
|
||||
triggers.onEnemyIntent.use(async (ctx, next) => {
|
||||
await next();
|
||||
|
||||
if (ctx.amount - (ctx.prevented ?? 0) <= 0) return;
|
||||
const enemy = getCombatEntity(ctx.game.value, ctx.enemyId);
|
||||
if (!enemy || !enemy.isAlive) return;
|
||||
|
||||
const entity = getCombatEntity(ctx.game.value, ctx.entityKey);
|
||||
if (!entity || !entity.isAlive) return;
|
||||
|
||||
const storm = entity.effects.storm?.stacks ?? 0;
|
||||
if (storm > 0 && ctx.entityKey !== "player") {
|
||||
const storm = enemy.effects.storm?.stacks ?? 0;
|
||||
if (storm > 0) {
|
||||
for (let i = 0; i < storm; i++) {
|
||||
await triggers.onEffectApplied.execute(ctx.game, {
|
||||
effect: findEffect(ctx.game, "static"),
|
||||
entityKey: "player",
|
||||
stacks: 1,
|
||||
sourceEntityKey: ctx.enemyId,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -269,10 +268,11 @@ export function addEffectTriggers(triggers: Triggers) {
|
||||
|
||||
// ========== molt: enemy flees if molt >= maxHp ==========
|
||||
triggers.onDamage.use(async (ctx, next) => {
|
||||
await next();
|
||||
|
||||
const entity = getCombatEntity(ctx.game.value, ctx.entityKey);
|
||||
if (!entity || !entity.isAlive) return;
|
||||
if (!entity || !entity.isAlive) {
|
||||
await next();
|
||||
return;
|
||||
}
|
||||
|
||||
const molt = entity.effects.molt?.stacks ?? 0;
|
||||
if (molt >= entity.maxHp) {
|
||||
@@ -285,69 +285,84 @@ export function addEffectTriggers(triggers: Triggers) {
|
||||
draft.result = draft.enemies.every(en => !en.isAlive) ? "victory" : null;
|
||||
});
|
||||
if (ctx.game.value.result) throw ctx.game.value;
|
||||
return;
|
||||
}
|
||||
|
||||
await next();
|
||||
});
|
||||
|
||||
// ========== discard: random discard at turn start ==========
|
||||
triggers.onTurnStart.use(async (ctx, next) => {
|
||||
await next();
|
||||
|
||||
if (ctx.entityKey !== "player") return;
|
||||
if (ctx.entityKey !== "player") {
|
||||
await next();
|
||||
return;
|
||||
}
|
||||
|
||||
const discard = ctx.game.value.player.effects.discard;
|
||||
if (!discard || discard.stacks <= 0) return;
|
||||
if (discard && discard.stacks > 0) {
|
||||
const handIds = [...ctx.game.value.player.deck.regions.hand.childIds];
|
||||
if (handIds.length > 0) {
|
||||
const randomIndex = ctx.game.rng.nextInt(handIds.length);
|
||||
const randomCardId = handIds[randomIndex];
|
||||
await triggers.onCardDiscarded.execute(ctx.game, { cardId: randomCardId });
|
||||
}
|
||||
}
|
||||
|
||||
const handIds = [...ctx.game.value.player.deck.regions.hand.childIds];
|
||||
if (handIds.length === 0) return;
|
||||
|
||||
const randomIndex = ctx.game.rng.nextInt(handIds.length);
|
||||
const randomCardId = handIds[randomIndex];
|
||||
await triggers.onCardDiscarded.execute(ctx.game, { cardId: randomCardId });
|
||||
await next();
|
||||
});
|
||||
|
||||
// ========== defendNext: gain block next turn ==========
|
||||
triggers.onTurnStart.use(async (ctx, next) => {
|
||||
await next();
|
||||
|
||||
if (ctx.entityKey !== "player") return;
|
||||
if (ctx.entityKey !== "player") {
|
||||
await next();
|
||||
return;
|
||||
}
|
||||
|
||||
const defendNext = ctx.game.value.player.effects.defendNext;
|
||||
if (!defendNext || defendNext.stacks <= 0) return;
|
||||
if (defendNext && defendNext.stacks > 0) {
|
||||
await ctx.game.produceAsync(draft => {
|
||||
addEntityEffect(draft.player, findEffect(ctx.game, "defend"), defendNext.stacks);
|
||||
addEntityEffect(draft.player, defendNext.data, -defendNext.stacks);
|
||||
});
|
||||
}
|
||||
|
||||
await ctx.game.produceAsync(draft => {
|
||||
addEntityEffect(draft.player, findEffect(ctx.game, "defend"), defendNext.stacks);
|
||||
addEntityEffect(draft.player, defendNext.data, -defendNext.stacks);
|
||||
});
|
||||
await next();
|
||||
});
|
||||
|
||||
// ========== energyNext: gain energy next turn ==========
|
||||
triggers.onTurnStart.use(async (ctx, next) => {
|
||||
await next();
|
||||
|
||||
if (ctx.entityKey !== "player") return;
|
||||
if (ctx.entityKey !== "player") {
|
||||
await next();
|
||||
return;
|
||||
}
|
||||
|
||||
const energyNext = ctx.game.value.player.effects.energyNext;
|
||||
if (!energyNext || energyNext.stacks <= 0) return;
|
||||
if (energyNext && energyNext.stacks > 0) {
|
||||
await ctx.game.produceAsync(draft => {
|
||||
draft.player.energy += energyNext.stacks;
|
||||
addEntityEffect(draft.player, energyNext.data, -energyNext.stacks);
|
||||
});
|
||||
}
|
||||
|
||||
await ctx.game.produceAsync(draft => {
|
||||
draft.player.energy += energyNext.stacks;
|
||||
addEntityEffect(draft.player, energyNext.data, -energyNext.stacks);
|
||||
});
|
||||
await next();
|
||||
});
|
||||
|
||||
// ========== drawNext: draw extra cards next turn ==========
|
||||
triggers.onTurnStart.use(async (ctx, next) => {
|
||||
await next();
|
||||
|
||||
if (ctx.entityKey !== "player") return;
|
||||
if (ctx.entityKey !== "player") {
|
||||
await next();
|
||||
return;
|
||||
}
|
||||
|
||||
const drawNext = ctx.game.value.player.effects.drawNext;
|
||||
if (!drawNext || drawNext.stacks <= 0) return;
|
||||
if (drawNext && drawNext.stacks > 0) {
|
||||
await ctx.game.produceAsync(draft => {
|
||||
addEntityEffect(draft.player, drawNext.data, -drawNext.stacks);
|
||||
});
|
||||
await triggers.onDraw.execute(ctx.game, { count: drawNext.stacks });
|
||||
}
|
||||
|
||||
await ctx.game.produceAsync(draft => {
|
||||
addEntityEffect(draft.player, drawNext.data, -drawNext.stacks);
|
||||
});
|
||||
await triggers.onDraw.execute(ctx.game, { count: drawNext.stacks });
|
||||
await next();
|
||||
});
|
||||
|
||||
// ========== aim: double damage, lose aim on damage ==========
|
||||
|
||||
Reference in New Issue
Block a user