Steamworks-Dokumentation
Hochladen auf Steam
Unten finden Sie eine Anleitung zur Verwendung von SteamPipe, Valves Werkzeug zur Veröffentlichung von Inhalten auf Steam. Weitere Informationen zu den bewährten Praktiken zur Aktualisierung Ihres Spiels finden Sie hier: Bewährte Praktiken bei der Aktualisierung von Spielen.

Einführung in das SteamPipe-Inhaltssystem

SteamPipe ist das Inhaltssystem für Spiele/Anwendungen, auf dem Steam basiert. SteamPipe bietet die folgenden Funktionen:
  • Effiziente und schnelle Bereitstellung von Inhalten.
  • Öffentliche und private „Beta“-Branches, mit denen mehrere Builds getestet werden können.
  • Einfache, webbasierte Verwaltung von Builds. Mit nur wenigen Klicks können neue Builds veröffentlicht oder zu früheren Builds zurückgewechselt werden.
  • Anzeige der Update-Größe eines Builds, bevor es live geschaltet wird.
  • Anwendungsübergreifende Verwendung von Inhalten.
  • Erstellen von Installationsdatenträgern mit öffentlichen oder Beta-Inhalten.
  • Spiele/Anwendungen bleiben offline verfügbar, selbst wenn der Download eines Updates gestartet wird.
  • Alle Inhalte sind grundsätzlich verschlüsselt und inaktive Versionen sind für Kunden nicht sichtbar.
  • Ein SteamPipe: Lokaler Inhaltsserver, der während der Entwicklung verwendet werden kann.
HINWEIS: SteamPipe umfasst einige wesentliche Konzepte. Bevor Sie beginnen, sollten Sie sich mit den in der Dokumentation zu Anwendungen beschriebenen Konzepten vertraut machen. Schon ein grundlegendes Verständnis dessen, wie die einzelnen Komponenten zusammenwirken, wird Ihnen beim Hochladen Ihres Produkts auf Steam sehr hilfreich sein.

Struktur von Spielinhalten – Bewährte Praktiken


Die SteamPipe wurde sowohl für effizientes Herunterladen von Erstinstallationen von Spielen als auch für effizientes Patchen von Updates entworfen. Grundsätzlich funktioniert sie gut für eine Vielzahl unterschiedlich strukturierter Spielinhalte. Es gibt jedoch einige wichtige Dinge, die man im Hinblick auf die Optimierung und die Vermeidung von ineffizienten Umständen wissen sollte.

Die SteamPipe unterteilt jede Datei zunächst in Blöcke mit einer Größe von ca. 1 MB. Dann wird jeder Block komprimiert und verschlüsselt, bevor er in Steams System zur Bereitstellung von Inhalten hochgeladen wird. Die Blöcke bleiben komprimiert und verschlüsselt, bis sie von einem Client heruntergeladen werden. Anschließend werden sie entschlüsselt, entpackt und in die entsprechenden Dateispeicherorte verschoben.

Wenn die SteamPipe ein Update für ein bestehendes Spiel verarbeitet, sucht sie nach Blöcken, die mit Blöcken aus dem vorherigen Build des Spiels übereinstimmen. Somit werden idealerweise nur neue bzw. modifizierte Teile von Dateien als „neue“ Blöcke erkannt. Dann müssen nur diese neuen Blöcke vom Client heruntergeladen werden, um das Spiel zu aktualisieren.

Viele Spiel-Engines verwenden „gepackte“ Dateien, um Spielelemente zu bündeln und die Ladezeiten durch effizientere Festplattenzugriffe zu verbessern. Dies funktioniert generell gut mit der SteamPipe. Einige Dateisysteme verwenden oder ermöglichen jedoch Vorgehensweisen, die Probleme verursachen können. Diese Probleme führen fast immer dazu, dass Updates viel größer als notwendig sind oder der Download zwar schnell, aber der anschließende Aktualisierungsvorgang langsam ist, da sehr viele Lese- und Schreibvorgänge auf der Festplatte erforderlich sind.

Hier sind ein paar allgemeine Richtlinien, falls Ihr Spiel gepackte Dateien verwendet:

  • Achten Sie darauf, dass sich geänderte Elemente nach Möglichkeiten noch innerhalb derselben gepackten Datei befinden.
  • Vermeiden Sie die Umsortierung von Elementen in einer gepackten Datei.
  • Schränken Sie die Größe von gepackten Dateien ein.
  • Gruppieren Sie Elemente nach Level/Spielbereich/Funktion in mehrere gepackte Dateien und überlegen Sie, ob Sie nicht besser eine neue gepackte Datei für Updates hinzufügen, statt bestehende zu ändern.
  • Ihre gepackten Dateien sollten nicht die ursprünglichen Dateinamen oder Zeitstempel von Dateien oder Builds für die einzelnen Elemente enthalten.

Der erste Punkt oben bezieht sich auf den Umfang der Bytes, die innerhalb einer Datei geändert werden, wenn ein einzelnes Element geändert wird. Idealerweise werden die Daten eines Elements am selben Speicherort innerhalb der gepackten Datei geändert, auch wenn sich die Größe des Elements dadurch verändert. Die SteamPipe erstellt nur für die Teile der Datei neue Blöcke, die geänderte (Element-)Daten enthalten. Alle gepackten Dateien benötigen jedoch auch eine Art Inhaltsverzeichnis, damit die Engine die Daten der einzelnen Elemente finden kann. Die Struktur dieses Inhaltsverzeichnisses kann einen großen Einfluss auf die Effizienz des Patchverhaltens der SteamPipe haben. Idealerweise befindet sich am Anfang oder Ende der Datei ein Inhaltsverzeichnis (ggf. in Baumstruktur). Da sich die Byte-Position anderer Elemente innerhalb der Datei verschieben kann, ändern sich auch deren Einträge im Inhaltsverzeichnis. In diesem Fall erstellt die SteamPipe neue Blöcke für die geänderten Elementdaten und die geänderten Teile des Inhaltsverzeichnisses.

