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>
This commit is contained in:
+20
-5
@@ -257,9 +257,11 @@ namespace
|
||||
"# when real RIO hardware is selected - the pod keeps its own cadence.\n"
|
||||
"#RP412LAMPSWEEP=0\n"
|
||||
"\n"
|
||||
"# 1 = Steam networking (lobbies, FakeIP mesh). Needs the Steam client\n"
|
||||
"# running and steam_appid.txt beside the exe; without them the game\n"
|
||||
"# logs the reason and falls back to plain TCP. 0 = TCP only.\n"
|
||||
"# 1 = Steam networking (lobbies, FakeIP mesh). Needs steam_api.dll, the\n"
|
||||
"# Steam client running, and steam_appid.txt beside the exe; missing any\n"
|
||||
"# of them logs the reason and falls back to plain TCP - nothing here can\n"
|
||||
"# stop the game starting, and steam_api.dll being absent altogether is\n"
|
||||
"# fine. 0 = TCP only.\n"
|
||||
"RP412STEAM=1\n"
|
||||
"\n"
|
||||
"# Line up each remote player's clock with ours, so their vehicle is\n"
|
||||
@@ -408,8 +410,21 @@ namespace
|
||||
"\n"
|
||||
"# ---- Developer / testing ----------------------------------------------------\n"
|
||||
"\n"
|
||||
"# Nonzero arms the debug keys: Alt+W wireframe, Alt+V predator vision,\n"
|
||||
"# Alt+F frame dump, Alt+/ perf stats, Alt+E event-queue dump.\n"
|
||||
"# Nonzero arms the debug keys. Two of them do something in this build:\n"
|
||||
"# Alt+W wireframe. The sky dome stays solid so the edges have\n"
|
||||
"# something to read against, and the gunsight and cam-ship\n"
|
||||
"# HUD stay solid too.\n"
|
||||
"# Alt+E write the event queue to the log.\n"
|
||||
"# The others are stubs the 2007 DPL->Direct3D port left behind and do\n"
|
||||
"# nothing at all. They are named here so a dead key is not mistaken for\n"
|
||||
"# a broken one: Alt+V predator vision, Alt+F frame dump, Alt+/ perf\n"
|
||||
"# stats and Alt+K free memory are silent; Alt+R dither pattern and\n"
|
||||
"# Alt+P eyepoint position at least say so in the log.\n"
|
||||
"#\n"
|
||||
"# All of them arrive through the engine keyboard handler, so L4CONTROLS\n"
|
||||
"# has to include KEYBOARD - the shipped stack does. That handler reads\n"
|
||||
"# one key per frame off the front of the message queue and so drops\n"
|
||||
"# presses; if a key seems dead, press it again before believing it.\n"
|
||||
"# 0 or unset = off. (Alt+Q, the mission abort, is always live.)\n"
|
||||
"#RP412DEVKEYS=1\n"
|
||||
"\n"
|
||||
|
||||
Reference in New Issue
Block a user