Compare commits

..

No commits in common. "509e121275595d17cb6f736087ef694bd37eec50" and "09148f5b13c335e055c7a2a57616122d2b6a3594" have entirely different histories.

5 changed files with 27 additions and 45 deletions

View File

@ -1,30 +1,21 @@
# instant: 不施加buff瞬间生效 id, name, description
# temporary: 施加buff下回合开始时失效 string, string, string
# lingering: 施加buff下回合开始时失去1层 attack, 攻击, 对对手造成伤害
# permanent: 施加buff defend, 防御, 抵消下次行动前受到的伤害
# posture: 施加buff每受到1点伤害移除1层 spike, 尖刺, 对攻击者造成X点伤害
# card: 不施加buff对玩家时在玩家弃牌堆创建同名卡牌对敌人无效敌人没有牌堆 venom, 蛇毒, 弃掉超过1张蛇毒时受到6伤害
# cardDraw: 不施加buff在抓牌堆洗入同名卡牌 curse, 诅咒, 受攻击时物品攻击-1直到弃掉一张该物品的牌
# cardHand不施加buff在玩家手牌中创建同名卡牌 aim, 瞄准, 造成双倍伤害,受伤时失去等量瞄准
roll, 滚动, 攻击时每消耗10点滚动造成等量伤害
id, name, description, timing rollDamage, 滚动攻击, 消耗滚动层数造成的伤害
string, string, string, 'instant'|'temporary'|'lingering'|'permanent'|'posture'|'card'|'cardDraw'|'cardHand' vultureEye, 秃鹫之眼, 受到伤害时自动从手牌打出秃鹫的攻击
attack, 攻击, 对对手造成伤害, instant tailSting, 尾刺, 回合结束时对玩家造成X点攻击
defend, 防御, 抵消下次行动前受到的伤害, posture energyDrain, 能量吸取, 每回合首次受伤时玩家失去1能量
spike, 尖刺, 对攻击者造成X点伤害, lingering molt, 脱皮, 达到生命上限时怪物逃跑
venom, 蛇毒, 弃掉超过1张蛇毒时受到6伤害, lingering discard, 弃牌, 弃掉物品的牌
curse, 诅咒, 受攻击时物品攻击-1直到弃掉一张该物品的牌, permanent storm, 风暴, 攻击时给玩家塞入1张静电
aim, 瞄准, 造成双倍伤害,受伤时失去等量瞄准, lingering static, 静电, 在手里时受电击伤害+1
roll, 滚动, 攻击时每消耗10点滚动造成等量伤害, permanent charge, 冲锋, 受到或造成的伤害翻倍并消耗等量冲锋
rollDamage, 滚动攻击, 消耗滚动层数造成的伤害, instant summonMummy, 召唤木乃伊, 召唤1个木乃伊
vultureEye, 秃鹫之眼, 受到伤害时自动从手牌打出秃鹫的攻击, permanent summonSandwormLarva, 召唤幼沙虫, 召唤1个幼沙虫
tailSting, 尾刺, 回合结束时对玩家造成X点攻击, instant reviveMummy, 复活木乃伊, 复活1个已死亡的木乃伊
energyDrain, 能量吸取, 每回合首次受伤时玩家失去1能量, permanent
molt, 脱皮, 达到生命上限时怪物逃跑, permanent
discard, 弃牌, 弃掉物品的牌, instant
storm, 风暴, 攻击时给玩家塞入1张静电, permanent
static, 静电, 在手里时受电击伤害+1, permanent
charge, 冲锋, 受到或造成的伤害翻倍并消耗等量冲锋, lingering
summonMummy, 召唤木乃伊, 召唤1个木乃伊, instant
summonSandwormLarva, 召唤幼沙虫, 召唤1个幼沙虫, instant
reviveMummy, 复活木乃伊, 复活1个已死亡的木乃伊, instant

