← 回到作品集 小塔 / MINISPIRE

系统原型 · Unity 2022.3 · v0.2

小塔 / MINISPIRE:数值设计与构建笔记

本文记录《小塔》的数值体系与构建思路。所有关键数值都从一条统一基准线推导而来, 并经过 3000 局自动对战的验证。文中也保留了若干通过数据才暴露出的设计问题。

「不要一小时的塔,要二十分钟的塔。」
这是项目的第一条约束,也是所有减法决策的依据。它直接排除了多角色、遗物、事件、商店和元进度, 因为这些系统都会显著拉长单局时长。
01 / 怎么玩

三层循环,三种决策密度

玩家扮演持灯者,在 21 层的塔中向上推进。每层选择一次行动(战斗 / 获取奖励 / 休整), 每回合用 3 点能量打出 0 至数张手牌。敌人下一回合的行动意图始终公开显示, 因此任何一次失败都能定位到具体的决策失误,而非归因于随机性。

层级时长玩家在做什么决策密度
单回合20–40 秒 3 能量怎么分配:全打出去还是留能量买甲;先上脆弱还是先打输出 高(每回合 3–5 次微决策)
单场战斗3–6 回合 要不要为了长期收益吃这一下伤害;多怪时先杀谁 中
单局18–28 分钟 走精英拿好牌还是走安全路线;卡组要不要变厚;篝火回血还是升级还是删牌 低,但权重最高

三层结构并非平均用力。决定最终结果的实际上是第三层(路径选择),但玩家在前两层投入的时间最多, 因此前两层必须低门槛、可逆,才能使后层的决策显得有意义。

02 / 设计地基

五条支柱,和一条可被验证的假设

五条支柱是功能取舍的判据。每当考虑新增系统,先确认它服务于哪一条支柱;若无法对应,则不加入。

P1

少量高权重决策

一局只让玩家做二十次左右真正影响结局的决定,其余时间在执行。决策太多,等于没有决策。

P2

组合可读

任何一套连招都要能被一句话说清。说不清的组合,玩家下一局没法复用,也就不会觉得自己「懂了」。

P3

失败可归因

意图明牌。输了必须能指出「我第几回合打错了」。做不到这一条,难度就只是折磨。

P4

单局 20 分钟内闭环

时长是硬约束不是期望值。它反过来决定了层数、战斗密度和卡组厚度。

P5

每张牌有理由

没有为了凑数的牌。一张在任何情况下都不该拿的牌,应该被删掉而不是被调数值。

Fun Hypothesis

核心假设(Fun Hypothesis):玩家发现「两张普通牌连用的收益高于分别使用」时,会形成一次可复述的理解。

这一假设直接约束了数值结构:若每张牌都线性且独立收益,就不会出现「组合更划算」的情况。 因此卡牌中必须保留乘法型增益位(力量、脆弱、连击),并且这些增益位要便宜到「用两张牌换取一次放大」在数值上成立。

03 / 数值锚点

先定一条基准线,其余全部由它推出

数值膨胀通常源于孤立的局部调整(例如「这张牌偏弱,加 2 点」)。为避免这种情况, 需要建立一条所有卡牌共同参照的基准线,作为每次微调的依据。

1 费 = 6 伤

「打击」是全场唯一不参与平衡讨论的锚点。其余攻击牌均相对其偏移: 2 费 14 伤为溢价(每费 7 点,代价是节奏变慢、容易卡手), 0 费 5 伤为折价(每费收益更低,价值在于填补第 3 点能量的空档)。 任何偏离基准线的设计都必须有明确理由,否则只是无序的数值噪声。

从这条线推出的四条硬账

3 能量 × 6 伤 ≈ 18,实际 ≈ 17

每回合有效输出

3 点能量中总有一部分必须用于获取护甲。因此计算敌人血量时应按约 17 点计,而非 18 点;这一点的差异在 6 回合中足以造成一次空打。

75 + 4 × 26 = 179

全程可支配血量

75 点初始生命,加上 4 次篝火回复(约 26 点)。这是玩家整局的血量预算,而非每场可重置的血条。

17 × 6 ≈ 100 → 上限 88–96

精英的血量上限

精英按「玩家 6 回合可解」设定上限,同时其 5 回合内的输出不能超过玩家的承受力。原值 118–145 在数学上不可解,而非单纯偏难。

单次意图 ≤ 最大生命 × 50%

单次伤害封顶

超过该阈值后防御牌失去意义,玩家只能硬承伤害,P2「组合可读」便不成立。多怪同回合时会错开重击时机,避免集体爆发。

核心常量

项值为什么是这个数
最大生命75能被 3 整除;一场普通战吃 2 次意图后仍有喘息余地
每回合能量3刚好打出 2–3 张牌 —— 既能组合,又不会让手牌全部作废
每回合抽牌5手牌 5 张、能量 3 点:必然有取舍,但不至于完全没得选
手牌上限10防止「抽牌流」把屏幕塞满,也保护布局
总层数2113 场战斗 × 5.6 回合 ≈ 20–30 分钟,落在 P4 内
篝火回血30%唯一标过 [PLACEHOLDER] 的数,也是唯一能整体调难度的旋钮
卡组下限5「遗忘」删到 5 张就锁住 —— 循环牌必须留出抽牌堆余量

