Skip to content

steam_friends connect/Joinable auto-derive + CI build-loop fix - #3

Merged
gabrielgad merged 3 commits into
devfrom
feature/eosplus-steam-connect-derive
Jun 16, 2026
Merged

gabrielgad merged 3 commits into
devfrom
feature/eosplus-steam-connect-derive

Conversation

@gabrielgad

Copy link
Copy Markdown
Collaborator

Three commits over dev:

  • b7246395 ci(win): fix build loop — ) inside echo === (...,release) === closed the do( block early, so msbuild fell outside the FOR loop and every main target (incl. steam_api64.dll) silently failed; nightly shipped only Steam.dll. This is why splitux's bundled Windows goldberg was empty.
  • b7430e00 steam_friends: auto-derive connect/Joinable from a friend's joinable lobby. Real Steam derives +connect_lobby <id> automatically; goldberg didn't, so EOSPlus+Steam friend-join saw empty rich-presence connect. Generic Steam primitive.
  • e0bf4b6f dbg_log: opt-in release logging via GSE_FORCE_LOG — off by default.

Diagnostic-only commits (per-PID log filenames, RequestLobbyData logging) intentionally excluded.

Release builds previously compiled out ALL logging: PRINT_DEBUG expanded to
nothing (EMU_RELEASE_BUILD), the global dbg_logger and every dbg_log method
body were stripped. That makes a shipped emulator impossible to observe
(e.g. LAN lobby matchmaking) without a separate debug build.

Compile logging into release too, gated at runtime by the GSE_FORCE_LOG env
var (dbg_log::is_active): debug builds always log; release logs only when the
var is set. PRINT_DEBUG now wraps its body in 'if (dbg_logger.is_active())' so
an inactive logger costs one cached bool check and runs NO side effects — in
particular it must not call PRINT_DEBUG_CLEANUP/WSASetLastError, which would
clobber the game's last socket error on every call. open() is the single
runtime gate; all write paths check out_file, so inactive logging no-ops.

Lets us turn on full goldberg logs (STEAM_LOG_<rand>.log next to the exe) on a
release DLL by exporting GSE_FORCE_LOG=1, with zero impact when unset.
The per-arch build loop echoed 'Building %P (%A, release)'. Inside a
parenthesized FOR do(...) block, the literal ')' in '(%A, release)' closes
the inner do( block prematurely, so msbuild fell OUTSIDE the loop and got a
literal '%A' for Platform -> 'release|%A invalid' (MSB4126). Result: every
main target (api_regular/api_experimental/steamclient_*) silently failed (the
failure is only echoed as a Warning), and only the hardcoded lib_steam_old
ever produced output — across nightly too. Replace the parens with brackets
so msbuild stays in the loop and Platform=%%A expands to x64/Win32.
…friend's joinable lobby

Real Steam auto-derives the 'connect' rich-presence (launch/join param
+connect_lobby <64-bit lobby id>) and 'Joinable' from a member's joinable
lobby. goldberg did not, so games that drive friends 'Join Game' purely off
rich presence (EOSPlus+Steam titles such as StarRupture) saw
GetFriendRichPresence(host,'connect') == "" and reported 'No sessions
available'.

Derive both in get_friend_rich_presence_silent when the friend is in a
(non-invisible) lobby and the game did not set the key itself. The friend's
lobby_id is already broadcast in the Friend struct; settings->get_lobby()
only tracks non-invisible lobbies, so a non-zero lobby_id is a good proxy
for joinable.
@gabrielgad
gabrielgad merged commit b7430e0 into dev Jun 16, 2026
49 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant