Skip to content

Catch up to upstream + fix P2P multi-process Steam-ID routing - #2

Merged
gabrielgad merged 211 commits into
devfrom
merge-upstream-dev
Jun 12, 2026
Merged

gabrielgad merged 211 commits into
devfrom
merge-upstream-dev

Conversation

@gabrielgad

@gabrielgad gabrielgad commented Jun 12, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Brings the fork current with upstream Detanup01/gbe_fork (~209 commits) while keeping splitux tweaks (self-hosted-runner CI + auto_accept_p2p config layer), and fixes a real SteamNetworkingSockets P2P regression.

P2P fix (the headline)

When multiple local processes share one Steam account (a bootstrap launcher exe + the shipping game exe both loading steam_api64 — exactly what Satisfactory does), CONNECTION_ACCEPTED/DATA were routed by destination Steam ID via find_connection() (first match only), landing on the wrong process. The process that called ConnectP2P never reached Connected, causing a 120s timeout.

New Networking::sendToAllWithID() delivers to every connection holding the dest Steam ID; the socket owner handles it, others drop it. All four P2P send paths routed through it.

Verified: Satisfactory two-instance Steam co-op connects end-to-end (Welcomed by server, data flowing, joiner loads host world). Benefits any P2P game with a launcher+game or multiple local instances.

Orphan branches

Fast-forwarded third-party/{common,deps}/win + deps/common to upstream (premake beta8, SDL3 sources) — required for the merged tree to build.

universal963 and others added 30 commits December 1, 2025 21:55
DisOvlAchProg=true by default
Update example settings (disable_achievement_progress=1)
Revert breaking changes to the P2P networking
Re-add some qol lobby connect stuff
Read per-app proof of purchase keys from steam_settings/purchased_keys.txt
using the format: AppId=KEY (e.g. 480=AAAAA-BBBBB-CCCCC-DDDDD).

- Add purchased_keys map, setter and getter to Settings
- Add parse_purchased_keys() parser in settings_parser.cpp
- Wire key lookup into RequestAppProofOfPurchaseKey,
  RequestAppProofOfPurchaseKey_OLD, and RequestAllProofOfPurchaseKeys
- Owned apps without an entry still get the default placeholder key
- Remove TODO comments from FillProofOfPurchaseKey
…type

Handle numeric achievement progress
Fire Steam2 deny callback for denied Steam2 auth requests
dasafe and others added 29 commits May 24, 2026 00:25
…y_general_config

The Achievement_Notification_Delay setting is already parsed in
load_overlay_appearance() (reading from [overlay::appearance] section
using std::stof for proper float handling). The duplicate block in
parse_overlay_general_config() used GetLongValue which truncates
decimal values and read from the wrong INI section.

Resolves review feedback from universal963 on PR Detanup01#522.
Achievement Notification Queue with Configurable Delay
1. std::localtime thread safety — replaced with localtime_s using
   caller-provided stack buffer. Eliminates redundant second call
   by reusing the same struct tm for both strftime calls.

2. Redundant try_load_ach_icon calls — changed from dual call
   (both colored and gray icons every frame) to single call
   matching the current achievement state. The other variant
   is loaded by the background pagination system or on state
   change via the notification path.
Split achievement list into unlocked/locked sections
Update detours, simpleini, utfcpp, stb resize2
The code has been updated to address incomplete translations.
The missing translations have been added, and a Turkish translation has been provided.
The locations where the SmallButton was used are not suitable for a button of this size. Therefore, it was replaced with a full-size button.
Integrating New Buttons Added to the Overlay into the Translation File and Translating the New Buttons into Turkish
Keeps splitux tweaks: self-hosted-runner CI + auto_accept_p2p config layer.
Resolutions:
- .github/workflows/*: keep splitux CI (self-hosted runner setup)
- dll/dll/settings.h: keep auto_accept_p2p_sessions_* fields; drop old_p2p_behavior (removed upstream)
- dll/p2p_manager.cpp: accept upstream deletion (old-P2P refactor); auto_accept consumer to be re-homed
- settings.cpp / settings_parser.cpp: auto-merged (auto_accept parsing/storage intact)

Brings in upstream GetConnectionInfo001 (SteamNetConnectionInfo001_t) impl + matchmaking
fixes needed for UE5 SteamSockets P2P (Satisfactory co-op).
…eam ID

SteamNetworkingSockets P2P broke when multiple local processes share one Steam
account (e.g. a bootstrap launcher exe + the shipping game exe both loading
steam_api64, as Satisfactory does). CONNECTION_ACCEPTED and DATA are addressed
by destination Steam ID and routed via find_connection(), which returns only the
FIRST matching connection — so the reply landed on the wrong process (no socket,
silently dropped) and the process that called ConnectP2P never reached Connected
-> 120s ConnectionTimedOut.

Add Networking::sendToAllWithID() which delivers to EVERY connection holding the
dest Steam ID; the process owning the socket handles it, the rest drop it on
socket lookup. Route all four P2P paths through it (REQUEST/ACCEPTED in
send_packet_new_connection, CONNECTION_END in CloseConnection, DATA in both
SendMessageToConnection overloads).

Verified: Satisfactory two-instance Steam co-op now connects end-to-end
(Welcomed by server, data flowing, joiner loads host world).
@gabrielgad
gabrielgad merged commit 36ec197 into dev Jun 12, 2026
45 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.