下载 App

《鼓令·无名》开发者日志 · 03

1 小时前1 浏览

《鼓令·无名》开发者日志 · 03 —— 士气是一本账

2026-10-16 | 距上传截稿还有两天 | 第 3 期
horizontal linehorizontal line

〇 先说清这是一款什么游戏

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

一 · 本期进展

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(回血)。
这第三行是整件事的钥匙。下面解释。
horizontal linehorizontal line

二 · 问题与风险

1. 第三章:7 个战斗节点,一个都过不去

这是我们这一期最大的问题,而且它还没有解决。
先说清"过不去"是什么意思:我们用一个不看场面、只知道按稀有度从高到低出牌的最笨的 AI,和一个更笨的"完全不出牌"策略,各跑一遍全部 21 个战斗节点。
结果:
章不出牌最笨 AI
第一章6 / 76 / 7
第二章1 / 74 / 7
第三章0 / 70 / 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 点。那个放大器的存在,让这点差距变成了"必败"。
  • 风险三:改哪个、改多少,我们还不知道。 放大器那条路是锁定的(它是一期一期的平衡基准,不能动),所以能动的只有起点公式。而"动多少才够"取决于放大倍率——那个数我们这一期还没测出来。
horizontal linehorizontal line

三 · 下期计划

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

四 · 说在最后

这一期最有价值的其实不是修了什么,而是学会了两件事:
  • "改一个值"能解决的问题,和"机制是正反馈"的问题,长得一模一样——但只有后者会让你的前四次尝试全部白费。
  • 当一份数字能对上(各项之和 == 实际值),它就从"解释"变成了"账"。而账可以往下查,解释不能。
