cps2-utils
v0.1.5
Published
A utility library for working with CPS2 ROMs in the MAME format. Supports decryption, encryption, conversion to Darksoft format, and more!
Downloads
60
Maintainers
Readme
CPS2 Utils
CPS2 Utils is a package for working with CPS2 ROMs in the MAME format in a browser. It supports unzipping, validating, decrypting, encrypting, patching with MiSTer .mra
files, and more.
Usage
Installation
npm i cps2-utils
Working with a MAME ROM
cps2-utils exposes a few classes for working with ROMs generally, but the main one you'll be using is Cps2Rom
. It contains interfaces to functionality such as decryption, combining binary files, patching, and more.
To instantiate a Cps2Rom
, supply it with the MAME ROM .zip
and then invoke read()
. It's probably a good idea to invoke processExecutable()
after that, which will give you access to patching, decryption, etc.
async getDecryptedRom(zipFile: File): Promise<Uint8Array> {
const rom = await this.getRom(zipFile);
await rom.decryptOpcodes();
const decryptedOpcodes = rom.getDecryptedOpcodes();
if (!(decryptedOpcodes && decryptedOpcodes.length)) {
return Promise.reject('Something went wrong');
}
return Promise.resolve(decryptedOpcodes);
}
async getRom(zipFile: File): Promise<Cps2Rom> {
const rom = new Cps2Rom(zipFile);
await rom.read();
await rom.processExecutable();
return Promise.resolve(rom);
}
Cps2Rom
also supports chaining its operations:
async getDecryptedRom(zipFile: File): Promise<Uint8Array> {
const rom = await new Cps2Rom(zipFile).read();
const decryptedOpcodes = (await rom.processExecutable()).getDecryptedOpcodes();
if (!(decryptedOpcodes && decryptedOpcodes.length)) {
return Promise.reject('Something went wrong');
}
return Promise.resolve(decryptedOpcodes);
}
Using a library like l8
to make the chains fluid is probably not the worst idea.
See DarkMrSoft for a concrete example of using this library.
Todo
- [x] Get graphics
- [ ] Decode graphics
- [ ]
.ips
to.mra
- [ ]
.mra
to.ips
- [x] Decrypt
- [x]
.zip
- [x]
.bin
- [x]
- [ ] Encrypt
- [ ] Files?
- [x] Binary
- [ ] Swap bytes
- [ ] Files?
- [ ] Binary
- [x] Split binary to files ✅ 2023-07-15
- [ ] Graphics patching
- [ ] Audio patching
- [ ] Fill operation
- [ ] Continue operation