【原创】NES游戏创作的学习流程
据我的研究, 目前没有通用的简单办法来创作nes(或fc)游戏。只能一步步的学习了。
因为FC与NES的游戏是兼容的,所以下面只说nes就可以了。
下面先说明一些工具的区别,再介绍学习的步骤。
关于编译工具
nes就是基于6502指令集的(补充:nes去除了6502指令集的两个十进制指令,这无关重要),所以要专门找能够编译成6502机器码的编译器才能够用于创作nes游戏。
目前只有一个C语言的6502编译器。名叫CC65。我不推荐用这个。因为它没有调试器,C语言不是直译的,而是用很多内部代码,我不清楚这些内部的东西,那么出了黑屏或什么情况,完全是无从查起。而模拟器的调试器只能让我们看见汇编,而不是C语言。也没有报警或调试内容。所以这个看似方便的C语言编译实际上无法使用。
目前6502汇编器倒是有很多。而调试可以通过模拟器。当然是没有运行报警的。不过编辑代码时,可以有出错提示。我前面的博文中,推荐和介绍使用VSCode+6502插件来编辑,再用6502Sim做小段代码的调试。编译用VSCode+6502插件也可以,就是步骤多几下。我会推荐用另一个6502编译器,代码格式与6502插件兼容的。并用批处理(bat)脚本来生成nes文档(一键生成)。
小结:
VSCode+6502插件,只适合编辑,指令高亮显示,还实时纠错。超赞。虽然也可以编译,但不是直接生成nes文档。编译的结果只是机器码,还要打包才能成为nes文档。它不是完整的集成工具,没有调试器。
6502Sim,只适合做调试。虽然也能编辑还有指令帮助,但是总感觉不顺手。虽然能够编译,最步骤太多,结果只是机器码。情况比VSCode+6502插件更不适合。
asm6,要是我没记错就是用这个来编译了。我要上另一台电脑才能够确认,今天暂时这样写着。它类似dos指令或控制台程序,没有界面,但是适合批处理脚本。我可以用批处理脚本实现编译+打包,一键生成nes文档。
另有两个号称nes开发的集成工具。然而没有用户使用手册,我没有功夫去研究它。
我自己开发的什么集成工具,我自己都不用,建议大家也别用。我从网盘上撤下来了。
关于其它工具
图形工具,YY-CHR和CH-TLP都可以,我推荐用前者。
字模工具,网上没有什么好用的,建议用我编的菜菜FC字模工具,配合YY-CHR就很方便。如果硬要用单片机的字模工具可能也行,这自然不是通用方法,适合有特别需求又对CHR特别了解的大牛。(因为没有字库,所以做为需要显示的所有文字做出chr,以实现显示。所谓文字包括数字、英文、中文和符号等。这做出来的chr就叫字模。)
地图工具,可以找一些NES以外的工具,因为这只对编程相关。所以只要有一个算法能够实现对这个地图做碰撞检测就合用。
背景工具,可以用我的NES背景编辑器。但是生成出来的数据比较大。最好想个办法压缩,同时需要一个解压算法。我的这个背景工具是针对NES背景的结构而设计,所以不适合用于地图工具,除非你的主角是8*8像素。我的这个工具更适合用来做封面画面或过场画面等。
音乐工具,专门的音乐工具famitracker(简称FT),不适用于初学者。因为它的引擎太大,音乐代码是运行在中断,我就是担心占用了vblank时间,画背景就没有时间了。其余就是技术原因,所以不推荐用它。我自己编了一个简单的nes音乐工具,叫MusicBox,这个能听个响,后面教程会介绍。
关于步骤
编写nes游戏并不难,只要一步步做下去,每步只关注一个技术点,那么这件事就能够做成。下面是我总结的一个实践次序。
实习顺序:
1 做一个静止画面,例如开始画面。
2 做一个音乐贺卡,或带音乐的开始画面。
3 做一个带动画的音乐贺卡,或带动画和音乐的开始画面。
4 可以用手柄驱动选项的开始画面(也有动画和音乐)。
5 用手柄可以切换画面和音乐的最基本的游戏。
6 在5的基础上,加入不能通行(或阻挡)的元素。
7 在6的基础上,加入重力元素。
8 在7的基础上,加入敌人和子弹等,即碰撞元素和加分扣分。
9 在8的基础上,加入状态或分数显示元素。
10 在9的基础上,加入通关和失败画面。
以上每个过程太简单了,自学也是可以,不一定需要教程才能动手。我理一理手上的教程,按上述次序再次发布。一些文章将收起来整理。