谁是历史上最厉害的游戏开发人员?
是瑞典程序员Markus Persson吗?他开发了《我的世界》,以25亿美元的价格卖给了微软,成为了亿万富翁。
是美国程序员Eric Barone吗?他一个人干了一个游戏团队的活:策划,设计,编程,测试、美工、音乐,开发了《星露谷物语》,卖了2000万份。
是美国程序员John Carmack吗?他开创了第一人称射击游戏,开发了《Doom》《Quake》等经典游戏,发明了众多革命性技术,如“快速平方根算法”,卡马克反转,表面缓存等。
不,他们都不是。有史以来最厉害的游戏开发者,或许是苏格兰程序员Chris Sawyer,他独立开发了经典模拟游戏《过山车大亨》。

为什么他这么厉害呢?
首先,他是一位独立的开发者,和Eric Barone一样,独自一人完成了一个庞大复杂游戏的策划、设计、编程和测试。在PC游戏时代,《过山车大亨》售出了超过1000万份,当时只有《模拟人生》的销量能超过它。
其次,更令人惊叹的是,他使用汇编语言开发了《过山车大亨》。这款游戏在1999年发布时,几乎将所有电脑性能都压榨到了极致,即便是当时配置最低的电脑也能流畅运行。
你没有看错,这款游戏99%的代码是用汇编编写的,只有极少量的C代码用于处理与MS Windows和DirectX的交互。
许多开发者习惯于使用高级编程语言编写应用层业务逻辑,可能很难体会用汇编写游戏意味着什么。一个简单的“Hello World”程序,在Python中只需一行:print("Hello World!")。
但在汇编中,事情就变得复杂无比:
datasegment
stringdb 'Hello,World!$'
dataends
codesegment
assumecs:code,ds:data
start:
movax,data
movds,ax
movdx,offset string
movah,9
int21h
movah,4ch
int21h
codeends
endstart
你需要直接操作CPU的各种寄存器来设置参数,并通过调用系统中断来实现输出。这种直接与硬件打交道的方式极其底层和繁琐,没有对CPU和计算机体系结构的精深理解,根本无法上手。
汇编不仅编写困难,可读性也差。代码中没有变量名辅助记忆,逻辑复杂度相比高级语言呈指数级增长。除非你正在学习或从事编译器、操作系统或嵌入式系统开发,否则通常不会主动去碰它。
和许多技术大牛一样,Chris Sawyer从小就开始接触计算机和游戏。玩得不过瘾,他就自己动手写。16岁时,他就在Memotech MTX500计算机上使用Z80汇编语言编写游戏,甚至主动将游戏邮寄给Memotech公司发行,赚到了第一笔钱。

高中毕业后,Chris进入格拉斯哥斯特拉斯克莱德大学,学习计算机科学和微处理器技术。80年代PC时代来临,MS-DOS成为主流。他在一家游戏公司工作,负责将Amiga平台游戏移植到DOS系统,这段经历让他对底层编程,尤其是x86汇编,建立了极为深刻的理解。用他自己的话说:“我已经在x86汇编中编程了很长时间,很少需要翻手册查东西。”
1994年,受到《铁路大亨》的启发,Chris开发了《运输大亨》,游戏大获成功,版税成为他稳定的收入来源。之后,Chris在欧洲和美国旅行时,迷上了过山车。

他走访了数百个游乐园,坐过700多次过山车!最疯狂的时候,他曾在两周内参观了美国14个不同的主题公园,只为了体验各种过山车。正是这份狂热的热爱,让他在制作《过山车大亨》时,考虑到了无数细节,力求为玩家带来身临其境的体验。
在游戏中,玩家扮演游乐园经营者,需要从零开始建造并运营整个主题公园。这包括改造地形、申请贷款、修建各类游乐设施——从木质到钢制的过山车、旋转木马、卡丁车、摩天轮、鬼屋、迷宫、电影院等等。
此外,玩家还需雇佣机械师维修设施、清洁工打扫卫生、保安维持秩序,甚至安排艺人穿着夸张服装表演,为排队的游客提供娱乐。连公园里洗手间的布局都需要精心规划,一切的核心目标就是让游客满意,乐在其中。

在技术选型上,Chris选择了汇编语言。因为1998年的个人电脑性能有限,而《过山车大亨》需要同时模拟成千上万名游客在公园中活动、多辆过山车在不同轨道上飞驰,以及多种音乐音效重叠播放以营造喧闹氛围。Java当时主要用于服务器端,显然不合适;C++虽然可行,但对Chris而言,只有汇编才能让他进行极致的性能优化。

在苏格兰的一个小村庄里,Chris开始了漫长的开发工作。他配备了两台PC:一台高性能机器用于编码,另一台低配置电脑用于测试(游戏最终要求Intel Pentium 90MHz处理器和至少16MB内存)。他的办公室里还有一台点阵打印机、一台传真机、一本x86汇编袖珍指南和超过500页的参考书。
由于使用汇编,他缺乏现代化的集成开发环境(IDE),主要依靠微软宏汇编器(MASM)自带的编辑器进行编程。

《过山车大亨》是唯一用x86汇编编写的游戏吗?当然不是。在90年代中期以前,由于机器性能孱弱且没有专用GPU,使用汇编来提升性能是游戏开发的常见做法,例如《帝国时代》也大量使用了汇编代码。

然而,那些游戏都是由团队协作完成的。唯有《过山车大亨》,是Chris Sawyer独自一人,用汇编语言一行一行敲出来的。
经过两年疯狂的编码和对性能的极致压榨,《过山车大亨》于1999年正式上市。它生逢其时——当年美国约有四分之一的家庭接入了互联网,人们通过电子邮件、即时通讯和论坛等新兴方式分享游戏体验。品质过硬、运行流畅的《过山车大亨》迅速吸引了大批狂热玩家,仅1999年就在美国售出了惊人的70万份!
最终,Chris从《过山车大亨》及其系列游戏中总计赚取了约3000万美元。
真正的热爱加上顶尖的技术,铸就了《过山车大亨》的巨大成功。Chris撰写的游戏指南长达60多页,其中经常引用现实中的过山车和游乐园案例。他对游乐园细节的执着,甚至体现在游戏里游客抱怨食物太贵或急需找洗手间的行为上。
如果Chris对过山车没有如此深沉的热爱,或许他仍然能做出一个模拟游戏,但绝无法赋予玩家那种无与伦比的沉浸感,自然也不会引发玩家的自发传播。而使用汇编语言,则确保了游戏能在几乎所有电脑上流畅运行,带来了最优异的性能表现。
有趣的是,后来有两位游戏爱好者用C语言开发了一个《过山车大亨》的开源实现(OpenRCT2),修复了原版的一些问题,并添加了多人游戏、高清支持、作弊代码等功能。感兴趣的朋友可以访问:https://openrct2.org/
这种对技术的极致追求和独立开发的故事,总是令人鼓舞。如果你对更多编程轶事、底层技术或游戏开发深度内容感兴趣,欢迎来云栈社区交流探讨。