A LINGUAGEM LUA E SUAS APLICAÇÕESS EM JOGOS

Linguagem de Programação Lua

1 Linguagens de extensão

Neste capítulo será abordado como a linguagem Lua pode ser utilizada em algumas áreas e suas demais aplicações, será mostrado alguns exemplos em determinadas áreas para efeito de explanação, não entrando a fundo em cada item para não fugir do objetivo deste trabalho:

Ginga – Televisão interativa brasileira

Ginga é uma camada de software que dá suporte à execução de aplicações interativas nos conversores digitais para as tvs digitais, sendo este o padrão para o Sistema Brasileiro de TV Digital [ABNT 2007], Lua trabalha com esse padrão. A arquitetura do Ginga é composta por dois ambientes, um imperativo, também conhecido por máquina de execução, que é responsável pelo suporte às aplicações desenvolvidas na linguagem Java e um ambiente declarativo, conhecido como máquina de apresentação, que interpreta aplicações desenvolvidas em Nested Context Language (NCL).

NCL é uma linguagem declarativa que possibilita o desenvolvimento de aplicações multimídia com sincronismo espaço-temporal, entre objetos de mídia, como áudio, vídeo, imagem e texto. Com o intuito de ampliar as aplicações que podem ser desenvolvidas o NCL suporta objetos escritos em linguagem Lua, denominados de objetos imperativos NCLua, o NCLua é uma extensão da linguagem Lua criada para o desenvolvimento de objetos, programas entre outras coisas para o Ginga. A extensão NCLua é específica para o Ginga e por isso não faz pertence a biblioteca padrão da linguagem Lua, sendo este um dos diferenciais do NCLua para a linguagem pura de Lua.

No código acima a função tratador ativa a função update, que atualiza a posição do logotipo de Lua, chama a função de redesenho e, caso o logotipo ainda não tenha alcançado a posição 100, se executa a função novamente após 30 milissegundos de espera.

2 Softwares

Embora não muito aparente Lua tem sido usada por muitas empresas para o desenvolvimento de softwares, como exemplo o Instituto do Coração (INCOR) que utilizou Lua na criação de um sistema que monitora as Unidade de Tratamento Intensivo (UTI’s) pela internet e internet e a Nasa que desenvolveu um sistema que controla os níveis de gases perigosos na preparação para o lançamento dos ônibus espaciais. Lua também fora usado no Adobe Lightroom sendo que seu uso foi dado para desenvolver o ambiente dele.

Games

"A linguagem C faz toda a parte de renderização (a parte gráfica, pesada, que inclui criar todos os detalhes da animação, sombras, e assim por diante). Já o script do jogo — o que o personagem faz, como reage a determinada conjuntura — é todo comandado por Lua. O designer do roteiro de jogo não trabalha em C, e sim programa em Lua. Como o geólogo da Petrobras, ele não é um programador profissional, mas um especialista em criar games que usa Lua como ferramenta. No caso, o Bret é o programador oficial do jogo. O que ele fez? Botou Lua dentro do sistema, acoplando-a às partes mais pesadas, em C, e a ofereceu aos designers.” - Roberto Ierusalimschy em entrevista para O Globo

Lua é uma linguagem muito usada nos jogos de vídeo-games e muitos jogos atuais rodam Lua em seus códigos. Esses códigos podem variar suas funções que vão desde o controle da inteligência artificial dos inimigos ou personagens do jogo até o controle da física e de ações que irão ocorrer durante o jogo. Um dos jogos em que Lua foi utilizada no seu desenvolvimento é o famoso jogo Angry Birds. A primeira empresa a usar Lua em seus jogos foi a então falecida Lucas Arts com o jogo Escape From Monkey Island.

Lua já foi utilizado em vários jogos e sua utilização foi bem diversificada dentro desses jogos, em uma apresentação feita por:

  • Controle de IA
  • Aparência de efeitos e de outros elementos gráficos
  • Determinação das regras do jogo
  • Edição dos atributos dos personagens
  • Debug em tempo real
  • Interfaces
  • Edição de cenas e atributos em tempo real
  • Criação de “Mod’s”

