社会热点

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

电脑版   2020-11-26 12:34  

为什么魂斗罗只有128KB却可以实现那么长的剧情?:您好,我是小哪吒,很高兴回答你的问题。现代程序员A和1980年代游戏程序员B的对话:A:为什么你用128KB能实现这

1

您好,我是小哪吒,很高兴回答你的问题。现代程序员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(瓦片)。

对每一个场景来说,使用若干数量的瓦片,场景用有限的瓦片拼接即可。这种“二级”表示方法能极大节约存储量。具体一些原理讲解可以看一些科普,比如这个:

【萌新图形学】TileMap瓦片地图简介,以及它的优化原理_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili?www.bilibili.com

3、音频容量和代码容量

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

而八位芯片时代的音频解决方案,关键是一颗专用芯片





2

超级玛丽才64K,剧情比魂斗罗还长。

当年电脑技术的限制和成本限制导致FC硬件性能不行,FC上魂斗罗、超级玛丽这种优秀的游戏,在设计阶段就考虑怎么实现“人看上去内容丰富,实际技术层面单调”,游戏策划人员和程序员密切合作,实现了效果好、容量小、对性能要求还低。

例如魂斗罗这种游戏中,由于主机内存空间有限,任何一帧画面的颜色其实只有16种,但通过美工巧妙的设计,人家16色的画面达到了256色的效果。

今天的很多2D游戏基本都是65536甚至更高的色彩,除了少数优秀作品,大部分游戏颜色搭配上感觉也没有超越魂斗罗。

你看看今天XBox上赠送的"大战喵星人3

魂斗罗有剧情吗?题主可能说的是关卡的长度吧,这样说的话,魂斗罗游戏的长度确实不算短的,可容量却如此之小,其实原因大概如下几点。

一款游戏中最占用容量的地方在哪

首先,玩法肯定是最不占容量的部分,这些都是通过代码实现的,一款游戏中最占用容量的地方在于画面,音乐,还有过场动画,早期的FC游戏自然是没有什么过场动画的,音乐都是一种类似于MIDI的电子音乐,几乎不占用什么容量,画面则是由一个个的基础像素点配上颜色来构成的,游戏的分辨率也是非常的低,所以以这些元素来构成的游戏,容量自然大不到哪里去,128KB,还没有如今的手机随便拍一张照片大。

建模重复与镜像

这在当年的FC游戏中是各个游戏厂家非常惯用的手段,一方面是省事,另一方面就是节省容量了,在很多游戏中我们都会见到各种重复的建模,RPG游戏中的一些NPC,树林,山脉,很明显的重复,超级玛丽,重复的怪物和地形,魂斗罗也是一样。镜像是什么意思呢,比如我们要构建一个左右对称的角色或者道具吧,我们只要做一半就好了,剩下的一半以镜像复制的方式来实现就完整了,很简单吧。

总结

当然了,这些都是当年由于科技发展,没有办法才采取的一些技巧,或者是偷懒吧,现在的游戏其实也会使用一些,但不会那么明显的被玩家们看出来了,因为现在的游戏容量方面可以说没有什么问题的,技术方面也是,最大的问题是,好看是越来越好看了,可有多少玩家还能找回当年玩魂斗罗时候的乐趣呢?

4

这件事应该是“软件”标签吧?单是魂斗罗和游戏标签恐怕是不够的。


8位机的时代,玩的是技术。而且是将硬件榨出水来的技术。

先看这个画面:

如果是现在编程的话,那么会将这个画面里面的所有场景建立一个3D模型,然后附加上各种不同形式的贴图,在定义一个摄像机跟随玩家的操作沿着3D场景进行移动。这时3D构成的人物依靠骨骼路径的动作在画面上跑起来。


但实际上,如果在8位机上这样做,一秒钟恐怕连一个像素都难以渲染出来。

仔细去看刚刚的游戏画面,会不会发现游戏中很多部分是不断重复的?岩石、道路、山体等等一系列的场景几乎都是由相同的小图形块重复贴出来的。


在8位机开发的时候,整个游戏的画面叫做一个“画板”整体上其实只有8X8的大小(不信去数格子)。而每一个不同的图形块叫做“画刷”。

有点类似于这张图右边的感觉。

构建一个画面的数据是64个字节,每个字节代表着画刷区域的一个编号(最多255个)

这样就可以弄出来

01 01 02 01 01

01 01 02 01 03

这样的一个数据结构。

在画一个帧的时候,按照数据格式调取画板数据到视频缓冲区就可以了,这样即使是8位机也能满足一秒钟刷新30-25帧的效果。


但这样做的局限其实也是刚才说过的了,画面细节大量重复,这就相对考验美工人员的水平了,要如何在相对重复的元素中做出美感。


背景是这个样子,其实在魂斗罗的游戏中还有一个移动的前景,也就是角色和敌人以及枪弹的前景图层。

也是利用相同的绘画原理所制作出来的,只不过,前景的角色图片中有自己透明色,在填充的时候00编号的数据会直接跳过去。



对于音乐什么的和画面一样大部分是存储的midi音乐编号,然后去midi音乐库中调取这个声音。

