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

news2024/11/29 0:34:21

       经常看到有同学在抱怨现在的游戏、APP占用非常大的空间,基本都是 10G 起步。

这让我想到初中时玩过的一款游戏魂斗罗,为什么它只有 128KB 却可以实现那么长的剧情呢?这篇文章将会给大家讲讲这里面的奥秘~


正文

 

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

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

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

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

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

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

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

A……

我们对数据量无法直观认识

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

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

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

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

 

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

FC 时代的图形技术

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

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

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

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

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

 

音频容量和代码容量

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

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

 

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

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

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

 

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

代码也是类似的

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

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

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

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

 

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

< END >

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/597594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小程序安装Vant Weapp详细步骤,下载和npm安装版

小程序安装Vant Weapp详细步骤 使用npm下载1、新建项目并初始化项目2、下载Vant Weapp3、修改 app.json4、构建 npm 包5、引入组件 下载方式1. npm下载或者下载[官方示例](https://github.com/youzan/vant-weapp)2. 把里面的dist文件夹复制出来&#xff0c;放到项目的根目录&am…

MKS SimpleFOC ESP32 例程7 双电机电流控制

Makerbase ESP32 FOC 例程7 双电机电流控制 第一部分 硬件介绍 1.1 硬件清单 序号品名数量1ESP32 FOC V1.0 主板12ARDUINO UNO主板23MKS SF2804电机1412V电源适配器15USB 线1 注意&#xff1a;YT2804是改装的云台无刷电机,带有AS5600编码器&#xff0c;可实现360连续运转。…

恒流间歇滴定法(GITT)测试锂离子电池的实验流程

恒流间歇滴定法&#xff08;GITT&#xff09;测试锂离子电池的实验流程 锂电池作为现代电子设备中最常用的电源之一&#xff0c;其性能和安全性对于设备的正常运行至关重要。恒电流间歇滴定法是一种常用的测试方法&#xff0c;用于评估锂电池的容量、循环寿命和内阻等关键参数。…

黄色荧光染料:1811539-32-8,JF549,NHS,JaneliaFluor549,SE,JF549琥珀酰亚胺酯

【产品描述】 Janelia Fluor549&#xff0c;SE是一种黄色荧光染料&#xff0c;作为NHS酯提供&#xff0c;用于连接伯胺基。NHS酯部分可以与伯胺特异有效地反应&#xff0c;形成共价酰胺键。NHS活化酯是生物标记反应中常用的活化基团。NHS活化TAMRA分子中的羧基&#xff0c;让它…

Ubuntu pwn环境搭建

文章目录 前言环境准备系统安装安装VMtoolsapt换源安装pip并换源安装pwntools安装gdb插件安装one_gadget安装 LibcSearcher 后记参考 前言 重新装了一下pwn环境&#xff0c;踩到了好多坑&#xff0c;顺便记录一下 环境准备 ubuntu 20.04&#xff0c;可以到镜像站下载&#x…

[CTFTraining] 0CTF 2016 Unserialize

​ 打开环境后是这样&#xff1a; ​ 找了挺多地方没啥头绪&#xff0c;干脆直接上dirsearch&#xff1a; ​ 发现有源码泄露&#xff0c;直接下载下来分析。先进行自动审计&#xff1a; ​ 发现有疑似的漏洞&#xff0c;但根据题目来看是反序列化的&#xff0c;还是要自行进…

月报总结|Moonbeam 5月份大事一览

本月&#xff0c;Moonbeam迎来了Uniswap V3的部署&#xff0c;经过一年的社区讨论&#xff0c;UniSwap V3终于以5000万个同意票通过&#xff0c;将在未来一个月内部署于Moonbeam&#xff0c;为Web3用户提供更广泛公链生态的多链体验&#xff0c;加速应用之间跨链交互&#xff0…

平板电脑系统优化垃圾清理软件CleanMyMac X

CleanMyMac 这是一款苹果系统电脑的清理软件&#xff0c;无论是Mac、苹果笔记本电脑还是平板电脑都可以使用。垃圾清理操作简单又方便&#xff0c;不但专项清理各种垃圾&#xff0c;还能卸载垃圾软件。 对于刚拿到苹果电脑的朋友来讲&#xff0c;选择一些必备的mac软件可以省去…

opencv3 模板匹配与直方图

模板匹配 尽量加上归一化操作 像素差值计算&#xff0c;模板在原图上滑动 ① 模板匹配和卷积原理很像&#xff0c;模板在原图像上从原点开始滑动&#xff0c;计算模板与&#xff08;图像被模板覆盖的地方&#xff09;的差别程度(例如值127与值190的区别)&#xff0c;这个差别…

NVM-Nodejs多版本管理工具

NVM:&#x1f50e;:下载点我 下载含有 setup.exe的 下载完成之后修改一下settings.txt 文件&#xff0c;在原有的基础上直接加入这些配置 root: D:\nvm path: D:\nvm\nodejs node_mirror: https://npm.taobao.org/mirrors/node/ npm_mirror: https://npm.taobao.org/mirrors…

(转载)多种群遗传算法的函数优化算法(matlab实现)

以下内容大部分来源于《MATLAB智能算法30个案例分析》&#xff0c;仅为学习交流所用。 1 理论基础 1.1 遗传算法早熟问题 遗传算法是一种借鉴生物界自然选择和进化机制发展起来的高度并行、随机、自适应的全局优化概率搜索算法。由于优化时不依赖于梯度&#xff0c;具有很强…

vue可视化大屏教程

在我们日常生活中&#xff0c;经常会看到各式各样的大屏&#xff0c;其中有一部分是传统的数据大屏&#xff0c;如工业监控大屏、环保监测大屏等。这些大屏的主要作用是展示信息&#xff0c;让用户快速获取信息&#xff0c;避免用户在阅读时产生视觉疲劳。还有一部分是智能的可…

建筑七大员有哪些发证部门?证书有什么区别?

建筑七大员是指建筑施工企业关键技术岗位&#xff0c;七大员分别是 施工员 质量员 标准员 材料员 机械员 劳务员 资料员 建筑七大员&#xff0c;常见的发证单位有住房和成乡建设厅和中国建设教育协会两个部门发证&#xff0c;但是大家还是要考住房和城乡建设厅的&#xff0c;建…

CANoe中如何仿真报文的CRC和Counter,告诉你三种方法皆可实现

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe,博客目录大全,点击跳转👉 📘前言 🍅 作为网络测试,有些测试场景总线中的其它节点进行仿真,因为…

SREWorks v1.5 版本发布 | 基于实时作业平台的日志聚类开源

在经过v1.0~v1.4四个版本迭代后&#xff0c;SREWorks的核心底座已经表现出极高的稳定性和成熟性。在v1.5版本中&#xff0c;SREWorks开发团队在核心底座上&#xff0c;进行了较多的数智化能力迭代。同时&#xff0c;在数智能力迭代过程中&#xff0c;我们也维持着与SREWorks用户…

5.2.4 IP数据报(二)分析Wireshark捕获的数据帧

5.2.4 IP数据报&#xff08;二&#xff09;分析Wireshark捕获的数据帧 为了更好的理解IP数据报的格式&#xff0c;我们通过一个实例学习IP数据报的格式 例&#xff1a;使用数据报捕获工具Wireshark采集我自己主机传输的一条报文&#xff0c;其中有个数据帧的内容如图所示&…

凝心聚力,共创未来 | 2023 开放原子全球开源峰会 OpenCloudOS 社区年会即将启幕

近年来&#xff0c;随着云原生技术的不断发展&#xff0c;催生出越来越多的新场景。作为企业 IT 系统的底层技术&#xff0c;其操作系统所面临的问题也变得越来越复杂。面对云原生等新技术对操作系统提出的新挑战、新要求&#xff0c;如何凝聚生态合作伙伴的优势力量&#xff0…

AI|用过的AI工具都给你整理好了

AI&#xff5c;用过的AI工具都给你整理好了 最近两周冷静下来了&#xff0c;而且个人状况因为二阳有所影响&#xff0c;没有过多关注这些AI工具&#xff1b;前两天给公司伙伴分享的契机&#xff0c;整理了一下这两个月用过的一些AI工具&#xff0c;部分是日常工作也在使用的&a…

展望开源产业与数字经济未来|2023 开放原子全球开源峰会开源创新理论与实践分论坛即将启幕

开源创新社会实践催生伟大的理论&#xff0c;也需要伟大理论的指导。在这个数字化和信息化高速发展的时代&#xff0c;开源技术已经成为推动科技进步和创新的关键力量&#xff0c;仍在不断创新迭代的开源理论及其实践更是深刻影响着与开源行业深度绑定的数字经济的未来发展。 6…

如何将多张图片分别生成二维码?图片批量建码怎么做?

当我们想要将图片生成二维码时&#xff0c;一般会使用二维码生成器&#xff08;免费在线二维码生成器-二维码在线制作-音视频二维码在线生成工具-机智熊二维码&#xff09;来操作&#xff0c;只需要上传图片就可以一键生成二维码&#xff0c;操作非常的简单快捷。那么当我们需要…