
FC/NES游戏开发
文章平均质量分 64
FC/NES游戏开发
firseve
这个作者很懒,什么都没留下…
展开
-
自制 kazzo 烧录器
kazzo 这个词来自于日语,不知道啥意思这里说的 kazzo 指的是FC读取烧录设备,你同年时候的红白机+大黄卡带项目地址:https://zh.osdn.net/projects/unagi/wiki/kazzo_ja项目页面右侧有客户端和烧录器固件的下载链接项目始于2010年,到现在这么多年了,也没有个教程,开始挖坑先说三件套:FC主机、KAZZO烧录器、烧录卡带游戏机,这个你怎么也得有一台吧,要不搞个烧录器有什么用呢烧录器,是我们要做的东西烧录卡,游戏卡带,这个你原创 2022-05-20 23:47:35 · 2200 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)21、完成一个游戏
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/我要做的第一件事是标题屏幕。这部分快速搞定,毕竟只是为了展示一下。我用 NES screen tool创建了一个图,并保存压缩成 RLE.h文件 “title.h”。标题只是等待用户按下 START按钮,循环颜色让其显示不那么无聊。...原创 2020-05-13 14:05:49 · 1246 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)20、再做一个游戏
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/我不打算用分屏了。一旦屏幕中的敌人和硬币多了以后,游戏就会变慢,屏幕会来回滚动,结果会很糟糕。不用分屏,不用担心速度变慢(每帧中增加更多的游戏逻辑)增加背景音乐和音效,游戏中我们在增加敌人和硬币。当和硬币碰撞的时候使用sfx音效,当和敌人碰撞的时候使...原创 2020-05-13 14:05:32 · 647 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)19、更多的事情
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/随机数。NES没有很好的方法来生成随机数。neslib里面有rand8() 和 rand16(),但是他生成方式有问题。他在启动时使用常量,这就意味着每次重启后的随机数都会是相同的。我编写了一个将帧数统计放入到随机数计算的方法。s...原创 2020-05-13 14:05:25 · 742 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)18、Sprite Zero 零号精灵
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/这个不是很好解释,超级玛丽1用了这个功能,后来很多人都把这个作为一个游戏的标准来对待。屏幕顶端固定,底屏滚动,就可能是sprite zero的分割效果。sprite zero指的是OAM中的第一个sprite,地址是 0-3.PPU第一次在背景的非透明像素...原创 2020-05-13 14:05:15 · 1035 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)17、DPCM声音
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/DMC文件很大,因此尽量避免使用,很多游戏都不用。如果你想要发出很真实的音效,比如发出“战斗”,狗叫,鼓声,低音效果等还是可以的。他能播放的时间很短,比如 0.2秒,可以使用Audacity这样的编辑器编辑DMC的采样频率越高,占用的ROM...原创 2020-05-13 14:05:07 · 394 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)16、声音效果
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/即使你没有音乐天赋,你也可以制作一些很酷的音效。再次用到了famitracker。你可以用 fx或者其他的,存到一个文件夹中,每个音效都是一个"song",再模块属性中添加音乐尝试编写音乐,使脉冲通道1或三角形播放主旋律。然后使用脉冲通...原创 2020-05-04 09:42:59 · 764 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)15、音乐
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/我前段时间写了一篇关于NES Audio文章。https://nesdoug.com/2015/12/02/14-intro-to-sound/ (往下翻,在后面有翻译)我们不需要对声音寄存器了解太多,我们使用Famitracker编音乐,用Famiton...原创 2020-05-04 09:42:24 · 1096 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)14、游戏平台
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/我们要做的是向右滚动显示。游戏吸引人的地方在哪里呢?重力。我们需要16bit来记录 X和Y 的速度和位置。低字节表示像素的位置。我使用了有符号的 int值 (signed int 他的长度是2)重力,每一帧给Y加一点速度,但不要太快,否则我们可能会...原创 2020-05-04 09:39:22 · 459 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)13、向上滚动
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/向上滚动要比向右滚动难的多。如果是向下滚动,可能会很容易,因为向上滚动就像是向左滚动一样。只要你使用我的函数add_scroll_y() 和sub_scroll_y() 就可以解决这个问题,跳过0xf0-ff的Y值并没有太困难。我们还是需要将他们放到BG背景碰...原创 2020-05-04 09:38:42 · 270 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)12、向右滚动
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/在NMI期间进行更新的自动vram缓冲系统,实用化的例子。屏幕滚动期间,ppu会大量的进行更新操作,因此需要一个自动更新的系统来完成这个操作。我们通过更新不可见的nametable,让用户对不知道我们在不可见区域进行了更新。每次只更新一点儿(不能太多,否则系统会...原创 2020-05-04 09:38:01 · 344 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)11、Metatiles
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/什么是metatile,对于贴图来说这是个特殊的词。在我的工程里有2x2的贴图,这么用的原因是为了压缩,简化背景图的制作。背景调色板(属性表)不能修改单个的图块,最小修改的是2x2的图块。这样的代码不会将整个屏幕按照32x30对待(960字节),而是按照...原创 2020-05-04 09:37:23 · 514 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)10、游戏循环
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/我们来谈谈游戏循环游戏需要循环,while(1){}循环里的第一项是ppu_wait_nmi(),他会等待新一帧的开始触发nmi,每秒60帧(欧版是50帧)但是,如果游戏的逻辑太过复杂将会耗费更多的时间,并且超过了nmi触发的开始,那么等到了pp...原创 2020-05-04 09:36:42 · 500 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)09、滚动
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/滚动的意思是背景滚动,精灵不受影响。NES PPU有一个滚动寄存器,$2005。这个地址写入2次,第一次是X滚动,第二次是Y滚动。这是在v-blank期间需要发生的另一件事,由neslib自动处理。neslib有这个函数scroll(x,y),你需要...原创 2020-05-04 09:35:55 · 590 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)08、背景 碰撞
背景和精灵有些区别,我们无法读取PPU中的字节。我们先搞个地图,每个块大小是 16x16,填充整个背景需要 240字节的数组。X从0-15,Y从0-14。我们把数组放到RAM中,以防止被修改。后面演示运行情况,先看下数组结构。const unsigned char c2 [] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...原创 2020-05-04 09:34:45 · 576 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)07、控制器
07、控制器NES上有2个控制器端口。您可以使用端口4016和4017随时读取它们。在幕后,它会关闭和打开4016端口,然后一次读取按钮,1个按钮,8次读取,然后将它们转换为变量。Neslib,使用此功能的方法。pad1 = pad_poll(0) 读取控制器1。pad2 = pad_poll(1) 读取控制器2。如果你希望不重复读取手柄的情况下获取值可...翻译 2020-05-04 09:33:25 · 406 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)06、精灵
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/什么是精灵?精灵是一种可以在整个屏幕上自由移动的贴图。精灵通常是8×8,但它们也可以是8×16(稍微复杂一些)。我将使用8×8的例子。精灵由PPU的OAM部分中的256个字节定义。有64个精灵。这是每个精灵4个字节。但8×8是如此之小。我们如何让马里奥如此之大...翻译 2019-04-16 18:27:31 · 1089 阅读 · 1 评论 -
用C语言开发NES游戏(CC65)05、调色板
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/关于NES调色板的信息一共64中颜色可用(0-$3F),但其中很多都是黑色。neslib要求你使用 $0F表示黑色,$30表示白色。不要使用xD颜色,尤其是 $0D (他会让一部分电视出问题,油管有视频)https://www.y...翻译 2019-04-16 18:26:56 · 1104 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)04、完整的背景
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/制作一张全屏显示的背景图(备注:这里的RLE是作者将图片变成NES可以识别加载的贴图,这么搞太难翻译了。。。)NES Screen Toolhttp://www.romhacking.net/utilities/802/本地镜像下载...翻译 2019-04-16 18:26:19 · 1544 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)03、VRAM缓冲区
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/我写了一些支持函数来填充VRAM缓冲区。我使用了一些后台场景的代码,在crt0.s中定义了一个VRAM_BUF,地址是 $700。请注意,这在技术上与C堆栈共享700-7ff空间。他们可能会发生冲突。如果你担心这个问题请将VRAM缓冲区设置为600-...翻译 2019-04-16 18:25:07 · 474 阅读 · 0 评论 -
用C语言开发NES游戏(CC65)02、什么是v-blank?
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/向屏幕写入图片如果在屏幕开启的时候使用 vram_adr() 或 vram_put() 函数,有92%的可能会使写入屏幕的图片花屏或试滚动变得不对齐。为什么会发生这种情况,基本上,PPU一次只能做一件事,而且当屏幕正在运行时,有92%的时间...翻译 2019-04-16 18:24:36 · 1133 阅读 · 0 评论 -
用C语言开发NES游戏(CC65) 01、第一个程序
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/我们可以做的最简单的事是在屏幕关闭时向背景中写入数据。ppu_off();vram_adr(address);vram_put(tile);ppu_on_all();我们来过一下这些方法的功能...原创 2019-04-16 18:23:55 · 3462 阅读 · 0 评论 -
用C语言开发NES游戏(CC65) cc65如何工作
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/所有NES汇编程序都是命令行程序。那是什么意思?它没有图形用户界面。您不需要在其中键入代码。您必须在单独的程序(Notepad ++)中编写代码并保存。然后,打开命令提示符,并通过在命令提示符下键入来运行汇编程序。Cc65要复杂得多,它需要输入几个指令,...原创 2019-04-16 18:23:04 · 1702 阅读 · 0 评论 -
用C语言开发NES游戏(CC65) 准备工作
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/你需要什么这是你编写NES游戏所需要的1.汇编程序(或编译器)2.贴图编辑器3.Photoshop或GIMP(或类似)4.Notepad ++(或类似)5.一个好的NES模拟器6.一个贴图地图程序7.python 3(可选,...原创 2019-04-16 18:20:43 · 1619 阅读 · 0 评论 -
用C语言开发NES游戏(CC65) 简介
粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nesdoug/简介:作者nesdoug,作者重写了他的代码并发布到了githubhttps://github.com/nesdoug作者的目的是让所有的开发者尽量不去学习6502汇编,通过C语音就能开发出来NES游戏作者的过时教程:https://nesdo...原创 2019-04-16 17:11:06 · 3676 阅读 · 0 评论 -
用C语言开发NES游戏(CC65) 前言
作者网站更新日期 2018年9月翻译日期从2018年11月底开始逐步翻译,基于浏览器的翻译,重要地方逐句对比原和译文,有时候会加入些个人见解,让文字变得能像是句人话。作者github地址:https://github.com/nesdoug作者的网站:nesdoug粘贴到优快云格式没调,想看格式好的点下面https://happysoul.github.io/nes/nes...原创 2019-04-16 17:09:31 · 629 阅读 · 0 评论 -
CC65 开发FC/NES 游戏(四)方向键控制一个简单的精灵
因为缺少nes头信息的配置所以cc65会有默认生成nes的配置默认情况下:使用水平镜像,田字格的左上和左下是镜像,我们看到的就是田字格的左上角显示部分另外精灵不属于卷轴里固定显示的内容 右边的卷轴查看器不会看到精灵(也就是那个星号)后面直接上附件:上下左右操作一个星号移动,以后再说把星号换成一个像游戏人物的图片,还有背景图#include "conio.h"#i...原创 2018-11-15 15:37:17 · 1182 阅读 · 0 评论 -
CC65 开发FC/NES 游戏(三)使用摇杆
CC65在我的文章(一)中可以获取到 或者直接去github下载cc65 这次的代码来自cc65的samples目录下的hello.c 并做了修改和注释 通过查看源码可以看到里面支持的机器类型 #if defined(__NES__) || defined(__PCE__) || defined(__GAMATE__) NES PCE GAMATE 通过 cmd 命令将 c 编译成 ne...原创 2018-11-15 15:35:45 · 927 阅读 · 0 评论 -
CC65 开发FC/NES 游戏(二)Hello world
记事本编辑文件 helloworld.c Helloworld.c代码 #include <conio.h>void main(){ cprintf("Hello World!"); while(1){}}备注:正常的C语音使用的是 printf 但是CC65使用的是 cprintf 用来在屏幕显示字符串 while是为了让程序进入死循环不会退出,如果你想...原创 2018-11-15 15:33:34 · 1607 阅读 · 0 评论 -
CC65 开发FC/NES 游戏(一)环境搭建(2021-04-27更新部分内容和修改部分错误介绍)
童年的红白机(又叫FC,美国叫NES)开发语言,早期的码农们用的是6502的CPU上的汇编语言ASM(其实跟单片机差不多)简单的说不同的芯片提供了一堆指令让用户编程调用,但其实都是单调的地址引用赋值,还有各种寄存器(虽说学过51单片机的汇编,但当时的东西都还给老师了)对于现在的我们来说,也许或多或少还是能懂C语音的东西现在有了COCOS U3D 虚幻 等各种各样的引擎让我们能做游戏...原创 2018-11-15 15:28:50 · 6345 阅读 · 1 评论