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.
  • 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.

Estructura del contenido del juego - Prácticas recomendadas


SteamPipe se diseñó para agilizar tanto las descargas de las instalaciones iniciales de juegos como los parches de actualización. En general, funciona bien para una amplia gama de tipos de contenido. Sin embargo, hay varios factores importantes a considerar en relación con la optimización y a la hora de evitar situaciones que pueden causar problemas de eficiencia.

SteamPipe al principio divide cada archivo en segmentos de aproximadamente un megabyte (MB). Cada segmento se comprime y se cifra antes de cargarse en el sistema de distribución de contenido de Steam. Esos segmentos siguen estando comprimidos y cifrados hasta que los descarga el cliente, en ese momento se descifran y se descomprimen, y se colocan en la ubicación o ubicaciones de archivo correspondientes.

Cuando SteamPipe procesa una actualización para un juego existente, busca los segmentos que coincidan con la compilación anterior del juego. De esa forma, idealmente solo se convierten en «nuevos» segmentos las partes nuevas o modificadas de cada archivo, y esos nuevos segmentos se convierten en las únicas partes que necesita descargar el cliente para actualizar el juego.

Muchos motores de juegos usan archivos de «paquete» para acumular recursos del juego y mejorar los tiempos de carga, lo cual permite un acceso al disco más eficiente. En general, esto funciona bien con SteamPipe. Sin embargo, algunos sistemas de archivos de paquete usan o permiten usar comportamientos que pueden causar problemas. El efecto de estos problemas es que casi siempre las actualizaciones son mucho más grandes de lo que es preciso. También pueden hacer que la descarga sea rápida, pero el proceso de actualización sea lento, pues se requieren grandes cantidades de E/S en el disco local.

Si tu juego usa archivos de paquete, aquí tienes unas directrices generales al respecto.

  • Asegúrate de que los cambios en recursos estén lo más localizados posible dentro del archivo de paquete.
  • Evita cambiar el orden de los recursos dentro de un archivo de paquete.
  • Limita el tamaño del archivo de paquete.
  • Agrupa recursos por nivel, dominio y característica al incluirlos en los respectivos archivos de paquete, y considera la adición de nuevos archivos paquete para las actualizaciones, en lugar de modificar los ya existentes.
  • No incluyas ninguno de los nombres de archivo o las marcas de tiempo y fecha de las compilaciones y archivos de los distintos recursos.

La primera directriz de arriba se refiere al alcance del número de bytes que se cambian dentro de un archivo cuando se modifica uno de los recursos. Lo ideal es que se modifiquen los datos de ese recurso, y que aumenten o disminuyan en la misma ubicación que el archivo de paquete. SteamPipe solo va a crear nuevos segmentos para las porciones del archivo que contengan los datos del recurso. No obstante, todos los archivos de paquete necesitan también una especie de índice para que el motor encuentre los datos del recurso. La estructura de este índice puede tener un impacto significativo en la eficiencia de los parches de SteamPipe. Lo ideal es que haya un índice o una tabla de contenido en forma de árbol cerca del principio o fin del archivo. Dado que otros recursos pueden cambiar su posición en bytes dentro del archivo, sus entradas en el índice también cambiarán. En esa situación, SteamPipe creará nuevos segmentos para los datos de recursos modificados y para las porciones modificadas del índice.

Sin embargo, hemos visto en algunos motores de juego que la información del índice se reparte por todo el archivo. O lo que es peor, usa valores absolutos para la dirección relativa (byte-offset, en inglés). Así que si un recurso en el byte 3450 aumenta de tamaño 8 bytes, entonces los valores de la dirección relativa para todos los recursos que siguen en ese archivo serán distintos. A pesar de que cada valor de dirección relativa tiene un tamaño de solo 4 u 8 bytes, el cambio a un número de 8 bytes hará que el nuevo segmento creado por SteamPipe tenga un tamaño de 1 MB. Esto puede hacer estragos si se cambian incluso unos pocos recursos menores en un archivo de paquete, pues eso hace que los clientes tengan que descargar más de la mitad del archivo completo para realizar la actualización. Si sabes o sospechas que la estructura de tu archivo de paquete causa este problema, por favor, ponte en contacto con tu representante de Valve de forma inmediata. Tenemos un algoritmo de compilación alternativo que puede ayudarte a mitigar el problema, aunque tiene sus desventajas.

