TuGA: Um Middleware para o Suporte ao Desenvolvimento de Jogos em TV Digital Interativa David de Almeida Ferreira Cidcley Teixeira de Souza1 NASH – Núcleo Avançado em Engenharia de Software Distribuído e Sistemas Hipermídia Centro Federal de Educação Tecnológica do Ceará {davidferreira.fz, cidcley}@gmail.com Resumo Com a implantação da TV Digital no Brasil, além de uma melhoria da qualidade de aúdio e vídeo, é esperado a introdução de um conjunto de novos serviços relacionados à interatividade dessa tecnologia. Argumentamos nesse trabalho que dentre essas aplicações, os jogos digitais podem ser uma forma atrativa de popularizar os mecanismos de interatividade da TV Digital. Dessa forma, este artigo tem como objetivo apresentar um middleware para dar suporte à programação de jogos em TV Digital Interativa. Esse middleware tem o objetivo de responder pelos requisitos tecnológicos necessários para que a industria nacional possa explorar o mercado de jogos digitais em TV Digital Interativa. 1. Introdução A TV Digital Interativa (TVDI) aberta, que está em discussão atualmente no Brasil, já é, em parte, uma realidade atualmente. Com essa tecnologia além de serem disponibilizadas imagens com alta definição e som digital, serão ofertadas diversos outros serviços, como aplicações de interatividade, múltiplos programas simultâneos, venda de produtos via televisão, entre 1 outros. Nesse sentido, a disseminação da televisão aberta digital é de importância estratégica para o Brasil, uma vez que beneficiará quase toda a população nos próximos anos, proporcionando crescente democratização do acesso à informação. Dentre essas aplicações interativas, os jogos digitais se apresentam como uma forma atrativa de popularizar a utilização dessas aplicações na TVDI. De fato, a atração exercida pelos jogos tem feito crescer no Brasil uma 1 Prof. do Curso de Mestrado Profissional em Computação UECE/CEFET-CE industria que já apresenta resultados expressivos nessa área. Entretanto, o desenvolvimento de jogos para TVDI, deve considerar as limitações impostas por esse ambiente, tanto no que diz respeito à completa carência de ferramentas de desenvolvimento, como pela própria estratégia de projeto dos jogos, que são limitados pela forma de interação dos usuários, normalmente utilizando um controle remoto. Nesse sentido, esse trabalho apresenta um middleware, denominado TuGA, capaz de dar suporte ao desenvolvimento de jogos em TVDI. Esse middleware, além da estrutura de execução dos jogos, disponibiliza também uma API de desenvolvimento de aplicações para esse ambiente. Para apresentar esse trabalho, mostramos na seção 2 uma descrição do ambiente de desenvolvimento de TVD onde descrevemos o que já existe de suporte atualmente em termos de ferramentas de desenvolvimento de aplicações para esse ambiente. Na seção 3 apresentamos um levantamento das ferramentas disponíveis para a produção de jogos digitais em Java. Na seção 4 apresentamos uma discussão sobre a produção de jogos em TVDI, na qual podem ser entendidas as motivações principais para o nosso trabalho. Na seção 5 apresentamos o middleware TuGA e suas ferramentas de desenvolvimento associadas. Na seção 6 um estudo de caso é apresentado e por fim, na seção 7, são apresentadas as conclusões do trabalho. 2. Ambiente da TV Digital Interativa O desenvolvimento de aplicações para TV Digital Interativa (TVDI), tem como alicerce tecnológico a plataforma Java, que devido a sua extrema extensibilidade e sua grande aceitação, fez com que o Java hoje possa ser encontrado em diversos meios, indo desde do uso tradicional em computadores até dispositivos portáteis e embarcados. Para atender da melhor forma todas as necessidades dos desenvolvedores, a plataforma Java foi construída com alta granularidade, permitindo assim que cada nicho tecnológico venha a utilizar apenas as APIs Sendo assim, a plataforma Java é constituída atualmente por cinco camadas, como apresentado na Figura 1. Como o objetivo do nosso trabalho são • aplicações para TVDI, focaremos apenas na parte relacionada à “Micro Edition”, em especial à subdivisão composta pelo “CDC”, que é a camada do Java que provê suporte para dispositivos com perfil de Set-Top-Box da TVDI. Desse modo, podemos observar os seguintes perfis de arquitetura para aplicaçõe Java: • Connected Device Configuration, ou CDC[1], é geralmente conhecida como “Configuração”, ou seja, é a constituição em si do ambiente, contando com uma Java Virtual Machine (JVM) e baseado na JSE (Java Standard Edition), sendo otimizada para micro dispositivos, possuindo apenas a parte mais básica do Java como os pacotes: java.lang, java.io, java.math, java.net, java.security, java.text, java.util e java.microedition. realmente necessárias. programação para Applets e a compatibilidade total com os pacotes AWT. Optional Packages, são pacotes que apesar de possuírem grande possibilidade de estarem presente no micro dispositivo, não temos esta garantia, este pacote é composto principalmente de partes da RMI e JDBC. Com base nesses componentes, temos uma visão macro do que é disponibilizado pela plataforma Java para o desenvolvimento de aplicações para a TVDI. Além desse suporte oficial do próprio Java, contamos também com o suporte provido por diversas empresas desenvolvedoras de tecnologia, o que levou a formalização e definição de alguns padrões adotados pelos pela industria mundial, onde deram origem as APIs: • • Figura 1. Plataforma Java • • • Foundation Profile, ou FP[2], é o perfil mais básico disponível para o CDC, seu objetivo é fornecer um suporte complementar para o CDC. Sua API é baseada na JSE e oferece pacotes complementares, para: java.lang, java.io, java.math, java.net, java.security, java.text, java.util, java.microedition e javax.security. Personal Basis Profile, ou PBF[3], é formado pelo “Foundation Profile”, com a adição do suporte básico para GUI leves e o suporte ao modelo de programação de TV (Xlet Program). Sua API além do suporte ao FP, inclui suporte principalmente para java.awt, java.beans, java.rmi, java.microedition.xlet. Personal Profile, ou PP[4], é formado pelo “Personal Basis Profile”, com a adição do suporte a HAVi (Home Audio Video Interoperability)[5], onde seu foco é a interoperabilidade com o usuário por meio de um amplo suporte gráfico. DVB-MHP (Digital Video Broadcasting Multimedia Home Platform)[6], com o foco principal em fornecer uma abstração avançada para acesso aos recursos de áudio e vídeo, onde também fornece meios para controle de acesso, protocolos de comunicação com suporte a canal de retorno e criptografia de dados. Com base nesse conjunto de componentes apresentados, temos o cenário inicial para o desenvolvimento de aplicações para TVDI. Durante a fase inicial desse projeto, tentamos realizar algumas implementações de jogos simples utilizando apenas as ferramentas disponíveis atualmente para TVDI. Como resultado esbarramos com diversas limitações dessas ferramentas. Essas limitações vão desde a falta de suporte a mecanismos de interação mais avançados, como o pressionamento simultâneo de teclas do controle remoto, até questões de desempenho na apresentação de gráficos simples na tela da TV. Baseado nestas limitações, iniciamos uma avaliação de outras ferramentas de desenvolvimento Java, para verificar a possível portabilidade dessas para ambientes de TVDI. 3. Desenvolvimento de Jogos em Java Atualmente, a linguagem Java é uma realidade para o desenvolvimento de jogos, permitindo a criação soluções dos mais diversos tipos e estilos, indo dos dispositivos mais limitantes como celulares, applets e chegando em fim ao desktop, onde encontra acesso ao alto desempenho dos jogos tridimensionais. No mundo dos “micro dispositivos”, principalmente para celulares, Java vem, ao longo dos últimos anos, tornando-se uma poderosa plataforma. Graças a sua grande popularização, essa linguagem vem sofrendo uma grande evolução, acompanhando de perto os avanços dos celulares, permitindo assim utilizar cada vez mais a capacidade computacional desses aparelhos. Todavia, no mundo da TVDI, o potencial de Java para o desenvolvimento de aplicações na área de jogos ainda é uma grande incógnita, visto que mesmo com toda a evolução dessa linguagem para suporte ao desenvolvimento em celulares e no próprio desktop, Java ainda não é compatível com o modelo de desenvolvimento para TVDI, o que na verdade chega a ser irônico, visto que a estrutura de hardware dos SetTop-Boxes, são provavelmente superiores em termos computacionais à grande maioria dos celulares, porém inferior ao dos desktops atuais. Além disso, por conta da interface singular da TVDI, esse ambiente acaba sendo relegado pela falta de suporte avançado de Java. 4. Jogos na TV Digital A TVD disponível hoje no Brasil, por meio de operadoras de canais privados (tv-a-cabo, satélite e similares), já oferece a anos dispositivos digitais e interativos. Apesar do acesso a tais dispositivos, podemos observar que quando uma operadora de TV privada fornece algum tipo de entretenimento baseado em jogos eletrônicos, esses possuem características bem marcantes, como: • São desenvolvidos para crianças de 3 a 7 anos; • Possuem baixa interatividade ou apresentam uma interface gráfica de pouca assimilação; • São cópias de jogos de tabuleiro, cartas, palavras cruzadas e forcas; • Não são capazes de manter ou chamar a atenção do jogador ou potenciais jogadores; Explorando a Internet nos mais diversos meios, observamos que a indústria de jogos para computadores, celulares e consoles, além das pessoas ao redor dessas industrias, ou seja, as comunidades de desenvolvedores e jogadores, apresentam de fato muitas informações a respeito das mais diversas tecnologias empregadas, porém quando se trata de jogos para TVDI, pouca coisa é disponibilizada, e quando encontramos, na verdade não passam de inúmeras questões do tipo “Como começar?”, “Por onde começar?”, “Onde achar informações?” e afins, ou seja, praticamente não existe informação sobre o desenvolvimento de jogos para este nicho tecnológico, levando-nos a seguinte suposição: A tecnologia encontrada na grande maioria dos dispositivos ou é inadequada para os jogos, ou esse é um mercado muito promissor e inusitado onde apenas um seleto grupo de empresas possui conhecimento especifico. Entretanto, diferente do que ocorre na TV privada no Brasil, é possível encontrar em outros países, jogos mais avançados tecnologicamente, muitos dos quais similares aos jogos encontrados nos consoles da geração de 16 bits e nos celulares de hoje. Desse modo, temos neste cenário, a oportunidade de explorar e de desenvolver uma tecnologia nacional que possa suprir a lacuna existente neste mercado, inclusive elevando as experiências encontradas hoje a outros níveis que proporcionem de fato o interesse e a imersão desejada pelos mais diversos grupos de jogadores. Assim, o nosso objetivo nesse trabalho, é atacar diversos tipos de jogos, e não apenas os jogos esporádicos de palavras, mas sim estilos mais clássicos que venham a fomentar de fato o interesse dos jogadores, tais como adventures, arcades, puzzles, entre outros. 5. O Middleware TuGA Um jogo eletrônico necessita de uma série de recursos computacionais para que esse possa transmitir as mais diversas experiências para seu usuário, em especial para TVDI o grande potencial primário são de jogadores do tipo casual, ou seja, jogadores que se utilizam jogos eletrônicos algumas poucas horas por semana. Tendo em vista este cenário inicial, estamos propondo nesse trabalho o middleware TuGA (Figura 2). Esse middleware oferece suporte aos seguintes sistemas: • • • Sistema Gráfico; Sistema Sonoro; Sistema de Entrada; Adicionalmente, sabemos que cada grupo de sistema citado acima, deve prover uma série de capacidades mínimas para que possa cumprir sua missão, sendo assim, podemos considerar as seguintes funcionalidades para cada um desses sistemas: Figura 2. Arquitetura do Middleware TuGA. Sistema Gráfico, é o responsável por permitir a integração com o vídeo, ou seja, por permitir que as imagens e as primitivas gráficas sejam apresentadas no monitor de TV/PC, dando um feedback visual ao jogador. Este sistema deve oferecer: • Carregamento de imagens e sua manipulação em memória; • Suporte a transparências; • Funções de desenho (blit e clip); • Suporte ao gerenciamento de vídeo otimizado com uso de backbuffer; Sistema Sonoro, é o responsável por permitir o efeito de imersão, com o suporte a uma boa ambientação sonora durante a atividade interativa imersiva, este sistema deve oferecer: • Carregamento de sons e sua manipulação em memória; • Suporte a músicas de fundo; • Suporte a efeitos sonoros; • Suporte a execução de sons simultâneos; Sistema de Entrada, é o responsável por permitir a interação do jogador com o dispositivo, dando assim inicio ao processo de interação, este sistema deve oferecer: • Suporte otimização para comunicação entre os dispositivos; • Suporte a dispositivos anexados como controles e joysticks; • Suporte a múltiplos comandos; Adicionalmente, sabemos que para o real desenvolvimento de jogos eletrônicos uma simples camada de abstração com o hardware não é suficiente, ela é apenas a base inicial para a construção de outros softwares que realmente permitiram o desenvolvimento de softwares mais elaborados. Sendo assim a camada base do middleware deve permitir que outras camadas de software possam ser acopladas. No caso de jogos eletrônicos surgem neste cenário os frameworks e as engines, as quais na grande maioria dos cenários fazem uso do middleware para abstrair detalhes do hardware e de fato concentrar-se nas suas necessidades como por exemplo: controle de animações, menus, recordes, GUI e outros acessórios para que de fato possa chegar ao produto final, ou seja, o jogo. Tendo em vista este cenário, além das características iniciais do middleware é necessário uma nova camada de software que possa de fato cumprir com os novos requisitos sendo assim, desenvolvemos uma nova camada que chamamos de framework GBF.Tv, que fornece os seguintes recursos: • • • • • • Gerenciador de Sprites; Gerenciador de Fontes; Gerenciador de Personagens; Gerenciador de Sons; Gerenciador de Interface Usuário; Gerenciador de Tempo; Gráfica com Com essa camada adicional de software, começa a surgir o cenário ideal para as primeiras aplicações interativas com foco no entretenimento para TVDI, ou seja, jogos eletrônicos que de fato podem permitir uma boa interação com os jogadores. Como nosso ambiente de desenvolvimento é o computador, precisamos de componentes que possam permitir a simulação do ambiente de um set-top-box. Como para realizar essa tarefa de simulação, os desenvolvedores de aplicações de TVDI utilizam emuladores de TV, no nosso caso, escolhemos o XleTView[8], que é um emulador do middleware MHPDVB. É válido ressaltar que não utilizamos nada que seja relacionado ao MHP no nosso middleware. De fato, o que utilizamos do XleTView foi apenas o suporte básico de Java, que é comum a qualquer middleware de TVDI, inclusive o middleware Brasileiro Ginga [11], o qual segundo as especificações deve apresentar as mesma limitações referentes ao suporte à jogos encontradas nos middlewares procedurais para TVDI. Um ponto que deve ficar claro, é que o TuGA não é um substituto para o Ginga-J, e sim um middleware complementar focado em jogos, pois o jogo em si, necessitará tanto do middleware Ginga para todo o suporte operacional do hardware, como do TuGA abstraindo as questões de infraestrutura dos jogos. Com o desenvolvimento de todas essas camadas, temos um ambiente apto para execução e desenvolvimento de jogos em TVDI, de modo a produzir jogos com recursos realmente atrativos para os jogadores. É importante lembrar que a camada de emulação de TV é utilizada apenas para simular o ambiente encontrado nos set-top box, os mesmo são supridos pelo contêiner fornecido pela Java Virtual Machine dos dispositivos. 6. Estudo de Caso Para ilustrar a aplicação do middleware TuGA no suporte ao desenvolvimento de jogos digitais em TVDI, apresentamos nessa seção um estudo de caso simples. Nesse estudo de caso, aplicamos o middleware TuGA no desenvolvimento do jogo FZPong [9]. Esse jogo foi originalmente escrito na linguagem C++ em ambiente de PCs (Figura 3) utilizando como base o framework GBF[10] – Gamework's Brazilian Framework. Figura 3. FZ Pong, jogo para PC. Como mencionado anteriormente necessitamos de uma camada que pudesse fazer a ligação entre as funcionalidades de baixo nível requeridas pelos jogos e o dispositivo do set-top-box, sendo assim começamos o trabalho do desenvolvimento da API. Inicialmente apareceram diversos problemas como por exemplo o gerenciamento de entrada de dados, o qual deveria suportar o pressionamento de múltiplas teclas, o carregamento de imagens, a definição de transparências, a forma de desenhar uma imagem na tela, dentre outros casos. Problemas estes que não eram resolvidos pela API padrão da TVDI, e que necessitavam de fato de conhecimentos técnicos altamente especializados, porém podemos agora por meio do middleware TuGA, fazer uso de tais recursos de forma transparente em nossas aplicações. oferecer uma ampla compatibilidade com o a idéia original do framework GBF. Durante a transformação do modelo de jogos de PC para TV, optamos inicialmente por um framework que mantivesse as características e as familiaridades encontradas no desenvolvimento de jogos para PC, onde haveria também a possibilidade do desenvolvimento de um framework para TVDI que mantivesse tais características encontradas na programação JavaME, o qual poderá em breve ser o foco de uma outra camada externa ao GBF.Tv ou até mesmo de um outro framework. Como o intuito inicial desse trabalho é validarmos a possibilidade do desenvolvimento de jogos para TVDI, focamos nas questões de interatividade com a máquina, no caso o jogador humano e o jogador set-top-box, além da contagem de pontos e uma simples elevação de nível de acordo com algumas características de duração da partida. Neste momento os controles mais avançados disponíveis no jogo como menus, controle de estados, telas informativas e afins, ficaram de fora do nosso foco. Conforme comentando a criação do jogo e do middleware TuGA se deu de forma paralela, sendo que quando alguma característica particular do ambiente deveria ser solucionada, estas eram avaliadas se deveriam ou não constar fora do escopo do jogo, onde eram novamente avaliadas para verificar se pertenciam de fato ao escopo do framework ou do middleware. Adicionalmente, ter apenas uma abstração dos recursos de hardware não era suficiente para o desenvolvimento de jogos, mesmo porque ainda restava uma série de componentes que deveriam ser criados para reutilização de diversos jogos, com este intuito aliamos o desenvolvimento (porte) do framework com o do jogo em si, porém estipulamos que daríamos prioridade inicialmente as funcionalidades vitais para o jogo em TVDI, sendo assim iniciamos o trabalho com o porte de parte do framework GBF, que denominamos de GBF.Tv. Esse framework implementa os seguintes subsistemas: • • • • • • • Definição de Tipos básicos e auxiliares; Sistema de Gráficos Base; Sistema de Sprites e Tilemap; Sistema de Personagem; Sistema de Som; Sistema de Temporização; Sistema de Escrita; Devemos ressaltar que alguns desses subsistemas encontram-se parcialmente suportados, com o intuito de Figura 4. Classes e Pacotes do XletPong. Observando a Figura 4, que é uma tela capturada do Eclipse [7], podemos comprovar que o jogo apresenta neste estágio poucas classes, onde temos os pacotes: • default - com a classe contendo o ponto de entrada, ou seja, o Xlet em si; • • • jogo.controller – com alguns controles do jogo, focado no funcionamento do jogo em si; jogo.entidade – a representação dos componentes visíveis no jogo como bola e as raquetes; jogo – onde podemos encontrar a classe Game que é responsável por fazer a integração e instanciação do framework GBF.Tv além de prover o carregamento de recursos necessários para a execução do jogo. Figura 5. XletPong rodando no emulador XleTView. Observando a Figura 5, que apresenta o jogo executado no XleTView, e a comparando com a Figura 3, podemos observar a similaridade visual entre as duas versões, a qual só não é idêntica quando a comparação é realizado com o jogo em execução, pois apesar de ambos estarem configurados para execução em 30 frames por segundo (o framework provê uma série de controles relacionado ao frames), notamos que a noção de espaço e tempo neste ambiente deve ser cuidadosamente repensada pois enquanto temos dispositivos com alta precisão no PC, para a TVDI em ambiente de simulação percebemos que existem pequenas, mas sutis diferenças quando se trata com os temporizadores, talvez possa nem ser uma questão dos ambientes e sim de performance das linguagens C++ e Java ou das plataformas de integração com as bibliotecas e o hardware. No final desta primeira fase de conversão do jogo, chegamos a resultados impressionantes pois a facilidade encontrada para portar a lógica do jogo entre duas plataformas e linguagens distintas foi altamente rápida, produtiva, ou seja, ultrapassou as nossas expectativas. 7. Conclusão A principal motivação para a realização desse trabalho era, inicialmente, a avaliação das ferramentas para a produção de jogos digitais em TVDI. Contudo, a baixa disponibilidade de recursos tecnológicos no suporte a esse tipo de aplicação nos fez direcionar o trabalho para a produção de um conjunto de ferramentas que possibilitasse a exploração de jogos digitais nesse ambiente tão promissor. Nesse sentido, iniciamos o desenvolvimento do middleware TuGA. Esse middleware, oferece além de um ambiente de simulação de jogos, um conjunto de ferramentas que auxiliam o tratamento de diversos aspectos peculiares à TVDI, o que permite que o desenvolvedor possa direcionar o seu trabalho para à lógica do jogo , e esteja apto a explorar de forma produtiva o ambiente de TVDI. Esperamos que com o conhecimento fornecido neste trabalho, possamos auxiliar no direcionamento dos interessados, em especial, os desenvolvedores de jogos, onde esta nova, inexplorada e promissora plataforma, constitui um cenário único para nossa industria, pois como sabemos nosso sistema de TVDI é altamente peculiar e encontra-se neste momento disponível apenas em nosso país, o que permite que possa haver uma grande corrida para exploração deste novo campo do entretenimento nacional. Com base nestas idéias focamos os requisitos dos middleware e framework para trabalhar em conjunto com essas novas possibilidades, inclusive permitindo que o conhecimento adquirido pelos profissionais da plataforma PC, os quais hoje são maioria no cenário de desenvolvimento de jogos no Brasil, possam utilizar seus conhecimentos para a produção de jogos eletrônicos para TVDI. Referências [1] Java CDC, http://java.sun.com/products/cdc/overview.html , acesso em: 10/12/2007. [2] Java Foundation Profile, http://java.sun.com/products/foundation/overview.html , acesso em: 10/12/2007. [3] Java Personal Basis Profile, http://java.sun.com/products/personalbasis/overview.html , acesso em: 10/12/2007. [4] Java Personal Profile, http://java.sun.com/products/personalprofile/overview.html , acesso em: 10/12/2007. [5] HAVi, http://www.havi.org , acesso em: 17/12/2007. [6] DVB Wikipedia, http://en.wikipedia.org/wiki/DVB , acesso em: 17/12/2007. [7] Eclipse IDE, http://www.eclipse.org, acesso em: 22/12/2007 [8] XleTView, http://xletview.sourceforge.net , acesso em: 02/03/2008. [9] FZPong, http://pjmoo.wiki.sourceforge.net/FZPong , acesso em: 02/03/2008. [10] GBF, http://pjmoo.wiki.sourceforge.net/GBF , acesso em: 02/03/2008. [11] GINGA, http://www.ginga.org.br , acesso em 15/02/2008.