查看原文
其他

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

鸟哥推荐 菜鸟要飞 2022-07-30

公众号关注 “菜鸟要飞”

设为 “星标”,和12万程序员一起成长!

原文:https://www.zhihu.com/question/50076174/answer/120085844


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


说个题外话,鸟哥是个比较喜欢折腾的程序员,业余喜欢开发自己网站、小程序、App等,这些东西统统离不开服务器!最近就围绕服务器的主题创建了一个微信群,喜欢玩服务器或者想自己开发一款产品的读者可以进来,相互学习交流!我也会时不时的带大家撸点和服务器相关的优惠券!不感兴趣,不喜欢折腾的就没必要凑着闹了!


识别二维码,添加微信后

发送【服务器】即可获取邀请链接

这是我部署的机器人,请勿调戏!


推荐阅读

有点敏感,老铁们低调使用就好!

注意啦!百度网盘暗藏陷阱 !偷偷吃掉1MB/s上传带宽....

雷军 1994 年写的代码,经典老古董(附完整代码)

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存