Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TerraTools Windows Viewer

Digital archaeology and software preservation

TerraTools Windows Viewer rendering the Taerkasten Zeppelin

An actual Windows 11 capture of the reconstructed viewer rendering the Taerkasten Zeppelin from the April 1998 prototype asset lineage.

This is a working Windows reconstruction of a missing object-viewer workflow associated with the 1998 TerraTools/VFM asset pipeline. It loads and renders the preserved Urban Assault .base, .sklt, .ANM, and .ILBM resources with the recovered TerraTools engine, provides a new Win32 viewer shell, captures P6 PPM frames, and assembles deterministic animated GIF89a files.

The shipped example is the Taerkasten Zeppelin used by the April 1998 HELP files. The current build has been exercised on Windows 11 x64 through WOW64. Silent viewing does not require Miles, DirectPlay, a DirectDraw wrapper, administrator changes, or a virtual machine. An opt-in second executable uses the preserved local Miles 3.6C runtime and the Zeppelin sound assigned by the April prototype; neither is installed or registered system-wide.

Download the latest Windows package · Read the provenance ledger · Review every source delta · Explore the Amiga frontend forensics · Read the preservation and rights notice

Credits and attribution

  • Original TerraTools/VFM engine and Amiga viewer code: TerraTools.
  • Windows reconstruction, reverse engineering, preservation tooling, and documentation: Andrei Kiralv (andreipemberton) and Lilitari (OpenAI Codex Interlocutor).

This acknowledgement does not relicense recovered historical material; see NOTICE.md for the exact rights and publication boundary.

Historical context

Urban Assault was a Windows action/real-time-strategy hybrid developed by Germany's TerraTools and published by Microsoft in 1998. Microsoft described players commanding an army from an overhead map and then taking direct cockpit control of aircraft, helicopters, jeeps, tanks, and other vehicles. Lead programmer André Weissflog later recalled that development began on AmigaOS, moved through DOS, and ultimately shipped on Windows 95 with DirectX 5. After release, the game's core team left TerraTools and founded the independent company that became Radon Labs; TerraTools did not simply rename itself.

The surviving April and August 1998 prototype media preserve major parts of TerraTools' VFM rendering framework, production resources, compiled tools, and documentation, but not the complete Windows object-viewer frontend. This project therefore compiles the recovered renderer behind a new and explicitly documented Win32 shell. It is a source-backed reconstruction of an incomplete production pipeline, not a claim that an intact original viewer was found.

That distinction is the heart of this digital-archaeology project: preserve the historical bytes, record hashes and provenance, document what is absent, and keep every modern compatibility or orchestration step visible.

Run the ready-to-use viewer

Download and extract the ZIP from the latest GitHub release. PowerShell 7 or newer is required by the integrity-checking launcher. From the extracted package, double-click View Zeppelin.cmd for silent viewing or View Zeppelin with Sound.cmd for the preserved prototype loop. The equivalent commands are:

pwsh -NoProfile -File .\Viewer\Launch-Viewer.ps1 -VerifyOnly
pwsh -NoProfile -File .\View-Zeppelin.ps1
pwsh -NoProfile -File .\View-Zeppelin.ps1 -Sound
pwsh -NoProfile -File .\View-Zeppelin.ps1 -ClassicAmigaControls

The first command checks all 28 runtime payloads against their recorded size and SHA-256. The second checks the 25 core payloads and opens the dependency-free silent viewer; it remains usable even if the optional sound set is absent. The third checks all 28 and selects TerraToolsViewerSound.exe, the manifest-pinned April ZEPP.WAV, and its matching local MSS32.DLL.

The fourth command (also available as View Zeppelin - Classic Amiga Controls.cmd) enables the control scheme reverse-engineered from the preserved Amiga HUNK, preferences, and input classes. It is an interactive option and can be combined with -Sound; modern controls remain the default.

Controls:

  • drag with the left mouse button to rotate;
  • drag with the right mouse button, use the wheel, or press W/S to move the camera;
  • use the arrow keys or A/D to rotate from the keyboard;
  • press Space to restore the initial camera;
  • press F12 to capture a PPM frame;
  • in sound mode, press M to stop or restart the Zeppelin loop;
  • press Esc or close the window to exit.

Classic Amiga controls (-ClassicAmigaControls or -AmigaControls):

  • move the mouse with no button to walk and yaw;
  • hold left mouse or Ctrl and move vertically to pitch;
  • hold right mouse or left Alt and move vertically to fly;
  • hold both mouse buttons and move horizontally to roll (vertical movement still flies);
  • use the cursor keys for the saved walk/yaw mappings;
  • press middle mouse or Space to centre the active object's angles;
  • hold Tab to control the Zeppelin itself, then release it to return control to the camera.

That held-Tab “object possession” behavior is the Amiga viewer's most unusual UI feature. It uses VFM's recovered generic base.class input handler rather than a transform gizmo. See the binary-backed analysis for exact HUNK offsets, slider expressions, and compatibility limits.

Sound is intentionally interactive-only. PPM captures and animated GIFs do not contain audio, so the launcher keeps both batch modes silent.

Capture frames

The staged launcher can produce one frame or a fixed-step 36-frame turn:

pwsh -NoProfile -File .\Viewer\Launch-Viewer.ps1 `
  -Mode Capture -OutputPrefix 'captures\zeppelin' `
  -Fit 1.8 -Pitch 30 -Yaw 270

pwsh -NoProfile -File .\Viewer\Launch-Viewer.ps1 `
  -Mode Turntable -OutputPrefix 'captures\zeppelin_' `
  -Fit 1.8 -Pitch 30 -Yaw 270

Capture paths must be relative to the staged runtime. A capture writes one 320 x 200 P6 PPM. A turntable writes frames 000 through 035 at 10-degree increments. Camera, geometry, and sequencing are fixed, but the Zeppelin's animated tail effect has produced either of two observed first-frame rasters on separate process launches. The GIF converter itself remains byte-deterministic for identical PPM inputs and arguments.

To render the reconstructed HELP-style GIF with the measured historical canvas, frame count, loop, and delays:

pwsh -NoProfile -File .\Make-Help-GIF.ps1

The exporter renders a fresh turntable, crops it to 250 x 152, orders the rotation to match the verified April HELP animation, writes a GIF89a with a 1,200 ms first-frame delay and 100 ms later delays, and emits a JSON manifest covering the viewer, converter, direct PPM frames, and output GIF. The staged runtime's separate asset manifest covers the resource inputs. The native ppmseq2gif.exe converter uses one deterministic adaptive global palette and has no Python, .NET, ImageMagick, or other conversion dependency.

Stage another VFM object bundle

The isolated stager accepts one extracted bundle containing exactly one .base and one .sklt, plus any recursively found animation and ILBM resources:

