UDN
Search public documentation:

Steam
日本語訳
中国翻译
한국어

Licensees can log in.

Red links require licensee log in.


Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

Steam

Document Summary: A guide to using and implementing the Steam Integration in UnrealEngine3?.

Document Changelog: Created by John Scott.

How to use and implement the Steam Integration in UnrealEngine3

Using the Steam client

To get the initial game (after setting up the Content Server)

  • Get the latest Steam SDK, and copy sdk/client/Steam.exe and sdk/client/Steam.cfg to a local folder
    • Licensees can copy it from '//depot/UnrealEngine3/Development/External/Steamworks/sdk/client/...'
    • UDK users can register and download from here https://partner.steamgames.com/home
  • Make 'steam.cfg' writable and set the 'SdkContentServerAdrs' to the IP of where you are running your local content server
  • Run 'Steam.exe'
  • Right mouse click on your game (in our case 'Unreal Development Kit') on the 'My games' tab and install
  • After installation is complete, right mouse click and 'Launch game'

To get an update (after setting up the Content Server)

  • Updates are retrieved automatically as long as the Steam client is running
    • Restart the Steam client if you do not wish to wait for the polling interval

Notes

  • If you get an update, but the local content server has a fresh complete (non iterative) build, then the client will get confused. To fix this, delete all but 'Steam.exe' and 'Steam.cfg' in your local folder and start again.
    • During initial development, this tends to happen a lot.

Using the Steam Content Tool

There are two methods, using the GUI and using Steam Script.

Using the GUI to create an initial build with solution and project files

  • Copy the build you wish to publish (e.g. 'C:\Builds\UnrealEngine3') locally
  • Run the content tool (part of the Steam SDK) 'sdk/tools/ContentTool.exe'
  • Click the 'New Solution' button
  • Click 'Next'
  • Solution Section: Type in the 'Solution Name' (UTGame) and the location to 'C:\SteamGame'
  • Click 'Next'
  • Application Section: Type in the 'Application Name' ('Unreal Development Kit' - this is what appears in the GUI), File Delivery is 'Loose Files' and 'Application ID' is 13260
  • Click 'Next'
  • Depot Section: Name is 'UTGame', Type is 'Content', 'Project Location' is 'C:\SteamGame', 'Depot Location' to 'C:\SteamGame\Depot', and 'Depot ID' to 13261
  • Click 'Next'
  • Click on the listbox entry to the right of and type 'C:\Builds\UnrealEngine3'
  • Click 'Finish' (It will list files that it found to add to the project - click OK to synchronise the depot)
  • Click on the 'Solution Properties' button near the top left of the GUI; it's just below the text of 'Solution Explorer'
  • Expand out the tree views 'Launch Options -> Label = Default -> Command line = Unreal Development Kit'
  • Right mouse click and change the command line to 'Binaries\Win32\UDKGame.exe'
  • Close that window, save when prompted.
  • Click the 'Build' toolbar button (this will take some time)
  • 'C:\SteamGame\Depot' will now contain '13261_0.dat', '13261_0.blob' and 'UTGame.depot' (this is appid_version.dat and appid_version.blob)
  • From the Publish menu, select 'Publish to Local Testing Server', this will copy '13261_0.dat', '13261_0.blob' and 'ContentDescriptionDB.xml' to the local server.
  • Run the Content Server

Using Steam Script to create new versions

  • Spawn a DOS box
  • Run '//depot/UnrealEngine3/Development/External/Steamworks/sdk/tools/ContentTool.com' /verbose /console /filename '//depot/UnrealEngine3/UDKGame/Build/Steam/SteamMakeVersion.smd'
  • Copy the new files from 'C:\SteamGame\Depot' to 'C:\Steam\DepotRoot'
  • Copy 'C:\SteamGame\ContentDescriptionDB.xml' to 'C:\Steam\DepotRoot'
  • Stop then start the content server so it detects the update.

Notes

  • The update process is automated in the build system; check //depot/UnrealEngine3/Development/Builder/Scripts/Build/SteamVersion.build for details
  • Be very careful when editing .sts and .spj files as seemingly innocuous changes can cause problems. Also, don't change the relative paths at all; this also causes problems.

Running the Steam Content Server

There are two methods to running the content server; from a command prompt or as a service.

From a Command Prompt

  • Spawn a DOS box
  • Run '//depot/UnrealEngine3/Development/External/Steamworks/sdk/tools/contentserver/contentserver.exe' /verbose /DepotPath 'C:\SteamGame\LocalTestServer'
  • Watch lots of debug spew fly by, but you should see mention of 13261_0 right at the end
  • Steam clients can now connect and download this build

As a Service

  • Move 'C:\SteamGame\LocalTestServer' to 'C:\Steam\DepotRoot' (unless you're using ContentServerCfg.txt to set the depot path for the service; see below)
  • Spawn a DOS box
  • Run '//depot/UnrealEngine3/Development/External/Steamworks/sdk/tools/contentserver/contentserver.exe' /install (this automatically starts the service)
  • Steam clients can now connect and download this build

Notes

  • The content server generally works very well and seamlessly handles a lot of the typical network nightmares.
  • I have found two notable exceptions
    • The content server does not detect new versions, to register a new version you need to restart the service.
    • The depot location when running as a service cannot be set from the commandline. When running as a service, it can only be set via a file named ContentServerCfg.txt located in the same directory as ContentServer.exe. Otherwise the default value of \Steam\DepotRoot is used (the path is relative to the root of the volume). The syntax of this file is similar to UE3 .ini files; so for example, to change the depot location from \Steam\DepotRoot to \LocalContentServer, ContentServerCfg.txt would need to contain the following two lines:

           [ClientContent]
           DepotRootPath = "\LocalContentServer"

Using Steam in Game

Simply having the Steam client running when launching the game will allow you to access all the Steam features. If the Steam client is not running, the networking layer will fall back internally to the common online subsystem (which basically has the functionality of OnlineSubsystemPC).

The authentication system is quite simple; if you don't 'own' the game, you can't play on a server. Ask Valve for your own app id to test network connectivity with your games; the 'Unreal Development Kit' app id is owned by everyone.