关于java:为什么魂斗罗只有-128KB-却可以实现那么长的剧情

2次阅读

共计 929 个字符,预计需要花费 3 分钟才能阅读完成。


集体感觉 fc 最神奇的游戏还属超级玛丽,32 个关卡,每关都不同,各种暗藏因素,如同代码区才 10 多 k,数据区 10 多 k。

反汇编看完还是不敢相信这点货色能玩一个童年… 当初 helloworld 的二进制都可能比这大多了。

首先 128k 并不小,次要耗费存储空间的不是程序。当然对于 128k 来说程序大小天然也要思考,鉴于 fc 是八位机而且 FC 采纳的是 CISC 处理器,一条指令就能实现很多事件,所以程序的大小也就古代 64 位 RISC 处理器的十几到几百分之一。

资源才是小户(包含图像、音乐、地图数据、关卡数据等等)。就拿图像和音乐来说,图像在没有压缩之前 耗费存储空间和像素深度和大小无关。FC 上的图像,像素深度就 2bit 的索引而已,当初宽泛应用的真彩色是 24bit,蕴含 alpha 的须要 32bit,这里就差了 12 倍到 16 倍。

图像大小更是差距微小,FC 广泛一个角色也就是宽高十几个像素而已,与当初动辄宽高几千像素图像资源相比差了数万倍到数百万倍,所以图像资源耗费的存储空间至多差了 5~7 个数量级。

音乐的话,FC 采纳的是 8 位 midi 音乐,而当初广泛用的是 PCM 音乐。类比到图像中,就像矢量图像和位图的区别。

总之 PCM 音乐的大小和采样深度、采样率、通道数以及长度无关,midi 仅仅和谱子的复杂度无关,所以 FC 实际上对空间的要求和古代游戏相比至多差了 5~7 个数量级。你把 128k 放大 10w 倍到 1000w 倍,你就不感觉小了。

对于什么 64k 3d 程序什么的,这齐全是两码事,FC 程序小只是因为需要的资源原本就很小而已,而那种 64k 3d 程序是因为采纳 Procedural generation 办法,简略的说就是通过数学来形容,而不是通过记录后果的采样,Procedural generation 不光须要的存储空间极小

而且能够做到有限精度,毛病是难以描述复杂事物,并且对算力要求高,而不是用了什么外星压缩法。

总结

1. 游戏大量复用图块,图块还应用调色板索引,如同每个像素才占用 2bit。
2. 程序员精心优化各种数据结构,每一 bit 存储都不节约。
3. 声音只存储发声通道的调制参数序列,能复用就复用。
4. 代码全是汇编写成,间接操作硬件,根本不存在节约的指令。

作者:红白机
起源:http://rrd.me/eYSCg

正文完
 0