Wolfenstein Modloader Buy me a coffeeKaffee spendieren

Wiki / Latest research roundsNeueste Forschungsrunden

Cutscene and Loading Video (.bk2) Replacement

Partly solvedTeilweise gelöst Original page in the GitHub wikiOriginalseite im GitHub-Wiki

In plain wordsIn einfachen Worten

This report looked at the Bink cutscene and loading videos in Wolfenstein: The New Order and Wolfenstein II: The New Colossus. All 209 videos are loose files on disk, not inside archives, and no size or integrity check was found. A test with the game's own video library played a swapped-in video correctly at its own different size and length, and four kinds of decls that name video paths can be retargeted cleanly; a replacement playing inside the running game is still untested.

  • All 209 .bk2/.bik videos are loose files under base/bink; none is in an archive.
  • The game's own video decoder accepted a video with a different resolution and frame count under another file's name.
  • Four decl types name videos, for example map info with loading videos for 63 of 70 maps.
  • 9 of 75 decl video paths (Chronicles clips) only match a file after a fixed suffix is added.
  • In Wolfenstein II, video sound comes from separate Wwise audio events named play_<video name>.

Dieser Bericht untersucht die Bink-Videos für Zwischensequenzen und Ladebildschirme in Wolfenstein: The New Order und Wolfenstein II: The New Colossus. Alle 209 Videos liegen als lose Dateien auf der Festplatte, nicht in Archiven, und es wurde keine Größen- oder Integritätsprüfung gefunden. Ein Test mit der Videobibliothek des Spiels spielte ein untergeschobenes Video korrekt in seiner eigenen, anderen Größe und Länge ab, und vier Arten von Decls, die Videopfade nennen, lassen sich sauber umleiten; dass ein Ersatz im laufenden Spiel abgespielt wird, ist noch ungetestet.

  • Alle 209 .bk2/.bik-Videos sind lose Dateien unter base/bink; keines liegt in einem Archiv.
  • Der Videodecoder des Spiels akzeptierte ein Video mit anderer Auflösung und Bildanzahl unter dem Namen einer anderen Datei.
  • Vier Decl-Typen nennen Videos, zum Beispiel die Karteninfo mit Ladevideos bei 63 von 70 Karten.
  • 9 von 75 Videopfaden in Decls (Chronicles-Clips) passen erst zu einer Datei, wenn ein festes Suffix angehängt wird.
  • In Wolfenstein II kommt der Videoton aus separaten Wwise-Audioereignissen namens play_<Videoname>.

Technical detailsTechnische Details

Der technische Teil ist auf Englisch – so, wie er im Wiki steht. Unterstrichene Begriffe haben eine Erklärung auf Deutsch.

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.

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.