Además, SteamPipe no tiene información sobre los límites entre recursos dentro de un archivo de paquete. Si se cambia el orden de los recursos inferiores a un megabyte, lo más probable es que no detecte el cambio, ya que los segmentos de 1 MB establecidos anteriormente ya no estarán presentes en el archivo. Así que, si en el proceso de crear una actualización para tu juego, quieres optimizar los tiempos de carga ajustando el orden de los recursos dentro del archivo de paquete, ten en cuenta el hecho de que eso puede hacer que la descarga de esa actualización sea muy grande. Recomendamos que se haga esto únicamente si ofrece mejoras de rendimiento significativas.

A continuación, para actualizar el archivo de paquete en el dispositivo cliente, SteamPipe crea una nueva versión junto a la versión anterior. Cuando se acaban de generar todos los archivos, realiza el «commit» de la actualización borrando los archivos viejos e introduciendo en su lugar los nuevos. Esto implica que para hacer una actualización de un archivo de paquete de 25 GB, SteamPipe siempre crea un archivo nuevo también de 25 GB. Aunque la actualización solo requiera 10 bytes de cambios para ese archivo, SteamPipe tendrá que copiar casi el total de 25 GB del archivo viejo al nuevo. Dependiendo del hardware de almacenamiento del cliente, esto puede convertirse en un proceso muy lento. Por esa razón recomendamos hacer las dos cosas siguientes.

Primero, limitar el tamaño de los archivos de paquete. Tal vez uno o dos GB es ya suficientemente grande. Más que suficiente para permitir una lectura de disco eficiente al cargar el juego.

Segundo, limitar lo suficiente el volumen de recursos dentro de un archivo de paquete individual. Por ejemplo, restringirlo a un único nivel del juego o a una característica desbloqueable. De este modo las actualizaciones que se enfocan en partes específicas de tu juego no hacen que se copien datos de otras partes del juego en el equipo cliente. Además, las funcionalidades, niveles, etc., que se añadan pueden —y probablemente deberían— colocarse en sus propios archivos de paquete nuevos. Los clientes que descarguen esta actualización conseguirán una descarga más simple de los archivos nuevos y evitarán los problemas mencionados arriba con las modificaciones del archivo de paquete.

En caso de duda, puedes usar una herramienta para encontrar diferencias en binarios locales como Beyond Compare y comparar versiones de tus archivos de paquete. Verifica que las diferencias que se muestran son del tamaño que esperabas en los recursos cambiados y que no haya docenas o cientos de cambios menores esparcidos por todo el archivo. Si lo que ves no es lo que esperabas, comprueba la configuración de tu herramienta de archivos de paquete.

Compresión: puesto que Steam comprime todos los datos para cargarlos, almacenarlos y descargarlos, normalmente no recomendamos comprimir los archivos de paquete. Sin embargo, si te preocupa el tamaño en disco de tu juego, tal vez quieras comprimir el archivo de paquete. Funcionará con SteamPipe siempre que cumplas los criterios mencionados anteriormente. Concretamente, deberías asegurarte de que, en la medida de lo posible, la compresión se hace por recurso. Si la compresión cruza los límites de los recursos, los cambios se esparcirán y los clientes tendrán que descargar más datos de los necesarios.

Cifrado: suele ser innecesario, al igual que la compresión, y conllevar riesgos similares a los mencionados anteriormente.

Al seguir estas reglas, se reduce el tamaño de los parches y solo es necesario descargar el nuevo contenido. Los clientes te lo agradecerán y podrás aumentar la calidad de tus productos produciendo más actualizaciones.

Si sospechas que los paquetes de tu juego no interactúan 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.

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 vídeo 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 la entrega de contenido. 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 esas diferencias o deltas. Esto hace que las transferencias tanto de los desarrolladores como de los usuarios sean más pequeñas y más rápidas. La mayoría de los asociados descubrirán que no es necesario usar un 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 sección Administrar tu cuenta de Steamworks de la documentación. Un ejemplo del aspecto que presentaría esta cuenta sería:

create_build_account.png

Configuración inicial de nuevas aplicaciones de SteamPipe

