POD/EPD Format
| Format type | Archive |
| Max files | 4,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 |
| Games | Category: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
| 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
| 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 |
Platform | Extract files? |
Decompress on extract? |
Create new? |
Modify? |
Compress on insert? |
Access hidden data? |
Edit metadata? |
Notes |
| TerminalFury |
C++ | Yes | N/A | Yes | Yes | N/A | Yes | Yes |
|
juanputrerasm
| Name |
Platform | Extract files? |
Decompress on extract? |
Create new? |
Modify? |
Compress on insert? |
Access hidden data? |
Edit metadata? |
Notes |
| OpenPhotex |
Java | Yes | N/A | Yes | Yes | N/A | Yes | Yes |
|
| JSPod |
Javascript | Yes | N/A | Yes | Yes | N/A | Yes | Yes |
|
| JPod |
Java | Yes | N/A | Yes | Yes | N/A | Yes | Yes |
|
| KPod |
C# | Yes | N/A | Yes | Yes | N/A | Yes | Yes |
|
| JPodman |
Java | Yes | N/A | Yes | Yes | N/A | Yes | Yes |
|
| KPodman |
C# | Yes | N/A | Yes | Yes | N/A | Yes | Yes |
|
dummiesman
| Name |
Platform | Extract files? |
Decompress on extract? |
Create new? |
Modify? |
Compress on insert? |
Access hidden data? |
Edit metadata? |
Notes |
| Poddy |
C# | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
|
jopadan
| Name |
Platform | Extract files? |
Decompress on extract? |
Create new? |
Modify? |
Compress on insert? |
Access hidden data? |
Edit metadata? |
Notes |
| termpod |
C++ | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
|
jtrfp
| Name |
Platform | Extract files? |
Decompress on extract? |
Create new? |
Modify? |
Compress on insert? |
Access hidden data? |
Edit metadata? |
Notes |
| jtrfp |
Java | Yes | N/A | Yes | Yes | N/A | Yes | Yes |
|
| terminal-recall |
Java | Yes | N/A | Yes | Yes | N/A | Yes | Yes |
|
sp00nznet
| Name |
Platform | Extract files? |
Decompress on extract? |
Create new? |
Modify? |
Compress on insert? |
Access hidden data? |
Edit metadata? |
Notes |
| fury3 |
C | Yes | N/A | Yes | Yes | N/A | Yes | Yes |
|
| hellbender |
C | Yes | N/A | Yes | Yes | N/A | Yes | Yes |
|
| nocturne |
C | Yes | N/A | Yes | Yes | N/A | Yes | Yes |
|