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?
Download

Desevolvimento de Linguagens de Script Para Jogos - IME-USP