1 # instant: 不施加buff,瞬间生效 id name description
2 # temporary: 施加buff,下回合开始时失效 string string string
3 # lingering: 施加buff,下回合开始时失去1层 attack 攻击 对对手造成伤害
4 # permanent: 施加buff defend 防御 抵消下次行动前受到的伤害
5 # posture: 施加buff,每受到1点伤害移除1层 spike 尖刺 对攻击者造成X点伤害
6 # card: 不施加buff,对玩家时在玩家弃牌堆创建同名卡牌,对敌人无效(敌人没有牌堆) venom 蛇毒 弃掉超过1张蛇毒时受到6伤害
7 # cardDraw: 不施加buff,在抓牌堆洗入同名卡牌 curse 诅咒 受攻击时物品攻击-1,直到弃掉一张该物品的牌
8 # cardHand:不施加buff,在玩家手牌中创建同名卡牌 aim 瞄准 造成双倍伤害,受伤时失去等量瞄准
9 id, name, description, timing roll 滚动 攻击时每消耗10点滚动造成等量伤害
10 string, string, string, 'instant'|'temporary'|'lingering'|'permanent'|'posture'|'card'|'cardDraw'|'cardHand' rollDamage 滚动攻击 消耗滚动层数造成的伤害
11 attack, 攻击, 对对手造成伤害, instant vultureEye 秃鹫之眼 受到伤害时自动从手牌打出秃鹫的攻击
12 defend, 防御, 抵消下次行动前受到的伤害, posture tailSting 尾刺 回合结束时对玩家造成X点攻击
13 spike, 尖刺, 对攻击者造成X点伤害, lingering energyDrain 能量吸取 每回合首次受伤时玩家失去1能量
14 venom, 蛇毒, 弃掉超过1张蛇毒时受到6伤害, lingering molt 脱皮 达到生命上限时怪物逃跑
15 curse, 诅咒, 受攻击时物品攻击-1,直到弃掉一张该物品的牌, permanent discard 弃牌 弃掉物品的牌
16 aim, 瞄准, 造成双倍伤害,受伤时失去等量瞄准, lingering storm 风暴 攻击时给玩家塞入1张静电
17 roll, 滚动, 攻击时每消耗10点滚动造成等量伤害, permanent static 静电 在手里时受电击伤害+1
18 rollDamage, 滚动攻击, 消耗滚动层数造成的伤害, instant charge 冲锋 受到或造成的伤害翻倍并消耗等量冲锋
19 vultureEye, 秃鹫之眼, 受到伤害时自动从手牌打出秃鹫的攻击, permanent summonMummy 召唤木乃伊 召唤1个木乃伊
20 tailSting, 尾刺, 回合结束时对玩家造成X点攻击, instant summonSandwormLarva 召唤幼沙虫 召唤1个幼沙虫
21 energyDrain, 能量吸取, 每回合首次受伤时玩家失去1能量, permanent reviveMummy 复活木乃伊 复活1个已死亡的木乃伊
molt, 脱皮, 达到生命上限时怪物逃跑, permanent
discard, 弃牌, 弃掉物品的牌, instant
storm, 风暴, 攻击时给玩家塞入1张静电, permanent
static, 静电, 在手里时受电击伤害+1, permanent
charge, 冲锋, 受到或造成的伤害翻倍并消耗等量冲锋, lingering
summonMummy, 召唤木乃伊, 召唤1个木乃伊, instant
summonSandwormLarva, 召唤幼沙虫, 召唤1个幼沙虫, instant
reviveMummy, 复活木乃伊, 复活1个已死亡的木乃伊, instant

View File

@ -2,7 +2,6 @@ type EffectDesertTable = readonly {
readonly id: string; readonly id: string;
readonly name: string; readonly name: string;
readonly description: string; readonly description: string;
readonly timing: "instant" | "temporary" | "lingering" | "permanent" | "posture" | "card" | "cardDraw" | "cardHand";
}[]; }[];
export type EffectDesert = EffectDesertTable[number]; export type EffectDesert = EffectDesertTable[number];

View File

