1个不稳定版本
0.1.0 | 2024年7月19日 |
---|
#285 在 游戏
每月47次下载
215KB
4.5K SLoC
ds-rom
用于提取和构建匹配的任天堂DS ROM的库。DSi/DSiware尚不支持。
内容
目标
- 将ROM的所有组件提取到磁盘上的文件中。
- 使用这些文件构建ROM。
- 文件应该是可修改的,以便可以构建修改过的ROM。
- 当文件未修改时,构建的ROM应与原始ROM完全匹配。
提取
ds-rom
对ROM有两种表示:原始和普通。要从ROM中提取文件,它首先读取原始ROM,即ROM文件的逐字节内容。然后,普通ROM可以从原始ROM中提取所有组件。最后,普通ROM可以保存到磁盘上的文件。
use ds_rom::{rom::{raw, Rom}};
let raw_rom = raw::Rom::from_file("mygame.nds")?;
let rom = Rom::extract(&raw_rom)?;
rom.save("mygame_extracted/", None)?;
[!IMPORTANT] 如果原始ROM已加密,您必须将加密密钥传递给
Rom::save
而不是None
值。有关此示例,请参阅此处。
构建
构建ROM与提取正好相反。ds-rom
首先从磁盘加载普通ROM,即由Rom::save
生成的相同文件。然后,可以构建原始ROM并将其保存为单个ROM文件。
use ds_rom::rom::Rom;
let rom = Rom::load("mygame_extracted/", None)?;
let raw_rom = rom.build(None)?;
raw_rom.save("mygame_rebuilt.nds")?;
[!IMPORTANT] 如果ROM已加密,您必须将加密密钥传递给
Rom::load
和可选的Rom::build
而不是None
值。有关此示例,请参阅此处。
(对于Rom::build
来说这是可选的,因为它仅在计算ROM头部的CRC校验和时使用。)您可以通过编辑提取目录内的YAML文件来配置ROM是否应加密。
命令行界面
ds-rom
也提供命令行界面,您可以从此处下载最新版本。使用dsrom --help
获取子命令列表。
依赖关系
~9–20MB
~297K SLoC