Confira abaixo um guia de uso do SteamPipe, a ferramenta da Valve para envio de conteúdo ao Steam. Para conhecer as práticas recomendadas ao atualizar o jogo, consulte
Atualizações do jogo — Práticas recomendadas.
Introdução ao sistema de conteúdo SteamPipe
O SteamPipe é o sistema de conteúdo de jogo/aplicativo por trás do Steam. O SteamPipe inclui os seguintes recursos:
- Entrega de conteúdo rápida e eficiente.
- Ramos "beta" públicos e privados, permitindo testes de várias versões em paralelo.
- Gerenciamento de versões simples na web — envie uma nova versão ou reverta para uma versão anterior em poucos cliques.
- Visualização do tamanho de atualização de uma versão antes de colocá-la no ar.
- Compartilhamento de conteúdo entre vários aplicativos.
- Criação de discos de instalação a partir de conteúdo público ou beta.
- Jogos e aplicativos continuam disponíveis off-line mesmo se a internet cair no meio de uma atualização.
- Conteúdo sempre criptografado, e versões não ativas não podem ser vistas por usuários.
- Um Servidor de conteúdo local SteamPipe que pode ser usado durante o desenvolvimento.
AVISO: há alguns conceitos vitais para o SteamPipe. Antes de começar, consulte a documentação sobre
Aplicativos para conhecê-los melhor. Ter um conhecimento básico de como essas peças se encaixam será útil na hora de enviar o seu produto ao Steam.
Estrutura de conteúdo do jogo — Práticas recomendadas
O SteamPipe foi projetado tanto para um download inicial eficiente quanto para a aplicação eficiente de atualizações. De forma geral, ele funciona bem com uma grande variedade de estruturas de conteúdo. Contudo, há alguns pontos importantes para se ter em mente em termos de otimização e para evitar situações que podem causar ineficiência.
Aviso: caso o seu jogo use a
Unreal Engine, consulte as observações específicas para os arquivos de pacote no final desta seção.
O SteamPipe começa dividindo cada arquivo em pedaços de aproximadamente 1 megabyte (MB) cada. Depois, cada pedaço é comprimido e criptografado antes de ser enviado para o sistema de entrega de conteúdo do Steam. Eles permanecem comprimidos e criptografados até que sejam baixados por cada cliente. Só então eles são descriptografados, expandidos e colocados nos locais necessários.
Quando o SteamPipe processa uma atualização de um jogo existente, ele verifica se há pedaços idênticos aos da versão anterior do jogo. O resultado ideal disso é que apenas as partes novas ou modificadas de qualquer arquivo viram pedaços "novos", e esses pedaços novos são os únicos que um cliente precisa baixar para atualizar o jogo.
Muitas engines de jogos usam arquivos de "pacote" para agrupar os recursos do jogo e aprimorar o tempo de carregamento deles por meio de um acesso a disco mais eficiente. Em geral, essa estratégia funciona bem com o SteamPipe. Contudo, alguns sistemas de arquivos de pacote usam ou facilitam implementações que podem causar problemas. O efeito desses problemas é quase sempre atualizações muito maiores que o necessário. Eles também podem permitir um download rápido, mas uma atualização lenta por exigirem muito processamento no disco local.
Caso o seu jogo use arquivos de pacote, seguem algumas recomendações:
- Garanta que as alterações de recursos sejam localizadas o máximo possível no arquivo de pacote.
- Evite embaralhar a ordenação de recursos em um arquivo de pacote.
- Limite o tamanho de um arquivo de pacote.
- Agrupe os recursos por nível/reino/recurso, e ao lançar atualizações, faça-o com arquivos de pacote novos em vez de modificações aos arquivos existentes.
- Não inclua nomes originais de arquivos ou o horário de criação/geração de cada arquivo nos recursos.
O primeiro ponto acima refere-se ao escopo de bytes alterados em um arquivo quando um único recurso é modificado. O ideal é que os dados do recurso sejam modificados e/ou aumentem ou reduzam de tamanho na mesma posição do arquivo de pacote. Dessa forma, o SteamPipe criará pedaços novos apenas para as partes do arquivo que contenham os dados do recurso. Contudo, todos os arquivos de pacote também precisam de algum tipo de sumário (Table of Contents) para que a engine localize os dados dos recursos. A estrutura desse sumário pode ter um grande impacto na eficiência de atualizações do SteamPipe. Idealmente, há um sumário ou árvore de sumários próximo ao início ou fim do arquivo. Como outros recursos podem mudar de posição no arquivo, as suas entradas no sumário também serão alteradas. Nessa situação, o SteamPipe criará pedaços novos para os dados modificados do recurso, bem como as partes modificadas do sumário.
Contudo, observamos que algumas engines de jogos distribuem os dados do sumário pelo arquivo. Ou pior ainda: a indexação dos arquivos no sumário é feita pela posição (ou deslocamento) absoluta em bytes de cada recurso. Portanto, se um recurso que começa no byte 3.450 aumenta de tamanho em 8 bytes, as posições de todos os recursos que vêm depois dele no arquivo também mudam. Apesar de cada valor de indexação ocupar apenas 4 ou 8 bytes, uma alteração para um número de 8 bytes resultará na criação de um novo pedaço de 1 MB pelo SteamPipe. Isso pode ter resultados catastróficos, pois, mesmo ao alterar alguns recursos pequenos em um arquivo de pacote, os clientes precisarão baixar mais da metade do arquivo todo para atualizar o jogo. Caso saiba ou suspeite que a estrutura dos seus arquivos de pacote cause esse problema, entre em contato com o seu representante da Valve o mais breve possível. Temos um algoritmo alternativo de geração de versão que pode ajudar a aliviar esse problema, apesar de algumas contrapartidas.
Além disso, o SteamPipe não sabe as posições de cada recurso em um arquivo de pacote. Ao embaralhar a ordem de recursos de tamanho inferior a 1 MB, é provável que ele não detectará a reordenação, já que os pedaços de 1 MB antigos não estarão mais presentes no arquivo. Assim, caso esteja preparando uma atualização e deseje otimizar os tempos de carregamento ao reordenar os recursos no arquivo de pacote, esteja ciente de que ela poderá ter um download grande. Recomendamos fazê-lo apenas se o aumento de desempenho for significativo.
Próximo ponto: ao atualizar um arquivo de pacote no dispositivo do cliente, o SteamPipe primeiro "monta" a nova versão sem mexer na versão antiga. Apenas após montar os novos arquivos é que a atualização é de fato "aplicada", excluindo os arquivos antigos e movendo os novos para a pasta de instalação do jogo. Isso significa que, para atualizar um arquivo de pacote de 25 GB, o SteamPipe sempre montará um arquivo de 25 GB separado. Caso a atualização tenha alterado apenas 10 bytes do arquivo, o SteamPipe precisará copiar praticamente todos os 25 GB do arquivo antigo para o novo. Dependendo do tipo de armazenamento usado pelo cliente, esse procedimento pode demorar. Assim, recomendamos duas coisas:
Primeiro: limite o tamanho dos arquivos de pacote. 1 ou 2 gigabytes (GB) é mais que o suficiente para oferecer leituras eficientes dos dados em disco ao carregar o jogo.
Segundo: limite o escopo dos recursos em cada arquivo de pacote, como um arquivo por nível ou recurso destravável. Dessa forma, as atualizações focadas em partes específicas do seu jogo não fazem com que os dados de outras partes sejam copiadas na máquina do cliente. Além disso, ao adicionar novos recursos, níveis etc., o ideal é colocá-los em arquivos de pacote novos. Os clientes que baixarem essa atualização precisarão apenas baixar os arquivos novos, evitando os problemas com arquivos de pacote modificados que mencionamos acima.
Em caso de dúvida, use uma ferramenta local de comparação (
diff) binária, como Beyond Compare, para comparar as versões dos arquivos de pacote. Verifique se as diferenças exibidas são do tamanho esperado para os recursos alterados e que não há dezenas (ou mesmo centenas) de pequenas alterações espalhadas pelo arquivo. Caso veja algo inesperado, verifque as configurações da sua ferramenta de criação de arquivos de pacote.
Compressão: como o Steam comprimirá todos os dados para envio, armazenamento e download, não recomendamos o uso de algoritmos de compressão que não sejam voltados a formatos específicos nos arquivos de pacote. Contudo, caso o tamanho do jogo em disco seja uma preocupação, você ainda pode usar a compressão em arquivos de pacote. Ela funcionará com o SteamPipe, contanto que os critérios listados acima sejam seguidos. Especificamente, garanta que a compressão seja a nível de recurso na medida do possível. Qualquer compressão que cruze os "limites" dos recursos resultará em alterações dispersas e exigirá que os clientes baixem mais dados que o necessário.
Criptografia: assim como a compressão, provavelmente é desnecessária e sofre dos mesmos riscos citados acima.
Ao seguir essas diretrizes, você minimizará o tamanho das atualizações, e apenas conteúdos novos precisarão ser baixados. Os usuários ficarão gratos e você poderá melhorar a qualidade do produto ao lançar mais atualizações.
Caso você suspeite que o empacotamento do jogo não está interagindo bem com o processo de atualização do SteamPipe, entre em contato com o seu representante da Valve para que possamos ativar recursos avançados para você.
Unreal Engine — Observações especiais
Algumas das versões da Unreal Engine usam "alinhamento por preenchimento" (
padding alignment) nos recursos em arquivos de pacote, o que pode ter um grande impacto no tamanho de atualizações do SteamPipe. Esse alinhamento pode resultar no deslocamento em cascata de recursos ao gerar novas versões, especialmente ao ativar a compressão dos arquivos de pacote. Usar um alinhamento por preenchimento de 1 MB (1.048.576 bytes) ajudará a garantir que os realinhamentos desloquem os recursos por um múltiplo do mesmo tamanho do pedaço usado pelo SteamPipe na verificação de quais foram alterados.
Por exemplo, para alterar ou especificar o alinhamento por preenchimento durante o processo de "cooking" dos arquivos de pacote do jogo, você precisará alterar uma linha do arquivo
UnrealEngine/Engine/Source/Programs/AutomationTool/Win/WinPlatform.Automation.cs. Esse arquivo contém uma função chamada
GetPlatformPakCommandLine — dentro dela, altere esta linha:
string PakParams = " -patchpaddingalign=2048";
para:
string PakParams = " -patchpaddingalign=1048576 -blocksize=1048576";
Com esta alteração, você poderá ativar a compressão de arquivos de pacote sem prejudicar a otimização das atualizações do SteamPipe.
"Unreal Engine" é uma marca e/ou marca registrada da Epic nos EUA e em outros países.Videotutorial do Steamworks — Geração de versão do seu jogo no SteamPipe
O tutorial apresenta o SteamPipe e os passos para a geração da versão de um aplicativo-modelo para o Steam usando ferramentas do Steamworks.
https://www.youtube.com/watch?v=SoNH-v6aU9QVideotutorial do Steamworks — Adição de novas plataformas e idiomas
O tutorial explica como adicionar novas plataformas e idiomas ao seu jogo por meio da criação de depots no aplicativo. (Em inglês).
https://www.youtube.com/watch?v=PShS32hcingDetalhes técnicos do SteamPipe
O SteamPipe usa o protocolo HTTP para entrega de conteúdo. Como os downloads nada mais são do que tráfego web, qualquer cache HTTP externo entre servidores de usuários e do Steam aumentará a velocidade do download. Conteúdos podem ser hospedados por provedores externos de redes de entrega de conteúdo (CDNs), que podem ser facilmente adicionados à nossa rede de conteúdo. A maior parte dos firewalls voltados a usuários finais permite tráfego HTTP e não bloqueia downloads.
O SteamPipe tem um eficiente algoritmo de atualização com base em diferenças binárias (deltas), alterando apenas as partes modificadas de arquivos de conteúdo existentes. Quando o conteúdo é atualizado, apenas essas diferenças precisam ser enviadas. Ou seja, as transferências tanto do desenvolvedor quanto do usuário são menores e mais rápidas. A maioria dos parceiros acha desnecessário usar um
Servidor de conteúdo local SteamPipe, já que podem atualizar versões de forma eficiente em ramos privados.
Conta Steam para geração de versões
Antes de criar versões no Steam, você deve ter uma conta Steam na sua conta Steamworks com as permissões "Editar metadados do aplicativo" e "Publicar alterações do aplicativo no Steam". Por motivos de segurança, recomendamos que você tenha uma conta dedicada de geração de versões com apenas essas permissões. Por isso, você pode criar uma nova conta Steam em
https://store.steampowered.com/join.
Qualquer administrador da sua conta Steamworks pode adicionar uma conta Steam e conceder as permissões necessárias. Mais informações sobre esse processo estão disponíveis na documentação
Gerenciamento da conta do Steamworks. Confira abaixo um exemplo de uma conta desse tipo:

