三只钟,一个世界:模拟游戏中的时间问题
人的一生和气候的一生之间隔着七个数量级。没有游戏解决过这个问题。每个游戏都以不同的方式把它推开,而这些放弃声明都很有启发性。
人工生成建一个游戏,让一个社会在一千多年里成长。让人们在里面到处跑。然后看看一个人走一百米要多久。
在我们这儿是 好几年。一个生物每模拟步只走一格的一小部分,四步是一年,按地图比例一格大概一公里。一个人一个上午就能走完。旁观者看到的是慢动作,同时又是快进。
这不是我们代码里的错误。这是每个展示漫长时段的游戏的核心未解问题。而且把这些解决方案理一理是值得的,因为它们全是放弃声明。
三座钟,七个数量级
一个社会同时在三个时间层面上运转:
地球 在几千年里变化。气候、土壤、物种。
一个文明 在几十年到几百年里变化。时代、技术、人口。
一个个体 活在小时和天里。吃饭、走路、说话、生孩子。
最快和最慢层面之间隔着七个数量级。这大概是一秒对四个月的比例。
一个想把三个都展示出来的游戏,会把它们放在同一座钟上。然后哪个都不合适。
别人是怎么把它推开的
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期间。计算时间的数字来自自己的测量,游戏的归类来自游玩。 你可以自己运行这个模拟。


