Documentación de Steamworks
Carga de datos en Steam
A continuación se muestra una guía para usar SteamPipe, la herramienta de Valve para proporcionar contenido a Steam. Para obtener más información sobre prácticas recomendadas para actualizar tu juego, consulta Actualizando tu juego: Prácticas recomendadas.

Introducción al sistema de contenido SteamPipe

SteamPipe es el sistema de contenidos para juegos o aplicaciones que usa Steam. SteamPipe incluye las siguientes características:
  • Aporte eficiente y rápido de contenidos.
  • Un número ilimitado de ramas "beta", públicas y privadas, permitiendo la prueba de múltiples compilaciones.
  • Gestión sencilla de compilaciones a través de la red: publica una nueva compilación o revierte la actual a una anterior solo con algunos clics.
  • Capacidad para consultar el tamaño actualizado de una compilación antes de activarla.
  • Capacidad de compartir contenido entre múltiples aplicaciones.
  • Capacidad para build installer discs desde contenido público o beta.
  • Los juegos o aplicaciones permanecen disponibles fuera de línea, incluso después de que se haya iniciado la descarga de una actualización.
  • Todo el contenido está siempre cifrado, y las versiones no activas no están visibles para los clientes.
  • Un Servidor de contenido local SteamPipe que puede usarse durante el desarrollo.
NOTA. Hay algunos conceptos que son parte integral de SteamPipe. Antes de comenzar, debes estar familiarizado con todos los conceptos descritos en la documentación Aplicaciones. Tener siquiera una comprensión básica de cómo encajan estas piezas será de gran utilidad cuando subas tu producto a Steam.

Tutorial en vídeo de Steamworks: cómo desarrollar tu juego en SteamPipe

Este tutorial presenta SteamPipe y los pasos para crear una aplicación de ejemplo para Steam a través de las herramientas de Steamworks.
https://www.youtube.com/watch?v=SoNH-v6aU9Q

Tutorial en video de Steamworks: cómo añadir nuevas plataformas e idiomas

Este tutorial te guía paso a paso en la adición de nuevas plataformas e idiomas a tu juego, agregando repositorios a tu aplicación.
https://www.youtube.com/watch?v=PShS32hcing

Información técnica de SteamPipe

SteamPipe usa el protocolo HTTP para proporcionar contenidos. Dado que las descargas son tráfico de red ordinario, cualquier caché HTTP de terceros entre el cliente y los servidores de Steam aumentará la velocidad de descarga. El contenido puede estar hospedado por proveedores externos de CDN, que pueden añadirse fácilmente a nuestra red de contenidos. La mayoría de los firewalls para consumidores permiten el tráfico HTTP y no bloquean las descargas.

SteamPipe cuenta con un eficiente algoritmo de parcheado que se basa en deltas binarios, cambiando solo las partes modificadas de los archivos de contenido existentes. Cuando se actualiza este contenido, solo es necesario enviar esos deltas. Esto hace que las transferencias tanto de los desarrolladores como de los usuarios sean más pequeñas y rápidas. La mayoría de los asociados encontrarán que no es necesario usar Servidor de contenido local SteamPipe ya que pueden parchear eficientemente las compilaciones en ramas privadas.

Cuenta de compilación de Steam

Antes de que puedas crear cualquier compilación en Steam, debes tener una cuenta de Steam en tu cuenta de Steamworks con los permisos "Editar metadatos de la aplicación" y "Publicar cambios en la aplicación en Steam" activados. Por razones de seguridad, se recomienda que tengas una cuenta de compilación dedicada con solo esos permisos; puedes crear una nueva cuenta de Steam para tal propósito en https://store.steampowered.com/join.

Cualquier administrador de tu cuenta de Steamworks puede añadir una cuenta de Steam y otorgar los permisos necesarios. Puedes encontrar más información sobre este proceso en la documentación Administrar tu cuenta de Steamworks. Un ejemplo del aspecto que presentaría esta cuenta sería:

create_build_account.png

Configuración inicial de las aplicaciones nuevas de SteamPipe

