博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么魂斗罗只有 128KB 却可以实现那么长的剧情?
阅读量:4093 次
发布时间:2019-05-25

本文共 1216 字,大约阅读时间需要 4 分钟。

公众号关注 “GitHubDaily”

设为 “星标”,每天带你学编程!

来自:知乎,作者:红白机

链接:http://rrd.me/eYSCg

个人觉得 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. 代码全是汇编写成,直接操作硬件,基本不存在浪费的指令。

推荐阅读:Eclipse Theia 1.0 发布,这才是 VS Code 真正的开源替代方案?!印度裔 00 后 7 岁教人编程,12 岁成 IBM 荣誉顾问,还出过书!如何用一行代码实现网页变灰效果?卧槽!为鼓励民众居家隔离,国外这些计算机学习资源将免费对外开放!这款超级搜索神器,我爱了!

转载地址:http://wkvii.baihongyu.com/

你可能感兴趣的文章
关于fwrite写入文件后打开查看是乱码的问题
查看>>
用结构体指针前必须要用malloc,不然会出现段错误
查看>>
Linux系统中的美
查看>>
一些实战项目(linux应用层编程,多线程编程,网络编程)
查看>>
STM32CubeMX 真的不要太好用
查看>>
不要买铝合金机架的无人机,不耐摔,易变形弯曲。
查看>>
ACfly也是基于FreeRTOS的
查看>>
我发现七月在线的GAAS课程基本都讲到了
查看>>
电机堵转
查看>>
carzepony也在想往FreeRTOS上迁移
查看>>
ACfly调参记录(包括ACfly-F330和ACfly-T265)
查看>>
思岚A1的SDK其实很好读懂,每个函数清晰明了,可以直接调用
查看>>
去github里面找找也没有别人无人机+SLAM的工程
查看>>
现在明白为什么无名博客里好几篇文章在讲传感器的滞后
查看>>
ROS是不是可以理解成一个虚拟机,就是操作系统之上的操作系统
查看>>
用STL algorithm轻松解决几道算法面试题
查看>>
ACfly之所以不怕炸机因为它觉得某个传感器数据不安全就立马不用了
查看>>
我发觉,不管是弄ROS OPENCV T265二次开发 SDK开发 caffe PX4 都是用的C++
查看>>
ROS的安装(包含文字和视频教程,我的ROS安装教程以这篇为准)
查看>>
原来我之前一直用的APM固件....现在很多东西明白了。
查看>>