A byte-level description of a live GOG installation of Broken Sword 5: The
Serpent's Curse (Revolution Software, 2013–2014), Windows edition,
gameId 1207660323. 33 files, 6,608,639,638 bytes, read-only. Nothing was
executed, nothing was extracted, and no decoded asset is shipped with this
repository.
| files / directories / bytes | 33 / 2 (both empty) / 6,608,639,638 |
| distinct sha1 | 33 of 33 — no file is a copy of another |
| containers | 17, holding 99.8996 % of the object |
| members inside them | 71,938 — 15,776 VT7A, 56,162 AUFS |
| the program | BS5.exe, 2,200,064 bytes = 0.0333 % of the disk |
| the executable | PE32+ x86-64, no version resource, PE checksum 0 |
| what the store verifies | 3 files, 3,655,704 bytes = 0.0553 %, 3 MD5 of 3 |
| entropy blocks above 7.5 | 99,285 of 100,860 = 98.44 % |
| the engine's name, in 6.6 GB | Virtual Theatre: 0 — and George: 0 too, until the containers were opened |
| middleware licences | 0. Twelve open-source libraries and nothing else |
| recorded sound and film | 23.0583 % of the disk (31.0952 % without the unused resolution) |
| leftovers | 1,758,685,265 = 26.6119 % — of which 1,708,089,344 is one resolution nobody loads |
| recordings, all told | 50 hours 10 minutes across 57,797 members |
Two container formats, neither published, both derived from the bytes this session and both proved with an external fact rather than with arithmetic:
VT7A— seven archives, 93.49 % of the object. 16-byte header, 16-byte record(key, offset, size_raw, size_stored), members aligned to 4,096 bytes, zlib per member and optional. The naive reading of the record overshoots one archive of seven by 201,604 bytes; the derived one fits all seven.AUFS— ten archives, the voice tracks. Eight-byte header, 12-byte record(id, offset, size), members laid end to end with zero slack, andoffset[last] + size[last] == file sizeexactly on ten of ten.
And what the 71,938 members turn out to be:
| members | bytes | share | |
|---|---|---|---|
STRM — 2D animation streams, 401,317 declared frames |
3,991 | 4,481,283,405 | 67.8095 % |
| Ogg Theora film, 1280×720, 34:56 | 12 | 853,951,984 | 12.9217 % |
| WebP still artwork | 3,138 | 545,251,816 | 8.2506 % |
| Ogg Opus speech, five languages, 44:22:25 | 56,162 | 422,938,723 | 6.3998 % |
| Ogg Vorbis music and effects, 5:13:22 | 1,623 | 246,947,531 | 3.7367 % |
| zlib — the whole script, rules and credits, as XML | 6,933 | 4,552,560 | 0.0689 % |
sdw |
79 | 957,936 | 0.0145 % |
1. The engine has no name in the object, and that is a measured absence and
not a compression artefact. Virtual Theatre occurs zero times in
6,608,639,638 bytes — but so does George, and George Stobbart is certainly in
this game. So general.vt7a was inflated: 12,663,529 bytes of XML and string
tables in which george occurs 22,475 times, Kickstarter 83 times, and
Virtual Theatre still zero. The absence only became evidence once the
positive control existed.
2. Three quarters of the object is the same artwork twice, and the pixels had
to say so. graphics_720.vt7a and graphics_1080.vt7a share no key and
almost no byte — 17 members of 9,042. They are nevertheless the same
pictures: pixel-area ratio 2.2890 against the 2.2500 of an exact 1.5×,
animation frame counts 200,636 against 200,681, and every large scene in the
1080 archive reconstructible as tiles of the 720 one at a 2,047-pixel limit
(2047 + 1023 = 3070 = 2045 × 1.5, exactly).
3. A tool said nineteen where the answer was 290. deps.py walked a 64-bit
import table four bytes at a time and reported exactly one imported function
from each of nineteen libraries, without erroring. Third session running in
which a tool has stated something false with confidence.
| 00 — Predictions | 48 clauses, written before a single byte was opened |
| 01 — The object | 6.6 GB, 33 files, and a program that is 0.0333 % of it |
| 02 — Spec sheet | every number with the command that reproduces it |
| 03 — The two manifests | 23 files, 3 MD5, and a folder made ready for nothing |
| 04 — The engine that has no name | twelve libraries, four letters, and a zero with a control |
05 — VT7A |
sixteen bytes a record, and the one archive that refused to close |
06 — AUFS |
eight bytes of header, and 56,162 recordings that close to the byte |
| 07 — The members | 71,938 things with no names, counted by their first bytes |
| 08 — The two resolutions | 76.4 % of the object is the same artwork twice |
| 09 — The moving pictures | 401,317 animation frames, twelve films, 34:56 |
| 10 — The language | five voices, eight subtitle tables, one shared id |
| 11 — The binaries | no version resource, and 290 functions the tool said were 19 |
| 12 — The paths and the machines | thirteen strings, two build trees, one drive letter |
| 13 — Against the collection | 291 members crossed eleven years ago, none crossed eight |
| 14 — The tools | 262, of which 165 do not apply and one was confidently wrong |
| 15 — The leftovers | 1,758,685,265 bytes, and the decision came before the count |
| 16 — The thesis | 23.0583 %, and the alternative is 31.0952 % |
| 17 — Corrections | fourteen in the briefing, four of mine |
| 18 — Open questions | what STRM is, what the key is, 291 known plaintexts |
| 19 — Scoring | 40.0 of 48 |
| 2003 The Sleeping Dragon | 2006 The Angel of Death | 2014 The Serpent's Curse | |
|---|---|---|---|
| bytes | 1,724,710,597 | 2,668,075,144 | 6,608,639,638 |
| the program | 0.1012 % | 0.1798 % | 0.0333 % |
| sound and film | 71.2028 % | 37.6177 % | 23.0583 % |
| engine | RenderWare, of Criterion | Emmersion, in-house | no name in the object |
| middleware licences | 1 | 2 | 0 |
| archive keeps names? | no | full source paths | no |
| absolute paths found | 3 | 26,212 | 13 (11.78 % sample) |
| languages of voice shipped | 1 | 1 | 5 |
| members crossing to the next game | 291 → | 0 → |
Every figure names its denominator and its tool. Where a scan sampled rather than censused, the sample is stated on the line that carries the number. Negative results are published with the number of bytes searched beside them. Controls that fired are reported as having fired — three of them did, and two invalidated the tests they were guarding.
Nothing in this repository was executed from the object, no member was ever written to disk, and the installation was never modified.