Files
CydandClaude Fable 5 5892af318e Steam lobby: host, join, room, and launch into a marshaled race
RPL4LOBBY implements the multiplayer front door on ISteamMatchmaking.
The setup menu grows HOST STEAM RACE / JOIN STEAM RACE buttons when
the Steam wire is live; hosting creates a tagged public lobby, joining
finds one. Every member publishes FakeIP + fake ports + persona +
loadout as member data; the room screen lists members (host marked)
and gives the owner a launch button.

Launching writes a nonced go-roster into lobby data. Each pod
registers every peer with the Steam transport (two-port peer table:
engine console/game ports map to Steam fake ports on connect) and
enters the race: the owner through the hosted-race path - it builds
the multi-pilot egg from real personas and loadouts and its console
marshals everyone - and members as network pods that boot straight
into WaitingForEgg for the owner to feed over the wire.

The lobby outlives races: members loop back through WinMain into the
room (no local console needed - MissionCompleted is waived for member
races), and the owner returns to the room after its results screen.
Leaving the lobby clears the hosted-race priming.

Verified on this box: menu buttons appear under RP412STEAM=1, hosting
creates a lobby on the Steam backend, the room runs and leaves back to
the menu; single-player cycling and the LAN hosted race both still
pass. Full three-account mesh test is next, on real hardware.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 21:26:31 -05:00

186 lines
8.6 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>
</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=".\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=".\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>