midi音乐库其实就是音乐的“画刷”,有点类似于已经做好的一个钢琴,你按哪个琴键就会发出什么样子的声音,而记录音乐的数据也就是“琴键”编号了。


魂斗罗一共8关,剧情不算长,而整体上如果说剧情的部分,咱们可以算一下,每关大约12个画面,一个画面64个字节,剧情摆布才6K的数据而已。总的资源库的内容大约是8K,音频的内容大约是8K,这样换算下来其实还不足128k呢

5

1.游戏大量复用图块,图块还使用调色板索引,好像每个像素才占用2bit。

2.程序员精心优化各种数据结构,每一bit存储都不浪费。

3.声音只存储发声通道的调制参数序列,能复用就复用。

4.代码全是汇编写成,直接操作硬件,基本不存在浪费的指令。


6

说起《魂斗罗》容量问题,其实美版和日版还不同,我们小时候玩的黄卡基本都是美版(盗版),卡带容量比较小,而日版其实要比美版大一倍。

玩过日版的《魂斗罗》会发现,这个版本中每关之后都是有过场动画的,通关动画也比美版多一个坐直升飞机的过程。

关于容量的问题,当时FC红白机实现图像的原理的核心就是“重复利用”,开发者制作一个个小方块作为基本元素,放在一个库中(CHR图形库),游戏中所有的图像都是由图形库中的基本元素拼接成的。

像现在一张照片就要几M,放在当时是不可能做到的,所以不得不采取重复利用的方式。

7

FC游戏:麻雀虽小,五脏俱全。在那个炎热漫长的晌午,熟练的掌握着小霸王游戏机以及黑白电视机连接的所有程序,一旦操练起来就会将家长快要回家的局限忘却抛在脑后。在上个世纪90年代,无论是盗版任天堂的小霸王游戏机还是以学习打字为借口购买的学习机,FC游戏承载了几代人永远无法忘却的快乐回忆!


说出来简直难以相信,当年的那些FC游戏大作只有几百KB的容量,反观现在的游戏大作动辄就是几十个G甚至几百个G,无时无刻不在挑战玩家的硬盘容量。随便拿一张SD卡或者U盘,就足够装下曾经梦幻般的FC时代,足以将整个FC时代的游戏作品全部重温一遍。社会在发展,科技在进步,时下以任天堂为核心的游戏主机以及游戏制作水平早已甩当年十几条街。

作为那个年代的“情怀游戏”,首推魂斗罗和超级玛丽,曾让无数青少年日夜奋战废寝忘食如痴如迷,激烈枪战的火爆场面更是点燃玩家的激情,能用一条命通关的玩家就是朋友圈和论坛最牛叉的人。只有128KB的魂斗罗,塞进了有趣长篇幅的游戏剧情,将堪比像素风的宛如打了马赛克的游戏画面演绎到极致,这在红白机时代解决游戏卡带内存有限的资源压缩技术上具有里程碑的意义。

FC红白机,毕竟是只有8bit的机器,16位的画质分辨率也只有256x240,基于2KB的显存还要实现全屏卷轴效果。可想而知,满屏都是马赛克,即使放大也只是色块被放大,自然不会觉得模糊。FC时代的音频芯片可以产生合成音效,能够提供的音色非常有限,听听FC游戏的音乐就可以体会到常用的音色几乎都是一个版本。FC时代一颗可编程的声音发生器,可以提供4个模拟声道和1个PCM数字声道,其中3个模拟声道用于演奏乐音,1个杂音声道表现如爆炸、枪炮声等特殊声效,PCM数字声道表现连续的背景音,可以同时播放多个音轨才是发生器最厉害的地方!受到电脑技术以及研发成本的双重限制,FC硬件性能普遍跟不上,本着“游戏看上去内容还算丰富,技术层面实则单调”的设计初衷,游戏编程人员极力缩小优化数据结构,让只有128KB任何一帧其实只有16色的魂斗罗表现出了256色的效果。

总结

?游戏大量复用图块,图块还使用调色板索引,好像每个像素才占用2bit。

?程序员精心优化各种数据结构,争取不浪费每一bit的存储空间。

?声音只存储发声通道的调制参数序列,能复用就复用。

?代码全是汇编写成,直接操作硬件,基本不存在浪费的指令。

元芳,你怎么看?

感谢各位的游戏,喜欢的朋友记得点波关注!

有你们的陪伴,每天都是元气满满!!!

8

你好兄弟,我是正在认证游戏领域的老玩家强仔,希望我的回答能够帮助到你

关于你的问题,我一共整理了4点要素

1.游戏大量复用图块,图块还使用调色板索引,好像每个像素才占用2bit。

2.程序员精心优化各种数据结构,每一bit存储都不浪费。

3.声音只存储发声通道的调制参数序列,能复用就复用。

4.代码全是汇编写成,直接操作硬件,基本不存在浪费的指令。

9

很简单。计算机表达方式只有0与1,魂斗罗开发在先,为了防止侵权,越写越长。

10

FC和小霸王主机自带SDK库吧,这些128KB游戏主要是调用库,所以风格类似~

本文版权归原作者所有,如需商业用途或转载请与原作者联系。

分享

相关信息
 
李靓蕾会原谅王力宏吗

2021-12-30 14:01:01