缘起
游戏 1 月 20 日发售了!终于可以聊聊这个项目的缘起了。
声明一下:本文所引用的一些插图是从网络上收集而来的,版权归原作者所有,有什么问题请直接与我联系。
这游戏原来的目标平台竟是红白机!
是的,《孙悟空大战机器金刚》原本计划是开发成一个 FC (NES/红白机)游戏的。没错,请先不要换台,后面真的有 ROM 下载。
很多人看了现在这个版本会觉得有 FC 游戏的既视感,原因就是美术部分遵循了当时的 FC 硬件限制。
什么是 FC?就是 Family Computer,欧美叫 NES 国内俗称红白机,玩家接触较多的都是仿制机:
红白机硬件机能限制
关于这部分复古游戏技术的内容,可以参考:
How "oldschool" graphics worked
色板:56种颜色
FC 可使用的颜色共56色,但是每个 Tile (图块)(无论是 Sprite 还是背景的)都只能用 4 种颜色,其中一种作为透明色,也就是说能显示的只有三种颜色。所以悟空的本体就是 3 种颜色:
说实话这个色板颜色数已经不少,因为是硬件决定的,所以很多颜色都不好搭配。不过就是这个色板创造了很多的经典。
有人说了,很多 FC 得角色好像不止 4 色啊?对的,有这样的情况,那些是用多个图块叠加而成的,比如初代洛克人:
题外话:游戏商店发布时,有些媒体转发,下面有评论说这个游戏是洛克人换皮。说真的,这启发了我,有时间我还真能把初代洛克人给换皮成悟空。
图块限制 8x8 个点
FC 的图形处理是通过 GPU (任天堂叫 PPU),基本上就只能使用若干个 8x8 像素的图块来组成所有的画面,这些图块按照今天的说法就是贴图,绘制的过程不需要 CPU 进行处理,你需要做的就是告诉 PPU,在什么地方画哪个图块。孙悟空主要使用了 2x2 个图块,大小相当于马里奥没有变大的时候(变大的马里奥是 2x3 个图块):
这是保留至今的三帧跑步动画,可以看到如果处理得当,上面的两个图块在每帧都是一样的,这样一来可以省去4个图块。之所以要省,那是因为卡带容量有限。
容量限制
由于 FC 的总线是 16位,所以可寻址的空间为 64K,这地址进行了映射,部分映射到内存,部分映射到程序代码,部分映射到硬件。初代的超级马里奥的容量为 40K,其中代码容量 32K,图像容量为 8K。而这些就是当时硬件一开始能访问到的最大容量,后来新技术的加入才支持更大的容量的卡带。
上图就是红白机卡带拆开后看到的情况,这是最原始的 NROM 结构,右边那块是 PRG 芯片,用于存储代码,左边这块是 CHR 芯片,用于存储图像。可以看到每个芯片有单独的引脚,这些分别由 CPU 和 PPU 直接进行访问。
Anyway,8K 的图像有多少?就是两张 128x128大小的图,一般一张用于 Sprite 一张用于背景:
就是这么一张图,组成了初代超级马里奥的世界,神不神奇?厉不厉害?
做成卡带的可行性
那我当初的目标就是做一个游戏,然后自制成一个卡带,在实机运行(有人意识到红白机才是中国人拥有数量最多的主机吗?)。芯片可以使用 EPROM 进行烧录,反正通过淘宝可以淘到相关的东西,甚至还能抄板电路版生产出来,所以做成卡带完全是可行的。
复古文化
除了实体卡带,我还想过要把盒子和说明书都做出来。
FC 卡带封面和盒子
红白机日版的卡带封面和包装以及说明书十分的精美,下图是我曾经拥有过的柯纳米世界1代的包装:
自己关于这个游戏的感触很多,以后有机会可以聊聊。
而自己接触的第一个原版卡带其实是在朋友家看到的魂斗罗1代:
说明书
接触过的人一定会有感触。我再发些说明书的图,你们自己感受一下:
不过卡带也有用游戏截图的
虽然卡带封面大部分都很有欺骗性,不过,也有另类的,说的是南梦宫,早期的卡带封面用的都是游戏截图:
很实诚,但是不好意思不好看。
精美的封面和说明书为游戏增加了很多额外的价值,玩不到游戏时看着这些就很过瘾(比如几个小伙伴轮番上阵时,你可以在旁边看说明书)。
全世界是有很多人怀念这种感觉的,直到现在还有很多人有收集实体的情结。
关于卡带封面的延申阅读
这里再次推荐一个网站,上面都是一些虚构的红白机卡带,甚至还用这些卡带封面举办了 Game Jam。
Game Jam 是:
https://itch.io/jam/a-game-by-its-cover-2017
https://itch.io/jam/a-game-by-its-cover-2018
孙悟空大战机器金刚的海报
于是,我们就设计了这么一张海报,大小完全按照的是 FC 纸盒的比例:
BITCA-02 是游戏的编号。
所以,原来是计划做一本小册子的,上面有操作方法,还有手绘敌人和地图的介绍。现在就暂时搁置吧。
为什么会想做一个红白机的游戏?
- 随着年龄的增长,人变得原来越怀旧。错觉让人认为以前的东西都是美好的。
- 一边收集一些老玩意,我一边产生了自制的想法。
- 同时自身对这种限制和创作之间的关系感悟越发强烈。
- 加上那时我的主业是动画,游戏制作还算是业余时间做的事情。
- 所以这基本上是“吃饱了撑的”:一种比独立游戏更高的境界…
关于新时代做老游戏的延申阅读
当然如果你想探讨为老主机做游戏是不是真的有什么现实的意义的话,可以看以下两个视频:
The Making of: ROM City Rampage (Retro City Rampage)
Porting Retro City Rampage to MS-DOS: From PS4 to 1.44MB Floppy
这个阶段留下的遗产
FC 游戏主要使用 6502 汇编语言编程,6502 的指令很少,FC 的硬件也不复杂,只不过适应了高级语言的话会感觉稍微不便。但是用 C 这样的语言对于 FC 来说又过于臃肿。所以尝试过各种奇技淫巧,比如创造一个节点式的界面来组织各种汇编代码段:
后来用得最多的是:使用 javascript 进行“封装”。也就是使用更易读的脚本语言来生成汇编代码,之后再进行编译。然后在 javascript 的基础我使用 coffeescript 来让脚本更简洁。大概的代码是这样的,左边是 coffeescript 右边是输出的 asm,这里都是截取部分,asm 的输出会多很多:
测试 ROM
不要太兴奋,这个 rom 运行起来大概就是这个样子,就是简单的动画测试:
下图就是这个测试 Rom 里面用到的图形部分,左边是用于角色的,可以看到剩下的空间也不是很多,能多几个敌人和 1 个 Boss 就不错了。还得加上一些特效什么的。总之活动的都放在左边这个图。 FC 的图形存储格式是比较特殊的,一个字节可以存4个点的信息,所以我还做了工具将像素绘图软件的输出进行格式转换,变成 CHR 二进制文件。
Rom 下载:https://bitca.cn/files/svr/svr-sprite-test.nes
过渡到 H5
那个时候用得比较顺手的是 H5 的技术,用来做编辑器什么的很方便。后来,感觉直接制作 ROM 的方式来做原型好像有点慢,也许可以先做个 H5 版本的原型,这样还能让别人随时在手机上测试什么的。所以后来也尝试各种 H5 的游戏引擎框架,比如 melonJS / Pixi / Phaser 什么的,总之这个项目就是个实验场。
melonJS 版本,特点是可以直接读取 Tiled 文件作为关卡设计:
下面这个是 phaser 的版本,那个时候已经背景图块风格基本确定并沿用到现在,当时是打算整个屏幕不带卷轴的,一个屏幕一个房间:
而现在的这个项目就是基于当时用 Construct 2 做的一个简单原型:
目标的变更
这些事情都是 2017 年的业余时间里做的了。2017 年底我开始全职做独立游戏,这期间有各种尝试,到了 2018 年 6 月左右,我打算制作一个收费游戏,当时就想着应该是做一个能够快速实现/体量不大的东西,所以为什么不把这个东西拿出来做呢。用现在的说法结果是挖了个坑。
不再把 FC 作为目标平台后,限制也放宽了很多。
在我开始发制作日志之后,当然会受到读者反馈的影响。比如有人开始建议手感,还有一些前摇后摇之类的我没听过的名词,还有关卡设计的重要性等等。虽然离原来的目标远了,但是也未必是什么坏事,毕竟 Paper Please 就是这么来的。
关于这个奇葩的名字
最后说说关于这个奇葩的名字。 这游戏的想法基于一个 What if:如果在 FC 时代,我会做一个怎样的游戏。 我觉得以前好像有那么一段时间市面上有很多孙悟空大战 XXX 的书,所以相应的也会推出相同题材的游戏吧(当然这个时间点我也不想做准确的考证)。
童年的强烈印记
另外,孙悟空在我们那个年代是个很强的 IP,我很小就可以凭空画出两个卡通头像,一个是米老鼠,另一个就是大闹天宫动画版的孙悟空,直到现在这个还是我印象最深的孙悟空形象。
两个有意思的作品
而以孙悟空为主角的作品,除了比较常见的剧场动画之外,还有两个我得提一下:
《西游怪记》
一个是柏杨的小说《西游怪记》:
豆瓣读书链接:https://book.douban.com/subject/2037994/
《超时空猴王》
一个是梁挺博士的港式漫画《超时空猴王》:
大战系列漫画
以上两者,可以看出都是有水准的作品,不过并不是灵感的出处。在我少年时期(或者青年?),大量欧美日本 ACG 产品涌入,国产 IP 式微,各种“孙悟空大战”系列只能说是一种无力的抵抗了:
虽然有些绘图作者还是有点功底的,但大多数都是充满了中国式的审美,而现在的儿童市场上这种中国式的审美还在延续。不过不管你喜不喜欢,很多人的童年精神世界会被这类产品所覆盖。所幸我经历过小人书和海南美术摄影出版社的时代,已经能分辨出作品的质量。这些漫画无论如何终归也是一个时代的印记。
关公战秦琼
另外我想说的是,类似关公战秦琼的想法本来就是一种原始而朴素的创作手法,比如:
反正我是抱着这种朴素的想法认真的把这部游戏做完了…
也许只有少数人能感受那个点
很多人直接的说,看到这个名字我就直接关掉网页了。 这很正常,我只是相信有人看到这个名字能够会心一笑。 然后这里面能有部分的人会进行下一步的尝试。
我不大想改这个名字,幸好我做的是独立游戏。
当然,我还是希望:
相声不该失去讽刺与自嘲,
幽默不只限于弹幕和段子,
多样性的创作尝试能够得到更多的包容。
下回再见
怀旧完毕,以上这些就是促使这游戏诞生的最初想法。现在游戏发售了,因为是自己发行的,所以宣传需要自己来弄。想到现在好多游戏发售都流行写软文和造话题,所以干脆写个日志。这个“前传”里的内容原来也是想过的,要在游戏做完后写一写。原本打算和总结放在一起,但是篇幅也够长了,于是就把总结放到下回的历程篇里吧~
游戏信息
- Steam 商店页面:https://store.steampowered.com/app/1008830/
- Itch.io 试玩:https://bitca.itch.io/svr
- TapTap:https://www.taptap.com/app/156137
- 奶牛关开发日志:http://t.cn/EPh4D4R (indienova 同步更新)
- 爱发电链接:https://afdian.net/@Bitca
- 微博:https://weibo.com/u/5624992490
- B 站:https://space.bilibili.com/10792087
- Q 群:828762202
好文,跪拜!
真的很厉害。我对你自己写的 Phaser 编辑器很感兴趣
@dougen:我写过各式个样的 H5 编辑器,不过都是实现一些简单功能,这个截图界面中用的是dat.gui 当你还不打算做自己的编辑器,或者要进行一些快速的数值调节的时候可以用这个,链接:https://github.com/dataarts/dat.gui
另外,也有人针对 Phaser 做了编辑器了:https://phasereditor2d.com/
@bitca.cn:十分感谢 :)
感觉可以上 Switch