费用曲线:刻意做成单峰

0 费6
1 费33
2 费17
3 费4
不可打出2

1 费占一半以上:3 点能量的回合里,玩家天然能打 3 张牌,组合的可能性最多。 3 费只有 4 张 —— 它们的作用是「占满一整回合」,属于节奏牌,不能多。

04 / 卡组构成

62 张牌,按证据分组

起始卡组由 5 张打击、4 张防御和 1 张涌泉组成,共 10 张。整局大约获得 15 张新牌,并通过「遗忘」删去若干。 因此真正的构筑空间在于「加什么」与「删什么」,而非堆满牌库。

攻击26
技能25
能力9
状态2
普通26
罕见22
稀有12
特殊2

点开任意一张,看它升级后是什么

62 / 62
05 / 敌人与遭遇

意图公开,且已计入玩家状态

敌人头顶显示的数值并非数据表中的基础值,而是已计入力量、弱化、脆弱等状态后的最终值。 这一点很关键:若显示基础值,玩家需在脑中复算,P3「失败可归因」便无法成立。

AI 只有三种模式:Loop(固定循环,可以背下来)、Weighted(权重随机,不可完全预测)、 Phase(生命降到阈值切阶段,换一套意图)。多怪同回合会软错开,避免一次集体重击直接结束游戏。

分级数量血量区间设计约束
普通1126 – 503 回合内可击杀(26 HP 的史莱姆是第 1 层的固定教学遭遇)
精英488 – 966 回合可解;单次意图不超过玩家最大生命的 50%
Boss1152生命 50% 转二阶段,换一套意图 —— 后半场是另一道题

普通怪 11 种、遭遇 25 组,按 Early(7)/ Mid(7)/ Late(6)/ 精英(4)/ Boss(1)分带,按层数加权抽取。 按层数换带,是为了让第 18 层的杂兵和第 3 层的不一样 —— 否则后期只剩血量在涨。

06 / 关卡结构

21 层,每层 1 个或 3 个节点

三张手工模板各含 21 层、47 个节点。单节点层为强制战斗,三节点层为分支选择,两者交替出现以控制节奏。 以下为「裂隙之径」的实际排布:

01
02
03
04
05
06
07第一次岔路
08
09
10
11难度墙
12
13
14
15
16
17难度墙
18
19
20Boss 前休整
21六面之影

第 20 层为什么改成篝火

改版前,243 局未通关样本中有 53% 死于 Boss,而玩家在第 20 层无任何恢复手段—— 即胜负在进入第 20 层时已由此前累积的伤害决定。

这违反 P3:玩家失败却无法指出「本可以怎么做」。因此第 20 层由宝藏改为篝火, 确保 Boss 前必然存在一次准备决策(回血 / 升级 / 删牌)。

地图战斗宝箱篝火精英Boss节点
裂隙之径1511128147
苔沼回廊1413118147
六面阶梯1612108147

三张图节点数完全相同,仅分布不同 —— 这样「按图拆分通关率」才有可比性。 若节点数也不同,通关率差异便无法区分是结构问题还是内容量问题。

07 / 怎么验证

3000 局自动对战,三种打法

设计文档设定了两个量化目标:无脑打法通关率不超过 5%,新手打法通关率在 40–60% 之间。 在缺乏批量模拟手段时,这类目标只能依赖人工试玩,而人工试玩 200 局并不可行。 因此先实现模拟器,使该约束首次可被实际检验。

打法规则通关率平均到达层单局回合平均拿牌
无脑 · 打最痛盲走,闭眼拿奖励 0.0%10.725.67.9
新手 · 攻防取舍看血量选路,按稀有度拿奖励 56.9%19.659.714.8
随机看血量选路,随机拿奖励 2.6%13.949.310.3

无脑打法 0% 并非「过难」,而是证明仅靠打出高数值牌无法获胜—— 护甲、能量、抽牌等不直接产生伤害的动作必须被合理使用。这正是 P1 与 P2 期望的结果。 随机打法 2.6% 作为下界参照:完全随机决策仅能推进至约第 14 层。

死在哪:1294 次阵亡的分布

六面之影354
铁誓骑士151
三相哨卫151
哥布林头目127
掠劫小队110
毒与翼83

Boss 占 27.4%、三个精英合计 33.2% —— 死亡集中在被设计为「墙」的节点,而非散落在普通战斗中。 这是分布形态上的通过条件:若普通战斗也开始大量致死,说明中间层的血量预算失衡,而非 Boss 偏难。

每次改动背后的算式(不是拍脑袋)

