refactor: update doc and .d.ts

This commit is contained in:
hyper
2026-04-16 17:14:13 +08:00
parent 693c279e0f
commit a010a0bca6
8 changed files with 109 additions and 60 deletions
+83 -38
View File
@@ -1,4 +1,4 @@
# slay the spire + backpack heroes # 杀戮尖塔 + 背包英雄
玩家有4x6的背包 玩家有4x6的背包
@@ -6,68 +6,113 @@
战斗时玩杀戮尖塔 战斗时玩杀戮尖塔
## Roguelike structure ## 肉鸽结构
Zone based Point Crawl: 区域点到点地图
- 分4个区域,每个区域有独立的随机遭遇池
- 遭遇分为随机遭遇、战斗、服务 - 分4个区域,每个区域有独立的随机遭遇池,目前先考虑第一个区域
- 随机遭遇使用d6双阶段结构
- 战斗遭遇分简单和困难,困难可以绕
- 服务遭遇分商店(恢复/卖装备/附魔)篝火(恢复/补充药水/下次战斗buff)奇遇(随机奖励/风险事件)
- 每区域10层,26个遭遇节点 - 每区域10层,26个遭遇节点
- 荒野层6层×3节点(小怪50%/精英25%/事件25% - 荒野层6层×3节点(小怪50%/精英25%/事件25%
- 聚落层2层×4节点(≥1篝火/≥1商店/≥1奇遇,第4随机) - 聚落层2层×4节点(≥1篝火/≥1商店/≥1奇遇,第4随机)
- 起点→终点,终点为boss战 - 起点→终点,终点为boss战
- 分支1-3-3-4-3-3-4-3-3-1
## 战斗 ## 战斗(小怪、精英、boss
典中典5手牌3费,每个格子1张牌,同一装备牌逻辑相同,但根据邻接吃到的牌buff不同 基本流程
- 怪物战斗开始效应
- 玩家战斗开始效应
- 重复直至一方不剩下存活角色
- 玩家回合
- 怪物回合
3种牌(攻击/防御/强化)攻击克强化克防御克攻击,强化比sts强化窄但效果更大 怪物战斗开始
- 获得初始buff、初始血量、初始意图
洗牌堆时洗入两张《疲劳》(1费/消耗) 玩家战斗开始
- 获得3点能量,抓5张手牌
背包物品可能会引用相邻的物品、同一行的物品、同一列的物品等 玩家回合
- buff更新阶段:临时buff消失、延时buff-1层
- 回合开始:触发回合开始效果
- 行动:玩家可以自由出牌直至结束回合
- 回合结束:触发回合结束效果
- 重置:恢复到3点能量,弃掉剩余手牌,抓5张手牌
- 洗回牌堆:每当牌堆为空需要抓牌或与牌堆顶交互,则将弃牌堆与2张《疲劳》(没有效果,不能打出)洗回牌堆,然后再继续。
部分物品带使用次数限制,药瓶喝完可以在篝火补 怪物回合
- buff更新阶段:每个怪物临时buff消失、延时buff-1层
- 回合开始:触发每个怪物的回合开始效果
- 行动:怪物的意图生效,然后更新意图
- 回合结束:触发每个怪物的回合结束效果
## 费用 ## 篝火
60%牌1费,20%牌2费,20%牌0费 在篝火处可进行3次行动,每次行动可以:
- 恢复20%最大生命
- 恢复1次所有药品的使用次数
- 合成一个物品(暂未设计)
怪物强化平均节奏较sts更快 ## 商店
## 关键词 在商店可以买/卖物品
- 有5个随机的不同物品可以买,价格为原价50%-150%随机
- 购买之后不会补充
- 可以以原价25%的价格卖出背包内的任意物品
行动关键词:以【攻击4】表示。分为指向行动或非指向行动。随机打出指向行动时,指向随机目标。 ## 奇遇
buff/debuff:以【防御3】表示。分为不衰减(持续整场战斗)、回合衰减(每次更新层数-1)、临时(下次更新清空)和姿态(受伤害时扣除层数)四种。 奇遇为Yarn Spinner驱动的分支对话遭遇
物品的构筑配合按邻接性设计,临场动态策略配合按buff考虑 对玩家产生的影响根据Yarn Spinner的命令结算
## Buff / Debuff 在对话结束后奇遇结算结束
玩家buff主要按照“有默认功能的货币”考虑 ## 战斗内Effect
debuff暂时只考虑“条件回合覆盖”类debuff,有时可以当货币用 Effect分以下类型:
- 瞬间:立即生效,直接改变状态
- Buff:作为状态叠加到角色身上
- 持久Buff:持续整场战斗
- 临时Buff:持续到下次Buff更新
- 延时Buff:每次Buff更新-1层,持续到归零
- 姿态Buff:受到伤害时,移除同等数量的层数
- 卡牌:作为状态卡牌加入
- 弃牌:加入弃牌堆
- 手牌:加入手牌
- 牌堆:加入抓牌堆
- 物品:作为物品状态叠加到物品上,通常是效应来源卡牌对应的物品周围的物品,若没有上下文物品则可能无效或对玩家的随机物品生效
- 临时:持续到下次Buff更新
- 持久:持续整场战斗
- 永久:持续整个冒险
- 直到打出:持续到下次打出该物品的卡牌
- 直到弃掉:持续到下次弃掉该物品的卡牌
敌人buff和debuff与玩家对称设计 ## 时机
## 遗物与药水 产生Effect的时机包括:
- 打出卡牌/抓到卡牌/弃掉卡牌
- 敌人意图生效
- Effect侦听器需要的特定侦听事件
药水在sts里属于不稳定容错,比较鸡肋 ## 卡牌属性
这里药水作为物品携带,0费消耗次数使用,随篝火补充,功能较难溢出且稳定性更强 - 费用:能量费用或物品使用次数用,如果不能支付则无法打出
- 抓牌效果/打出效果/弃掉效果:包括目标(自身、选择目标、全体),效果类型,和层数,可能有复数条
纯触发奖励性遗物用以调节节奏,还是要有的,但是分池发 能量费用以3费为准,希望大约60%牌1费,20%牌2费,20%牌0费
## 区域设计 ## 遗物
每区域10小怪,4精英,2商店,2篝火,8奇遇,1事件 遗物不需要放在背包格里,且仅提供正面触发效果,暂未设计
## 设计量 ## 区域设计量
每区域10小怪,4精英,8奇遇,1 boss(暂未设计)
目前仅考虑沙漠一个区域
## 角色设计量
~24 物品 每角色(4种各6个) ~24 物品 每角色(4种各6个)
-10 小怪 4 精英 1 boss 每区域 -8 遗物 每角色
-3+ 遗物 每角色
在扩展更多区域后需添加更多内容随区域/奇遇解锁
@@ -1,5 +1,7 @@
# Fighter # Fighter
战士角色:默认的角色。
## 物品 ## 物品
4种物品各6个:武器、防具、耗材、工具。 4种物品各6个:武器、防具、耗材、工具。
@@ -8,7 +10,7 @@
每种物品每格提供一张牌加入玩家牌堆。 每种物品每格提供一张牌加入玩家牌堆。
使用武器、防具、工具的卡牌花费能量每回合3点。耗材使用不计入费用,消耗本身的使用次数。使用次数在篝火处会完全恢复。 使用武器、防具、工具的卡牌花费能量每回合3点能量。耗材使用不计入费用,消耗本身的使用次数。使用次数在篝火处可以恢复。
### 初始装备 ### 初始装备
@@ -29,7 +31,9 @@
防具可以检查周围物品,每个匹配的给奖励。 防具可以检查周围物品,每个匹配的给奖励。
盾 2x2/1费:【防御3】 物品被动:每个防具的周围每种不同防具+1最大生命。
盾 2x2/1费:【防御3】。
斗笠 4格T型/2费:【防御8】 斗笠 4格T型/2费:【防御8】
披风 3格L型/1费:【防御2】,下回合【防御2】 披风 3格L型/1费:【防御2】,下回合【防御2】
护腕 1格/0费:【防御1】,抓1张牌 护腕 1格/0费:【防御1】,抓1张牌
+15 -15
View File
@@ -6,31 +6,31 @@
概念:防+强化 概念:防+强化
【尖刺X】:对攻击者造成X点伤害 【尖刺X】:对自己施加的持续buff,对攻击者造成X点伤害
### 蛇 ### 蛇
概念:攻+强化 概念:攻+强化
蛇毒/1费:消耗。一回合弃掉超过1张蛇毒时,受到6伤害。 蛇毒X】:对玩家施加的手牌状态(同名状态牌/1费:打出时移除此牌。弃掉时受到3点伤害。
### 木乃伊 ### 木乃伊
概念:攻+防 概念:攻+防
【诅咒】:受攻击时物品【攻击】-1,直到弃掉一张该物品的牌 【诅咒】:对自己施加的延时buff。受玩家卡牌攻击时,卡牌对应物品【攻击】-1,直到玩家弃掉一张该物品的牌
### 枪手 ### 枪手
概念:单回高攻 概念:单回高攻
【瞄准X】:造成双倍伤害。受伤时失去等量【瞄准】 【瞄准X】:对自己施加的姿态buff。造成双倍伤害。
### 风卷草 ### 风卷草
概念:防+强化 概念:防+强化
【滚动X】:攻击时,每消耗10点【滚动】,造成等量伤害 【滚动X】:对自己施加的姿态buff。攻击时,若有至少10层滚动,则消耗10层滚动让攻击+10
### 秃鹫 ### 秃鹫
@@ -38,49 +38,49 @@
若造成伤害,玩家获得秃鹫之眼。 若造成伤害,玩家获得秃鹫之眼。
秃鹫之眼/0费:受到秃鹫的攻击。当你受到伤害时,自动从手牌打出。 秃鹫之眼:对玩家施加的抓牌堆状态卡牌(同名状态牌/0费:打出时移除。抓到时获得3层【暴露】(临时debuff,受到的伤害+1/每层))
### 沙蝎 ### 沙蝎
概念:攻+强化 概念:攻+强化
【尾刺X】:玩家回合结束时受到沙蝎的X点攻击。受伤时失去等量【尾刺】 【尾刺X】:对自己施加的姿态buff。攻击时,伤害提升X
### 幼沙虫 ### 幼沙虫
防+强化 防+强化
每回合第一次受伤时,玩家失去1点能量。 【能量吸取】:对自己施加的延时buff。受伤时,玩家失去X点能量。
### 蜥蜴 ### 蜥蜴
概念:攻+防+逃跑 概念:攻+防+逃跑
【脱皮】:若脱皮达到生命上限,则怪物逃跑,玩家不能获得战斗奖励。 【脱皮】:对自己施加的姿态buff。若脱皮达到生命上限,则怪物逃跑,玩家不能获得战斗奖励。
### 沙匪 ### 沙匪
概念:攻特化 概念:弱化玩家
洗牌时,将一个随机物品的牌全部弃掉 【劫掠】:对玩家施加的延时debuff。回合开始时,随机弃掉一张手牌
## 精英 - 4种 ## 精英 - 4种
### 风暴之灵 ### 风暴之灵
静电/0费:抓一张牌。在手里时,受到【电击】伤害+1。 静电:对玩家施加的弃牌堆状态卡牌/0费:打出时自己获得1层【暴露】并抓一张牌。(临时debuff,受到的伤害+1/每层)
【风暴X】:攻击时,玩家获得1张静电。受伤时失去等量【风暴】 【风暴X】:对自己施加的姿态buff。攻击时,玩家获得1张静电。
### 骑马枪手 ### 骑马枪手
【冲锋X】:受到或造成的伤害翻倍并消耗等量的冲锋。 【冲锋X】:对自己施加的姿态buff受到或造成的伤害翻倍并消耗等量的冲锋。(额外伤害不会消耗姿态)
### 沙虫王 ### 沙虫王
召唤幼体沙虫 召唤幼体沙虫
每当玩家弃掉一张牌,恢复1生命 玩家弃掉疲劳时,恢复10生命
### 沙漠守卫 ### 沙漠守卫
@@ -4,7 +4,7 @@ type EncounterDesertTable = readonly {
readonly type: "minion" | "elite" | "event" | "shop" | "camp" | "curio"; readonly type: "minion" | "elite" | "event" | "shop" | "camp" | "curio";
readonly name: string; readonly name: string;
readonly description: string; readonly description: string;
readonly enemies: readonly [readonly enemy: EnemyDesert, readonly bonusHp: number]; readonly enemies: readonly (readonly [enemy: EnemyDesert, bonusHp: number])[];
readonly dialogue: string; readonly dialogue: string;
}[]; }[];
+1 -1
View File
@@ -3,7 +3,7 @@ import type { EffectDesert } from './effectDesert.csv';
type EnemyDesertTable = readonly { type EnemyDesertTable = readonly {
readonly id: string; readonly id: string;
readonly initHp: number; readonly initHp: number;
readonly initBuffs: readonly [readonly effect: EffectDesert, readonly stacks: number]; readonly initBuffs: readonly (readonly [effect: EffectDesert, stacks: number])[];
readonly initialIntent: string; readonly initialIntent: string;
}[]; }[];
@@ -6,7 +6,7 @@ type EnemyIntentDesertTable = readonly {
readonly id: string; readonly id: string;
readonly nextIntents: readonly EnemyIntentDesert[]; readonly nextIntents: readonly EnemyIntentDesert[];
readonly brokenIntent: readonly EnemyIntentDesert[]; readonly brokenIntent: readonly EnemyIntentDesert[];
readonly effects: readonly ["self" | "player" | "team", EffectDesert, number]; readonly effects: readonly (readonly [target: "self" | "player" | "team", effect: EffectDesert, value: number])[];
}[]; }[];
export type EnemyIntentDesert = EnemyIntentDesertTable[number]; export type EnemyIntentDesert = EnemyIntentDesertTable[number];
@@ -9,7 +9,7 @@ type HeroItemFighter1Table = readonly {
readonly targetType: "single" | "none"; readonly targetType: "single" | "none";
readonly price: number; readonly price: number;
readonly desc: string; readonly desc: string;
readonly effects: readonly ["self" | "target" | "all" | "random", EffectDesert, number]; readonly effects: readonly (readonly [target: "self" | "target" | "all" | "random", effect: EffectDesert, value: number])[];
}[]; }[];
export type HeroItemFighter1 = HeroItemFighter1Table[number]; export type HeroItemFighter1 = HeroItemFighter1Table[number];
@@ -5,7 +5,7 @@ type StatusCardDesertTable = readonly {
readonly name: string; readonly name: string;
readonly desc: string; readonly desc: string;
readonly unplayable: boolean; readonly unplayable: boolean;
readonly effects: readonly ["self", EffectDesert, number]; readonly effects: readonly (readonly [target: "self", effect: EffectDesert, value: number])[];
}[]; }[];
export type StatusCardDesert = StatusCardDesertTable[number]; export type StatusCardDesert = StatusCardDesertTable[number];