In einigen Spiel-Engines haben wir jedoch gesehen, dass die Informationen des Inhaltsverzeichnisses über die gesamte Datei verteilt sind. In noch problematischeren Fällen verwenden Engines absolute Werte für den Versatz der Bytes. Wenn sich beispielsweise ein Element bei Byte 3450 um 8 Bytes vergrößert, ändern sich die Versatzwerte für alle nachfolgenden Elemente in der Datei. Selbst wenn jeder Versatzwert nur eine Größe von 4 oder 8 Bytes hat, führt eine Änderung einer 8-Byte-Zahl dazu, dass die SteamPipe einen neuen 1-MB-Block erstellt. Dies kann katastrophale Auswirkungen haben, da selbst die Änderung einiger kleiner Elemente in einer gepackten Datei dazu führt, dass der Client mehr als die Hälfte der gesamten Datei zur Aktualisierung herunterladen muss. Wenn Sie wissen oder vermuten, dass die Struktur Ihrer gepackten Datei dieses Problem verursacht, wenden Sie sich bitte baldmöglichst an Ihren Valve-Vertreter. Wir haben einen alternativen Build-Algorithmus, der dieses Problem entschärfen kann, allerdings mit einigen Kompromissen.

Weiterhin kennt die SteamPipe die Elementgrenzen innerhalb einer gepackten Datei nicht. Wenn Elemente mit einer Größe von weniger als 1 MB umsortiert werden, kann die SteamPipe diese Neuanordnung wahrscheinlich nicht erkennen, da die vormals ermittelten 1-MB-Blöcke in der Datei nicht mehr existieren. Wenn Sie also bei der Erstellung eines Updates für Ihr Spiel die Ladezeiten optimieren möchten, indem Sie die Elemente innerhalb der gepackten Datei neu anordnen, sollten Sie sich darüber im Klaren sein, dass dies zu einem sehr großen Download für dieses Update führen kann. Wir empfehlen, dies nur zu tun, wenn dies zu deutlichen Leistungsverbesserungen führt.

Als nächsten Schritt zur Aktualisierung einer gepackten Datei auf einem Client-Gerät, erstellt die SteamPipe neben der alten Version eine neue Version. Wenn alle neuen Dateien erstellt sind, wird die Aktualisierung übertragen, indem die alten Dateien gelöscht und die neuen Dateien eingefügt werden. Das bedeutet, dass die SteamPipe zur Aktualisierung einer 25 GB großen gepackten Datei immer eine neue 25 GB große Datei erstellt. Wenn für die Aktualisierung nur 10 Byte an dieser Datei geändert werden müssen, muss die SteamPipe fast die gesamten 25 GB von der alten Datei in die neue Datei kopieren. Abhängig von der Speicher-Hardware des Nutzers kann dieser Vogang sehr langsam sein. Deshalb empfehlen wir zwei Dinge:

Begrenzen Sie erstens die Größe der gepackten Dateien. 1 bis 2 GB sind wahrscheinlich mehr als ausreichend, um beim Laden des Spiels effiziente Lesevorgänge vom Datenträger zu ermöglichen.

Beschränken Sie zweitens den Umfang der Elemente in einer einzelnen gepackten Datei; zum Beispiel auf ein einzelnes Spiellevel oder eine freischaltbare Funktion. So führen Aktualisierungen, die sich auf bestimmte Teile Ihres Spiels beziehen, nicht dazu, dass die Daten anderer Teile auf dem Client-Gerät hin und her kopiert werden. Außerdem können und sollten neue Funktionen, Level usw. in eigenen neuen gepackten Dateien untergebracht werden. Clients, die dieses Update herunterladen, können einfach die neuen Dateien herunterladen, wodurch die oben beschriebenen Probleme mit Änderungen an gepackten Dateien vermieden werden.

Im Zweifelsfall können Sie ein lokales Werkzeug zum Vergleichen von Binärdaten wie Beyond Compare verwenden, um die Versionen Ihrer gepackten Dateien zu vergleichen. Vergewissern Sie sich, dass die Größe der angezeigten Unterschiede der erwarteten Größe durch die geänderten Elemente entspricht und es keine Vielzahl von kleinen Änderungen gibt, die sich über die gesamte Datei verteilen. Wenn Sie etwas Unerwartetes sehen, kontrollieren Sie bitte die Einstellungen des Programms, mit dem Sie die Dateien packen.

Komprimierung: Da Steam alle Dateien zum Hochladen, Speichern und Herunterladen komprimiert, empfehlen wir grundsätzlich nicht, eine allgemeine Komprimierung für gepackte Dateien zu verwenden. Wenn Sie sich jedoch Sorgen um die Größe Ihres Spiels auf dem Datenträger machen, sollten Sie die gepackten Dateien dennoch komprimieren. Dies funktioniert ganz gut mit der SteamPipe, solange die oben genannten Kriterien erfüllt sind. Insbesondere sollten Sie darauf achten, dass die Komprimierung so weit wie möglich pro Element erfolgt. Jede Komprimierung, die die Grenzen von Elementen überschreitet, führt dazu, dass Änderungen weiter gestreut werden und Clients mehr Daten als nötig herunterladen müssen.

