20年,1人写出70万行代码!沙盒游戏「鼻祖」13年靠玩家捐赠维生
一款游戏,让一位玩家皈依佛教。
这位玩家曾寄信开发者,因其开发的游戏理解了「众生皆苦,世事无常」。
![20年,1人写出70万行代码!沙盒游戏「鼻祖」13年靠玩家捐赠维生](https://s6.51cto.com/oss/202107/30/e41e8c37f2ef72f633ec15104cb12c67.jpg)
究竟是什么游戏还能让人看破红尘?
Dwarf Fortress (矮人堡垒)!
![20年,1人写出70万行代码!沙盒游戏「鼻祖」13年靠玩家捐赠维生](https://s2.51cto.com/oss/202107/30/95bc3e735bb04019a83e3d023a26188a.jpg)
在Roguelike游戏界,你一定不要错过大名鼎鼎的矮人堡垒!
2006年面世的矮人堡垒可以说是「开创类的老游戏」,就连《我的世界》开发者们表示自己深受这款游戏的启发。
你可知这个游戏背后的开发者如何将其建造出来?
矮人堡垒是由Tarn Adams(又名Toady One)一人开发,20年来,亲自写下70万行代码!
最「现实」的游戏,最有理想主义的开发者
Tarn Adams 从2002年开始就在矮人堡垒工作。最初,它只是一个兼职项目。
从2006年开始,Adams一心投入,自己编写所有的代码。
期间,Adams的兄弟还帮助他来设计和创建基于游戏的故事。
![20年,1人写出70万行代码!沙盒游戏「鼻祖」13年靠玩家捐赠维生](https://s5.51cto.com/oss/202107/30/c51279009754b0a10d2714335a836c1c.jpg)
图右为Tarn Adams
目前,他正在开发一个带有像素图形和改进用户界面的版本,可以在Steam上购买。
近13年来,矮人堡垒并未在任何游戏平台上发售,这是因为「亚当斯兄弟」的信念。
他们希望这款游戏和市面上发布的商业版本有所不同,并且矮人堡垒也要以10年为单位,一直更新下去。
对于这漫长的更新,这对兄弟表示并没有任何规划。
「想到哪,做到哪。」
![20年,1人写出70万行代码!沙盒游戏「鼻祖」13年靠玩家捐赠维生](https://s2.51cto.com/oss/202107/30/d10d73701313cbcd89e13489f4b525d3.jpg)
开发后的游戏不卖钱,稳定的收入从何而来?
全靠玩家捐赠维持生计!据说,亚当斯兄弟每个月可以有几千美元的捐赠收入,足以维生。
许多游戏玩家为此愤愤不平,但他们却表示,「我们只是不想成为商人,赚钱对我们来说没有意义」。
他们开发了最「现实」的游戏,却是最有理想主义的开发者。
沙盒游戏「鼻祖」,70万行代码,亚当斯兄弟自述
矮人堡垒至今已持续开发20年,有3种游玩模式。
1、要塞模式(Fortress mode):玩家要帮助一小群矮人从无到有建造城市。
2、冒险模式(Adventure mode):该模式下到处都是中世纪武器和要命的怪物。
3、传说模式(Legend mode):玩家能够体验逐渐演变的精巧历史,亲历充满英雄人物、横跨几代人的史诗战争。
那么仅凭一个人,如何敲下这70万行代码?
Adams表示,「我尝试给变量和对象一致命名,并且留下足够的注释来提醒自己到了一个代码点时会发生什么。有时候我需要多次搜索才能找到想要的线索。
当我去重温一些已经十年没有碰过的游戏片段时,这种情况经常发生。」
在矮人堡垒开发过程中,Adams 主要使用了2种编程语言,C和C++。
为了将其更容易地移植到OSX和Linux系统中,Adams使用OpenGL和SDL来处理引擎问题。
整个项目中,除了SDL以便我们可以做端口之外,所有这些都一直保持不变。
在游戏机制方面,Adams并没有使用很多外部数据库,但是偶尔会选择一些随机的数字原始资料—— 比如梅森旋转算法(Mersenne twister),还有SplitMix64。
其它类似于矮人堡垒的游戏会因为算法问题「夭折」。
矮人堡垒用的是A*算法,速度很快,但Tarn认为还是不够好。
一般而言,为了简化操作,开发者会在地图顶部添加各种大型结构。
但因为矮人堡垒的地图非常大,而且还会不断变化,用A*算法只会耗费大量维护时间。
![20年,1人写出70万行代码!沙盒游戏「鼻祖」13年靠玩家捐赠维生](https://s6.51cto.com/oss/202107/30/e121845ba53a2876b319a32697b19119.jpg)
所以Tarn决定,通过行走来追踪可到达的连接组件。这样就算地图变化再快,更新也很容易。
虽然更新维护变快了,但这个方法还是有缺点:
维护的部件指数只能用于行走。
针对这个问题,Tarn做过一些尝试,但都以失败告终。
他留意到有些成功的游戏用了矩形覆盖,觉得这个方法还蛮不错,但又没法确定那些游戏的地图大小和稳定性。
Tarn认为,最简单方法其实就是为飞行生物添加一个新索引。
但因为两个索引都需要同时维护,而其中一个索引已经够差了,所以这对内存和速度有很大影响。
又或者可以跟踪它们的路径属性,但是随着地图的变化,维护起来还是会变得困难缓慢。
Tarn表示,在代理和地图复杂性方面,目前已经尽最大能力来支持agent和复杂的地图了,所以如果我们想从中得到更多,就必须做出一些让步。
「失败就是乐趣!」
除了矮人堡垒,Tarn在过去十年左右的时间里也尝试做过其它游戏项目。
不多,也就大概90个吧。
不过,有些项目只能持续了几天,有些就持续了好几年。
这些游戏项目几乎都是其它类型的游戏,但也有一些是矮人堡垒的辅助项目,比如神话生成器原型。
虽然基本上没有多少个项目能够持续运作下去,但Tarn认为,偶尔摆脱矮人堡垒,开开小差还是挺不错的。
在这90个「随便做做」的项目里,Tarn也想过用其它编程语言。
他认为有些语言是能够加快实现设计,所以他觉得自己应该再学一点脚本语言,多玩一些线程。
不过人嘛,都是「想一套,做一套」。
对于更喜欢设计的Tarn来说,既然那90个项目是用来摸鱼放松的,又怎么会去学编程语言呢。
bug是所有开发人员都逃不掉的坑。
在矮人堡垒这个游戏里,Tarn最喜欢的bug是那只永远都打不赢的醉猫。
![20年,1人写出70万行代码!沙盒游戏「鼻祖」13年靠玩家捐赠维生](https://s4.51cto.com/oss/202107/30/1a87fc0fe47b71b142c25d55eab6a7b1.jpg)
在酒馆里的猫在地板上走来走去,猫爪就沾了不少洒出来的酒,结果猫在舔爪的时候就喝醉了。
这个bug是因为在猫舔爪摄入东西的代码里,有个数字出错了,结果这个bug就让猫显示出了酒精中毒的症状。
不过,这个bug反倒是被Tarn利用起来,添在了有毒生物的设计代码里了。
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的