Sigue estos pasos para configurar nuevas aplicaciones de SteamPipe:
  1. Encuentra el id. de tu aplicación (puedes verlo seleccionando la aplicación en tu página principal en Steamworks).
  2. Ve a la página de ajustes generales de instalación de tu aplicación.
  3. Define al menos una opción de inicio (la ruta y, opcionalmente, los argumentos necesarios para iniciar el juego). Pon el cursor sobre los (?) para obtener más información acerca de cada campo.

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

    updatedlaunchoptions_3.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 «Todos los idiomas» a menos que se trate de un repositorio específico de idioma.
    3. Deja el sistema operativo en «Todos los sistemas operativos» a menos que se trate de un repositorio específico de sistema operativo (si la aplicación es un todo en uno o es solo para PC o solo para Mac, debe dejarse como «Todos los sistemas operativos»). Especifícalo solo para repositorios de juegos específicos de sistema operativo.
    4. Haz clic en Añadir nuevo repositorio para crear repositorios adicionales.
    5. Haz clic en Guardar 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 «Developer Comp» que se concede automáticamente a las cuentas que figuran en tu grupo de editor.
    Puedes añadir los nuevos repositorios a ese paquete (o a otros paquetes que deban tenerlos) en la página de Paquetes y DLC asociados.
Nota: Si el ejecutable está en una subcarpeta de la carpeta de instalación principal, añade el nombre de la subcarpeta en el campo Ejecutable. No utilices barras o puntos iniciales.
Nota de plataforma: Como se muestra más arriba, las aplicaciones de macOS pueden iniciarse especificando un paquete de aplicación (Game.app) o un script/binario (Game.app/Contents/MacOS/Game). En general se prefiere el formato del lote de aplicaciones si es posible, dado que permite que macOS determine de forma más precisa los parámetros de lanzamiento en la forma en la que lo haría si se lanzase manualmente fuera de Steam.

Un caso de esta situación a tener en cuenta es que las aplicaciones que actualmente se lanzan mediante un lote de aplicaciones en dispositivos Apple Silicon lanzarán la mejor arquitectura disponible en la aplicación, mientras que los lanzamientos directos de binarios usarán la misma arquitectura que el proceso de Steam (actualmente x86_64).

Configuración del SDK para cargas a SteamPipe

Descarga y descomprime la versión más reciente del SDK de Steamworks en el equipo en el que vayas a cargar 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 repositorios.
  • 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 activar SteamCMD en macOS, debes completar los siguientes pasos:
  1. En Terminal, ve a la carpeta tools\ContentBuilder\builder_osx.
  2. Ejecuta chmod +x steamcmd.
  3. Introduce bash ./steamcmd.sh.
  4. SteamCMD se ejecutará, se actualizará a la compilación más reciente y te dejará en el símbolo del sistema o prompt de SteamCMD.
  5. Teclea «exit» y pulsa Intro para salir del símbolo del sistema.
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.

Creación de 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. El archivo .zip incluye instrucciones adicionales para ponerse en marcha.

Aunque decidas utilizar la herramienta de la interfaz gráfica de usuario, 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 solo necesitamos un único 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 ids. de aplicación y de repositorio de tu juego según sea necesario. 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. Si el inicio de sesión falla debido a Steam Guard, comprueba si recibiste un código de Steam Guard por correo electrónico y ejecuta steamcmd como: steamcmd.exe "set_steam_guard_code <code>" e inténtalo de nuevo. 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 cuya imagen se cambia con frecuencia, deberías incluir el archivo config en la imagen para que no se te solicite un código de Steam Guard cada vez. El archivo config se encuentra en <Steam>\config\config.vdf.

Los siguientes pasos se producen durante una compilación de SteamPipe:
  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 avanzados


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 utilizada para realizar la 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 después 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 una relativa al archivo de script de compilación.
  • BuildOutput: este directorio es 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.
  • Preview: 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 del 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 de una compilación exitosa (ninguna 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.
  • Depots: 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 para cada repositorio.
  • FileMapping: asigna un solo archivo o un conjunto de ellos desde la carpeta raíz del contenido local a tu 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 ejecutarlos al iniciar cualquier aplicación que contenga este repositorio.
  • FileProperties: pone marcas especiales en un archivo:
    • 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: es 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 el uso de 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 } }

