我们经常看到一些学生抱怨现在的游戏和应用占用了很大的空间,基本上都是 10G 起步。
这让我想起了初中时玩过的一款游戏魂斗罗,为什么它只是 128KB 但是能实现这么长的剧情呢?
现代程序员 A 和 1980 年代游戏程序员 B 的对话:
- A:为什么你用 128KB 能实现这么多画面、音乐、动画吗?
- B:128KB 还不够吗?其实为了表现力已经相当奢侈了,加了很多不重要的细节。
- A:说说你的音乐,这个音乐,我压到最低码率 至少要得到mp3 1MB 吧。
- B:你是怎么压的?背景音乐怎么能超越? 1KB。
- A:你用了多少显存来实现全屏卷轴?
- B:一共就只有 2KB 显存,太多也放不下啊。
- A:……
一、游戏容量128KB
首先,让我们了解128KB游戏容量意味着什么。KB是计算机存储容量的单位,1KB相当于1024字节。现代游戏通常有几个GB的容量,即数千万KB。换句话说,灵魂斗罗的游戏容量只有现代游戏容量的千分之一。
所以,《魂斗罗》是如何在如此小的容量下实现如此长的情节的呢?这与游戏开发技术和游戏设计密切相关。
二、游戏开发技术
在20世纪80年代初,游戏开发技术仍处于起步阶段,开发者需要在非常有限的存储容量下实现完整的游戏体验。因此,他们需要使用一些特殊的技术来优化游戏的存储空间和性能。
1.压缩技术
压缩技术是游戏开发者在128KB存储容量下实现完整游戏体验的关键。在《魂斗罗》中,开发者使用了一种叫做“运行长度编码”的方法(Run-Length Encoding,RLE的压缩技术可以减少游戏数据的存储空间。
运行长度编码是一种基于重复字符串的压缩技术。在游戏中,开发人员压缩一些重复数据(如地图数据、敌人数据等),只保留其中一个,然后使用RLE技术编码这些重复数据,以便在游戏运行中快速减压。
开发者通过运行长度编码技术,成功地将游戏数据的存储空间压缩到最小值,从而在128KB的存储容量下实现完整的游戏体验。
2.汇编语言
除了压缩技术,开发人员还使用汇编语言来编写游戏代码。汇编语言是一种低级计算机语言,直接操作计算机的底部硬件,执行效率高,但也很难编写。
当时,高级编程语言的使用并不流行。游戏开发者需要手写汇编语言代码来控制游戏的运行,以实现最优化的游戏性能。虽然很难编写汇编语言代码,但开发者可以通过这种方式精细控制游戏的运行,使游戏在有限的存储容量下运行得更快、更稳定。
3.优化技术
除了压缩技术和汇编语言外,开发人员还使用其他一些优化技术来减少游戏的存储空间,提高游戏性能。例如,他们将游戏数据存储在ROM芯片中,可以直接从中读取数据,而无需额外的读写操作。此外,开发人员还将游戏中的音效和音乐压缩成最小的文件大小,并使用一些简单的算法来播放音效和音乐。
通过使用这些优化技术,开发者成功地将《魂斗罗》的游戏容量控制在128KB以内,从而实现了如此完整的游戏体验。
FC 《纽约时报》的游戏,没有所谓的“引擎层”,或者引擎层是“硬件层”。任天堂的主机完全是为游戏设计的,提前考虑了瓷砖、调色板、音乐、音效等基本功能,节省了大量的底层代码。
程序员应仔细研究文档,并在硬件框架下思考问题,如如何显示图片、如何滚动屏幕等;并非常熟悉硬件底部和汇编,不要浪费代码空间。 一来二去,代码也可以写得很小。