#pragma author WerWolv #pragma description Nintendo Switch PFS0 archive (.nsp) #pragma magic [ 50 46 53 30 ] @ 0x00 import type.magic; import type.size; import std.core; struct FileEntry { u64 dataOffset; type::Size dataSize; u32 nameOffset; padding[4]; }; struct String { char value[]; }; struct Header { type::Magic<"PFS0"> magic; u32 numFiles; type::Size stringTableSize; padding[4]; FileEntry fileEntryTable[numFiles]; String strings[numFiles]; }; struct File { char name[] @ addressof(parent.header.strings) + parent.header.fileEntryTable[std::core::array_index()].nameOffset; u8 data[parent.header.fileEntryTable[std::core::array_index()].dataSize] @ parent.header.fileEntryTable[std::core::array_index()].dataOffset [[sealed]]; }; struct PFS0 { Header header; File files[header.numFiles]; }; PFS0 pfs0 @ 0x00;