o Criando e modificando arquivos Lua

- Imagem do jogo Monkey Island

Lua pode ser utilizada como linguagem de configuração para viabilizar comportamentos ou ações que serão realizadas ao longo do jogo, fazendo associação de valores as variáveis abaixo há um exemplo de como isso pode ser feito utilizando-se de tabelas para configurar características de armas e possíveis diálogos que possam aparecer para a determinada arma.

Neste exemplo se no jogo o personagem encontrar a faca, a arma face virá com esses atributos e irá disparar também um desses dois eventos de fala dependendo do resultado da condição.

Em um estágio mais avançado Lua pode ser utilizada como linguagem de controle, com isso a um imenso ganho de flexibilidade no desenvolvimento e como vantagem temos que os profissionais envolvidos com a programação do jogo podem programar diretamente, agilizando assim o desenvolvimento e dando mais liberdade a esses profissionais na hora do desenvolvimento. Outra vantagem em utilizar Lua como uma linguagem de controle é que não há a necessidade da compilação da aplicação com isso a velocidade de desenvolvimento do jogo aumenta consideravelmente, já que dependendo da aplicação compilar ela pode demorar muito tempo.

Um outro exemplo simples de visualizar a utilização de Lua em jogos é o uso de corotinas pelo fato dos jogos terem várias coisas acontecendo ao mesmo tempo em um mesmo espaço ou tela, uma co-rotina é perfeita para esse funcionamento já que permite a execução de códigos de maneira independente ao programa principal, podendo assim controlar a movimentação de Non Player Characters (NPC’s), ou personagens não jogáveis, em uma cidade. Outro exemplo do uso de Lua em games é na construção e renderização dos cenários em tempo real como ocorre em Far Cry.

Internet

Para a internet foram criados programas como o Wiresharck, um analisador de protocolos, o nmap que é um rastreador de redes para segurança o Publique!, um gerenciador de conteúdo para Web que foi inteiramente feito em Lua.

Outra aplicação da linguagem Lua na internet para a internet é o projeto Kepler, uma comunidade de desenvolvedores de software livre usando Lua para o desenvolvimento de aplicações Web, mantendo a característica multi-plataforma de Lua, nesse projeto foi desenvolvido uma arquitetura onde aplicações para Web podem ser desenvolvidas utilizando uma API chamada de WSAPI. Baseando-se no conceito de desenvolvimento voltado para multi-plataforma da linguagem Lua, Kepler disponibiliza disparadores de interpretadores Lua para varias tecnologias utilizadas no desenvolvimento Web, sendo algumas delas: CGI, módulos do Apache, módulos do Internet Information Server (IIS), Servlet Java, entre outros.

Malware

Dentro das coisas que já foram desenvolvidas com Lua, estão os malwares sKyWIper, Flame e o Flamer, que tinham como principal função capturar dados dos usuários na internet.

Cenário Atual

A linguagem Lua como dito anteriormente está na versão 5.2.2 e embora haja um grande desenvolvimento de aplicações em diversas áreas e nichos do mercado, sua utilização é vista mais para o desenvolvimento de jogos digitais (games) devido a facilidade que os desenvolvedores tem para utilizar os recursos oferecidos pela linguagem. Outro fator que demonstra a força da linguagem Lua dentro desse ramo são empresas de grande porte como a Apple permitir o uso de Lua em seus aparelhos, pelo fato que muitos de seus jogos utilizam a linguagem no desenvolvimento de seus jogos, o site sobre o projeto da linguagem Lua consta que eles tem mais de 4000 acessos por dia e fazem pelo menos 14000 downloads por mês da linguagem. Lua também já teve livros e manuais lançados para os mais diversos idiomas incluindo do leste asiático como Coréia do Sul e Japão. Mesmo ao ter passado mais de 10 anos desde seu lançamento e com uma tecnologia muito mais avançada, Lua vem evoluindo buscando manter sempre seus requisitos iniciais quando fora desenvolvida para a Petrobras, sendo estes simplicidade, portabilidade, extensibilidade e pequeno tamanho.