Exportando pacotes, 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

  • os usuários não precisam substituir o jogo inteiro

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 durante a execução

To import a PCK file, one uses the ProjectSettings singleton. The following example expects a “mod.pck” file in the directory of the games executable. The PCK file contains a “mod_scene.tscn” test scene in its root.

func _your_function():
    # This could fail if, for example, mod.pck cannot be found.
    var success = ProjectSettings.load_resource_pack("res://mod.pck")

    if success:
        # 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()
{
    // This could fail if, for example, mod.pck cannot be found.
    var success = ProjectSettings.LoadResourcePack("res://mod.pck");

    if (success)
    {
        // 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

Por padrão, se você importar um arquivo com o mesmo caminho/nome do arquivo que você já tem em seu projeto, o importado irá substituí-lo. Isso é algo para se ter cuidado ao criar DLC ou mods (resolvido facilmente com uma ferramenta isolando mods para uma subpasta de mods específicos). No entanto, também é uma maneira de criar patches para o próprio jogo. Um arquivo PCK deste tipo pode corrigir o conteúdo de um PCK anteriormente carregado.

Para cancelar este comportamento, passe false como o segundo argumento para ProjectSettings.load_resource_pack().

Nota

Para um projeto em C#, você precisa construir a DLL e colocá-la no diretório do projeto primeiro. Em seguida, antes de carregar o pacote de recursos, você precisa carregar a DLL da seguinte forma: 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.