Files
TeslaRel410/restoration
CydandClaude Fable 5 7c3d089d9c BT410 5.3.83: MFD-bleed hardening -- the uninitialised half of the 6-bit colour head's translation table
Operator report: "artifacts bleeding over from the radar display into the
MFDs, I have noticed this in the BT411 builds as well, but does not happen
in the original."

MECHANISM (proven from the archive source, not inferred):

  The ten cockpit heads are not ten framebuffers -- L4GAUGE.CFG gives each
  port a BIT MASK into ONE 16-bit buffer.  The colour head is six bits
  (sec, 0x003F); the MFDs are bits 8-15 of the same words.  A colour-head
  defect can therefore only ever surface as MFD garbage, which is exactly
  the reported shape.

  The two translation-table builders in L4VB16.CPP are asymmetric:

    BuildSecondaryTranslation (:5419) writes ONLY the active-bit
    combinations -- 1<<numberOfBits entries, so 64 of int
    translationTable[256] for this port.  Entries 64..255 are never
    written.

    BuildAuxiliaryTranslation (:5443) nests IncrementInactive inside
    IncrementActive and so fills all 256 -- which is why the mono MFD
    ports are safe by construction and must NOT be touched.

  DrawPixelMap8 (:2708) indexes that table with an 8-BIT source pixel, and
  DrawPoint ORs the result in UNMASKED.  An out-of-range index therefore
  ORs whatever the heap left at translationTable[n] straight into other
  ports' planes.  The colour head's own art carries out-of-range
  sentinels: AVACRIT.PCC is 94% <= 63 with 6% at exactly 231, BTSEC1.PCX
  99.8% <= 63 with 0.2% at 254.  Transparent draws skip them; OPAQUE draws
  put every one through the table.

  That it depends on heap CONTENTS rather than drawing logic explains both
  the intermittency and why BT411 shows it too: both reconstructions
  inherit the same latent read from the archive.

THE CHANGE, via the sanctioned source410-shadows-CODE seam (CODE/ is
untouched): a verbatim copy of CODE/RP/MUNGA_L4/L4GREND.CPP with one
difference -- port construction builds a BTL4GraphicsPort, whose ctor
zeroes translationTable[1<<numberOfBits .. 255] for SECONDARY ports only.
The guard (bit_mask & 0xFF) != 0 is literally the test
BuildSecondaryTranslation itself asserts on.  numberOfBits is a popcount
set in the base ctor, so the subclass body sees 6 and the later
SetSecondaryPalette -> BuildSecondaryTranslation refills 0..63 over the
top without disturbing the zeroed tail.

WHAT IS AND IS NOT PROVEN -- the honest scoreboard:

  PROVEN non-regressive.  Gauge A/B, three boots: unfixed x2 and fixed x1
  score identically on every head (Mfd1 132/0, Mfd2 37/7, Mfd3 23/0,
  Eng1/2/3 and Comm exact), against a ~6px across-boot noise floor
  established by re-booting the same binary.

  NOT PROVEN to cure the symptom.  The A/B rig captures the boot/attract
  cockpit, where the MFD heads already show ZERO extra pixels -- there is
  no bleed there to remove.  The operator's report is in-mission with the
  radar live.  This is a hardening change against a real uninitialised
  read that matches the symptom exactly; the cure needs a mission-state
  capture to confirm.

METHOD NOTE: the first "fixed" capture appeared to regress the MFDs by
~2700px and nearly got the change reverted.  It was a bad grab caught
mid-draw -- rebuild-and-rerun matched the unfixed numbers exactly.  The
two-agreeing-runs rule earned its keep; a single run would have thrown
away a correct change.  Worth noting the noise floor that mattered was
ACROSS boots, not the within-boot floor measured first.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 22:12:06 -05:00
..

Scene Restorations

Modern re-renderings of the Division dVS scenes recovered from the Glaze developer drive (see HISTORY.md) and this repo's CONTENT tree. The originals ran on Division Ltd.'s pixel-pipeline hardware in 19941997; these tools parse the original data files and re-render them in WebGL, in the browser.

Viewers (open in any browser, fully self-contained)

  • vwe-archive.html — the Scene Archive: 26 curated scenes across all projects — Star Trek (Enterprise-D, Klingon flyby), Hull Pressure (sea demos, fish schools, sunken temple), BattleTech (polar map with mech lineup, Ravine and desert maps, stadium), Red Planet (Blade arena, the Mars canal milestone demo), and the Canyon/Maya-temple Division demos. Fly camera: drag to look, WASD to fly, R resets.
  • trek-scn.html — the original standalone Star Trek restoration (TREK.SCN and KLNGVID.SCN).

Toolkit

  • divformats.py — parsers for every Division format found on the drive: text VGF/VMF (DIV-VIZ2 geometry/materials, both the 1995 VERSION 2:07 and 1996 02:05 dialects, with header SCALE support), binary BGF/BMF (DIV-BIZ2) — the binary block-stream layout was recovered from Division's own reader source (DPL3/BIZREAD.C, 1994), including all 14 vertex layouts, pmesh/tristrip/polygon connectivity, LOD blocks (newer writers nest patches inside LODs; the largest LOD is taken), and embedded materials/textures/ramps — plus TGA and raw SVT textures, SPL splines, and SCN scene scripts.
  • audit.py — scans every .SCN on the drive and reports what fraction of its geometry survives, and in which format.
  • extract_all.py — extracts every scene with ≥60 % of its geometry recoverable (108 of 241 on the drive; the rest reference lost models) into allscenes.json, resolving models/materials/textures across the drive and this repo's CONTENT dirs.
  • gallery_build.py — curates scenes from allscenes.json into the self-contained vwe-archive.html (via gallery_template.html).
  • convert.py / viewer_template.html — the original single-scene Star Trek pipeline.

Rebuild

python extract_all.py     # requires the sda4/ drive dump beside this repo
python gallery_build.py

Fidelity notes

Faithful: vertices, triangles, material colors and shading ramps, textures, fog and light parameters, spline motion, camera start positions. Approximated: Division's rasterizer behavior, point sizes, timing (originals ran at 30 Hz). Not simulated: event-driven SPECIALFX particles. A few dev scenes had camera start positions inside geometry; those get overridden or auto-framed cameras (see START_OVERRIDE in gallery_build.py). Scenes missing one or more models from the drive say so in their header.