Measurements of Simulman V (MS-DOS, Simulmondo, Bologna, 1993) — the fifth and last instalment of a cyberpunk adventure sold in fortnightly parts at Italian newsstands.
120 files, 2,056,643 bytes, twelve directories. Not a disc image, not a floppy set, not an archive: a folder as it sat on somebody's hard disk. Every number below has a command in tools/ that reproduces it and a saved run in notes/.
| files / bytes | 120 / 2,056,643 — the denominator for every percentage here |
| directories | 12 |
| distinct SHA-1 | 119 of 120 |
| distinct mtimes | 1 — 1996-12-24 23:32:00, on every file |
| compressed or encrypted blocks | 0 of 557 |
| absolute build paths | 0, over 100.0000 % of the bytes |
| recorded media | 0.0000 % |
| unknown formats when this started | 16 |
| unknown formats now | 0 |
It measures one folder. Not the product: four fifths of Simulman was
sold on four other floppy disks and is not here, and the object says so in one
place only — the 5 in the name of a directory
(13).
No asset from the material is in this repository. No frame, no picture, no
MIDI, no line of the game's dialogue. Only measurements and the code that
reproduces them. game/, _pre/ and _work/ are all in .gitignore — the
object sits inside this repository's folder, which is new in this branch and
was the first thing verified, in both directions.
1. The year is written in pixels. All 120 files carry one identical mtime,
Christmas Eve 1996, which is wrong by three years. The string 1996 occurs
zero times inside the bytes. The game states its own date on its title
screen — © FRANCESCO CARLA' 1993, © SIMULMONDO 1993 — drawn as
run-length-encoded artwork where no string search can reach it. It took a
decoder and a person looking at the result.
04 · 07
2. One file is byte-identical to a file in the other Simulmondo game.
NEWMIDIL.EXE, 26,137 bytes, is the same SHA-1 as 1000 Miglia's
MIDI3DRV.EXE — same driver, different name, a year apart. They also share the
palette format, whose header grew from two bytes to five between them, proved
by arithmetic on fifteen files at three different palette sizes. Beyond those
two things a racing game and an adventure by the same studio share nothing.
06
3. 58.3509 % of the object is one format with no magic number, and it opens. A container whose first offset is the length of its own offset table, a six-bit VGA palette, and a skip/copy sprite encoder. 156 pictures of 156 decode consuming every byte but the two that mark the end — a count that went from 0 to 156 when those two bytes were recognised for what they are. 07 · 08
4. The dialogue is XOR'd with a key stored in the file's own first byte.
2,304 candidate transforms were tried; 96 cleared 85 % printable and 95 of them
were nonsense. The one that produced Italian is XOR with byte 0. The text
writes _ for space 2,158 times against 3 — because the font's first glyph is
0x21 and there is no glyph for a space — and its last glyph is 0x97, which
is CP437's ù, the last letter Italian asks for.
10
5. Nothing in it was recorded. No PCM anywhere; the music is nine MIDI sequences with zero program changes in 13,825 notes, the timbres living in 12,345 bytes appended to the driver. The pictures are drawn. 0.0000 % — the second zero in that table, and the first one measured with the object fully open rather than blind. 15
| 00 | Predictions, written before the object was opened — 56 clauses |
| 01 | One folder, 120 files, and a denominator that had to be chosen |
| 02 | The technical sheet: every number with the command that makes it again |
| 03 | This is not the product, and it is the only thing here that knows what year it is |
| 04 | Four clocks, one second, and a year written in pixels |
| 05 | Four executables, two compilers, and the one with its source names |
| 06 | The same file, twice, a year apart, under two names |
| 07 | 58.3509 %, no magic number, and 156 pictures of 156 |
| 08 | Four bits, the top sixteen colours, and a screen that is not scanlines |
| 09 | A big-endian script, a graph that closes, and an index that does nothing |
| 10 | One byte of secrecy, and a font that stops where the language does |
| 11 | Twenty-two minutes of music that never chooses an instrument |
| 12 | Nineteen bytes that reboot the computer |
| 13 | What is not here, including four fifths of the product |
| 14 | One crossing, and a zero that meant nothing |
| 15 | 0.0000 %, measured with the eyes open |
| 16 | Three names, one criterion, two opposite answers |
| 17 | Open questions — six, and 3.06 % of the object unread |
| 18 | Corrections — thirteen, four of them mine |
| 19 | The predictions, scored: 42.0 of 56 |
| 20 | Leftovers: 227,721 bytes, 11.0725 %, counted exactly |
python tools/treecensus.py game
python tools/mzcensus.py game
python tools/aniread.py game # 156 pictures of 156
python tools/eleread.py game # 162 sprites, and the base
python tools/plaread.py game --tokens --graph # the reference graph
python tools/keyread.py game # the dialogue
python tools/midread.py game # nine sequences
python tools/twosimul.py game "<1000 Miglia>" # the one crossing
python tools/toolclass.py # all 278, or nothing prints
Add --png <dir>, --copy <dir> or --dump <dir> to write decoded material.
It goes outside the repository and stays there.