A read-only measurement of a live GOG installation of Broken Sword: The Angel of Death (Revolution Software with Sumo Digital, published by THQ, 2006), Windows edition, gameId 1207658973. Nothing was executed — in particular not the folder's Direct3D proxy. Nothing was written to the installation. No member of any archive was extracted and no decoded asset is in this repository.
| the object | 31 files, 9 directories, 2,668,075,144 bytes, on a hard disk |
| duplication | 31 distinct sha1 of 31 — zero whole files; 579 duplicate members inside the archives, 41,157,103 bytes |
| the three masses | bs4.pak, english.pak, audio.pak = 99.3801 %, all three beginning EmPackFi, a format documented nowhere |
| verified by the installer | 1 file of 31 — a 207-byte hash database with one MD5, and it is the language archive |
| the package | opened: 17,978 members that tile all three files with zero overlap, gaps never larger than 255 bytes, and header + members + slack == filesize, delta zero on three of three |
| the trap | the record's first field is a pointer to the member's name relative to its own record. The obvious reading agrees on record 0 and drifts twelve bytes per record after it, returning a plausible filename for all 17,978 and never failing |
| the engine | Emmersion, 3,449 occurrences in ASCII and 2 in UTF-16. Immersion, the spelling in the literature, occurs 0 times in 2.67 GB in two independent encodings |
| the technology | amBX of Philips, 1,073 occurrences in six casings, a 4 MB video member, and 220 identifiers compiled into the executable. Amex, the name in the literature, occurs 0 times |
| the largest thing | 1,987 compiled 3D scenes, 1,557,790,042 bytes = 58.3863 % — the first object in this collection whose plurality is modelled geometry |
| the calendar | 1,967 of those scenes carry an ASCII timestamp at byte 200 of their own header — 100 distinct days from 2006-04-20 09:24:55 to 2006-08-14 12:07:50, with a weekday histogram and a lunch hour |
| the sound | 7,902 members, 11 h 22 m 06 s; voice mono at 160 kbit/s on 6,098 of 6,098, music stereo at 192 |
| the film | 8 Bink videos, 13,129 frames, 298.74 s — of which 2 m 39 s is a screen-capture tutorial |
| the thesis | 37.6177 % of the object is recorded sound and film, against 71.2028 % for the same studio's previous game |
| the crossing | 291 archive members are byte-identical to Broken Sword 3's — 87.83 % of this game's bitmaps, 100 % of its animation event maps, and zero of its sound, film or geometry. The collection's twelve-session rule that no game data ever crosses is over |
| the platforms | PlayStation 0 occurrences, and 53 PlayStation 2 textures at half the resolution of their pc siblings, in a folder called ps2, in a Windows-only product |
| the program | bs4pc.exe, 4,797,440 bytes = 0.1798 %, with no CompanyName key and a version resource reading dont_change_XXXXXXXXXXXXXXXXXXXXXXXXXX |
| the paths | 26,212 distinct DOS paths over 100 % of the object, all on one drive Z:, because this archive stores the full build path of every member where the previous game stored a hash |
| predictions | 66 written before an archive was opened; 48 hits, 11 halves, 6 misses = 53.5 of 65 = 82.31 % |
The question this object asks. An installation of 2.67 gigabytes and
thirty-one files, of which the program is 0.1798 % and has the word
dont_change in its own version resource, while 99.3801 % sits in three
containers that announce themselves with eight bytes and then say nothing — and
the only file the installer took the trouble to verify is the one holding the
language. What did you buy, and who built it?
The answer this repository gives: 17,978 assets, of which 1,987 are compiled scenes that carry, in ASCII, the minute they were exported and the name of the person who exported them — and they were built by about twenty people over a hundred working days between the twentieth of April and the fourteenth of August 2006, which the object states about itself and no catalogue records.
| 00 — The predictions | sixty-six bets, written before a byte of the archives was read |
| 01 — What this object is | thirty-one files, three denominators, and the one file anybody checked |
| 02 — The spec sheet | every number with the command that makes it again |
| 03 — The two manifests | a hundred and eighty promises and one kept |
| 04 — The engine | Emmersion 3,449 to 0, and the technology called amBX and not Amex |
| 05 — The package format | eight bytes, twelve more, and a pointer that points at itself |
| 06 — The members | 17,978 things, and none of the three archive names is right |
07 — EMDF and the calendar |
a hundred working days, written into the assets |
| 08 — The recordings | eleven hours and twenty-two minutes of sound, five minutes of film |
| 09 — The binaries | ten programs, one signature, a placeholder that shipped, a hook from 2017 |
| 10 — The paths and the machines | twenty-six thousand paths, and why yesterday's game had three |
| 11 — The language | one archive, one DWORD, and six languages nobody asked for |
| 12 — Against the collection | the rule held for twelve sessions and broke today |
| 13 — The port that never was | PlayStation zero, and fifty-three PlayStation 2 textures |
| 14 — The tools | 248, of which 156 do not apply, and a leak check that caught me twice |
| 15 — The leftovers | sixty-four megabytes the product does not need |
| 16 — The thesis | 37.6177 %, and the majority is not a recording |
| 17 — Corrections | fourteen in the briefing, four of mine |
| 18 — Open questions | what is still shut, and what the crossing made answerable |
| 19 — The scoring | 48 hits, 11 halves, 6 misses, and the one that would have cost the session |
docs/ — the twenty chapters above. notes/ — the raw output of every tool
run, with the installation path redacted. tools/ — 248 Python scripts, of
which 7 were written for this object: empack.py, emdf.py,
mpegaudio.py, whichmember.py, crossmembers.py, thesis.py and
leakhere.py.
No asset. Not one member of any archive, not a frame of video, not a second of audio, not an image. The archives were read and never opened onto disk.
Every chapter opens with the command that makes its numbers. The installation root is always an argument and never a constant:
python tools/treecensus.py "<install dir>" --tsv notes/tree.tsv
python tools/empack.py "<install dir>/bs4.pak" --census --tsv members.tsv
python tools/empack.py "<install dir>/manual.pdf" --expect-fail
python tools/emdf.py --archive "<install dir>/bs4.pak" --tsv members.tsv --selftest
python tools/mpegaudio.py --archive "<install dir>/audio.pak" --tsv members.tsv --selftest
python tools/thesis.py --tsv members-bs4.tsv --tsv members-english.tsv \
--tsv members-audio.tsv --total 2668075144
python tools/leakhere.py "<install dir>"
python tools/checkscore.py docs/19-scoring.md