下载 App
《鼓令·无名》开发者日志 · 03
1 小时前1 浏览
《鼓令·无名》开发者日志 · 03 —— 士气是一本账
2026-10-16 | 距上传截稿还有两天 | 第 3 期


〇 先说清这是一款什么游戏
《鼓令·无名》是一款卡牌构筑 + 群体行为涌现的 Roguelike。你是军中的「令史」——不是将军。
它有三条铁律,而这三条是全部设计的源头:
- 只写局部规则。每个兵只知道身边几十米内的事。没有全局视野,没有战术 AI。
- 你不能指挥任何单位。你能做的只有鼓令、旗语和秘策——而这些也只是局部扰动。
- 胜负不是被打出来的。一场仗的结束方式不是"谁杀光了谁",而是谁先崩。
第三条是这一期日志的全部主题。


一 · 本期进展
1. 构筑,终于真的能进战场了
先说一个我们刚刚发现的、存在了很久的问题。
这款游戏有一条核心乐趣:你在战役里一路攒牌、买牌、换牌,然后带着这副越攒越厚的卡组去打后面的硬仗。
而我们检查后发现:你攒的牌,一张都不会出现在战场上。
原因是这样的——战役里有一个「卡组」,战斗里有一个「本场牌库」。后者应该由前者算出来。代码里那个"算出来"的函数写得好好的,也测过,返回的牌库张数从 20 涨到 34,一切正常。
只是没人调用它。
于是战斗永远用那副固定的开局 20 张。你买了 14 张牌,它们静静地躺在卡组里,从头到尾一次都没上过场。
这类问题最难的地方不是修它——修它只改了一行。难的是发现:因为"卡组张数在涨"是真的、"函数能算对"是真的、"存档里也有那些牌"也是真的。每个环节单独看都对,而线没接上。
现在接上了。我们做了一次端到端验证:走一役、拿一张奖励牌、然后打印出下一场战斗牌库里的实际牌名——它在里面。这才算数。
教训(我们写进内部纪律了):一条通道算不算通,判据不是"数据到了中间层",而是"通过它得到的东西,在下一场战斗的牌库里出现"。
2. 无尽「不退」与每日「今日之阵」接上了
这两个模式之前只做到"能进界面、能看到说明"——看板。从看板到真的开局,那一跳不存在。
现在两条都通了:
- 无尽「不退」:通关一次后解锁。连续作战、不换章,每 3 战出精英、每 6 战出 Boss;难度前 10 战线性爬,之后转超指数——终点是数值溢出,而不是你被打死。这是"不退"这个名字的来处。
- 每日「今日之阵」:种子取日期,所以同一天所有人是同一局。记录最近 30 天,成绩只记第一次。
顺手还救活了两条"永远不可能达成"的成就——它们依赖的两个计数器,从来没有人往里面写过数。
3. 40 项成就全部过了一遍
我们把 40 项成就的达成条件逐条对了一遍,发现一个问题:其中大部分依赖的统计字段,全都没有人被写入过。
也就是说,那些成就永远不会亮——而它们在界面上和"还没达成"长得一模一样。
现在 30 个字段的写入点都接上了(在打牌成功时、在战斗结算时、在图鉴收录时……),可达的成就从个位数涨到二十多项。
4. 士气,变成了一本账
这是本期最有意思的一部分。
以前我们只知道"我方崩了",而说不出为什么。于是这周做了一件事:把一次战斗里双方士气的每一刻变化,按来源逐项累加,然后验证"各项之和 == 实际变化"。
8 组全部对上了。 下面这张图就是其中两场的账(左侧是损失,右侧是回复):
[图片:暂不支持黏贴,请手动导入]
一眼能看出三件事:
- 「裹挟」是我方最大的失血项——节点 23 是 −6586,节点 30 是 −14750。
- 而敌方的「裹挟」几乎是 0(节点 30 干脆是 0)。两边差了 54 倍。
- 「多数决」在两边符号相反:我方是 −920 / −2337(失血),敌方是 +1561 / +2893(回血)。
这第三行是整件事的钥匙。下面解释。


