一款让玩家皈依佛门的游戏。这位玩家曾寄信给开发商,因为他开发的游戏,他明白“众生皆苦,世间无常”。什么样的游戏能让人看穿红尘?矮人要塞(DwarfFortress)!在Roguelike游戏的世界里,你一定不能错过大名鼎鼎的矮人要塞!2006年问世的矮人要塞可以说是“开荒类老游戏”。就连《我的世界》的开发者都表示深受这款游戏的启发。你知道这个游戏背后的开发者是如何制作它的吗?DwarfFortress由TarnAdams(又名ToadyOne)开发,他在20年内编写了700,000行代码!最“现实”的游戏,最理想主义的开发者TarnAdams从2002年开始就在矮人要塞工作,最初只是一个兼职项目。从2006年开始,Adams全身心投入其中,亲自编写了所有代码。在此过程中,亚当斯的兄弟还帮助他根据游戏设计和创作了一个故事。右图是TarnAdams,他目前正在开发具有像素图形和改进的用户界面的版本,可在Steam上购买。在过去的13年里,矮人要塞没有在任何游戏平台上发行,这是因为“亚当斯兄弟”的信念。他们希望这款游戏不同于市面上发售的商业版,矮人要塞也能以10年为单位进行更新。对于这次长更新,兄弟们表示没有任何计划。“想哪儿,就怎么做。”开发出来的游戏不卖钱,稳定的收入从何而来?靠玩家捐款生活!据说,亚当斯兄弟每个月可以有数千美元的捐赠收入,足以维持生计。许多游戏玩家对此表示愤慨,但他们表示,“我们只是不想做商人,赚钱对我们来说没有意义。”他们开发最“现实”的游戏,却是最理想主义的开发者。沙盒游戏《始祖者》,70万行代码,亚当斯兄弟表示,矮人要塞已经持续发展了20年,拥有3种游戏模式。1.要塞模式:玩家帮助一小群矮人从零开始建造一座城市。2.冒险模式:这个模式充满了中世纪的武器和致命的怪物。3.传奇模式(Legendmode):玩家可以体验逐渐演变的精美历史,见证英雄辈出、跨越世代的史诗战争。那么一个人怎么能把这70万行代码敲下来呢?“我尝试一致地命名变量和对象,并留下足够多的注释来提醒自己当我遇到一个代码点时会发生什么,”亚当斯说。有时我需要多次搜索才能找到我想要的线索。当我重温十年未曾接触过的游戏片段时,这种情况经常发生。“在矮人要塞的开发过程中,Adams主要使用了C和C++两种编程语言。为了更容易移植到OSX和Linux系统,Adams使用了OpenGL和SDL作为引擎。所有这些在整个项目中都保持不变,除了SDL所以我们可以做移植。在游戏机制方面,Adams使用的外部数据库不多,但偶尔会选择一些随机的数字源素材——比如Mersennetwister(梅森捻线机),和SplitMix64。其他游戏比如Dwarf要塞会因为算法问题而“消亡”。DwarfFortress使用的是A*算法,速度非常快,但Tarn认为它仍然不够好。通常,开发人员会在地图上添加各种大型结构以简化操作。但是因为矮人要塞的地图非常大,而且会不断变化,使用A*算法只会消耗大量的维护时间。所以塔恩决定通过行走的方式来追踪可达的连通分量。这样一来,即使地图张es很快,很容易更新。虽然更新和维护速度更快,但这种方式仍然有一个缺点:维护组件索引只能用于行走。为了解决这个问题,塔恩进行了一些尝试,但都以失败告终。他注意到一些成功的游戏使用矩形叠加,认为这是一个很好的方法,但他无法确认那些游戏的地图大小和稳定性。根据Tarn的说法,最简单的方法实际上是为飞行生物添加一个新索引。但是因为两个索引需要同时维护,而且其中一个已经够烂了,这对内存和速度影响很大。或者可以跟踪它们的路径属性,但是随着地图的变化,维护起来仍然很困难而且很慢。Tarn表示,在代理和地图的复杂度方面,我们已经尽力支持代理和复杂的地图,所以如果我们想从中得到更多,就必须做出一些妥协。“失败是有趣的!”除了《矮人要塞》,塔恩在过去十几年也尝试过做其他游戏项目。不多,大约90个。但是,有些项目只持续几天,而有些则持续数年。几乎所有这些游戏物品都是其他类型的游戏,但也有一些是DwarfFortress的附属物品,例如MythGeneratorPrototype。虽然幸存下来的项目寥寥无几,但塔恩认为偶尔离开矮人要塞闲逛还是不错的。在这90个“justdoit”项目中,Tarn还考虑过使用其他编程语言。他觉得有些语言可以加快设计速度,所以他觉得应该多学一点脚本语言,多玩线程。但是人,他们都是“想一套做一套”。对于偏爱设计的Tarn来说,既然90个项目都用来钓鱼散心了,那还怎么学编程语言。Bug是所有开发者都逃不掉的坑。在游戏矮人要塞中,塔恩最喜欢的虫子是永远赢不了的醉猫。酒馆里的猫在地板上走来走去,猫爪子沾了很多酒,猫舔着爪子喝醉了。这个bug是因为猫舔爪子吞东西的代码中有一个错误的数字。结果,这个错误使猫表现出酒精中毒的症状。然而,这个漏洞被塔恩利用并添加到有毒生物的设计代码中。