Verschlüsselung: Ähnlich wie bei der Komprimierung ist die Verschlüsselung wahrscheinlich unnötig und birgt dieselben Risiken.

Wenn diese Regeln befolgt werden, wird die Größe von Updates minimiert und es müssen nur neue Inhalte heruntergeladen werden. Ihre Kunden werden Ihnen dafür dankbar sein und Sie können die Qualität Ihres Produkts durch die Bereitstellung weiterer Updates verbessern.

Wenn Sie den Eindruck haben, dass Ihre Spielpakete nicht gut mit dem Aktualisierungsprozess der SteamPipe harmonieren, wenden Sie sich bitte an Ihren Valve-Vertreter, damit wir prüfen können, ob erweiterte Funktionen dieses Zusammenspiel verbessern können.

Steamworks-Videoanleitung – Integration Ihres Spiels in SteamPipe

Diese Anleitung führt Sie in die SteamPipe ein und erläutert Schritt für Schritt, wie Sie mit den Steamworks-Werkzeugen einen Build für eine Beispielanwendung für Steam erstellen.
https://www.youtube.com/watch?v=SoNH-v6aU9Q

Steamworks-Videoanleitung – Hinzufügen neuer Plattformen und Sprachen

Diese Videoanleitung zeigt Ihnen, wie Sie Ihrem Spiel anhand von Depots neue Plattformen und Sprachen hinzufügen.
https://www.youtube.com/watch?v=PShS32hcing

SteamPipe – Technische Details

SteamPipe verwendet HTTP für die Bereitstellung von Inhalten. Da es sich bei Downloads um herkömmlichen Webverkehr handelt, kann die Downloadgeschwindigkeit durch HTTP-Caches von Drittanbietern zwischen Kunden und Steam-Servern erhöht werden. Inhalte können durch externe CDN-Anbieter gehostet werden, die sich problemlos in unser Inhaltsnetzwerk einbinden lassen. Die meisten Firewalls auf Kundenseite erlauben HTTP-Datenverkehr und blockieren Downloads nicht.

Die SteamPipe nutzt einen effizienten Patching-Algorithmus, der auf binären Differenzdaten basiert und nur die veränderten Teile bestehender Inhaltsdateien ändert. Wenn die Inhalte aktualisiert werden, müssen nur diese Differenzdaten gesendet werden. Dies bedeutet, dass die Übertragungen sowohl für Entwickler als auch für Nutzer kleiner und schneller sind. Die meisten Partner halten die Verwendung eines lokalen Inhaltsservers für nicht notwendig, da sie Builds effizient auf privaten Branches patchen können.

Steam-Account für Builds

Bevor Sie auf Steam einen Build erstellen können, müssen Sie in Ihrem Steamworks-Account einen Steam-Account haben, der über die Berechtigungen „Metadaten der Anwendung bearbeiten“ und „Anwendungsänderungen auf Steam veröffentlichen“ verfügt. Aus Sicherheitsgründen empfiehlt es sich, einen separaten Build-Account einzurichten, der ausschließlich diese Berechtigungen besitzt. Hierzu können Sie unter https://store.steampowered.com/join einen neuen Account erstellen.

Jeder Administrator Ihres Steamworks-Accounts kann einen Steam-Account hinzufügen und die erforderlichen Berechtigungen zuweisen. Weitere Informationen zu diesem Verfahren finden Sie in der Dokumentation Verwaltung Ihres Steamworks-Accounts. Hier ein Beispiel für einen solchen Account:

create_build_account.png

Ersteinrichtung neuer SteamPipe-Anwendungen

Um neue SteamPipe-Anwendungen einzurichten, gehen Sie wie folgt vor:
  1. Suchen Sie die App-ID Ihrer Anwendung (Sie finden die ID, wenn Sie die Anwendung auf Ihrer Steamworks-Startseite auswählen).
  2. Rufen Sie die Seite Allgemeine Installationseinstellungen für Ihre Anwendung auf.
  3. Definieren Sie mindestens eine Startoption (den Pfad und optional die zum Starten des Spiels erforderlichen Argumente). Bewegen Sie die Maus über (?), um weitere Informationen zu jedem Feld zu erhalten.

    Das Beispiel unten zeigt fünf Startoptionen: zwei für Windows, zwei für macOS und eine für Linux.
    Startoption 3 wird nur angezeigt, wenn der Nutzer auch den angegebenen Zusatzinhalt besitzt.

    updatedlaunchoptions_3.png
  4. Rufen Sie die Seite Depots auf und fügen Sie die für diese Anwendung erforderlichen Depots hinzu. Möglicherweise ist standardmäßig bereits ein Depot für Ihre Anwendung konfiguriert.
    1. Klicken Sie auf das Standarddepot und ändern Sie den Namen des Depots in einen aussagekräftigen und wiedererkennbaren Namen (zum Beispiel „Basisinhalt“ oder „Windows-Inhalt“).
    2. Lassen Sie die Sprache auf [All languages] eingestellt, es sei denn, es handelt sich um ein sprachspezifisches Depot.
    3. Lassen Sie das Betriebssystem auf [All OSes] eingestellt, außer es handelt sich um ein betriebssystemspezifisches Depot (wenn die Anwendung für alle Betriebssysteme gilt oder nur für PC oder nur für Mac ist, behalten Sie die Einstellung bei). Ändern Sie die Einstellung nur bei betriebssystemspezifischen Spieldepots.
    4. Klicken Sie auf Neues Depot hinzufügen, um weitere Depots hinzuzufügen.
    5. Klicken Sie auf Änderungen speichern, um alle vorgenommen Änderungen zu speichern.
  5. Wenn Sie die Definition Ihrer Depots abgeschlossen haben, veröffentlichen Sie die vorgenommenen Änderungen auf der Seite Veröffentlichen.
  6. Sie müssen Ihre neu definierten Depots einem Paket hinzufügen, damit Sie als Eigentümer der Depots zugewiesen werden. Jedes Spiel auf Steam sollte über ein Paket „Developer Comp” verfügen, das automatisch den in Ihrer Entwicklergruppe aufgelisteten Accounts zugewiesen wird.
    Die neuen Depots können Sie diesem Paket (und/oder anderen Paketen, die über diese Depots verfügen müssen) auf der Seite Zugehörige Pakete & Zusatzinhalte hinzufügen.
