您现在的位置:主页 > 高手联盟高手坛400444 >

《孙悟空大战机器金刚》开发日志:缘起篇

  是的,《孙悟空大战机器金刚》原本计划是开发成一个 FC (NES/红白机)游戏的。没错,请先不要换台,后面真的有 ROM 下载。

  很多人看了现在这个版本会觉得有 FC 游戏的既视感,原因就是美术部分遵循了当时的 FC 硬件限制。

  什么是 FC?就是 Family Computer,欧美叫 NES 国内俗称红白机,玩家接触较多的都是仿制机:

  FC 可使用的颜色共56色,但是每个 Tile (图块)(无论是 Sprite 还是背景的)都只能用 4 种颜色,其中一种作为透明色,也就是说能显示的只有三种颜色。所以悟空的本体就是 3 种颜色:

  说实话这个色板颜色数已经不少,因为是硬件决定的,所以很多颜色都不好搭配。不过就是这个色板创造了很多的经典。

  有人说了,很多 FC 得角色好像不止 4 色啊?对的,有这样的情况,那些是用多个图块叠加而成的,比如初代洛克人:

  题外话:游戏商店发布时,有些媒体转发,下面有评论说这个游戏是洛克人换皮。说真的,这启发了我,有时间我还真能把初代洛克人给换皮成悟空。

  FC 的图形处理是通过 GPU (任天堂叫 PPU),基本上就只能使用若干个 8x8 像素的图块来组成所有的画面,这些图块按照今天的说法就是贴图,绘制的过程不需要 CPU 进行处理,你需要做的就是告诉 PPU,在什么地方画哪个图块。孙悟空主要使用了 2x2 个图块,大小相当于马里奥没有变大的时候(变大的马里奥是 2x3 个图块):

  这是保留至今的三帧跑步动画,可以看到如果处理得当,上面的两个图块在每帧都是一样的,这样一来可以省去4个图块。之所以要省,那是因为卡带容量有限。

  由于 FC 的总线位,所以可寻址的空间为 64K,这地址进行了映射,部分映射到内存,部分映射到程序代码,部分映射到硬件。初代的超级马里奥的容量为 40K,其中代码容量 32K,图像容量为 8K。而这些就是当时硬件一开始能访问到的最大容量,后来新技术的加入才支持更大的容量的卡带。

  上图就是红白机卡带拆开后看到的情况,这是最原始的 NROM 结构,右边那块是 PRG 芯片,用于存储代码,左边这块是 CHR 芯片,用于存储图像。可以看到每个芯片有单独的引脚,这些分别由 CPU 和 PPU 直接进行访问。

  Anyway,8K 的图像有多少?就是两张 128x128大小的图,一般一张用于 Sprite 一张用于背景:

  那我当初的目标就是做一个游戏,然后自制成一个卡带,在实机运行(有人意识到红白机才是中国人拥有数量最多的主机吗?)。芯片可以使用 EPROM 进行烧录,反正通过淘宝可以淘到相关的东西,甚至还能抄板电路版生产出来,所以做成卡带完全是可行的。

  红白机日版的卡带封面和包装以及说明书十分的精美,下图是我曾经拥有过的柯纳米世界1代的包装:

  虽然卡带封面大部分都很有欺骗性,不过,也有另类的,说的是南梦宫,早期的卡带封面用的都是游戏截图:

  精美的封面和说明书为游戏增加了很多额外的价值,玩不到游戏时看着这些就很过瘾(比如几个小伙伴轮番上阵时,你可以在旁边看说明书)。

  这里再次推荐一个网站,上面都是一些虚构的红白机卡带,甚至还用这些卡带封面举办了 Game Jam。

  所以,原来是计划做一本小册子的,上面有操作方法,还有手绘敌人和地图的介绍。现在就暂时搁置吧。

  当然如果你想探讨为老主机做游戏是不是真的有什么现实的意义的话,可以看以下两个视频:

  FC 游戏主要使用 6502 汇编语言编程,6502 的指令很少,FC 的硬件也不复杂,只不过适应了高级语言的话会感觉稍微不便。但是用 C 这样的语言对于 FC 来说又过于臃肿。所以尝试过各种奇技淫巧,比如创造一个节点式的界面来组织各种汇编代码段:

  后来用得最多的是:使用 java 进行“封装”。也就是使用更易读的脚本语言来生成汇编代码,之后再进行编译。然后在 java 的基础我使用 coffee 来让脚本更简洁。大概的代码是这样的,左边是 coffee 右边是输出的 asm,这里都是截取部分,asm 的输出会多很多:

  不要太兴奋,这个 rom 运行起来大概就是这个样子,就是简单的动画测试:

  下图就是这个测试 Rom 里面用到的图形部分,左边是用于角色的,可以看到剩下的空间也不是很多,能多几个敌人和 1 个 Boss 就不错了。还得加上一些特效什么的。总之活动的都放在左边这个图。 FC 的图形存储格式是比较特殊的,一个字节可以存4个点的信息,所以我还做了工具将像素绘图软件的输出进行格式转换,变成 CHR 二进制文件。

  那个时候用得比较顺手的是 H5 的技术,用来做编辑器什么的很方便。后来,感觉直接制作 ROM 的方式来做原型好像有点慢,也许可以先做个 H5 版本的原型,这样还能让别人随时在手机上测试什么的。所以后来也尝试各种 H5 的游戏引擎框架,比如 melonJS / Pixi / Phaser 什么的,总之这个项目就是个实验场。

  melonJS 版本,特点是可以直接读取 Tiled 文件作为关卡设计:

  下面这个是 phaser 的版本,那个时候已经背景图块风格基本确定并沿用到现在,当时是打算整个屏幕不带卷轴的,一个屏幕一个房间:

  而现在的这个项目就是基于当时用 Construct 2 做的一个简单原型:

  这些事情都是 2017 年的业余时间里做的了。2017 年底我开始全职做独立游戏,这期间有各种尝试,到了 2018 年 6 月左右,我打算制作一个收费游戏,当时就想着应该是做一个能够快速实现/体量不大的东西,所以为什么不把这个东西拿出来做呢。用现在的说法结果是挖了个坑。

  在我开始发制作日志之后,当然会受到读者反馈的影响。比如有人开始建议手感,还有一些前摇后摇之类的我没听过的名词,还有关卡设计的重要性等等。虽然离原来的目标远了,但是也未必是什么坏事,毕竟 Paper Please 就是这么来的。

  最后说说关于这个奇葩的名字。 这游戏的想法基于一个 What if:如果在 FC 时代,我会做一个怎样的游戏。 我觉得以前好像有那么一段时间市面上有很多孙悟空大战 XXX 的书,所以相应的也会推出相同题材的游戏吧(当然这个时间点我也不想做准确的考证)。

  另外,孙悟空在我们那个年代是个很强的 IP,小沈阳在坟场那个是哪个小品?,我很小就可以凭空画出两个卡通头像,一个是米老鼠,另一个就是大闹天宫动画版的孙悟空,直到现在这个还是我印象最深的孙悟空形象。

  而以孙悟空为主角的作品,除了比较常见的剧场动画之外,还有两个我得提一下:

  以上两者,可以看出都是有水准的作品,不过并不是灵感的出处。在我少年时期(或者青年?),大量欧美日本 ACG 产品涌入,国产 IP 式微,各种“孙悟空大战”系列只能说是一种无力的抵抗了:

  虽然有些绘图作者还是有点功底的,但大多数都是充满了中国式的审美,而现在的儿童市场上这种中国式的审美还在延续。不过不管你喜不喜欢,很多人的童年精神世界会被这类产品所覆盖。所幸我经历过小人书和海南美术摄影出版社的时代,已经能分辨出作品的质量。这些漫画无论如何终归也是一个时代的印记。

  另外我想说的是,类似关公战秦琼的想法本来就是一种原始而朴素的创作手法,比如:

  很多人直接的说,看到这个名字我就直接关掉网页了。 这很正常,我只是相信有人看到这个名字能够会心一笑。 然后这里面能有部分的人会进行下一步的尝试。全新19款jeep牧马人平行进口车价格解读

  怀旧完毕,以上这些就是促使这游戏诞生的最初想法。现在游戏发售了,因为是自己发行的,所以宣传需要自己来弄。想到现在好多游戏发售都流行写软文和造话题,所以干脆写个日志。这个“前传”里的内容原来也是想过的,要在游戏做完后写一写。原本打算和总结放在一起,但是篇幅也够长了,于是就把总结放到下回的历程篇里吧~