二 · 问题与风险
1. 第三章:7 个战斗节点,一个都过不去
这是我们这一期最大的问题,而且它还没有解决。
先说清"过不去"是什么意思:我们用一个不看场面、只知道按稀有度从高到低出牌的最笨的 AI,和一个更笨的"完全不出牌"策略,各跑一遍全部 21 个战斗节点。
结果:
| 章 | 不出牌 | 最笨 AI |
|---|---|---|
| 第一章 | 6 / 7 | 6 / 7 |
| 第二章 | 1 / 7 | 4 / 7 |
| 第三章 | 0 / 7 | 0 / 7 |
第三章没有任何一个节点能过,而且连"完全不出牌"和"认真出牌"的结果完全一样——说明在那里,出牌已经不起作用了。
2. 我先把四个"旋钮"拧了一遍——全部无效
第一反应当然是"是不是太难了",于是做了四个隔离实验(全部在测试夹具里做,不动正式数值):
- 只加时长(+3 刻 / +6 刻 / +10 刻)
- 只降敌方士气地板(−5 / −15)
- 只提我方士气地板(+5)
- 只削敌方兵力(−10%)
7 个节点 × 8 种改法 = 56 格,没有一格能把任何一个节点翻过来。
其中有些格甚至逐位完全相同——改了跟没改一个数。
这说明:我一开始找的方向就是错的。 我以为这是"数值难度偏高",而实际上那几个参数根本不在那三个节点的因果链上。
有个小插曲值得记:实验做完后我先怀疑的是"夹具根本没生效"。所以又单独验了一遍——把每一格里"实际生效的值"打出来看(时长确实从 17 变到 23、敌方兵力从 185 削到 166)。确认夹具生效之后,"56 格全无效"才成为一个结论,而不是一个事故。
3. 然后我们看了曲线——问题不是"被打崩",是"被磨"
[图片:暂不支持黏贴,请手动导入]
这是第三章四个节点、三个策略下,我方溃散比例逐刻的变化。红虚线是判负线 45%。
请重点看两件事:
第一,前 4 刻全是 0%。 没有一个节点是"开局就崩"的。所有曲线都是从第 5 刻左右开始持续爬升。
第二,所有线都是单调向上的——不是被打了一记重拳掉下去,而是一直在漏。
而同一张图里没有画出来的另一半是:敌方的溃散值自始至终接近 0(节点 30 到最后还是 0.0%)。
把这些和第一节那本账放在一起,答案就出来了:
这不是"难度太高",而是"我方士气一直在单方面流失,而敌方几乎不流失"。
一场仗的判负是"谁先过线"。而如果对面根本不往那条线走,那你的时间再长也没用。
4. 真正的答案:不是数值偏了,是增益
第一节那张账的第三行是关键:
| 我方「多数决」 | 敌方「多数决」 | |
|---|---|---|
| 节点 23 | −920 | +1561 |
| 节点 30 | −2337 | +2893 |
同一个机制,在两边的作用方向相反。
「多数决」是我方设计里的一条局部规则:一个兵的士气,会受身边邻域里多数人状态的牵引。 顺风时它把人往上拉,逆风时它把人往下拖。
于是就有了这个结构:
我方士气低 → 邻域多数决判"溃逃占多数" → 裹挟 −6586 → 士气更低 → 判得更狠 → …
敌方士气高 → 邻域多数决判"镇定占多数" → +1561 → 士气更高 → …
这是一个正反馈。 而敌方那边,同一个机制在当负反馈用——它是稳定器,而在我们这边是放大器。
所以"改一个值没用"就说得通了:我改的是输入,而问题是增益。
5. 风险
- 风险一:这是设计意图还是副作用? 我们还没确认。「雪崩式崩溃」如果是有意为之,那它是这款游戏最漂亮的部分之一;如果是没人预料到的副作用,那它需要被驯服。我们下一步第一件事就是回去翻设计稿,确认当年到底有没有写下"崩溃会连锁"这句话。
- 风险二:起点差是哪来的? 敌方初始士气用的是 50 + 1.5 × 节点号,而我方固定 55。于是前期我方领先 3.5 点,到第三章落后 26.5~40 点。那个放大器的存在,让这点差距变成了"必败"。
- 风险三:改哪个、改多少,我们还不知道。 放大器那条路是锁定的(它是一期一期的平衡基准,不能动),所以能动的只有起点公式。而"动多少才够"取决于放大倍率——那个数我们这一期还没测出来。


三 · 下期计划
- 先测放大倍率:把起点差依次设成 +0 / +10 / +20 / +30 / +40,看终局差是多少倍;再分别把「裹挟」和「多数决」单独关掉,看哪一项是启动器、哪一项是加速器。这决定了后面能不能改对。
- 拿三个候选公式跑一遍全部 30 个节点:一条线性降系数、一条"前 12 关不变、之后收窄"、一条收得更狠。判断标准不是"第三章能不能过",而是第一章的手感必须一模一样——那是教学章,不该被后面的调整波及。
- 把 4 张"效果对不上"的牌改对。事件里给出、但之前在卡表里根本没有定义的 15 张牌,这一期已经全部补上、也都能打出来了。但其中 4 张目前只是近似——比如「淬」的设计是"本刻内1 张攻击牌伤害 +4",而我们写成了"全局限时加成";「受降书」的设计是"敌方意图伤害 −3",我们写成了"意图延后"。能打出来不等于打出来是对的。
- 新手引导。这个必须最后做——因为引导要教的那套局部规则,现在还在改。


四 · 说在最后
这一期最有价值的其实不是修了什么,而是学会了两件事:
- "改一个值"能解决的问题,和"机制是正反馈"的问题,长得一模一样——但只有后者会让你的前四次尝试全部白费。
- 当一份数字能对上(各项之和 == 实际值),它就从"解释"变成了"账"。而账可以往下查,解释不能。
我们会把第三章这件事在下一篇日志里给出结论——是驯服那个放大器,还是重新设计起点台阶。
《鼓令·无名》还在做,欢迎预约,也欢迎在评论区告诉我:你觉得"部队会雪崩"这件事,应该被保留,还是被压住?


本期日志含 2 张数据图(均由游戏内实际运行数据生成,未做修饰)。














