将全屏写入 RLE 压缩文件。

不久前,我写了另一个博客页面,关于将BMP文件导入NES屏幕工具。这里。。。

NES 屏幕工具 BMP 导入

通常,我不会将BMP导入NES屏幕工具。我发现这很困难。

我使用GIMP并制作一个大约128×128的图形,并将图像模式更改为索引,4种颜色。然后我复制它并将其粘贴到YY-CHR中。然后,我需要重做颜色索引(使用颜色替换工具),然后保存.chr文件。然后,NES 屏幕工具可以打开 .chr 文件。您可能会找到最适合您的其他方法。

但是 – 我决定使用我自己的图形转换工具(称为NESIFIER)重做它。

https://github.com/nesdoug/NESIFIER

因此,在GIMP中,我将图像大小调整得更小(约160×160),但随后将画布大小填充到256×240。

然后我保存为.png。在NESIFIER中打开它,选择4种颜色和抖动设置(Floyd-Steinberg,10),然后按"转换"。这就是结果。

请注意,“贴图"左侧的数字是 254。好。我们需要255或更少。然后,我保存图块"保存最终CHR”,并保存图块"保存名称表",并保存调色板"调色板/保存NES 16字节"。

打开NES屏幕工具并加载所有这些文件。

使用NES屏幕工具,我保存了贴图,“Nametable/Save Nametable和Tests/RLE打包为C标题.h”。现在我们可以将其导入到C代码中,#include"NES_ST/Girl5.h"。

全名表为 1024 字节。您不想让名表保持未压缩状态…你很快就会用完空间。RLE 版本被压缩为 339 字节。游戏代码需要解压缩此Girl5.h文件。

我们不能在打开屏幕的情况下执行此操作,因此请将其关闭,然后设置一个起始地址,然后调用rle函数。

1
2
3
4
ppu_off();
vram_adr(NAMETABLE_A);//设置目标地址,屏幕左上角
vram_unrle(Girl5);//解压缩我们的rle文件,复制到屏幕上。Girl5 是 Girl5.h 文件中 char 数组的名称。
ppu_on_all();

到目前为止,我忘了提到调色板。NES屏幕工具可以将调色板复制到剪贴板,我将其粘贴到C代码中。
pal_bg() 设置背景的调色板。调色板本身只是一个 16 个字节的字节数组。我们将数组的名称传递给pal_bg(palette_name),以将其复制到NES调色板。

https://github.com/nesdoug/04_FullBG/blob/master/fullBG.c

https://github.com/nesdoug/04_FullBG

.

淡入/淡出

neslib 可以轻松更改屏幕的亮度。您可以使用 pal_bright() 执行此操作,使用介于 0(黑色)和 8(白色)之间的值。4 = 正常。

我从Shiru的"Chase"游戏中借用了一个功能,它非常易于使用。

1
2
pal_fade_to04;//从黑色淡入正常
pal_fade_to40;//从正常淡入黑色

如果您运行淡入淡出.nes文件,您会发现它在无限循环中淡入和淡出。褪色可用于过渡,例如从标题到游戏,或从级别到级别。

https://github.com/nesdoug/05_Fade/blob/master/fade.c

https://github.com/nesdoug/05_Fade

YYCHR 工具
https://w.atwiki.jp/yychr/sp/

附注

使用NESIFIER工具,您还可以将切片和切片映射另存为DZ4文件,这是我提出的压缩格式。我还没有将其集成到neslib / nesdoug代码中,因此您可以跳过它并使用neslib最初附带的RLE格式。但是,DZ4的工作方式类似。它有时可以获得比RLE格式更好的结果。