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.

Hinweis: Wenn Ihr Spiel die Unreal Engine verwendet, lesen Sie bitte die für diese gepackten Dateien spezifischen Hinweise am Ende dieses Abschnitts.

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 Datenträgerzugriffe 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 dem Datenträger 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.

Unreal Engine - Sonderhinweise

Einige Versionen der Unreal Engine verwenden „Datenausrichtung“ („padding alingment“) für die einzelnen Elemente in den gepackten Dateien, das einen großen Einfluss auf die Größe der SteamPipe-Updates haben kann. Diese Ausrichtung der Daten kann zu einer ganzen Reihe von Elementverschiebungen führen, wenn neue Versionen erstellt werden, insbesondere, wenn die Komprimierung von gepackten Dateien aktiviert ist. Using a padding alignment of 1MB (1048576) will help ensure that re-alignments will shift assets by a multiple of the same blocksize that SteamPipe uses for delta calculations.

Wenn Sie beispielsweise Ihre Datenausrichtung beim „Kochen“ Ihrer gepackten Spieldateien ändern oder spezifizieren möchten, müssen Sie eine Zeile in der folgenden Datei ändern: UnrealEngine/Engine/Source/Programs/AutomationTool/Win/WinPlatform.Automation.cs. Diese Datei enthält eine Funktion namens GetPlatformPakCommandLine – ändern Sie in dieser Funktion die folgende Zeile:

string PakParams = " -patchpaddingalign=2048";

zu dieser:

string PakParams = " -patchpaddingalign=1048576 -blocksize=1048576";

Mit dieser Änderung sollte es Ihnen möglich sein, die Komprimierung von gepackten Dateien zu aktivieren und weiterhin ein optimiertes Updateverhalten der SteamPipe zu erreichen.

Unreal Engine ist eine Marke und/oder eingetragene Marke von Epic in den USA und/oder anderen Ländern.

Steamworks Video Tutorial - Building Your Game 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. Navigieren Sie im Terminal zum Ordner „tools\ContentBuilder\builder_osx“.
  2. Führen sie „chmod +x steamcmd“ aus.
  3. Geben Sie „bash ./steamcmd.sh“ ein.
  4. SteamCmd wird nun ausgeführt und auf den aktuellsten Build aktualisiert. Nach Abschluss befinden Sie sich in der SteamCmd-Eingabeaufforderung.
  5. Geben Sie „exit“ ein und drücken Sie die Eingabetaste, um die Eingabeaufforderung zu schließen.
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. Dier hier gezeigten Beispielskripts finden Sie auch im Verzeichnis Tools\ContentBuilder\scripts des Steamworks-SDK.

SteamPipe-GUI-Werkzeug

Wenn Sie unter Windows ein GUI-Werkzeug verwenden möchten, das Ihnen hilft, diese Konfigurationsdateien zu erstellen und Ihre Builds hochzuladen, dann nutzen Sie das Werkzeug SteamPipeGUI im Ordner „tools“ des Steamworks-SDKs. 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.

Einfaches Build-Skript


Beginnen wir mit dem einfachsten Build-Skript. Für unser Beispiel nehmen wir ein Spiel (App-ID 1000) mit einem Depot (Depot-ID 1001) und möchten alle Dateien aus dem Ordner „content” hochladen (inklusive Unterordner). Dafür brauchen wir nur ein einziges Build-Skript wie das im SDK enthaltene "simple_app_build.vdf":

