Quando eu usaria "scripts" ou "scripts" em um jogo, em oposição à linguagem principal?

13

Os termos scripts e scripts parecem ser usados ​​de forma intercambiável no Game Development Stack Exchange, mas, além de ler perguntas sobre uma opção de linguagem de script, não entendo a relação entre scripts e scripts e a linguagem principal. O que um script normalmente faz, quando seria usado e os scripts em alguns contextos (conforme definidos pelos programadores de jogos) são diferentes da linguagem de script?

Tetrad
fonte
@ Tetrad Obrigado pelo link, mas acho que a outra pergunta discute mais a questão da arquitetura fundamental de "por que", em vez de para quê e quando.
2
"what" e "when" serão específicos para seus casos de uso. O "porquê" oferece a você habilidades para tomar decisões. Sem detalhes, essa pergunta é uma bobagem (aos meus olhos).
Tetrad

Respostas:

15

Os scripts são escritos para uma linguagem de script. As pessoas podem usar as palavras em sentenças de gíria para obter a confusão a que você está se referindo, mas pedir a alguém as definições de Script, Script e Linguagem de Script e você terá algo como: Script é o ato de escrever scripts usando uma linguagem de script.

Quando você incorpora uma linguagem de script em um mecanismo de jogo, ou no idioma principal a que se refere, está expondo não apenas os objetos no mecanismo de jogo, mas também permitindo que a lógica seja escrita para o mecanismo de jogo. Outra coisa a ser observada é que isso transforma seu jogo em um tipo de máquina virtual, pois as linguagens de script raramente são compiladas na linguagem de máquina e, em vez disso, são colocadas em uma forma de código de bytes e interpretadas em tempo de execução pelo mecanismo de jogo.

Isso traz alguns benefícios enormes para a equipe de desenvolvimento, alguns dos quais você pode encontrar listados a seguir:

  • As linguagens de script geralmente são gerenciadas por memória, assim você não precisa se preocupar com alocações
  • Geralmente, eles são uma linguagem de tipo fraco que elimina a necessidade de garantir que você esteja usando o tipo de variável para o que está fazendo, basta criar uma variável e segui-la.
  • As próprias linguagens costumam ser muito simplistas, ao mesmo tempo em que oferecem bastante controle às pessoas que não são programadores
  • A alteração de scripts não exige que o mecanismo principal seja recompilado.
  • Scripts vs Codificação geralmente reduzem o tempo necessário para um ajuste muito iterativo da lógica do jogo.
  • Dependendo do design e do idioma, você pode recarregar um script com frequência enquanto o jogo está em execução para ajustes / testes ainda mais fáceis.

Tenho certeza de que a lista pode continuar, tenho certeza, especialmente quando você se interessa por tipos de jogos especializados e como os scripts podem ajudar a definir regras de formação de grupos para mover grupos de unidades em um RTS ou como criar a lógica de uma UI em um linguagem de script para fornecer uma interface do usuário extensível aos usuários finais e similares.

James
fonte
9

O uso de scripts tem muitas vantagens sobre a "linguagem principal". Alguns destes incluem:

  • Movendo (mais) o conteúdo de desenvolvedores principais para artistas, liberando os desenvolvedores principais para tarefas de mecanismo das tarefas de jogabilidade
  • Os scripts tendem a estar na área restrita, não podem fazer nada realmente perigoso
  • A modificação de scripts não requer recompilação e reexecução do jogo
Jari Komppa
fonte
Para seu primeiro marcador, você pode fornecer um exemplo de uma funcionalidade que seria movida para um script para os artistas editarem?
@Brian Reindel Os exemplos seriam estatísticas de armas / NPCs, IA e mapas / níveis.
Hackworth
1
@Hackworth Você está dizendo que a programação de IA é feita por artistas? O script que seria realizado por um artista incluiria scripts para animações e renderização de objetos 3D e similares.
KRB 14/09
3
Artistas não devem ser feitos para programar nada. Você separa o mecanismo da lógica do jogo por uma questão de modularidade , não por transferir o desenvolvimento para pessoas cujas forças estão em outro lugar.
Jon Purdy
1
@ James, bem, o ponto é: eles fazem programação "leve", mas estão no campo "conteúdo". Portanto, a terminologia é complicada. =)
Jari Komppa
6

Um script geralmente é um pedaço de código que é executado fora do mecanismo principal. Geralmente está contido em arquivos de texto onde você quiser mantê-los. Em seguida, é geralmente carregado pelo mecanismo, analisado e executado em tempo de execução.

