From 12b31187f9797df14382f5fced557cac851326a0 Mon Sep 17 00:00:00 2001 From: Cyd Date: Sun, 12 Jul 2026 12:22:31 -0500 Subject: [PATCH] Move the build to VS2022 (v143) with runtime parity against VC9 Hand-converted the four .vcproj projects to .vcxproj (Win32, v143, Windows 11 SDK + DXSDK June 2010 for d3dx9/dxerr only). WinTesla.sln now builds the v143 projects; the legacy solution is kept as WinTesla_vc9.sln. Kept: /Zp1 in Munga_L4+RP_L4, Unicode, x86, /DYNAMICBASE:NO, /FORCE:MULTIPLE (header-defined globals still duplicated across TUs). Changed: CRT unified to /MD(d); import libs linked by the exes instead of merged into Munga_L4.lib; WINDOWS_IGNORE_PACKING_MISMATCH and _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS defined; legacy_stdio_definitions.lib for the June-2010 dxerr.lib. Source fixes, all behavior-preserving: Time gains standard (non-volatile) copy-ctor/assignment overloads (rvalues cannot bind to volatile& in standard C++); operator==(SOCKADDR_IN&,...) made inline; L4DINPUT's Enum*Callback pair renamed DIEnum* (collided with L4CTRL's under LTCG); std::ios.in -> std::ios::in in CAMMGR.cpp. Verified: VC9 baseline rebuilt from this tree first, then the v143 build compared against it in a sandboxed game working copy - identical logs and behavior through RIO init (against vRIO) and mission load, including the same pre-existing AV in d3d_OBJECT::LoadTexture (L4D3D.cpp:262) that both toolchains hit; documented in BUILD.md 4 as the next debugging target. Co-Authored-By: Claude Fable 5 --- BUILD.md | 226 ++---- DivLoader/DivLoader.vcxproj | 76 ++ DivLoader/DivLoader.vcxproj.filters | 31 + MUNGA/CAMMGR.cpp | 2 +- MUNGA/NETWORK.h | 2 +- MUNGA/TIME.h | 10 + MUNGA_L4/L4DINPUT.cpp | 8 +- MUNGA_L4/L4DINPUT.h | 4 +- MUNGA_L4/Munga_L4.vcxproj | 457 +++++++++++ MUNGA_L4/Munga_L4.vcxproj.filters | 1162 +++++++++++++++++++++++++++ RP_L4/RPL4TOOL.vcxproj | 131 +++ RP_L4/RPL4TOOL.vcxproj.filters | 94 +++ RP_L4/RP_L4.vcxproj | 178 ++++ RP_L4/RP_L4.vcxproj.filters | 232 ++++++ WinTesla.sln | 60 +- WinTesla_vc9.sln | 67 ++ docs/RP412-ROADMAP.md | 24 +- 17 files changed, 2561 insertions(+), 203 deletions(-) create mode 100644 DivLoader/DivLoader.vcxproj create mode 100644 DivLoader/DivLoader.vcxproj.filters create mode 100644 MUNGA_L4/Munga_L4.vcxproj create mode 100644 MUNGA_L4/Munga_L4.vcxproj.filters create mode 100644 RP_L4/RPL4TOOL.vcxproj create mode 100644 RP_L4/RPL4TOOL.vcxproj.filters create mode 100644 RP_L4/RP_L4.vcxproj create mode 100644 RP_L4/RP_L4.vcxproj.filters create mode 100644 WinTesla_vc9.sln diff --git a/BUILD.md b/BUILD.md index 77bf71b..bb90d02 100644 --- a/BUILD.md +++ b/BUILD.md @@ -1,180 +1,114 @@ -# Building Red Planet (v4.10, Win32) +# Building Red Planet 4.12 (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. +As of RP 4.12 the build targets **Visual Studio 2022 (v143)**; the legacy +VS 2005/2008 projects are retained for reference (see §5). -> ✅ **Verified build (2026-07-01):** all 4 projects build clean (`Release|Win32`) -> with **Visual C++ 2008 Express SP1** + **Windows SDK v6.0A** (VS-bundled) + -> **DirectX SDK (June 2010)**. Outputs: `Release\rpl4opt.exe` (the game), -> `Release\RPL4TOOL.exe`, `lib\Munga_L4.lib`, `lib\DivLoader.lib`. -> Only compiler *warnings* remain (deprecated CRT calls, int→Scalar narrowing, -> benign `LNK4006`/`LNK4221` duplicate-symbol notes). See §7 for the CLI recipe. +> ✅ **Verified build (2026-07-12):** all 4 projects build clean (`Release|Win32`) +> with **VS2022 Build Tools 17.14** (MSVC 14.44, v143) + **Windows 11 SDK +> (10.0.26100)** + **DirectX SDK (June 2010)**. Outputs: `Release\rpl4opt.exe` +> (the game), `Release\RPL4TOOL.exe`, `lib\Munga_l4.lib`, `lib\DivLoader.lib`. +> Runtime-verified against the VC9 baseline built from the same tree: identical +> log output and behavior at every checkpoint, including RIO init against vRIO +> and mission load (see §4 for the pre-existing crash both builds share). --- ## 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. | +| Component | Version | Notes | +|-----------|---------|-------| +| **VS2022 Build Tools** (or any VS2022 with C++ workload) | 17.x, MSVC v143 | Installed at `C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools`. Install via `winget install Microsoft.VisualStudio.2022.BuildTools --override "--quiet --wait --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended"`. | +| **Windows 10/11 SDK** | any recent (26100 verified) | Comes with the VCTools workload. | +| **DirectX SDK (June 2010)** | — | Still needed for **d3dx9** and **dxerr** only; everything else now comes from the Windows SDK. The projects reference it via `$(DXSDK_DIR)`, which the SDK installer sets machine-wide. The DXSDK include/lib paths are appended **after** the Windows SDK paths (see the `IncludePath`/`LibraryPath` properties in the projects) so modern headers win — do not move them to `AdditionalIncludeDirectories`. | ### Bundled third-party libraries (already in the repo) -These are committed under [lib/](lib/) and do **not** need to be installed: +Committed under [lib/](lib/), no install needed: `OpenAL32.lib`, `libsndfile-1.lib` +(import libs). At **run time** the game needs `OpenAL32.dll` (system-wide install — +`assets/RP411/oalinst.exe` — or beside the exe) and `libsndfile-1.dll` (beside the +exe; a copy ships in `assets/RP411/`). -- `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) +## 2. Building ```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 +& "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\MSBuild.exe" ` + WinTesla.sln /p:Configuration=Release /p:Platform=Win32 /m ``` ---- +`Debug|Win32` also builds. `x64` is not configured — this is a 32-bit build. +The solution is [WinTesla.sln](WinTesla.sln) with four v143 projects: -## 5. Known caveats +| Project | Type | Output | +|---------|------|--------| +| [MUNGA_L4/Munga_L4.vcxproj](MUNGA_L4/Munga_L4.vcxproj) | Static lib | `lib\Munga_l4.lib` | +| [RP_L4/RP_L4.vcxproj](RP_L4/RP_L4.vcxproj) | App (Windows) | `Release\rpl4opt.exe` — **the game** | +| [RP_L4/RPL4TOOL.vcxproj](RP_L4/RPL4TOOL.vcxproj) | App (Console) | `Release\RPL4TOOL.exe` | +| [DivLoader/DivLoader.vcxproj](DivLoader/DivLoader.vcxproj) | Static lib | `lib\DivLoader.lib` (Release) | -- **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. +Build order is resolved by `ProjectReference` (RP_L4 and RPL4TOOL both reference +Munga_L4). ---- +## 3. VS2022 migration notes (what changed and why) -## 6. Building with Visual C++ Express (2008) +Settings preserved from the VC9 projects: **`/Zp1` struct packing** in Munga_L4 +and RP_L4 (the engine's on-disk/on-wire binary formats depend on it — RPL4TOOL +and DivLoader never had it), Unicode, subsystems, x86, `/DYNAMICBASE:NO`, +optimization levels, and `/FORCE:MULTIPLE` (see below). Deliberate changes: -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: +- **CRT unified to `/MD` (Release) / `/MDd` (Debug).** The VC9 build mixed + `/MT` (Munga_L4, RPL4TOOL) with `/MD` (RP_L4) and forced the link. +- **Import libs are no longer merged into `Munga_L4.lib`** by the librarian; + the exes link OpenAL32/d3d9/d3dx9/dinput8/dxguid/ws2_32 directly. +- `WINDOWS_IGNORE_PACKING_MISMATCH` is defined: the modern Windows SDK + `static_assert`s against `/Zp1`; the VC9 build always compiled Windows + headers at `/Zp1`, so this preserves those exact semantics. Un-`/Zp1`-ing + the engine (pragma-pack only the serialized structs) is future work. +- `_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS` is defined: the code still uses + `stdext::hash_map`; porting to `std::unordered_map` is future work. +- `legacy_stdio_definitions.lib` is linked: the June-2010 `dxerr.lib` + references pre-UCRT stdio symbols. +- **Source fixes** (behavior-preserving): standard copy-ctor/assignment + overloads added to `Time` (rvalues can't bind to `volatile&` in standard + C++); `operator==(SOCKADDR_IN&,...)` in `NETWORK.h` made `inline`; the + L4DINPUT callbacks renamed `DIEnum*` (they collided with L4CTRL's under + LTCG); `std::ios.in` → `std::ios::in` in `CAMMGR.cpp`. +- `/FORCE:MULTIPLE` is still required: `gOpNames`, `gReplacementData` + (hash_maps defined in a header) and `GlobalEggFileName` are genuinely + defined in multiple TUs (LNK4006 warnings, same as the VC9 build). Moving + them to a single TU is future cleanup. -- `MUNGA_L4/L4APP.cpp` previously included `` / `` 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. +## 4. Known runtime issue (pre-existing, both toolchains) -Checklist for a clean Express build: +Standalone mission load (`rpl4opt.exe -windowed -res 640 480 -egg TEST.EGG`, +run from a game working copy such as `assets/RP411/`) **crashes with an access +violation in `d3d_OBJECT::LoadTexture`** ([MUNGA_L4/L4D3D.cpp](MUNGA_L4/L4D3D.cpp) @ 262, +called from `LoadObject` → `DPLRenderer::MakeEntityRenderables`) right after +the `Entity -1:10x class42 couldn't figure out how to MakeEntityRenderables` +log lines. The VC9 build of this tree crashes at the identical point, so this +is a defect (or asset/config mismatch) in the 2007 DPL→D3D9 port, not a +migration regression. The v143 build produces full PDBs — debug with +`cdb -g -G -lines -y Release rpl4opt.exe ...` from the working directory. -1. Install **Visual C++ 2008 Express SP1**. -2. Install the **DirectX SDK (June 2010)** and confirm `DXSDK_DIR` is set. -3. Open `WinTesla.sln`, pick `Release|Win32`, build. +Also note: `Fail()` compiles to `abort()` in release (`MUNGA/DEBUGOFF.h`) — +e.g. running with `L4CONTROLS=KEYBOARD` alone aborts at VTV creation because +no keyboard-only pod mapper exists (the old CRT showed a blocking R6010 +dialog; the UCRT fail-fasts). Use `L4CONTROLS=RIO;KEYBOARD` with vRIO serving +the RIO side, exactly like the arcade config. -> The Windows SDK **v6.0A** that ships with VS2008 already provides `WS2_32.lib` -> and `dbghelp.lib`, so a separate Windows SDK 7.1 install was **not** needed in -> the verified build. `dinput8.lib`/`dxguid.lib` come from the DirectX SDK. +## 5. Legacy VS2005/2008 build ---- - -## 7. Verified command-line build recipe - -This is exactly what produced the verified build. The key gotcha: a shell opened -*before* the DirectX SDK set the machine-level `DXSDK_DIR` will not see it, so the -recipe sets it explicitly. +The original `.vcproj` files and solution are kept as +[WinTesla_vc9.sln](WinTesla_vc9.sln) and still build with VC++ 2008 Express +SP1 + DXSDK June 2010: ```bat @echo off call "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat" set "DXSDK_DIR=C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\" -cd /d C:\VWE\RP411 -vcbuild /nologo /rebuild WinTesla.sln "Release|Win32" +vcbuild /nologo /rebuild WinTesla_vc9.sln "Release|Win32" ``` -Expected result: `4 Projects succeeded, 0 Projects failed`. - -### DirectX SDK paths per project (all via `$(DXSDK_DIR)`) - -For the build to find DirectX headers/libs, each project that touches DirectX -must reference the SDK through `$(DXSDK_DIR)`. This is now wired up as: - -| Project | Include `$(DXSDK_DIR)Include` | Lib `$(DXSDK_DIR)Lib\x86` | -|---------|:---:|:---:| -| Munga_L4 | ✅ | ✅ | -| RP_L4 | ✅ | ✅ | -| RPL4TOOL | (not needed) | ✅ | -| DivLoader | ✅ | (static lib, no link) | +See [docs/BUILD-NOTES.md](docs/BUILD-NOTES.md) for the original repository +cleanup history and the findings behind the legacy build. diff --git a/DivLoader/DivLoader.vcxproj b/DivLoader/DivLoader.vcxproj new file mode 100644 index 0000000..4cb61c9 --- /dev/null +++ b/DivLoader/DivLoader.vcxproj @@ -0,0 +1,76 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {2742FFCF-E94C-4202-BB0E-36D86CD04A09} + DivLoader + + + + StaticLibrary + v143 + MultiByte + 10.0 + + + true + + + false + true + + + + $(Configuration)\ + + $(IncludePath);$(DXSDK_DIR)Include + + + $(SolutionDir)$(Configuration)\ + + + ..\lib\ + + + + Level3 + false + _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS;%(PreprocessorDefinitions) + ProgramDatabase + + + + + Disabled + EnableFastChecks + MultiThreadedDebugDLL + _DEBUG;%(PreprocessorDefinitions) + + + + + MaxSpeed + true + true + MultiThreadedDLL + NDEBUG;%(PreprocessorDefinitions) + + + + + + + + + + + diff --git a/DivLoader/DivLoader.vcxproj.filters b/DivLoader/DivLoader.vcxproj.filters new file mode 100644 index 0000000..58c9ccc --- /dev/null +++ b/DivLoader/DivLoader.vcxproj.filters @@ -0,0 +1,31 @@ + + + + + {01666d85-e4b8-44cc-8dba-ea91089074d3} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {25175987-bb6c-4a8a-96b7-adffe3774b89} + h;hpp;hxx;hm;inl;inc;xsd + + + {1e17ee4e-39ab-4275-b821-517dbd9d8688} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + + + Source Files + + + + + Header Files + + + Header Files + + + + diff --git a/MUNGA/CAMMGR.cpp b/MUNGA/CAMMGR.cpp index d8ed262..41b0d0d 100644 --- a/MUNGA/CAMMGR.cpp +++ b/MUNGA/CAMMGR.cpp @@ -435,7 +435,7 @@ void std::fstream cam_file; //cam_file.open(cameraFilename, std::ios::nocreate | std::ios::in | std::ios::out); // following alternate line created by Ryan Bunker on 1/6/07 - cam_file.open(cameraFilename, std::ios.in); + cam_file.open(cameraFilename, std::ios::in); if(cam_file) //NOTE: this appears broken (RB 1/6/07) { cam_file.close(); diff --git a/MUNGA/NETWORK.h b/MUNGA/NETWORK.h index a277b14..5e445af 100644 --- a/MUNGA/NETWORK.h +++ b/MUNGA/NETWORK.h @@ -273,7 +273,7 @@ public: -bool operator==(SOCKADDR_IN &address1, SOCKADDR_IN &address2) +inline bool operator==(SOCKADDR_IN &address1, SOCKADDR_IN &address2) { return (address1.sin_family == address2.sin_family && address1.sin_addr.S_un.S_addr == address2.sin_addr.S_un.S_addr && diff --git a/MUNGA/TIME.h b/MUNGA/TIME.h index 0e99309..e81d5f6 100644 --- a/MUNGA/TIME.h +++ b/MUNGA/TIME.h @@ -52,9 +52,19 @@ public: #endif Time() {} + // Non-volatile overloads: rvalues (function returns) cannot bind to a + // volatile reference in standard C++; VC9 allowed it as an extension. + Time(const Time &t) : ticks(t.ticks) {} Time(const volatile Time &t) : ticks(t.ticks) {} Time(SystemClock&) : ticks(0) {} + Time& operator=(const Time &t) + { + Check_Pointer(this); + Check(&t); + ticks = t.ticks; + return *this; + } Time& operator=(const volatile Time &t) { Check_Pointer(this); diff --git a/MUNGA_L4/L4DINPUT.cpp b/MUNGA_L4/L4DINPUT.cpp index c63c08a..ec28bfc 100644 --- a/MUNGA_L4/L4DINPUT.cpp +++ b/MUNGA_L4/L4DINPUT.cpp @@ -15,11 +15,11 @@ DIJoystick::DIJoystick(HINSTANCE hInstance, HWND hWnd) if (SUCCEEDED(DirectInput8Create(hInstance, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&mDI, NULL))) { - mDI->EnumDevices(DI8DEVCLASS_GAMECTRL, EnumJoysticksCallback, this, DIEDFL_ATTACHEDONLY); + mDI->EnumDevices(DI8DEVCLASS_GAMECTRL, DIEnumJoysticksCallback, this, DIEDFL_ATTACHEDONLY); if (mJoystick) if (SUCCEEDED(mJoystick->SetDataFormat(&c_dfDIJoystick2))) if (SUCCEEDED(mJoystick->SetCooperativeLevel(hWnd, DISCL_EXCLUSIVE | DISCL_BACKGROUND))) - if (SUCCEEDED(mJoystick->EnumObjects(EnumAxesCallback, this, DIDFT_AXIS))) + if (SUCCEEDED(mJoystick->EnumObjects(DIEnumAxesCallback, this, DIDFT_AXIS))) return; } @@ -51,7 +51,7 @@ DIJoystick::~DIJoystick() } } -BOOL CALLBACK EnumJoysticksCallback(const DIDEVICEINSTANCE* pdidInstance, VOID* pContext) +BOOL CALLBACK DIEnumJoysticksCallback(const DIDEVICEINSTANCE* pdidInstance, VOID* pContext) { DIJoystick *joystick = (DIJoystick*)pContext; if (FAILED(joystick->mDI->CreateDevice(pdidInstance->guidInstance, &joystick->mJoystick, NULL))) @@ -60,7 +60,7 @@ BOOL CALLBACK EnumJoysticksCallback(const DIDEVICEINSTANCE* pdidInstance, VOID* return DIENUM_STOP; } -BOOL CALLBACK EnumAxesCallback(LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVOID pvRef) +BOOL CALLBACK DIEnumAxesCallback(LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVOID pvRef) { DIJoystick *joystick = (DIJoystick*)pvRef; DIPROPRANGE diprg; diff --git a/MUNGA_L4/L4DINPUT.h b/MUNGA_L4/L4DINPUT.h index 1fe912e..16214fe 100644 --- a/MUNGA_L4/L4DINPUT.h +++ b/MUNGA_L4/L4DINPUT.h @@ -4,8 +4,8 @@ class DIJoystick : public Joystick { - friend BOOL CALLBACK EnumJoysticksCallback(const DIDEVICEINSTANCE* pdidInstance, VOID* pContext); - friend BOOL CALLBACK EnumAxesCallback(LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVOID pvRef); + friend BOOL CALLBACK DIEnumJoysticksCallback(const DIDEVICEINSTANCE* pdidInstance, VOID* pContext); + friend BOOL CALLBACK DIEnumAxesCallback(LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVOID pvRef); public: DIJoystick(HINSTANCE hInstance, HWND hWnd); diff --git a/MUNGA_L4/Munga_L4.vcxproj b/MUNGA_L4/Munga_L4.vcxproj new file mode 100644 index 0000000..626338e --- /dev/null +++ b/MUNGA_L4/Munga_L4.vcxproj @@ -0,0 +1,457 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {F988B198-A386-40DD-A50E-9A5CE17A92A5} + Munga_L4 + + + + StaticLibrary + v143 + Unicode + 10.0 + + + true + + + false + true + + + + ..\lib\ + $(Configuration)\ + Munga_l4 + + $(IncludePath);$(DXSDK_DIR)Include + $(LibraryPath);$(DXSDK_DIR)Lib\x86 + + + + Level3 + false + true + Speed + + 1Byte + + WIN32;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;WINDOWS_IGNORE_PACKING_MISMATCH;_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS;%(PreprocessorDefinitions) + 4996;4244;4267;4305;4018;4138;%(DisableSpecificWarnings) + ProgramDatabase + + + + + Disabled + EnableFastChecks + MultiThreadedDebugDLL + _DEBUG;%(PreprocessorDefinitions) + + + + + MaxSpeed + true + true + MultiThreadedDLL + NDEBUG;%(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MUNGA_L4/Munga_L4.vcxproj.filters b/MUNGA_L4/Munga_L4.vcxproj.filters new file mode 100644 index 0000000..bb838ad --- /dev/null +++ b/MUNGA_L4/Munga_L4.vcxproj.filters @@ -0,0 +1,1162 @@ + + + + + {84654b87-b20c-4264-8038-4999478c1fb2} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Filter Filter + + + {25dffcc7-0906-496a-9a3a-4dc236205f6a} + + + {0659a4aa-5efc-4074-bfa7-7c80825d0f92} + System.Xml.XmlElement + + + {1d986d59-90c2-453e-a1f2-72bec3b72140} + + + {101f08d1-ec82-4988-a98c-522201a02234} + h;hpp;hxx;hm;inl;inc;xsd Filter Filter + + + {68fb399e-f67a-4c72-b320-4a92b9468368} + + + {b47d77b8-dc9a-41ec-8534-86ea71e376f5} + + + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + Source Files\MUNGA_L4 + + + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + Header Files\MUNGA_L4 + + + + diff --git a/RP_L4/RPL4TOOL.vcxproj b/RP_L4/RPL4TOOL.vcxproj new file mode 100644 index 0000000..0740f02 --- /dev/null +++ b/RP_L4/RPL4TOOL.vcxproj @@ -0,0 +1,131 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {4A7C7DFD-1383-4C1A-926C-B70F654429A9} + RPL4TOOL + Win32Proj + + + + Application + v143 + Unicode + 10.0 + + + true + + + false + true + + + + $(SolutionDir)$(Configuration)\ + + $(Configuration)_RPL4TOOL\ + RPL4TOOL + + $(IncludePath);$(DXSDK_DIR)Include + $(LibraryPath);$(DXSDK_DIR)Lib\x86 + + + true + + + false + + + + Level3 + false + true + + WIN32;_CONSOLE;WINDOWS_IGNORE_PACKING_MISMATCH;_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS;%(PreprocessorDefinitions) + 4996;4244;4267;4305;4018;4138;%(DisableSpecificWarnings) + ProgramDatabase + + + Console + MachineX86 + /FORCE:MULTIPLE %(AdditionalOptions) + ..\lib;%(AdditionalLibraryDirectories) + + ws2_32.lib;dinput8.lib;dxguid.lib;OpenAL32.lib;libsndfile-1.lib;d3d9.lib;legacy_stdio_definitions.lib;%(AdditionalDependencies) + true + + + + + Disabled + EnableFastChecks + MultiThreadedDebugDLL + _DEBUG;%(PreprocessorDefinitions) + + + d3dx9d.lib;%(AdditionalDependencies) + + + + + MaxSpeed + true + true + MultiThreadedDLL + NDEBUG;%(PreprocessorDefinitions) + + + d3dx9.lib;%(AdditionalDependencies) + true + true + UseLinkTimeCodeGeneration + + + + + {F988B198-A386-40DD-A50E-9A5CE17A92A5} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/RP_L4/RPL4TOOL.vcxproj.filters b/RP_L4/RPL4TOOL.vcxproj.filters new file mode 100644 index 0000000..b970d08 --- /dev/null +++ b/RP_L4/RPL4TOOL.vcxproj.filters @@ -0,0 +1,94 @@ + + + + + {884b40a9-322f-4f69-acfc-89b9bba35c9e} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {ebc4ce12-d5e9-428d-9b96-2cf49783b9f4} + h;hpp;hxx;hm;inl;inc;xsd + + + {611db686-bea3-41a1-95cd-f4b84b957391} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + + diff --git a/RP_L4/RP_L4.vcxproj b/RP_L4/RP_L4.vcxproj new file mode 100644 index 0000000..f369a14 --- /dev/null +++ b/RP_L4/RP_L4.vcxproj @@ -0,0 +1,178 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {01B740F7-5D4E-4E42-893F-CE018E5EE785} + RP_L4 + Win32Proj + + + + Application + v143 + Unicode + 10.0 + + + true + + + false + true + + + + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + rpl4opt + + $(IncludePath);$(DXSDK_DIR)Include + $(LibraryPath);$(DXSDK_DIR)Lib\x86 + + + true + + + false + + + + Level3 + false + true + Speed + + 1Byte + WIN32;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;WINDOWS_IGNORE_PACKING_MISMATCH;_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS;%(PreprocessorDefinitions) + 4996;4244;4267;4305;4018;4138;%(DisableSpecificWarnings) + ProgramDatabase + + + Windows + MachineX86 + + /FORCE:MULTIPLE %(AdditionalOptions) + ..\lib;%(AdditionalLibraryDirectories) + + ws2_32.lib;dinput8.lib;dxguid.lib;OpenAL32.lib;libsndfile-1.lib;d3d9.lib;legacy_stdio_definitions.lib;%(AdditionalDependencies) + false + true + + + + + Disabled + EnableFastChecks + MultiThreadedDebugDLL + _DEBUG;%(PreprocessorDefinitions) + + + d3dx9d.lib;%(AdditionalDependencies) + + + + + Full + OnlyExplicitInline + true + true + true + MultiThreadedDLL + NDEBUG;%(PreprocessorDefinitions) + + + d3dx9.lib;%(AdditionalDependencies) + true + true + UseLinkTimeCodeGeneration + + + + + {F988B198-A386-40DD-A50E-9A5CE17A92A5} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/RP_L4/RP_L4.vcxproj.filters b/RP_L4/RP_L4.vcxproj.filters new file mode 100644 index 0000000..bf6f82e --- /dev/null +++ b/RP_L4/RP_L4.vcxproj.filters @@ -0,0 +1,232 @@ + + + + + {eb252f95-7391-44b0-afa4-1907cd6aa87e} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Filter Filter + + + {3a538533-0f36-43bb-8f93-a858866195ac} + + + {ae7cddc3-1057-4141-8f15-0ae8592c6b04} + + + {d8abfe6a-b377-46ad-8271-c1f2e735ee8b} + h;hpp;hxx;hm;inl;inc;xsd Filter Filter + + + {dc73d687-7306-4609-b6b1-f5319b320cb0} + + + {8729fb50-8620-4018-b528-9c8cf73f93ea} + + + {1753b3fd-49fb-4829-b620-9f9fca843fb9} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + + + Source Files\RP_L4 + + + Source Files\RP_L4 + + + Source Files\RP_L4 + + + Source Files\RP_L4 + + + Source Files\RP_L4 + + + Source Files\RP_L4 + + + Source Files\RP_L4 + + + Source Files\RP_L4 + + + Source Files\RP_L4 + + + Source Files\RP_L4 + + + Source Files\RP_L4 + + + Source Files\RP_L4 + + + Source Files\RP + + + Source Files\RP + + + Source Files\RP + + + Source Files\RP + + + Source Files\RP + + + Source Files\RP + + + Source Files\RP + + + Source Files\RP + + + Source Files\RP + + + Source Files\RP + + + Source Files\RP + + + Source Files\RP + + + Source Files\RP + + + Source Files\RP + + + Source Files\RP + + + Source Files\RP + + + Source Files\RP + + + Source Files\RP + + + Source Files\RP + + + Source Files\RP + + + + + Header Files\RP_L4 + + + Header Files\RP_L4 + + + Header Files\RP_L4 + + + Header Files\RP_L4 + + + Header Files\RP_L4 + + + Header Files\RP_L4 + + + Header Files\RP_L4 + + + Header Files\RP_L4 + + + Header Files\RP_L4 + + + Header Files\RP_L4 + + + Header Files\RP_L4 + + + Header Files\RP_L4 + + + Header Files\RP_L4 + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + Header Files\RP + + + + diff --git a/WinTesla.sln b/WinTesla.sln index ba4fdbc..67f2a42 100644 --- a/WinTesla.sln +++ b/WinTesla.sln @@ -1,65 +1,37 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RP_L4", "RP_L4\RP_L4.vcproj", "{01B740F7-5D4E-4E42-893F-CE018E5EE785}" - ProjectSection(WebsiteProperties) = preProject - Debug.AspNetCompiler.Debug = "True" - Release.AspNetCompiler.Debug = "False" - EndProjectSection - ProjectSection(ProjectDependencies) = postProject - {F988B198-A386-40DD-A50E-9A5CE17A92A5} = {F988B198-A386-40DD-A50E-9A5CE17A92A5} - EndProjectSection +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Munga_L4", "MUNGA_L4\Munga_L4.vcxproj", "{F988B198-A386-40DD-A50E-9A5CE17A92A5}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Munga_L4", "MUNGA_L4\Munga_L4.vcproj", "{F988B198-A386-40DD-A50E-9A5CE17A92A5}" - ProjectSection(WebsiteProperties) = preProject - Debug.AspNetCompiler.Debug = "True" - Release.AspNetCompiler.Debug = "False" - EndProjectSection +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RP_L4", "RP_L4\RP_L4.vcxproj", "{01B740F7-5D4E-4E42-893F-CE018E5EE785}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RPL4TOOL", "RP_L4\RPL4TOOL.vcproj", "{11BDE691-E0D7-443E-A5AF-87B35B8EEAEE}" - ProjectSection(WebsiteProperties) = preProject - Debug.AspNetCompiler.Debug = "True" - Release.AspNetCompiler.Debug = "False" - EndProjectSection - ProjectSection(ProjectDependencies) = postProject - {F988B198-A386-40DD-A50E-9A5CE17A92A5} = {F988B198-A386-40DD-A50E-9A5CE17A92A5} - EndProjectSection +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RPL4TOOL", "RP_L4\RPL4TOOL.vcxproj", "{4A7C7DFD-1383-4C1A-926C-B70F654429A9}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DivLoader", "DivLoader\DivLoader.vcproj", "{2742FFCF-E94C-4202-BB0E-36D86CD04A09}" - ProjectSection(WebsiteProperties) = preProject - Debug.AspNetCompiler.Debug = "True" - Release.AspNetCompiler.Debug = "False" - EndProjectSection +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DivLoader", "DivLoader\DivLoader.vcxproj", "{2742FFCF-E94C-4202-BB0E-36D86CD04A09}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 - Remote Debug|Win32 = Remote Debug|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {01B740F7-5D4E-4E42-893F-CE018E5EE785}.Debug|Win32.ActiveCfg = Debug|Win32 - {01B740F7-5D4E-4E42-893F-CE018E5EE785}.Debug|Win32.Build.0 = Debug|Win32 - {01B740F7-5D4E-4E42-893F-CE018E5EE785}.Release|Win32.ActiveCfg = Release|Win32 - {01B740F7-5D4E-4E42-893F-CE018E5EE785}.Release|Win32.Build.0 = Release|Win32 - {01B740F7-5D4E-4E42-893F-CE018E5EE785}.Remote Debug|Win32.ActiveCfg = Remote Debug|Win32 - {01B740F7-5D4E-4E42-893F-CE018E5EE785}.Remote Debug|Win32.Build.0 = Remote Debug|Win32 {F988B198-A386-40DD-A50E-9A5CE17A92A5}.Debug|Win32.ActiveCfg = Debug|Win32 {F988B198-A386-40DD-A50E-9A5CE17A92A5}.Debug|Win32.Build.0 = Debug|Win32 {F988B198-A386-40DD-A50E-9A5CE17A92A5}.Release|Win32.ActiveCfg = Release|Win32 {F988B198-A386-40DD-A50E-9A5CE17A92A5}.Release|Win32.Build.0 = Release|Win32 - {F988B198-A386-40DD-A50E-9A5CE17A92A5}.Remote Debug|Win32.ActiveCfg = Remote Debug|Win32 - {F988B198-A386-40DD-A50E-9A5CE17A92A5}.Remote Debug|Win32.Build.0 = Remote Debug|Win32 - {11BDE691-E0D7-443E-A5AF-87B35B8EEAEE}.Debug|Win32.ActiveCfg = Debug|Win32 - {11BDE691-E0D7-443E-A5AF-87B35B8EEAEE}.Debug|Win32.Build.0 = Debug|Win32 - {11BDE691-E0D7-443E-A5AF-87B35B8EEAEE}.Release|Win32.ActiveCfg = Release|Win32 - {11BDE691-E0D7-443E-A5AF-87B35B8EEAEE}.Release|Win32.Build.0 = Release|Win32 - {11BDE691-E0D7-443E-A5AF-87B35B8EEAEE}.Remote Debug|Win32.ActiveCfg = Remote Debug|Win32 + {01B740F7-5D4E-4E42-893F-CE018E5EE785}.Debug|Win32.ActiveCfg = Debug|Win32 + {01B740F7-5D4E-4E42-893F-CE018E5EE785}.Debug|Win32.Build.0 = Debug|Win32 + {01B740F7-5D4E-4E42-893F-CE018E5EE785}.Release|Win32.ActiveCfg = Release|Win32 + {01B740F7-5D4E-4E42-893F-CE018E5EE785}.Release|Win32.Build.0 = Release|Win32 + {4A7C7DFD-1383-4C1A-926C-B70F654429A9}.Debug|Win32.ActiveCfg = Debug|Win32 + {4A7C7DFD-1383-4C1A-926C-B70F654429A9}.Debug|Win32.Build.0 = Debug|Win32 + {4A7C7DFD-1383-4C1A-926C-B70F654429A9}.Release|Win32.ActiveCfg = Release|Win32 + {4A7C7DFD-1383-4C1A-926C-B70F654429A9}.Release|Win32.Build.0 = Release|Win32 {2742FFCF-E94C-4202-BB0E-36D86CD04A09}.Debug|Win32.ActiveCfg = Debug|Win32 {2742FFCF-E94C-4202-BB0E-36D86CD04A09}.Debug|Win32.Build.0 = Debug|Win32 {2742FFCF-E94C-4202-BB0E-36D86CD04A09}.Release|Win32.ActiveCfg = Release|Win32 {2742FFCF-E94C-4202-BB0E-36D86CD04A09}.Release|Win32.Build.0 = Release|Win32 - {2742FFCF-E94C-4202-BB0E-36D86CD04A09}.Remote Debug|Win32.ActiveCfg = Debug|Win32 - {2742FFCF-E94C-4202-BB0E-36D86CD04A09}.Remote Debug|Win32.Build.0 = Debug|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/WinTesla_vc9.sln b/WinTesla_vc9.sln new file mode 100644 index 0000000..ba4fdbc --- /dev/null +++ b/WinTesla_vc9.sln @@ -0,0 +1,67 @@ +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RP_L4", "RP_L4\RP_L4.vcproj", "{01B740F7-5D4E-4E42-893F-CE018E5EE785}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection + ProjectSection(ProjectDependencies) = postProject + {F988B198-A386-40DD-A50E-9A5CE17A92A5} = {F988B198-A386-40DD-A50E-9A5CE17A92A5} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Munga_L4", "MUNGA_L4\Munga_L4.vcproj", "{F988B198-A386-40DD-A50E-9A5CE17A92A5}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RPL4TOOL", "RP_L4\RPL4TOOL.vcproj", "{11BDE691-E0D7-443E-A5AF-87B35B8EEAEE}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection + ProjectSection(ProjectDependencies) = postProject + {F988B198-A386-40DD-A50E-9A5CE17A92A5} = {F988B198-A386-40DD-A50E-9A5CE17A92A5} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DivLoader", "DivLoader\DivLoader.vcproj", "{2742FFCF-E94C-4202-BB0E-36D86CD04A09}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + Remote Debug|Win32 = Remote Debug|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {01B740F7-5D4E-4E42-893F-CE018E5EE785}.Debug|Win32.ActiveCfg = Debug|Win32 + {01B740F7-5D4E-4E42-893F-CE018E5EE785}.Debug|Win32.Build.0 = Debug|Win32 + {01B740F7-5D4E-4E42-893F-CE018E5EE785}.Release|Win32.ActiveCfg = Release|Win32 + {01B740F7-5D4E-4E42-893F-CE018E5EE785}.Release|Win32.Build.0 = Release|Win32 + {01B740F7-5D4E-4E42-893F-CE018E5EE785}.Remote Debug|Win32.ActiveCfg = Remote Debug|Win32 + {01B740F7-5D4E-4E42-893F-CE018E5EE785}.Remote Debug|Win32.Build.0 = Remote Debug|Win32 + {F988B198-A386-40DD-A50E-9A5CE17A92A5}.Debug|Win32.ActiveCfg = Debug|Win32 + {F988B198-A386-40DD-A50E-9A5CE17A92A5}.Debug|Win32.Build.0 = Debug|Win32 + {F988B198-A386-40DD-A50E-9A5CE17A92A5}.Release|Win32.ActiveCfg = Release|Win32 + {F988B198-A386-40DD-A50E-9A5CE17A92A5}.Release|Win32.Build.0 = Release|Win32 + {F988B198-A386-40DD-A50E-9A5CE17A92A5}.Remote Debug|Win32.ActiveCfg = Remote Debug|Win32 + {F988B198-A386-40DD-A50E-9A5CE17A92A5}.Remote Debug|Win32.Build.0 = Remote Debug|Win32 + {11BDE691-E0D7-443E-A5AF-87B35B8EEAEE}.Debug|Win32.ActiveCfg = Debug|Win32 + {11BDE691-E0D7-443E-A5AF-87B35B8EEAEE}.Debug|Win32.Build.0 = Debug|Win32 + {11BDE691-E0D7-443E-A5AF-87B35B8EEAEE}.Release|Win32.ActiveCfg = Release|Win32 + {11BDE691-E0D7-443E-A5AF-87B35B8EEAEE}.Release|Win32.Build.0 = Release|Win32 + {11BDE691-E0D7-443E-A5AF-87B35B8EEAEE}.Remote Debug|Win32.ActiveCfg = Remote Debug|Win32 + {2742FFCF-E94C-4202-BB0E-36D86CD04A09}.Debug|Win32.ActiveCfg = Debug|Win32 + {2742FFCF-E94C-4202-BB0E-36D86CD04A09}.Debug|Win32.Build.0 = Debug|Win32 + {2742FFCF-E94C-4202-BB0E-36D86CD04A09}.Release|Win32.ActiveCfg = Release|Win32 + {2742FFCF-E94C-4202-BB0E-36D86CD04A09}.Release|Win32.Build.0 = Release|Win32 + {2742FFCF-E94C-4202-BB0E-36D86CD04A09}.Remote Debug|Win32.ActiveCfg = Debug|Win32 + {2742FFCF-E94C-4202-BB0E-36D86CD04A09}.Remote Debug|Win32.Build.0 = Debug|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/docs/RP412-ROADMAP.md b/docs/RP412-ROADMAP.md index 9c35120..4e6deec 100644 --- a/docs/RP412-ROADMAP.md +++ b/docs/RP412-ROADMAP.md @@ -30,6 +30,16 @@ vPLASMA renders the display's recovered command grammar (`VPlasma.Core/Protocol/PlasmaProtocol.cs`, grammar recovered from `L4PLASMA.CPP` itself). For 4.12 that logic moves *inside* the game: +**Design principle — recreate the cockpit's feel on screen.** The 4.12 screen +layout places the RIO panel controls *around* the displays in the same +physical arrangement as the pod: MFD button clusters framing the screens, +board columns and keypads where they sit in the cockpit, the plasma glass in +its place above. vRIO's panel layout data (`VRio.Core`, the five MFD +clusters / four board columns / two keypads / encoder-gauge strip) is the +geometry reference — it is already the faithful software copy of the physical +panel. On-screen buttons light with the same lamp states the game commands, +so press-feedback works like the real button field. + - Replace the RIO serial path in the L4 layer with a native input layer (keyboard / mouse / XInput, later Steam Input). Port vRIO's binding model — its axis-travel semantics (throttle ratchet, spring-back pedals, ±80 stick) @@ -89,11 +99,15 @@ TeslaConsole drives over TCP 1501 becomes in-game UI: ### Toolchain -- Shipping a Steam title from VC++ 2008 Express is untenable long-term - (no modern CRT, no Steamworks-era toolchain testing, painful CI). Early - task: upgrade `.vcproj` → `.vcxproj` on a branch (VS2022, `v143` toolset, - still Win32/DX9) and burn down the warning list. This is a prerequisite for - comfortable Steamworks SDK linkage. +- ✅ **Done (2026-07-12)** — the solution builds on **VS2022 (v143)** with the + Windows 11 SDK; see [BUILD.md](../BUILD.md) §3 for what changed and why. + Runtime-verified equivalent to the VC9 baseline (including RIO init against + vRIO). Remaining cleanups called out there: un-`/Zp1` the Windows-header + boundary, port `stdext::hash_map` → `std::unordered_map`, single-TU the + duplicated globals so `/FORCE:MULTIPLE` can go away. +- ⚠️ Known pre-existing crash (both toolchains): standalone mission load AVs in + `d3d_OBJECT::LoadTexture` (`L4D3D.cpp:262`) — first debugging target now + that the v143 build has full PDBs (BUILD.md §4). ## Suggested order