AVISO: Puedes llamar a estos scripts como quieras, pero nosotros usamos los nombres app_build_<Id. de aplicación> y depot_build_<Id. de repositorio> por razones de uniformidad. Si sabes que vas a crear aplicaciones en este equipo, tal vez sea buena idea crear subdirectorios en el directorio de scripts de cada aplicación para ayudar a organizar los scripts de compilación de cada una de ellas.

Gestión de actualizaciones

Una vez que tu aplicación se lanza al público, los clientes reciben 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 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 para 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 la cuenta de Steam que tenga el juego y todos los repositorios que quieras poner en el disco comercial. Por lo demás, la cuenta no necesita tener derechos especiales, así 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 cierto 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 informe se refiere a la «Copia de seguridad», ya que la «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 el id. de aplicación...», las imágenes de disco de instalación estará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» y ninguna tiene un tamaño superior a 640 MB, como se especifica con «disk_size_mb». Cada carpeta de disco contiene un archivo «sku.sis» y un archivo .csd y .csm para 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 un 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.
Incluye en «sku_goldmaster.txt» los ids. 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 garantiza que Steam compruebe la propiedad del DLC y solicita 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 ids. de aplicación en un solo disco o paquete de instalación

Para compilar un GM que contenga varias aplicaciones de SteamPipe, compila, uno por uno, cada instalador de 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 cifrado 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 al juego.

Se recomienda pasar un juego al modo de precarga en estos casos:
  • Cuando se envían discos comerciales con claves de producto antes de que el juego esté disponible (piratería del día cero).
  • Si se trata de juegos que ofrecen una precompra y superan los 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 crean como repositorios del juego base. Consulta la documentación de Contenido descargable (DLC) para obtener más información.

Solución de problemas de SteamPipe

«Error de inicio de sesión: el inicio de sesión de cuenta ha sido denegado» al iniciar sesión a través de 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>
  • Intenta iniciar sesión de nuevo desde 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. El nuevo sistema requiere usar el puerto 80 (HTTP) y los demás puertos de Steam que aparecen listados aquí.
  • Deshabilita temporalmente los programas antivirus o contra correo no deseado instalados en tu equipo.
  • Verifica la región de descarga de Steam en Parámetros->Descargas. Tiene que coincidir 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 la compilación se implementa 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á distribuyendo. Sigue estos pasos para comprobar qué repositorios incluye 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 pueden serte de ayuda:

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 permisos adecuados 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 «app_build» es una ruta de acceso válida a la ubicación del archivo del 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 en el script «app_build». 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 quiere decir que Steam no puede recuperar la información sobre la aplicación, bien porque no existe o bien porque el usuario no tiene acceso a la aplicación.
  • 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 de repositorios y todos los cambios publicados en la pestaña de publicación.
  • Si todo esto parece estar bien, asegúrate de que tu cuenta es la poseedora del id. de aplicación.

«Se ha producido un error al instalar [nombre de la aplicación] (configuración de contenido no válida)» en el momento del lanzamiento

Posibles causas:
  • No hay ninguna compilación definida como activa en la rama desde la que intentas instalar.
    Resolución: Define como activa una compilación en una rama yendo a https://partner.steamgames.com/apps/builds/<Id. de aplicación del juego> y selecciona esa rama en el cliente de Steam (como se describe aquí).
  • Parámetros de lanzamiento de juego no válidos.
    Resolución: Comprueba los parámetros de lanzamiento en la pestaña «Instalación» en el administrador de aplicaciones de tu juego (https://partner.steamgames.com/apps/config/<Id. de aplicación del juego>).
  • No posees los ids. de repositorio que conforman el juego.
    Resolución: Asegúrate de que se añadan los repositorios necesarios a la suscripción de desarrollo (consulta Edición de paquetes para más detalles).

«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 coincida. 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.

No recuerdo qué comando de SteamCMD era o cómo funcionaba

Usa el comando «find» en SteamCMD para buscar cualquiera de esos comandos. Buscará la correspondencia parcial con el nombre del comando y mostrará su sintaxis.
Steam>find build_installer ConVars: Commands: build_installer : <project file> <target folder> <beta key> <beta pwd>