为什么《魂斗罗》只有 128KB 却可以实现那么长的剧情?
经常看到有同学在抱怨现在的游戏、APP 占用非常大的空间,基本都是 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 时代的游戏,没有所谓的“引擎层”,或者说引擎层就是“硬件层”。任天堂的主机完全是为游戏而设计的,瓦片、调色板、音乐、音效等基本功能已经预先考虑到了,这样一来就节约了大量底层代码。
程序员要仔细研究文档,在硬件框架下思考问题,比如如何显示图片、如何卷动屏幕等等;而且还要非常熟悉硬件底层和汇编,不要浪费代码空间。 一来二去,代码也能写的非常小。
评论