点击上方“小麦大叔”,选择“置顶/星标公众号”

福利干货,第一时间送达

大家好,我是小麦,小时候用小霸王玩魂斗罗的时候,三条命就可以打通关,感觉自己挺厉害的,因为魂斗罗的关数还是很多,剧情也比较长。那么,问题来了。

为什么魂斗罗只有 128KB 却可以实现那么长的剧情?下面来给新生代程序员讲讲这里面的奥秘吧。

现代程序员A和1980年代游戏程序员B的对话:

A:为什么你用128KB能实现这么多画面、音乐、动画?

B:128KB还不够么?其实为了表现力已经相当奢侈了,加了很多不重要的细节。

A:就说你们的音乐,这个音乐,我压到最低码率的mp3,也得至少1MB吧。

B:你怎么压的?一首背景音乐怎么可能超过1KB。

A:那你实现全屏卷轴,用了多少显存?

B:一共就只有2KB显存,多了也放不下啊。

A:……

1、我们对“数据量”无法直观认识

除非是专家,一般人根本无法估算到底多大算大,多小算小。

一般人对“数据量”并没什么概念。一篇800字的作文有多少数据量?按照GBK编码,约1.6KB,按照UTF-8编码,则是2.4KB。

只写了1个字的作文,按理来说1字节~3字节就够了。但只写1个字的word文档,有10956字节,而由于硬盘格式化要求,再多占用1332字节

我就写了一个字,真的什么都没干

现实中常见的产品、流行的技术,实际上和时代背景密切相关。

当你抱着15寸笔记本还嫌小的时候,1990年代初的家庭,可是一家人围着14~18寸的球面电视看的。把雪碧拿给古代人喝一口,估计他会齁得要死,必须喝点水压压惊。

当物质基础变得十分丰富的时候,一定会产生无法避免的“浪费”,这种“浪费”会进一步改变人感受的阈值,对度量的估计都变得紊乱了。

2、FC时代的图形技术

由于早期的记忆芯片(ROM)非常贵,而且大容量磁盘的技术也不成熟,所以暂且不论硬件计算能力,仅仅是想增加游戏的总容量也非常困难。所以自然会使用符合当时水平的数据结构。

以红白机FC为例,它的分辨率为256x240。分辨率不算低,但却只有2KB显存,而且还要实现全屏卷轴效果。

所以在FC设计之初,从硬件上就提供了充分利用显存的方法——使用Tile(瓦片)。

对每一个场景来说,使用若干数量的瓦片,场景用有限的瓦片拼接即可。这种“二级”表示方法能极大节约存储量。

具体一些原理讲解可以看一些科普,比如这个:

https://www.bilibili.com/video/BV19J411e763

3、音频容量和代码容量

现代音乐格式往往直接保存声道的波形,这种做法保真度高、通用性强,但很显然占用空间多,一首曲子的容量以千字节、兆字节计算。

而八位芯片时代的音频解决方案,关键是一颗专用芯片,例如FC用的理光2A03:

下:理光2A03

音频芯片可以产生合成音效,能提供的音色可以在一定程度上配置,但非常有限。听听FC游戏的音乐可以体会到常用的音色几乎一样。

我觉得这个音频芯片最厉害的地方是可以同时播放几个音轨(但不能是和弦那种“同时”),《魂斗罗》、《沙罗曼蛇》、《忍者龙剑传》的殿堂级音乐,主要是靠多个音轨的交替配合实现的。

每个音符只要记录音色、频率和音高就足够了,音频芯片自然会识别出来。把音符按时间排列好就是“乐谱”了,可以简单理解为“简谱”。

这种简谱需要的数据量十分有限,而且大部分游戏音乐都是循环播放,数据量更是小的可怜。

代码也是类似的。

FC时代的游戏,没有所谓的“引擎层”,或者说引擎层就是“硬件层”。任天堂的主机完全是为游戏而设计的,瓦片、调色板、音乐、音效等基本功能已经预先考虑到了,这样一来就节约了大量底层代码。

程序员要仔细研究文档,在硬件框架下思考问题,比如如何显示图片、如何卷动屏幕等等;而且还要非常熟悉硬件底层和汇编,不要浪费代码空间。

一来二去,代码也能写的非常小。

总的来说,128KB的游戏大作,在30年前稀松平常,放到现在简直就是黑科技。

科技的剧烈变革带来技术指标非线性的变化,让我们的记忆和直觉彻底落伍 :)

作者:皮皮关

链接:https://www.zhihu.com/question/50076174/answer/1101330430

—— The End ——

19岁天才少年纯手工自制CPU,直呼NB

100元都不到的树莓派Zero 2 W正式发布!

嵌入式为什么没有软件架构师?

分享 

