The microscopic save file
One of my favorite Fun Noctis Facts is that its main save file is 438 bytes. If you are a software engineer in 2026, 438 bytes is minuscule. Almost unfathomably small, really. But it is small even for Noctis's age: it's less than 1/100th of a single framebuffer. Pulling up a copy of the save, which the original program outputs as binary in CURRENT.BIN, yields:
01 01 00 00 3f 01 03 00 00 00 00 ff 00 00 00 00
No special headers in this file! We are looking at game state at
byte zero. To figure out what is going on here, we can take a look
at the nicely named freeze() method inside
NOCTIS.CPP. It writes one variable after another and
leaves its byte offsets in comments:
WRITEFILE(fh, &sync, sizeof(sync)); // 0
WRITEFILE(fh, &anti_rad, sizeof(anti_rad)); // 1
WRITEFILE(fh, &pl_search, sizeof(pl_search)); // 2
WRITEFILE(fh, &field_amplificator, sizeof(field_amplificator)); // 3
WRITEFILE(fh, &ilight, sizeof(ilight)); // 4
WRITEFILE(fh, &ilightv, sizeof(ilightv)); // 5
WRITEFILE(fh, &charge, sizeof(charge)); // 6
// and so on...
The first dozen fields occupy exactly one byte each. Later values widen to two-byte integers, four-byte floating-point numbers, and eight-byte coordinates, but the principle never changes. The Noctis save file is just a pile of values concatenated in a fixed order. This is a little bit more fun to visualize than to describe, so here's a byte-by-byte view of a canonical Noctis save.