@ -6,8 +6,8 @@
# nextIntents: 下一个意图id, 多个意图则从中随机 # nextIntents: 下一个意图id, 多个意图则从中随机
# brokenIntent: 防御被打空后改变的意图id多个意图则从中随机 # brokenIntent: 防御被打空后改变的意图id多个意图则从中随机
# effects技能效果目标+buff/debuff/攻击/防御+数值/层数 # effects技能效果目标+buff/debuff/攻击/防御+数值/层数
enemy,id,nextIntents,brokenIntent,effects enemy,intent,nextIntents,brokenIntent,effects
@enemyDesert,string,@enemyIntentDesert[],@enemyIntentDesert[],['self' | 'opponent';@effectDesert;number][] @enemyDesert,string,string[],string[],['self' | 'opponent';@effectDesert;number][]
仙人掌怪,boost,boost;defend;defend,,[self;spike;1];[self;defend;4] 仙人掌怪,boost,boost;defend;defend,,[self;spike;1];[self;defend;4]
仙人掌怪,defend,attack,,[self;defend;8] 仙人掌怪,defend,attack,,[self;defend;8]

1 # 敌人行动状态机,敌人行动时会执行当前的意图,然后将意图变为下一个意图
6 # brokenIntent: 防御被打空后改变的意图id,多个意图则从中随机
7 # effects:技能效果,目标+buff/debuff/攻击/防御+数值/层数
8 enemy,id,nextIntents,brokenIntent,effects enemy,intent,nextIntents,brokenIntent,effects
9 @enemyDesert,string,@enemyIntentDesert[],@enemyIntentDesert[],['self' | 'opponent';@effectDesert;number][] @enemyDesert,string,string[],string[],['self' | 'opponent';@effectDesert;number][]
10 仙人掌怪,boost,boost;defend;defend,,[self;spike;1];[self;defend;4]
11 仙人掌怪,defend,attack,,[self;defend;8]
12 仙人掌怪,attack,boost,,[opponent;attack;5]
13 蛇,poison,attack;attack,,[opponent;venom;1];[opponent;attack;4]

View File

@ -3,9 +3,9 @@ import type { EffectDesert } from './effectDesert.csv';
type EnemyIntentDesertTable = readonly { type EnemyIntentDesertTable = readonly {
readonly enemy: EnemyDesert; readonly enemy: EnemyDesert;
readonly id: string; readonly intent: string;
readonly nextIntents: readonly EnemyIntentDesert[]; readonly nextIntents: readonly string[];
readonly brokenIntent: readonly EnemyIntentDesert[]; readonly brokenIntent: readonly string[];
readonly effects: readonly ["self" | "opponent", EffectDesert, number]; readonly effects: readonly ["self" | "opponent", EffectDesert, number];
}[]; }[];

View File

@ -143,14 +143,6 @@ describe('effectDesert.csv import', () => {
expect(effect).toHaveProperty('id'); expect(effect).toHaveProperty('id');
expect(effect).toHaveProperty('name'); expect(effect).toHaveProperty('name');
expect(effect).toHaveProperty('description'); expect(effect).toHaveProperty('description');
expect(effect).toHaveProperty('timing');
}
});
it('should have valid timing values', () => {
const validTimings = ['instant', 'temporary', 'lingering', 'permanent', 'posture', 'card', 'cardDraw', 'cardHand'];
for (const effect of effectDesertData) {
expect(validTimings).toContain(effect.timing);
} }
}); });
@ -217,7 +209,7 @@ describe('enemyIntentDesert.csv import', () => {
it('should have correct fields for each intent', () => { it('should have correct fields for each intent', () => {
for (const intent of enemyIntentDesertData) { for (const intent of enemyIntentDesertData) {
expect(intent).toHaveProperty('enemy'); expect(intent).toHaveProperty('enemy');
expect(intent).toHaveProperty('id'); expect(intent).toHaveProperty('intent');
expect(intent).toHaveProperty('nextIntents'); expect(intent).toHaveProperty('nextIntents');
expect(intent).toHaveProperty('brokenIntent'); expect(intent).toHaveProperty('brokenIntent');
expect(intent).toHaveProperty('effects'); expect(intent).toHaveProperty('effects');