改动真实原因
精英 HP 118–145 → 88–96 硬账算不过来:玩家每回合实际输出约 17,130 HP 要打 8 回合,而精英 5 回合的输出就超过 75 点生命的承受力。这是数学上打不过。
战斗密度 16 场 → 13 场 血量预算算不平:可支配血量约 179,摊到 16 场平均每场只剩 11 点,而精英一场就要吃 25 以上。这直接表现为第 16–19 层扎堆阵亡。
Boss 260 → 152 260 血按每回合 17 输出要打 15 回合,而玩家的血量只够撑 6–8 回合。分四次降,每次降完重跑一遍。
第 20 层宝藏 → 篝火 53% 的失败死在 Boss,而进 Boss 前没有任何恢复手段 —— 胜负在踏进 20 层时就定了,违反 P3。
篝火回血 30% → 35% → 30% 第一次上调是因为 30% 时通关率 39.4%、阵亡均匀散布在 11/17/18/19/21 层 —— 这是全局血量偏紧的特征,篝火是唯一的全局杠杆。后来加「遗忘」把通关率推到 64.7%,又把它回调到 30% 对冲。

复盘:一次自己纠正自己的测量

第一版废牌探测仅统计「每张卡被选取次数」,垫底名单为 pwr_avatar(5 次)、 skl_fortify(4 次)……初看可直接删牌。但该统计存在三个缺陷:

  1. 没有分母。被拿 5 次,是「没人要」还是「压根没出现几次」?补上出现次数后才看清:pwr_avatar 的出现选中率是 100%(太稀有),真正的低分是 skl_fortify 的 2.7%。同一份数据换一个分母,结论从「删这张」变成「删那张」。
  2. 样本量不够。200 局里 atk_strike 被提供 240 次、选中 0 次 —— 概率上不可能。隔离探针测出它的真实选中率是 11.9%,和防御牌同档。把局数提到 3000 才稳定下来。
  3. 指标测错了对象。按稀有度分组后出现三组完全不重叠的断层:普通 7–14%、罕见 48–62%、稀有 87–98%,中间一张卡都没有。这说明 pick_rate 测的是稀有度,不是卡牌质量 —— 跨稀有度排名,等于把 26 张普通牌全判成废牌。

现有判据为同稀有度带内的相对指数(1.0 = 该带平均): 普通 1.9×、罕见 1.3×、稀有 1.1× 的极差范围内无离群卡。 经验:比值型指标必须同时报告分母;离散比值在大样本前不能用于排名;若指标在分组后出现干净的断层,断层通常来自评价机制本身。

08 / 只靠数字才发现的

三个「仅通过数据才能发现」的缺陷

这三张牌在数据表中均表现正常,单凭代码审查也难以发现问题—— 需将内容生成器与模拟器串联运行后才会暴露。

符号翻转

穿刺:升级后反而给敌人加攻

它的效果是「造成伤害并降低敌人 1 点力量」,升级增量写成了 [9, 1] —— 数字没写错,符号错了。

怎么发现的:批量模拟里这张牌的升级版本表现反常(拿了升级反而更容易死)。核对发现升级后是「+1 力量」,等于给敌人加攻。

修法:改成 [9, -1],并在内容自检里加一条「减益类增量的符号必须为负」。

空操作

涌泉之印:升级了什么都没发生

基础效果是「获得 1 点能量」,升级增量也是 [1] —— 数值和基础值相同。 所以它可以被升级,但升级没有任何效果,而卡面还会显示「已升级」。

怎么发现的:检查「每张牌升级后的期望收益」时,有一项差值恒为 0。全表扫一遍,只有它一个是 0。

修法:升级增量改为 2,并在编译期的合同检查里加一条「升级增量不得与基础值完全相等」。

从未实现

壁垒永存:整张牌的专属效果不存在

卡面写着「护甲不再每回合清零」,代码里 KeepBlockAcrossTurns 这个字段 只有读、没有任何写入点 —— 也就是说这个效果从来没有被执行过。

后果是它成为一张严格劣势卡:同为稀有、2 费,「完璧」提供 22 点护甲,它仅提供 8 点。 在任何场合都无法为其辩护。

怎么发现的:不是模拟器发现的,是「每张牌为什么存在」的核对(P5)问出来的 —— 如果它只有 8 点甲,凭什么和 22 点的牌同价?顺着这个问题去查字段,发现没人写它。

09 / 边界

未实现项与待确认问题

以下内容并非「后续补充」,而是本版本主动舍弃的设计:

各项单独看均合理,但叠加后会把单局时长从 20 分钟拉向 1 小时。单局时长是 P4 约束,本版本不允许对此让步。

还不确定的三个问题

  • 「单局 30–40 回合」这个口径自相矛盾。21 层里只有约 13 层是战斗,若按字面 30–40 回合,每场只能打 2 回合 —— 与「普通怪 3 回合内可击杀」直接冲突。现在以时长为验收口径:59.7 回合 × 20–40 秒 = 20–30 分钟。
  • 精英血量下调后的份量感。数值上原值不可解,但降到 88–96 之后,精英是不是「不够吓人」了 —— 这个只能靠手感,模拟器答不了。
  • 要不要做元进度。暂定不做。它会给玩家一个「输也有收获」的理由,但也会让「二十分钟一局」变成「刷到够强为止」。

在加入任何新系统前,先确认它创造了何种新的玩家决策;若无法回答,则不加入。