ITPub博客

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

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

作者:孤独键客 时间:2020-05-14 13:47:19 0 删除 编辑
程序员的成长之路
互联网/程序员/成长/职场 
关注


阅读本文大概需要 2 分钟。

周末不发技术性文章,祝大家周末愉快~

来源于:https://dwz.cn/ZTAnWr5j


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



昨天有小伙伴让我推荐下代码重构方面的书籍,个人感觉这本还不错,我书架就有它:



往期精彩回顾

19 条效率至少提高 3 倍的 MySQL 技巧

从零开始 Code Review,两年实战经验分享!

一次心惊肉跳的服务器误删文件的恢复过程

JVM 最多支持多少个线程?

一条简单的 SQL 执行超过 1000ms,纳尼?

这群开发者,每月至少能从 App store 躺骗几十万

如何优雅地给妹子优化电脑?(技巧篇)

写留言

喜欢就给个“在看”

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69902700/viewspace-3119665/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
一个不羁的码农,终身学习者。公众号「程序员的成长之路」。目前就职于一家游戏公司,主要负责服务器端,以及web系统的开发工作,对Java相关知识比较擅长。

注册时间:2018-12-14

  • 博文量
    793
  • 访问量
    119770