解决方案
在 GDC Europe 上发言时,《巫师3》高级玩法设计师 Matthew Steinke 透露,游戏的核心系统之一在发售前数月几乎还不存在:经济、制作和物品栏“零散且不完整”,以至于“项目里已经没有时间在截止日期前完成所有事情了。”
Steinke 从一张“消费循环”的状态图出发——战利品为更好的装备提供资金,更好的装备解锁更艰难的战斗和更多战利品。手工猜测草药、垃圾和书籍的价格很快就失败了,于是他构建了一个公式,将每件物品的战斗属性评分汇总为一个总体评级,把物品归入九个概括性类别,并使用多项式最小二乘法绘制每个类别的价格随品质变化的曲线。
最初的曲线不符合游戏写实的基调:在低端,品质的小幅提升会让价格骤升。他重新调整了曲线,使其缓慢增长直至终局,因此最终的遗物剑感觉像一笔真正的财富。然后是实用的技巧:通过预先计算系数并将其存储在表中,价格可以在运行时程序化生成——无限多的点精确拟合曲线,硬编码值被移除,一整类 bug 被消除。
取得了什么
用多项式最小二乘法绘制每个物品类别的价格变化曲线,然后将系数存储在表中,使价格在运行时自行生成。
为什么有效
已经没有时间为一个庞大开放世界中的数千件物品手工定价。
猜测的价格导致物品类别之间的关系不连贯。
曲线直接表达了设计意图:前期稀缺,后期富有。
运行时生成意味着新增或模组物品会以一致的方式自行定价。
可以应用什么
当你无法及时手工调整一个系统时,将其建模为曲线并交付系数——数学会生成无限内容,并删除导致 bug 的硬编码值。
后续
《巫师3》于 2015 年 5 月发售,曲线驱动的经济系统将其制作、物品栏和战利品系统串联起来,而 Steinke 的 GDC Europe 演讲成为关于截止日期恐慌如何催生这一方法的公开记述。
从这里,追溯依据
参考来源
- How The Witcher 3's economy was saved by polynomial least squares Ars Technica · arstechnica.com ·