O que geralmente acontece é que, independentemente da linguagem usada (Lua, Angelscript, por exemplo), essa linguagem geralmente possui alguns recursos que permitem ao programador de mecanismos expor funções de mecanismo ou até mesmo classes inteiras à instância do "mecanismo de script" que está sendo executado no momento. .

Por exemplo (exemplo totalmente estúpido, mas apenas para esclarecer), seu código de jogo pode ter uma função pública que gera zumbis em algum lugar:

void SpawnZombie(int x, int y, int hp /* whatever else */)
{
   //...
}

A linguagem de script que você usa agora permite expor essa função ao analisador de scripts em execução. Isso significa efetivamente que você pode abrir um arquivo de texto, escrever "SpawnZombie (200,300,1337)" e, uma vez que seu mecanismo execute o código, um Zombie irá aparecer nesse local.

As outras respostas já listam alguns bons exemplos de como isso geralmente é usado, mas deixam de fora um ponto que considero muito importante:

Esses tipos de scripts facilitam a depuração ou o teste da jogabilidade durante o tempo de execução.

Digamos que você queira descobrir a maneira perfeita de colocar um zumbi no mapa, para que ele tenha o efeito máximo de susto no jogador, uma vez que o descubra. Sem o suporte a scripts, você teria que sair do aplicativo, alterar alguns números mágicos no código, recompilar e testá-lo.

Com o suporte a scripts (desde que você já tenha algum método para inserir texto durante o tempo de execução, por exemplo, um console de depuração), basta digitar "SpawnZombie (333,444,555)" e ver como fica.

Da mesma maneira, é possível gerar armas, veículos, carregar mapas diferentes, alterar os valores de algumas coisas no jogo, etc., instakill inimigos porque você não quer perder tempo chegando à parte que precisa ser testado etc.

Isso economizará toneladas de vezes em jogos mais complexos.

TravisG
fonte
2

1) Os scripts geralmente são muito mais fáceis de modificar do que o código.

2) Os scripts geralmente são modificáveis ​​em campo. Isso permite modificar o jogo.

Loren Pechtel
fonte
Então, seria justo dizer que seus scripts são construídos com linguagens que não são compiladas para serem editáveis ​​por alguém?
@ Brian Reindel: Em geral, sim.
Loren Pechtel 15/09/11
2

A maioria das linguagens de script é muito mais expressiva que a linguagem no mecanismo principal. Frequentemente, o mecanismo é escrito em uma linguagem de nível relativamente baixo (por exemplo, C ++) por motivos de desempenho, mas o código da jogabilidade não precisa ser tão eficiente e, portanto, as prioridades mudam para poder expressar a funcionalidade facilmente.

Por exemplo, digitação dinâmica vs. estática. Outro exemplo: coleta de lixo x gerenciamento manual de memória.

jhocking
fonte
0

Os scripts permitem escrever lógica em um nível superior. Em outras palavras, você escreve menos código com mais funcionalidade.

Por exemplo, o seguinte mostra a diferença entre escrever algo no código e em uma linguagem de script.

Código do jogo

Update Loop
{
    if (CarExplodeAnimation.FinalFrame == true)
    {
        SceneGraph.Remove(Car);
        Message("You have destroyed the car.";
    }
    else
    {
        CarExplodeAnimation.AdvanceToNextFrame();
    }

}

Código Script

PlayAnimation(ShipExplode)  // blocks until animation completes
Message("You have destoryed the car.")

Veja quanto menos codificação o designer precisa fazer se você usar uma linguagem de script?

O motivo está no código do jogo, você precisa dividir um evento em vários quadros e escrever o código de uma perspectiva de vários quadros. Por outro lado, o script permite pensar em eventos de vários quadros como apenas uma única linha de código, porque todos os códigos extras são abstraídos por trás de uma função de script.

Você pode perguntar, mas essa função não pode ser apenas escrita no código do jogo também? Bem, sim, mas isso significa que os designers terão que abrir o código-fonte do mecanismo de jogo e escrever todos os códigos nele, e você não deseja que seus designers passem pelo código-fonte do mecanismo de jogo (eles podem mudar acidentalmente algum outro código e a coisa toda falha).

Em vez disso, você deseja que seu designer faça algo assim: Clique com o botão direito do mouse em um carro no Editor de mapas, clique em Inserir script e digite os códigos de script. Não há problemas com os códigos-fonte críticos do mecanismo de jogo.

Desenvolvedor
fonte