Motivação
Porque Linguagens de Script em Jogos?
Estender funcionalidade de e/ou controlar uma engine
Exemplo em IA: Comportamento de um Objeto
Desenvolvimento sem Geradores de Linguagem (javacc,
bison, flex, etc)
Linguagem SimpleScript
Base: Compilador/Pré-Processador e Interpretador
Linguagem Genérica
Comando
Variável
Bloco de Script
Função
Structs
Comando
Formato Básico: comando(parâmetros);
Parâmetros
Separados por vírgula
Tipos: Texto, Número e Variável
Comando
Objeto Na Linguagem
Id do comando
Lista dos tipos parâmetros lidos
Número de parâmetros
Lista de Textos
Lista de Números
Lista de Nomes de Variável
Variável
Definição: [nome]
Tipos Básicos
string (text), int (número inteiro), float (número ponto
flutuante), bool (booleano verdadeiro/falso)
Escopo
Global, Local e Parâmetro (Local Especial)
Novos Comandos
definevar([var],”tipo”); e definevarglobal([var],”tipo”);
setvar([var],dados);
deletevar([var]);
Variável
Objeto Na Linguagem
Nome da Variável
Id do Tipo da Variável
Variável de Texto
Variável de Número Inteiro
Variável de Número de Ponto Flutuante
Variável Booleana
Tipo de Escopo (opcional)
Bloco de Script
Lista Simples de Comandos com Nome
Formato Base: [nome](retorno)(parâmetros)
Novos Comandos
runscript (gera ponto de retorno)
jumptoscript (não gera ponto de retorno)
Pilha de Retorno
Simples (apenas pontos de retorno)
Bloco de Script
Objeto Na Linguagem
Lista de Comandos
Nome do Bloco
Lista de Variáveis Locais Atuais (opcional)
Função
Evolução dos Blocos de Script
Pode retornar valor
Parâmetros
Novos Comandos
prepareparameters(…);
return() e returnv([variavel]);
getreturn([variavel]);
Função
Objeto Na Linguagem
Lista de Comandos
Nome da Função
Lista de Variáveis de Parâmetro
Lista de Backup de Variáveis de Parâmetro
Variável (usada para retorno de valor)
Lista de Variáveis Locais Atuais (opcional)
Controle de Fluxo
Comando especial
if
Formato: if (cond,true,false);
Structs
Variável que é uma lista de variáveis
Definição
struct[nome](variáveis)
Alguns comandos novos
getstructmember([struct],”membro”,[var]);
setstructmember ([struct],”membro”,dado);
Outros Objetos
Arquivo
Contém lista de funções lidas em um arquivo-fonte
Pode ter caminho do arquivo
Compilador
Transforma o código-fonte em bitcode interno da
linguagem
Detecta erros no código
Interpretador
Processa bitcode e executa os comandos
Controla as variáveis globais e a pilha de retorno
Interpretador
se (função selecionada atual for nula) retornar;
comando atual = cabeça da lista de comandos da função atual;
enquanto (verdade) {
se (comando atual for inválido) {
se (pilha de retorno estiver vazia) retornar;
senão {
obter topo da pilha;
atualizar estado do interpretador segundo dados do topo da pilha;
}
}
senão {
executar comando atual;
avançar para o próximo comando;
}
}
Otimizações
Velocidade de Compilação/Pré-Processamento
Geração de Arquivos Pré-Compilados
Dúvidas?