这个程序员疯了,竟然用写汇编游戏,狂赚3000万美元!

2024年 3月 11日 89.7k 0

谁是历史上最厉害的游戏开发人员?

是瑞典程序员Markus Persson吗?他开发了《我的世界》,以25亿美元的价格卖给了微软,成为了亿万富翁。

图片图片

是美国程序员Eric Barone吗?他一个人干了一个游戏团队的活:策划,设计,编程,测试、美工、音乐,开发了《星露谷物语》,卖了2000万份。

图片图片

是美国程序员John Carmack吗?他开创了第一人称射击游戏,开发了《Doom》《Quake》等经典游戏,发明了众多革命性技术,如“快速平方根算法”,卡马克反转,表面缓存等。

图片图片

不,他们都不是,有史以来,最厉害的游戏开发者苏格兰程序员Chris Sawyer,他开发了《过山车大亨》。

图片图片

为什么他这么厉害呢?

首先,他是一个独立的开发者,和Eric Barone一样,独自一人开发了一个庞大复杂的游戏,在PC游戏时代,《过山车大亨》卖了1000万份,能击败它的只有《模拟人生》。

其次,他使用汇编语言开发了《过山车大亨》,把电脑性能压榨到了极致,游戏1999年发布,即使是当时性能最差的电脑,也能运行《过山车大亨》。

你没看错,这个游戏99%的代码是用汇编写的,只有少量的 C 代码用于与 MS Windows 和 DirectX 交互。

很多同学都在应用层用高级编程语言写业务逻辑,很难体会到用汇编写游戏意味着什么。

一个简单的hell world , 在Python就一句话 print("Hello World!)

但是在汇编中就变得复杂无比。

data segment 
    string db 'Hello,World!$'
data ends
code segment 
assume cs:code,ds:data
start:
    mov ax,data 
    mov ds,ax 
    mov dx,offset string
    mov ah,9
    int 21h
    mov ah,4ch
    int 21h
code ends
end start

你需要操作CPU的各种寄存器来设置参数,调用系统中断来输出。

直接和硬件打交道,极其底层,极其麻烦。

没有对CPU和硬件的精深理解,根本写不了。

汇编不仅难写,更是难读。这里没有变量名辅助记忆,相比于高级语言,汇编代码的复杂度可以说是呈指数级增长。

除非你要学习/编写编译器、操作系统、嵌入式代码,否则,尽量不要去碰它。

和很多大牛一样,Chris Sawyer从小就开始玩计算机,玩游戏,玩得不过瘾就自己写。

16岁就在Memotech MTX500上用Z80汇编写游戏,并且主动把游戏邮寄给Memotech 公司进行发行,赚了点小钱。

高中毕业后,Chris上了格拉斯哥斯特拉斯克莱德大学,学的是计算机科学和微处理器。

80年代,PC时代正式开启,MS-DOS一统天下,Chris在一家游戏公司做了很多把Amiga游戏移植到DOS平台的工作,对底层编程,尤其是汇编建立了精深的理解。

用他自己的话来说:“我已经在 x86 汇编中编程了很长时间,我很少需要用手册来查找东西。”

1994年,Chris受到《铁路大亨》的启发,开发了《运输大亨》,大获成功,版税成为他源源不断地收入来源。

Chris在欧洲和美国四处旅行时,迷上了过山车。

他去过数百个游乐园,玩了700多次过山车!

最疯狂的时候,他甚至两周时间参观了美国14个主题公园,只是为了坐过山车。

正是由于对过山车的热爱,他在制作《过山车大亨》时,考虑了各种各样的细节,让玩家身临其境。

在游戏中,玩家需要扮演游乐园经营者角色,目标是从头开始建造一个主题公园。

玩家需要改造土地,贷款获取资金,修建游乐设施,建造各种过山车(从木头到钢制的),旋转木马、卡丁车、摩天轮、鬼屋、迷宫、电影院和各种惊险游乐设施。

还需要安排机械师来修理设施,清洁工来打扫卫生,保安来避免破坏,还需要安排艺人穿着夸张的服装跳舞,为排长队的人们提供娱乐,甚至整个公园的浴室也必须精心布置。

一切的目的都是让客人满意,乐在其中。

图片图片

在实现技术上,Chris选择了汇编,因为在1998年,电脑的性能还不够高,《过山车大亨》需要成千上万的游客在公园中游玩,多个过山车在不同的轨道行驶,不同的音乐和音效可以相互重叠播放,营造出一种喧嚣的氛围。

图片图片

此时Java已经诞生,但是它主要用于服务器端编程,做这样的游戏肯定是不行的。

C++应该可以,但是对Chris来说,汇编才是一个自己做出极致优化的编程语言。

2

在苏格兰的一个小村庄里,Chris开始了《过山车大亨》的开发。

他装备了两台 PC:一台快速的用于编码,另一台较慢的用于测试。

后来,游戏的要求是Intel Pentium 90Mhz 和至少 16 MB RAM。

他的办公室还放着一台点阵打印机、一台传真机、一本关于 x86 汇编代码的袖珍指南,以及500 多页的参考书,这对他来说已经足够了。

由于使用汇编语言,Chris并没有良好的IDE可以使用,微软的Microsoft Macro Assembler (MASM)中自带了一个编辑器,Chris就用它来编程。

图片图片

《过山车大亨》是唯一一个用x86汇编写的游戏吗? 

绝对不是,用汇编其实是90年代中期之前常见的做法,因为机器性能很差,没有专用的GPU,用汇编来提高性能是常见的做法,比如《帝国时代》也使用了大量汇编。

图片图片

但是,那些游戏都是由团队完成的,只有《过山车大亨》,是Chris一个人用汇编一行行地码出来的。

两年的疯狂编码,用汇编对性能极致压榨,《过山车大亨》于1999年上市发行。

《过山车大亨》遇上了好时候,1999年,大约四分之一的美国家庭连上了互联网。

人们使用邮件,即时通讯工具,论坛等新兴的互联网工具来分享各自玩游戏的体验。

品质过硬,速度飞快的《过山车大亨》以前所未有的速度吸引了一批狂热的追求者。

仅仅在美国,1999年就卖了惊人的70万份!

最终,Chris从《过山车大亨》等游戏中赚了3000万美元。

真正的热爱加上精湛的技术成就了《过山车大亨》的巨大成功。

他写的游戏指南长达60多页,经常引用现实中的过山车游乐园,他对游乐园的热爱甚至体现在那些抱怨食物太贵和需要去洗手间的游客身上。

如果Chris对过山车不那么热爱,虽然他也能做出过山车游戏,但是绝对无法给玩家带来无与伦比的沉浸感,玩家也就不会自发传播。

而使用汇编则带来了最优异的性能,保证能在几乎所有电脑上玩得飞起。

有意思的是,两个游戏爱好者用C语言开发了一个《过山车大亨》的开源实现,修复了原有的一些问题,添加了一些多人游戏,高清支持,作弊代码等功能,感兴趣的同学可以去看看:https://openrct2.org/

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论