1个人70万行代码,20年持续更新,这款游戏号称开发到死,永不停更

2023-05-16

梦晨 博雯 发自 凹非寺
量子位 报道 | 公众号 QbitAI

这是一款「开发到死」,「永不停更」的游戏。

兄弟两人,一人开发,一人剧情,共同维持了这款游戏近20年

现在的玩家刚刚打开它,往往会发出“这啥玩意儿?”的疑问:

没错,这款《矮人要塞》 (Dwarf Fortress)的默认界面完全由ASCII字符构成。

它是《我的世界》的灵感来源之一,还被纽约现代艺术博物馆收藏。

影响力不仅限于游戏,更是改变了艺术界对游戏的看法。

除了画面原始以外,这款游戏还不支持鼠标操作,玩家需要记住一整套键盘指令。

规则也极其复杂,与其他游戏相比《矮人要塞》的难度曲线被调侃成这样:

这样一款各方面都“劝退”的游戏,到底靠什么成为公认的神作?

人类历史上最复杂的游戏

整体来看,这是一款沙盒模拟经营游戏,玩家控制一群矮人,试图建造并经营一个要塞。

每次开始新游戏都由程序随机生成一个世界

这个随机生成的世界有完整的地形、气候、矿产分布、动植物生态圈等要素,并按规则动态变化。

还要生成整个文明的历史,各个种族间的冲突、家族血缘关系,每个游戏人物有自己的性格、喜好和记忆。

下图就是在生成历史,到第164年已经发生了27万个对后世有影响的事件。

这个过程甚至会把性能稍弱的CPU榨干。

游戏中的角色并没有抽象的“生命值”,而是身体的每个部位都有独立的状态,遇到火焰会烧伤,低温会生病,摔倒会骨折。

在战斗中受伤也没有喝生命药水就能回复的简单机制,如果不好好包扎伤口,战斗胜利的一方也会随后感染而死亡……

但事实上,想要在一篇文章里说明白《矮人要塞》的玩法几乎是不可能的。

甚至从一个经典“Bug”就能看出,这个游戏世界有多复杂

在某次更新以后,有玩家在游戏里养的两只猫都离奇死亡了。

要塞没有被入侵,从游戏记录里看没有发生任何战斗,唯一的线索就是两只猫倒在一大滩呕吐物里。

他猜测或许是酒精中毒?但游戏里猫的设定根本不会喝酒,于是他在游戏官方论坛里报告了这个问题。

随后,越来越多的玩家也遇到了同样的问题,他们在游戏里养的猫接二连三莫名死亡。

并且玩家观察到只有猫会出现这个现象,其他宠物暂时安全。

直到一位玩家目击了他的猫倒在发生斗殴的酒馆里,真相终于浮出水面。

原来是矮人们打架时把酒洒在了地板上,猫经过时酒液粘在它们的毛发上,随后猫在清理自己毛发时摄入了过量酒精而中毒死亡。

游戏制作人终于找到问题出现在“从身体表面摄入物质”这部分代码的数值问题,并进行了调整。

游戏出了Bug,玩家们反倒很开心。这个Bug正可以说明他们热爱的这款游戏的伟大之处。

因为这个Bug的出现需要一系列复杂的规则和交互:

在矮人的设定上,爱喝酒,喝醉了可能打架。

在动物的设定上,猫有毛发,还会通过舔清理自己。

在物理法则上,液体会洒、会留在地板上,液体会粘在猫毛上,而猫舔毛会摄入沾上的液体,酒精的毒性与生物的体重相关……

所有这些规则要同时成立并进行交互才能产生这个Bug,也难怪有玩家评价到:

这根本不是Bug,是功能!

《矮人要塞》一直保持原始画面的原因也是开发者20年来一直忙于修改复杂的玩法规则,根本找不到时间制作图形界面。

到现在已经积累了71万行代码。

如此细致的一款游戏于2002年开始制作,从2006年发行首个版本到今天就一直是免费的。

并且还保持着每隔两三年就会打个大补丁的更新频率。

这样的传奇游戏背后是怎样的两位制作人?

从斯坦福数学博士到游戏制作人

左:Zach 右:Tarn

时间来到2004年,此时的Tarn Adams正焦头烂额。

一来,他正忙于斯坦福大学的数学博士学位的申请。

二来,他和哥哥Zach Adams共同开发的游戏《亚莫之奴:神与血》开始出现越来越多的问题。

双重困境之下,Tarn决定暂停这款游戏的开发,宣布将主要精力转移到另一款游戏上——

也就是我们现在熟知的矮人要塞,全名《亚莫之奴:神与血第二章:矮人要塞》。