Hinweis: Wenn Ihre ausführbare Datei sich in einem Unterverzeichnis des Hauptinstallationsverzeichnisses befindet, fügen Sie den Namen des Unterverzeichnisses im Ausführungsfeld ein. Verwenden Sie keine vorangestellten Schrägstriche oder Punkte.
Plattform-Hinweis: Wie oben gezeigt können macOS-Anwendungen entweder durch Angabe eines Anwendungsbündels (Spiel.app) oder eines Skripts bzw. einer Binärdatei (Spiel.app/Contents/MacOS/Spiel) gestartet werden. Im Allgemeinen sollte möglichst das Format des Anwendungsbündels genutzt werden, da macOS hierdurch die Startparameter korrekter und auf ähnliche Weise bestimmen kann, wie bei einer manuellen Ausführung außerhalb von Steam.

Ein wichtiges Beispiel ist hier, dass aktuell Anwendungen, die über ein Anwendungsbündel auf Apple-Silicon-Geräten ausgeführt werden, in der Anwendung die beste verfügbare Architektur nutzen, während beim direkten Ausführen der Binärdatei dieselbe Architektur wie beim Steam-Prozess verwendet wird (aktuell x86_64).

Einrichtung des SDKs für SteamPipe-Uploads

Laden Sie auf dem Computer, auf den Sie Builds hochladen, die neueste Version des Steamworks-SDKs herunter und dekomprimieren Sie es.

Die SteamPipe-Werkzeuge finden Sie im SDK im Ordner Werkzeuge, welcher zwei wichtige Unterverzeichnisse enthält.

Im Ordner ContentBuilder werden Ihre Spielinhalte und die SteamPipe-Build-Werkzeuge gespeichert. Dieses Verzeichnis enthält folgende Unterverzeichnisse:
  • builder: In diesem Verzeichnis ist zu Beginn nur steamcmd.exe enthalten, die Befehlszeilenversion von Steam.
  • builder_linux: Die Linux-Version von steamcmd.
  • builder_osx: Die macOS-Version von steamcmd.
  • content: Dieses Verzeichnis enthält alle Spieldateien, die in Depots kompiliert werden.
  • output: Dieses Verzeichnis ist der Speicherort für Build-Protokolle, den Datenblock-Cache und Zwischenversionen. HINWEIS: Diesen Ordner können Sie jederzeit leeren oder löschen. Nach dem Löschen dauert der nächste Upload jedoch länger.
  • scripts: In diesem Verzeichnis speichern Sie alle Build-Skripts für die Erstellung Ihrer Spieldepots.
steampipebuilddir.png

Wir empfehlen Ihnen, steamcmd.exe einmal direkt im Ordner „builder“ für Ihre Plattform auszuführen, damit ein Bootstrap Ihres Build-Systems erfolgt. Dadurch sollten alle Dateien, die zum Kompilieren von Depots benötigt werden, in Ihr Verzeichnis „builder“ geschrieben werden.

Im Ordner ContentServer befinden sich die benötigten Werkzeuge, um einen eigenen SteamPipe: Lokaler Inhaltsserver auszuführen, falls Sie dies möchten.

SteamCmd auf macOS

Führen Sie folgende Schritte aus, um SteamCmd auf macOS zu aktivieren:
  1. From the terminal, browse to the tools\ContentBuilder\builder_osx
  2. Führen sie „chmod +x steamcmd“ aus.
  3. Type bash ./steamcmd.sh
  4. SteamCmd will then run and update to the latest build, leaving you in the SteamCmd prompt
  5. Type exit and press return to exit the prompt
Anschließend können Sie die verbleibenden Anleitungen dieser Dokumentation befolgen (und die Pfade bei Bedarf anpassen), um Depot- und Anwendungskonfigurationsdateien für das Hochladen Ihrer Inhalte auf Steam zu erstellen.

SteamPipe-Build-Konfigurationsdateien erstellen

Zum Hochladen Ihrer Anwendungsdateien mit SteamPipe sind Skripts erforderlich, in denen Ihr Build und jedes darin enthaltene Depot beschrieben ist. The example scripts shown here are in the Tools\ContentBuilder\scripts folder in the Steamworks SDK.

SteamPipe-GUI-Werkzeug

If you're running on Windows and would prefer a GUI tool to help create these config files and upload your builds you can use the SteamPipeGUI which is available in the tools folder of the Steamworks SDK. In der ZIP-Datei dieses Werkzeugs sind zusätzliche Anleitungen enthalten, die Ihnen bei Ihren ersten Schritten helfen.

Auch bei Verwendung des GUI-Werkzeugs empfiehlt es sich, die folgenden Abschnitte zu lesen, um sich mit der Funktionsweise des SteamPipe-Systems besser vertraut zu machen.

Simple Build Script


