为什么 128 KB 的魂斗罗可以实现那么长的剧情 ?
喜欢黑客技术和网络安全的,可以关注看看
为什么魂斗罗只有 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
<END>
点这里
为什么 128 KB 的魂斗罗可以实现那么长的剧情 ?相关推荐
- 为什么 128 KB 的魂斗罗可以塞下这么长的剧情?
点击上方"小麦大叔",选择"置顶/星标公众号" 福利干货,第一时间送达 大家好,我是小麦,小时候用小霸王玩魂斗罗的时候,三条命就可以打通关,感觉自己挺厉害的,因 ...
- 为什么 128 KB 的魂斗罗可以实现那么长的剧情?
为什么魂斗罗只有 128KB 却可以实现那么长的剧情?下面来给新生代程序员讲讲这里面的奥秘吧. 现代程序员A和1980年代游戏程序员B的对话: A:为什么你用128KB能实现这么多画面.音乐.动画? ...
- 为什么128KB的魂斗罗可以塞下这么长的剧情?
大家好,我是小麦,小时候用小霸王玩魂斗罗的时候,三条命就可以打通关,感觉自己挺厉害的,因为魂斗罗的关数还是很多,剧情也比较长.那么,问题来了. 为什么魂斗罗只有 128KB 却可以实现那么长的剧情?下 ...
- 为什么只有128KB的魂斗罗,可以那么长的剧情?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 红白机 来源 | https://urlify ...
- 为什么魂斗罗只有 128 KB 却可以实现那么长的剧情?
点击上方 Java后端,选择 设为星标 优质文章,及时送达 来自 | 知乎 链接 | https://www.zhihu.com/question/50076174 编辑 | 深度学习这件小事公众号 ...
- C语言手写魂斗罗(一)
目录 1. 项目介绍 配套视频教程 2. 游戏效果演示 3. 项目准备 4. 创建项目 5. 实现游戏的启动界面 1. 项目介绍 使用C语言,手写魂斗罗经典游戏场景. 配套视频教程 视频讲解整个开发过 ...
- 音效摸鱼还不够爽?试试IDE里打几盘魂斗罗?
1. 前言 前几天分享了 IDEA 的马里奥插件,收到了很多私信.但是胖哥感觉这种还不够爽,今天分享的摸鱼游戏插件才是真正的回味童年. 2. 真正的小霸王 IDE 高能预警,小心使用,这个可是真的会触 ...
- Java魂斗罗1234合集_《魂斗罗》正统续作1234部介绍,别再搞错喽!
原标题:<魂斗罗>正统续作1234部介绍,别再搞错喽! 说到<魂斗罗>相信大部分玩家最早接触到的都是FC游戏,也就是我们说的小霸王游戏.红白机 但其实<魂斗罗>最早 ...
- java魂斗罗_java 魂斗罗
1.课设课题 组长: 沈宇涛 组员: 唐洪俊, 蔡丰骏 1.1 基于java swing开发的魂斗罗 可实现的功能: 人物的移动射击以及跳跃 人物武器的切换 人物的死亡与重生 敌人的行为设定 1.2 ...
最新文章
- 【神经网络】(1) 简单网络,实例:气温预测,附python完整代码和数据集
- angular react_Angular 2 vs React:将会有鲜血
- Linux中ifreq 结构体分析和使用
- js高级程序设计笔记——DOM扩展
- 【视频课】模型剪枝+模型量化+知识蒸馏典型实践!
- 结对编程前对队友程序的分析与对比总结
- Educational Codeforces Round 94 (Rated for Div. 2) D(思维)
- C++ 移动和获取文件读写指针
- Microduino中LM75温度传感器的使用
- Ridge regression
- iqooneo系统要不要更新_手机系统要不要升级?别纠结,1分钟看完你就知道
- Jlink 下安装JLINK驱动
- Linux入学—共享文件夹(保姆教程)
- 暗战 惠普再掀市场风云
- 华硕B85M系列主板 免编程器刷BIOS教程
- 火狐浏览器怎么样 火狐浏览器都有哪些优缺点
- Deepin20(1002版本)安装LBP2900打印机
- 编程愤怒的小鸟代码python_Python 愤怒的小鸟代码实现(1):物理引擎pymunk使用
- Java实验四:类和对象;类的继承和派生;多态性; 接口;构造器应用
- Git详解之六:Git工具
热门文章
- Table was not locked with LOCK TABLES
- 网络编程和数据库(一)
- 驼峰命名法(CamelCase)和下划线命名法(UnderScoreCase)之间的转换
- IOS AutoFill Extension 使用
- pycharm报错warning: iCCP: known incorrect sRGB profile
- Java虚拟机讲解 与 搞垮Java虚拟机
- QT中读取STL并显示
- 类似visio的拓扑图节点连线控件免费下载
- win10企业版LTSC-1809无法访问共享文件
- 基于音乐/电影/图书的协同过滤推荐算法代码实现(基于用户推荐、基于项目推荐、基于SlopeOne算法推荐、基于SVD算法推荐、混合加权推荐)