不过,这时Tarn的生活重心主要还是在学业上。

比如2004年,他就在《几何分析》杂志上发表了一篇数学论文:

当然,在此期间,兄弟俩还是合伙“不务正业”,创办了游戏公司Bay 12 Games:

Tarn的数学知识使他非常擅长空间方面的算法,而Zach则拥有丰富的古代历史知识。

在两人合作开发并发布了几款免费游戏之后,也吸引到了一小批粉丝,赚了大概300美元

对这时候的哥俩来说,游戏开发还只是个兼职

到2006年,Tarn继续在德州农工大学攻读博士后。

但此时,科研与游戏开发之间的冲突已经愈发紧张,让Tarn时常处在一种抑郁的情绪之中。

在数学领域深造,这是他从本科时代就开始的目标。

但同时,Tarn也是一个小学五年级就自己开发游戏玩,高中就在线上发布公开游戏的骨灰级游戏爱好者啊!

深思熟虑之后,这一年,Tarn决定退学,然后全职游戏开发!

在这期间收入完全靠粉丝自愿捐赠。

到了2006年8月8日,矮人要塞的第一个alpha版本发布。

在接下来的几个月中,他们也逐渐积累了一批死忠粉。

靠粉丝的捐赠可以获得平均每月800-1000美元

按照正常逻辑,找发行商合作,然后开始赚钱似乎是一条理所应当的发展之路。

但是兄弟两人担心一旦商业化,他们会没法自己把握游戏更新的节奏。

为此,两人拒绝了很多发行商的合作请求,承诺游戏继续提供免费下载。

就在这样的承诺中,矮人要塞顽强地生存了下来,并且越做越大。

因患上癌症终于准备上线Steam

到了2019年,兄弟中的哥哥Zach查出患有癌症,高昂的医药费让两人逐渐感到力不从心。

 Zach Adams

终于与发行商Kitfox Games合作,决定让游戏登上Steam与Itch.io平台出售。

不过玩家是否花钱购买完全靠自愿,免费版也将继续开放并保证持续更新。

为了让降低新玩家的上手难度,出售版将会包含全新的图形界面、符合现代习惯的操作模式,自动更新和Steam创意工坊功能。

目前新版游戏仍在开发中,发售日期和价格都没有公布。

每个季度兄弟俩都会公布最新的开发进展。

现在如果想要尝试这款传奇游戏,最好的方式是下载玩家社区维护的“懒人包”,集成了玩家自制图形界面和更多降低游戏上手成本的工具。

游戏官网:
http://www.bay12games.com/dwarves/

懒人包:
https://dffd.bay12games.com/file.php?id=7622

steam地址:
https://store.steampowered.com/app/975370/Dwarf_Fortress/

参考链接:
[1]https://stackoverflow.blog/2021/07/28/700000-lines-of-code-20-years-and-one-developer-how-dwarf-fortress-is-built/
[2]https://news.ycombinator.com/item?id=27996684
[3]https://www.reddit.com/r/programming/comments/otwbsj/700000_lines_of_code_20_years_and_one_developer/
[4]http://www.bay12games.com/dwarves/mantisbt/view.php?id=9195
[5]https://en.wikipedia.org/wiki/Tarn_Adams

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

