Files
RP412/BUILD.md
T
CydandClaude Opus 4.8 f849415c02 Remove ATL dependency so VC++ Express can build
The Express editions of Visual C++ ship without ATL. The only ATL usage was
in MUNGA_L4/L4APP.cpp (atlbase.h/atlconv.h + USES_CONVERSION/W2A macros, all
in that one file) for wide-to-ANSI conversion of command-line arguments.

- Replace the ATL includes with a self-contained L4WideToAnsi helper (a
  WideCharToMultiByte wrapper) and local USES_CONVERSION/W2A macros that
  reproduce ATL's W2A semantics. All call sites consume the result immediately
  (stricmp / CString assignment / atoi / atol), so behaviour is unchanged.
- Set UseOfATL="0" in Munga_L4.vcproj, RP_L4.vcproj and their VS2008 variants.
- Document the Express build path and the confirmed June 2010 DirectX SDK in
  BUILD.md (new section 6) and docs/BUILD-NOTES.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 09:30:08 -05:00

144 lines
6.6 KiB
Markdown

# Building Red Planet (v4.10, Win32)
This is the Win32 source for the pod-racing game **Red Planet**, built on the
in-house **MUNGA** engine and its **L4** (Win32 / DirectX 9) platform layer.
The code targets the Visual Studio 2005/2008 era and the legacy DirectX SDK.
---
## 1. Requirements
You must supply the toolchain — none of it is checked into this repo.
| Component | Required version | Notes |
|-----------|------------------|-------|
| **Visual Studio** | 2005 (v8) or 2008 (v9) — **Express is fine** | Project files are the legacy `.vcproj` format. Modern MSBuild **cannot** build `.vcproj` directly — it needs `VCBuild.exe`, which only ships with VS 2005/2008. A newer VS (2022) can build these but will first *upgrade* the projects to `.vcxproj`. The code uses **no MFC** and (as of the ATL-removal change) **no ATL**, so the free **Visual C++ Express** editions build it — see §6. |
| **DirectX SDK** | June 2010 (installed) — March 2009 also works | Provides `d3d9.lib`, `d3dx9.lib`, `dinput8.lib`, `dxguid.lib`, `dxerr.lib` and headers. ✅ Confirmed installed at `C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)` with `DXSDK_DIR` set machine-wide. |
| **Windows SDK / Platform SDK** | Matching your VS (e.g. Windows SDK 7.1) | Provides `WS2_32.lib`, `dbghelp.lib`, etc. With an Express edition, install the standalone Windows SDK 7.1 to guarantee these. Note: `dbghelp.lib` is listed as a link input but **no source references it** — drop it from the linker line if it isn't found. |
| **`DXSDK_DIR` environment variable** | — | The DirectX SDK installer sets this automatically (includes a trailing backslash). The projects reference the SDK **only** through this variable — see §4. |
### Bundled third-party libraries (already in the repo)
These are committed under [lib/](lib/) and do **not** need to be installed:
- `OpenAL32.lib` — OpenAL audio
- `libsndfile-1.lib` — sound-file loading
Their headers live in [MUNGA_L4/openal/](MUNGA_L4/openal/) and
[MUNGA_L4/sndfile.h](MUNGA_L4/sndfile.h). You will still need the matching
runtime DLLs (`OpenAL32.dll`, `libsndfile-1.dll`) next to the built `.exe` to run it.
---
## 2. Solution / project layout
The solution is [WinTesla.sln](WinTesla.sln). It builds four projects:
| Project | File | Type | Output | Depends on |
|---------|------|------|--------|------------|
| **Munga_L4** | [MUNGA_L4/Munga_L4.vcproj](MUNGA_L4/Munga_L4.vcproj) | Static lib | `lib\Munga_l4.lib` | — |
| **RP_L4** | [RP_L4/RP_L4.vcproj](RP_L4/RP_L4.vcproj) | Application (exe) | `rpl4opt.exe` | Munga_L4 |
| **RPL4TOOL** | [RP_L4/RPL4TOOL.vcproj](RP_L4/RPL4TOOL.vcproj) | Application (exe) | tool exe | Munga_L4 |
| **DivLoader** | [DivLoader/DivLoader.vcproj](DivLoader/DivLoader.vcproj) | Static lib | `lib\*.lib` | — |
**Build order:** `Munga_L4` → then `RP_L4` / `RPL4TOOL` (the dependency is
declared in the solution, so a solution-level build resolves it automatically).
`RP_L4` is the game itself. Its release output is **`rpl4opt.exe`**
(subsystem: Windows GUI).
### VS2008 project variants
Each of the three main projects also ships a `... VS2008.vcproj` variant
(format 9.00) alongside the original 8.00 files:
- `MUNGA_L4/Munga_L4 VS2008.vcproj`
- `RP_L4/RP_L4 VS2008.vcproj`
- `RP_L4/RPL4TOOL VS2008.vcproj`
The `.sln` references the **8.00** files. If you open in VS 2008, either let it
upgrade the 8.00 projects, or repoint the solution at the `VS2008` variants.
---
## 3. Build steps
1. Install VS 2005/2008 (with the C++ workload) and the DirectX SDK.
Confirm the SDK set `DXSDK_DIR`:
```powershell
echo $env:DXSDK_DIR
```
2. Open `WinTesla.sln` in Visual Studio.
- If prompted to upgrade the projects (newer VS), accept — this rewrites the
`.vcproj` files to `.vcxproj`. Keep those changes on a branch.
3. Select a configuration: **Debug | Win32** or **Release | Win32**.
(`x64` is not configured — this is a 32-bit build.)
4. Build the solution (`Ctrl+Shift+B`). `Munga_l4.lib` is produced first into
`lib\`, then the executables link against it.
### Command-line build (only with VS 2005/2008 installed)
```powershell
# From a "Visual Studio 2008 Command Prompt":
vcbuild WinTesla.sln "Release|Win32"
```
> Do **not** use `C:\Windows\Microsoft.NET\Framework\...\MSBuild.exe` on this
> solution — it fails with `MSB3428: Could not load the Visual C++ component
> "VCBuild.exe"` because the legacy C++ toolset is not present.
---
## 4. DirectX SDK path (no longer hardcoded)
Originally `Munga_L4.vcproj` and `RP_L4.vcproj` hardcoded the absolute path
`C:\Program Files (x86)\Microsoft DirectX SDK (March 2009)\...`. These have been
changed to use the standard installer-provided variable, matching what the
VS2008 variants already did:
- Include dir → `"$(DXSDK_DIR)Include"`
- Library dir → `"$(DXSDK_DIR)Lib\x86"`
So any DirectX SDK version installed to any location will work, as long as
`DXSDK_DIR` is set. If you build in an environment where it is not set, either
set it manually or pass it to the build, e.g.:
```powershell
$env:DXSDK_DIR = "C:\DXSDK\" # note the trailing backslash
```
---
## 5. Known caveats
- **32-bit only.** No `x64` configuration exists.
- **`Remote Debug|Win32`** configuration is present but is a debugging target,
not a normal build config.
- Requires the OpenAL and libsndfile **runtime DLLs** at run time (see §1).
- See [docs/BUILD-NOTES.md](docs/BUILD-NOTES.md) for the repository cleanup
history, orphaned files, and the full findings behind this document.
---
## 6. Building with Visual C++ Express (2008)
The Express editions are free but ship **without MFC and without ATL**. This
codebase uses no MFC, and its only ATL dependency has been removed, so Express
now builds it:
- `MUNGA_L4/L4APP.cpp` previously included `<atlbase.h>` / `<atlconv.h>` and used
the `USES_CONVERSION` / `W2A` macros to convert wide command-line arguments to
ANSI. These were replaced with a small self-contained `L4WideToAnsi` helper
(a thin `WideCharToMultiByte` wrapper) that reproduces ATL's `W2A` behaviour.
- `UseOfATL` was set to `0` in `Munga_L4.vcproj`, `RP_L4.vcproj` and their
`VS2008` variants.
Checklist for a clean Express build:
1. Install **Visual C++ 2008 Express SP1**.
2. Install the **Windows SDK 7.1** (for `WS2_32.lib`, `dbghelp.lib`, core Win32
headers/libs that Express's bundled SDK subset may not fully cover).
3. Install the **DirectX SDK** (already done — June 2010) and confirm `DXSDK_DIR`.
4. Open `WinTesla.sln`, pick `Release|Win32`, build.
5. If the linker can't find `dbghelp.lib`, remove it from
`RP_L4` → Linker → Input → Additional Dependencies (it is unused).