我们会把第三章这件事在下一篇日志里给出结论——是驯服那个放大器,还是重新设计起点台阶。
《鼓令·无名》还在做,欢迎预约,也欢迎在评论区告诉我:你觉得"部队会雪崩"这件事,应该被保留,还是被压住?
horizontal linehorizontal line
本期日志含 2 张数据图(均由游戏内实际运行数据生成,未做修饰)。
别再烧积分了!从每次 2000 到每次 50 的血泪经验截图
别再烧积分了!从每次 2000 到每次 50 的血泪经验
适用场景:所有在用 TapTap Code 开发游戏的小白 难度:★☆☆☆☆ 背景最近群里总有人"炫耀"一次操作花了几千积分,说实话这不是值得高兴的事——这是在告诉所有人你的开发方式有根本性问题。我也走过这条弯路,所以来说说怎么改。 积分消耗的本质是什么积分 = AI 处理的 token 数量 = 你发给 AI 的内容 + AI 回给你的内容所以烧积分的本质只有两种: 你让 AI 做了大量无效/重
精华
74 赞
23 回复
开发者日志04截图
开发者日志04
开发者日志04 依旧同步一下我们的美术 已经到赛程中后期了,大家都在全力加速中啊,我们参赛版的文案设定已经完善得大差不差了。策划发力了! p1是新场景的道具 p2是新场景但是道具还没整完。。 美术的话我还是有很多场景和道具的灵感想画的,就是我搓得实在是太太太慢了。 希望我们最后的参赛版都能有我想呈现的场景。 还有就是造字给我造脑雾了。。 还有6天希望我们能做到! (昨天在xhs上发了忘记在
03:06
为了不被斩杀,我只能做到这些了截图
为了不被斩杀,我只能做到这些了
之前一直申请不到计划3,之前说太花哨,后面说体量完成度不足,在我一番小作文下,编辑终于给了我解答,什么原生质感,玩家开局体验啥的。 本来计划2也够用,准备以后再优化了,结果计划2赠送的积分要砍半了,学生党实在消费不起,于是只能再冲一波计划3了 从周六中午到现在一天半时间,优化了一遍角色卡,战斗卡,还有抽卡界面,优化了新手教程,该说不说确实比之前要舒服些。 前半部分为新版,后半部分为旧版。 明天再次
44 赞
9 回复
【重启绿洲】开发日志02|美术篇:荒漠植物图鉴解析截图
【重启绿洲】开发日志02|美术篇:荒漠植物图鉴解析
#聚光灯gamejam开发者日志 #发现好游戏 #游戏日常 各位新玩家好,欢迎来到荒漠。 书接上回:沙漠,只是因为缺水吗?我们会顺着这个问题,讲讲游戏里地块属性是怎么设计的;再带大家认全八种荒漠植物,说说它们各自的效果和用途;最后聊聊永远让人操心的天气与灾害。 一、沙漠,只是因为缺水吗? 很多人第一反应是:沙漠等于缺水。这个答案只对了一半。 降水稀少确实是荒漠的底色,但真正让生命寸步难行的,是缺
1 赞
《梦之萌:壹》|我的梦境塔防做出原型截图
《梦之萌:壹》|我的梦境塔防做出原型
#开发日记 #塔防游戏 #原创游戏 一直很喜欢有氛围、有故事的塔防游戏,心里也悄悄构思了很久属于自己的小游戏。 我想打造一个独特的梦境世界,以梦境为舞台,那些细碎难言的情绪,都会化作闯入梦境的梦魇。玩家搭建防御塔守护的不止是游戏基地,更是一场纯粹又易碎的美梦。 为了把心里的画面落地,我在最开始创作时就用心打磨,初版就手写了一万多字的完整构想。从世界观剧情、关卡氛围,到美术风格、动画细节、
开发日志2 玩法原型验证与方案调整《左轮牌:铸弹师》截图
开发日志2 玩法原型验证与方案调整《左轮牌:铸弹师》
设计内容简述 核心机制 元素反应规则 网格战场 原型边界 基于网格战场的UI交互(激活规则,相邻反应,各元素的特殊规则) 元素反应规则验证(4元素 数值的相克相生,相生的类型转化) 机制效果验证(4元素对应1机制) 设计目标 通过元素反应+网格战场的组合规则,涌现出有趣惊艳的策略组合,从而强化可玩性和设计创新程度 工作流程与产物 开发流程 使用WorkBuddy完善设计文档,并整合为交付包,补足
《鼓令·无名》开发日志 02截图
《鼓令·无名》开发日志 02
《鼓令·无名》开发日志 02:同一份代码,跑出两个不同的战场 这周遇到一件事,我想先说它。 同一份代码、同一个随机种子、同一个关卡,跑十次——有六次是一个结果,四次是另一个。 一个战场,两个结局。而差别不来自任何设计,来自一张表被遍历的顺序。 【本期进展】 先说做完的: · 战役骨架通了。3 章 × 10 个节点,第一章可以带着事件从头走到尾——战斗、事件、商店、营帐的位置都在。 · 卡池盘完了。
【开发日志 6|存档系统:我踩过的坑】截图
【开发日志 6|存档系统:我踩过的坑】
养成游戏最怕什么?不是 bug,是玩家说一句"我的进度没了"。所以存档这块,我几乎是靠一次次线上问题堆出来的。 现在的架构是两层:本地双槽备份 + TapTap 云存档。游戏内任何资产变动(纸币、蛋、成鸟、鸟群配置)只发一个事件"标脏",由统一管理器做 0.35 秒防抖合并写盘,30 秒一个云端检查点,切后台、退出时立即补一次。目的是防两件事:频繁 IO,和在途写入被中断写坏。 听起来简单,实际翻
开发日志#2截图
开发日志#2
一、本轮目标 沿线房屋上色,去掉通体惨白 单股道改双股道,配双站台、双列车 到终点后可倒车返回,并再次前进 修复终点弹窗无法退出的死锁 二、场景与世界 world/Platform.lua:导出双线横断面常量 AI_LANE_OFFSET=-5.6、CORRIDOR_CENTER_X=-2.8、TUNNEL_HALF_WIDTH=10.4;Get() 支持左侧站台 world/Track.lua:
熬夜2个月游戏从0做到了1,又从1回到了0截图
熬夜2个月游戏从0做到了1,又从1回到了0
8月26日,我不懂编程,不懂设计,从0开始手搓一款回合制挂机游戏。 10月14日,快两个月了,功能全部实现。总算实现了从0-1的过程。 阶段手测还算正常,今天信心满满全栈手测,惊喜地发现,实现过程从1回到了0[表情_豹哭] 因为之前用AI配的底层数值写死了,所有装备和技能要推倒重做。 熬夜1-2个月,实现了从0-1-0的闭环。 看着屏幕,不知道是坚持还是放弃。 大家遇到这种努力全白费的情况,是怎么
1 赞