Correct the audio digest in wintesla-port.md + project-overview.md: the "no sound ever" root cause was that BOTH engine/lib backend DLLs were no-op stubs (libsndfile ordinal-only sf_open->NULL; OpenAL32 imports only KERNEL32). Now real OpenAL Soft + LoadWavPCM; soundbank cracked (241 samples). Only remaining gap = game triggering (AudioEntities). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
68 lines
4.5 KiB
Markdown
68 lines
4.5 KiB
Markdown
---
|
|
id: wintesla-port
|
|
title: "The WinTesla Windows Port — the base everything builds on"
|
|
status: established
|
|
source_sections: "PROGRESS_LOG.md §5b, §8"
|
|
related_topics: [source-completeness, rendering, build-and-run, multiplayer]
|
|
key_terms: [WinTesla, L4D3D, MUNGA, RP, DPL]
|
|
---
|
|
|
|
# The WinTesla Windows Port
|
|
|
|
The `Elsewhen RP411` archive is a **working Windows port of the MUNGA engine** (VS2005,
|
|
`WinTesla.sln`). It means the hardest infrastructure is **already solved** — the bt411 build sits
|
|
on top of it. Full detail: `docs/PROGRESS_LOG.md §5b, §8`.
|
|
|
|
## What WinTesla already did (do NOT rebuild)
|
|
- **Renderer bypass: DONE** — `MUNGA_L4/L4D3D.cpp` + `DXUtils` replace libDPL / the IG board with
|
|
Direct3D9. No `libdpl.lib` in the tree. (The early from-scratch D3D9 viewer was retired and removed.) [T1]
|
|
- **Audio: BACKEND now REAL + soundbank loaded; only game-triggering remains** [T2, updated
|
|
2026-07-15]. OpenAL replaces the HMI "SOS" engine and the renderer→device→buffer→source→play chain
|
|
IS all implemented (`L4AUDRND`/`L4AUDRES`/`L4AUDLVL`; `PatchLevelOfDetail::PlayNote` really calls
|
|
`alSourcePlay`). The "no sound, ever" root cause was DEEPER than a gate — **both audio backend DLLs
|
|
shipped in `engine/lib/` were no-op STUBS**: (a) `libsndfile-1.dll` exports 15 funcs BY ORDINAL
|
|
ONLY (no names), `sf_open()` always returns NULL; (b) `OpenAL32.dll` (72KB) imported **only
|
|
KERNEL32** — no dsound/wasapi/winmm — so it returned fake handles (`ctx=0x00000001`,
|
|
`alGenSources→0`) and never touched the hardware. So the chain ran clean and silent. FIXES (commit
|
|
5b46655): **OpenAL32.dll → real OpenAL Soft 1.25.2 Win32** (drop-in: the exe imports the 25 AL funcs
|
|
by NAME; `alSourcePlay` now reaches `AL_PLAYING`). **libsndfile DROPPED** — replaced by `LoadWavPCM()`
|
|
in `L4AUDRES` (a tiny in-tree RIFF/WAVE fmt+data reader, no external dep). Gates fixed earlier: the
|
|
`AWE_FRONT`/`AWE_REAR` env-var gate in `MakeAudioRenderer` was **relaxed to default-on** (`BT_NO_AUDIO=1`
|
|
disables). **Soundbank recovered**: 241 samples cracked from `AUDIO1/2.RES` (SF2 v1.0) by
|
|
`tools/sf2extract.py` → `content/AUDIO/*.wav` + the `allPresets[2][128]` table (`audiopresets.cpp`,
|
|
replacing the zero-init btstubs stub); all 241 load (`alErr=0`). **The ONLY remaining gap**: the
|
|
reconstructed game **never creates AudioEntities** — nothing triggers `PlayNote` on weapon fire /
|
|
footsteps / engine / explosion during play, so gameplay is still silent (a `BT_AUDIO_TEST` hook plays
|
|
buffer0 as proof-of-life). Diagnostic harness: `BT_AUDIO_LOG` traces the chain; `BT_AUDIO_TEST` plays
|
|
a sample. NOTE: the `AUDIO1/2.RES` were SF2 v1.0 (16-byte shdr records; sample rate assumed 22050 Hz
|
|
— may need tuning if pitch is off).
|
|
- **L4 HAL on Windows + the VS build system: DONE.** [T1]
|
|
- **Red Planet game logic: COMPLETE & buildable** — `VTV/VTVMPPR/WEAPSYS/...`. RP is at/near playable. [T1]
|
|
- **Multiplayer: the DOS `NETNUB` driver is already replaced by a ~3.5k-line WinSock2 TCP
|
|
reimplementation** (`MUNGA_L4/L4NET.CPP`) + the master/replicant distributed-sim core. See
|
|
[[multiplayer]]. [T1]
|
|
|
|
## What BT still needs (the only remaining work below the game layer is NONE)
|
|
Everything below the game layer — engine, renderer, audio, HAL, build — exists and is shared. The
|
|
ONLY thing BT needs is its **game-logic source**, which is gone (see [[source-completeness]]) → it
|
|
must be **reconstructed**, with the three anchors (BT headers + the WinTesla engine to compile
|
|
against + RP's parallel code + the binary oracle). [T2]
|
|
|
|
## Build implications
|
|
- `WinTesla.sln` is **VS2005** and hard-depends on the **legacy DirectX SDK (June 2010)** (`d3dx9`,
|
|
`dinput`, `dxerr` — all removed from the modern Windows SDK). The DXSDK is installed at
|
|
`C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\`. [T2]
|
|
- The shared engine builds GREEN to `munga_engine.lib` via CMake/MSVC Win32 (see [[build-and-run]]).
|
|
Recipe gotchas (include-path shadowing, the CAMMGR/time.h fixes, the ATL shim) are in
|
|
`docs/PROGRESS_LOG.md §8`. [T2]
|
|
|
|
## Roadmap position
|
|
Old plan ("build a libDPL shim + port the engine") is **superseded** — WinTesla did it. New plan:
|
|
reuse the WinTesla engine (shared) + reconstruct the BT game library (`BT410_L4` + game logic). The
|
|
from-scratch libDPL shim is no longer needed. Phases 4-8 (BT game layer + pod bring-up) still apply.
|
|
[T2]
|
|
|
|
## Key Relationships
|
|
- Solves: the infrastructure that [[source-completeness]] would otherwise require.
|
|
- Feeds: [[build-and-run]], [[rendering]], [[multiplayer]].
|