Aviso: se a conta Steam for usada para colocar versões no ar para um aplicativo lançado, ela precisará ser associada a um número de telefone ou ao aplicativo móvel do Steam. Eles são usados para confirmar a ação. Além disso, caso algum dado sensível (como e-mail ou número de telefone) da conta seja alterado, será necessário aguardar três dias antes de usá-la para colocar uma versão no ar para um aplicativo lançado. Essas restrições existem para impedir que contas invadidas possam gerenciar as versões lançadas do seu aplicativo.
Configuração inicial para novos aplicativos SteamPipe
Siga os passos abaixo para configurar novos aplicativos SteamPipe:
- Encontre o AppID do seu aplicativo (para isso, selecione o aplicativo na página inicial do Steamworks).
- Acesse a página de configurações gerais de instalação do aplicativo.
- Defina pelo menos uma opção de inicialização (o diretório e, opcionalmente, os argumentos necessários para iniciar o jogo). Passe o mouse sobre o (?) para obter mais informações sobre cada campo.
O exemplo abaixo mostra cinco opções de inicialização: duas para Windows, duas para macOS e uma para Linux.
A terceira opção de inicialização será exibida no Windows apenas caso o usuário também possua o conteúdo adicional especificado.

- Acesse a página de depots e adicione depots conforme necessários para o aplicativo. Um depot padrão já pode ter sido configurado para o aplicativo:
- Clique no depot padrão e altere o nome para um adequado e reconhecível (como "Conteúdo base" ou "Conteúdo para Windows").
- Deixe o idioma como [Todos os idiomas] a não ser que seja um depot específico para um idioma.
- Deixe o SO como [Todos os SOs] a não ser que seja um depot específico para um SO (se o aplicativo for "tudo em um" ou exclusivo para um SO, deixe como [Todos os SOs]). Altere o valor apenas para depots do jogo específicos para um SO.
- Clique em Adicionar novo depot para criar depots adicionais.
- Clique em Salvar alterações para salvar quaisquer alterações realizadas.
- Uma vez definidos, publique as alterações a partir da página de publicação.
- Os depots recém-criados deverão ser inclusos em um pacote para que tenha acesso aos mesmos. Cada jogo no Steam terá um pacote complementar de desenvolvimento, que é concedido automaticamente às contas listadas no grupo da distribuidora.
Adicione os novos depots ao pacote (e/ou outros pacotes que devem tê-los) pela página Pacotes e conteúdos adicionais associados.
Aviso: se o executável estiver em uma subpasta da pasta principal de instalação, adicione o nome da subpasta no campo "Executável". Não adicione barras ou pontos no início.
Aviso sobre plataformas: como indicado acima, aplicativos para macOS podem ser inicializados ao especificar um conjunto de aplicativo (Jogo.app) ou um script/binário (Jogo.app/Contents/MacOS/Jogo). No geral, recomendamos usar o formato de conjunto de aplicativo, se possível, pois permite que o macOS determine os parâmetros de inicialização com maior precisão, como se tivesse sido iniciado manualmente fora do Steam.
Um exemplo disso é que, atualmente, aplicativos inicializados por um conjunto de aplicativo em dispositivos com Apple Silicon usarão a melhor arquitetura disponível, enquanto inicializações pelo binário usarão a mesma arquitetura do processo do Steam (que atualmente é a x86_64).
Configuração do SDK para envios pelo SteamPipe
Baixe e extraia a versão mais recente do SDK do Steamworks na máquina que você usará para fazer os envios das versões.
As ferramentas do SteamPipe podem ser encontradas dentro do SDK na pasta
tools, que contém dois subdiretórios relevantes.
O conteúdo do jogo e as ferramentas da versão do SteamPipe deverão ficar no diretório
ContentBuilder, que contém os seguintes subdiretórios:
- builder — Inicialmente, contém apenas o arquivo steamcmd.exe, que é a versão em linha de comando do Steam.
- builder_linux — A versão do steamcmd para Linux.
- builder_osx — A versão do steamcmd para macOS.
- content — Contém todos os arquivos do jogo que serão colocados em depots.
- output — Será o local com os relatórios, cache de pedaços e saída intermediária. AVISO: esta pasta pode ser excluída ou esvaziada se preferir, mas o envio subsequente será mais longo.
- scripts — Onde os scripts de construção de depots devem ficar.

