refactor(slay-the-spire-like): update card effect and intent schemas

Refactor the data schemas for desert card effects and intents to use
dedicated type aliases for triggers, targets, and effect lists. This
improves type safety and consistency across the sample data.
This commit is contained in:
hypercross 2026-04-22 16:13:48 +08:00
parent 888b7b822d
commit dbbbba14e2
4 changed files with 19 additions and 13 deletions

View File

@ -5,7 +5,7 @@
id,card,trigger,target,effects id,card,trigger,target,effects
string,@card,CardEffectTrigger,CardEffectTarget,CardEffectList string,@card,CardEffectTrigger,CardEffectTarget,CardEffectList
sword,sword,onPlay,eachTarget,[attack;2];[attack;2] sword,sword,onPlay,eachTarget,[attack;2];[attack;2]
greataxe,greataxe,onPlay,all,[attack;5] greataxe,greataxe,onPlay,eachTarget,[attack;5]
spear,spear,onPlay,eachTarget,[attack;2];[attack;2];[attack;2] spear,spear,onPlay,eachTarget,[attack;2];[attack;2];[attack;2]
dagger,dagger,onPlay,eachTarget,[attack;3];[attack;3] dagger,dagger,onPlay,eachTarget,[attack;3];[attack;3]
dart,dart,onPlay,eachTarget,[attack;1] dart,dart,onPlay,eachTarget,[attack;1]

1 # type CardEffectTrigger = 'onPlay' | 'onDraw' | 'onDiscard'
5 string,@card,CardEffectTrigger,CardEffectTarget,CardEffectList
6 sword,sword,onPlay,eachTarget,[attack;2];[attack;2]
7 greataxe,greataxe,onPlay,all,[attack;5] greataxe,greataxe,onPlay,eachTarget,[attack;5]
8 spear,spear,onPlay,eachTarget,[attack;2];[attack;2];[attack;2]
9 dagger,dagger,onPlay,eachTarget,[attack;3];[attack;3]
10 dart,dart,onPlay,eachTarget,[attack;1]
11 dart-draw,dart,onPlay,user,[draw;1]

View File

@ -1,12 +1,16 @@
import type { Card } from './card.csv'; import type { Card } from './card.csv';
import type { Effect } from './effect.csv'; import type { Effect } from './effect.csv';
type CardEffectTrigger = "onPlay" | "onDraw" | "onDiscard";
type CardEffectTarget = "user" | "eachTarget" | "eachEnemy" | "randomEnemy" | "player";
type CardEffectList = [effect: Effect, stacks: number][];
type CardEffectTable = readonly { type CardEffectTable = readonly {
readonly id: string; readonly id: string;
readonly card: Card; readonly card: Card;
readonly trigger: "onPlay" | "onDraw" | "onDiscard"; readonly trigger: CardEffectTrigger;
readonly target: "self" | "target" | "all" | "random"; readonly target: CardEffectTarget;
readonly effects: [Effect, number][]; readonly effects: CardEffectList;
}[]; }[];
export type CardEffect = CardEffectTable[number]; export type CardEffect = CardEffectTable[number];

View File

@ -1,13 +1,16 @@
import type { Enemy } from './enemy.csv'; import type { Enemy } from "./enemy.csv";
import type { Effect } from './effect.csv'; import type { Effect } from "./effect.csv";
type IntentEffectTarget = "user" | "eachEnemy" | "randomEnemy" | "player";
type IntentEffectList = [IntentEffectTarget, Effect, number][];
type IntentTable = readonly { type IntentTable = readonly {
readonly id: string; readonly id: string;
readonly enemy: Enemy; readonly enemy: Enemy;
readonly initialIntent: boolean; readonly initialIntent: boolean;
readonly nextIntents: Intent[]; readonly nextIntents: Intent[];
readonly brokenIntent: Intent[]; readonly brokenIntent: Intent[];
readonly effects: ["self" | "player" | "team", Effect, number][]; readonly effects: IntentEffectList;
}[]; }[];
export type Intent = IntentTable[number]; export type Intent = IntentTable[number];

View File

@ -9,7 +9,6 @@ import {
import { import {
CardData, CardData,
CardEffectTarget, CardEffectTarget,
CardTargetType,
EffectData, EffectData,
EffectTarget, EffectTarget,
} from "@/samples/slay-the-spire-like/system/types"; } from "@/samples/slay-the-spire-like/system/types";