NSD
Revision as of 17:19, 5 August 2015 by Wikia>Chekwob (→Crash 1: Clarified use of asterisks)
NSD (most likely to stand for Naughty Dog Software Data or Naughty Dog System Data) is a custom file format created by Naughty Dog for use in the Crash games. The root directory of a Crash game CD will have several sub-directories, with names S0, S1, S2, and S3; within these sub-directories are pairs of files with the name S00000**.NSD/.NSF. Each pair corresponds to a specific level in the game, and these files contain the game data for that level. An NSD file is essentially an index for its paired NSF file, but it also contains additional information such as a level descriptor/header and a loading screen descriptor.
Contents
Format
Crash 1
Offset | Field | Size | Value |
---|---|---|---|
0x0 | Entry Hash Table Offsets | 4 bytes x 256 | * |
0x400 | Chunk Count | 4 bytes | c |
0x404 | Entry Hash Table Size | 4 bytes | s |
0x408 | Entry containing object type -> executable EID(**) type | 4 bytes | * |
0x40C | Compressed chunk offset table size(?) | 4 bytes | * |
0x410 | Unknown | 4 bytes | * |
0x414 | Unknown | 4 bytes | * |
0x418 | Offset of Uncompressed Chunks | 4 bytes | * |
0x41C | Compressed Chunk Count | 4 bytes | * |
0x420 | Compressed Chunk Offsets | 4 bytes x 64 | * |
0x520 | Entry Hash Table | 4 bytes x 2 x s | * |
0x520 + (8 x s) + 0x0 | Level Header Magic Number | 4 bytes | 0x1 |
0x520 + (8 x s) + 0x4 | Level ID | 4 bytes | * |
0x520 + (8 x s) + 0x8 | Initial Zone EID | 4 bytes | * |
0x520 + (8 x s) + 0xC | Initial Camera Path (Item Index) | 4 bytes | * |
0x520 + (8 x s) + 0x10 | Unknown | 4 bytes | * |
0x520 + (8 x s) + 0x14 | Object Type -> Executable EID map | 4 bytes x 64 | * |
? | Descriptor for 'loading screen' image | ? |
(**) - Only useful in older versions of Crash 1, but is present in all 3 games.
Structure
Crash 1
struct NSD
{
union
{
unsigned long entryhashoffsets[256];
unsigned long *entryhashbuckets[256];
}
unsigned long chunkcount;
unsigned long entryhashcount;
unsigned long unk_408;
unsigned long unk_40C;
unsigned long unk_410;
unsigned long unk_414;
unsigned long uncompressedoffset;
unsigned long compressedcount;
unsigned long compressedoffsets[64];
hashpair entryhash[entryhashcount];
struct levelheader
{
const unsigned long magic = ?
unsigned long levelID;
unsigned long firstzone;
unsigned long firstcampath;
unsigned long unknown;
unsigned long execeidmap[64];
};
};
Purpose
TBD