"AppBuild" { "AppID" "1000" // Ihre App-ID "Desc" "Dies ist ein simples Buildskript" // interne Beschreibung des Builds "ContentRoot" "..\content\" // Stammverzeichnis der Inhalte, relativ zum Speicherort dieser Datei "BuildOutput" "..\output\" // Build-Ausgabeordner für Protokoll- und Cache-Dateien des Builds "Depots" { "1001" // Ihre Depot-ID { "FileMapping" { "LocalPath" "*" // alle Dateien aus dem Inhaltsstammverzeichnis "DepotPath" "." // dem Stammverzeichnis des Depots zugeordnet "recursive" "1" // alle Unterordner miteinbeziehen } } } }

Passen Sie die App-ID und Depot-ID an Ihr Spiel an. Um einen Build zu starten, müssen Sie steamcmd ausführen und einige Parameter übergeben:
tools\ContentBuilder\builder\steamcmd.exe +login <Accountname> <Passwort> +run_app_build ..\scripts\simple_app_build.vdf +quit

The following steps occur during a SteamPipe build:
  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. Der Start des Anwendungs-Builds wird beim MDS (Master Depot Server) registriert, wodurch sichergestellt wird, dass der Benutzer über die entsprechenden Berechtigungen zum Modifizieren dieser Anwendung verfügt.
  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. Jede Datei wird eingelesen und in kleine Blöcke von ungefähr 1 MB aufgeteilt. Wenn das Depot bereits zuvor entwickelt wurde, bleiben durch diese Partitionierung so viele unveränderte Blöcke wie möglich erhalten.
  6. Neue Dateiblöcke werden komprimiert und verschlüsselt und danach auf den MDS hochgeladen.
  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. Wenn der Build fertig ist, befinden sich im Build-Ausgabeordner ggf. CSM- und CSD-Dateien. Diese temporären Dateien können gelöscht werden, beschleunigen jedoch alle späteren Builds.


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 within a couple of minutes.

Erweiterte Build-Skripts


If your app has a lot of depots with complex file mapping rules, you can create a depot build script for each depot which will be referenced by the app build script. First let's take a look at available parameters in the app build script:

  • AppID: Die App-ID Ihres Spiels. Der zum Hochladen verwendete Steam-Partneraccount benötigt die Berechtigung zur Bearbeitung von Metadaten dieser Anwendung.
  • 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. Um die beste Leistung zu erzielen, sollten Sie für Ihre Build-Ausgabe eine andere Festplatte verwenden. Dadurch wird die Arbeitslast des Datenträgers aufgeteilt, sodass Ihr Inhaltsstammdatenträger die Leseanforderungen und Ihr Ausgabedatenträger die Schreibanforderungen verarbeiten kann.
  • Preview: Vorschau-Builds geben nur Protokolle und ein Dateimanifest im Build-Ausgabeordner aus. Die Erstellung eines Vorschau-Builds ist ideal, um Ihre Uploadskripte zu durchlaufen und sicherzustellen, dass Ihre Dateizuordnungen, Filter und Eigenschaften wie beabsichtigt funktionieren.
  • Local: Setzen Sie diesen Wert auf den htdocs-Pfad Ihres SteamPipe: Lokaler Inhaltsserver (LCS/lokalen Inhaltsservers) fest. 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: Name des Beta-Branch, auf dem der erfolgreich erstellte Build automatisch live geschaltet wird. Wenn kein Name angegeben wird, geschieht nichts. Bitte beachten Sie, dass der Standard-Branch nicht automatisch live geschaltet werden kann. Dies kann nur über das Anwendungsverwaltungsfenster Ihrer Anwendung vorgenommen werden.
  • Depots: Dieser Bereich enthält alle Dateizuordnungen, Filter und Dateieigenschaften für alle Depots oder verweist für jedes Depot auf eine separate Skriptdatei.

Example app build script "app_build_1000.vdf" is using all options:
"AppBuild" { "AppID" "1000" // Ihre App-ID "Desc" "Ihre Build-Beschreibung" // interne Beschreibung für diesen Build "Preview" "1" // Vorschau-Build erstellen, es wird nichts hochgeladen "Local" "..\..\ContentServer\htdocs" // Inhalte werden nur auf den lokalen Inhaltsserver hochgeladen und nicht auf Steam "SetLive" "AlphaTest" // schaltet diesen Build auf einem Beta-Branch live "ContentRoot" "..\content\" // Inhaltsstammverzeichnis relativ zu dieser Skriptdatei "BuildOutput" "D:\build_output\" // legt den Build-Cache und die Protokolldateien für eine bessere Leistung auf einem anderen Laufwerk ab "Depots" { // Dateizuordnungsanweisungen für Depots befinden sich in separaten Skriptdateien "1001" "depot_build_1001.vdf" "1002" "depot_build_1002.vdf" } }

This app build script references two depot build script files that specify all file mappings and file properties. The following instructions are available in a depot build script ( and also if the section is included directly into the app build script).

  • DepotID : Die Depot-ID für diesen Abschnitts.
  • ContentRoot : Ermöglicht optional das Überschreiben des Inhaltsstammverzeichnisses aus dem Anwendungs-Buildskript pro Depot.
  • 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. Der Parameter DepotPath gibt an, wo die ausgewählten Dateien im Depot angezeigt werden sollen. (Verwenden Sie nur „.”, wenn Sie keine speziellen Zuordnungen benötigen.)
  • FileExclusion : Schließt zugeordnete Dateien wieder aus und kann auch Platzhalter wie „?“ oder „*“ enthalten.
  • InstallScript : Markiert eine Datei als Installationsskript und signiert die Datei während des Build-Prozesses. Der Steam-Client kann das Installationsskript für jede Anwendung ausführen, die dieses Depot bereitstellt.
  • FileProperties : Dateien können mit speziellen Flags markiert werden.
    • 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 : Ähnlich wie bei „userconfig“; die Datei wird jedoch bei Aktualisierung der Datei im Depot lokal überschrieben, wenn das Spiel des Benutzers aktualisiert wird. Aktualisieren Sie die Datei im Depot nur, wenn es eine notwendige Änderung am Format oder eine Fehlerbehebung gibt.

Example depot build script depot_build_1002.vdf showing use of all options:
"DepotBuild" { "DepotID" "1002" "ContentRoot" "C:\content\depot1002" // überschreibt ContentRoot aus dem Buildskript der Anwendung "FileMapping" { // alle Quelldateien und Ordner in ".\bin" werden dem Ordner ".\executables" im Depot hinzugefügt "LocalPath" "bin\*" "DepotPath" "executables\" "Recursive" "1" // bezieht alle Unterordner mit ein } "FileMapping" { // überschreibt Audiodateien in \\audio mit deutschen Versionen "LocalPath" "localization\german\audio\*" "DepotPath" "audio\" } "FileMapping" { // kopiert Installationsskript für deutsche Version in das Stammverzeichnis des Depots "LocalPath" "localization\german\german_installscript.vdf" "DepotPath" "." } "FileExclusion" "bin\server.exe" // Diese Datei ausschließen "FileExclusion" "*.pdb" // überall alle .PDB-Dateien ausschließen "FileExclusion" "bin\tools*" // alle Dateien unter bin\tools\ ausschließen "InstallScript" "localization\german\german_installscript.vdf" "FileProperties" { "LocalPath" "bin\setup.cfg" "Attributes" "userconfig" // diese Datei wird während der Laufzeit geändert } }

HINWEIS: 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.

Using SteamPipe In A CI/CD Environment


To setup steamcmd for continuous integration, or just on a machine or VM that will get re-imaged frequently, you'll need to include the config file that contains your login token. Follow these steps so that your initial login token is properly saved:

  1. Run "steamcmd.exe +login <username>"
  2. Enter your password, and the SteamGuard token
  3. Type "info", and you should see your account listed as connected
  4. Type "quit"
  5. For each future run, do not enter a password. Simply run "steamcmd.exe +login <username>"
  6. Be sure that the config file stored in <Steam>\config\config.vdf is saved and preserved between runs, as this file may be updated after a successful login

HINWEIS: If you do login again and provide your password, a new SteamGuard token will be issued and required to login.

Managing Updates

After your app releases to customers, your customers will be receiving the build marked as the Default build. When uploading a new build it's always a good idea to test it before shipping it to your customers, for more information on how to successfully do this see Testen auf Steam.

Debugging Build Issues

If your build wasn't successful, you should look in your output directory for error information, not the console where the build script was run. Most error information can be found in the *.log files.
You can use these Steam client commands and client-side files to debug issues:
  • "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).

Building Retail Install Discs

To build retail install disc for SteamPipe games, you must first setup a build project file.
In this example, the SKU file is called "sku_goldmaster.txt":
"sku" { "name" "Testspiel-Installer" "appid" "202930" "disk_size_mb" "640" "included_depots" { "1" "202931" "2" "202932" } }
Some tips to keep in mind:
  • 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.
  • Gehen Sie zur Konsolenseite und führen Sie den Befehl „build_installer“ aus:
    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.
  • Sobald Sie „Sicherung für App-ID … abgeschlossen“ sehen, sind die Installationsdatenträgerabbilder bereit. 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. Es wird empfohlen, den Namen der Installationsanwendung zu ändern, das Symbol durch eine eigene Grafik zu ersetzen und das Fenster so zu gestalten, dass nur das Installationsprogramm angezeigt wird.
  • 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.

Optionale Erstellung eines Installationsprogramms für den Einzelhandel ausgehend von einem 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 <Projektdatei> <Zielverzeichnis> <Beta-Schlüssel> <Beta-Passwort> Beispiel mit steamcmd: build_installer sku_goldmaster.txt "D:\retail_disks" baseline superGeheim Beispiel mit Skript: steamcmd.exe +login Benutzername Passwort +build_installer "..\Build\GameDataSku.txt" c:\Zielverzeichnis Beta-Schlüssel Beta-Passwort +exit

Zusatzinhalte mit einem Installationsprogramm für den Einzelhandel installieren

In some circumstances, you may wish to create a retail installer that includes your DLC packages. 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

To build a GM containing multiple Steam Pipe apps. Build each app installer one by one but point them all to the same output folder. Each build will merge itself with the already existing install image.

Einen Installationsdatenträger für den Einzelhandel anpassen

See Customizing a gold master for more details on customizing your retail install disk.

Preloading Games before Release

By default, all content is always encrypted, on all retail discs and on all content servers. 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:
  • Auslieferung von Datenträgern für den Einzelhandel mit Produktschlüsseln, bevor das Spiel tatsächlich erhältlich ist (0-Tage-Piraterie).
  • Spiele, die im Vorverkauf erhältlich und größer als 20 GB sind.

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

Building DLC

DLC is built as a depot of the base game. See the Zusatzinhalte (DLC) documentation for more information.

Troubleshooting SteamPipe

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

Cause: Probably SteamGuard is preventing login. Resolution:
  • Rufen Sie E-Mails für die E-Mail-Adresse ab, die mit dem Account verknüpft ist, mit dem Sie sich anzumelden versuchen. Suchen Sie nach einer E-Mail vom Steam-Support. Kopieren Sie den Code aus dieser E-Mail.
  • Führen Sie den folgenden steamcmd-Befehl aus: set_steam_guard_code <Code>.
  • Versuchen Sie, sich über steamcmd erneut anzumelden: Steam>login <Build-Account> <Passwort>.

Allgemeine Fehlerbehebung für Probleme beim Herunterladen

  • Starten Sie den Computer, das Modem, den Router usw. neu.
  • Überprüfen Sie die Einstellungen Ihrer Firewall. Das neue System erfordert Port 80 (HTTP) und alle anderen Steam-Ports, die hier aufgeführt sind.
  • 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).
  • Schließen Sie Steam und löschen Sie die beiden Ordner „appcache“ und „depotcache“ in Ihrem Steam-Installationsverzeichnis.
  • 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?

If you're testing via Steam the installation of your game or application across multiple platforms, you may run into a situation where the build deploys on Windows but doesn't deploy any files on Mac or Linux despite your SteamPipe process being setup to upload Mac and/or Linux depots. There is a step that is easily missed which involves adding your alternate Depots to the Package being deployed. You can check what depots are included in a package via the following steps:
  1. Navigate to your App Admin page
  2. From the View Associated Items section, click All Associated Packages, DLC, Demos and Tools.
  3. Click on the title of the Package you're attempting to download
  4. Review the Depots Included section
  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:
  • Der Account verfügt nicht über die nötigen Berechtigungen für die Anwendung.
    • Überprüfen Sie, ob die App-ID in der Datei app_build.vdf korrekt ist.
    • Überprüfen Sie, ob der Build-Account die richtigen Berechtigungen für die App-ID hat.
  • Steamcmd kann die Depot-Inhalte nicht finden.
    • Überprüfen Sie, ob der „contentroot“-Wert des app_build-Skript ein gültiger relativer Pfad zum Speicherort der Skriptdatei ist.
    • Überprüfen Sie, ob der „LocalPath“-Wert im depot_build-Skript ein gültiger relativer Pfad zum Pfad im app_build-Skript ist. Überprüfen Sie, ob der Pfad tatsächlich Inhalte enthält.

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.
  • Überprüfen Sie, ob NNNNN die App-ID ist, die Ihnen für die Anwendung zugewiesen wurde.
  • Überprüfen Sie, ob die App-ID in der Datei app_build.vdf korrekt ist.
  • Wenn es eine neue App-ID ist, dann überprüfen Sie, ob die Steamworks-Anwendungsverwaltungskonfiguration veröffentlicht wurde. New apps should have a Steam Pipe install directory as well as a depot, both can be found in Edit Steamwork Settings; the installation directory is in General Installation under the Installation tab, and Depots is under the SteamPipe tab. All changes published is done through the publish tab.
  • Wenn das alles korrekt ist, dann stellen Sie sicher, dass Ihr Account die App-ID besitzt.

„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>