三只钟,一个世界:模拟游戏中的时间问题

人的一生和气候的一生之间隔着七个数量级。没有游戏解决过这个问题。每个游戏都以不同的方式把它推开,而这些放弃声明都很有启发性。

作者 McGrinseyAuf Deutsch lesenLeer en español
三只钟,一个世界:模拟游戏中的时间问题人工生成
人工生成人工生成人工智能法案第50条要求,人工生成的图像、音频和视频必须可识别、可机读地标出。这个符号是欧盟委员会的官方基础图标。使用它是自愿的,标注义务不是。机器生成: 文字 · 图像. 有人在驾驭。McGrinsey Living Intelligence SystemsMcGrinsey Living Intelligence SystemsLI: 各种活的智能。 McGrinsey 把常规智能和新的智能收成活的智能系统。这些机器与人共生的系统一起工作,为每一种智能提供最精的认识。

建一个游戏,让一个社会在一千多年里成长。让人们在里面到处跑。然后看看一个人走一百米要多久。

在我们这儿是 好几年。一个生物每模拟步只走一格的一小部分,四步是一年,按地图比例一格大概一公里。一个人一个上午就能走完。旁观者看到的是慢动作,同时又是快进。

这不是我们代码里的错误。这是每个展示漫长时段的游戏的核心未解问题。而且把这些解决方案理一理是值得的,因为它们全是放弃声明。

三座钟,七个数量级

一个社会同时在三个时间层面上运转:

地球 在几千年里变化。气候、土壤、物种。
一个文明 在几十年到几百年里变化。时代、技术、人口。
一个个体 活在小时和天里。吃饭、走路、说话、生孩子。

最快和最慢层面之间隔着七个数量级。这大概是一秒对四个月的比例。

一个想把三个都展示出来的游戏,会把它们放在同一座钟上。然后哪个都不合适。

别人是怎么把它推开的

Civilization:放弃移动

一回合是一年或更久,一个单位在这一回合里移动一次,不管多远。移动不是过程,而是跳跃。代价:没有同时性,没有可以看着发生的东西。收益:年份数字总是对的。

真正的发明在于分级。游戏早期每回合50年,后期一年。 钟变慢了,而世界变快了。 这不是现实主义,这是戏剧编排。

Die Siedler 和 Anno:放弃年份

它们根本没有。最小单位是搬运工把一块木板从A搬到B的工序。所有看得见的东西都按真实时间跑,并且内部一致。

代价:没有历史。没人变老,没人死,没有从时间本身长出来的时代。游戏在永恒的现在里玩。

Dwarf Fortress:两座钟,而且它也这么说

最直白的解决方案。在世界生成里,几百年在几分钟内跑完,文明兴起又消亡,整段历史被掷出来。之后,在要塞里,钟按天走,你看着每个矮人走路。

切换是个断裂,但是看得见的。没人声称两者是同一座钟。

Die Sims:放弃历史

只认分钟。一个Sim按人生阶段变老,但世界停着:没有进步,没有时代,没有继承东西的世代。一贯到底:谁想把最小层面展示得特别准,就得放弃大的。

Populous:什么都不说

展示真实时间里的真实运动,却从不说出任何年份。这是所有回避动作中最优雅的: 不点名的东西,也就不会自相矛盾。

还有另外三种模式

SimCity 计算年份,却从不让市民变老。它之所以管用,是因为你从不跟随某一个人。一旦你能做到,它就会散架。

Crusader Kings 计算天数并让人变老,但放弃了微观上的可见运动:一支军队是一个箭头,不是一堆人。

RimWorld 计算天数并且显示每个殖民者,但因此只能跨越数年而不是数百年。

模式总是一样的:你得到三个层面中的两个。从不会三个全有。

这让我们付出的代价

摆在每个解决方案前面的问题不是创意问题,而是算术问题: 你究竟想呈现的最小时间单位是什么?

我们今天按季节算,也就是每年四个步骤。如果改成小时,就会是8.760,也就是 因子2.190。在5.000个模拟生物的情况下,每年25毫秒会变成大约14秒。一个世纪就会持续一刻钟。

谁想要更精细的时钟,就不是靠优雅买到的,而是靠计算时间。而且是非常多。

我们很可能走的路

两只时钟,像Dwarf Fortress,但没有断裂:一只按季节走的慢速世界时钟,以及放大到一个村庄时的第二只按天走的快速时钟,它只作用于可见的片段。

这和扩展时成立的同一个想法: 它按观察到的分辨率计费,而不是按整个世界。 模拟只需要在有人看的地方精细。

代价会是两个层面不再讲述完全相同的真相。这必须公开摆着,而不是被藏起来,就像Dwarf Fortress做的那样。

还有一个非常具体的障碍

这不只取决于设计。在我们的核心里,一个模拟步骤 不可中断:它必须完整跑完,然后别的任何事才能发生。只要是这样,就不可能有第二只更快的时钟,因为那只得在两个世界步骤之间跑。

这就是大问题背后那个不起眼的真相。在对时间层面做哲学思考之前,必须先让一个循环可以分割。


写于开发JIJI BAMBAM版本0.75.0期间。计算时间的数字来自自己的测量,游戏的归类来自游玩。 你可以自己运行这个模拟。