Recomendamos que você execute steamcmd.exe diretamente na pasta "builder" da plataforma uma vez para inicializar o sistema de geração de versão. Isso deve preencher o diretório de geração de versão com todos os arquivos necessários para gerar depots.
O diretório
ContentServer contém as ferramentas para executar o seu próprio
Servidor de conteúdo local SteamPipe caso deseje fazer isso.
SteamCmd no macOS
Para ativar o SteamCmd no macOS, siga os passos abaixo:
- No terminal, navegue até a pasta tools/ContentBuilder/builder_osx.
- Execute "chmod +x steamcmd".
- Digite "bash ./steamcmd.sh".
- O SteamCmd será executado e atualizado para a última versão; o prompt do SteamCmd será exibido.
- Digite "exit" e pressione "Return" para fechar o prompt.
Você pode seguir o resto da documentação (substituindo caminhos conforme apropriado) para criar arquivos de depot e de configuração de aplicativos para enviar o seu conteúdo ao Steam.
Criação de arquivos de configuração de versão no SteamPipe
Para enviar arquivos para o seu aplicativo com o SteamPipe, é preciso criar scripts que descrevam a sua versão e cada depot incluso. Os exemplos de script aqui mostrados estão contidos na pasta
Tools\ContentBuilder\scripts do SDK do Steamworks.
Ferramenta gráfica do SteamPipe
Caso você esteja executando em Windows e prefira que uma ferramenta gráfica ajude você a criar esses arquivos e a enviar as suas versões, é possível usar o SteamPipeGUI, disponível na pasta "tools" do SDK do Steamworks. O arquivo ZIP inclui instruções adicionais de como iniciar.
Se escolher usar a ferramenta gráfica, recomendamos que leia as seções a seguir para se familiarizar com o funcionamento do SteamPipe.
Script de geração de versão de exemplo
Confira abaixo o script de geração de versão mais básico de todos. No exemplo, é possível ver um jogo (AppID 1000) com um depot (DepotID 1001). A ideia é enviar todos os arquivos a partir da pasta de conteúdo e das suas subpastas. Para tal, basta um script de geração de versão simples. Confira o arquivo
"simple_app_build.vdf", que acompanha o SDK (a reprodução abaixo foi traduzida onde permitido para facilitar a compreensão):
"AppBuild"
{
"AppID" "1000" // AppID do jogo
"Desc" "Script simples de geração de versão" // descrição interna da versão
"ContentRoot" "..\conteudo\" // pasta-raiz de conteúdo, caminho relativo à localização deste arquivo
"BuildOutput" "..\saida\" // pasta de saída, que armazena relatórios (logs) e arquivos de cache
"Depots"
{
"1001" // DepotID associado
{
"FileMapping"
{
"LocalPath" "*" // todos os arquivos da pasta-raiz de conteúdo
"DepotPath" "." // mapeado à raiz do depot
"recursive" "1" // incluir todas as subpastas
}
}
}
}
Ajuste o AppID e o DepotID do jogo conforme necessário. Para dar início à geração da versão, é preciso executar o SteamCmd passando alguns parâmetros:
tools\ContentBuilder\builder\steamcmd.exe +login <nome-de-usuario> <senha> +run_app_build ..\scripts\simple_app_build.vdf +quit
Os passos abaixo ocorrem durante uma geração de versão do SteamPipe:
- O steamcmd.exe se atualizará para a versão mais recente.
- O steamcmd.exe inicia a sessão no backend do Steam usando a conta Steam geradora de versões.
- O início da geração de versão é registrado junto ao MDS (Master Depot Server, ou Servidor Mestre de Depots), o que garantirá que o usuário tem as permissões corretas para modificar o aplicativo.
- Para cada depot incluso na versão do aplicativo, uma lista de arquivos é gerada com base nos arquivos na pasta de conteúdo e nas regras de filtragem definidas no arquivo de script de geração de versão do depot.
- Cada arquivo é lido e dividido em pedaços de 1 MB cada. Se o depot já tiver sido criado, esse particionamento preservará o máximo de pedaços inalterados possível.
- Novos pedaços são comprimidos, criptografados e enviados ao MDS.
- Um manifesto final é gerado para a versão do depot; cada manifesto é identificado por um ID de 64 bits.
- Uma vez processados, o MDS finaliza a geração da versão do aplicativo e a associa a um ID de versão global.
- Quando a geração da versão for concluída, haverá arquivos *.csm e *.csd na pasta de saída. Esses arquivos são temporários e podem ser excluídos, mas agilizam a geração de versões futuras.
Quando a geração da versão estiver concluída, é possível vê-la na página de versões do aplicativo. Neste caso, seria
https://partner.steamgames.com/apps/builds/1000. Na página, é possível colocar a versão no ar a partir do ramo "default" ou qualquer ramo beta, e os usuários poderão baixar a atualização alguns minutos mais tarde.
Scripts avançados de geração de versão
Se o seu aplicativo tiver muitos depots com regras de mapeamento de arquivos complexas, é possível criar um script de geração de versão para cada depot referenciado por um script de geração de versão do aplicativo. O primeiro passo é conferir os parâmetros disponíveis no script de versão do aplicativo:
-
AppID — O AppID do jogo. A conta Steam responsável pelo envio precisa da permissão "Editar metadados do aplicativo".
-
Desc — A descrição, visível apenas por você na seção "Suas versões" do painel de administração do aplicativo. Ela pode ser alterada pela mesma página após o envio de uma versão.
-
ContentRoot — A pasta raiz dos arquivos do jogo. Pode ser um caminho absoluto ou relativo ao arquivo de script de geração de versão.
-
BuildOutput — Diretório que conterá os relatórios da geração de versão, manifestos de depots, caches de pedaços e arquivos intermediários de saída. Para um melhor desempenho, use uma unidade de armazenamento separada para a saída. Assim, a carga de E/S é compartilhada entre as unidades, deixando que a unidade com a raiz de conteúdo cuide das requisições de leitura e a unidade de saída cuide das requisições de escrita.
-
Preview — Este tipo de geração apenas salva o registro da saída e os manifestos dos arquivos na pasta de saída. A geração de versões "preview" é uma boa forma de experimentar com scripts de envio e garantir que os mapeamentos, filtros e propriedades estão corretos.
-
Local — Caminho até a pasta htdocs do seu Servidor de conteúdo local SteamPipe (SCL). Versões para o SCL armazenam o conteúdo apenas no seu servidor HTTP e permitem o teste da instalação do jogo pelo cliente Steam.
-
SetLive — Nome do ramo beta no qual a versão será colocada no ar automaticamente após uma geração de versão bem-sucedida. Deixe vazio para não colocar no ar em nenhum ramo automaticamente. Esteja ciente de que não é permitido por uma versão no ar no ramo "default" automaticamente. Isto deve ser feito pelo painel de administração do aplicativo.
-
Depots — Esta seção contém todos os mapeamentos, filtros e propriedades de arquivos de cada depot ou uma referência a um arquivo de script separado para cada depot.
O script de versão do aplicativo
"app_build_1000.vdf" está usando todas as opções:
"AppBuild"
{
"AppID" "1000" // AppID do jogo
"Desc" "Descrição da versão" // descrição interna da versão
"Preview" "1" // fazer uma construção de versão preview, sem enviar nada aos servidores
"Local" "..\..\ServidorConteudo\htdocs" // armazenar conteúdo no servidor de conteúdo local em vez de enviá-lo para o Steam
"SetLive" "TesteAlfa" // colocar versão no ar em um ramo beta
"ContentRoot" "..\conteudo\" // pasta raiz de conteúdo, caminho relativo à localização deste arquivo
"BuildOutput" "D:\saida_geracao\" // armazenar cache da construção e arquivos de relatório (log) em uma unidade diferente para um melhor desempenho
"Depots"
{
// as instruções de mapeamento de arquivos para cada depot estão em arquivos de script separados
"1001" "depot_build_1001.vdf"
"1002" "depot_build_1002.vdf"
}
}
O script de geração da versão do aplicativo faz referência a dois arquivos que especificam todos os mapeamentos e propriedades de arquivos. As instruções a seguir estão disponíveis em um script de geração de versão de depot (e também caso a seção esteja inclusa diretamente no script da versão do aplicativo).
-
DepotID — O ID do depot desta seção.
-
ContentRoot — Permite substituir a pasta raiz de conteúdo (ContentRoot) do script de construção do aplicativo para o depot específico.
-
FileMapping — Mapeia um arquivo ou conjunto de arquivos da raiz de conteúdo local para o depot. Pode haver mais de um mapeamento que adiciona arquivos ao depot. O parâmetro LocalPath é um caminho relativo à pasta raiz de conteúdo e pode conter coringas, como "?" ou "*". O mapeamento também será aplicado a arquivos correspondentes em subpastas se a opção Recursive estiver ativada. O parâmetro DepotPath especifica onde, no depot, os arquivos selecionados devem aparecer (use "." para não usar um mapeamento especial).
-
FileExclusion — Exclui arquivos mapeados. Também pode conter coringas, como "?" ou "*".
-
InstallScript — Marca um arquivo como um script de instalação, assinando o arquivo durante o processo de geração de versão. O cliente Steam o executará ao iniciar qualquer aplicativo que contenha este depot.
-
FileProperties — Marca um arquivo com indicadores especiais:
-
userconfig — Este arquivo é modificado pelo usuário ou pelo jogo. Não deve ser sobrescrito por uma atualização, nem será substituído durante a verificação de arquivos se for diferente da versão anterior.
-
versionedconfig — Similar ao userconfig, mas se o arquivo for atualizado no depot, este sobrescreverá o arquivo local quando o jogo do usuário for atualizado. Só atualize o arquivo no depot quando houver uma alteração necessária no formato ou uma correção a ser feita.
O script de geração de versão do depot
depot_build_1002.vdf ilustra o uso de todas as opções:
"DepotBuild"
{
"DepotID" "1002"
"ContentRoot" "C:\conteudo\depot1002" // substitui o valor de ContentRoot do script de geração de versão do aplicativo
"FileMapping"
{
// todos os arquivos e pastas-fonte na pasta ".\bin" serão mapeados para a pasta ".\executaveis" do depot
"LocalPath" "bin\*"
"DepotPath" "executaveis\"
"Recursive" "1" // incluir todas as subpastas
}
"FileMapping"
{
// sobrescreve arquivos de áudio da pasta \\audio com versões em alemão
"LocalPath" "idiomas\alemao\audio\*"
"DepotPath" "audio\"
}
"FileMapping"
{
// copiar script de instalação da versão alemã para a pasta raiz do depot
"LocalPath" "idiomas\alemao\script_instalacao_alemao.vdf"
"DepotPath" "."
}
"FileExclusion" "bin\servidor.exe" // excluir este arquivo específico
"FileExclusion" "*.pdb" // excluir todos os arquivos de extensão .PDB, não importa a pasta
"FileExclusion" "bin\ferramentas*" // excluir todos os arquivos da pasta bin\ferramentas\
"InstallScript" "idiomas\alemao\script_instalacao_alemao.vdf"
"FileProperties"
{
"LocalPath" "bin\configuracao.cfg"
"Attributes" "userconfig" // este arquivo será modificado em tempo de execução
}
}
AVISO: você pode dar os nomes que quiser aos scripts, mas, por motivos de consistência, usamos
app_build_<AppID> e
depot_build_<DepotID>. Caso você saiba que gerará versões de aplicativos nesta máquina, pode ser uma boa ideia criar subdiretórios nos diretórios atuais dos scripts para cada aplicativo, auxiliando assim na organização dos scripts de geração de versão.
Uso do SteamPipe em um ambiente de Integração ou Entrega Contínua (CI/CD)
Para configurar o steamcmd em um ambiente de integração contínua ou em uma máquina (virtual) que será frequentemente restaurada a partir de uma imagem, será necessário incluir o arquivo de configuração que contém o
token de autenticação. Sigas os passos abaixo para garantir que o
token de autenticação seja salvo corretamente:
- Execute o comando "steamcmd.exe +login <nome de usuário>" na máquina que será usada para gerar as versões.
- Informe a senha e o código do Steam Guard da conta.
- Digite "info", e verifique na saída se há a linha "Logon state: Logged On".
- Digite "quit".
- A cada execução futura, não informe a senha. Simplesmente execute "steamcmd.exe +login <nome de usuário>".
- Certifique-se de que o arquivo de configuração armazenado em <Steam>\config\config.vdf seja salvo e preservado entre execuções, pois ele pode ser atualizado após um início de sessão bem-sucedido.
AVISO: caso inicie a sessão novamente e informe a senha da conta, será necessário informar o código do Steam Guard.
Gerenciamento de atualizações
Após lançar o aplicativo para os usuários, eles terão acesso à versão disponibilizada no ramo "default" (padrão). Aconselhamos que você sempre teste novas versões antes de colocá-las no ar e disponibilizá-las para os usuários. Para mais informações sobre como fazer isso com sucesso, consulte
Testes no Steam.
Depuração de problemas com a geração de versão
Caso a geração da versão não seja bem-sucedida, você encontrará mais informações no diretório de saída, não no console onde o script de geração de versão foi executado. A maioria das informações sobre erros pode ser encontrada em arquivos *.log.
Você pode usar esses comandos do cliente Steam e arquivos de cliente na depuração:
-
"app_status [appid]" — Exibe o estado atual do aplicativo no cliente.
-
"app_info_print [appid]" — Exibe a configuração atual do Steamworks para o jogo (depots, opções de inicialização etc.).
-
"app_config_print [appid]" — Exibe a configuração do usuário atual para o jogo (idioma atual, diretório de instalação etc.).
-
file "logs\content_log.txt" — Lista todas as operações e erros do SteamPipe salvas em relatório.
-
file "steamapps\appmanifest_[appid].acf" — Exibe o estado atual de instalação do aplicativo (arquivo no formato KeyValues da Valve).
Geração de discos de instalação de varejo
Para criar discos de instalação para jogos SteamPipe, é preciso criar um arquivo de projeto da versão.
No exemplo a seguir, o arquivo SKU é chamado "sku_goldmaster.txt":
"sku"
{
"name" "Instalador de Testes"
"appid" "202930"
"disk_size_mb" "640"
"included_depots"
{
"1" "202931"
"2" "202932"
}
}
Confira abaixo algumas dicas interessantes:
(Opcional) Criação de um instalador a partir de um ramo beta
O procedimento descrito acima criará um instalador com base no ramo "default". Caso precise criar um instalador com base um ramo beta, você precisa primeiro criar um ramo beta de nome "baseline". Então use o comando a seguir para construir a partir do ramo "baseline":
build_installer <PastaDoProjeto> <PastaDeDestino> <NomeDoRamoBeta> <SenhaDoRamoBeta>
exemplo no prompt do steamcmd: build_installer sku_goldmaster.txt "D:\discos_varejo" baseline senha_super_secreta
exemplo ao usar um script: steamcmd.exe +login nome_de_usuario senha_da_conta +build_installer "..\Versao\SkuDadosJogo.txt" c:\destino nome_do_beta senha_do_beta +exit
Instalação de conteúdo adicional a partir de um instalador de disco
Em algumas circunstâncias, você pode desejar criar um instalador que inclua os seus pacotes de conteúdo adicional. Nesses casos, o processo para criar o instalador requer apenas algumas poucas mudanças.
Em "sku_goldmaster.txt", inclua os AppIDs do conteúdo adicional na seção "included_depots". Quando tiver concluído o processo "build_installer", encontre o arquivo sku.sis gerado para o instalador e abra-o com um editor de texto.
Adicione o AppID do conteúdo adicional na seção "apps". Por exemplo: caso o AppID do jogo seja 1000 e o AppID do conteúdo adicional seja 1010, é preciso ajustar a seção "apps" conforme descrito abaixo:
"apps"
{
"0" "1000"
"1" "1010"
}
Isso fará com que o Steam verifique a titularidade do conteúdo adicional e solicite que o usuário informe um código de produto caso a conta usada para iniciar a sessão no Steam não possua o conteúdo adicional.
Criação de um instalador para mais de um AppID em um mesmo disco/pacote de instalação
Para gerar um GM contendo diversos aplicativos SteamPipe, crie instaladores de aplicativos individualmente, mas direcione-os para a mesma pasta de saída. Cada versão será combinada com a imagem de instalação existente.
Personalização de um disco de instalação
Consulte
Personalização de um Gold Master para mais detalhes sobre a personalização do disco de instalação.
Pré-carregamento de jogos antes do lançamento
Por padrão, todo o conteúdo é criptografado em todos os discos e servidores de conteúdo. Alterar o modo do jogo para "pré-carregar" significa que contas que o possuem poderão baixar o conteúdo, mas em um formato criptografado no disco do usuário, sem poder ser jogado. Quando o jogo for oficialmente lançado, o Steam descriptografará o conteúdo pré-carregado para que o usuário possa jogá-lo.
Alterar o modo de jogo para "pré-carregar" é recomendado nos seguintes casos:
- Distribuição de discos com códigos de produto antes do jogo ser lançado (evitando a pirataria antes do lançamento).
- Jogos na pré-venda que ultrapassem 20 GB.
Abra um chamado junto à equipe de distribuição do Steam caso você ache que o jogo precisa oferecer pré-carregamento.
Geração de versões de conteúdos adicionais
Cada conteúdo adicional é gerado como um depot do jogo base. Consulte a documentação sobre
Conteúdo adicional (DLC) para mais informações.
Solução de problemas com o SteamPipe
"Login Failure: Account Login Denied Failed" ("Erro ao iniciar a sessão: acesso negado à conta) ao iniciar a sessão pelo SteamCmd
Causa: provavelmente, o Steam Guard está impedindo o início da sessão. Solução:
- Verifique se há uma mensagem do Suporte Steam (Steam Support) no e-mail associado à conta. Copie o código contido na mensagem.
- Execute o comando a seguir no steamcmd:
set_steam_guard_code <codigo>.
- Tente iniciar a sessão pelo steamcmd novamente:
Steam>login <nome-de-usuário> <senha>.
Solução geral de problemas com downloads
- Reinicie o computador, modem, roteador etc.
- Verifique as configurações do firewall. O novo sistema usa a porta 80 (HTTP) e todas as outras portas do Steam listadas aqui.
- Desative programas antivírus e bloqueadores de spam temporariamente.
- Verifique a região de download do Steam em Configurações —> Downloads. Deve ser igual ao seu local.
- Interrompa o download, desinstale e reinstale o jogo (para limpar os caches de manifesto).
- Saia do Steam e exclua as pastas appcache e depotcache na sua pasta de instalação do Steam.
- Tente configurar a região de download do Steam para um local mais longe. Pode funcionar se um servidor de conteúdo próximo estiver enviando dados corrompidos.
As minhas versões para macOS e/ou Linux não estão instalando arquivo algum. Por quê?
Caso esteja testando a instalação do jogo ou aplicativo em diversas plataformas pelo Steam, pode acontecer de a versão ser instalada no Windows, mas não instalar arquivos no macOS ou Linux apesar de o seu processo do SteamPipe estar configurado para enviar depots para macOS e/ou Linux. Há um passo que é facilmente ignorado e envolve a adição de depots alternativos ao pacote sendo gerado. É possível verificar quais depots estão inclusos em um pacote através dos seguintes passos:
- Acesse a página de Administração do aplicativo.
- Na seção "Ver itens associados", clique em Todos os pacotes, conteúdos adicionais, demonstrações e ferramentas associados.
- Clique no título do pacote que está tentando baixar.
- Revise a seção Depots incluídos.
- Use o botão Adicionar/Remover depots para garantir que o conjunto correto de depots esteja associado ao pacote.
Há diversos tópicos de discussão sobre o assunto que também podem ajudar (em inglês):
Executar steamcmd.exe resulta no erro a seguir: "SteamUpdater: Erro: O Steam precisa estar on-line para atualizar. Certifique-se de que está conectado à internet e tente novamente."
Solução: acesse
Opções da Internet →
Conexões →
Configurações da LAN e assinale a opção
Detectar automaticamente as configurações.
Executar o gerador de versão de aplicativo resulta no erro a seguir: "ERROR! Failed 'DepotBuild for scriptname.vdf' - status = 6." (Erro! Falha com 'DepotBuild for scriptname.vdf' — estado = 6.)
Possíveis causas:
- Conta sem permissões para o aplicativo:
- Confirme que o AppID está correto no arquivo app_build.vdf.
- Confirme que a conta usada possui as permissões corretas para o AppID.
- O steamcmd não encontrou o conteúdo do depot:
- Confirme que o valor da chave "contentroot" no script app_build é um caminho válido relativo ao local do arquivo do script.
- Confirme que o valor da chave "LocalPath" no script depot_build é um caminho válido relativo ao local do arquivo do script app_build. Confirme que o diretório contém conteúdo.
Executar o gerador de versão de aplicativo resulta no erro a seguir: "ERROR! Failed to get application info for app NNNNN (check login and subscription)" (ERRO! Falha ao recuperar dados do AppID NNNNN (verifique credenciais e assinatura))
Isso significa que o Steam não pode recuperar os dados sobre o aplicativo porque eles não existem ou porque o usuário não tem acesso ao aplicativo.
- Confirme que NNNNN é o AppID associado ao aplicativo.
- Confirme que o AppID está correto no arquivo app_build.vdf.
- Se for um AppID novo, confirme que as configurações da página de administração de aplicativo no Steamworks foram publicadas. Novos aplicativos devem ter um diretório de instalação do SteamPipe e um depot. Ambos podem ser encontrados na página "Editar configurações do Steamworks", o diretório de instalação fica em "Instalação" > "Instalação: geral", e os depots em "SteamPipe" > "Depots". Todas as alterações devem ser publicadas pela aba "Publicar".
- Se tudo estiver OK, confirme que a sua conta possui o AppID informado.
"Ocorreu um erro durante a instalação de [nome do aplicativo] (configuração de aplicativo inválida)" ao iniciar o jogo
Possíveis causas:
- Não há versão associada ao ramo que você está tentando usar para a instalação.
Solução: coloque a versão no ar em um ramo em https://partner.steamgames.com/apps/builds/<AppID do jogo> e então selecione esse mesmo ramo no cliente Steam (como descrito aqui).
- Opções de inicialização inválidas.
Solução: verifique as opções de inicialização na aba "Instalação" da página de administração do aplicativo: https://partner.steamgames.com/apps/config/<AppIDdoJogo>.
- Você não possui os depots que compõem o jogo.
Solução: confirme que os depots necessários foram adicionados à assinatura de desenvolvimento (consulte Edição de pacotes para mais detalhes).
Não me lembro do nome ou do funcionamento de um comando do steamcmd...
Use o comando "find" no steamcmd para buscar os comandos disponíveis. A busca realiza correspondências parciais do nome do comando e listará a sintaxe que deve ser usada.
Steam>find build_installer
ConVars:
Commands:
build_installer : <project file> <target folder> <beta key> <beta pwd>