为什么魂斗罗只有 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

往期推荐

被问 Linux 命令 su 和 sudo 的区别?当场蒙了!

为什么 JSP 还没有被淘汰?

史上最全的Excel导入导出(easyexcel版)

上午写了一段代码,下午就被开除了...

雷军做程序员时写的博客,很强大!

为什么“1000==1000”为false,而”100==100“为true?

使用 Stream API 高逼格 优化 Java 代码!

Chrome App 将停用

为什么 128 KB 的魂斗罗可以实现那么长的剧情?相关推荐

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

    点击上方"小麦大叔",选择"置顶/星标公众号" 福利干货,第一时间送达 大家好,我是小麦,小时候用小霸王玩魂斗罗的时候,三条命就可以打通关,感觉自己挺厉害的,因 ...

  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. 因为高校规定博士生毕业必须发核心论文!导师表态:那我拒绝招收研究生
  2. Stimulsoft Reports.Silverlight 2013.2下载
  3. 2019-1-17王志颖 c语言作业
  4. 高桥盾react和boost_boost与react的战斗
  5. java压缩----使用ANT JDK压缩---解决中文问题
  6. 基于QoE的实时视频编码优化:低功耗,低延时,高质量
  7. PyODPS DataFrame 的代码在哪里跑
  8. [渝粤教育] 西南科技大学 英语口语 在线考试复习资料
  9. linux下的c语言编程实验4,实验四-Linux下的C语言编程
  10. SQL系列(五)—— 排序(order by)
  11. 【paper and code】StarGAN
  12. 计算机主机前声音口怎么设置吗,电脑前面的插孔没声音怎么设置
  13. 苹果手机密码设置在哪里_oppo怎么设置SIM密码-oppo手机SIM卡密码设置详细教程
  14. java生成tga图片_游戏制作行业为什么使用TGA格式的贴图而不使用PNG格式?
  15. http状态码为499的解决办法
  16. 什么是combo复用口,光电类型如何转换?
  17. matlab错位相减,matlab随手记
  18. 路透社:韩国游戏巨头Nexon欲出售控股权 腾讯将扮演关键角色
  19. 硅谷钢铁侠--Elon Musk
  20. SQL中各关键字以及DBeaver工具的使用

热门文章

  1. objectArx --- 工具类
  2. 福昕阅读器给pdf创建目录方法
  3. Sqlite出现database is locked
  4. 第八篇order订单专题(5)限价止损单、跟踪止损单、跟踪限价止损单讲解
  5. 大数据毕设项目 深度学习火焰检测识别 python opencv
  6. 计算机网络学习——王道教材书(持续更新)
  7. STM32中堆栈的理解
  8. 玩机搞机---全网最详细的手机全机型 刷机教程 二
  9. 【基础】什么是网关以及网关作用
  10. 生物信息学算法之Python实现|Rosalind刷题笔记:001 碱基统计