为什么 128 KB 的魂斗罗可以塞下这么长的剧情?相关推荐

  1. 为什么 128 KB 的魂斗罗可以实现那么长的剧情?

    为什么魂斗罗只有 128KB 却可以实现那么长的剧情?下面来给新生代程序员讲讲这里面的奥秘吧. 现代程序员A和1980年代游戏程序员B的对话: A:为什么你用128KB能实现这么多画面.音乐.动画? ...

  2. 为什么 128 KB 的魂斗罗可以实现那么长的剧情 ?

    喜欢黑客技术和网络安全的,可以关注看看 为什么魂斗罗只有 128KB 却可以实现那么长的剧情?下面来给新生代程序员讲讲这里面的奥秘吧. 现代程序员A和1980年代游戏程序员B的对话: A:为什么你用1 ...

  3. 为什么128KB的魂斗罗可以塞下这么长的剧情?

    大家好,我是小麦,小时候用小霸王玩魂斗罗的时候,三条命就可以打通关,感觉自己挺厉害的,因为魂斗罗的关数还是很多,剧情也比较长.那么,问题来了. 为什么魂斗罗只有 128KB 却可以实现那么长的剧情?下 ...

  4. 为什么只有128KB的魂斗罗,可以那么长的剧情?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 红白机 来源 | https://urlify ...

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

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 来自 | 知乎 链接 | https://www.zhihu.com/question/50076174 编辑 | 深度学习这件小事公众号 ...

  6. C语言手写魂斗罗(一)

    目录 1. 项目介绍 配套视频教程 2. 游戏效果演示 3. 项目准备 4. 创建项目 5. 实现游戏的启动界面 1. 项目介绍 使用C语言,手写魂斗罗经典游戏场景. 配套视频教程 视频讲解整个开发过 ...

  7. 音效摸鱼还不够爽?试试IDE里打几盘魂斗罗?

    1. 前言 前几天分享了 IDEA 的马里奥插件,收到了很多私信.但是胖哥感觉这种还不够爽,今天分享的摸鱼游戏插件才是真正的回味童年. 2. 真正的小霸王 IDE 高能预警,小心使用,这个可是真的会触 ...

  8. Java魂斗罗1234合集_《魂斗罗》正统续作1234部介绍,别再搞错喽!

    原标题:<魂斗罗>正统续作1234部介绍,别再搞错喽! 说到<魂斗罗>相信大部分玩家最早接触到的都是FC游戏,也就是我们说的小霸王游戏.红白机 但其实<魂斗罗>最早 ...

  9. java魂斗罗_java 魂斗罗

    1.课设课题 组长: 沈宇涛 组员: 唐洪俊, 蔡丰骏 1.1 基于java swing开发的魂斗罗 可实现的功能: 人物的移动射击以及跳跃 人物武器的切换 人物的死亡与重生 敌人的行为设定 1.2 ...

最新文章

  1. RecyclerView显示加载多种布局的原理
  2. 可靠数据传输原理1(构造可靠数据传输协议)
  3. SLAM:SLAM(即时定位与地图构建)的简介、发展、案例应用之详细攻略
  4. 练习. SQL--选修课程练习
  5. 给ztree节点赋值
  6. [Redux/Mobx] 你有使用过redux-saga中间件吗?它是干什么的?
  7. 研讨会 | 知识图谱引领认知智能+
  8. python-matplotlib学习(1)
  9. 价值80元的emlog博客用户注册插件
  10. 嵌入式Linux开发笔记(韦东山2)
  11. 【C 语言】文件操作 ( fseek 函数 )
  12. 计算机自带游戏如何删除,win7怎么彻底删除自带游戏,win7自带游戏怎么删除隐藏...
  13. 野火PID上位机通信移植
  14. Fluent Meshing的workflow方法
  15. 轻风送暖写诗意,梅雨传情送祝福
  16. 使360浏览器打开网页默认为极速模式
  17. 随机森林实例:利用基于CART算法的随机森林(Random Forest)树分类方法对于红酒质量进行预测
  18. 【译】Learn D3 入门文档:Joins
  19. 解决Windows10/11系统桌面背景或者IDE背景出现的莫名其妙的方框/格子
  20. 史上最全最详细2014年初mac air 128G硬盘 4G内存 更换512G硬盘及更新最新操作系统macOS Big Sur操作手册

热门文章

  1. 九龙证券|半导体又涨嗨了!券商再喊牛市起点!
  2. 计算机二级vb考试教材,计算机二级考试VB基础题教材.doc
  3. Python使用Scrapy爬虫框架全站爬取图片并保存本地(@妹子图@)
  4. gossip协议学习笔记
  5. 拒酒词,社交必备!!!
  6. 信息爆炸,用写作让它慢下来-2023.04.07
  7. 怎么修复网站漏洞 骑士cms的漏洞修复方案
  8. SpaceShooter打飞机教程笔记(三)
  9. 热烈欢迎云南财经大学统计与数学学院院长石磊教授来芝诺数据视察指导工作
  10. 差分放大电路知识总结