为什么魂斗罗只有 128KB 却可以实现那么长的剧情?


一个古老的问题,因为某些机构号挖坟,被我看到了。作为那个时代的亲历者,来给新生代程序员讲讲这里面的奥秘吧 。

其实,玩过小霸王学习机的话(不是打游戏,而是编程),应该多少都知道。没玩过的话,那种用文字拼的图,见过吧。网上有很多。那种图,显然比一张图片,容量要小多了吧。

FC 时代的游戏,画面就是这个原理。整个画面是由一块一块“马赛克”拼出来的。就好像《我的世界》里面用块块拼各种造型那样。

因为是 8bit CPU,int 类型(准确来说,是可以直接操作的整数)是 8bit。所以,索引范围是 0-255。也就是这样的砖块最多能有 256 种。也就是说,你所看到的任何一关,都是由这最多 256 种砖块拼出来的。(当然,不同关卡可以使用不同的砖块,就好像《我的世界》里面的皮肤那样)

这个砖块的大小是 8x8 像素。FC 的画面分辨率为 256x240,容易计算得出就是 32x30 个砖块(tile)。

此外,砖块本身也并非是按照今天的图片那样,按照 RGB 三通道直接存储颜色,而是使用调色板。8bit 的调色板虽然理论上最多可以支持 256 种颜色,但是实际上 FC 整体上只能输出 64 色(其中还有重复色):

而且即便是这 64 色还不能直接使用,而是要从中挑选出要用的颜色,放入到总共 4 个调色板当中,才可以使用。每个调色板只能有 4 色,其中 0 号颜色强制为透明。也就是说,每个调色板其实只能放入 3 个自选色(还必须从上面 64 个里面选),4 个调色板共 12 色,+ 透明,共计 13 色。

每个砖块可以最多绑定一个调色板。因为一个调色板是 4 色,所以每个像素只需要 2bit 就可以索引这 4 种颜色。这样存储一个砖块的内存容量其实是 8x8x2bit=16byte。256 个砖块就是 4KB。

然后其实画面分两层:背景、前景。背景可以使用单独的 256 个砖块,4 个调色板;前景也有自己的 256 个砖块,4 个调色板。所以这样的话一关最多是 512 个砖块,8 个调色板。调色板数量很少存储大小忽略不计,512 个砖块存储需要 8KB。

然后就是实际记录游戏场景(背景)以及人物武器装备子弹等的开销。背景前面计算了,一屏幕需要 32x30 个砖块,砖块之间不能重叠。因为是从 256 个砖块里面选,所以需要 8bit 的索引。那么一屏幕(背景)就是 32x30x8bit=960 字节。

各个关卡的长度不一。下面是所有关卡的背景图:

nesmaps.com/maps/Contra

以最长的第五关为例,该关背景图为 5616x240,那么也就是横轴差不多 22 屏。这样的话存储这个背景所需的索引值的总容量就是 960x22=21KB 的样子。

前景。前景就是那些人物啊,子弹啊,炮台什么的。FC 最多支持 64 个前景“精灵”(之所以叫这个名字是因为和背景的块块不同,前景的块块可以放在画面任何位置且可以相互重叠,像精灵一样漂浮)。每个 8x8(或者 8x16)像素。保守起见按全部都是 8x16(2 个 tile)计算(事实上不是),那么总共就是 8bit/tile * 2tile/sprit * 64 sprits = 128B。(注意游戏当中的角色等很多是由多个精灵组成的,特别是 boss,所以精灵并不是和角色一对一的)

nesmaps.com/maps/Contra

所以,满打满算,前景背景都用足 256 个砖块,且所有砖块都不同,8KB 的砖块存储 + 前景索引 128B+ 背景索引 21KB/ 关 * 8 关,大约 176KB 的样子。当然此外还有程序(逻辑)的部分,音频的部分(音频的部分其实是 MIDI 而且音符很少,大概 CDEFGAB+cdefgab,也就是 2 个八度音阶的样子(音高。音色是通过三角波方波等波形控制,也有的游戏卡里加入了额外的波形生成芯片),容量很小),但是显然背景部分是最耗的。其它场景都没有第五关那么长,甚至部分关卡短得多,而且有些关卡之间雷同很高,砖块可以大量复用(比如如果仔细看第五关的背景图,显然不同的砖块远远少于 256 个)。所以这样看下来大致上 128KB 是没有问题的。

vgmpf.com/Wiki/images/5

质能方程:能量质量相互转化?(质能方程质量和能量可以转换吗)
上一篇
电脑ip地址怎么设置 设置ip地址的步骤(电脑ip地址怎么设置xp)
下一篇
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

相关推荐

  • 苹果手机各个功能介绍,iphone必须关闭的十个功能

    1、关闭蓝牙。现在已经很少有人用蓝牙传输文件了,而且iPhone与安卓的蓝牙并不兼容,所以,可以在设置中,关闭蓝牙功能。2、关闭通知功能。关于APP推送,无非也就是一些更新提醒,关了也不会有什么影响,还能多省点电。3、关闭自动调节亮度功能。一般来说,可以将屏幕亮度在15%-30%之间,在强光环境中,在进行手动调整就可以了。4、禁止后台刷新。在设置—通用中,关闭后台自动刷新功能,也可以对省电起到一点...

  • 高德打车怎么设置途经地,高德如何添加途经路线

    1、点击高德地图APP界面底部的“导航”按钮,进入导航模式。2、点击右下角的“路线”,进入路线设定页面,根据要求输入起点、终点进行路线规划。3、点击“添加途经点”,弹出添加途经点页面,点击右上角,可以添加或者删除途经点,乘客可以手动输入要添加的途经点。4、当添加完途经点时,点击“确定”按钮,即可添加途经路线。此时地图会显示出这条路线上所有的途经点,以及当前途经点的地点信息。怎么设计高德地图设置要经...

  • 高中必修二物理知识点总结,高一物理必修2重点知识点归纳

    您好,1.运动学-位移、速度、加速度的概念及计算方法-相关运动的分析方法,如相对运动和抛体运动-牛顿运动定律及其应用2.力学-力的概念及种类,如重力、弹力、摩擦力等-牛顿第一、二、三定律及其应用-力的合成与分解-能量、功、动能定理、功率的概念及计算方法-动量、冲量定理及其应用3.热学-温度、热量、热能的概念及计量单位-热传递的方式及其特点,如传导、对流、辐射-热力学第一、二定律及其应用,如热机效率...

  • 有没有固体氧?人吃了会怎样?(有没有人告诉你简谱)

    有啊!固态的氧有六种呢:1,α- 固氧,亮蓝色。2,β- 固氧,暗蓝色 - 粉色。3,γ- 固氧,暗蓝色。4,δ- 固氧,橙色。9Gpa 以上的高压下在室温可以生成。5,ε- 固氧,深红色 - 黑色。...

  • 量子力学中的波函数到底表示什么?(量子力学中波函数满足的基本条件)

    世界到底由什么组成?对这个问题的回答,必然需要依靠量子理论。可惜已近百年历史的量子理论,至今没有形成公认正统的物理诠释。本文简要介绍了量子理论发展过程中的几个主要分支,包括哥本哈根诠释、隐变量理论、多...