Beginnen wir mit dem einfachsten Build-Skript. In our example we have a game (AppID 1000) that has one depot (DepotID 1001) and want to upload all files from a content folder and it's subfolders. Dafür brauchen wir nur ein einziges Build-Skript wie das im SDK enthaltene "simple_app_build.vdf":

"AppBuild" { "AppID" "1000" // your AppID "Desc" "This is a simple build script" // internal description for this build "ContentRoot" "..\content\" // root content folder, relative to location of this file "BuildOutput" "..\output\" // build output folder for build logs and build cache files "Depots" { "1001" // your DepotID { "FileMapping" { "LocalPath" "*" // all files from contentroot folder "DepotPath" "." // mapped into the root of the depot "recursive" "1" // include all subfolders } } } }

Adjust the AppID and DepotID for your game as needed. Um einen Build zu starten, müssen Sie steamcmd ausführen und einige Parameter übergeben:
tools\ContentBuilder\builder\steamcmd.exe +login <account_name> <password> +run_app_build ..\scripts\simple_app_build.vdf +quit

HINWEIS: Ihr erster Versuch, einen Build auszuführen, kann eventuell wegen Steam Guard fehlschlagen. If the login fails due to Steam Guard, check your email for the Steam Guard code, and run steamcmd as: steamcmd.exe "set_steam_guard_code <code>", and try again. Nachdem Sie sich einmal mit Steam Guard angemeldet haben, wird eine Sicherheitsdatei verwendet, um die Anmeldung auf Echtheit zu überprüfen.

If you are using steamcmd from a machine or VM that gets re-imaged frequently, you should include the config file in your image so you won't be prompted for a Steam Guard every time. The the config file is located in <Steam>\config\config.vdf.

Während eines SteamPipe-Builds geschieht Folgendes:
  1. Steamcmd.exe will update itself to the latest version.
  2. Steamcmd.exe is logging into the Steam backend using the given builder Steam account.
  3. The app build start is registered with the MDS (Master Depot Server), which will ensure the user has the proper privileges to modify this app.
  4. Für jedes im Anwendungs-Build enthaltene Depot wird basierend auf den Dateien im Inhaltsordner und den in der Depot-Build-Konfigurationsdatei definierten Filterregeln eine Dateiliste generiert.
  5. Each file is scanned and divided into small chunks of about 1MB. If the depot has been built before, this partitioning will preserve as many of the unchanged chunks as possible.
  6. New file chunks are compressed, encrypted, and then uploaded to the MDS.
  7. Für diese Depotversion wird ein endgültiges Manifest generiert; jedes Manifest wird durch eine eindeutige 64-Bit-Manifest-ID identifiziert.
  8. Sobald alle Depots verarbeitet wurden, stellt der MDS diesen Anwendungs-Build fertig und weist ihm eine globale Build-ID zu.
  9. After the build is done, there may be *.csm and *.csd files in the build ouput folder. These are temporary and can be deleted, but they speed up subsequent build times.


Once the build is complete you can see it on your app builds page, in this case it would be https://partner.steamgames.com/apps/builds/1000. There you can set that build live for the default branch or any beta branch and users will be able to download this update with a couple of minutes.

Erweiterte Build-Skripts


Falls Ihre Anwendung über viele Depots mit komplexen Dateizuordnungsregeln verfügt, können Sie für jedes Depot ein Depot-Build-Skript erstellen, auf das das Build-Skript der Anwendung verweist. Sehen wir uns jedoch zunächst die verfügbaren Parameter im Build-Skript der Anwendung an:

  • AppID - The AppID of your game. The uploading Steam partner account needs 'Edit App Metadata' privileges
  • Desc: Die Beschreibung erscheint nur im Bereich „Ihre Builds“ im Anwendungsverwaltungsfenster. Sie kann jederzeit nach dem Hochladen Ihres Builds unter „Ihre Builds“ geändert werden.
  • ContentRoot: Das Stammverzeichnis Ihrer Spieldateien. Kann ein absoluter Pfad oder relativ zur Build-Skriptdatei sein.
  • BuildOutput: Dieses Verzeichnis ist der Speicherort für Build-Protokolle, Depot-Manifeste, den Datenblock-Cache und Zwischenversionen. For best performance, use a separate disk for your build output. This splits the disk IO workload, letting your content root disk handle the read requests and your output disk handle the write requests.
  • Preview - This type of build only outputs logs and a file manifest into the build output folder. Building preview builds is a good way to iterate on your upload scripts and make sure your file mappings, filters and properties work as intended.
  • Local - Set this to the htdocs path of your SteamPipe: Lokaler Inhaltsserver (LCS). LCS-Builds stellen Inhalte nur auf Ihrem eigenen HTTP-Server bereit und ermöglichen es Ihnen, die Installation Ihres Spiels mit dem Steam-Client zu testen.
  • SetLive - Beta branch name to automatically set live after successful build, none if empty. Bitte beachten Sie, dass der Standard-Branch nicht automatisch live geschaltet werden kann. That must be done through the App Admin panel.
  • Depots - This section contains all file mappings, filters and file properties for each depot or references a separate script file for each depot

Example app build script "app_build_1000.vdf" is using all options:
"AppBuild" { "AppID" "1000" // Your AppID "Desc" "Your build description here" // internal description for this build "Preview" "1" // make this a preview build only, nothing is uploaded "Local" "..\..\ContentServer\htdocs" // put content on local content server instead of uploading to Steam "SetLive" "AlphaTest" // set this build live on a beta branch "ContentRoot" "..\content\" // content root folder relative to this script file "BuildOutput" "D:\build_output\" // put build cache and log files on different drive for better performance "Depots" { // file mapping instructions for each depot are in separate script files "1001" "depot_build_1001.vdf" "1002" "depot_build_1002.vdf" } }

Dieses Buildskript der Anwendung verweist auf zwei Depot-Buildskriptdateien, die alle Dateizuordnungen und Dateieigenschaften angeben. The following instructions are available in a depot build script ( and also if the section is included directly into the app build script).

  • DepotID - The DepotID for this section
  • ContentRoot - Lets you optionally override the ContentRoot folder from the app build script on a per depot basis
  • FileMapping : Dies ordnet Ihrem Depot eine einzelne Datei oder einen Satz Dateien aus dem lokalen Inhaltsstammverzeichnis zu. Es können mehrere Dateizuordnungen vorhanden sein, die Dateien zum Depot hinzufügen. Der Parameter LocalPath ist ein relativer Pfad zum Inhaltsstammverzeichnis und kann Symbole wie „?“ oder „*“ enthalten. Dies gilt auch für übereinstimmende Dateien in Unterordnern, falls Recursive aktiviert ist. The DepotPath parameter specifies where the selected files should appear in the depot (use just '.' for no special mapping)
  • FileExclusion : Schließt zugeordnete Dateien wieder aus und kann auch Platzhalter wie „?“ oder „*“ enthalten.
  • InstallScript - will mark a file as install scripts and will sign the file during the build process. The Steam client knows to run them for any application which mounts this depot.
  • FileProperties - will mark a file with special flags:
    • userconfig : Diese Datei wird durch den Benutzer oder das Spiel modifiziert. Sie kann nicht durch ein Update überschrieben werden und löst keinen Überprüfungsfehler aus, wenn sie sich von der vorherigen Version der Datei unterscheidet.
    • versionedconfig - Similar to userconfig, however if the file is updated in the depot, it will be overwritten locally when the user's game updates. Only update the file in the depot when there is a necessary format change or bug fix.

Example depot build script depot_build_1002.vdf showing use of all options:
"DepotBuild" { "DepotID" "1002" "ContentRoot" "C:\content\depot1002" // override ContentRoot from app build script "FileMapping" { // all source files and folders in ".\bin" will be mapped into folder ".\executables" in depot "LocalPath" "bin\*" "DepotPath" "executables\" "Recursive" "1" // include all subfolders } "FileMapping" { // override audio files in \\audio with German versions "LocalPath" "localization\german\audio\*" "DepotPath" "audio\" } "FileMapping" { // copy install script for german version into depot root folder "LocalPath" "localization\german\german_installscript.vdf" "DepotPath" "." } "FileExclusion" "bin\server.exe" // exclude this file "FileExclusion" "*.pdb" // exclude all .PDB files everywhere "FileExclusion" "bin\tools*" // exclude all files under bin\tools\ "InstallScript" "localization\german\german_installscript.vdf" "FileProperties" { "LocalPath" "bin\setup.cfg" "Attributes" "userconfig" // this file will be modified during runtime } }

NOTE: You can name these scripts what ever you want, but we use the names app_build_<AppID> and depot_build_<DepotID> for consistency. If you know that you'll be building apps on this machine, it might be a good idea to create sub-directories in your scripts directory for each application, to help organize each application's build scripts.

Updates verwalten

Nach der Veröffentlichung Ihrer Anwendung erhalten Ihre Kunden den als Standard-Build markierten Build. Beim Hochladen eines neuen Builds empfiehlt es sich immer, diesen zu testen, bevor Sie ihn für Ihre Kunden verfügbar machen. Wie Sie den Test erfolgreich durchführen können, erfahren Sie unter Testen auf Steam.

Build-Probleme debuggen

Falls Ihr Build nicht funktioniert, suchen Sie in Ihrem Ausgabeverzeichnis nach Fehlerinformationen, statt in der Konsole, in der das Buildskript ausgeführt wurde. Die meisten Fehlerinformationen können in den LOG-Dateien (*.log) gefunden werden.
Sie können zur Behebung von Problemen die folgenden Steam-Client-Befehle und Dateien auf der Client-Seite verwenden:
  • "app_status [App-ID]": Zeigt den aktuellen Status der Anwendung auf diesem Client.
  • "app_info_print [App-ID]": Zeigt die aktuelle Steamworks-Konfiguration für dieses Spiel (Depots, Startoptionen usw.).
  • "app_config_print [App-ID]": Zeigt die aktuelle Benutzerkonfiguration für dieses Spiel (aktuelle Sprache, Installationsverzeichnis usw.).
  • file "logs\content_log.txt": Listet alle protokollierten SteamPipe-Operationen und -Fehler auf.
  • file "steamapps\appmanifest_[App-ID].acf": Zeigt den aktuellen Installationsstatus dieser Anwendung (KeyValues).

Installationsdatenträger für den Einzelhandel erstellen

Um Installationsdatenträger für den Einzelhandel für SteamPipe-Spiele zu entwickeln, müssen Sie zuerst eine Build-Projektdatei einrichten.
In diesem Beispiel heißt die SKU-Datei „sku_goldmaster.txt“:
"sku" { "name" "Testspiel-Installer" "appid" "202930" "disk_size_mb" "640" "included_depots" { "1" "202931" "2" "202932" } }
Bitte beachten Sie die folgenden Tipps:
  • Erstellen Sie einen neuen Ordner, in den die Abbilder der Datenträger für den Einzelhandel geschrieben werden sollen (z. B. „D:\retail_disks“). Es werden nur Depots in den Abschnitten „included_depots“ hinzugefügt. Den Abschnitt „exclude“ gibt es nicht mehr.
  • Sie können Steam.exe (mit den Befehlszeilenparametern -dev und -console) oder steamcmd.exe verwenden, um Installationsprogrammabbilder zu erstellen. Verwenden Sie in beiden Fällen den Befehl „build_installer“.
  • Melden Sie sich mit einem Steam-Account an, der sowohl das Spiel als auch alle Depots besitzt, die Sie auf dem Datenträger für den Einzelhandel speichern möchten. Andernfalls erfordert der Account keine speziellen Berechtigungen, sodass jede beliebige Person Installationsprogrammdatenträger erstellen kann.
  • Wenn Sie Steam.exe verwenden, dann stoppen Sie alle anderen Downloads.
  • Go to the console page and run the build_installer command:
    build_installer sku_goldmaster.txt "D:\retail_disks"
    Der Build kann einige Zeit dauern, da beim ersten Mal alle Depots erneut heruntergeladen werden.
  • Wenn Sie einen GM mit einem lokalen Inhaltsserver anfertigen, dann führen Sie Folgendes aus:
    @localcontentserver "webserver"
    build_installer sku_goldmaster.txt "D:\retail_disks" local
    Die Ausgabe bezieht sich auf „Sicherung“, da „Installationsdatenträger für den Einzelhandel“ und lokale Spielsicherungen praktisch dasselbe sind.
  • Once you see "Backup finished for AppID...", the install disk images are ready. Weitere Details über den Sicherungsbuild finden Sie in logs\backup_log.txt.
  • Es gibt neue Verzeichnisse (Disk_1, Disk_2, usw.) in „D:\retail_disks“, die nicht größer als 640 MB sind, wie durch „disk_size_mb“ spezifiziert. Jeder Datenträgerordner enthält für jedes Depot eine „sku.sis“-Datei sowie eine CSD- (.csd) und CSM-Datei (.csm). Größere Depots können sich über mehrere Datenträger erstrecken. Alle Inhalte von Installationsdatenträgern für den Einzelhandel sind immer verschlüsselt (im Gegensatz zu lokalen Spielsicherungsdateien). Kopieren Sie die Setup-Dateien (setup.exe, setup.ini usw.) des SDK-GMs in den Ordner Ihres ersten Datenträgers und das Installationsprogramm des Datenträgers für den Einzelhandel ist fertig.
  • Achten Sie beim Anfertigen eines GMs für macOS darauf, auf einem Mac das Abbild „goldmaster/disk_assets/SteamRetailInstaller.dmg“ zu öffnen. Kopieren Sie danach die Anwendung, die sich dort befindet, in das Stammverzeichnis Ihres Datenträgers. You will probably want to change the name of the install app, brand the icon and decorate the window to only show the installer.
  • Stellen Sie beim Anfertigen eines aus mehreren Datenträgern bestehenden GMs für macOS sicher, dass der Volumename für jeden Datenträger übereinstimmt. Der Volumename wird zu einem Bestandteil des Einbindungspfads. Wenn die Namen nicht übereinstimmen, kann das Installationsprogramm den nächsten Datenträger nicht finden.

Optionally building a retail installer from a beta branch

The process above will create a retail installer based on the default branch. If you need to create an installer based on a beta branch, you must first create a beta branch named "baseline". Then use the following command to build from the baseline branch:
build_installer <project file> <target folder> <beta key> <beta pwd> steamcmd ex: build_installer sku_goldmaster.txt "D:\retail_disks" baseline superSecret script ex: steamcmd.exe +login user_name password +build_installer "..\Build\GameDataSku.txt" c:\destination beta_key beta_password +exit

Installing DLC from a retail installer

In manchen Fällen kann es nützlich sein, ein Installationsprogramm für den Einzelhandel zu erstellen, in dem Ihre Zusatzinhaltspakete enthalten sind. In such cases, the process to create the installer requires only a few changes.
In "sku_goldmaster.txt", include the DLC AppIDs under the "included_depots" section. Once you have run the "build_installer" process, find the generated sku.sis file for the installer and open it with a text editor.
Add the DLC AppID in the "apps" section. For example, if I had a game with AppID 1000 and DLC AppID 1010, I would adjust the "apps" section as follows:
"apps" { "0" "1000" "1" "1010" }
This will ensure that Steam checks for ownership of the DLC and prompt the user for a key if the DLC is not owned by the account that they are logging into on Steam.

Ein Installationsprogramm für den Einzelhandel für mehrere App-IDs auf einem einzigen Datenträger oder in einem einzigen Installationspaket erstellen

Damit kann ein GM angefertigt werden, der mehrere SteamPipe-Anwendungen enthält. Erstellen Sie nacheinander alle Anwendungsinstallationsprogramme, aber verweisen Sie in allen auf denselben Ausgabeordner. Jeder Build wird mit dem bereits existierenden Installationsabbild zusammengeführt.

Einen Installationsdatenträger für den Einzelhandel anpassen

Weitere Details zum Anpassen Ihres Installationsdatenträgers für den Einzelhandel finden Sie unter Einen Gold Master anpassen.

Spiele vor Veröffentlichung vorausladen

Standardmäßig sind alle Inhalte auf allen Datenträgern für den Einzelhandel und auf allen Inhaltsservern immer verschlüsselt. Switching a game to preload mode means owners can download the content, but it stays encrypted on the users' disk and can't be played. Once the game becomes officially released, Steam will decrypt the preloaded content and the user can play the game.

Switching a game to preload mode is recommended in these cases:
  • Shipping retail discs with product keys before the game is actually available (0-day piracy).
  • Games that run a pre-purchase and are larger than 20GBs in size.

Please submit a ticket to Steam Publishing if you believe your game requires preloading.

Zusatzinhalte erstellen

DLC is built as a depot of the base game. Weitere Informationen finden Sie im Dokumentationsartikel Zusatzinhalte (DLC).

Fehlerbehebung für SteamPipe

„Anmeldefehler: Account-Anmeldung verweigert/fehlgeschlagen“ beim Anmelden über steamcmd.

Ursache: Wahrscheinlich verhindert SteamGuard die Anmeldung. Lösung:
  • Check the email associated with the account you are trying to log on with and look for an email from Steam Support. Kopieren Sie den Code aus dieser E-Mail.
  • Run the following steamcmd: set_steam_guard_code <code>
  • Re-Attempt login from steamcmd: Steam>login <buildaccount> <password>

Allgemeine Fehlerbehebung für Probleme beim Herunterladen

  • Starten Sie den Computer, das Modem, den Router usw. neu.
  • Verify firewall settings. The new system requires port 80 (HTTP) and all other Steam ports, listed here.
  • Deaktivieren Sie vorübergehend die lokalen Antiviren- oder Spamschutzprogramme.
  • Überprüfen Sie die Steam-Downloadregion unter Einstellungen > Downloads. Diese Region sollte Ihrem Standort entsprechen.
  • Stoppen Sie den Download, deinstallieren Sie das Spiel und installieren Sie es erneut (dadurch werden die Manifest-Caches gelöscht).
  • Exit Steam, delete the two folders appcache and depotcache in your Steam install folder.
  • Versuchen Sie, Ihre Steam-Downloadregion auf einen anderen, weit entfernten Standort einzustellen. Dies könnte funktionieren, falls ein Inhaltsserver in Ihrer Nähe fehlerhafte Daten liefert.

Meine Mac- und/oder Linux-Builds installieren keine Dateien. Woran liegt das?

Wenn Sie über Steam die Installation Ihres Spiels oder Ihrer Anwendung über mehrere Plattformen hinweg testen, könnten Sie auf eine Situation stoßen, in der ein Build unter Windows funktioniert, aber bei einem Mac oder unter Linux keine Dateien implementiert, obwohl Ihr SteamPipe-Prozess dafür konfiguriert ist, Mac- und/oder Linux-Depots hochzuladen. There is a step that is easily missed which involves adding your alternate Depots to the Package being deployed. Mit den folgenden Schritten können Sie überprüfen, welche Depots in einem Paket enthalten sind:
  1. Navigate to your App Admin page
  2. Klicken Sie im Abschnitt „Verwandte Elemente anzeigen“ auf Alle verknüpften Pakete, Zusatzinhalte, Videos und Werkzeuge.
  3. Klicken Sie auf den Titel des Pakets, das Sie herunterladen möchten.
  4. Prüfen Sie den Abschnitt Inbegriffene Depots.
  5. Use the Add/Remove Depots to ensure the correct set of Depots are assigned to the Package
There are a number of discussion threads about this that may also assist:

Das Ausführen von steamcmd.exe führt zu folgendem Fehler: „SteamUpdater: Fehler: Steam muss zum Aktualisieren online sein. Bitte überprüfen Sie Ihre Netzwerkverbindung und versuchen Sie es erneut.“

Resolution: Go to Internet Options->Connections->Lan Settings and check Automatically detect settings.

Das Ausführen des Anwendungs-Builds führt zu folgendem Fehler: „FEHLER! DepotBuild für scriptname.vdf“ fehlgeschlagen – Status = 6.“

Possible Causes:
  • Account does not have permissions for the app.
    • Check that the app ID is correct in the app_build.vdf.
    • Check that the build account has proper permissions to the app ID.
  • Steamcmd cannot find the depot contents.
    • Check that the "contentroot" value in the app_build script is a valid path relative to the location of the script file.
    • Check that the "LocalPath" value in the depot_build script is a valid path relative to the path in the app_build script. Check that the path contains actual content.

Das Ausführen des Anwendungs-Builds führt zu folgendem Fehler: „FEHLER! Abruf von Anwendungsinformationen für die Anwendung NNNNN fehlgeschlagen (Anmeldung und Abonnement überprüfen).“

This means that Steam can't retrieve information about the app, either because it doesn't exist or the user doesn't have access to the app.
  • Check that the NNNNN is the app ID you were assigned for the app.
  • Check that the app ID is correct in the app_build.vdf.
  • If it is a new app ID, check that the Steamworks app admin configuration has been published. New apps should have a Steam Pipe install directory on the config tab, a depot on the depot tab, and all changes published on the publish tab.
  • If all of that looks right, make sure that your account owns the app ID.

„Bei der Installation von [Anwendungsname] ist ein Fehler aufgetreten (ungültige Inhaltskonfiguration).“ (beim Start)

Possible Causes:

„Fehlercode 15“ beim Start

This is the CEG servers rejecting the request to CEG the exe. Check the release state on the game page. If it is not 'playable', you will need to request Steam keys that override the release state.

„Die Steam-Server sind ausgelastet und können Ihre Anfrage nicht bearbeiten ... Fehlercode (2)“ (beim Start)

This is the CEG servers failing to find a matching CEG exe. Double check that you have a working CEG executable on the CEG tab of your app admin. Click the 'status' button to make sure that it's propped.

Ich kann mich nicht mehr daran erinnern, wie der steamcmd-Befehl lautete oder wie er funktioniert hat.

Use the 'find' command in steamcmd to search for any steamcmd command. It will do partial matching on the command name and it will list out the command syntax.
Steam>find build_installer ConVars: Commands: build_installer : <project file> <target folder> <beta key> <beta pwd>