为什么写出了完美的开发文档,却做不出一个好玩的游戏我最近在复活一款古早的同人游戏《宇宙群英传》,进行Web重构的时候,结结实实撞上了一个特别拧巴的工程学悖论。通过最聪明的大模型写得滴水不漏的移植技术规范,把原版所有的数值逻辑一个字节一个字节地抠过来,连小数点后两位都没差。结果做出来的东西,说难听点,根本不像个波澜壮阔的策略模拟器,更像个冷冰冰的项目管理后台。 我盯着屏幕看了好久,明明所有功能都对,所有bug都修了,可就是一点都不好玩。 为什么文档写得越完美,做出来的游戏反而越没魂?我想了好久,才慢慢摸出点门道。
逻辑的“骨相”撑不起体验的“血肉” Claude的重构文档写得无可挑剔,从C++的CGame::RunARound到Web端的回合结算流程,每一步都标得清清楚楚。但我后来才明白,工程思维追求的逻辑闭环和效率最大化,其实从根上就跟游戏要的情绪起伏是拧着的。 代码里跑一行 population += 20,数据库里看一点问题都没有。但在玩家眼里,这多出来的20个人,是你推行生育政策的成果,还是核冬天里侥幸活下来的难民?没有任何叙事反馈的话,这些跳动的数字,跟Excel表格里的单元格没什么区别,只是毫无意义的噪音。 我记得自己测试的时候,看着满屏的进度条,机械地点击下一回合,只觉得麻木。 被我们“优化”掉的,恰恰是游戏的灵魂 原版用MFC框架写的,有一大堆弹出来就挡住整个屏幕、必须点确定才能继续的模态对话框。说真的,我以前做前端的时候,一直觉得这种弹框是十大糟粕之首,又土又打断操作,是必须优化掉的东西。 所以重构的时候,我为了追求Web端的流畅体验,大手一挥,把所有的剧情冲突全塞到了右上角的历史日志里。玩家爱看不看,不看也不影响你点下一个回合。 结果我玩这个游戏,就完全没有反馈感,不像之前下一个弹出来的是基地沦陷的噩耗,还是人类文明的转机,就是手放在鼠标上不敢点下去的那两秒,才是三体世界观里最让人窒息的地方——那种被智子锁死、被命运掐住喉咙的无力感。 而所谓的“不打扰玩家”的优雅,把这种感觉彻底掐死了。现在连三体舰队到太阳系了,都只是右上角飘一个小红点,你甚至可以假装没看见,继续点你的科技树。 太“规范”的随机,就不是随机了 还有一个我之前完全没意识到的问题:我和ai在修复原版bug的时候,不小心把那些“不规范”的随机事件也给修没了。 我们的REBUILD_SPEC文档里,列了整整17页要修复的原版缺陷,其中就包括很多“数值波动不符合预期”的随机变量。我们把所有的概率都校准到了最合理的范围,把所有的系统都做成了可预测的进度条。 可策略游戏的魅力,不就在于那些不可预测的变数吗?是突然响起的智子预警,是执剑人交接时那一下惊心动魄的威慑度波动,是你赌上整个文明的运气,按下发射按钮的那一刻。 当所有的结果都在预期之内,当执政官的每一个决策都只会带来线性的反馈,那这个位置还有什么意义?你不过是个只会点鼠标的机器人罢了。 结语 《宇宙群英传》的下一个阶段,我们要彻底反过来,从“工程驱动”转向“情绪驱动”。我们要把那些被我们删掉的强制弹框加回来,要给每一个数值的跳动加上对应的视觉和叙事反馈,要把那些被遗忘在INI文件角落里的、乱七八糟的随机事件,一个一个都激活。 我们要做的不再仅仅是修复一个17年前的老游戏,而是要亲手重构那个让人头皮发麻的、充满危机的星战场。