Wiki

Clone wiki

Open Steamworks / StepsForLaunch

Roll your own Steam Front End

After quite some time and a lot of help mainly from Didrole, VoiDeD and AzuiSleet and others here at OSW, I have compiled the steps that allow me to Launch a Steam App (game).

Step by Step to Launching a Steam App - based on work by Didrole

The basic steps are:-

Initialising

  1. Loading the Steam DLLs (create an instance of CSteamApiLoader)
  2. Getting the function pointers into the DLLs (plus factories)
  3. Creating a Worker Thread to handle the Steam callbacks
  4. Creating a Steam Pipe and Global User
  5. Steam2 Start up

Steam User logon

  1. Add callback handlers for Steam3 logon
  2. Prepare and Invoke Steam3 logon
  3. Handle logon callback results (remove logon callback handlers)
  4. a) Logon failure - determine reason - may need 2nd Auth (SteamGuard) etc
  5. b) Logon success
  6. Invoke Steam2 Login
  7. Enable file system
  8. Setup environment variables
  9. Read various Steam User information

Get User App list - (this is required if Launching is intended)

  1. Iterate through user License/Subscription list
  2. For all Apps in License/Subscription -
  3. a) Determine App type (Media, demo, crap, game etc)
  4. b) If App type is a game - Store App information (i.e URL to icons etc)
  5. Apply Didrole's bit of magic for each owned game (read the code)

Launch Game from App List

  1. Check App type and if subscribed
  2. Enable "Cloud"
  3. Load Cache if required
  4. Prepare App for Launch
  5. Read App's "local" launch arguments
  6. Use Steam2 to Launch App

Killing the App and GameOverlayUI.exe

Steam doesn't appear to have any exposed and working functions to do this (maybe due to 3ed party products?). Refer to the VC++ wrapper for alternative methods.

Steam User Logoff

  1. Add logoff callback handler
  2. Invoke Steam3 LogOff
  3. Handle logoff callback result (remove logoff callback handler)
  4. Do Steam2 Logout (if required)
  5. Steam2 Cleanup
  6. Steam2 ShutdownEngine

Steam Cleanup and unload Dlls

  1. (Work in progress) - see 6. above
  2. Terminate the Steam callback handler thread
  3. Release Global User and Steam Pipe
  4. Delete the instance of CSteamApiLoader (frees and unloads the Steam DLLs)

Caveats

  1. The OSW headers are "undocumented" and based on the virtual tables in the Steam (client) DLLs.
  2. The Steam Dlls are subject to change without notice by Steam/Valve
  3. The OSW headers are maintained and updated by the Open Steam Works group and you should check for updates periodically.
  4. Valve/Steam will probably not support any of your projects or answer questions
  5. Steam strings appear to be UTF8, so wide strings/unicode should be converted before using.
  6. Steam2 is slowly being replaced by Steam3
  7. Not all defined Steam3 functions are operational.
  8. (Windows) Launching an App will cause GameOvelayUI.exe to run - which will create a delayed error when the App is exited.

Glossary

Steam2 - Older/original Steam functions usually in Steam.dll (being phased out)

Steam3 - New Steam interface mostly through SteamClient.dll (slowly replacing Steam2) App - Steam Game

Subscription/License - A group of Steam Apps - related by a concept, Steam3 uses the term License

i.e Subscription 0 - free games Orange Box etc

Steam User Account - A group of 0 or more Licenses/subscriptions accessed with a username and password

Updated