Packing one into every zip meant a tester who unzipped a new build over their folder got their configuration replaced. bindings.txt has never had that problem, because the exe carries the template and writes the file only when it is absent. environ.ini now works the same way, so a new build can land on an existing folder and every setting survives. The 245-line template moves out of pack-dist.ps1 and into RPL4ENVIRON.cpp as the exe's own literal, which also means the exe alone can produce a working install. It was lifted mechanically rather than retyped, and the file it writes is line-for-line identical to the one we have been shipping - only the line endings changed, from a mongrel 243 LF plus one stray CRLF that PowerShell's Set-Content left on the end, to the uniform LF the game already writes bindings.txt with. It cannot simply become optional. Without environ.ini, L4GAUGE is unset - which disables the gauge renderer and takes every MFD with it - and L4MFDSPLIT is unset, which is the packed-window arcade layout rather than the glass cockpit. The shipped values ARE the desktop game; the built-in getenv fallbacks are the 1995 pod. So the game writes the file rather than tolerating its absence. The cost of a file that is never overwritten is that a tester carrying one across many builds stops being offered new options. Nothing breaks - an option added later defaults to "behave as before" - but it goes unnoticed, and "the podium does not work" is a confusing bug report when the real answer is that their environ.ini predates RP412PODIUM. So the load names every template key the player's file has never mentioned, and says they are at built-in defaults and that deleting the file brings the documented one back. A stale seven-line file lists all 40. The file is read, never rewritten. The mention test is deliberately generous - a key counts as known if it appears in any form, commented or not - because the failure it guards against is worse than a missed notice: environ.ini is applied line by line, so a second copy of a key appearing later in the file would silently override the player's own. The version line also moves to the top of WinMain. It used to print after the environment was loaded, so the first thing in rpl4.log was a message about environ.ini rather than which build wrote it. Verified: the written file matches the old shipped one line for line; an edited file with a hand-added comment survives another run untouched; a seven-line file from an older build boots and names all 40 options it has never heard of; and a full mission on a self-written file brings up the glass cockpit at 125% with the virtual RIO active and nothing alarming in the log. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
197 lines
9.2 KiB
XML
197 lines
9.2 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;%(AdditionalDependencies)</AdditionalDependencies>
|
|
<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>
|
|
|