From WikiTemp, the GBAtemp wiki
Revision as of 16:01, 6 September 2019 by Nanook (talk | contribs) (FileSystem)

The NKit Format is a non-lossy format for shrinking and restoring Wii and GameCube images. It supports clean / Redump images as well as scrubbed and hacked images. Some corrupt and bad images are supported too, although these quite often error.

There are 2 NKit output formats, raw (iso) and compressed (gcz). Both were designed with 1:1 preservation, size and playability in mind. Hardware support for Wii was sacrificed for smaller images. WBFS is currently the best available and Recoverable to Redump where not hacked or corrupt.

System Format Hardware Supported Dolphin Supported Restorable 1:1 Notes
GameCube nkit.iso Yes Yes Yes Same as compacted GameCube iso
GameCube nkit.gcz No Yes Yes GCZ is Dolphin's own block seekable compression format
Wii nkit.iso No (Dev Kit?) Yes Yes RVT-H format only playable in Dolphin or a Dev Kit (Untested)
Wii nkit.gcz No Yes Yes RVT-H in GCZ playable in Dolphin only

NKit Format images contain the bare minimum of data. All junk and scrubbing is removed. Non-uniform data is preserved in 256 byte blocks with a 4 byte header. Wii encryption and hashes are fully recreatable and removed. Meaning any remaining data is as compressible possible.

Header

NKit places its header at 0x200 in the Wii and GameCube disc headers.

Offset Length Name
0x200 0x4 NKit Header 'NKIT'
0x204 0x4 NKit Version ' v01'
0x208 0x4 Source image original CRC32
0x20C 0x4 NKit CRC - makes the NKit file CRC32 equal the source CRC at 0x208 (at 0x4 in GCZ)
0x210 0x4 Source image length
0x214 0x4 Forced Junk ID (When Disc ID differs - rare - GameCube only)
0x218 0x4 Wii Update partition CRC32 if removed when converting

NKit also modifies the Wii header to set the bytes at 0x60 and 0x61 to 0. This indicates to a Dev Kit and Dolphin that the encryption and hashes aren't present.

GameCube

The Boot.bin (disc header) is modified as above other items remain untouched. They remain at the same offset also.

The filesystem and fst.bin are modified as below

Wii

FileSystem

Both the GameCube and Wii use the same code to encode the filesystem. The only real difference is that Wii FST file offsets and lengths must be multiplied by 4 when mapping to files. The NKit Format uses a custom Run Length Encoding (RLE) to remove the gaps between files and shrink gaps to 4 bytes in most cases.

<te be added>