Files
RP412/RP_L4/RP_L4.vcxproj
T
CydandClaude Opus 5 0f4592c39a The wireframe key works and Steam is optional
Alt+W had been a no-op since the 2007 DPL->Direct3D port, which stubbed
DPLToggleWireframe along with every other dpl_ call. D3D9 has no global
wireframe property, so the toggle now records the intent in gWireframe
and ExecuteImplementation applies D3DRS_FILLMODE once per frame - which
also means it re-asserts itself after a device Reset. The sky dome and
the 2D pass are held solid: a wireframed dome buries the geometry you
turned the key on to look at, and the gunsight would otherwise come out
as bare diagonals.

Proving it needed a working copy, and that turned up a separate problem.
steam_api.dll was a hard import, so a machine without it died at load
time with 0xC0000135 - before a window, before a log line. It is now
delay-loaded, and because delay loading only moves that failure to the
first call, every Steam path is gated on
SteamNetTransport_ClientLibraryPresent(): Install and the two lobby
entries, with everything else downstream of one of them. Absent DLL
boots and races; absent DLL with RP412STEAM=1 logs the reason and stays
on TCP; DLL present brings the transport up exactly as before.

The documentation now says which debug keys are real. Five of the seven
are still 2007 stubs and always have been, so they are named as inert in
environ.ini's template and at the dispatch site - that beats letting the
next person debug a dead key, which is how this started. BUILD.md gains
a debug-key table, the delay-load contract for anyone adding a Steam
call site, and the environ.ini BOM trap that silently reverts
L4CONTROLS to KEYBOARD and then fail-fasts for want of a pod mapper.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 11:15:11 -05:00

206 lines
9.8 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{01B740F7-5D4E-4E42-893F-CE018E5EE785}</ProjectGuid>
<RootNamespace>RP_L4</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
<UseDebugLibraries>true</UseDebugLibraries>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<PropertyGroup>
<OutDir>$(SolutionDir)$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<TargetName>rpl4opt</TargetName>
<!-- Legacy DirectX SDK (June 2010) after the Windows SDK so modern headers/libs win;
only d3dx9 and dxerr actually come from it. -->
<IncludePath>$(IncludePath);$(DXSDK_DIR)Include;..\extern\steamworks_sdk_164\sdk\public</IncludePath>
<LibraryPath>$(LibraryPath);$(DXSDK_DIR)Lib\x86;..\extern\steamworks_sdk_164\sdk\redistributable_bin</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<ConformanceMode>false</ConformanceMode>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<!-- The engine's on-disk and on-wire binary formats assume 1-byte packing. -->
<StructMemberAlignment>1Byte</StructMemberAlignment>
<!-- RP412_STEAM: Steam transport available; activated at runtime by RP412STEAM=1. -->
<PreprocessorDefinitions>WIN32;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;WINDOWS_IGNORE_PACKING_MISMATCH;_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS;RP412_STEAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<DisableSpecificWarnings>4996;4244;4267;4305;4018;4138;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
<!-- Same source files are compiled into both Munga_l4.lib and this exe
(WTPresets.cpp et al.), as in the original projects. -->
<AdditionalOptions>/FORCE:MULTIPLE %(AdditionalOptions)</AdditionalOptions>
<AdditionalLibraryDirectories>..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<!-- legacy_stdio_definitions satisfies the June-2010 dxerr.lib on modern MSVC. -->
<AdditionalDependencies>ws2_32.lib;dinput8.lib;dxguid.lib;OpenAL32.lib;libsndfile-1.lib;d3d9.lib;legacy_stdio_definitions.lib;steam_api.lib;delayimp.lib;%(AdditionalDependencies)</AdditionalDependencies>
<!-- steam_api.dll is DELAY-LOADED so the game runs without it: a
statically imported DLL that is merely absent kills the process
at load time, before any window or log line (0xC0000135). Now
nothing touches it until Steam is actually asked for, and
SteamNetTransport_ClientLibraryPresent() gates the call sites so
a missing DLL falls back to TCP instead of raising the
delay-load helper's fatal exception. delayimp.lib supplies that
helper. -->
<DelayLoadDLLs>steam_api.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<!-- rpl4build.h is generated, not committed: the patch number is the
repository's commit count, so a hardcoded one would be stale the
moment it was committed. The script rewrites the header only when
the stamp actually changes, so this does not drag RPL4.CPP through
a recompile on every build. -->
<PreBuildEvent>
<Command>powershell -NoProfile -ExecutionPolicy Bypass -File "$(ProjectDir)..\stamp-version.ps1"</Command>
<Message>Stamping the build version from git</Message>
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
<ClCompile>
<Optimization>Disabled</Optimization>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalDependencies>d3dx9d.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
<ClCompile>
<Optimization>Full</Optimization>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FunctionLevelLinking>true</FunctionLevelLinking>
<EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalDependencies>d3dx9.lib;%(AdditionalDependencies)</AdditionalDependencies>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ProjectReference Include="..\MUNGA_L4\Munga_L4.vcxproj">
<Project>{F988B198-A386-40DD-A50E-9A5CE17A92A5}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ClCompile Include=".\RPL4.CPP" />
<ClCompile Include=".\RPL4APP.cpp" />
<ClCompile Include=".\RPL4CONSOLE.cpp" />
<ClCompile Include=".\RPL4FE.cpp" />
<ClCompile Include=".\RPL4ENVIRON.cpp" />
<ClCompile Include=".\RPL4LOBBY.cpp" />
<ClCompile Include=".\RPL4ARND.cpp" />
<ClCompile Include=".\RPL4GAUG.cpp" />
<ClCompile Include=".\RPL4GRND.cpp" />
<ClCompile Include=".\RPL4MODE.cpp" />
<ClCompile Include=".\RPL4MPPR.cpp" />
<ClCompile Include=".\RPL4MSSN.cpp" />
<ClCompile Include=".\RPL4PB.cpp" />
<ClCompile Include=".\RPL4TOOL.cpp" />
<ClCompile Include=".\RPL4VID.cpp" />
<ClCompile Include=".\WTPresets.cpp" />
<ClCompile Include="..\RP\BLOCKER.cpp" />
<ClCompile Include="..\RP\BOOSTER.cpp" />
<ClCompile Include="..\RP\CHUTE.cpp" />
<ClCompile Include="..\RP\CRUSHER.cpp" />
<ClCompile Include="..\RP\DEMOPACK.cpp" />
<ClCompile Include="..\RP\RIVET.cpp" />
<ClCompile Include="..\RP\RPCNSL.cpp" />
<ClCompile Include="..\RP\RPDIRECT.cpp" />
<ClCompile Include="..\RP\RPMSSN.cpp" />
<ClCompile Include="..\RP\RPPLAYER.cpp" />
<ClCompile Include="..\RP\RPREG.cpp" />
<ClCompile Include="..\RP\RPTOOL.cpp" />
<ClCompile Include="..\RP\RUNNER.cpp" />
<ClCompile Include="..\RP\SCORZONE.cpp" />
<ClCompile Include="..\RP\THRUSTER.cpp" />
<ClCompile Include="..\RP\VTV.cpp" />
<ClCompile Include="..\RP\VTVMPPR.cpp" />
<ClCompile Include="..\RP\VTVPWR.cpp" />
<ClCompile Include="..\RP\VTVSUB.cpp" />
<ClCompile Include="..\RP\WEAPSYS.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include=".\RPL4.h" />
<ClInclude Include=".\RPL4.HPP" />
<ClInclude Include=".\RPL4APP.h" />
<ClInclude Include=".\RPL4CONSOLE.h" />
<ClInclude Include=".\RPL4FE.h" />
<ClInclude Include=".\rpl4environ.h" />
<ClInclude Include=".\RPL4LOBBY.h" />
<ClInclude Include=".\RPL4ARND.h" />
<ClInclude Include=".\RPL4GAUG.h" />
<ClInclude Include=".\RPL4GRND.h" />
<ClInclude Include=".\RPL4MODE.h" />
<ClInclude Include=".\RPL4MPPR.h" />
<ClInclude Include=".\RPL4MSSN.h" />
<ClInclude Include=".\RPL4PB.h" />
<ClInclude Include=".\RPL4VER.h" />
<ClInclude Include=".\RPL4VID.h" />
<ClInclude Include=".\WTPresets.h" />
<ClInclude Include="..\RP\BLOCKER.h" />
<ClInclude Include="..\RP\BOOSTER.h" />
<ClInclude Include="..\RP\CHUTE.h" />
<ClInclude Include="..\RP\CRUSHER.h" />
<ClInclude Include="..\RP\DEMOPACK.h" />
<ClInclude Include="..\RP\RIVET.h" />
<ClInclude Include="..\RP\RP.h" />
<ClInclude Include="..\RP\RPCNSL.h" />
<ClInclude Include="..\RP\RPDIRECT.h" />
<ClInclude Include="..\RP\RPMSSN.h" />
<ClInclude Include="..\RP\RPPLAYER.h" />
<ClInclude Include="..\RP\RPREG.h" />
<ClInclude Include="..\RP\RPTOOL.h" />
<ClInclude Include="..\RP\RUNNER.h" />
<ClInclude Include="..\RP\SCORZONE.h" />
<ClInclude Include="..\RP\THRUSTER.h" />
<ClInclude Include="..\RP\VTV.h" />
<ClInclude Include="..\RP\VTVMPPR.h" />
<ClInclude Include="..\RP\VTVPWR.h" />
<ClInclude Include="..\RP\VTVSUB.h" />
<ClInclude Include="..\RP\WEAPSYS.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
</Project>