nsr - themeldingwars/Documentation GitHub Wiki

The Network Stream Relay (NSR) files are better known as replay files since they hold the streaming data which allows to replay in-game recordings. This is an attempt to reverse engineer and document the format as best as possible.

The NSR format uses the little endian byte order, as such all the numbers are found "reversed" in the hex dump.

The streaming format changes rather often as such it's important to note that the following data has been collected with the release version 1861.

010 Editor Template

Implementations

  • Partial Reader and Writer have been implemented in FauFau: Nsr.cs

Tools

  • NSRViewer - View Firefall Network Stream Relay (NSR) files
  • nsrinfo - C++ CLI tool to extract basic NSR info

Compression

The NSR file is compressed with gzip and can for example get unpacked with 7zip.
It's however important to use the gzip and not the normal zip algorithm for compressing the unpacked file again.

7z a -tgzip name.nsr name

Format

NSRD - NSR Description

4E 53 52 44 -- NSRD
uint32 -- Always 5
uint32 -- Size of the header (NSRD + NSRI - 8bytes)
uint32[4] -- Unknown
uint32 -- Streaming protocol version
uint32[4] -- Unknown

NSRI - NSR Index

4E 53 52 49 -- NSRI
uint32 -- Always 5
uint32[x] -- Unkown

Meta Data

Size: 294 Bytes

uint32 -- Zone number
byte[27+] -- (no recording description)\0 or similar
byte[25] -- Fri Mar 20 17:43:28 2015\0 or similar
byte[8] -- Unknown
byte -- Same data
bytes[9+] -- Username
bytes[5] -- Unknown
bytes[21] -- Firefall (v1.3.1861)\0 or similar
bytes[32] -- Unknown
bytes[31] -- Friday, March 20.697 Zulu 2238\0
bytes[] -- 00 padding

Entity Chunk

Something something
FE FF FF FF -- Start sequence
bytes[x] -- Entity name with x characters and one \0
bytes[x] -- Entity name with x characters and one \0
bytes[] -- Unknown, possible BF ID, etc.
bytes[y] -- Army tag with y characters and one \0, usually something like [RAWR]\0
bytes[] -- Unknown