Sigue estos pasos para configurar nuevas aplicaciones de SteamPipe:
  1. Encuentra el id. de tu aplicación (que puede encontrarse seleccionando la aplicación en tu página principal de Steamworks).
  2. Ve a la página Configuración general de la instalación para tu aplicación.
  3. Define al menos una opción de inicialización (la ruta y, opcionalmente, cualquier argumento requerido para inicializar el juego). Pasa el cursor sobre (?). Para obtener más información sobre cada campo.

    El siguiente ejemplo muestra 4 opciones de lanzamiento, 2 para Windows y 1 para macOS y Linux. La opción de inicio 3 solo se mostrará en Windows si el usuario también posee el DLC especificado.

    updatedlaunchoptions.png
  4. Ve a la página Repositorios y agrega repositorios según sea necesario para esta aplicación. De forma predeterminada, es posible que un repositorio ya esté configurado para tu aplicación.
    1. Haz clic en el repositorio predeterminado y cámbiale el nombre a una denominación adecuada y reconocible (como "Contenido básico" o "Contenido de Windows").
    2. Deja el idioma en [All languages] (todos los idiomas) a menos que se trate de un repositorio específico de idioma.
    3. Deja el SO establecido como [All OSes] (Todos los sistemas operativos), a menos que sea un repositorio específico de SO (si la aplicación es un todo en uno o si es solo para PC o solo para Mac, debería dejarse como [All OSes]). Especifícalo solo para repositorios de juegos específicos de sistemas operativos.
    4. Haz clic en Agregar nuevo repositorio para crear repositorios adicionales.
    5. Haz clic en Guardar cambios para guardar los cambios realizados.
  5. Una vez que hayas terminado de definir tus repositorios, publica los cambios que hayas realizado en la página de Publicar.
  6. Los repositorios que acabas de definir deberán incluirse en un paquete para que adquieras su propiedad. Cada juego en Steam debe tener un paquete de desarrollador Comp que se concede automáticamente a las cuentas dentro de tu grupo editorial.
    Puedes agregar los nuevos repositorios a ese paquete (y/o otros paquetes que deben tener estos repositorios) en la página [url = https://partner.steamgames.com/apps/associated] paquetes asociados y DLC
  7. [/url].
Nota: si tu archivo ejecutable está en una subcarpeta de la carpeta de instalación principal, agrega el nombre de la subcarpeta en el campo Ejecutable. No utilices barras o puntos iniciales.

Configuración del SDK para subidas a SteamPipe

Descarga y descomprime la versión más reciente del SDK de Steamworks en el equipo en el que vayas a subir las compilaciones.

Puedes encontrar las herramientas de SteamPipe dentro del SDK en la carpeta tools, que contiene dos subdirectorios relevantes.

El directorio ContentBuilder es donde se alojarán el contenido de tu juego y las herramientas de compilación de SteamPipe. Este directorio contiene los siguientes subdirectorios:
  • builder: inicialmente este directorio solo contiene steamcmd.exe, que es la versión de línea de comandos de Steam.
  • builder_linux: la versión de Linux de SteamCMD.
  • builder_osx: la versión de macOS de SteamCMD.
  • content: este directorio contiene todos los archivos del juego que se integrarán en los almacenes.
  • output: este directorio será la ubicación de los registros de compilación, el caché de fragmentos y la salida intermedia. NOTA: esta carpeta puede borrarse o vaciarse en cualquier momento, pero una vez que se borre, la siguiente carga de datos llevará más tiempo.
  • scripts: este directorio es donde se ubicarán todos tus scripts de compilación para desarrollar tus repositorios para el juego.
steampipebuilddir.png

Se recomienda ejecutar steamcmd.exe directamente desde la carpeta "builder" de tu plataforma una vez para arrancar tu sistema de compilación. Esto deberá llenar tu directorio de compilación con todos los archivos que necesita para construir repositorios.

El directorio ContentServer contiene las herramientas para ejecutar tu propio Servidor de contenido local SteamPipe si decides hacerlo.

SteamCMD en macOS

Para habilitar SteamCmd en macOS debes completar los siguientes pasos:
  1. Desde el terminal, ve a la carpeta tools\ContentBuilder\builder_osx\osx32.
  2. Ejecuta chmod +x steamcmd
  3. Ve a la carpeta principal (tools\ContentBuilder\builder_osx).
  4. Introduce bash ./steamcmd.sh
  5. SteamCMD se ejecutará, se actualizará a la compilación más reciente y te dejará en el prompt de SteamCMD.
  6. Teclea exit y pulsa la tecla Return para salir del prompt.
Después podrás seguir el resto de esta documentación (reemplazando las rutas según corresponda) para crear archivos de configuración de repositorios y aplicaciones para subir tu contenido a Steam.

Crear los archivos de configuración para la compilación en SteamPipe

Para subir archivos de tu aplicación con SteamPipe, debes crear scripts que describan tu compilación y cada repositorio incluido en ella. Los scripts de ejemplo que aquí se muestran los puedes encontrar en la carpeta Tools\ContentBuilder\scripts del SDK de Steamworks.

Herramienta de interfaz gráfica de usuario de SteamPipe

Si estás usando Windows y prefieres una herramienta gráfica que te ayude a crear estos archivos de configuración y a cargar tus compilaciones, puedes usar SteamPipe GUI, que se encuentra en la carpeta de herramientas del SDK de Steamworks. En el archivo zip hay instrucciones adicionales para ayudarte a comenzar.

Aunque decidas utilizar la herramienta gráfica, se recomienda leer las siguientes secciones para familiarizarte mejor con el funcionamiento del sistema SteamPipe.

Script de compilación simple


Empecemos con el script de compilación más básico posible. En nuestro ejemplo, tenemos un juego (id. de aplicación 1000) que tiene un repositorio (id. de repositorio 1001) y queremos cargar todos los archivos de una carpeta de contenido y sus subcarpetas. Para ello, solamente hace falta un script de compilación. Consulta el archivo "simple_app_build.vdf" incluido en el SDK:

"AppBuild" { "AppID" "1000" // tu id. de aplicación "Desc" "Esto es un script de compilación simple" // Descripción interna de esta compilación "ContentRoot" "..\content\" // carpeta raíz del contenido, relativa a la ubicación de este archivo "BuildOutput" "..\output\" // carpeta de salida de compilación para registros de compilación y archivos de caché "Depots" { "1001" // tu id. de repositorio { "FileMapping" { "LocalPath" "*" // todos los archivos de la carpeta contentroot "DepotPath" "." // asignados en la raíz del repositorio "recursive" "1" // incluidas todas las subcarpetas } } } }

Ajusta los id. de aplicación y de repositorio de tu juego según necesites. Para iniciar una compilación, deberás ejecutar steamcmd y pasar un par de parámetros:
tools\ContentBuilder\builder\steamcmd.exe +login <account_name> <password> +run_app_build ..\scripts\simple_app_build.vdf +quit

NOTA: El primer intento de ejecutar una compilación puede fallar debido a Steam Guard. 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. Después de iniciar sesión una vez con Steam Guard, se utiliza un archivo centinela para verificar que el inicio de sesión es genuino.

Si estás utilizando SteamCMD desde un equipo o máquina virtual que cambia con frecuencia la imagen, deberías incluir el archivo centinela y el archivo de configuración en la imagen para que no se te solicite un código de Steam Guard cada vez. El archivo centinela se encuentra en <Steam>\ssfn<hashOfNumbers>, y el de configuración, en <Steam>\config\config.vdf.

Durante una compilación de SteamPipe, se producen los siguientes pasos:
  1. Steamcmd.exe se actualizará a sí mismo a la última versión.
  2. Steamcmd.exe inicia sesión en el backend de Steam empleando la cuenta del compilador de Steam dada.
  3. El comienzo de la compilación de la aplicación se registra en el MDS (Servidor repositorio maestro), que se asegurará de que el usuario tenga los privilegios adecuados para modificar esta aplicación.
  4. Por cada repositorio incluido en la compilación de la aplicación, se genera un archivo basado en los archivos de la carpeta de contenido y las reglas de filtrado definidas en el archivo de configuración de compilación de repositorio.
  5. Cada archivo se escanea y se divide en pequeños segmentos de 1 MB, aproximadamente. Si el repositorio se ha construido antes, esta partición preserva tantos segmentos no cambiados como sea posible.
  6. Los nuevos segmentos de archivo se comprimen, se cifran y se cargan al MDS.
  7. Se genera un manifiesto final para esta versión del repositorio; cada manifiesto se identifica mediante un id. exclusivo de 64 bits.
  8. Una vez que todos los repositorios se han procesado, el MDS termina esta compilación de la aplicación y la asigna a un id. de compilación global.
  9. Una vez concluida la compilación, en la carpeta de salida de esta compilación pueden aparecer archivos *.csm y *.csd. Son temporales y pueden eliminarse, aunque sirven para acelerar posteriores compilaciones.


Una vez que la compilación esté completa, puedes verla en la página de compilaciones de tu aplicación que, en este caso, sería https://partner.steamgames.com/apps/builds/1000. Desde allí, puedes publicar la compilación en la rama predeterminada o en cualquier rama beta, y los usuarios podrán descargar esta actualización en unos pocos minutos.

Scripts de compilación avanzada


Si tu aplicación tiene muchos repositorios con reglas de asignación de archivos complejas, puedes crear un script de compilación de repositorio para cada uno, al que se hará referencia a través del script de compilación de la aplicación. Empecemos echando un vistazo a los parámetros disponibles en el script de compilación de la aplicación:

  • AppID: el id. de aplicación de tu juego. La cuenta de asociado de Steam para carga necesita el permiso "Editar metadatos de la aplicación".
  • Desc: la descripción solo se puede ver en la sección "tus compilaciones" del panel de administración de la aplicación. Esto se puede cambiar en cualquier momento despues de haber cargado la compilación en la página de "tus compilaciones".
  • ContentRoot: la carpeta raíz de los archivos de tu juego, puede ser una ruta absoluta o relativa al archivo de script de compilación.
  • BuildOutput: este directorio es para la ubicación de los registros de compilación, manifiestos de repositorio, fragmentos de caché y la salida intermedia. Para obtener el mejor rendimiento, utiliza un disco diferente para la salida de tu compilación. Esto reparte la carga de trabajo de entrada/salida de disco, permitiendo que el disco raíz de contenido maneje las solicitudes de lectura y el disco de salida, las de escritura.
  • Vista previa: este tipo de compilación solo genera registros y un archivo de manifiesto en la carpeta de salida de la compilación. Crear compilaciones de vista previa es una buena forma de iterar en tus scripts de carga y asegurarte de que las asignaciones de archivos, los filtros y las propiedades funcionen según lo previsto.
  • Local: establece esto a la ruta htdocs de tu Servidor de contenido local SteamPipe (SCL). Las compilaciones de SCL solo colocan contenido en tu propio servidor HTTP y te permiten probar la instalación de tu juego usando el cliente de Steam.
  • SetLive: nombre de la rama beta que se publicará automáticamente después una compilación exitosa, ninguno si está vacío. Ten en cuenta que la rama "predeterminada" no se puede publicar automáticamente. Eso debe hacerse a través del panel de administración de la aplicación.
  • Repositorios: Esta sección contiene todas las asignaciones de archivos, filtros y propiedades de archivo para cada repositorio o hace referencia a un archivo de script independiente para cada repositorio.

Ejemplo de script de compilación de la aplicación "app_build_1000.vdf" que usa todas las opciones:
"AppBuild" { "AppID" "1000" // id. de aplicación de tu juego "Desc" "Aquí va la descripción de tu compilación" // descripción interna de esta compilación "Preview" "1" // hace una compilación de vista previa, pero nada se carga "Local" "..\..\ContentServer\htdocs" // coloca el contenido en el servidor de contenido local en lugar de cargarlo en Steam "SetLive" "AlphaTest" // publica esta compilación en una rama beta "ContentRoot" "..\content\" // carpeta raíz del contenido relativa a este archivo de script "BuildOutput" "D:\build_output\" // coloca los registros de archivo y caché de la compilación en diferentes unidades para un rendimiento mejor "Depots" { // las instrucciones de asignación de archivos para cada repositorio están en archivos de script separados "1001" "depot_build_1001.vdf" "1002" "depot_build_1002.vdf" } }

Este script de compilación de la aplicación hace referencia a dos archivos de script de compilación del repositorio que especifican todas las asignaciones de archivos y sus propiedades. Las siguientes instrucciones están disponibles en un script de compilación del repositorio (y también si la sección se incluye directamente en el script de compilación de la aplicación).

  • DepotID: Id. de repositorio de esta sección.
  • ContentRoot: te permite opcionalmente sobrescribir la carpeta "ContentRoot" desde el script de compilación de la aplicación repositorio a repositorio.
  • FileMapping: asigna un solo archivo o un conjunto de ellos desde la carpeta raíz del contenido local a su repositorio. Puede haber múltiples asignaciones de archivo que añadan archivos al repositorio. El parámetro LocalPath es una ruta relativa a la carpeta raíz del contenido y puede contener caracteres especiales como "?" o "*". También se aplicará a los archivos coincidentes en subcarpetas si Recursive está habilitado. El parámetro DepotPath especifica dónde deberían aparecer los archivos seleccionados en el repositorio (utiliza simplemente "." si no deseas una asignación en particular).
  • FileExclusion: excluirá los archivos ya asignados. Puede contener caracteres especiales como "?" o "*".
  • InstallScript: marca un archivo como un script de instalación y lo firma durante el proceso de compilación. El cliente de Steam sabe que ha de ejecutarlo al iniciar cualquier aplicación que contenga este repositorio.
  • FileProperties: Marcará un archivo con marcadores especiales:
    • userconfig: Este archivo ha sido modificado por el usuario o el juego. No lo puede anular una actualización y no activa un error de verificación si difiere de las versiones previas del archivo.
    • versionedconfig: Parecido a userconfig, sin embargo, si el archivo se actualiza en el repositorio, se sobrescribirá localmente cuando se actualice el juego del usuario. Actualiza solo el archivo en el repositorio cuando haya un cambio de formato necesario o corrección de errores.

Ejemplo de script de compilación de repositorio depot_build_1002.vdf que muestra todas las opciones:
"DepotBuild" { "DepotID" "1002" "ContentRoot" "C:\content\depot1002" // sobrescribe el valor de ContentRoot del script de compilación de la aplicación "FileMapping" { // todos los archivos y carpetas de origen en la carpeta ".\bin" se asignarán a la carpeta ".\executables" en el repositorio "LocalPath" "bin\*" "DepotPath" "executables\" "Recursive" "1" // incluye todas las subcarpetas } "FileMapping" { // sobrescribe todos los archivos de audio en \\audio con versiones en alemán "LocalPath" "localization\german\audio\*" "DepotPath" "audio\" } "FileMapping" { // copia el script de instalación para la versión de alemán a la carpeta raíz del repositorio "LocalPath" "localization\german\german_installscript.vdf" "DepotPath" "." } "FileExclusion" "bin\server.exe" // excluye este archivo "FileExclusion" "*.pdb" //excluye todos los archivos .PDB de cualquier carpeta "FileExclusion" "bin\tools*" // excluye todos los archivos de la carpeta bin\tools\ "InstallScript" "localization\german\german_installscript.vdf" "FileProperties" { "LocalPath" "bin\setup.cfg" "Attributes" "userconfig" // este archivo se modifica en tiempo de ejecución } }

NOTA: Puedes nombrar estos scripts como quieras, pero usamos los nombres app_build_<AppID> y depot_build_<DepotID> por consistencia. Si sabes que vas a crear aplicaciones en este equipo, tal vez sea buena idea crear subdirectorios en el directorio de scripts para cada aplicación, con el fin de ayudar a organizar los scripts de compilación de cada una.

Gestión de actualizaciones

Una vez que tu aplicación se lanza al público, tus clientes recibirán la compilación marcada como predeterminada. Al cargar una nueva compilación, siempre es buena idea probarla antes de enviársela a los clientes. Para obtener más información sobre cómo hacerlo correctamente, consulta Pruebas en Steam.

Depuración de problemas de compilación

Si la compilación no se completó correctamente, comprueba si hay información del error en el directorio de salida, no en la consola donde se ejecutó el script de compilación. La mayoría de la información de errores se puede encontrar en los archivos *.log.
Puedes usar estos comandos del cliente de Steam y archivos del lado del cliente para depurar problemas:
  • "app_status [appid]": muestra el estado actual de la aplicación en este cliente.
  • "app_info_print [appid]": muestra la configuración actual de Steamworks para este juego (repositorios, opciones de lanzamiento, etc.).
  • "app_config_print [appid]": muestra la configuración de usuario actual para este juego (idioma actual, directorio de instalación, etc.).
  • file "logs\content_log.txt": Enumera todas las operaciones y errores registrados de SteamPipe.
  • file "steamapps\appmanifest_[appid].acf": muestra el estado de instalación actual de esta aplicación (KeyValues).

Compilación de repositorios eficientes para SteamPipe

El antiguo sistema de contenido de Steam aplicaba parches de actualizaciones a nivel de archivo, lo que suponía que, si un solo byte de un archivo había cambiado, todos los usuarios debían descargar el nuevo archivo completo. Esto resultaba especialmente ineficiente si el juego empleaba archivos empaquetados, que son colecciones de archivos de contenido del juego en un solo archivo de gran tamaño. Los archivos empaquetados pueden exceder fácilmente el tamaño de 1 GB, por lo que las actualizaciones llevaban con frecuencia a descargas innecesariamente grandes. Una manera común de evitar estas grandes descargas era añadir nuevos archivos empaquetados que anularan contenido de archivos empaquetados ya enviados. Esto funcionaba para las actualizaciones, pero perjudicaba a los nuevos usuarios a largo plazo, pues terminaban descargando contenido que no se había usado y que ya estaba actualizado.

El nuevo sistema de contenido resuelve el problema dividiendo cada archivo en segmentos de 1 MB, aproximadamente. Cada segmento se comprime y cifra antes de que el sistema de contenido de Steam lo distribuya. Si el contenido de juego tiene grandes secciones redundantes, estos segmentos se reutilizan y el usuario solo debe descargar una vez cada segmento repetido. Sin embargo, el verdadero punto fuerte de este sistema es la posibilidad de crear parches de actualización eficientes. Cuando el sistema crea un parche, se escanea el nuevo contenido en busca de segmentos ya conocidos. Si los encuentra, los reutiliza. Esto significa que, si se cambian o inyectan unos pocos bytes en un archivo grande, el usuario solo tiene que descargar los cambios.

Esto funciona bien en la mayoría de los casos, aunque quedan algunos problemas por evitar al diseñar la distribución de contenido del juego. Puede que no te interese comprimir o cifrar los datos del juego. Esto ya lo hace el sistema de contenido de Steam para las descargas y las copias físicas en disco. Si tú también lo haces, puede reducir la efectividad de las actualizaciones delta. La compresión y el cifrado solo se recomiendan si cada recurso individual dentro de un archivo de paquete se comprime y/o es cifrado por separado. De lo contrario, un cambio a un recurso siempre requerirá la descarga de varios otros recursos potencialmente sin cambios.

Si empaquetas múltiples recursos en un solo archivo de paquete, asegúrate de que con cada reempaquetado no se realicen cambios innecesarios. Una práctica problemática es incluir el nombre completo de los archivos fuente originales en el disco, ya que los nombres pueden cambiar en función del equipo de compilación. Otra mala costumbre es incluir marcas de tiempo de compilación para cada archivo. Si es posible, siempre debe añadirse nuevo contenido al final de los archivos empaquetados y mantenerse el orden de los archivos existentes. También, debes mantener los metadatos de tu archivo empaquetado (el desplazamiento y el tamaño de cada recurso individual) en un mismo sitio, y no entremezclarlos con los datos de los recursos. Utiliza una herramienta de comparación de binarios como BeyondCompare para examinar dos compilaciones de tus archivos empaquetados y asegurarte de que no aparezcan centenares de cambios no deseados.

Siguiendo estas reglas minimizas el tamaño de los parches y solo es necesario descargar el nuevo contenido. Tus clientes te lo agradecerán y podrás aumentar la calidad de tu producto publicando más actualizaciones.

Si sospechas que el empaquetado de tu juego no interactúa bien con el proceso de actualización de SteamPipe, ponte en contacto con tu agente de Valve y estudiaremos la posibilidad de activar funciones avanzadas para ayudarte con esto.

Compilación de discos de instalación comerciales

Para crear un disco de instalación comercial para juegos SteamPipe, primero debes configurar un archivo de proyecto de compilación.
En este ejemplo, el archivo SKU se llama "sku_goldmaster.txt":
"sku" { "name" "Instalador de la prueba de juego" "appid" "202930" "disk_size_mb" "640" "included_depots" { "1" "202931" "2" "202932" } }
Algunos consejos a tener en cuenta:
  • Crea una nueva carpeta en la que se escribirán las imágenes del disco comercial, p. ej., "D:\retail_disks". Solo se añaden repositorios en las secciones included_depots; ya no existe una sección de exclusión.
  • Puedes utilizar Steam.exe (con los parámetros de línea de comandos -dev y -console) o steamcmd.exe para compilar imágenes de instalación. En ambos casos, usa el comando "build_installer".
  • Inicia sesión con una cuenta de Steam con la que se haya comprado el juego y todos los repositorios que quieres poner en el disco comercial. Por lo demás, la cuenta no precisa de derechos especiales, por lo que cualquiera puede compilar discos de instalación.
  • Si utilizas Steam.exe, detén el resto de las descargas.
  • Ve a la página de la consola y ejecuta el comando build_installer:
    build_installer sku_goldmaster.txt "D:\retail_disks"
    La compilación puede llevar un tiempo porque todos los repositorios vuelven a descargarse la primera vez.
  • Si estás creando un GM utilizando un servidor de contenido local, ejecuta:
    @localcontentserver "webserver"
    build_installer sku_goldmaster.txt "D:\retail_disks" local
    El spew se refiere a 'Copia de seguridad', ya que 'Copia de instalación minorista' y las copias de seguridad del juego local son básicamente las mismas.
  • Cuando veas "Copia de seguridad terminada para AppId...", las imágenes de disco de instalación están listas. Puedes encontrar más detalles sobre la creación de la copia de seguridad en logs\backup_log.txt.
  • Hay nuevas carpetas (Disk_1, Disk_2, etc.) en "D:\retail_disks", cada una no es mayor que 640 MB, como se especifica con "disk_size_mb". Cada carpeta de disco contiene un archivo "sku.sis" y un archivo .csd y .csm por cada repositorio. Los repositorios más grandes se reparten por varios discos. Todo el contenido de los discos de instalación comerciales se cifra siempre (al contrario que los archivos de copia de seguridad locales del juego). Copia los archivos de configuración SDK GM (setup.exe, setup.ini, etc.) en la carpeta de tu primer disco y el instalador de disco comercial queda completado.
  • Al crear un GM para macOS, asegúrate de abrir la imagen goldmaster/disk_assets/SteamRetailInstaller.dmg en un Mac. A continuación, toma la aplicación que contiene y cópiala en la raíz de tu soporte. Probablemente, quieras cambiar el nombre de la aplicación de instalación, marcar el icono y decorar la ventana para que solo muestre el instalador.
  • Al crear GM multidisco para macOS, asegúrate de que el nombre del volumen de cada disco coincida. El nombre del volumen se convierte en parte de la ruta de montaje y, si los nombres no coinciden, el instalador no podrá encontrar el disco siguiente.

Creación opcional de un instalador comercial a partir de una rama beta

El proceso anterior crea un instalador comercial basado en la rama predeterminada. Si necesitas crear un instalador basado en una rama beta, primero debes crear una rama beta llamada "baseline". A continuación, utiliza el comando siguiente para compilar desde la rama baseline:
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

Instalación de DLC desde un instalador comercial

En algunas circunstancias, puedes querer crear un instalador comercial que incluya tus paquetes DLC. En tales casos, el proceso para crear el instalador solo requiere unos pocos cambios.
En "sku_goldmaster.txt", incluye los id. de aplicación de los DLC en la sección "included_depots". Una vez que hayas ejecutado el proceso "build_installer", busca el archivo sku.sis generado por el instalador y ábrelo con un editor de texto.
Añade el id. de aplicación del DLC en la sección "apps". Por ejemplo, si tengo un juego con id. de aplicación 1000 e id. de aplicación del DLC 1010, ajustaría la sección "apps" de la siguiente manera:
"apps" { "0" "1000" "1" "1010" }
Esto garantizará que Steam compruebe la propiedad del DLC y solicitará al usuario una clave si el DLC no es propiedad de la cuenta con la que inicia sesión en Steam.

Compilación de un instalador comercial para varios id. de aplicación en un solo disco o paquete de instalación

Para crear un GM que contenga varias aplicaciones de SteamPipe, crea uno a uno el instalador cada aplicación, pero dirígelos todos a la misma carpeta de salida. Cada compilación se combinará con la imagen de instalación ya existente.

Personalización de un disco de instalación comercial

Consulta Personalización de un Gold Master para obtener más información sobre cómo personalizar tu disco de instalación comercial.

Precarga de juegos antes del lanzamiento

De forma predeterminada, todo el contenido se cifra siempre, tanto en los discos comerciales como en los servidores de contenido. Cambiar un juego al modo de precarga significa que los propietarios pueden descargar el contenido, pero permanece encriptado en el disco del usuario y no se puede jugar. Una vez que el juego se lanza oficialmente, Steam descifra el contenido precargado y el usuario puede jugar el juego.

Se recomienda pasar un juego al modo de precarga en estos casos:
  • Se envían discos comerciales con claves de producto antes de que el juego esté disponible (piratería del día cero).
  • Los juegos que ejecutan una pre-compra y son más grandes que 20 GB de tamaño.

Envía un ticket a Steam Publishing si crees que tu juego requiere una precarga.

Creación de DLC

Los DLC se compilan como un repositorio del juego base. Consulta la documentación de Contenido descargable (DLC) para obtener más información.

Solución de problemas de SteamPipe

"Login Failure: Account Login Denied Failed" when logging in via steamcmd

Causa: Probablemente Steam Guard esté impidiendo el inicio de sesión. Solución:
  • Revisa el correo electrónico asociado a la cuenta con la que intentas iniciar sesión y busca un mensaje del Soporte de Steam. Copia el código que aparece en él.
  • Ejecuta el siguiente comando en SteamCMD: set_steam_guard_code <code>
  • Re-Attempt login from steamcmd: Steam>login <buildaccount> <password>

Resolución de problemas generales de descarga

  • Reinicia el ordenador, módem, enrutador, etc.
  • Verifica la configuración del firewall. Para obtener una lista de los puertos necesarios de Steam, dirígete aquí.
  • Deshabilita temporalmente los programas antivirus o anti correo no deseado instalados en tu equipo.
  • Verifica la región de descarga de Steam en Parámetros->Descargas. Debe corresponder con tu ubicación.
  • Detén la descarga, desinstala el juego y vuelve a instalarlo (tras limpiar las cachés de manifiesto).
  • Sal de Steam y borra las carpetas appcache y depotcache en la carpeta de instalación de Steam.
  • Intenta seleccionar una región distinta y lejana como región de descarga de Steam. Puede que esto funcione si un servidor de contenidos próximo a ti está transmitiendo datos erróneos.

Mis compilaciones de Mac o Linux no instalan archivos. ¿Por qué?

Si estás probando a través de Steam la instalación de tu juego o aplicación en múltiples plataformas, puede que te encuentres con una situación en la que se instala en Windows pero no en Mac o Linux, a pesar de que el proceso SteamPipe está configurado para subir repositorios de Mac o Linux. Hay un paso que muchas veces se olvida y que consiste en añadir los repositorios alternativos al paquete que se está instalando. Sigue estos pasos para comprobar qué repositorios están incluidos en un paquete:
  1. Navega a tu página App Admin.
  2. En la sección Ver artículos asociados, haz clic en Todos los paquetes asociados, contenido descargable, demos y herramientas.
  3. Haz clic en el título del paquete que quieres descargar.
  4. Revisa la sección Depot Included.
  5. Usa Agregar/Eliminar depósitos para asegurarse de que el conjunto correcto de depósitos esté asignado al paquete.
Hay una serie de hilos de discusión sobre esto que también te pueden ayudar:

La ejecución de steamcmd.exe produce el siguiente error: "SteamUpdater: Error: Steam necesita estar en línea para actualizar. Confirma tu conexión de red e inténtalo de nuevo."

Solución: Ve a Opciones de Internet->Conexiones->Configuración Lan y marca Detectar configuraciones automáticamente.

Al ejecutar la compilación de la aplicación, se produce el siguiente error: "¡ERROR! Ha fallado "DepotBuild for scriptname.vdf". Estado = 6."

Posibles causas:
  • La cuenta no tiene los permisos requeridos por la aplicación.
    • Asegúrate de que el id. de aplicación es correcto en app_build.vdf.
    • Verifica que la cuenta de compilación tenga proper permissions para el id. de la aplicación.
  • SteamCMD no encuentra los contenidos del repositorio.
    • Asegúrate de que el valor de "contentroot" en el script es una ruta de acceso válida en relación con la ubicación del archivo de script.
    • Asegúrate de que el valor de "LocalPath" en el script depot_build es una ruta válida en relación con la ruta del script. Asegúrate de que la ruta incluye contenido.

Al ejecutar la aplicación, se produce el siguiente error: "¡ERROR! No se ha obtenido la información de la aplicación NNNNN (comprobar inicio de sesión y suscripción)".

Esto significa que Steam no puede recuperar la información de la aplicación, bien porque no existe o porque el usuario no tiene acceso a ella.
  • Asegúrate de que NNNNN es el id. de aplicación que se te asignó para la aplicación.
  • Asegúrate de que el id. de aplicación es correcto en app_build.vdf.
  • Si se trata de un nuevo id. de aplicación, asegúrate de que se ha publicado la configuración del administrador de aplicaciones de Steamworks. Las nuevas aplicaciones deben tener un directorio de instalación de SteamPipe en la pestaña de configuración, un repositorio en la pestaña correspondiente y todos los cambios publicados en la pestaña de publicación.
  • Si todo esto parece estar bien, asegúrate de que tu cuenta tiene el id. de aplicación.

"An error occurred while installing [AppName] (Invalid content configuration)" at launch time

Posibles causas:

"Código de error 15" en el momento del lanzamiento

En este caso, los servidores CEG rechazan la solicitud de CEG para el archivo .exe. Comprueba el estado de lanzamiento en la página del juego. Si no es "jugable", tendrás que solicitar claves de Steam que permitan anular el estado de lanzamiento.

"Los servidores de Steam están demasiado ocupados para atender tu petición... Código de error 2" en el momento del lanzamiento

En este caso, los servidores CEG no consiguen encontrar el ejecutable CEG que necesitan. Verifica que tengas un archivo ejecutable CEG en la pestaña CEG del administrador de tu aplicación. Haz clic en el botón "estado" para asegurarte de que está listo.

I can't remember what that steamcmd command was or how it worked

Usa el comando "Buscar" en SteamCMD para buscar cualquiera de sus comandos. Encontrará coincidencias parciales con el nombre del comando y mostrará sus sintaxis.
Steam>find build_installer ConVars: Commands: build_installer : <project file> <target folder> <beta key> <beta pwd>