Como você adiciona uma linguagem de script a um jogo?
25
Digamos que eu tenho um jogo escrito em C ++. Mas quero adicionar algumas funcionalidades de modificação ou script a ele. Como você adicionaria uma funcionalidade de script ao seu jogo?
Primeiro de tudo, você deve decidir qual parte do seu jogo é roteirizada. Uma opção é ter um jogo totalmente com script, no sentido de que, enquanto as operações de back-end com tempo crítico são codificadas em C ++, toda a lógica do jogo está na linguagem de script. Os designers usam o back-end como uma API chamada da linguagem de script de alto nível. Por outro lado, você pode ter poucos locais específicos em que os scripts são usados, como a interface do usuário ou as seqüências de script, com a maioria do código do jogo ainda em C ++. Há vantagens em cada abordagem (velocidade, flexibilidade, tempo de compilação, escopo do jogo etc.), mas você precisa decidir isso com antecedência.
Depois de saber como você deseja usar scripts, agora você precisa decidir se vai usar uma linguagem de script existente ou sua própria linguagem específica de domínio . Hoje existem muitas linguagens de script para escolher, com diferentes objetivos de design e públicos-alvo, por isso não tenho certeza se vale a pena criar mais os seus. Se você decidir implementar o seu próprio, aqui estão alguns recursos:
Lua é uma linguagem de script popular, leve e fácil de incorporar. Ele usa uma pilha para comunicação entre o host e o idioma incorporado e foi usado com sucesso em muitos jogos profissionais . Sol2 simplifica o processo de ligação de Lua e C ++. Se você não gosta da sintaxe de Lua, o Moonscript é uma linguagem que compila Lua e adiciona um bom conjunto de recursos.
Outras opções incluem o AngelCode , que permite chamar diretamente as funções C e C ++. Python e Ruby são um pouco mais complexos de incorporar, mas são muito agradáveis de programar. Se você deseja incorporar o Python, dê uma olhada no Boost.Python . Outra idéia é incorporar o JavaScript para aproveitar os mecanismos de script rápidos desenvolvidos para navegadores (consulte V8 e SpiderMonkey ).
Eu implementei uma linguagem de script para o meu projeto de jogo atual, e a principal vantagem é o controle total sobre as primitivas de linguagem. As soluções de script pré-construídas são genéricas e talvez você não precise de todos os recursos que eles fornecem. Você absolutamente não deve pensar em lançar seu próprio idioma, a menos que tenha certeza de que pode criar algo melhor para o seu jogo do que uma solução existente.
Jon Purdy
Pessoalmente, eu gosto do Guile , ele tem uma grande integração com o C. O único problema é a velocidade, mas com o lançamento da versão 2.0 nos próximos meses, isso também deve melhorar.
Joe D
Excelente resposta. O primeiro parágrafo pode ser resumido como "desenvolvedores de jogos criam uma API que é consumida por conteúdo".
ashes999
O termo genérico para idiomas personalizados (scripts ou outros) é DSL, que pode ajudar a saber se você deseja ler.
Patrick Hughes
2
Escrevi um post sobre a incorporação do script GameMonkey a um jogo usando o DragonFire SDK aqui .
Basicamente, a idéia é expor suas funções C \ C ++ à linguagem de script escolhida e usá-las no seu script. No meu tutorial, expus 2 funções do DragonFire SDK. No início do jogo, chamo a função onStart a partir do script e, na atualização, chamo a função onTimer a partir do script.
Respostas:
Primeiro de tudo, você deve decidir qual parte do seu jogo é roteirizada. Uma opção é ter um jogo totalmente com script, no sentido de que, enquanto as operações de back-end com tempo crítico são codificadas em C ++, toda a lógica do jogo está na linguagem de script. Os designers usam o back-end como uma API chamada da linguagem de script de alto nível. Por outro lado, você pode ter poucos locais específicos em que os scripts são usados, como a interface do usuário ou as seqüências de script, com a maioria do código do jogo ainda em C ++. Há vantagens em cada abordagem (velocidade, flexibilidade, tempo de compilação, escopo do jogo etc.), mas você precisa decidir isso com antecedência.
Depois de saber como você deseja usar scripts, agora você precisa decidir se vai usar uma linguagem de script existente ou sua própria linguagem específica de domínio . Hoje existem muitas linguagens de script para escolher, com diferentes objetivos de design e públicos-alvo, por isso não tenho certeza se vale a pena criar mais os seus. Se você decidir implementar o seu próprio, aqui estão alguns recursos:
Lua é uma linguagem de script popular, leve e fácil de incorporar. Ele usa uma pilha para comunicação entre o host e o idioma incorporado e foi usado com sucesso em muitos jogos profissionais . Sol2 simplifica o processo de ligação de Lua e C ++. Se você não gosta da sintaxe de Lua, o Moonscript é uma linguagem que compila Lua e adiciona um bom conjunto de recursos.
Outras opções incluem o AngelCode , que permite chamar diretamente as funções C e C ++. Python e Ruby são um pouco mais complexos de incorporar, mas são muito agradáveis de programar. Se você deseja incorporar o Python, dê uma olhada no Boost.Python . Outra idéia é incorporar o JavaScript para aproveitar os mecanismos de script rápidos desenvolvidos para navegadores (consulte V8 e SpiderMonkey ).
fonte
Escrevi um post sobre a incorporação do script GameMonkey a um jogo usando o DragonFire SDK aqui .
Basicamente, a idéia é expor suas funções C \ C ++ à linguagem de script escolhida e usá-las no seu script. No meu tutorial, expus 2 funções do DragonFire SDK. No início do jogo, chamo a função onStart a partir do script e, na atualização, chamo a função onTimer a partir do script.
Espero que ajude!
fonte