CydandClaude Fable 5 f0f0e3d70e BT410 5.3.88: hinges flush as MATRICES -- the axis was never on the wire, and a DCS remembers how it was last set
The mech rendered with a live root and frozen limbs.  Cause, and it is not in
the renderer:

  L4VIDRND.CPP:1028 sets SINGLE_AXIS_HINGE True, so HingeRenderable pushes a
  joint with dpl_SetDCSXAxis / YAxis / ZAxis -- three separate libDPL entry
  points, each handed only (sine, cosine).  The AXIS is carried by WHICH
  FUNCTION WAS CALLED, and libDPL never puts it on the wire.

Confirmed against a live capture rather than argued: every articulation
record in joints_check.fifodump is 12 bytes, [handle][sin][cos], 26133 of
them, no axis field anywhere.  And the renderer cannot recover it from
context either -- that capture contains ZERO action-0x22 name records, so a
DCS handle cannot be matched back to a .SKL node.  vrboard was parsing those
records correctly and dropping them on purpose, with a comment saying so.

THE FIX is the archive's own alternative.  The #else half of that same #if
(L4VIDRND.CPP:1153) builds a Quaternion from the Hinge and assigns it over
the DCS matrix -- the axis ends up IN the matrix, and it flushes as a
12-float pose the renderer already applies.  That is precisely what
BallJointRenderable::Execute does unconditionally, with no #if at all, which
is why ball joints were never affected.  So this is the branch the original
authors wrote and did not take, applied to hinges so they behave like the
ball joints beside them.

A DCS REMEMBERS HOW IT WAS LAST SET -- the part that cost a build.

The first attempt subclassed HingeRenderable and overrode only Execute.  It
compiled, ran, and did not work: the wire still carried 12-byte records.  What
it DID change was their contents -- the pair went from (sin, cos) to
(0.9990, 0.0000), which is m00 and m01 of the matrix being written.  That is
the whole diagnosis in one number.  The base ctor calls dpl_SetDCS?Axis before
the subclass gets control, which puts the DCS in single-axis mode, and the
flush then serialises two floats out of it no matter what goes in through
dpl_GetDCSMatrix.

So the axis setter must never touch this DCS.  BTL4HingeRenderable therefore
derives from ChildOffsetRenderable, whose ctor builds the offset DCS and calls
no axis setter -- making it the exact hinge analogue of BallJointRenderable:
same base, holds its own attribute pointer plus a previous-value copy, writes
a full matrix in Execute.  CODE/ untouched; Component::Execute is virtual
(CMPNNT.HPP:40) so the override dispatches normally, and shadowing 1900 lines
of L4VIDRND.CPP to flip one #define was not needed.

VERIFIED on the rig, torso-sweep conf, clean run:

    before   26133 records, ALL 2-float, 1 handle, renderer applied NOTHING
    after     7626 records, ALL 12-float, ZERO 2-float messages remaining,
              22 handles emitted, renderer applied all 22 (anim_abs)

  and the swept joint moves: handle 0x684, m00 across 1532 distinct values
  from 0.1582 to 1.0000 -- cos of a 0..80 degree sweep, which is exactly what
  BT_FORCE_TORSO drives.

LEG GAIT: NOT FIXED, and the earlier note claiming this would fix it was
wrong.  The transport was necessary but not sufficient.  On a walking run
(new pod_render_joints.conf = the arena mission with BT_JOINTS) all 22 joints
flush as matrices and the renderer applies them, but only handle 0x672 -- the
vehicle ROOT -- animates.  The limbs emit their initial pose and never change.

  Because nothing drives them.  Joint::SetHinge / SetRotation exist, and the
  ONLY caller anywhere in the reconstruction is TorsoSimulation
  (BT/TORSO.CPP:382, horizontalJointNode->SetRotation).  That is why the
  torso is the one thing that moves.  MAD.SKL declares JointCount=25 --
  jointhip, jointlthigh, jointrthigh, jointtorso, jointshakey, jointeye and
  the rest -- and the gait that should walk them is simply not reconstructed
  yet.  Separate piece of work, now unblocked rather than done.

HARNESS CAVEAT: pose_probe frames on "the last-articulated root" in
anim_abs.  With 21 joint DCSs now landing there, that heuristic picks a joint
instead of the vehicle root and frames empty arena.  The change invalidated
the assumption; the render is not evidence either way until it takes the root
handle explicitly.  The counts above are the evidence.

