A read-only measurement of a live GOG installation of Broken Sword: The Sleeping Dragon (Revolution Software, published by THQ, 2003), Windows edition, gameId 1207658708. Nothing was executed. Nothing was written to the installation. No asset was decoded and none is in this repository.
| the object | 6,748 files, 7 directories, 1,724,710,597 bytes, on a hard disk |
| duplication | 6,748 distinct sha1 of 6,748 — zero |
| two manifests | Galaxy's file list says 6,739; the installer's hash database says 6,736; the disk says 6,748. All three are right, at three different instants of the install |
| verified | 6,736 MD5 of 6,736 match — 1,721,421,870 bytes proved intact |
| the engine | RenderWare 3.6.0.3 of Criterion Software, decoded from the packed library ID 0x1803FFFF and confirmed by 110 source paths reading RenderWare/RW36Active/rwsdk/… |
| the renderer | Direct3D 8. d3d9.dll appears nowhere in 1.7 GB, in any of three encodings |
| the program | BSTSD.exe, 1,744,896 bytes = 0.1012 %, with no version resource at all |
| the streams | 6,721 RenderWare audio containers, 813,813,760 bytes; header exactly 2,048 bytes each; four-bit ADPCM, 6,575 mono lines at 22,052 Hz and 146 stereo banks at 44,100 |
data.pak |
opened: 19,751 members that tile the file with zero gaps and zero overlaps — 5,744 bitmaps, 732 WAV, 2,975 RenderWare chunks in four engine versions, 1,188 PNG |
| the film | 9 Bink videos, 13,985 frames, 557.2 s; size + 8 == filesize on 9 of 9 |
| the thesis | 71.2028 % of the object is recorded sound and film |
| running time | 8:34 to 11:32 of sound against 9:17 of film |
| the platforms | the PlayStation 2 memory-card dialogue ships inside the Windows product, and the build tree has pc as one platform folder among siblings: one data build for three machines, unstripped. Not a port, in either direction |
| predictions | 70 written before anything was opened; 45 hits, 20 halves, 4 misses = 55.0 of 69 = 79.71 % |
| the experiment | the GOG client's language was switched from English to Italian after chapters 00–19 were written: 6,580 files replaced, the executable swapped for a different 2007 build, data.pak grown by 1,970,823 bytes — and every structural count unchanged |
The question this object asks. An installation of 1.72 gigabytes and 6,748 files with no duplication, of which the program is a thousandth and carries nobody's name, while 47 % of it is six thousand seven hundred and twenty-one RenderWare streams and another 39 % is a single file with no reader. How many files did you buy, and how many of them can you read? The answer this repository gives: 6,748 on the disk, 6,739 claimed, 6,736 proved — and all of them can be read, because both containers opened.
A note on the count. This repository has 21 documents, not the twenty
the branch has landed on for ten sessions. The twenty-first exists because the
object changed while it was being measured: the storefront client that installed
it rewrote 6,580 of its 6,748 files after chapters 00–19 were finished, and a
before-and-after of the same object is the one thing thirty-two discs and dead
installations could never provide. Chapters 00–19 describe the English state,
whose only surviving record is notes/sha1-all.txt and notes/tree.tsv in this
repository; chapter 20 describes what changed.
| 00 — The predictions | seventy bets, written before a byte was read |
| 01 — What this object is | three counters, three numbers, and the denominator this repository publishes |
| 02 — The spec sheet | every number with the command that makes it again |
| 03 — The two manifests | a bug in a buffer, and 6,736 digests that all match |
| 04 — The engine | RenderWare 3.6.0.3, named 114 times, four versions in the archive |
| 05 — The streams | 6,721 files, one format, and forty-seven points of thesis |
| 06 — The package | 19,751 members, and the word that was in the wrong place |
| 07 — The film | nine files, nine minutes, and two folder names that both lie |
| 08 — The binaries | three files, one signature, a program that names nobody |
| 09 — The dependencies | nine DLLs, and 158 files promised and never delivered |
| 10 — The calendar | ten dates, none from the filesystem |
| 11 — The paths and the machines | three build paths, and a filter that threw the best one away |
| 12 — Three installations | what Galaxy writes, what the installer writes, and whether they agree |
| 13 — Against the collection | four crossings, an empty Saga cell, a PlayStation 2 inside a Windows game |
| 14 — The tools | 241, of which 155 do not apply |
| 15 — The leftovers | 145,169,513 bytes, and the worst number this column has recorded |
| 16 — The thesis | 71.2028 %, and half of it was in a file nobody could read |
| 17 — Corrections | twelve in the briefing, eight of mine |
| 18 — Open questions | what is still shut, and what would open it |
| 19 — The scoring | 45 / 20 / 4 |
| 20 — The language switch | the object changed while it was being measured, and the twenty-document constraint was broken on purpose |
Every figure names the command that produces it. <install dir> is an argument
to every tool and is written down nowhere.
python tools/treecensus.py "<install dir>"
python tools/threesets.py --root "<install dir>"
python tools/hashdb.py "<install dir>/goggame-1207658708.hashdb" --check --root "<install dir>"
python tools/rwstream.py --selftest "<install dir>/data/movies/pal/teaser.bik" \
--census "<install dir>/data/streams"
python tools/pak.py "<install dir>/data.pak" --selftest "<install dir>/binkw32.dll" --census --wav
python tools/bink.py --census "<install dir>/data/movies"
python tools/leakthis.py "<install dir>"
Raw output is in notes/. Tools are in tools/, 241 of
them, classified by python tools/toolclass.py, which refuses to print unless
every one is in exactly one class.
Seven tools were written here — rwstream.py, pak.py, bink.py,
threesets.py, pcmtest.py, leakthis.py, treediff.py — and three were
repaired without
changing what any other object was measured with.