& .\scripts\stage_viewer_runtime.ps1 `
  -BundlePath '..\Taerkasten Zeppelin Reconstruction\extracted\VP_ZEPPL' `
  -SoundFile '..\Taerkasten Zeppelin Reconstruction\prototype_analysis\extracted_builds\apr09\GAME\DATA\SOUNDS\ZEPP.WAV' `
  -OutputPath '.\build\staged\my-object'

It resolves all destination names case-insensitively before writing anything, rejects conflicting duplicate resources, refuses to merge with an existing directory, and records provenance and SHA-256 for every staged byte. See docs/ASSET_STAGING.md for the exact mapping. Omit -SoundFile to make a 25-payload silent-only stage; when it is present, the stager admits the sound executable, DLL, and WAV as one complete optional set. Custom WAV inputs are rejected unless they are canonical RIFF PCM, mono, 8-bit files compatible with the recovered loader.

Build from the recovered source

The public repository preserves the new frontend, build recipes, documentation, and verification logic. It deliberately does not treat the archived TerraTools source, prototype media, period SDKs, or proprietary Miles runtime as newly licensed source code. Rebuilding requires lawfully obtained historical inputs staged at the paths documented in docs/PROVENANCE.md. The ready-to-run preservation package is distributed separately through the GitHub release, with an exact file manifest and checksum ledger.

Run these commands from this directory:

powershell -ExecutionPolicy Bypass -File .\scripts\build_legacy_vfm.ps1 -ViewerProfile
powershell -ExecutionPolicy Bypass -File .\scripts\build_legacy_vfm.ps1 -ViewerProfile -MilesSound
powershell -ExecutionPolicy Bypass -File .\scripts\build_vfm_probe.ps1
powershell -ExecutionPolicy Bypass -File .\scripts\build_viewer.ps1
powershell -ExecutionPolicy Bypass -File .\scripts\build_viewer.ps1 -MilesSound
pwsh -NoProfile -File .\tests\test_classic_input.ps1
pwsh -NoProfile -File .\tests\test_release_versioning.ps1
pwsh -NoProfile -File .\scripts\build_ppmseq2gif.ps1
pwsh -NoProfile -File .\scripts\build_release.ps1 -Version 1.1.0

build_release.ps1 accepts a validated numeric X.Y.Z project version. With no path overrides, version 1.1.0 publishes dist\TerraTools-Windows-Viewer-v1.1.0-Windows and the matching .zip; its RELEASE-MANIFEST.json records project_version as 1.1.0. Explicit -OutputDirectory and -ArchivePath values remain available for isolated QA.

The source build is intentionally 32-bit. The recovered renderer contains 32-bit pointer storage and uses DirectDraw/Direct3D 2, so a speculative 64-bit port would change the engine rather than simply compile it. Historical source exports under recovered remain untouched; verified compatibility edits are generated beneath the profile-specific build\legacy\patched-* directories. Each successful profile also emits source-delta.json with original/generated hashes and its exact source composition.

Important outputs:

  • build\legacy\vfm_viewer.lib — recovered VFM renderer, viewer profile;
  • build\legacy\vfm_viewer_sound.lib — separately linked Miles profile;
  • build\probe\vfm_probe.exe — headless asset-loader/lifetime probe;
  • build\viewer\TerraToolsViewer.exe — silent Windows viewer, with no Miles import;
  • build\viewer\TerraToolsViewerSound.exe — opt-in Miles Windows viewer;
  • build\tools\ppmseq2gif.exe — deterministic GIF assembler;
  • build\staged\VP_ZEPPL_SOUND — isolated, ready-to-run Zeppelin runtime.

What is original and what is reconstructed

All seven available PC prototype images and all SourceSafe members were audited. The original PC viewer frontend source is incomplete: the surviving targets refer to missing winyppsn.c and winplay.c, while neither snap.c nor a PC view.c/viewer project survives. The Amiga materials contain a compiled HUNK view, separately archived documentation, preferences, input classes, and runtime assets. Those bytes are not linked into the Windows build, but their decoded input/recipient behavior now informs an explicitly selectable classic mapping in newly authored code.

This build therefore has a precise boundary:

  • preserved TerraTools code performs resource loading, hierarchy traversal, transforms, clipping, lighting, texturing, rasterization, and PPM capture;
  • the Win32 window, input loop, scene attachment, camera fit, batch turntable, and GIF conversion are source-backed reconstructions;
  • the April game script explicitly assigns sounds/zepp.wav to the Zeppelin; loading that preserved loop in this standalone viewer is a documented reconstructed preview binding;
  • the HELP preset matches the verified animation's 250 x 152 canvas, 36-frame cadence, direction, loop, and delays, but is not claimed to be pixel- or byte-identical to TerraTools' missing camera/crop/quantizer pipeline.

For the full evidence and bounded source adaptations, see:

Further reading

Preservation and rights

This project is not presented as an official TerraTools, Microsoft, Ubisoft, or RAD Game Tools release, and no blanket open-source license is asserted over recovered historical material. See NOTICE.md for the exact publication boundary.

About

Windows reconstruction of the 1998 TerraTools/VFM object viewer for Urban Assault—digital archaeology and preservation.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages