# 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) | 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`. |
| **DirectX SDK** | March 2009 (June 2010 also works) | Provides `d3d9.lib`, `d3dx9.lib`, `dinput8.lib`, `dxguid.lib`, `dxerr.lib` and headers. |
| **Windows SDK / Platform SDK** | Matching your VS | Provides `WS2_32.lib`, `dbghelp.lib`, etc. |
| **`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.
