POD/EPD Format

From ModdingWiki
Jump to navigation Jump to search
POD/EPD Format
Format typeArchive
Max files4,294,967,295
File Allocation Table (FAT)Beginning
Filenames?Yes, 32 chars
Metadata?Description
Supports compression?Yes
Supports encryption?No
Supports subdirectories?Yes
Hidden data?Yes
GamesCategory:Terminal Reality

The POD format is used by Terminal Velocity to store much of the game data.

File format

See https://man.sr.ht/~joneqdaniel/termpod for a complete description of all POD format variants.

POD has 6 different file format versions with 2 distinct styles:

Signature

Variant Features
POD1 ""
EPD "dtxe" - (extended) / "tsal" - (last)
POD2 "POD2"
POD6 "POD6"
POD3 "POD3"
POD4 "POD4"
POD5 "POD6"

Checksum

Variant

Checksum algorithm in use for EPD/POD2 and up is CRC-32/MPEG-2

poly    : 0x04C11DB7
ref_in  : false
ref_out : false
xor_in  : 0xFFFFFFFF
xor_out : 0

Ranges

/* POD1 style - checksum: none         */
POD1 : offset=sizeof(header)=4+80            count=sizeof(file  )-offset
POD6 : offset=sizeof(header)                 count=sizeof(file  )-offset
/* POD1 style - checksum: crc32::mpeg2 */
EPD  : offset=sizeof(header)                 count=sizeof(file  )-offset
POD2 : offset=sizeof(ident)+sizeof(checksum) count=sizeof(file  )-offset
/* POD3 style - checksum: crc32::mpeg2 */
POD3 : offset=sizeof(ident)+sizeof(checksum) count=sizeof(header)-offset
POD4 : offset=sizeof(ident)+sizeof(checksum) count=sizeof(header)-offset
POD5 : offset=sizeof(ident)+sizeof(checksum) count=sizeof(header)-offset

Compression

Variant

POD4 and up use ZIP-Deflate available in libzip and libdeflate

POD1 Style

Header

Data type Description
UINT32LE numFiles Number of files in the POD
char id[80] Null-padded file description

Immediately following the header are numFiles file entries.

File entry

Data type Description
char filepath[32] File name and path (e.g. "ART\ANT0000.RAW")
UINT32LE size File size
UINT32LE offset File offset

Version History

Variant Features
POD1 header: entry count and comment; entry: name, size and offset
EPD magic ident, checksum and timestamp
POD2 path name string table and audit logs
POD6 compression instead of checksum, no more audit logs

POD3 Style

Header

Data type Description
char ident[4] #Signature
UINT32LE crc CRC
char title[80] Title
INT32LE count_file File Count
INT32LE count_audit Audit Count
INT32LE revision Revision
INT32LE priority Priority
char author[80] Author
char copyright[80] Copyright
INT32LE directory_offset Directory Offset
INT32LE directory_crc Directory CRC
INT32LE string_table_size String Table Size
INT32LE dependency_count Dependency Record Count
INT32LE dependency_crc Dependency Record CRC
INT32LE audit_crc Audit Trail CRC
INT32LE names_offset Names Offset

Dependency Record

The file contains dependency_count records of size 264 starting at (string_table_size + names_offset)

Data type Description
UINT8LE data[264] ! Unknown

Audit Entry

count_audit entries follow after the dependencies

Data type Description
char user[32] User
UINT32LE timestamp Unix Timestamp
INT32LE action Action (Add = 0, Remove = 1, Change = 2)
char entry_path[256] Entry Path
UINT32LE old_timestamp Old Unix Timestamp
INT32LE old_size Old Size
UINT32LE new_timestamp New Unix Timestamp
INT32LE new_size New Size

Version History

Variant Features
POD3 POD2|EPD features with additional dependency records
POD4 compression
POD5 linked archive list

Tools

The following tools are able to work with files in this format.

StrikerTheHedgefox

Name PlatformExtract files? Decompress on extract? Create new? Modify? Compress on insert? Access hidden data? Edit metadata? Notes
TerminalFury C++YesN/AYesYesN/AYesYes

juanputrerasm

Name PlatformExtract files? Decompress on extract? Create new? Modify? Compress on insert? Access hidden data? Edit metadata? Notes
OpenPhotex JavaYesN/AYesYesN/AYesYes
JSPod JavascriptYesN/AYesYesN/AYesYes
JPod JavaYesN/AYesYesN/AYesYes
KPod C#YesN/AYesYesN/AYesYes
JPodman JavaYesN/AYesYesN/AYesYes
KPodman C#YesN/AYesYesN/AYesYes

dummiesman

Name PlatformExtract files? Decompress on extract? Create new? Modify? Compress on insert? Access hidden data? Edit metadata? Notes
Poddy C#YesYesYesYesYesYesYes

jopadan

Name PlatformExtract files? Decompress on extract? Create new? Modify? Compress on insert? Access hidden data? Edit metadata? Notes
termpod C++YesYesYesYesYesYesYes

jtrfp

Name PlatformExtract files? Decompress on extract? Create new? Modify? Compress on insert? Access hidden data? Edit metadata? Notes
jtrfp JavaYesN/AYesYesN/AYesYes
terminal-recall JavaYesN/AYesYesN/AYesYes

sp00nznet

Name PlatformExtract files? Decompress on extract? Create new? Modify? Compress on insert? Access hidden data? Edit metadata? Notes
fury3 CYesN/AYesYesN/AYesYes
hellbender CYesN/AYesYesN/AYesYes
nocturne CYesN/AYesYesN/AYesYes