Pacotes de exportação, patches e mods

Casos de uso

Muitas vezes, há a necessidade de adicionar funcionalidade ao jogo depois de ter sido instalado.

Exemplos disso incluem...

  • Conteúdo para download: a capacidade de adicionar recursos e conteúdo ao jogo.
  • Patches: a capacidade de corrigir um bug que está presente em um produto enviado.
  • Mods: conceda a outras pessoas a capacidade de criar conteúdo para o jogo.

Essas ferramentas ajudam os desenvolvedores a estender seu desenvolvimento além do lançamento inicial.

Visão geral dos arquivos PCK

Godot habilita isso através de um recurso chamado resource packs (arquivos PCK, com extensão .pck).

Vantagens:

  • atualizações/patches incrementais
  • oferecer DLCs
  • oferecer suporte a mods
  • nenhuma divulgação de código fonte necessária para mods
  • estrutura de projeto mais modular
  • users don't have to replace the entire game

A primeira parte do uso envolve exportar e entregar o projeto aos jogadores. Então, quando se deseja adicionar funcionalidade ou conteúdo mais tarde, eles apenas entregam as atualizações através de arquivos PCK aos usuários.

Os arquivos PCK geralmente contêm, mas não se limitam a:

  • scripts
  • cenas
  • shaders
  • modelos
  • texturas
  • efeitos sonoros
  • música
  • qualquer outro asset adequado para importação para o jogo

Os arquivos PCK podem até ser um projeto Godot totalmente diferente, que o jogo original carrega no tempo de execução.

Gerando arquivos PCK

A fim de empacotar todos os recursos de um projeto em um arquivo PCK abra o projeto e vá em Projeto/Exportar e clique em "Exportar PCK/Zip". Certifique-se também de ter um modelo de exportação selecionado ao fazê-lo.

../../../_images/export_pck.png

Outro método seria exportar da linha de comando. Se o arquivo de saída terminar com uma extensão de arquivo PCK ou ZIP, então o processo de exportação construirá esse tipo de arquivo para a plataforma escolhida.

Nota

Se alguém deseja suportar mods para seu jogo, eles precisarão que seus usuários criem arquivos exportados da mesma forma. Assumindo que o jogo original espera uma certa estrutura para os recursos do PCK e/ou uma determinada interface para seus scripts, então...

  1. O desenvolvedor deve divulgar a documentação dessas estruturas/interfaces esperadas, esperar que os modders instalem o Godot Engine, e também esperar que esses modders estejam de acordo com a API definida pela documentação ao construir o conteúdo do mod para o jogo (para que ele funcione). Os usuários usariam então as ferramentas de exportação Godot construídas pelo Godot para criar um arquivo PCK, conforme detalhado acima.
  2. O desenvolvedor usa o Godot para construir uma ferramenta GUI para adicionar seu conteúdo exato de API a um projeto. Esta ferramenta Godot deve ser executada em uma compilação tools-enabled do motor ou ter acesso a um (distribuído ao lado ou talvez nos arquivos do jogo original). A ferramenta pode então usar o Godot executável para exportar um arquivo PCK da linha de comando com OS.execute(). Faz mais sentido para o jogo não usar uma ferramenta de construção (para segurança) e para que as ferramentas de modding façam uso de uma compilação do motor tools-enabled.

Abrindo arquivos PCK em tempo de execução

Para importar um arquivo PCK, use um one-liner. Tenha em mente que não há erro ou exceção se a importação falhar. Em vez disso, pode-se ter que criar algum código de validação como uma camada em cima. O exemplo a seguir espera um arquivo "mod.pck" no diretório dos jogos executáveis. O arquivo PCK contém uma cena de teste "mod_scene.tscn" em sua raiz.

func _your_function():
    ProjectSettings.load_resource_pack("res://mod.pck")
    # Now one can use the assets as if they had them in the project from the start
    var imported_scene = load("res://mod_scene.tscn")
private void YourFunction()
{
    ProjectSettings.LoadResourcePack("res://mod.pck");
    // Now one can use the assets as if they had them in the project from the start
    var importedScene = (PackedScene)ResourceLoader.Load("res://mod_scene.tscn");
}

Aviso

By default, if you import a file with the same file path/name as one you already have in your project, the imported one will replace it. This is something to watch out for when creating DLC or mods (solved easily with a tool isolating mods to a specific mods subfolder). However, it is also a way of creating patches for one's own game. A PCK file of this kind can fix the content of a previously loaded PCK.

To opt out of this behavior, pass false as the second argument to ProjectSettings.load_resource_pack().

Nota

For a C# project, you need to build the DLL and place it in the project directory first. Then, before loading the resource pack, you need to load its DLL as follows: Assembly.LoadFile("mod.dll")

Resumo

Este tutorial deve ilustrar como é fácil adicionar mods, patches ou DLC a um jogo. O mais importante é identificar como se planeja distribuir conteúdo futuro para seu jogo e desenvolver um fluxo de trabalho personalizado para esse fim. Godot deve tornar esse processo suave, independentemente da rota que um desenvolvedor persegue.