1个人70万行代码,20年持续更新,这款游戏号称开发到死,永不停更 的相关文章

  • 2021-03-14

    题目描述 This past fall Farmer John took the cows to visit a corn maze But this wasn t just any corn maze it featured severa
  • java工具类 文件zip压缩 base64 加密,base64解密 zip解压

    代码 xff1a package com cfam utils import java io BufferedOutputStream import java io ByteArrayInputStream import java io B
  • Deno编译踩坑记(Mac环境)

    前言 最近入坑Deno xff0c 第一步肯定是从编译开始 xff0c 然后踩坑了 xff0c 记录一下 xff5e 常规编译 xff1a 1 安装rust curl proto 39 61 https 39 tlsv1 2 sSf htt
  • Debian下磁盘挂载及开机启动设置教程

    检查磁盘空间即剩余情况 本文是在实际使用过程中真实操作 xff0c 用于交流和学习 xff1b 1 使用fdisk l 命令查看当前磁盘的大小 xff0c 其中 dev sda磁盘发现并未使用 xff1b 使用时 xff0c 需要切换到ro
  • HC-06蓝牙模块

    主机 xff1a 用于向从机下发指令 xff0c 能够搜索从机并主动建立连接的一方 从机 xff1a 用于接收主机下发的命令 xff0c 不能主动建立连接 xff0c 只能等别人连接自己 xff08 HC 06只能工作在从机模式下 xff0
  • JAVA回文数的判断

    回文数 xff1a 如121 xff0c 1221这样正着和倒着读都一样的数叫做回文数 xff0c 代码的主要思路是先将用户输入的数字倒过来后再与原来的数进行判断 难点 xff1a 将用户输入的数字倒过来 上代码 xff1a package
  • IOS+openfire 即时通讯

    最近看到很多人在琢磨ios即时通讯这块 xff0c 于是出去好奇 xff0c 决定动手试试 xff0c 今天就先从xmpp这个框架来尝试 其实xmpp也就一个协议而已 xff0c 更多人还是喜欢把它叫做Jabber 首先还是提供一下下载地址
  • webpack进行js打包,引入js

    node中html引入jquery可以用webpack进行打包 webpack 3可以打包 xff0c webpack 4 打包需要安装webpack cli xff0c 否则会报错 直接引入js会报错 语法错误 xff0c 浏览器不支持E
  • iOS中UICollectionView(集合视图)的使用

    1 简单介绍与说明 简介 UICollectionView提供了一种自定义布局展示试图内容的方式 说明 涉及到的必须的基本类型与基本代理类型有UICollectionView UICollectionViewCell UICollectio
  • iOS表视图之增删单元格

    要进行单元格的修改 xff0c 首先我们要删除原来的视图并从对象库中拖曳一个Navigation Controller视图 xff08 导航控制器 xff09 到设计页面 xff0c 添加Navigation Controller视图的同时
  • 史上最全IOS的touch事件手势使用方法

    以下内容源于本人整理 部分来源于网络 如有侵权行为或错误之处还望指正 请联系邮箱huiyutianshi 64 qq com 关于touch事件的 手势和事件都是基于UIRrsponder的 UIResponder包含所有的响应事件 触摸
  • vtk 显示效果设置

    在vtk中 xff0c 显示样式的显示 xff0c 是通过vtkProperty来控制的 xff0c 这里介绍三种基本的属性设置方式 xff0c 点方式 xff0c 网格方式和面方式 xff0c 这里以 头像三角网格的显示为例介绍其显示 其
  • Qt 线程(一) Qt 多线程实现的两种方式 线程实现详解

    简述两种实现方式 Qt提供了一个管理线程的类 xff1a QThread 子类化QThread并重新实现run 使用worker object通过QObject moveToThread将它们移动到线程中 简介QThread类 一 公共槽函
  • 1000以内的完数

    题目 xff1a 一个数如果恰好等于它的因子之和 xff0c 这个数就称为 完数 例如 xff0c 6的因子为1 2 3 xff0c 而6 61 1 43 2 43 3 xff0c 因此6是 完数 编程找出1000之内的所有完数 xff0c
  • 自适应参数的DE算法——JADE,L-SHADE

    目录 JADELSHADE参考文献 最近复写一个DE 1 xff08 差分进化算法 xff09 参数的自适应策略的变体L SHADE 2 xff08 CEC冠军算法 xff09 的matlab版本 xff0c 发现其提出的自适应策略对DE改
  • 转:基于科大讯飞语音API语音识别开发详解

    原文来自于 xff1a http www 52wulian org android voice 最近项目需要用到android语音识别 xff0c 立马就想到科大讯飞 xff0c 结合官方实例及阅读API文档 xff0c 初步的完成了And
  • 离线语音识别_离线语音识别库_离线语音识别sdk - 云+社区 - 腾讯云

    广告关闭 2017年12月 xff0c 云 43 社区对外发布 xff0c 从最开始的技术博客到现在拥有多个社区产品 未来 xff0c 我们一起乘风破浪 xff0c 创造无限可能 是的 xff0c 录音文件识别服务就是离线语音识别服务 录音
  • python在线发音-Python如何实现文本转语音

    准备 我测试使用的Python版本为2 7 10 xff0c 如果你的版本是Python3 5的话 xff0c 这里就不太适合了 使用Speech API 原理 我们的想法是借助微软的语音接口 xff0c 所以我们肯定是要进行调用 相关的接
  • micropython和python区别-MicroPython与Python速度对比

    首先说明 xff0c micropython跟python是没有任何可比性的 xff0c python作为一种通用的语言 xff0c 在扩展性上不是micropython能比的 xff0c 比如大量的库 xff0c 可以方便的用C语言加模块
  • python代码写好了怎么运行-python的代码写在哪里,怎么样运行python代码

    1 python的代码写在哪里 你有两种方式写python代码 xff0c 他们针对不同的应用场景在python交互式解释器里写代码 在编辑器里写代码 在python交互式解释器里 xff0c 你可以写简单的代码 xff0c 尽管复杂的代码

随机推荐