Where Bink2 cutscene/loading videos live, whether the engine checks size/hash/signature on them, which decls reference them, and whether a replacement can have a different length or resolution. All 209 shipped videos across both games are loose files on disk — never inside an archive — with no hash/size/signature check found anywhere near them. A prior pass only knew the reverse link (a video's filename implies a Wwise audio-bank event name); this pass finds and closes the forward link too: four plain-text decl types name a video path, and the project's generic decl-editing tool can retarget one of those fields to a different file with a clean, single-span edit. A decoder-level test — not a running game, but the actual video-decoding library the game ships with — opens a deliberately mismatched video under an unrelated file's name and decodes it correctly at its own, different resolution and frame count: the strongest evidence yet that no fixed size or length is enforced. The one remaining gap is a replacement actually playing inside a running game, which this track's research rules did not allow.
Storage and integrity — PROVEN
Every .bk2/.bik in both installs is a loose file on disk under base/bink/** (plus, for TNC, a per-DLC equivalent for the Chronicles episodes) — none sits inside an archive. The project's own asset catalog builder is structurally the only asset kind that reads video files straight off disk instead of through the archive reader, and the project's own mod-replace feature code already documents this as the reason an automated video-replace button does not exist: loose files have no archive entry, and no video encoder exists in this (standard-library-only) project.
No archive-level hash/size/signature check can apply to a loose file. The full registered video-related cvar list (8 cvars, all cheat-flagged, none settable in the shipped game) has nothing that checks content integrity. A corpus parse of all 209 shipped videos across both games succeeds with 0 errors and already mixes two resolutions, several codec revisions, and a duration range from under a second to over 9 minutes.
Decoder-level test (new this pass): one video's bytes were copied under a different, unrelated video's filename (original: one resolution/frame count; swapped-in content: a different resolution/frame count) and opened through the actual video-decoding library the game ships with. It decoded correctly, reporting the swapped content's own shape, not the original filename's — the strongest evidence so far that no fixed size, resolution, or length is enforced, one level below an actual running game.
Forward decl links — now PROVEN, both directions
A corpus scan of every archive, decompressing and searching decl text (plain text, parseable by the project's existing generic decl reader — not compiled script bytecode) finds four decl types that name a video path:
| Decl type | Entries naming a video | Field(s) |
|---|---|---|
| Map info | 63 of 70 | a per-layer list of loading-video paths |
| Chronicle episode info | 6 of 6 | its credits video |
| Chronicle store info | 1 of 1 | its preview video |
| Shell/menu resource | 4 of 4 | credits/menu-loop/replay video fields |
Layer-keyed branching: the map-info loading-video list is keyed by story-branch/area layer, not a single value — up to 4 entries have been seen on one map, the same mechanism that already gates other branch-dependent content.
Filename convention is not always literal. Of 75 distinct video paths named in decls, 66 match an on-disk filename exactly; the other 9 — every one a Chronicles intro/outro/transition clip — only resolve once a fixed suffix is appended to the stem. A retarget that ignores this points at a file that will never exist.
A real decl retarget was built and verified: the project's existing generic decl-patch tool changes one map-info video path to a new filename with a single-span edit, confirmed to touch nothing else in the decl text.
Bank audio (TNC)
A cutscene with no embedded audio track triggers a Wwise event named play_<stem> (stem = the video's filename without extension, lower-cased, including any suffix). This is now confirmed to be the same mechanism for ingame cutscenes, loading-screen videos, and a recap video, not just ingame cutscenes as previously scoped — only credits/menu-loop/chronicle-intro clips have no matching event. A cvar (default on, cheat-flagged, not settable in the shipped game) always routes TNC video audio through this Wwise-bank layer instead of a video's own embedded track, and a modder cannot flip that in the shipped game.
No static-image alternative to a loading video exists as a map-info field; a separate, parallel system of per-chapter loading-screen images (shared with the in-game death screen) exists on disk but is referenced by no decl this pass could find — selection must happen in engine code this project cannot read.
Two replacement routes, both structurally proven
A. Overwrite the file in place, under its existing path/filename, inside a DLC-folder-precedence override (no encoder exists in this project — needs a third-party video encoder, outside this standard-library-only toolkit).
B. Retarget a decl to a new filename instead (new this pass): extract the target decl, patch the field to a new path with the generic decl-patch tool, and remember the filename-suffix convention above for the four field kinds that need it.
Open questions
- Which engine code decides between the static loading-screen image and the video, or whether both can show together — not resolved, the game's main code is encrypted and unreadable here.
- What the always-empty-in-retail "looping"/"checkpoint" loading-video fields do if a mod ever sets them.
- TNO's own DLC folder does not exist on the tested install, so TNO DLC videos are unverifiable there.
In-game test (not yet run)
Swap two existing, equally short videos against each other under one file's name (no new content needed), inside a DLC-folder-precedence override. Trigger the scene that plays that video and confirm it plays the other file's content without error — the last open question after this pass.