TFX Research archive

TFX resource extraction and coverage

Start with the analysis browser. The reference is the September 1994 CD installation, TFX 2.05. All 3,488 DID resources remain available in their original decoded formats; the viewers add interpretation without renaming or replacing those originals.

Resource family Entries Available interpretation
Shape programs 1,012 Model browser, 1–4 polygon detail levels, native instructions, palettes, component rotations, usage hierarchy with evidence, OBJ/MTL export
Scenery/entity definition candidates 704 703 valid entry tables; initial model parts, drawing anchors, state programs and collision tests in the assembled-definition browser
Terrain grids 39 pairs 200×200 low/high-byte grids, assembled tile selection and mission overlays
Terrain variant tables 40 Alternative scenery names and rotations; includes the cloud table
Terrain attribute tables 7 Original tables retained; subdivision semantics remain unresolved
Full-screen bitmaps 116 Native 320×200 indexed images, original palettes, PNG download
Animations 40 All 1,606 stored compressed blocks decoded; frame atlases, scrubbing and playback
Sprite banks 39 Every frame extracted, selectable preview palettes and atlas download
Palettes 101 256 VGA DAC RGB triples; palette swatch sheets
Texture artwork 13 12 native 256×192 pages with global/named bindings and UVs; one palette-bearing authoring-image candidate
Native music 81 FM, LAPC-I/MT-32 and SCC arrangements; all 81 resources have game-timed FLAC exports (104 auditions including separate SC-55/SCC-1A), original OSL data, native events and scene associations
Sample resources 103 102 matched to native effect descriptors and exported as mono PCM WAVs; one additional name candidate has no verified rate
Mission scripts 201 Readable scripts; world/type/start/targets/flak and waypoint associations
Text waypoint resources 182 Routes and per-waypoint commands; not necessarily 182 distinct mission routes
Binary waypoint programs 192 2,716 actor records and 23,147 commands, compiled routes and player coordinates in the route viewer
AI manoeuvres 18 259 timed control-input steps and SSD events in the manoeuvre viewer
Saved parser graphs 9 41 functions, 1,173 statement nodes, 116 contiguous visual scene groups
Other text 525 Translated briefings, authoring lists, geographical labels and other text in the catalogue
Original ILBM artwork 1 125×112, eight bitplanes, ByteRun1 compression, native palette and transparency
Entity type configuration 1 47 aircraft/surface profiles in the entity browser
Dynamic drawing-code resources 6 Five unique cockpit/HUD programs captured with native VGA masks, including retained 16-bit Inferno cockpit artwork; one identical alias
Planar cockpit panels 2 Native infcock panel and the 320×82 Inferno lower bitmap
Parser-editor sources 3 Original text scripts, including two previously unclassified box-drawing-prefixed files
Colour tables 2 16×256 index remap and a separate 27-byte selector table
Return stub 1 One-byte x86 RET resource, retained without assigning a gameplay role
Sample variants 3 Unattenuated breathing recordings, exact native PCM relationships and qualified auditions in the resource audit
Unclassified 8 Structural audit, waveforms where justified, hashes, record bytes and original downloads in the remaining-resource viewer

These are resource entry counts, not counts of unique meshes, compositions or gameplay objects. Names can collide under the game's filename hash. The catalogue retains original candidate names, content-verified names and newly recovered aliases separately. New aliases come from the 921-entry ssinfo.fn authoring list, terrain component tables, structurally decoded presentation records, native sound descriptors and checked name candidates. A format-compatible hash match is supporting evidence, not proof of the original filename.

The model browser now has 862 singly named models and 150 unnamed or ambiguously named models. The broader naming pass has aliases for 2,554 resources. The original extraction manifest remains unchanged so that previous paths and provenance continue to work.

Rebuilding and checking

From the research root, run:

tools/build_analysis.sh

Python needs Pillow, Unicorn and Capstone. Audio rendering and integrity checks additionally use FFmpeg/ffprobe; browser checks use Playwright and Chromium. The standalone did-unpack checkout supplies archive lookup; the extracted game resources and original executable are external inputs. The generated pages use local scripts and images, with no CDN dependencies. WebGL 2 supplies the assembled scenery view; the other browsers use Canvas or ordinary HTML.

Additional checks:

node tools/check_model_viewer.js
python3 tools/check_animation_decoder.py
python3 tools/check_model_rotation.py
python3 tools/check_model_effects.py
python3 tools/check_model_conditions.py
python3 tools/check_actor_streams.py
node tools/check_native_vms.js
python3 tools/check_map_assets.py
python3 tools/check_textures.py
python3 tools/decode_cockpits.py
node tools/check_scenery_viewer.js
node tools/check_textured_raster.js
python3 tools/check_animation_timing.py
python3 tools/check_waypoints.py
python3 tools/check_model_usage.py
python3 tools/check_music_control.py
python3 tools/check_presentation_fades.py
python3 tools/check_analysis.py
python3 tools/check_analysis_browser.py

The native-code checks need Unicorn and Capstone. Their reports distinguish exact native decoder/matrix results from the deliberately approximate inspection rendering. Animation decoding matches every stored block byte for byte. Model rotation matrices match the native generator in 205 cases. The 1,332 model-condition cases and 126 completed part-animation ticks also match their native routines. The model VM completes 6,028 model/detail/view combinations without invalid coordinates or exceptions.

Executable structure, game flow and simulation, terrain and scenery, media and presentations, model programs and audio describe the formats, evidence and remaining questions. Native palette bindings for 33 environments, 29 HUD viewport records, 25 controlled HUD/MFD captures, 51 mini-HUD glyphs and ten presentation font styles are also available. Exact lighting, runtime-only texture bindings, live actor state and a complete live game simulation are not implied by a successful extraction. The unresolved fields and programs remain available for the next stage of research.

Remaining evidence

Every archive entry has a retained decoded payload and hash. The remaining eight unclassified binaries comprise four 324-byte buffers containing decoded DOS low-memory snapshots after an unidentified 68-byte prefix, three numeric audio candidates without an established native descriptor/rate, and one big-endian table of twenty records. The numeric candidates have full-length WAV auditions at an explicitly assumed, adjustable rate. Three formerly unidentified breathing recordings are now classified as sample variants. The audit distinguishes decoded contents, audition assumptions and unresolved original purposes. Seven .sta tables expose 250 five-by-five tag patterns related to ASC authoring metadata; their likely editor-stamp role and unresolved runtime use are documented in the investigation. The separate global_1.tmt authoring-image candidate is not an established alternate decode of the raw texture page.

The remaining structural cases have been audited in resource-completion-checks.json. Both conditional rig initialisers now resolve from their known custom-storage values, and all scenery initialisers decode without warnings. The model range warning was a missing executable 0xffff return sentinel and is fixed. The 26 unavailable title-font characters are null pointers in the original font table, not failed glyph extraction; none is used by the recovered presentation text in that style. The final SSD-like candidate is only 26 bytes, with seven entry points exactly at EOF and an eighth beyond it: it contains no instruction payload to decode.

New campaign and weapon/dynamics reports connect extracted scripts and native data to their handlers. The lighting notes include original raster-mode captures and palette-index Gouraud checks. These do not imply that every live scene, aerodynamic equation or runtime binding has been reconstructed.