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?