FAULTS SEEN: two crashes during this work, both cr2=7000FA64 at host 66D9 --
the known parked load-window fault, address unmoved across a relink (which is
the standing test for "not ours").  They died at DIFFERENT points ([mer] 217
and [mer] 116), where a defect in new construction code would die
consistently.  Third and fourth runs clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 09:25:12 -05:00

Tesla Release 4.10 — Tesla:BattleTech & Tesla:Red Planet

Source code and game content for Tesla:BattleTech and Tesla:Red Planet, the two games that ran on the Tesla-generation simulator cockpits built by Virtual World Entertainment, Inc. (VWE). Source file headers are dated 19941996; this tree corresponds to release 4.10 of the Tesla software.

This repository is an archival snapshot. The tree is preserved byte-for-byte as found (see .gitattributes — no line-ending conversion is applied).

See emulator/PLAN.md for the implementation plan to run these games on the surviving cockpits' Windows 10 computers via a VPX-board HLE device in DOSBox-X, with the cockpit RIO (COM1) and plasma display (COM2) passed through to the game's original drivers.

See HISTORY.md for findings from a recovered VWE developer hard drive that accompanies this tree (excluded from the repo), including Division renderer source, runnable game builds, unreleased prototypes (Star Trek, Hull Pressure, Renegade Legion, and the Starship Troopers pitch that became DisneyQuest's "Invasion!"), and an analysis of whether these games can be rebuilt from the sources in this repository (summary: the engine can, the games cannot — most game-logic sources are absent from this cut).

Target hardware

Each Tesla cockpit was driven by a server-class Pentium Pro machine running Novell DOS. Graphics were split across two adapters:

  • The main (out-the-window) display was rendered by one of the first pixel-pipeline 3D accelerator cards ever made, driven through Division Ltd.'s dVS/DPL libraries (libDPL — DPL, dsys, dvs, and the VPX headers; Division copyright 1995).
  • An S3 video adapter drove the other six cockpit displays (instrument and gauge screens — see the GAUGE content directories and the PCPIC.INC / L4GAU* gauge code).

Other hardware/OS interfaces:

  • Audio: HMI SOS (Sound Operating System) — sos/ libraries, with variants for Borland (bc4) and Watcom (wc).
  • Networking: pods were networked over Ethernet using WATTCP (DOS TCP/IP, with BOOTP) via VWE's NetNub layer.
  • Input: joystick/pedal/panel I/O in assembly (JOYSTICK.ASM) and the L4CTRL* control modules.

Toolchain

  • Borland C++ 5.0 (BCC) with TASM32 for assembly — see the .MAK makefiles (original build tree lived at D:\TESLA_RP\ and D:\BC5\).
  • Precompiled-header discipline throughout (.CSM headers, #pragma hdrstop).
  • VSSVER.SCC / MSSCCPRJ.SCC files are remnants of the original Visual SourceSafe source control.
  • File extensions: .CPP/.HPP C++ source/headers, .TCP/.THP C++ template source/headers, .MAK Borland makefiles.

Repository layout

ARTTOOLS/   (empty placeholder — art tools were not included in this snapshot)
BORLAND/    (empty placeholder — compiler was not included in this snapshot)
CODE/       Game and engine source (~200k lines of C++/asm)
CONTENT/    Game data: models, animations, audio, maps, textures, gauges
HEADOFF/    Head/camera offset calibration configs for the cockpit displays

CODE/

Both games share the same architecture: a portable simulation engine (MUNGA, VWE's in-house engine) plus a hardware layer (MUNGA_L4, the "L4" Tesla pod platform layer), with game-specific code and a game-specific L4 layer on top.

CODE/BT/                Tesla:BattleTech
  BT/                   Game logic: mechs, weapons (PPC, Gauss, missiles),
                        damage tables, teams, missions, scenario rules
  BT_L4/                BattleTech pod application layer (app modes, arena,
                        radar, playback, version)
  MUNGA/                Engine bricks: math (matrices, angles, splines),
                        containers, file streams, audio manager, events
  MUNGA_L4/             Pod hardware layer: video renderer manager, keyboard,
                        mouse, audio hardware, warehouse (resource loading)
    LIBDPL/             Division Ltd. dVS/DPL graphics library (headers +
                        LIBDPL.LIB + VREND*.BTL renderer modules)
    NETNUB/             WATTCP-based pod networking (headers + WATTCPLG.LIB)
    SOS/                HMI Sound Operating System libraries + drivers

CODE/RP/                Tesla:Red Planet (same structure)
  RP/                   Game logic: VTV (hover racer) power/subsystems,
                        pickups (booster, blocker, crusher, thruster)
  RP_L4/                Red Planet pod application layer
  MUNGA/                Engine (fullest copy — 351 files incl. all .CPP)
  MUNGA_L4/             Pod hardware layer (fullest copy, incl. JOYSTICK.ASM)
    libDPL/, NetNub/, sos/   as above
  */opt/                Compiled Borland C++ 5.0 object files from the
                        original build (preserved as found)

Note: the BT copies of MUNGA/MUNGA_L4 are partial (69/68 files) while the RP copies are complete (351/231 files) — the BT tree appears to hold only the files that diverged from the shared engine.

CONTENT/

CONTENT/BT/             Tesla:BattleTech content
CONTENT/BT3025/         Parallel BattleTech content set (3025-era variant;
                        mostly identical to BT/ with a different mech roster)
CONTENT/RP/             Tesla:Red Planet content

Per-game content directories:

Dir Contents
MODELS .MOD/.SUB/.DMG/.TBL — vehicle/mech models, subsystems, damage tables
ANIMS .ANI — animations (BT only)
AUDIO .MID MIDI music, .SCP audio scripts, .BNK/.BLD banks
GAUGE .GIM — gauge images for the six S3-driven cockpit displays
MAPS .MAP/.ZNE — arena/terrain maps and zones
SOLIDS .SLD — collision solids
VIDEO Division renderer data: GEO/ geometry, MAT/ materials, and TEX/ textures per environment (ARENA, DAY, NIGHT, DESERT, POLAR, CAVERN, …), .DZM skins, .BMF/.BGF binary geometry, BUILD/ sources
SCENES Scene definitions (RP only)
BTCAM Camera batch setups (BT only)

DIVISION.SAV subdirectories inside VIDEO/ are backup saves written by Division's tools. MTMCDAI.SYS (Mitsumi) and TAISATAP.SYS are DOS CD-ROM device drivers used on the pod machines.

HEADOFF/

INI-style calibration files (.XST/.CAM/.BAK) defining viewing extents and camera offsets ("head offset") for the cockpit's main display, including a [LAB_ONLY] configuration.

The team

From a published VWE BattleTech credits page (scan supplied to this archive, July 2026). The roster matches the 19941996 source in this tree — see the cross-references below the table.

Role Name(s)
Producer and Designer Jordan Weisman
Art Director David McCoy
Technical Director J.M. Albertson
Audio Director Eric Huffman
Corporate Director of Technology Bill Redmann
Software Engineers
— Framework and Simulation Design J.M. Albertson
— Secondary/Auxiliary Screens and Low Level I/O Chris Brewer
— Low Level I/O Design and Programming Marek Ciolek
— Framework and 3D Video Rendering Greg Corson
— Animation Simulations and Tools Jerry Edsall
— Macintosh Design and Programming Garth Hermanson
— Framework and 3D Audio System Eric Huffman
— Simulation Code and Cameras Joanna Mason
— Graphics Research and Art Tools Ken Olsen
— Simulation Code and 'Mech Internal Systems Gabe Underwood
Artists & Animators
— 3D Art and Animations Tom Burlington, Duane Molitor, David McCoy, Lex Story
— Allen Workshop 2D Art Victor Bonilla, Tom Peters
Software Tools Group Leader Ken Olsen
Sound Samples/Designs Bing McCoy, Tom Effinger, Eric Huffman

Cross-references to this tree:

  • // Author: headers in CODE/ name four of the credited engineers: J.M. Albertson (MUNGA math/debug bricks — LINE, SPHERE, DEBUG*), Jerry Edsall (TOOL, FILEUTIL, the BT/RP *TOOL modules), Ken Olsen (NAMELIST, NOTATION template containers), and Eric Huffman (CSTR, MEMREG, SCHAIN).
  • The pod-lab per-developer update scripts on the recovered developer drive (see HISTORY.md) are named Chris, Gabe, Joanna, and Jordan — matching Chris Brewer, Gabe Underwood, Joanna Mason, and Jordan Weisman.
  • Garth Hermanson's "Macintosh Design and Programming" credit fits the venue side: the operator console the pods connect to was a Macintosh application.

Provenance

  • Copyright (C) 19941996 Virtual World Entertainment, Inc. All rights reserved worldwide. Original headers mark the source as proprietary and confidential.
  • Third-party components retain their own copyrights: Division Ltd. (dVS/DPL), Human Machine Interfaces (SOS), Erick Engelke / University of Waterloo (WATTCP).
S
Description
No description provided
Readme
437 MiB
Languages
C++ 21.7%
1C Enterprise 21.3%
C 20.2%
Assembly 14.9%
Scheme 5.9%
Other 15.5%