O estado-da-arte do desenvolvimento de jogos no Brasil JogosPROwww.jogospro.com.br Novembro 2004 e-Magazine

Entrevista: Artigos: Omarson Costa 2D .NET Parte 2 Colunas: Java Brew Psicologia OGL/ES XNA e XBOX2 Super Waba

Mobile Games Desenvolvendo Jogos para Celulares

Especial: Cobertura do evento SBGames 2004 2D: Fim do Jogo: Animações por Tempo Criatividade em Jogos 3D: Projeto: Analises do 3D Studio Max e Maya Palmsoft Tecnologia Edição#2 Clique aqui para acessar o FORUM GERAL desta edição Conteúdo Prezado Leitor, 3 Cartas dos Leitores Antes de mais nada, nós da equipe JogosPRO, gostaríamos de agradecer imensamente a todos que 4 Bonus - Pequenas Grandes Notícias criticaram, enviaram sugestões e mensagens de apoio para a revista. Buscamos atender a todos na medida do possível, visando sempre a qualidade da JogosPRO e-Magazine. Entrevista Nesta edição o assunto principal será Jogos para Mobiles. Esta área do desenvolvimento de jogos vem 5 Omarson Costa crescendo muito nos últimos tempos. Para quem busca montar uma empresa este mercado é um bom por Carlos Caimi começo, pois pode ser uma boa fonte de receita para agüentar os primeiros passos. Existem diversas Projeto: Made in Brasil opções em linguagens de desenvolvimento para mobiles, as quais buscamos abordar um pouco sobre algumas das mais conhecidas, habilitando o caro leitor a analisar e decidir qual é aquela de sua 7 Palmsoft Tecnologia preferência. por Equipe Palmsoft A jogosPRO também foi cobrir o Simpósio Brasileiro de Jogos, o SBGames, que aconteceu em Curitiba Colunas nos dia 20 e 21 de outubro, na Unicenp. Tiramos várias fotos para mostrar como foi o evento. Confira! 10 XNA e XBOX2 Nesta edição o leitor poderá notar que todas as matérias possuem um link de acesso direto ao tópico por Julio Marchi do fórum referente à matéria. Tudo isso para facilitar a troca de experiências com outros leitores 15 A “Brasilidade” nos Video Games e lembramos que o nosso fórum estará sempre à disposição para dúvidas e discussões. E também por Alessandro Vieira dos Reis estamos recebendo artigos técnicos relacionados ao desenvolvimento de jogos. Participe! 17 JAVA Micro Edition A equipe jogosPRO deseja a todos uma excelente leitura. por Paulo R. . Siqueira Grande Abraço, Capa Carlos Caimi 22 Desenvolvimento para Celulares Editor Chefe por Eliazer Kosciuk e Julio Marchi Artigos 27 Animação 2D baseada em tempo por Paulo V. W. Radtke 30 2D .NET games: Usando a GDI+ II por Wilson Jr 32 BREW Primeiros Passos por Matias Rodriguez 35 Programação no Symbian OS por Daniel “NeoStrider”Monteiro 37 3DS MAX e MAYA por Eduardo Dias Favero 39 Super Wabba por Wilson Jr 43 OpenGL / ES por Bruce Barrera Especial 49 SBGames 2004 por Matias Rodriguez Artista: Murilo Kenji Shimizu (aka DarioLeaf) Personagem: Halberd Von Gauss Fim do Jogo Gênero: RPG, Medieval Data de Criação: 28/10/2004 51 Criatividade nos Jogos E-mail: [email protected] por Fabrício Kolk Carvalho Portifólio: www.yac-rp.com/leaf Ficha Técnica CARTAS Clique aqui par a ac essar o Editor - Chefe Escreva para a JogosPRO FORUM desta Seção Carlos H Caimi Se você quer escrever para a JogosPRO para criticar, Editor - Assistente elogiar, dar sugestões, comentar sobre um artigo ou Bruce “Sinner“ sobre a revista em geral; não se acanhe: envie um email para [email protected], que nós o Diagramação leremos com certeza. Carlos H Caimi Bruce “Sinner“ Então... Arte-finalização Estou em época de vestibular e passei no vestibular pra design de jogos também. Daí estou na ProVis Design Corporation dúvida do que fazer. E a revista saiu bem a tempo de me ajudar a decidir!!! Tá muito legal a revista. Tem uns errinhos de portuga, mas dá pra entender! Equipe Técnica Valew Alessandro V. dos Reis t_diego@... Daniel Monteiro Julio Marchi Olá Diego, Matías G. Rodriguez Legal, tomara que a revista o tenha ajudado a se decidir pelo design de jogos, e não ao contrário . Em Paulo R C Siqueira ambos os casos, desejamos muito sucesso. Quanto aos erros de português, para essa edição tentaremos Wilson Jr. melhorar. Conseguimos até um colaborador, que irá fazer parte da equipe, e fará a revisão de todos os textos. Forte abraço, Revisão Equipe JogosPRO Jonatas Moraes A revista é excelente - bom ver que tem gente no Brasil botando fé no potencial do país para Autores Convidados a área de software. E eu creio que o Brasil tem um potencial muito, muito alto para jogos!! Na Eduardo Dias Favero maioria dos casos, é só um sonho... Mas vc deve lutar por ele, pode acabar conseguindo! Aqui Eliazer Kosciuki no XBOX nós somos 3 brasileiros, em um grupo de algumas centenas de pessoas, mas estamos Equipe PalmSoft Tecnologia representando o Brasil firmes e fortes :-). Sempre sonhei em trabalhar com jogos, tive que Fabrício Kolk Carvalho esperar 22 anos entre o dia em que joguei meu primeiro jogo e o dia que finalmente estava na Game Industry. Sua revista vai ajudar muitas outras pessoas a concretizarem esse sonho, assim Paulo V. W. Radtke espero! Capa Parabéns! Carlos H Caimi Daniel Andrade. Webmaster Olá Daniel, Bruce “Sinner“ A equipe da JogosPRO está empenhada em levar sempre um material de alta qualidade para a comunidade brasileira. Nós, como você, acreditamos que o Brasil, logo logo, terá várias empresas de jogos com qualidade Contato internacional. Buscamos com a revista ajudar no que for possível para que isso venha a acontecer o mais [email protected] rápido possível. Grande abraço, Esta publicação foi arte-finalizada nos estudios Equipe jogosPRO. da ProVis Design (USA). Cara vocês estão de parabéns: a revista é demais, clara, objetiva, e mostra o que há de Equipe de Arte: verdade e mentira no desenvolvimento de jogos. gostei porque esse é meu futuro: desenvolver Edgar Garduño, Maria Nitzahary e Ralph Wolfgang Ortiz jogos no brasil, e em java se possível... Eu curto muito java, estava em constante pesquisa sobre a linguagem antes mesmo do lançamento da revista, agora, estou pesquisando mais, Coordenação Geral e Produção dos PDF’s: principalmente por estar aprendendo na faculdade. No momento estou na criação de um RPG, Julio Marchi (...) Bom, a principio é isso, parabéns mais uma vez e até o próximo contato, que será em breve pois quero manter contato com aqueles que fazem o que um dia eu farei: Desenvolver jogos! um abraço, Nossos Números W.O.S Olá, Item Números Valeu os elogios. Esperamos que nesta edição possamos fazer jus a eles novamente. Desejamos sucesso na Downloads full 5049 sua carreira promissora. Não deixe de participar dos fóruns de discussão no site da revista, assim poderemos Dowloads parciais 602 sempre manter contato. Abraços, Visitas no site 14132 Equipe jogosPRO. Emails recebidos 51 Mensagens no forum 191 ah, ia quase esquecendo. Nem todos os emails poderão ser respondidos na revista. E às vezes pela Leitores registrados 237 correria, nem todos poderão ser respondidos. Mas nos comprometemos a ler todos os que nos forem enviados. Se você não quiser correr o risco de ver seu email publicado na revista, por favor avise no Avalição na enquete 8,521 email, que nós tomaremos o cuidado. Clique aqui para acessar o BONUS - Pequenas Grandes Notícias FORUM desta Seção Se você quer ter sua notícia publicada nesta seção, envie-nos seu texto e a arte necessária para [email protected], colocando no campo assunto “Seção Bonus - Nova Notícia”. As notícias poderão ser resumidas sem prévio aviso por necessidade de ajuste de espaço. A determinação de publicar ou não uma notícia será únicamente dos editores. A publicação da notícia é gratuita.

Live Action do TaikoDom Concurso de Jogos

No verão de Florianópolis, a partir do A primeira etapa do Concurso se encerrou dia 2 de fevereiro, haverá um evento no dia 25 de outubro de 2004, à meia-noite, especial para o mundo dos videogames. superando todas as expectativas. A página No norte da Ilha, em Canasvieira, um do Concurso conta com 3911 usuários misto de ‘live action’, cinema e videogame cadastrados, 1537 idéias publicadas, 1317 dentro de um Sapiens Circus (www. sapienscircus.org.br, instalação de idéias abertas para visualização, 1271 interatividade) vai marcar a estréia do abertas para colaboração e 1066 idéias TaikoDom (www.taikodom.com.br), inscritas para o concurso. Temos cerca MMOG brasileiro ainda a ser lançado de 3.78 colaborações por idéia, o que dá em 2005. Os jogadores, ao entrarem no um total estimado de 4800 colaborações. Sapiens Circus, serão transportados para O resultado da Primeira Etapa, com as 36 o mundo de TaikoDom, entrando na melhores idéias selecionadas para a Segunda pele de patrulheiros, piratas, mercadores Etapa, foi divulgado no dia 19 de novembro espaciais, aprendendo a pilotar naves de 2004 na EGS.Na segunda etapa, os futuristas e travando combates épicos no desenvolvedores de jogos irão apresentar espaço. Além do componente videogame, propostas a partir das idéias vencedoras da atores, cenografia, jogos de luz e som, e primeira etapa, e poderão ser apoiados pelo outros recursos cênicos tornarão o Circus Ministério da Cultura para criar demos de uma espécie de LAN House do futuro. jogos que todos poderão conhecer e jogar.

Eletronic Game Show Tecnólogo em Desenvolvimento de O EGS é a primeira feira da América Latina Jogos de Computador onde se reunem os principais fabricantes, desenvolvedores e distribuidores de jogos O centro universitário metodista, localizado no Rio de para consoles, computadores, celulares e Janeiro, está com as inscrições abertas para a primeira internet, atraiu cerca de 22,000 visitantes turma do seu curso de desenvolvimento de jogos. O , nos dias 20 e 21/11, que conheceram o curso tem duração de 2 anos e meio e vai custar 300 que há de mais novo em Entretenimento reais por mês. Com seu início marcado para fevereiro Eletrônico. Além do anúncio dos de 2005, conta com 15 professores (10 mestres e 5 vencedores do concurso JogosBR, doutores). promovido pelo Ministério da Cultura, os visitantes puderam curtir o lançamento de O curso de Tecnologia em Desenvolvimento de jogos a muito aguardados, como: Half-Life Jogos de Computadores, com foco nas atividades de 2, da Valve, e de Halo 2 da Microsoft.40 projeto e desenvolvimento, é um curso de graduação expositores marcaram presença na tecnológica, que atenderá a dois perfis de aluno: o feira, entre eles, Nintendo, Electronic profissional que necessita aperfeiçoar-se rapidamente Arts (EA), Microsoft, Nokia e AMD. e o egresso do ensino médio (normal ou técnico) que Alguns lançamentos também marcaram a feira. Inclusive o 64Fun, computador deseja obter uma qualificação profissional para uma desenvolvido especialmente para jogos. inserção competente, e de curto prazo, no mercado de Será que vai pegar? trabalho de produção de jogos de computador. Sem contar o N-Gage QD e o Nintendo Ao término do curso, o aluno obterá o título de DS.Esperamos, aciosos, o segundo Tecnólogo em Desenvolvimento de Jogos de semestre de 2005, quando acontecerá a Computador. E como todo desenvolvedor é da noite, o edição 2 da feira. curso será noturno. http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine por Carlos Caimi ENTREVISTA

O sistema BREW (pronuncia-se A JogosPRO conversou com Omarson Costa, para saber bruu), da QUALCOMM, é uma mais sobre o BREW e o mercado brasileiro de jogos para tecnologia que conecta a cadeia celular. Ele é o responsável pelo processo de contratação e de valor do mercado wireless. gestão de parceria da VIVO. Envolvendo os desenvolvedores, os distribuidores, os provedores JogosPRO: Quais as perspectivas OC: Sim. O mercado de jogos na de conteúdo, as operadoras, os da Vivo para o mercado brasileiro VIVO gera cerca de alguns milhões de jogos para celulares? de reais/ano. Os desenvolvedores fabricantes e os clientes, para internacionais já compreendem o que todos saiam ganhando Omarson Costa: Aumentar o modelo de “revenue-share” (divisão com produtos e serviços para o número de desenvolvedores e de receitas) e assumem riscos. Os mercado de comunicação móvel. conseqüentemente aumentar desenvolvedores brasileiros ainda a oferta e a receita do serviço. estão aprendendo este modelo e Prestes a completar 4 anos de Investiremos fortemente em políticas estão “acostumados” em modelos idade, os números do BREW de parcerias com desenvolvedores comerciais em que existe sempre um saltam aos olhos (veja quadro). (em geral), mas com foco em jogos “patrocinador”. feitos em Brew. Já é possível projetar Hoje já podemos encontrar receitas de alguns milhões no prazo JP: Neste caso, o desenvolvedor esta tecnologia em 24 países de 1 a 2 anos. brasileiro não pode se sentir em todo o mundo, no Brasil, a intimidado por essa concorrência? VIVO é a única operadora que já JP: Por que a Vivo escolheu a A Vivo pretende incentivar de implantou este tecnologia. tecnologia Brew e não outra alguma forma, ou dar preferência, tecnologia como J2ME por ao desenvolvedor brasileiro? E para quem acha que jogo de exemplo? celular é sem graça, com o BREW, OC: De forma alguma. Os aliado ao OpenGL ES, já é possível OC: Basicamente porque o Brew desenvolvedores brasileiros são tão tem modelo de negócio definido e bons e competentes tecnicamente desenvolver jogos 3D. controle operacional do processo, quanto qualquer estrangeiro. A evitando perdas de receitas. Além diferença é assumir riscos e ousar Números Brew disso o Brew era uma plataforma inovar os modelos comerciais. 100% operacional em operadoras Preferencialmente a VIVO opta por ao redor do mundo (quando o desenvolvedores nacionais em caso Mais de 180 milhões escolhemos há um ano e meio de aplicativos similares. de downloads de aplicativos atrás), enquanto que o J2ME BREW em todo o mundo. não funcionava. No resto elas se JP: Que vantagens tem uma equivalem ou estão muito próximas. empresa brasileira ao optar pela Mais de 38 milhões Vivo e a tecnologia Brew? dispositivos BREW no mercado. JP: Esta tecnologia é compatível com todos os celulares? OC: A VIVO hoje propicia a maior Mais de 150 base “monetizável” (capaz de fazer modelos de dispositivos BREW OC: O Brew é um chip e ao e gerar receitas), além de ter um mesmo tempo uma arquitetura de processo claro de contratação e disponíveis comercialmente. distribuição de aplicativos. Portanto gestão da parceria. O mercado Brew 37 todo o aparelho que possui este chip cresce a taxas de 20% ao mês no é um aparelho compatível. mundo todo. Qual negócio cresce a operadoras BREW comerciais. esta taxa e com controle operacional JP: Qual a perspectiva da Vivo e o e financeiro? Desta forma acredito, 27 mercado de aplicações/games 3D que optando pela VIVO e pelo fabricantes de dispositivos BREW nos seus celulares? Brew, os desenvolvedores podem disponíveis comercialmente. rapidamente gerar receitas nunca OC: Esperamos aumentar a oferta antes planejadas ou imaginadas, se 24 de aplicativos mais desenvolvidos comparadas ao mundo Java. países com serviços BREW nos aparelhos de 3G, que deverão estar disponíveis no final deste ano e JP: A Vivo subsidia de alguma 120 começo de 2005. forma o desenvolvimento de jogos disponíveis para download aplicações Brew? na VIVO. JP: A Vivo está trazendo jogos de empresas com tradição OC: No início de nossas operações neste mercado, como a Jamdat fizemos políticas de incentivo. fonte: www.qualcomm.com/brew e e Gameloft. É por falta de No momento não fazemos mais www.vivo.com.br desenvolvedores no Brasil? incentivos financeiros.  http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine por Carlos Caimi ENTREVISTA

JP: Como um desenvolvedor faz inovações (planejar updates a cada para vender jogos para a Vivo? 3 meses por exemplo), ou seja, Existe algum tipo de licenciamento planejar o negócio. Isto é um ponto ou qualquer um pode se tornar um falho enorme dos desenvolvedores desenvolvedor? nacionais.

OC: Qualquer empresa que queira JP: Recentemente a Vivo entrar neste mercado é bem vinda realizou um concurso para os na VIVO. Basta apresentar um sólido desenvolvedores de jogos para portifólio (PPT por exemplo) e a celular, utilizando o Brew. Qual foi VIVO ter o interesse neste portifólio. o objetivo principal do concurso? A partir deste “aceite” a VIVO fecha Quantos jogos foram enviados? um contrato com o desenvolvedor Quem foram os ganhadores? e entramos em fluxo operacional da parceria. Lembrando somente que a OC: Fomentar o número de VIVO trabalha com empresas e não desenvolvedores (pessoa física) com pessoas físicas. para gerar cultura de mercado e aumentar o número de pessoas JP: Como é feita a remuneração? gerando receitas com a tecnologia. Recebemos mais OC: Mensalmente de 50 aplicativos. é emitido “...planejar o Os ganhadores um relatório estarão publicados (auditável) sobre negócio. Isto é na mídia em breve. a performance Descobrir sua do parceiro. Das um ponto falho área de afinidade. receitas geradas enorme dos Conversar com o desenvolvedor pessoas da recebe uma desenvolvedores área e começar porcentagem cedo com jogos destas receitas. nacionais. “ simples feitos em ferramentas JP: Existe de autoria (flash, alguma preferência por estilos de rpgmaker, Doom3Maker, etc) é jogos? uma atitude inteligente. Aliás, estes pequenos jogos, que são motivo de OC: Não. A VIVO opta por todos os “nariz torcido” por parte de alguns, tipos de jogos (segmentação de estão sustentando muita gente por aí. público) e por isto oferecemos para Fazer um bom portfolio é importante, todos os gostos. pois no momento em que surgir uma boa oportunidade é melhor já estar JP: Devido ao constante avanço da preparado.  tecnologia, jogos para celulares tem um ciclo de vida curto. Isto é Omarson Costa um mito ou uma verdade? Qual o É Formado em Análise de Sistemas (FAAP), tempo ideal para esse ciclo? Marketing pelo Mackenzie (SP), MBA pela USP e Especialização de Direito em OC: Verdade. Porém este ciclo Telecom pela FGV-SP. Mais de 15 anos de Alguns dos jogos disponíveis para pode ser sustentado por pequenas experiência em TI e Telecom tendo atuado download no site da Vivo. inovações. Assim como temos o Fiat em empresas como EDS, HP e Nokia. Palio há anos no mercado (muda-se detalhes do carro), pode-se ter jogos Saiba Mais sobre o BREW que tenham versão 1,2,3 (como QUALCOMM filmes) ou versões on-line, ou versões http://www.qualcomm.com/ com outro cenário (Doom por BREW exemplo) e assim por diante. O mais http://www.qualcomm.com/brew/br/ importante é que não se faz dinheiro VIVODOWNLOADS com jogos em celulares pensando http://www.vivo.com.br/vivodownloads/ em um ou dois jogos. Tem de ser pensado um portifólio coerente e BREW CONNECTION MAGAZINE http://brew.qualcomm.com/brew/en/press_room/adv/brew_connection/ consistente: pensar em categorias brew_connection.html de jogos, pensar em constantes http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine Coluna: Made in Brasil

http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine A PalmSoft Tecnologia vampiros, licantropos e humanos na cidade Great Abyss. Durante a era de paz, Lord Vladistoff é escolhido como o novo líder do clã dos vampiros, passando a treinar dois discípulos para serem A PalmSoft Tecnologia é uma empresa dedicada ao desenvolvimento seus sucessores: Stepanov Riesk e Alef Dusk Gusev. Este último de jogos para dispositivos móveis, além de fornecer consultoria foi escolhido como o futuro sucessor de Lord Vladistoff, forçando nas seguintes áreas: inteligência artificial, ferramentas de autoria, Stepanov Riesk a abandonar a cidade. game ports e jogos sob encomenda. A empresa esta sediada em Florianópolis/SC – uma cidade que tem investido pesado para atrair Os dias seguem tranqüilamente até que, durante uma caminhada novas empresas de tecnologia. a cidade, Alef é capturado em uma emboscada e perde os sentidos sem saber o que o atacou. Ao acordar, percebe que está preso em Nossa principal motivação para o desenvolvimento de jogos um calabouço. eletrônicos para dispositivos móveis está no desafio tecnológico de criar jogos com as grandes limitações impostas por estes Em Crimson After Dusk narramos a história de Alef Dusk Gusev, um dispositivos, tais como: limitação de vampiro em busca por respostas... Ao longo da história, memória, tamanho reduzido de tela, Alef desvendará os mistérios por trás de sua captura e baixo poder de processamento, etc. Além da recente declarada guerra entre vampiros, humanos disso, o desenvolvimento de jogos é um e licantropos. Uma trama instigante composta de várias trabalho cativante e multidisciplinar, histórias e missões paralelas que complementam o envolvendo o que há de mais novo e envolvente enredo de Crimson After Dusk... moderno no mundo da computação, da Um adventure/rpg por PalmSoft Tecnologia. arte e da eletrônica. Estima-se um crescimento substancial no Tank Mission II mercado de jogos Soldado, entre em seu tanque e defenda nossos para dispositivos territórios! Esmague seus inimigos em mais de trinta móveis nos territórios com crescente nível de dificuldade! Mas próximos anos, cuidado: não deixe que os inimigos destruam sua criando assim bandeira, ou o tiro sairá pela culatra! oportunidades empolgantes Tank Mission II traz de volta a vida à clássica jogabilidade de para empresas Battle City do Nintendo em uma grande sessão de nostalgia. que pretendem Um novo desafio da PalmSoft Tecnologia. entrar no mercado de jogos e para empresas já consolidadas neste Golden West ramo de atividade. Part I Este é um setor da economia que tem A Mexican Bullet recebido cada vez mais incentivo do governo Velho Oeste Americano, uma para o seu desenvolvimento, pois se vê uma terra selvagem e sem leis, onde grande chance do Brasil destacar-se em apenas os bravos sobrevivem. um cenário mundial dominado apenas por O ano era 1968, quando empresas estrangeiras. pequenos barcos a vapor traziam No desenvolvimento de nossos jogos da distante utilizamos uma plataforma desenvolvida Ásia várias em casa para suportar o desenvolvimento utilizando as seguintes famílias de imigrantes tecnologias: Symbian, BREW e Java MIDP, e em breve GBA, Nintendo chineses perseguindo o DS e PSP. Além disso, foram criados vários editores para a criação sonho americano. Os novos de mapas, cadastro de entidades e edição de imagens, levando em habitantes estavam indo consideração as restrições impostas pelos dispositivos móveis. Em garimpar ouro na Califórnia, breve estaremos licenciando esta plataforma, como uma forma de procurando assim a segurança auxiliar novas empresas a entrarem no mercado sem ter que passar para a sua família. pelas dificuldades que nós encontramos. Mais metódicos que os Americanos, os Chineses encontravam Crimson After Dusk ouro rapidamente passando a Durante a guerra entre vampiros e um grupo de rebeldes licantropos comemorar dia após dia os novos ocorrida na cidade de Great Abyss, Alef é gravemente ferido. Alef tempos. Mas os garimpeiros americanos é salvo da morte por um vampiro estrangeiro – Lord Vladistoff, o logo organizaram uma estratégia comandante de um ataque decisivo contra os rebeldes licantropos. política para impedir os chineses de  Este ataque pôs fim a guerra e iniciou uma nova era de paz entre trabalhar na mineração e roubar o seu http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine ouro. O exército americano proibiu os chineses de procurar por diamantes, ouro ou qualquer outro deposito de mineral valioso em solo americano.

Quando esta notícia chegou, Chan e outros imigrantes chineses ainda estavam comemorando os resultados do dia. Sheng, o mais velho do grupo rebelou-se contra a decisão e acabou por pagar com a sua própria vida. Todos no grupo assistiram a morte de Sheng e nada puderam fazer para salvar a vida do pobre homem.

Sobre o corpo de seu tio, Chan lembra de uma terrível história que Sheng lhe contou há tempos. A história de um mapa de uma mina de ouro perdida, encontrada por quatro bravos parceiros: um chinês (Sheng), um líder indígena, um ladrão mexicano e um major do exército americano. Eles desenharam um mapa e dividiram em quatro partes, uma para cada um dos integrantes do grupo. Inicialmente Chan havia achado maluca esta história, mas agora as circunstâncias são outras, e Chan decide encontrar esta mina, mas para isso precisaria encontrar primeiro as outras três partes do mapa.

Em Golden West Part I – A Mexican Bullet narramos a história de Chan, um imigrante chinês em busca de uma velha mina de ouro há muito tempo perdida. Durante a sua jornada, ele passará por grandes apuros e precisará contar com a ajuda de seus amigos durante o longo caminho que irão percorrer atrás do sonho americano. Um RPG por PalmSoft Tecnologia. Shadows of Malquidious Do diário do tenente Dio Benetti – “Estes foram tempos árduos. Nossos bravos esforços para conter a invasão dos seguidores de Malquidious nas terras do sul não foram suficientes. Todos os dias, mais monstros juntam-se armada de mortos-vivos e juntos estão destruindo as nossas belas terras.”

“Mesmo com nossas vitórias no sul, quando cheguei à minha vila natal ao norte de nossas terras, encontrei o caos e a destruição. Acredito que as razões para esta invasão sejam os Em Shadows of Malquidious narramos a história de Dio em lendários poderes místicos selados sua jornada para impedir que Zardum ressuscite seu mestre: em uma caverna o demônio Malquidious! Durante o caminho, Dio enfrentará proibida, dentro dos diversos inimigos em um ambiente envolvente e sinistro. Um muros da cidade. RPG por PalmSoft Tecnologia.  Talvez eles queiram trazer Malquidious a vida novamente utilizando estes Equipe PalmSoft Tecnologia poderes.” Todos os direitos reservados. “Eu ainda estou machucado e Contato com a PalmSoft Tecnologia: cansado, mas não tenho escolha. Preciso entrar Rod. SC401 Km 1 – Tecnópolis – Centro GeNESS na caverna e pôr um fim a este João Paulo – Florianópolis – Santa Catarina longo pesadelo.” Fone: (48) 233-2633 “Eu clamo aos deuses que me dêem [email protected] a força necessária para vencer a http://www.palmsoft.com.br  iminente batalha”.

http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine XNA e XBOX 2 Por Julio Marchi O que nos reserva a Microsoft para o futuro do desenvolvimento de jogos eletrônicos

Nos últimos meses muito têm-se especulado sobre o XNA, principalmente depois do sucesso obtido pelo XBox, que apesar de ter chegado relativamente “tarde” ainda assim conquistou seu espaço num mercado que já estava dominado por gigantes como Sony e Nintendo. Praticamente quatro anos se passaram desde os primeiros anúncios do XBox, e a Microsoft em investido mais pesadamente do que nunca no mercado de entretenimento eletrônico desde então. Acompanhando este “time-line”, e conhecendo o perfil da empresa, é fácil imaginar que as intenções da Microsoft com o XNA não sejam nada menos do que a dominação global!

as afinal, o que seria então este tão uma necessidade secundária, que era “rodar ferramentas de conversão fomentado XNA? Uma versão mais os joguinhos” no . Hoje sabe-se a de objetos 3D, texturas e de moderninha do “DirectX”? Uma nova importância real do DirectX no mercado global composição musical, com linguagem? Independente do que de desenvolvimento de jogos e não foi à toa que direito inclusive a ajuste venhaM a ser, qual será seu foco? Que impacto terá o XBox foi desenvolvido como um equipamento em tempo real, direto do no mercado? Qual a conexão entre o XNA e o XBox diretamente derivado do DirectX. PC para o XBox, durante os 2? E como ficam os “outros” consoles? E os micros testes do jogo. O mesmo (PC, Mac, etc), será o XNA compatível com eles? Lester aponta que o XNA engloba uma “nova para o “debug” em tempo tendência” (não tão nova assim) de que o software real, via rede. Eu mesmo Estas e tantas outras perguntas têm trafegado é mais importante que o hardware. Houve andei “brincando” com isso e incessantemente pela internet, mas ainda sem realmente um tempo em que o código era a parte fiquei impressionado com a uma resposta efetiva da Microsoft. As poucas mais importante no desenvolvimento de jogos, simplicidade de se importar informações técnicas sobre o projeto têm sido mas atualmente é exatamente ao contrário: a objetos e ambientes 3D liberadas “à prestação”, deixando a entender que parte artística envolvida é o mais importante. no XBox, e com simples tem sido exatamente esta “expectativa” que a Não somente os gráficos, mas os efeitos sonoros, comandos criar efeitos de ambientação e Microsoft vem querendo “deixar no ar”. as animações, músicas, ambientes, etc. Tudo movimentação. isso, além de jogabilidade e criatividade, são os Pois bem, mas afinal, de que se trata essa coisa elementos que combinados levam um título a Quem está acostumado com o desenvolvimento então? Basicamente o XNA pretende ser um ser um sucesso de vendas. Segundo ele, artistas em Windows usando DirectX, e já teve a ambiente de desenvolvimento universal de gráficos e compositores não são programadores oportunidade de fazer seus testes com o XDK, aplicativos avançados (não somente jogos). O XNA e vice-versa, e a aproximação que tecnologias certamente sabe a diferença que há entre os dois, não será um mero compilador ou uma super- como DirectX permitem entre ambos tem trazido e como o XDK por si só já é uma “mão-na-roda” coleção de bibliotecas baseadas em DirectX, mas excelentes resultados no desenvolvimento dos para o programador. Obviamente que em função sim um ambiente de desenvolvimento real que jogos atuais. Não é por nada que as “engines” deste entendimento há uma expectativa bem no caso dos jogos virá para facilitar o trabalho tem feito fama nos últimos anos, pois ao facilitar maior em relação aos avanços que trará o XNA. em todos os níveis necessários, diminuindo a o desenvolvimento geral de um jogo, libera-se necessidade de atenção na codificação e deixando mais tempo para investir no restante, que é o que “Então o XNA será mais uma ‘engine’, só que assim o foco dos desenvolvedores (artistas) realmente importa. Entretanto, na entendimento enfeitadinha e com ‘etiqueta’?” Se foi isso que mais centrado nos outros aspectos do jogo em da Microsoft, as engines são uma “faca de dois passou por sua cabeça a resposta é NÃO! Segundo si. Segundo Dean Lester (General Manager of gumes”, pois no geral facilitam o desenvolvimento J. Allard (Corporate Vice President and Chief Windows Graphics and Gaming Technologies at mas dificultam a portabilidade, que é onde o XNA XNA Architect), o XNA nasce para ser um padrão Microsoft), responsável diretamente pela maioria pretende atuar mais enfaticamente. da indústria, e não somente um ambiente de dos jogos de sucesso desenvolvidos pela Microsoft, desenvolvimento, e é por isso que a Microsoft a empresa aprendeu muito nestes últimos anos Quem desenvolve hoje para XBox sabe a diferença vem trabalhando em conjunto com quase todas sobre as necessidades dos desenvolvedores e que um bom ambiente de desenvolvimento pode as empresas de hardware para desenvolver o que as expectativas dos jogadores. O DirectX foi um fazer. O XDK (Xbox Development Kit) traz não serão os “standards” dos protocolos, das , das avanço que teve resultados acima do esperado, somente as bibliotecas necessárias para criar os Interfaces e dos formatos suportados pelo XNA (e o qual surgiu inicialmente para atender à XBE (executáveis do XBox), mas também algumas pelo DirectX obviamente). http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine Ao que tudo indica os planos da Microsoft vão “Nível 5” para um computador comum e algo Consoles se distanciam cada vez mais... Antes, bem mais além. Nitidamente o XNA vem sendo como “Nível 7” para um mais avançado. imaginava-se que haveria uma união do que é planejado inicialmente para ser um ambiente o computador com o telefone, a TV, o rádio etc... central no desenvolvimento de jogos eletrônicos, O XNA vem sendo então a realização do sonho Hoje, já é possível ter todos os recursos destes só que independente de plataforma. Obviamente da Microsoft: a compatibilidade por software equipamentos rodando no PC, e mesmo assim o Windows (Longhorn) e o Xbox 2 serão o foco com independência do hardware. Esta idéia este não veio a substituir os “outros” aparatos, e central do XNA, e estes por sua vez darão suporte tem sido também o “sonho dourado” de muitas todos continuam tendo seus espaços em nossas 100% à tudo o que o XNA virá a oferecer, mas empresas de desenvolvimento, pois isso baixaria casas. Notoriamente não irá acontecer o que o Bill nada impedirá que consoles como o GameCube os custos e aumentaria as vendas. Por isso não Gates previu em seu livro “A estrada do futuro”, 2, ou o PlayStation 3, assim como computadores duvidem que desenvolvedores antes enfocados pelo menos não no mesmo nível, mas os consoles como Macintosh e até mesmo o outros sistemas em “outros” consoles rendam-se ao XNA quando seguramente estarão ali “tapando o buraco”, e o operacionais como venham a ser capazes virem que o mercado alheio está ganhando XNA deverá ser o laço de união entre o nicho de de rodar jogos e aplicativos desenvolvidos no terreno graças à esta ferramenta, e obviamente mercado dos Computadores e o dos Consoles. ambiente XNA; tudo em prol de uma ampliação ao dar-se conta das possibilidades de negócios do mercado de games. Notoriamente a Microsoft que seu uso irá proporcionar. Neste ínterim entra ainda outro produto hoje não está de olho nos 40% do mercado de integração mútua: o LIVE. Atualmente computacional que já são consumidores de jogos, Você que está lendo este artigo deve estar conhecido como XBox Live, esta tecnologia que mas sim nos 60% que ainda não são! pensando assim: “O que tem haver Longhorn, permite que se jogue on-line (e que já não era XBox, etc com o desenvolvimento do XNA?”. A nenhuma novidade antes do XBox existir), já Dean Lester aponta também que o avanço das resposta, caso você ainda não tenha alcançado a é capaz de algumas “inovações” como permitir tecnologias tem sido muito efetivo, mas que idéia da Microsoft, é: simplesmente TUDO! O XNA que se converse via voz durante o jogo. O novo isso tem deixado a parte que diz repeito ao será além de tudo um modelo de implementação, Live deverá vir com grandes novidades em desenvolvimento demasiadamente complexa certificação e padronização de periféricos. No sua implementação no XNA, e isso tem sido e cara. Mesmo com todas as ferramentas caso dos “periféricos” para XBox 2 por exemplo, praticamente uma exigência comum entre todos ainda assim é complicado e demorado já está definido que TODOS irão ser compatíveis os desenvolvedores consultados. Ao que tudo desenvolver um jogo. Imaginem então como com PC (e conseqüentemente com Mac pois a indica, boa parte do trabalho tem sido no projeto seria desenvolver um jogo para Windows tendência é que tudo seja USB2). Em verdade, para um “novo Live”, que além da segurança atualmente sem usar o DirectX... Não dá para diga-se de passagem, é uma ingenuidade pensar e versatilidade, trará modelos de negócios e negar que seria praticamente “inviável” esta que já não é assim atualmente, pois a verdade implementações diversas para atender a várias tarefa, não só devido à grande variedade de é que os conectores de Joystick do XBox nada necessidades que se apresentaram. diferentes tecnologias que existem disponíveis, mais são do que portas de um hub USB nível mas principalmente em relação aos “drivers de 1, apenas o conector é específico. Qualquer Tendências Futuras vídeo” e suas incontáveis diferenças. periférico USB pode ser conectado ali com um Vendo que o XNA será algo totalmente voltado simples adaptador e, para os que possuem seu ao software, e depois de ver tantos investimentos Atualmente o DirectX trabalha em um nível XBox “MODDED” (modificado), é possível conectar serem feitos no XBox (em hardware) nestes quase semi-direto dependendo do kernel do sistema teclados, mouses e até impressoras ali para serem quatro anos, muitos assim como eu devem estar operacional, no caso o Windows, permitindo que controlados por uma versão especial de Linux que imaginando se a Microsoft não estaria andando o jogo e o SO compartilhem as funcionalidades já existe para o XBox. na contra-mão do mercado? Entretanto, mais uma da mesma máquina de forma estável e segura. vez Laster tem um contundente argumento que Já o DirectX a ser implementado pelo XNA (e que Entretanto, por outro lado, na cabeça da nos leva facilmente a entender por que a Microsoft virá nativo no XBOX 2 e no Longhorn) deverá Microsoft não se misturam os mercados de PC e está investindo em uma estratégia de software ao ir mais além do que isso, tendo controle direto Windows com o de XBox, e por isso não deverá invés de concentrar-se no hardware dos consoles. de cada dispositivo que estiver presente no existir uma versão de Windows para o XBox 2 Segundo uma análise dele, os consoles são como equipamento. No caso dos consoles o “poder como muitos imaginavam. Na verdade, PCs e “ondas”, e têm seus altos e baixos, enquanto os PC de fogo” deverá ser ainda maior pois não há necessidade de compartilhar o hardware com nenhum outro software, o que dá liberdade de controle total ao DirectX.

Com eu disse antes, o LongHorn (futura versão do Windows planejada para 2006) já virá com suporte nativo ao novo DirectX implementado pelo XNA, assim como o XBOX 2, e para que isso seja possível comercialmente a Microsoft tem trabalhado diretamente com os mais renomados fabricantes de hardware, como Nvidia, ATI, Intel e outros, na criação de definições para os “novos PCs”, que sejam mais simples para os usuários e mais genéricas para os desenvolvedores. Não está definido ainda como serão estas definições, mas em “off” me deixaram escapar que haverá classificações Uma “criatura” demonstrando os efeitos de “Fur” entre outros. Na animação notam-se sutilmente os “músculos” por níveis para os PCs do futuro, algo como movendo-se por debaixo da pele do animal, efeito até então somente usado em superproduções hollywoodianas. http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine trama. O XNA pretende ter recursos mais intuitivos para o desenvolvimento de tudo isso. Entretanto, não pensem que a Microsoft vai sair “metendo o bedelho” no mercado de empresas como Adobe, Discreet ou Cakewalk por exemplo porque já está notório que não. Na verdade o mais provável é que haja uma integração mais profunda entre o XNA e cada um destes programas do que simplesmente importar e usar seus arquivos. Até porque se não fosse assim o XNA acabaria realmente sendo um XDK enfeitadinho. É bem provável que algum novo modelo de OLE seja disponibilizado para que todas as ferramentas possam trabalhar uniformemente no mesmo ambiente (apenas Foto maior: Um “shot” do impacto entre os dois carros em CRASH DEMO 2. O importante aqui são os efeitos de especulação por enquanto). “desfragmentação”, “pressão”, “gravidade”, “força”, “deformação” e “impacto” executados em realtime no XBox 2 e criados usando as ferramentas do XNA. Foto menor: Um close do carro no CRASH DEMO 2, mostrando os efeitos de renderização de texturas, reflexão e luzes, também em realtime, no XBox 2. No mais, o XNA pretende concentrar seu poder do desenvolvimento no jogo e não no código, com Windows tem uma caminhada evolutiva mais Era estrondosamente complexo criar qualquer muito menos na plataforma (desde que esta retilínea e contínua. Isto é, quando se lança um coisinha mais elaborada. Hoje, com programas seja DirectX compatible), e para isso necessitará novo console, tudo é novidade, tudo é inovação e como Maya e 3D Studio Max 6 por exemplo, ser capaz de compilar o mesmo projeto para ali está a “ponta” tecnológica do momento. Mas, bastam alguns cliques para se conseguir efeitos diferentes “ambientes” (Windows, XBox, etc), e este “momento” fica naquele nível sem evolução que antes demoravam semanas ou meses para em cada compilação compatibilizar o produto real, e demoram anos até que um novo console serem alcançados, os quais muitas vezes tinham final ao máximo, o que não é uma tarefa fácil seja lançado e novamente eleve o nível dos que ser quase que manualmente desenvolvidos. e depende de combinação de esforços entre os mesmos ao “ultimate hi-tech peak”. fabricantes de cada equipamento e os planos da A recíproca é verdadeira para o XNA com relação Microsoft para o XNA. O que se mantém constante nesta linha de ao desenvolvimento de jogos. Antes, para fazer tempo é a evolução dos PCs, que entre o um jogo 3D o programador tinha que criar todas Parece até que estamos falando de Java, mas a lançamento de uma versão de console e outra, as rotinas necessárias, e quase que fazia um 3D implementação é muito diferente. O que é um evolui constantemente e se torna MELHOR renderer em tempo real. Hoje, com o XDK (ou fato comum entre ambos é que a multiplataforma que o console, o qual não evolui até o próximo com algumas engines) já é possível importar os é bem mais que uma utopia; é uma necessidade lançamento (que não vem em menos de 3 ou elementos 3D em buffers e manipulá-los (ainda global! A companhia que conseguir ter seu 4 anos). Um exemplo disso é o próprio XBox, via programação) com menos complexidade e ambiente multiplataforma reconhecido e que em 2001 era sem sombra de dúvida o sem necessidade de escrever nenhuma rotina 3D usado pela maioria dos fabricantes dominará o equipamento mais poderoso do mercado, e nem em especial. Com o XNA provavelmente haverão mercado de software. Isso já acontece hoje com o os mais caros PCs da época poderiam comparar- mais ferramentas de criação em RealTime, Photoshop da Adobe, o qual é usado em Macs, PCs, se a ele. Hoje, qualquer computador de $500 com direito a simulação no próprio ambiente e Silicons e etc, além de atender às necessidades comprado nas lojas de departamentos é mais visualização de resultados antes mesmo de se de vários nichos diferentes de mercado (desenho avançado tecnologicamente que um XBox (ou compilar o programa. gráfico, internet, multimídia, vídeo-produção, qualquer console)... O que isso tem a ver com desenvolvimento de jogos, etc etc etc). A idéia o XNA? Simplesmente TUDO! Então os consoles Pelos “demos” que a Microsoft disponibiliza, é a mesma, só que em uma “camada mais deixarão de existir ou deixarão de ser o foco dos pode-se ver que o novo XBox 2 possuirá poder de baixa”, onde o ambiente fará a diferença e não jogos eletrônicos? A resposta a esta pergunta é processamento suficiente para ser até uma estação a ferramenta. O Java tínha condição de alcançar NÃO, mas ganharão novos enfoques com certeza. de CGI profissional, e o XNA deverá ser a chave que este nível, mas perdeu o rumo em função de Assim como o XBox hoje já substitui muitos DVD- liberará todo este poder para o desenvolvimento outros nichos de mercado e a Microsoft está hoje Players, amanhã este poderá ser uma central de de jogos num ambiente mais intuitivo. Segundo abocanhando sozinha todo este potencial da área entretenimento mais completa e expansível do o próprio Bill Gates diz, não adianta ter um super- de entretenimento. No mais, diferentemente do que simplesmente um “video-game”. E é aí que ultra-hyper-hardware que seja tão complicado de Java, o XNA não será “pré-compilado” e executado entra o XNA, principalmente quando em 2006 o programar que faça com que sejam aproveitados em uma “virtual-machine” mas sim compilado e Longhorn e o Xbox 2 estiverem nas prateleiras! somente 20% de seu potencial. Ou ainda pior é ver otimizado para um determinado hardware que, Será o poder de desenvolvimento do XNA, aliado os times de programação se matando para cumprir notoriamente, terá que ser compativel com DirectX às “padronizações” envolvidas nas parcerias, os deadlines (prazos de entrega) das etapas do (o qual não duvido venha receber muito mais que permitirão que sejam desenvolvidos novos desenvolvimento de um jogo por questões de suporte diretamente implementado nos novos equipamentos facilmente integráveis ao XBox, necessidades técnicas. É aí principalmente onde o componentes de hardware). expandindo suas funcionalidades. XNA fará grande diferença, liberando todo o poder de cada plataforma suportada com o mínimo do On-Line Entertainement Inovações reais do XNA esforço dos times de desenvolvimento. A Microsoft tem estado atenta a este mercado Lembro-me quando comecei a aprender CG não é de hoje, assim como outras companhias, (Computação Gráfica), com o 3D Studio 2.5 (para Já se sabe que não basta ser 3D para que um jogo mas ninguém até então estava seguro de que DOS), com o Animator PRO e com algumas outras seja um sucesso, é necessário também uma boa o “cyberspace” realmente se tornaria uma poucas ferramentas que existiam, a maioria música de fundo, impactantes efeitos sonoros, verdade comercial. Já não é de hoje que jogar ainda baseadas ou dependentes de AutoCad. excelente jogabilidade e obviamente uma boa on-line é uma atração, mas é bem recente http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine a possibilidade de negócios que isso abriu. “confusos”, é nítido que a Microsoft trabalhou que o MSX tinha de impressionante era a extrema Graças à popularização e ao barateamento do bem e que o XBox já conquistou grande parte do facilidade de programação, que dava aos iniciantes que chamamos aqui nos EUA de “broadband” mercado que antes era dos “outros” consoles. um gostinho de “sim eu posso” e permitia que (conexões com a Internet em alta velocidade), qualquer pessoa “leiga”, com algumas poucas linhas não só os jogos on-line, mas os negócios virtuais Mas, existe uma diferença nisso tudo: o mercado de Basic, criassem programas com impressionantes explodiram em 2003 e 2004. E a tendência é de HARDWARE (XBox) e bem diferente do de efeitos visuais e sonoros, coisa que nenhum outro que tornem-se mais efetivos entre 2005 e 2006. software (que é onde a Microsoft é realmente computador da época permitia (nem mesmo o PC, Quando a Microsoft anunciou o Windows .NET na forte)... Entretanto, para a maioria que pensa Mac ou Amiga). Se o XNA pretende fazer o mesmo virada do século, não havia toda esta estrutura que a Microsoft esteve caminhando em “terreno hoje, já sabemos que a Microsoft foi capaz de instalada e acabou que o que era para ser o .NET desconhecido”, saibam que nos primórdios da implementar um modelo rústico disso 20 anos atrás, acabou apenas como uma sombra do projeto Microsoft, Bill Gates já andou dando seus pitacos em com muito menos recursos do que existem hoje, e original, e é bem provável que boa parte das projetos de hardware. Na década de 80 a Microsoft com indubitável sucesso! idéias do .NET venham a ser incorporadas ao esteve diretamente ligada, juntamente com a XNA, e este aproveite as experiências positivas do ASCII do Japão, ao projeto de um microcomputador Mas, voltando do passado e olhando para o XBox Live para tal. revolucionário chamado MSX. Não se sabe futuro, por mais que o XBox 2 venha ser uma exatamente os “porquês”, apenas especulam-se os “ameaça” ao PlayStation 3 e ao GameCube, o XNA Mais que uma plataforma de desenvolvimento motivos, mas a Microsoft saiu do projeto do MSX não deverá ser. Na verdade, este poderá ser um de jogos, o XNA será um ambiente de integração no final da década de 80 e deixou tudo nas mãos “ampliador de mercado” para todas as empresas. de recursos, onde os jogos serão o foco, mas não da ASCII (que foi quem praticamente afundou o Segundo analistas da Microsoft, ao desenvolver o único objetivo. A tendência de se ter jogos “on- MSX por falta de visão comercial). Curiosamente um jogo para PlayStation por exemplo, mais de line” (não apenas que se joguem via internet, o MSX nunca foi uma realidade nos EUA, mas 65% do código é “amarrado” ao hardware, e a mas que sejam USADOS via rede) torna-se cada dominou fortemente o mercado de computadores portabilidade dos jogos é complicada. Esse é um vez mais real. Atualmente a Microsoft tem planos na Europa, nos países do Ocidente e em quase efeito bilateral, pois o mesmo se dá para portar de que com o XNA não hajam mais as tediosas toda a América do Sul. É óbvio que as experiências um jogo de outra plataforma para o PlayStation instalações que são necessárias nos jogos de PC. que a Microsoft teve com o MSX (que especula- 2. O GameCube é mais “light” neste aspecto, mas O “ideal” seriam jogos plug’n’play, tipo: coloca se significava “M”icrosoft “S”ystem e”X”tended) também é muito dependente do hardware. o CD e começa a jogar (como é nos consoles). tem sido válidas hoje, pois para quem não sabe Esse seria o primeiro passo para jogos 100% os primeiros testes do que veio a ser o Plug’n’Play Uma vez que obviamente todos os equipamentos on-line, onde clica-se num ícone e inicia-se um foram feitos no MSX. O que isso tem a ver com são assim (alguns mais, outros menos), o jogo. Assim como Flash e ShockWave são hoje o XBox? Tudo, pois é como se o XBox fosse um diferencial pode estar em uma plataforma de uma realidade que há poucos anos atrás eram “desencavar” de uma antiga idéia, só que agora desenvolvimento integrada, a qual pretende ser inviáveis de se implementar, a tendência é que devidamente implementada. Sem querer comparar o XNA, que além de abrir a possibilidade de um o XNA abra as portas para os tão sonhados “.NET uma máquina com a outra (pois são totalmente mesmo programa ser rapidamente portado para applications”, onde aí incluem–se os jogos! distintas, com enfoques e realidades comerciais outras plataformas, visa diminuir a complexidade Obviamente não será em 2006 ainda, mas se bem diferentes), mas existem sim similaridades do desenvolvimento, baixando assim custos e tudo continuar no ritmo em que está, em 2010 curiosas, entre elas o fato de que o MSX, assim aumentando a qualidade final do produto. será realmente “o ano em que faremos contato”! como o XBox, foi um computador livre de sistema operacional e com um BIOS cheio de recursos, onde Mas, antes que você venha ter “sonhos de Sony x Microsoft x Nintendo o software tinha livre poder de atuação na máquina grandeza” pensando em desde já investir no Se olharmos o PlayStation, o GameCube e o toda! Até aí tudo bem, faz sentido, mas e o XNA , XNA pra XBox sem apaixonismos, e também analisarmos o que tem com isso? Mais ainda! Uma das coisas friamente o “background” das empresas, podemos chegar a fazer algumas “previsões” do que deverá acontecer num breve futuro. A Sony praticamente domina o mercado japonês de entretenimento, seguida de perto pela Nintendo, e deteve por um bom tempo a hegemonia no mercado de jogos com o PlayStation 1 e 2. Desde o PS1 este vinha sendo o console preferido até a chegada do “divisor de águas”, o XBox. A Microsoft nunca entrou numa briga para perder, e mesmo que tenha seus “odiadores de plantão”, não será a primeira vez que a empresa entra “atrásada” em uma competição por um nicho de mercado e acaba por conquistar quase toda a clientela. Ocorreu o mesmo com o MS-DOS frente ao DR-DOS e ao IBM-DOS, o mesmo com Windows frente ao OS/2, o mesmo com o Word frente ao WordStar, com o Excel frente ao VisiCalc Representação de vários movimentos naturais do corpo humano, com deformações faciais para simular expressões (foto e ao Lotus 123, o mesmo com o Internet Explorer menor). No mesmo vídeo notam-se os efeitos de texturização, de partículas (que geram a fumaça do cigarro), vento, frente ao NetScape e tantos outros exemplos que transparência e reflexão (foto maior). O interessante deste vídeo não é que ele tenha todos estes efeitos, pois nada disso é podemos desencavar aqui. Com o XBox não vem novidade em animações 3D, o importante deste exemplo é que tudo é renderizado em realtime, demonstrando o potencial sendo diferente, e mesmo que os números sejam que um jogo poderá ter ao usar-se da combinação destes recursos. http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine eletrônicos para diversas somente destes mas também de alguns “big “O software será simplesmente o elemento plataformas distintas. Desta guys”. Estima-se que o modelo de licenciamento mais importante no entretenimento digital da forma, se a Nintendo um atual implementado pela Microsoft (e similares próxima década. XNA reafirma o compromisso dia resolver aderir ao XNA, da Sony e Nintendo) simplesmente já “mataram” da Microsoft com a indústria de jogos as licenças de venda de projetos que tinham gasto entre 3 e 5 milhões de digitais, e o desejo da empresa em trabalhar jogos para GameCube serão dólares, e por isso estão sendo repensadas muitas feitas entre a Nintendo e os estratégias de licenciamento novas para produtos participativamente para elevar esta mesma produtores, sem intervenção gerados através do XNA (e não para o XNA em si), indústria a níveis mais amplos.” da Microsoft. que sejam mais flexíveis e abrangentes, de forma - Bill Gates, Fundador e Diretor Geral da Microsoft. a ampliar o mercado e não o retrair. Entretanto, Isso tudo gera uma pergunta nada de definitivo existe até então, ou talvez comum na cabeça todos: o tema esteja ainda “fechado” para discussão desenvolver um jogo 100% compatível com tudo “Como ficarão potenciais novos desenvolvedores pública. O importante é notar que aparentemente e todos, saiba que nem a Sony nem a Nintendo que pretendem ‘tentar’ criar jogos para o XBox 2 ou haverão mudanças ou implementações nos se manifestaram ainda com relação ao XNA (o usando XNA, mas que não possuem recursos para modelos de licenças para gerar facilidades que já era de se esperar). Somente o tempo dirá as licenças iniciais?”. Esta pergunta foi respondida àqueles que pretendem embarcar na aventura de se a Microsoft vai ter o “poder de fogo” de atrair a por J. Allard da seguinte forma: “Eu gostaria de desenvolvimento de jogos, mas que não possuem atenção destes dois em específico para dar suporte ver mais e mais ‘garage-games’ surgindo todos “apadrinhamento” ou recursos financeiros para ao XNA ou não. O mais provável é que a Nintendo os dias. Assim como hoje acontece com os filmes, investir pesadamente num projeto do gênero. É renda-se e tire proveito do XNA para ampliar seu onde a indústria cinematográfica é capaz de gastar esperar pra ver... A verdade é que, para a Microsoft, mercado, mas a Sony dificilmente irá ceder espaço centenas de milhares de dólares em uma única neste caso, quantos mais melhor!  para a Microsoft e para o XNA. produção, existem outros como Kevin Smith (que produziu Clerks, um filme amador de 1994 que Mais informações: Licenças ganhou vários prêmios e chegou aos cinemas http://www.microsoft.com/xna Uma vez que existem abordagens bem pela Miramax) que foi capaz de produzir um Julio Marchi diferenciadas no que se refere às licenças dos filme de sucesso apenas com a câmera da mãe É Analista de Sistemas especializado em engenharia de jogos eletrônicos, obviamente que o XNA já chega emprestada e sem ultrapassar o limite do cartão software, networking, multimídia e Internet. deixando esta dúvida no ar: “Se um jogo para de crédito. O mesmo cenário se repete no que Atualmente é CEO de duas empresas nos EUA onde desenvolvendo diversos projetos técnicos e audio-visuais. Windows não exige nenhuma licença, e um jogo tange ao desenvolvimento de jogos. Hoje existem Atualmente está investindo em negócios ligados ao para XBox só pode ser comercializado quando centenas de milhares de programadores e grupos mercado de desenvolvimento de jogos eletrônicos. autorizado pela Microsoft, como fica o caso de de desenvolvimento que um projeto desenvolvido em XNA?” A resposta é são capazes de criar novos simples: exatamente como são hoje! Uma coisa e inovadores títulos, mas De onde vem o nome XNA? será ter a licença de uso do XNA (que ainda está estes ficam na dependência indefinida como será), outra serão os módulos de ter alguma chance de Segundo me disseram J. Allard e Dean Lester, o “X” de para cada tipo de console/computador. Se você vai mostrar-se para conquistar XNA representa a junção de esforços de toda a indústria desenvolver para Windows, ou para Xbox, ou para seus espaços, e nisso o XNA em torno dos dois produtos chave da Microsoft para o ambos, notoriamente terá que ter módulos do poderá ser uma ferramenta mercado de entretenimento: o DirectX e o XBox. O “N” XNA destinado a cada um deles, e provavelmente importante.”, deixando a representa a idéia de “Next-generation“ (algo como a modularização do XNA será o canal por onde as entender que o XNA não “Geração Futura”, nada diretamente ligado à StarTrek), empresas “amarrarão” suas licenças. terá complicadas licenças pois explicam eles que na visão geral da Microsoft de uso. Ainda sobre os “o software é o combustível para o futuro”. Ambos Atualmente, para se comercializar jogos para ‘garage-games’ Allard compartilham a idéia de que mesmo com os avanços XBox, mesmo que se tenha adquirido o XDK enfatizou: “Queremos ver do hardware, as inovações mais significativas virão legalmente, ainda assim tem-se que firmar um mais e mais ‘garage-games’ sempre em formato de software. E finalmente o “A” contrato com a Microsoft para poder vender seu tornado-se sucesso! Os significa “Architecture” (Arquitetura), demonstrando jogo, pois existe um critério de “criptografia” pequenos estúdios e os a idéia de que o conjunto de ferramentas conectadas que somente a Microsoft gera na matriz do novos programadores são e combinadas em um ambiente único podem DVD para que este possa ser reconhecido no ambiciosos e criativos por proporcionar aos artistas uma libertação para sua XBox (que se “autoprotege” contra a pirataria, natureza” – complementa criatividade, com menos preocupação com a parte o que não ocorre com o Windows). Existem ele – “e os grandes técnica em si. Allard até fez uma comparação entre o diversos modelos de contratos que a Microsoft distribuidores terão que XNA e a Lego, onde todas as partes se encaixam e se oferece hoje para o licenciamento de jogos aprender a dar mais combinam integralmente, deixando o resultado da XBox, e mesmo Allard não me pôde (ou não atenção à estes no futuro. criação para a qualidade imaginativa de quem combina estava autorizado) a apontar quais mudanças Nós aprendemos a nossa os elementos, mas sem necessidade de complexos haverão neste sentido. entretanto, ainda lição e estaremos fazendo a conhecimentos para tal. segundo ele, cada caso deverá ser tratado nossa parte com o XNA... “. Ironicamente poderíamos então dizer que XNA = independentemente, negociável conforme os eXtravagant New-generation Architecture, o que não interesses de cada distribuidor/desenvolvedor e, A Microsoft tem sofrido estaria fora do escopo do produto nem das intenções obviamente, a Microsoft. enormes pressões dos da empresa, mesmo sendo esta nomenclatura apenas “pequenos” e “médios” uma piada! A nomenclatura mais correta seria Nada menos lógico para um produto que desenvolvedores, e ainda “Cross-platform New-generation Architecture”. pretende centralizar o desenvolvimento de jogos segundo Allard, não http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine por Alessandro Vieira dos Reis

A “Brasilidade” nos Videogames No texto a seguir discuto a questão da “brasilidade” nos jogos eletrônicos, para isso fazendo uso de conceitos da Literatura e da Antropologia nacionais. Desenvolvo a questão das temáticas de nosso país, bem como dos atributos comportamentais do brasileiro e das formas de posicionamento de sua cultura diante das estrangeiras.

A - Identidade, Cultura e Marca A fim de oferecer subsídios para a discussão de tal tema, Jogos eletrônicos alistam-se como legítimos produtos de uma proponho resgatar a contribuição dos estudiosos da Literatura economia que gira em torno de bens intangíveis tais como e da Antropologia brasileira e procurar, dentro das limitações símbolos, estética, fruição. Produtos de tal natureza econômica técnico-científicas existentes, aplicar tais saberes. Quando se fala possuem marcas que demandam uma gestão cultural, que toca de “brasilidade” é impossível deixar de pensar no Modernismo, na em questões de cunho psicológico da experiência humana. A Semana de Arte de 1922, nas Ciências Sociais de Sérgio Buarque marca de produtos da “Era do Conhecimento”, antes de tudo, se de Holanda, Darcy Ribeiro, na Literatura de Paulo Prado, etc. define por uma eficaz interação psicológica do produto com seus consumidores. B. 1- Temas Brasileiros Os campos temáticos amplamente estudados e reconhecidos como No caso específico dos jogos eletrônicos, a marca, enquanto legitimamente brasileiros por literatos e cientistas sociais podem estilo único, peculiar, que permite identificar a qualidade, ser resumidos, a grosso modo, em quatro: hoje se baseia fundamentalmente no país em que estes são desenvolvidos. Os jogos feitos nos EUA apresentam-se fortemente  Os sofrimentos do povo brasileiro, decorrentes de modelados pelo paradigma cinematográfico de Hollywood problemáticas sociais (relacionados com o “homem (em termos de narratologia, temáticas, acertos e vícios, etc), cordial” de Sérgio Buarque de Holanda, que sofre enquanto os jogos asiáticos, em especial do Japão, costumam acomodado diante das injustiças; e o conceito do brasileiro apresentar outros modelos, por vezes inovando em termos de como um “povo triste” do escritor Paulo Prado); história e jogabilidade.  Tropicalismo (entendido aqui não como o movimento Neste princípio de século XXI, a indústria dos jogos eletrônicos musical, mas como o conjunto de atributos “tropicais”, no Brasil se vê em um impasse quanto a sua identidade cultural latinos, hedonistas, alegres, sensuais, festivos do povo, de seus produtos. Tal questão veio à tona de forma significativa, tais como carnaval, futebol, música, etc). incluindo a participação do Ministério da Cultura no debate, no III SBGames (Simpósio Brasileiro de Jogos Eletrônicos, ocorrido em  História (Enquadra-se aqui falar de uma ampla gama outubro passado em Curitiba). de eventos tais como o descobrimento do Brasil, guerras internas como Canudos, os desbravamentos Qual é, ou deveria, ser a “Marca Brasil” em jogos eletrônicos? dos bandeirantes, o Quilombo de Palmares, e mesmo os Afinal, o que lhes conferiria um diferencial em termos culturais, folclores do território nacional) que poderia ser comercialmente explorado, dos jogos norte- americanos e asiáticos?  Geografia (As belezas naturais, como florestas, praias, fauna, relevo, riquezas, etnias, colonizações, etc). B - A Contribuição da Literatura e das Ciências Sociais B.2 - Atributos Comportamentais do Brasileiro A discussão em torno da identidade cultural brasileira já é de Ainda seguindo a contribuição dos cientistas sociais, o povo longa data. O tópico que este artigo enfoca, a “brasilidade” dos brasileiro tem seu comportamento definido, de modo geral, pela jogos eletrônicos, é apenas mais um desdobramento de tal debate. seguinte gama de propriedades:  http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine Interpessoalidade (Calor humano, facilidade de comunicação, Conclusão gosto pela amizade e convívio. Este ítem faz lembrar da revolução Nem todo jogo brasileiro precisa explorar temáticas tidas como que os usuários brasileiros da internet causaram em sites de legitimamente nacionais (B.1). Jogos como “Outlive” e “TaikoDom” relacionamentos como o Orkut); não o fizeram, e não por isso deixam de possuir “brasilidade”. Porém a construção de uma “marca Brasil” passa pelo estudo como os Informalidade (Há quem diga que se trata de relaxamento e atributos comportamentais do povo brasileiro (B.2) podem influir preguiça, e talvez estejam certos mesmo. O povo brasileiro é em sistemas de jogabilidade, dada a íntima ligação entre relações informal, dado ao riso, à festa e a formas despreocupadas de sociais e modos de fruição no jogo (como fica evidente em jogos relações e tratamentos); como “The SIMs”).

O famoso “jeitinho brasileiro” (Levar a melhor, encontrar uma Da mesma forma, as empresas de desenvolvimento de jogos e solução mágica, burlar o Sistema, passar a perna, usar de publicadoras precisam eleger uma forma de posicionamento malandragem para vencer sem esforços. Vale lembrar que boa parte estratégico cultural para seus produtos (C). É da opinião do autor dos mais temidos hackers do mundo são brasileiros) que o ufanismo xenófobo do Verde-Amarelismo e a ausência de modelos do Pau-Brasil teriam pouco a acrescentar para a indústria Diversidade e Mistura (Dada sua geografia e história, o povo nacional de jogos eletrônicos. brasileiro na verdade é uma mistura de povos distintos, cada um com identidade própria, porém unidos virtualmente pelo território Um posicionamento antropofágico, isto é, na imitação e e a língua portuguesa. Qualquer jogo portador de “brasilidade” transformação seletiva de elementos estrangeiros mesclados com deve saber projetar isso em sua jogabilidade, tal como a internet nacionais rumo à inovação parece, no atual cenário, a alternativa brasileira o fez gerando uma complexidade única de comunidades mais viável para os games no Brasil, como fica transparecido em virtuais). jogos como o Erinia (onde o modelo de MMOGs é mesclado ao folclore nacional e europeu). C - Posicionamento Estratégico As formas como a identidade nacional, entendida aqui como união A ausência de uma identidade clara, fixa e estanque proposta das temáticas (ítem B.1) e dos atributos comportamentais do povo pelo posicionamento antropofágico, que se desdobra na (ítem B.2) se posiciona diante da produção cultural, principalmente aceitação da diversidade e em misturas harmônicas, pode se diante do mundo, foram amplamente discutidas pelos artistas constituir o grande diferencial dos jogos eletrônicos brasileiros modernistas, no início no século passado. na atual fase de expansão dessa indústria no país. 

Decorrentes da Semana de Arte Moderna de 1922 e todo o debate intelectual e artístico que ela suscitou, foram basicamente três Alessandro Vieira dos Reis as posições estratégicas emergentes dos modernistas no que diz [email protected] respeito à cultura nacional diante do mundo. http://www.certi.org.br/~avr/

Posição Características Desvantagens Verde-amarelismo, de Afirmação defensiva, intensa e Xenofobia. Além disso, o Verde-Amarelismo capta- Plínio Salgado, Cas- ufanista da cultura nacional, em det- va e exibia esteriótipos nacionais para o mundo. siano Ricardo, etc. rimento do estrangeiro. Exposição Exemplo: “Brasil, a Terra do Futebol” (Apenas do exagerada dos traços nacionais, futebol?). Também não permitia intercâmbios, apresentados todos como bons, sem misturas e mudanças seleção. Pau-Brasil, defendido O nosso como é, “errado” mesmo, Ausência de modelos, métodos, projetos. Postura por Oswald de Andrade sem tratamentos. Devemos mostrar um tanto espontaneísta enquanto arte e técnica. todos os nossos traços culturais tais como são, os bons e os problemáti- cos. Antropofagia, desen- Assimilação seletiva dos modelos Sem uma identidade clara: a mistura. Macunaíma volvido a partir do Pau e conteúdos estrangeiros, mis- é o protótipo do herói antropofágico. Segundo seu Brasil por Mário de turando com os nacionais. Forma criador, Macunaíma não tem nenhum caráter, pois Andrade liberal de nacionalismo, que previa a tem vários. Para Mário de Andrade, a pluri-identi- globalização nesta frase de Mário de dade do brasileiro, longe de ser uma desvanta- Andrade: “Queres ser global? Fala da gem, era seu grande diferencial: podemos ter tua aldeia”. diversas identidades, em trânsito, dependendo de nossa dieta cultural.

http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine JAVA Micro Edition por Paulo R. C. Siqueira Na última edição falamos das possibilidades para o desenvolvimento de jogos utilizando a plataforma Java. Mostramos que, além dos jogos para celular, é possível fazer muito mais. Nesta edição vamos nos concentrar na tecnologia Java para pequenos dispositivos, J2ME, mais especificamente na tecnologia para dispositivos móveis (como celulares), a MIDP.

mbora nosso foco seja o desenvolvimento básico de desenvolvimento até a geração dos Vamos agora criar um novo projeto. Para isso, para celulares, J2ME oferece mais do arquivos para distribuição. clique em “New Project”, coloque “JPong” em que isso. Essa plataforma está dividida “Project Name” e “JPongMIDlet” em “MIDlet class em Configurações e Perfis, sendo que as Nosso objetivo aqui é mostrar como pode ser name”. Na próxima tela aceite as configurações configuraçõesE determinam um conjunto mínimo feito o desenvolvimento de um pequeno jogo em padrão clicando em “OK”. No diretório de de funcionalidades que um grupo de dispositivos J2ME / MIDP. Para a leitura dos códigos incluídos instalação do WTK há um sub-diretório chamado deve oferecer e o ambiente de execução, e os nesta coluna, consideraremos que o leitor tem “apps”. Quando confirmar a criação do projeto no perfis determinam funcionalidades para um um conhecimento básico de Orientação à Objetos passo anterior, um subdiretório chamado “JPong” sub-grupo dentro de uma determinada e da linguagem Java (se o leitor não souber Java será criado dentro de “apps”. Todo o código que configuração. mas conhecer C++ poderá compreender as for gerado para esse projeto deverá ser colocado listagens com igual facilidade). na pasta “apps/JPong/src”. A figura 2 mostra o Essa divisão em configurações e perfis foi diretório criado pela KToolBar e a figura 3 mostra criada basicamente por causa da grande Ambiente de Desenvolvimento a tela principal após a criação de nosso projeto. diferença entre os dispositivos existentes. A primeira coisa que devemos fazer é preparar Existem duas configurações definidas o ambiente de desenvolvimento. Para isso Além do diretório para código-fonte, foram até o momento: CDC (Connected Device precisaremos do J2SDK (a mesma utilizada no criados diretórios para os arquivos de recurso Configuration), que roda em cima de uma desenvolvimento de qualquer aplicação Java) (sons, imagens etc) - “apps/JPong/res” - e JVM compatível com a tradicional, e a CLDC e do WTK (Wireless ToolKit), que podem ser bibliotecas - “apps/JPong/lib”. Se usarmos esses (Connected Limited Device Configuration), baixados no endereço http://java.sun.com/ diretórios (e faremos isso), compilar e rodar que roda em cima de uma máquina virtual download. Além disso, é interessante instalar nosso exemplo será tão simples quanto clicar no própria, mais limitada do que a convencional um editor qualquer (como o jEdit – http://www. botão “Build”, e depois em “Run”, na KToolBar. para poder ser executada em dispositivos jedit.org/). Os demais diretórios podem ser ignorados pois com pouca capacidade de processamento e serão utilizados internamente pela ferramenta. memória, além de displays também bastante Instale o J2SDK, o WTK e o editor seguindo as limitados. Essa máquina virtual é conhecida instruções de seus respectivos instaladores. Criando um Jogo como KVM (Kilobyte Virtual Machine). Em seguida clique no menu Iniciar, Vamos então colocar a mão na massa! Abra o Programas, J2ME Wireless Toolkit , seu editor e copie o código da listagem 1. Essa A configuração que nos interessa é a CLDC. Em KToolBar, onde indica a versão do é a nossa MIDlet. É a classe principal de uma cima dessa configuração podemos citar dois WTK que você instalou. Veja a tela principal aplicação MIDP, que controla a execução do perfis principais: MIDP 1.0 e MIDP 2.0. Embora a da KToolBar na figura 1. programa, e a que será acessada pelo celular  versão 2.0 do MIDP (Mobile Information Device Profile) apresente uma quantidade significativa de melhorias em relação à versão 1.0, estaremos utilizando esta última, pois não existem muitos aparelhos com suporte ao MIDP 2.0 atualmente no mercado. A tendência é que os dispositivos com suporte a MIDP 1.0 sejam aos poucos substituídos por dispositivos para MIDP 2.0; por isso poderemos abordar esse assunto em uma edição futura (opine em nossos fóruns!).

Para mostrar como funciona o desenvolvimento de MIDlets (que é como são chamados os aplicativos desenvolvidos com tecnologia MIDP), construiremos um exemplo bem simples e prático, no qual iremos Figura 01: Tela inicial da KToolBar abranger desde a preparação de um ambiente http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine Figura 03: KToolBar após a criação de nosso novo projeto “JPong” pasta “res” citada anteriormente, para que a providências. No caso, tudo o que fazemos é “KToolBar possa encontrá-las. setar as flags relevantes da classe de lógica do jogo, que se encarregará de tratar os eventos Mais abaixo no código vemos o método na hora certa. “paint”. Esse método é o que desenha a tela do jogo em si. Ele é chamado Antes de falarmos da classe de lógica do jogo, automaticamente pela máquina virtual vamos ver uma pequena classe utilitária, sempre que a tela precisa ser repintada e chamada Sprite. Pelo próprio nome o leitor não deve ser utilizado diretamente pelo já deve imaginar do que se trata: uma classe desenvolvedor. com as informações e comportamento comuns a todos os objetos do jogo. A listagem 3 O método “run”, logo abaixo do “paint” é o apresenta esta classe. que executa o loop principal do jogo. Ele basicamente calcula o tempo certo de cada Para os desenvolvedores OO puristas, devemos ciclo e chama o método “tick” para atualizar uma explicação: por quê estamos usando Figura 02: Diretório criado para nosso exemplo a lógica (falaremos da classe de lógica a atributos públicos, ao invés de encapsulá- seguir) e o método “repaint”, que pede para los e acessá-los apenas através de métodos se o telefone tocar enquanto estivermos a máquina virtual redesenhar a tela (o que de acesso, como mandam as boas práticas jogando, por exemplo. vai gerar uma chamada para o método paint no desenvolvimento Orientado a Objetos? citado acima). A resposta se resume a uma palavra: Nossa classe é herdada da classe MIDlet, performance. que possui três métodos abstratos que Os dois últimos métodos desta classe são devemos implementar: startApp(), que é “keyPressed” e “keyReleased”. Como o nome Se seguirmos à risca os conceitos OO, corremos chamado quando nossa aplicação é iniciada, diz, é através deles (que são herdados da o grave risco de criarmos um jogo lento, de tal pauseApp(), chamado quando algum evento classe Canvas) que a KVM nos informa forma que tornaria a experiência do jogador do dispositivo interrompe a execução do jogo, sobre as teclas que foram pressionadas ou um desastre. Este pode não ser o caso do nosso e destroyApp(), chamado quando a aplicação soltas, para que possamos tomar as devidas exemplo, pois ele é extremamente simples,  é encerrada. No nosso exemplo, iniciamos a lógica do jogo no método startApp e Listagem 1: JPongMIDlet.java terminamos ele no método destroyApp. Por import javax.microedition.midlet.*; motivos de simplicidade iremos ignorar o import javax.microedition.lcdui.*; método pauseApp. public class JPongMIDlet extends MIDlet { private GameLogic logic; A próxima classe que iremos analisar é a GameCanvas. É ela que desenha o jogo na public JPongMIDlet() { logic = new GameLogic( this ); tela e que recebe a entrada do jogador. Além } disso, o loop principal do jogo foi colocado nesta classe. A listagem 2 apresenta esta public void startApp() { classe. Esta classe herda da classe Canvas, logic.init(); } o que nos garante o funcionamento básico da renderização da tela. Uma das primeiras public void pauseApp() {} coisas que notamos nesta classe é a referência public void destroyApp( boolean unconditional ) { para um objeto da classe Image (o objeto logic = null; background). MIDP suporta imagens no System.gc(); formato png e a maioria dos dispositivos notifyDestroyed(); suporta transparência nessas imagens. Todas } } as imagens do projeto foram colocadas na http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine Listagem 2: GameCanvas.java porém isso certamente seria um problema à medida que ele começasse a crescer. import java.io.*; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; Vamos terminar nossa aplicação de demonstração com a classe central do public class GameCanvas extends Canvas implements Runnable { projeto, a GameLogic. Veja o código na private GameLogic logic; listagem 4. private Image background; public static int screenWidth; Como pode ser visto, não há segredo public static int screenHeight; public boolean gameRunning; nenhum no código. Temos um método “init”, que inicializa as variáveis do jogo, um public GameCanvas( GameLogic logic ) { método “tick”, que processa um ciclo do loop this.logic = logic; try { do jogo, e diversos métodos utilitários, para background = Image.createImage( “/background.png” ); nos ajudar com a detecção de colisão e com } catch ( IOException e ) { a falsa inteligência do dispositivo. e.printStackTrace(); } screenWidth = this.getWidth(); Com o código pronto já podemos testar a screenHeight = this.getHeight(); aplicação. Para isso, clique em “Build” e em gameRunning = true; seguida em “Run”. A KToolBar irá lançar o new Thread( this ).start(); emulador padrão e o leitor poderá ver nossa } pequena obra em ação. Veja a figura 3 com public void paint( Graphics g ) { o resultado esperado. g.drawImage( background, 0, 0, Graphics.TOP | Graphics.LEFT ); logic.playerPaddle.draw( g ); logic.devicePaddle.draw( g ); É importante notar que este exemplo foi logic.ball.draw( g ); escrito e testado no emulador colorido } padrão do WTK 1.04, que tem uma tela com 96x100 pixels de resolução. No caso de public void run() { long lastTickTime = System.currentTimeMillis(); se executar este exemplo em algum outro int currentTickTime = 0; emulador, o resultado por ser diferente do apresentado aqui, principalmente no que se while( gameRunning ) { currentTickTime += System.currentTimeMillis() - lastTickTime; refere ao tamanho da tela. while ( currentTickTime < GameLogic.BASE_TICK_TIME ) { try { Outra observação importante é que Thread.sleep( 10 ); o código aqui apresentado foi escrito } catch ( InterruptedException e ) { } currentTickTime += System.currentTimeMillis() - lastTickTime; com objetivo didático e não deve } portanto ser tomado como regra. Com o conhecimento aqui adquirido, o leitor lastTickTime = System.currentTimeMillis(); currentTickTime -= GameLogic.BASE_TICK_TIME; deve ser capaz de criar as suas próprias soluções para seus jogos. logic.tick(); repaint(); Por Trás dos Panos } } Agora que já vimos nosso exemplo rodando, vamos entender um pouco mais public void keyPressed( int keyCode ) { do que acontece por trás dos panos. Em int gameKey = getGameAction( keyCode ); switch ( gameKey ) { aplicações Java convencionais, tudo o case Canvas.UP: que fazemos antes de poder executar logic.upPressed = true; o código é compilá-lo. Mas por causa break; disso, uma série de verificações é feita case Canvas.DOWN: logic.downPressed = true; em tempo de execução para garantir break; o funcionamento e a segurança do } sistema, e essas verificações são pesadas } para dispositivos limitados como nossos

public void keyReleased( int keyCode ) { celulares. Para evitar o uso desses int gameKey = getGameAction( keyCode ); escassos recursos, em J2ME a ordem switch ( gameKey ) { das coisas é um pouco invertida: após case Canvas.UP: logic.upPressed = false; compilar uma aplicação e antes de break; executá-la, temos um passo adicional: a case Canvas.DOWN: pré-verificação. logic.downPressed = false; break; } Esse passo é essencial, pois prepara } as classes compiladas para serem } verificadas, o que resulta em um ótimo ganho de performance. O leitor  http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine deve estar se indagando então porque Listagem 3: Sprite.java isso não foi apresentado antes e como import javax.microedition.lcdui.*; conseguimos executar o exemplo? Simples, import javax.microedition.midlet.*; a KToolBar realiza essa pré-verificação automaticamente, poupando uma boa dose public class Sprite { de esforço por nossa parte. public int x; Além de preparar as classes para serem public int y; executadas, todos os MIDlets devem ter public int vx; suas classes empacotadas em pares de public int vy; arquivos jar/jad. O jar guarda a aplicação public Image image; em si, incluindo todas as classes, arquivos public Sprite( int x, int y, int vx, int vy, Image image ) { de imagens e o que mais fizer parte dela, this.x = x; enquanto o segundo, descreve o que this.y = y; está empacotado no primeiro. Essa fase this.vx = vx; também é executada “às escondidas” pela this.vy = vy; KToolBar. Mas nesse caso temos a opção this.image = image; de gerar os arquivos manualmente, pois } eles serão necessários quando formos distribuir o jogo. Para isso clique em public void update() { “Project > Package > Create Package”. x += vx; Os arquivos serão gerados no diretório y += vy; “apps/JPong/bin”. }

A Estrada public void draw( Graphics g ) { g.drawImage( image, x, y, Graphics.TOP | Graphics.LEFT ); Agora que o leitor já domina o básico } do desenvolvimento de aplicações MIDP, algumas fontes serão muito úteis para public boolean collidedXAxis( Sprite sprite ) { aprofundar mais os conceitos. No final if ( y <= sprite.y + sprite.image.getHeight() && desta pagina estão listadas algumas fontes sprite.y <= y + image.getHeight() ) { que podem vir a ser muito úteis. if ( ( x + image.getWidth() >= sprite.x && sprite.x >= x ) || ( x >= sprite.x && x <= sprite.x + sprite.image.getWidth() ) ) { return true; } }

return false; }

public boolean collidedYAxis( Sprite sprite ) { if ( x <= sprite.x + sprite.image.getWidth() && sprite.x <= x + image.getWidth() ) { if ( ( y + image.getHeight() >= sprite.y + sprite.image.getHeight() && sprite. y + sprite.image.getHeight() >= y ) || ( y < sprite.y && sprite.y + sprite.image. getHeight() > y + image.getHeight() ) ) { return true; } }

return false; } } 

http://www.forum.nokia.com/java http://java.sun.com/j2me Possui uma grande quantidade de tutoriais e Página oficial da Sun com muitas ferramentas para auxiliar o desenvolvimento de informações sobre J2ME. O Wireless Toolkit aplicações MIDP, em especial para dispositivos pode ser baixado deste endereço.  Nokia Paulo R C Siqueira http://www.motocoder.com É desenvolvedor Java, Programador Certificado pela Página da motorolla para desenvolvedores de Sun Microsystems e não entende como Final Fantasy Figura 3: Emulador padrão do WTK rodando nosso exemplo aplicações para seus dispositivos Tactics Advance pode ser tão legal por tanto tempo... http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine Listagem 4: GameLogic.java import java.io.*; Paddle ) ) { import javax.microedition.lcdui.*; ball.vx = -ball.vx; import javax.microedition.midlet.*; ball.x += 1; // move a bolinha para evitar que ela “grude” na raquete public class GameLogic { } if ( ball.collidedYAxis( playerPaddle ) || ball.collidedYAxis( device- public static final int BASE_TICK_TIME = 100; Paddle ) ) { public static final int BASE_PADDLE_SPEED = 2; ball.vy = -ball.vy; private JPongMIDlet midlet; ball.y += -1; // move a bolinha para evitar que ela “grude” na private GameCanvas canvas; raquete public Sprite playerPaddle; } public Sprite devicePaddle; public Sprite ball; if ( ball.y <= 0 ) { public boolean upPressed; ball.vy = -ball.vy; public boolean downPressed; ball.y = 0; } else if ( ball.y + ball.image.getHeight() >= GameCanvas. public GameLogic( JPongMIDlet midlet ) { screenHeight ) { this.midlet = midlet; ball.vy = -ball.vy; } ball.y = GameCanvas.screenHeight - ball.image.getHeight(); } public void init() { } Image playerImage = null; Image deviceImage = null; private void checkPaddlesCollided() { Image ballImage = null; if ( playerPaddle.y < 0 ) { try { playerPaddle.y = 0; playerImage = Image.createImage( “/player.png” ); } else if ( playerPaddle.y + playerPaddle.image.getHeight() > deviceImage = Image.createImage( “/device.png” ); GameCanvas.screenHeight ) { ballImage = Image.createImage( “/ball.png” ); playerPaddle.y = GameCanvas.screenHeight - playerPaddle. } catch ( IOException e ) { image.getHeight(); e.printStackTrace(); } } playerPaddle = new Sprite( 5, 35, 0, 0, playerImage ); if ( devicePaddle.y < 0 ) { devicePaddle = new Sprite( 76, 35, 0, 0, deviceImage ); devicePaddle.y = 0; ball = new Sprite( 41, 35, 2, 1, ballImage ); } else if ( devicePaddle.y + devicePaddle.image.getHeight() > Display display = Display.getDisplay( midlet ); GameCanvas.screenHeight ) { canvas = new GameCanvas( this ); devicePaddle.y = GameCanvas.screenHeight - devicePaddle. display.setCurrent( canvas ); image.getHeight(); } } } public void tick() { if ( upPressed ) { private void checkGameOver() { playerPaddle.vy = -BASE_PADDLE_SPEED; if ( ball.x < 0 || ball.x + ball.image.getWidth() > GameCanvas. } else if ( downPressed ) { screenWidth ) { playerPaddle.vy = BASE_PADDLE_SPEED; canvas.gameRunning = false; } else { midlet.destroyApp( true ); playerPaddle.vy = 0; } } } } moveDevicePaddle();

playerPaddle.update(); Uma Pitada de Recursos Exclusivos devicePaddle.update(); ball.update(); A dupla CLDC / MIDP nos disponibiliza uma grande quantidade de recursos para trabalharmos, porém muitas vezes eles podem checkBallCollided(); checkPaddlesCollided(); não ser suficientes. Se quiser por exemplo tocar sons, essa checkGameOver(); dupla não nos dá escolha alguma. Nesse caso, temos que partir } para as chamadas APIs proprietárias. Não é o nosso foco discutir essas APIs neste momento, mas é importante que o leitor saiba private void moveDevicePaddle() { da existência das mesmas, pois certamente elas ainda serão if ( ball.y < devicePaddle.y ) { necessárias. devicePaddle.vy = -BASE_PADDLE_SPEED; } else if ( ball.y > devicePaddle.y + devicePaddle.image.getH- A maior desvantagem de se utilizar APIs proprietárias é que eight() ) { ficamos “presos” ao dispositivo (ou família de dispositivos) devicePaddle.vy = BASE_PADDLE_SPEED; em questão. Por exemplo, se utilizarmos as classes de som } } da Nokia, todo o nosso código que fizer uso dessas classes só funcionarão em dispositivos Nokia. Há, é claro, algumas private void checkBallCollided() { maneiras de se contornar esse problema, mas isso já é assunto if ( ball.collidedXAxis( playerPaddle ) || ball.collidedXAxis( device- para uma outra edição. http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine CAPA Desenvolvimento de Jogos para Celulares Um grande mercado para pequenos negócios

Esta edição de JogosPro e-Magazine está sendo um “prato cheio” para todos aqueles que, de alguma forma, estão com os olhos voltados para o desenvolvimento de Por Eliazer Kosckiuk e Julio Marchi jogos para “dispositivos móveis”. Já era de se esperar que os celulares com capacidade para rodar aplicativos mais complexos -entre estes jogos- se popularizariam rapidamente, até porque tecnologicamente falando, além do momento ser mais propício do que nunca, há muito mais maturidade no mercado de entretenimento eletrônico hoje do que anos atrás!

á é comum ver pessoas divertindo-se facilmente ultrapassem o com seus celulares na fila do banco, patamar de US$ 3,5 bilhões nos intervalos entre aulas, na fila do até o ano de 2007. cinema, ou em qualquer outro lugar que Jse apresente oportuno. E isso não é coisa de Nesse emergente mercado, “criança” não! Os celulares com poder para todos tem a ganhar: para rodar jogos chegam em um momento bem as operadoras representa oportuno, onde o “adulto” que os usa possui uma parcela cada vez mais uma certa cultura de entretenimento digital. importante de trafego Nos EUA, Europa e Japão por exemplo, a de dados (uso), gerando maioria das pessoas que estão na faixa entre receitas também em os 30 e os 45 anos cresceram com os “video- novos níveis de negócios games” ocupando boa parte de sua juventude, como na comercialização e esta realidade não é muito diferente no dos jogos e nas licenças Brasil. A maioria destas pessoas acompanhou de uso. Não se pode a evolução dos “telejogos”, passando pelos ignorar também que a “Ataris” e “Odysseys” da vida, chegando popularização trará um aos MasterSystem’s, PlayStation’s e Xboxes aumento da clientela atuais. Nesta caminhada muitos jogos fizeram potencial, permitindo que história e deixaram saudosismo, tanto que a os custos diminuam e que “onda” de emuladores de tudo que é tipo tem o mercado se expanda. abarrotado a Internet nos últimos 5 anos, Para os usuários, além trazendo de volta à vida muitos dos jogos de uma melhoria geral da época dos 8 bits (década de 80), e é esse no serviço (pois sem isso também um dos fatores que vem colaborando fica inviável o trafego para o reaquecimento do mercado de jogos em exigido pelos jogos), Em países do primeiro mundo os jovens disputam com os adultos os momentos de lazer com os celulares (foto maior). Não é incomum encontrar grupos de jovens em torno de um dispositivos móveis. simplesmente por ser aparato telefônico (foto menor, à direita), como também os jogos dos celulares já estão um “produto a mais” isso ocupando o espaços dos curtos momentos de ociosidade (foto menor, ao centro). Mesmo sendo um mercado incipiente (em 2003 tem dado nova vida ao o mercado de jogos para celulares – incluído aparato telefônico, proporcionando muitos bons Novas soluções para velhas limitações downloads de jogos e partidas online – rendeu momentos de lazer a um custo relativamente No caso dos celulares e PDA’s (“mobiles” em somente cerca de US$ 250 milhões de receita ao baixo. Para os desenvolvedores tudo isso geral), atualmente não se podem criar jogos redor do mundo), o ano de 2004 tem sido muito representa um potencial de negócios muito muito complexos, que requeiram complicados mais favorável, apresentando um crescimento atraente, principalmente para os “pequenos” e efeitos 3D, músicas de alta qualidade e efeitos significativo estimando-se que o ano termine “iniciantes”, que podem competir neste mercado sonoros ambientais. Os jogos para estes com movimentos em torno dos US$ 1 milhão em onde investimento não é tão abrasivo como no dispositivos ainda tem que ser compactos negócios. E a previsão é ainda mais otimista para de jogos convencionais, mercado este que nem (em muitos caso no máximo 50 a 60Kb), e por os próximos anos, estimando-se que os números por isso é menos lucrativo. isso necessitam ser simples e criativos. Estas

http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine caracterísiticas diferenciam em muito esse princípio –como qualquer tecnologia nova-não outros, alguns patrocinados por grupos de mercado do de jogos eletrônicos tradicionais, será atraente para o consumidor final . Por fabricantes, onde se pode baixar jogos gratuitos mas abrem margem para projetos menos agora é hora de voltar a pensar nas antigas (e ou comprá-los direto dos fabricantes. E com a ambiciosos, de curto tempo de produção e baixo eficientes) técnicas de desenvolvimento! iminente evolução dos browsers dos celulares, o investimento. acesso a conteúdos “diretamente” pelo cliente, Ainda sim, por mais que as plataformas de sem depender da operadora, é algo inevitável. Não fazem 20 anos que empresas como Konami, desenvolvimento disponibilizem muitas Atari, Taito (esta última, a qual já descobriu o novas tecnologias (como OOP, modularidade, Se existe um bom momento para investir neste mercado de celulares), e tantas outras construíram engines, etc), os problemas enfrentados pelos mercado o momento é agora! Além de jogos, o as bases de suas fortunas através dos jogos para programadores são antigos, e profissionais desenvolvimento de aplicativos também torna- as plataformas de 8 bits, cujas características eram experimentados em tecnologias de 20 anos se emergente, e as empresas que mantiverem bem similares (ou até mais simplórias) às dos atrás encontrarão um favorável cenário para um nome respeitável neste mercado poderão celulares atuais. Ciclicamente, hoje vemos este desencavar velhos truques e técnicas de estabeler lucrativas parcerias com empresas de mesmo potencial de lucratividade emergindo para programação que foram muito necessários vários países (pois, independente de ser Celular, projetos de jogos com características similares aos naquela época, e que são quase esquecidos o conteúdo é trafegado via Internet, o que de 20 anos atrás, só que mais num mercado mais (ou praticamente desconhecidos) pelos literalmente globaliza a coisa). maduro e efetivamente mais amplo. programadores da “nova geração”. Características do As boas notícias para os pequenos Modelo de negócios Desenvolvimento para Celulares desenvolvedores é que, por mais que as Aqui está um ponto a ser bem analizado antes Atualmente todas as plataformas de características de um celular se assemelhem às de começar. Diferente do mercado de jogos desenvolvimento trabalham com linguagens dos computadores antigos (pouca resolução, convencionais, não basta que você desenvolva Orientadas a Objeto (como o Java, C++, e limitados recursos sonoros, pouco espaço de seu jogo para Celulares e o coloque pra vender outras). Isso significa que, para criar o famoso memória, processamento limitado de recursos, nas prateleiras porque não é assim que este “Hello Word” na telinha do Celular você terá que etc.), as semelhanças param por aí. Hoje mercado funciona (pelo menos não ainda). se envolver com uma dezena de classes e uma basicamente se desenvolve para celulares em boa quantidade de linhas de código. Se, por um linguagens de “alto nível” (C++, Java, Brew, etc), Os jogos em números lado, isso dificulta o início, por outro lado garante enquando na década de 80 se desenvolviam os • Mais de US$ 250 milhões de receita obtida no a manutenção e extensibilidade do código. Como jogos em Assembly (Linguagem de Máquina), mercado mundial em 2003 e estima-se que exemplificamos anteriormente, muitos títulos o que praticamente anula a portabilidade dos mais de US$ 1 bilhão serão alcançados até o (milhares) que foram sucesso na década de 80 mesmos (mas não impede sua “reprogramação”). final de 2004. nos computadores de 8 bit, os quais poderiam E é por isso que dizemos que são “boas notícias”, • Estimativa de que US$ 3,5 bilhões sejam ser adaptados facilmente às características pois as empresas que fizeram sucesso 20 anos gerados até 2007. dos Celulares, não são portáveis porque foram atrás ainda não tomaram posse deste mercado • Custo dos jogos: Entre US$ 2 e US$ 5 (valor escritos em Assembly, e são diretamente médio cobrado pelo download de um jogo nos em função disso. Basicamente para relançar EUA e na Europa) dependentes dos recursos do harware dos um clássico tem-se que reprogramá-lo do zero. • Mais de mil downloads por mês, em média, computadores para que foram criados. Mesmo Como estas empresas, em sua maioria, estão por jogo, em operadoras nos EUA e Europa. a portabilidade de um jogo, de um computador hoje concentradas nos “grandes jogos” (PC, XBox, para outro da mesma época, é coisa bem Fontes: ARC Group e LocZ PlaysStation, GameCube, etc), isso vem deixando complicada (chamamos isso de Remakes). Sendo o caminho aberto para pequenas e médias As empresas aprendeream com os anos que dá assim, usar as linguages de “alto nível” garante equipes de desenvolvimento. Então, o que você pra ganhar dinheiro estando entre o cliente e o de que seu produto não se perderá com o tempo está esperando? Mãos à obra! desenvolvedor. Não muito diferentemente de como (pelo menos não totalmente). as licenças para os jogos de Consoles funcionam, Novamente abre-se espaço para os “escovadores para Celulares vc terá que de alguma forma Outra “novidade” dos dias atuais é o Open Source, de bits”, tão comuns na época dos micros de “encontrar” o canal de divulgação e comercialização o que lhe permite aprender técnicas e truques 8 bits e praticamente “extintos” atualmente. do seu jogo através das operadoras e/ou fabricantes, que com certeza poderão reduzir mais ainda Da mesma forma como cada byte do código e antes de programar você terá que pensar em o tempo de desenvolvimento de seu projeto. era tratado com carinho anos atrás, hoje a muitas coisas: na plataforma de desenvolvimento, Portanto, compartilhe seus códigos sempre que habilidade de se produzir diminutos programas do celular “alvo”, na companhia de serviço móvel, na possível! Procure não reinventar a roda e, ao volta a estar em evidência. Novamente entram tecnologia necessária, etc. mesmo tempo, saiba que não adianta querer em moda termos como scroll parallax (técnica guardar a sete chaves aquela sua rotina “especial” onde a ilusão de tridimensionalidade é criada Existem diversos modelos de negócios existentes. porque este tempo já passou. Atualmente é colocando-se camadas gráficas umas sobre as Nos EUA por exemplo, o mais comum hoje é a muito mais produtivo estabelecer uma relação outras), movintação de sprites, músicas em operadora oferecer os jogos pelo próprio celular e de colaboração e troca de informações com formato track, filmation, etc... Ao programar cobrar pelo download na conta mensal (algo entre outros desenvolvedores para poupar tempo e para os celulares esqueça das músicas em mp3, $2 e $5 por jogo, ou por período, dependendo do dinheiro no processo criativo do que sonegar dos vídeos comprimidos e de outras soluções caso). A receita é “partilhada” entre a operadora e os informações com medo da concorrência. rápidas, tão em voga na produção de jogos desenvolvedores segundo um acordo previamente atualmente, pois apesar de estas tecnologias firmado entre eles, o qual não é padronizado e é Desenvolver jogos para Celulares tem seus estarem emergido rapidamente para os revisto caso-a-caso. “calcanhares de Aquíles” também. Um deles celulares, ainda demorarão algum tempo para é definir QUAL ambiente de desenvolvimento que possam ser suportadas pelas atuais redes de Entretanto, já existem diversos portais você irá usar. Cada modelo de celular possui comunicação, além do fato de que seu custo no independentes, e estão surgindo rapidamente características diferentes! Resolução de tela, http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine número de cores, tamanho de memória, projetado para ser um videogame e não deve ser Não deve haver necessidade de muito capacidade de interação, sons, etc... Felizmente a programado como se fosse um. “controle motor” por parte dos jogadores, indústria tem aprendido com os erros do passado porque o celular não vai ajudar nisso e está mais madura, levando os fabricantes a Analisemos, por exemplo, a usabilidade: (teclado ineficiente, tela ineficiente, implementar em seus aparelhos características videogames foram criados simplesmente para processamento ineficiente etc); similares e seguindo uma certa “padronização” o entretenimento, e quando nos dirigimos à entre elas. Por exemplo, a Nokia divide seus eles, estes são usados somente para isso e por Quando possível, deve-se “evitar” os jogos com aparelhos em Séries como 30, 40, 60 e 80. um período de tempo contínuo normalmente muita dependência de efeitos sonoros (devido Dentro de cada série, as características principais não muito longo (humm, err... digamos que... aos ambientes onde normalmente se joga); são semelhantes. Outros fabricantes usam a na maioria das vezes! ;o). Comparando com o mesma idéia, e alguns até usam-se de tabelas de Celular, que tem uma função primária diferente, Busque investir seu tempo em projetos que comparação entre modelos de outros fabricantes. os momentos de entretenimento são mais permitem um desenvolvimento dinâmico e E aqui vem uma outra dica importante: quando curtos e irregulares (geralmente enquanto rápido. Não perca 20 MESES trabalhando num for desenvolver o seu aguarda-se em algum jogo para Celulares porque é bem provável jogo, defina para qual consultório, numa que no final deste período seu jogo já nasça aparelho/série você “ E aqui vem uma dica importante: palestra “empolgante” obsoleto; o vai programar. Não ou durante tente desenvolver um quando for desenvolver: aquela viagem Muitos celulares não vão permitir que o game que vá funcionar interminável). Não jogo seja “interrompido” durante uma em todos os aparelhos, concentre-se no que um jogo tem obstante também chamada telefônica, de forma que este mas defina SIM um está o fato de que possa ser “retornado” após o término da público-alvo para o que ter de melhor: os “teclados” dos mesma. Isso pode levar alguns jogos ao seu game, e explore celulares atuais não fracasso (ninguém quer jogar as fases 1, 2 todas as capacidades a capacidade de entretenimento!” foram projetados e 3 novamente toda vez que for iniciar uma desta plataforma, de para atender às nova partida). Isso tem muito haver com maneira a oferecer uma necessidades dos o modelo de celular e com o ambiente de experiência estimulante jogos. Além de desenvolvimento selecionado! e agradável para o seu consumidor. Assim, será não serem nada resistentes, não possuem mais fácil alcançar o sucesso, e sempre resta a sequer uma ergonomia adequada para se Desenhos muito detalhados em telas muito possibilidade de portar o seu game para outras jogar. Isso sem falar que a grande maioria não pequenas podem ser de difícil identificação plataformas caso o mercado apresente este reconhece o apertar simultâneo de duas teclas para muitos usuários. Tenha muita atenção interesse (vise o resultado e não a ideologia). ou não possuem respósta rápida o suficiente, para não confundir excesso de elementos o que inviabiliza aqueles jogos de ação em gráficos com qualidade visual porque o Bem, se depois de tantas informações que precisamos nos mover e atirar ao mesmo resultado pode ser o inverso do esperado. controversas você ainda não desanimou, então tempo; ou aquele jogo de luta com as famosas é provável que você possa sim encarar este combinações de teclas para os golpes super- E lembre-se: pense competitivamente, muita desafio! Sigamos então em frente desbravando hiper-ultra potentes (os famosos fatalities). atenção na hora de decidir qual “Plataforma “superficialmente” as tecnologias mais de desenvolvimento” será usada e para qual importantes que são usadas na criação de jogos E, coroando essa combinação de diferenças, modelo de celulares vc vai desenvolver. Existem para celulares nos dias de hoje. temos a tela: relativamente minúscula, de muitas variáveis envolvidas nestas decisões e o cristal líquido, com baixa definição e que, para apaixonismo pelo desenvolvimento de jogos não As Plataformas de Desenvolvimento piorar, muitas vezes é monocromática ou possui pode cegar você nesta hora tão importante. Quer As principais plataformas usadas para a limitação de quantidade cores simultâneas. uma dica? Tire do armário aquele video-game criação de jogos e aplicativos para celulares antigo; baixe alguns emuladores da Internet, são: Java2ME, Brew, Mophun e Symbian OS. A Se somarmos tudo isso ao fato de que o jogador jogue alguns jogos da década de 80 e ponha maioria destas tecnologias são dissecadas mais geralmente estará em um ambiente com muitos atenção em como eles eram tão envolventes com profundamente em artigos de diferentes autores outros estímulos, podemos ter uma idéia da tão poucos recursos de hardware disponíveis. nesta mesma edição de JogosPro e-Magazine, dificuldade que haverá em envolver o usuário na Desintoxique sua cabeça dos fantásticos avanços oferecendo para você leitor informações mais trama de um jogo... tecnológicos que você tem à disposição hoje e precisas em cada uma delas dentro de seu concentre-se no que um jogo tem que ter de escopo de atuação. Neste artigo apresentaremos Sendo assim, se você quer programar jogos melhor: a capacidade de entretenimento! apenas um apanhado geral de cada tecnologia, para celulares e quer que seu jogo seja um de forma mais comparativa, para você possa sucesso, você necessitam observar alguns Obviamente que depois de ler esta revista ter uma base na hora de escolher a que melhor fatores importantes antes de iniciar qualquer toda você terá uma definição bem clara de que atende às suas necessidades/idéias. projeto (isso pelo menos nos próximos dois anos. caminhos vai tomar, mas não esqueça de, mesmo Depois disso, pelo andar da carruagem, as novas assim, testar e se informar antes de decidir! Mas, antes de entramos no tema das diferentes tencologias já terão superado estas “limitações”): plataformas de desenvolvimento, é importante Com isso em mente, analise bem as tecnologias apresentar alguns aspectos que são comuns a  O jogo tem que ser simples e envolvente. que estão à disposição, teste-as todas, e esteja todas elas. Comecemos por uma das maiores Os jogos de estratégia, raciocínio e labirinto de olho aberto para as novidades. Atualmente dificuldades na programação de jogos para (2D) são geralmente uma boa pedida. os ambientes de desenvolvimento mais celulares: assimilar a idéia de que um celular é Alguns shot’n’up podem ser bem sucedidos difundidos voltados à programação de jogos um... CELULAR! Não é um videogame; não foi também; em celulares são: http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine Java2ME BREW Conhecido também como J2ME, ou Java 2 Micro Acrônimo de Binary Runtime Enviroment Edition, é a versão de Java da Sun destinada a for Wireless, algo como Ambiente de dispositivos com recursos limitados de hardware, Execução Binária para Dispositivos Móveis tais como PDAs, Smartphones e Telefones foi criado pela Qualcomm para ser uma Celulares, entre outros. No artigo de Paulo R.C. completa plataforma de desenvolvimento Siqueira (na página 10 desta mesma edição) e distribuição de aplicações principalmente voltada aos celulares. O BREW você poderá encontrar exemplos de como se desenvolve em J2ME e mais tem como principal característica ser extremamente pequeno e eficiente, detalhes técnicos sobre este ambiente. o que possibilita ser incluso em aparelhos com pouquíssimo poder de processamento, oferecendo uma plataforma aberta e expansível para Devido às diferentes limitações de tais aparelhos, a SUN apresentou uma o desenvolvimento de aplicações. O BREW também foi desenvolvido solução simples e uniforme: a Máquina Virtual do J2ME, que foi criada enfocando diretamente as limitações que essas máquinas possuem, e por como um subconjunto das Máquinas Virtuais utilizadas pelas versões isso foi otimizada ao máximo. Mesmo assim, não é menos poderosa que “maiores” do Java: J2SE (Java Standard Edition) e J2EE (Java Enterprise seus “concorrentes irmãos”, podendo até chegar a rodar aplicações nativas Edition), mantendo assim certa compatibilidade de linguagem (mas não (em C/C++) como engines 3D, máquinas virtuais Java e muito mais, tendo de recursos). excelente performance geral.

Por este motivo, e por trazer o nome Sun por detrás, esta tem sido a No artigo BREW Primeiros Passos, por Matías Rodriguez (também nesta edição plataforma escolhida por uma grande quantidade de desenvolvedores de de JogosPro e-Magazine), você poderá ter uma boa noção do que o BREW é jogos para celulares, principalmente pela prévia experiência com o J2SE capaz de oferecer. Como já dissemos, além de aplicações nativas, desenvolvidas que as equipes de desenvolvimento já possuíam, exigindo um mínimo de em C/C++, BREW pode alternativamente incluir suporte a execução de Java e adaptação e investimento. Além disso, soma-se também o fato de muitas parsers de xml e flash, por exemplo, o que possibilita uma gama ainda maior das ferramentas existentes serem grátis. de opções para o desenvolvimento de aplicações neste ambiente.

Entretanto, isso não significa que o J2ME seja a melhor e mais adequada Entretanto, o BREW não pode ser comparado ao Java (até porque você pode opção para seu projeto. A vantágem intrínsica nesta tecnologia é que criar um ambiente Java rodando em BREW), nem tampouco a um sistema praticamente todos os fabricantes contam com aparelhos compatíveis operacional completo como o Symbian. Cada um tem seu espaço diferente com ela, e algumas das operadoras brasileiras tem optado por dar neste universo, usando-se de idéias/implementações distintas. Por ser o mais suporte total a essa plataforma (como Claro, Oi e Tim). simples em se tratando de implementação, o BREW ganhou muito espaço nos telefones com pouca capacidade tecnológica, que eram incapazes de rodar No site de Jason Lam (http://www.jasonlam604.com) você poderá sistemas operacionais completos como Symbian por exemplo. encontrar para download o livro “J2ME & Gaming Book”, que está sendo escrito em esquema “Open Source”, além de excelentes artigos ligados Entretanto, como tudo tem um preço, desenvolver para a plataforma BREW ao tema, diversos links para SDKs (System Development Kits) e algumas pode ser um pouco mais oneroso do que em relação às outras soluções. engines bem interessantes. Apesar do SDK ser gratuito, você precisa ser um desenvolvedor cadastrado pra ter acesso ao telefones para testes (que carregam as aplicações BREW sem autenticação, similar a como funciona programar para XBox e PlayStation). No mais, uma vez concluído o seu projeto o programa final necessita ser autenticado pela própria Qualcomm (TRUE BREW), o que pode chegar a custar alguns “miles de dólares” extras em contratos e licenciamento. Symbian Symbian OS é um avançado sistema operacional multitarefa atualmente Para saber mais sobre BREW e seu sistema de distribuição visite http://brew. licenciado pelas maiores empresas de telefonia móvel do mundo. Foi qualcomm.com/brew/en/developer/resources/gs/brew_solution.html projetado pensando nas restrições dos aparelhos móveis, visando suprir os requerimentos específicos dos modernos celulares 2G, 2.5G e 3G. O Symbian OS, entre inúmeras características, tem como ponto forte: Mophun O padrão Mophun, desenvolvido pela sueca Synergenix,  Uso mínimo de memória que foi o adotado como padrão pelos celulares Sony  Eficiente gerenciador de energia Ericson (e também é suportado por alguns modelos de  Suporte em tempo real para telefonia e transferência de dados telefones da Siemens e de outras marcas “menores”) vem “correndo por fora” para tentar atrair a atenção dos desenvolvedores de jogos para celulares. Para o programador o Symbian OS fornece um completo e aberto framework de desenvolvimento, utilizando a linguagem C++, o que possibilita que o O Mophun possui a vantagem de ser um padrão aberto (grátis para programador crie aplicativos que tirem proveito dos recursos específicos de o desenvolvedor) e seus programas costumam ficar bem compactos, cada aparelho, como câmera, comunicação de dados, etc. ocupando a metade da memória de um similar em Java e um terço do ocupado por um similar em Brew, o que tem levado muitas empresas a Daniel “NeoStrider” Monteiro demonstra de maneira bastante sucinta e voltar seus olhos para o Mophun (pois acelera o download dos jogos). efetiva um pouco do que o Symbian é capaz em seu artigo Introdução a programação em Symbian OS Nokia Series 60 em C++ nesta mesma Para completar a Synergenix comprou os direitos de uso de vários jogos do edição, na página 36. Atari, que fizeram sucesso no começo da década de 80, e pretende usar-se deste universo para atrair a atenção para as potencialidade de seu ambiente. Existe ainda um riquíssimo conjunto de informações sobre o Symbian Os 7.0 em http://www.symbian.com/technology/symbos-v7x-det.html Mais informações em www.mophun.com. http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine Outras Tecnologias assinado por ele (nesta mesma edição, não deixe especializadas estão investindo em duas ou três Existem diversas outras “plataformas de de ler). Mais informações podem ser obtidas em soluções simultâneas, buscando além de tudo desenvolvimento” para celulares surgido, bem como http://www.khronos.org. estar presente em diferentes mercados, e nós as baseadas em “recursos de Internet” (HTML e aconselhamos que você faça o mesmo sempre que XML) que chegaram a ser cogitadas como possíveis O 3GPP (QuickTime and Mobile possível! ambientes para criação de jogos, mas isso era Multimedia) vem em “linha quando os celulares não suportavam gráficos e paralela” ao OpenGL-SE, E como obviamente uma determinada tecnologia processamentos “mais elaborados” como hoje somando esforços para ampliar pode atender a um determindao grupo de (parece que estamos falando de muito anos atrás, o potencial dos celulares. O necessidades melhor que outra, isso também tem mas a verdade é que não tem muito mais que um QuickTime é uma solução da Apple que, no que se que ser levado em consideração na hora de decidir. ano isso). refere a áudio e vídeo, é difundida em praticamente todos os ambientes computacionais existentes Para completar a relação “custo de produção” e Algumas destas tecnologias ainda estão em (Mac, Windows, SunSparc Stations, Silicon Graphics, “investimento prévio” não pode ficar de fora de desenvolvimento, como o WAP (Wireless Application etc.), e seguramente não será diferente no caso dos suas analises, bem como potencial de mercado Protocol), o SMS (Short Message Service), o celulares. Segundo diz a Apple, o 3GPP será capaz de e a diferença no tempo de desenvolvimento MMS (Multi Media SMS message), o HAWHAW usar todas as vantagens novos recursos multimidia que cada ambiente impetra. Leve tudo em (HTML and WML Hybrid Adapted Webserver), o dos celulares e já deverá vir integrada nos celulares consideração, mas não deixe passar esta onda WURLF (Wireless Universal Resource File) e muitas de terceira geração (3G). Atualmente nos EUA as sem pegar uma carona nela, pois fazem muito outras... Só que jogos desenvolvidos usando estas duas maiores empresas de comunicação móvel, anos que não se abrem possibilidades de plataformas enfocavam principalmente os do tipo Verizon e Sprint, já estão implementando em suas negócios tão factíveis como as apresentadas pelo Trivia e outros baseados textos, com pouca ou redes as especificações necessárias para dar suporte mercado de Jogos para Celulares (facilmente nenhuma necessidade gráfica. a esta tecnologia. Mais informações em http:// expansíveis para PDA’s, Palm’s, GPS’s etc). www.apple.com/mpeg4/3gpp. Atualmente, com o avanço tecnológico baratendo E não deixe de ler os artigos Animação rapidamente a implementação de modernas Conclusão Baseada em Tempo e Criatividade nos Jogos tecnologias nos celulares, estas linguagem estão Muitas novidades... Muitas siglas... Muitas nesta mesma edição (de Paulo V. W. Radtke e praticamente obsoletas para o mercado de jogos tecnologias... Muita informação... E pouco tempo Fabrício Kolk Carvalho respectivamente), pois (mesmo antes de amadurecerem como ambiente para se divertir com tudo isso! Estamos vivendo em suas essências também estão diretamente de programação, pois esse é o custo do rápido novamente o monento de rápidos avanços (cada vez correlacionados com o tema em questão!  avanço tencológico que vivemos nesta nova era mais dinâmicos) no mundo da tecnologia, e desde digital), tendo seu enfoque hoje mais voltado para os computadores à HDTV, passando pelo Rádio Eliazer Kosciuk a área de navegação em Internet. Digital via Satélite, Telefonia Móvel com recursos É Engenheiro Agrônomo, especializado em computação Multimidia, GPS’s portáteis, e até novos conceitos e pesquisas na área de tecnologia desde a época dos Ainda assim, dentre tantas siglas e novidades que de dinâmica de combustíveis automobilísticos, tudo computadores 8 bits (em especial o MSX). vem surgindo dia-a-dia no mundo dos celulares, vem sendo afetado de alguma forma pelo “corre- Além de desenvolvedor de games e aplicativos para celulares, atua também como web designer e duas delas não podem passar despercebidas: corre” das inovações. webmaster para sua empresa Idea Plus. OpenGL-ES e 3GPP. Ambas prometem animar bastante a telinha do seu próximo Celular e vão Não é fácil estar “up-to-date” com tudo isso e ainda Julio Marchi dar mais gás ainda no desenvolvimento dos jogos. ser produtivo, mas em contrapartida existem É Analista de Sistemas especializado em engenharia de também muitos mais recursos de informação, software, networking, multimídia e Internet. Atualmente é CEO de duas empresas nos EUA e igualmente dinâmicos, que auxiliam o acompanhar desenvolve diversos projetos técnicos e audio-visuais da “onda tencologica” que estamos vivendo, para o mercado Norte Americano. e com isso abrem-se novas possibilidades de negócios para os pequenos e médios empresários/ Nota: Eliazer e Julio vem desenvolvendo diversos projetos e parcerias de sucesso entre suas empresas, no Brasil e nos EUA desenvolvedores, e num mercado já globalizado (respectivamente). Atualmente planejam dar seus primeiros passos O OpenGL-ES - como o próprio nome diz graças à ajuda da Internet. no mercado de desenvolvimento Games para Mobile Devices. - é voltado à aplicações (jogos) que necessitem complexos elementos 2D/3D. Por ser grátis e Em se tratando multiplataforma, assim como seus antecessores do tema Links relacionados ao tema para as grandes estações gráficas e computadores Desenvolvimento de Sun One Studio ME ...... http://wwws.sun.com/software/sundev/jde/ convencionais, este deverá estabelecer-se com Jogos para Celulares, Portal Java ...... http://www.portaljava.com/ padrão indiscutível no mercado dos celulares, a verdade é que Portal JavaFree ...... http://www.javafree.com.br/ isso à medida em que os aparatos vão ganhando não existe melhor Tutoriais diversos sobre Java ... http://wireless.java.sun.com/ Gel ...... http://www.gexpert.com mais recursos e poder de processamento. Outra maneira de um Forum Nokia ...... http://forum.nokia.com/ vantágem é que o enfoque do OpenGL-ES está em programador decidir JBuilder com Mobile Set ...... http://www.borland.com/ um nível mais baixo em relação aos ambientes qual será o ambiente White Board SDK ...... http://www.zucotto.com/ de desenvolvimento, possibilitando oferecer para de desenvolvimento Code-Blood ...... http://www.code-blood.com.br/portal/publico/index.jsp estes um conjunto de API’s de baixo nível para mais adequado Mais sobre OpenGL-ES ...... http://ogl-es.sourceforge.net/index.htm Bluetooth SDK ...... http://www.zucotto.com criação de objetos em Real-3D. para seus projetos Bluetooth SDK ...... http://www.rococosoft.com que não seja Bluetooth SDK ...... http://www.bluetooth.com Ninguém melhor que o Bruce “Sinner” para ir testando-os. Mas, Bluetooth SDK ...... http://www.smartnd.com à fundo neste tema, e é por isso que o artigo tenha em mente Multiplayer Engines ...... http://www.xadra.com dedidado a explorar esta novíssima tecnologia é que as empresas Multiplayer Engines ...... http://www.demivision.com Multiplayer Engines ...... http://www.terraplay.com http://www.jogospro.com.br NOVEMBROMultiplayer 2004 Engines ...... http://www.butterfly.net JOGOSPRO e-magazine por Paulo V. W. Radtke ARTIGO Animação Baseada em Tempo

Nos “velhos tempos” as animações dos jogos eram controladas utilizando o retraço vertical do vídeo e o número máximo de atualizações por segundo, que era fixo em todos os hardwares. Nos sistemas atuais, nem sempre é possível fazer isto e, mesmo quando isso acontece, não sabemos qual a taxa de atualização configurada pelo usuário. Este artigo apresenta uma técnica simples que pode ser aplicada facilmente em lógica de animações 2D e 3D para controlar elementos na tela. Um exemplo simples em SDL ilustra a técnica discutida.

odo objeto animado usa SDL e pode ser compilado sem programa no meio), mas isola bem percorre na tela uma certa problemas em todas as plataformas na função demo a animação da distância – seja ela em que aceitem a SDL. O código base é imagem e evita o uso de buffer distância linear ou angular. como mostrado na listagem inicial duplo que poderia ativar a espera TNa física a velocidade na qual (inicial.cpp), a função main carrega pelo retraço vertical. Mais tarde um objeto se desloca é calculada uma imagem bitmap e invoca a discutiremos porquê utilizamos uma pela equação v=d/t, aonde d é a função demo para fazer com que variável double para a posição x da distância percorrida pelo objeto a imagem atravesse a tela na imagem mesmo quando os pixels entre dois pontos – A e B, t é o horizontal de um lado a outro. Você são sempre valores inteiros. tempo utilizado e v é a velocidade resultante. Supondo um exemplo no espaço 2D, se um objeto percorre 100 pixels a cada segundo, temos uma velocidade v=100.

Não sabemos a quantos quadros por segundo o nosso jogo rodará, mas temos como medir o tempo pode descarregar os códigos fontes O problema desse exemplo é que passado entre o quadro anterior e o e o arquivo da imagem utilizado, num jogo real o processamento quadro atual. Com esta informação porém qualquer arquivo BMP requerido para desenhar um e a velocidade, podemos calcular o pequeno (razoavelmente menor que quadro pode variar de acordo com deslocamento do objeto utilizando 640x480 de preferência) serve para o número de objetos desenhados a equação d=v x t. Se no nosso testar o código. na tela, overhead da lógica de exemplo tivessem passados 0.1 inteligência artificial e até mesmo segundos, o deslocamento do objeto A cada vez que a tela é atualizada programas que estejam rodando seria d=100 x 0,1=10pixels. a imagem é desenhada um ponto em background no sistema. Em à direita em relação à posição jogos que controlam a animação Código exemplo anterior, até que ela saia da tela. pelo retraço vertical isso gera Vamos analisar um exemplo em Esse código não é um primor da os conhecidos slow downs. código que demonstre o efeito. programação organizada (nem Experimente colocar no início Por simplicidade, o exemplo em C mesmo permite interromper o da repetição do while o código http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine ARTIGO tem uma largura (distância entre os Listagem 1: Código exemplo extremos opostos) de 640 pontos #include e usando a equação da velocidade #include mostrada anteriormente, calculamos a velocidade como 320 pixels/ SDL_Surface *imagem, *tela; // Ponteiro para o bitmap segundo, ou seja, esperamos que a cada segundo passado a imagem void demo(); desloque-se 320 pontos. void demo() { A SDL, como outras bibliotecas SDL_Rect destino; multimídia, disponibiliza a função double x=0; SDL_GetTicks() que retorna a // Preencha a parte fixa do rect destino.y = (480-imagem->h)/2; quantidade de milisegundos destino.w = imagem->w; passados entre a inicialização do destino.h = imagem->h; sistema e o momento da execução da função, o número de ticks. Se while(x<640) esta função for chamada a cada { // Limpa a tela atualização de tela, sabemos SDL_FillRect(tela, NULL, SDL_MapRGB(tela->format, 255, 255, 255)); quantos milisegundos se passaram // Em que posicao x desenha a imagem da inicialização do sistema até o destino.x = (int)x++; início daquele quadro. SDL_BlitSurface(imagem, NULL, tela, &destino); SDL_UpdateRect(tela, 0, 0, 0, 0); } Se utilizarmos uma lógica adequada } com duas variáveis, podemos determinar quantos milisegundos se int main(int argc, char *argv[]) passaram entre o início do quadro { atual e o anterior utilizando estes // Inicializa a SDL if ( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 ) { valores. Esse valor dividido por 1000 fprintf(stderr, “Unable to init SDL: %s\n”, SDL_GetError()); é o intervalo de tempo passado em exit(1); segundos entre os dois quadros, que } multiplicado pela velocidade nos atexit(SDL_Quit); dá o deslocamento da imagem em tela = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); if ( tela == NULL ) relação ao quadro anterior. { fprintf(stderr, “Falhou inicializacao do video: %s\n”, SDL_GetError()); A listagem temporizado.cpp exit(1); mostra o código que anima a } imagem adequadamente. Criamos // Carrega um bitmap (global) imagem = SDL_LoadBMP(“imagem.bmp”); três variáveis novas, atual, if ( imagem == NULL ) anterior e tempo, que armazenam { respectivamente o número de fprintf(stderr, “Nao achei o arquivo %s: %s\n”, “imagem.bmp”, SDL_GetError()); ticks no início do quadro anterior, exit(1); no quadro atual e o tempo em } milisegundos entre os quadros. A demo(); inicialização da variável anterior é // Apaga o bitmap SDL_FreeSurface(imagem); Listagem 1: temporizado.cpp exit(0); } ... Uint32 anterior, atual; // Tempo anterior anterior=SDL_GetTicks(); SDL_Delay(20); para simular um while(x<640) processamento mais lento e veja { que o objeto leva mais tempo para // Tempo atual atravessar a tela. atual=SDL_GetTicks(); // Qual o tempo passado Uint32 tempo=atual-anterior; Animação Baseada em Tempo // Limpa a tela O exemplo inicial desloca a imagem SDL_FillRect(tela, NULL, SDL_MapRGB(tela->format, 255, 255, 255)); um pixel para a direita a cada // Em que posicao x desenha a imagem x += (double)(tempo)*320.0/1000.0; atualização, porém sabemos que // Na próxima iteração, o tempo atual passa a ser o anterior como medida de velocidade isto é anterior=atual; ineficiente. Precisamos relacionar SDL_BlitSurface(imagem, NULL, tela, &destino); a animação ao tempo. Vamos supor SDL_UpdateRect(tela, 0, 0, 0, 0); } que a imagem deva atravessar a tela ... em 2 segundos. Sabendo que a tela http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine ARTIGO e note que a imagem tempo, você pode num FPS acabar Listagem 1: temporizado_melhor.cpp continua levando o mirando num inimigo do jogo ... mesmo tempo para que não está mais lá na próxima // Tempo atual atravessar a tela, ou atualização – quem jogou Doom atual=SDL_GetTicks(); seja, a animação se 3 numa máquina fraca sentiu na // Qual o tempo passado adaptou à taxa de pele isso. No nosso exemplo, a Uint32 tempo=atual-anterior; atualização. imagem se “teleportaria” de um ponto ao outro da tela, o que não // Verifica se passou o tempo mínimo necessário Outras Melhoras if(tempo<10) é uma ilusão muito convincente continue; Mesmo que não de animação.Esse efeito de falta ... tenhamos acesso de precisão pode ser contornado ao retraço vertical, estabelecendo-se um tempo sabemos que um máximo entre cada quadro feita com os ticks imediatamente display de vídeo trabalha com desenhado – 30ms, por exemplo. antes de começar a animação uma taxa de atualização fixa e (ANTES do while). No início de cada limitada, logo não adianta desenhar Se o tempo passado for maior que iteração do while a variável atual é mais quadros por segundo do que isso, o jogo força o valor limite para atribuída com os ticks do sistema. O o sistema pode exibir. O nosso animar os elementos sem prejuízos número de milisegundos passados exemplo certamente faz isso, para no jogo além de um slow down. é armazenado na variável tempo, evitar este problema, podemos A listagem temporizado_final. que é resultado da diferença das considerar uma taxa máxima de cpp realiza essa última etapa. variáveis atual e anterior. A variável atualização da tela, como 100 Simplesmente testamos o valor da x deve ser incrementada pela quadros por segundo. variável tempo, se este for maior que variação de distância calculada pelo 30, o forçamos para este valor, caso tempo passado dividido por 1000, Isso significa que entre cada quadro contrário usamos o valor calculado multiplicado pela velocidade – 320 devem se passar pelo menos 10ms, normalmente. pixels/segundo. Feita a conta, a assim basta verificar se o valor variável anterior recebe o valor de da variável tempo é pelo menos Vale lembrar que essa última atual, já que no próximo quadro os 10, como mostrado no código modificação não resolve o problema ticks do quadro atual passam a ser temporizado_melhor.cpp. Se o valor de desempenho da máquina, do anterior. for maior ou igual, desenhamos o apenas ameniza-o deixando a quadro, caso contrário, esperamos. animação mais lenta de maneira Como prometido, vamos discutir Doom 3 é um jogo que faz isso, a compensar um processamento o uso de uma variável double limitando a atualização a 60 quadros anormal – como quando o sistema para armazenar a coordenada por segundo, independente dele faz swap de memória em disco ou x da imagem. Isto se deve ao usar ou não o retraço vertical nas houvesse elementos demais na tela fato de que o deslocamento será configurações. e a lógica impusesse um overhead praticamente sempre um valor muito grande. Se a máquina não com casas decimais, logo para uma O método como apresentado tiver condições de rodar o jogo, não aproximação mais adequada sem até agora funciona muito bem, será essa última modificação que irá arredondamentos que comprometam porém ele requer um desempenho resolver o problema. o efeito visual e temporal, devemos mínimo do sistema para evitar que utilizar variáveis do tipo ponto ocorra lag no jogo – percebido Considerações Finais flutuante. Para deixar a brincadeira como falta de precisão no controle A técnica apresentada nesse artigo mais divertida, experimente colocar e na resposta do jogo. Como certamente não é revolucionária, o SDL_Delay(20) no código do while as animações são baseadas no existem outras variações para fazer a mesma coisa, porém ela ilustra Listagem 1: temporizado_final.cpp claramente a lógica necessária para um jogo manter as animações de ... maneira adequada independente // Tempo atual atual=SDL_GetTicks(); do desempenho do sistema e da // Qual o tempo passado taxa de atualização do vídeo. Vale Uint32 tempo=atual-anterior; lembrar que a técnica pode ser // Verifica se passou o tempo mínimo necessário utilizada tanto em jogos 2D como if(tempo<10) 3D sem restrições, então aproveite continue; if(tempo>30) e faça isso no seu próximo projeto tempo=30; que vale à pena.  // Limpa a tela SDL_FillRect(tela, NULL, SDL_MapRGB(tela->format, 255, 255, 255)); Paulo V. W. Radtke // Em que posicao x desenha a imagem É professor na PUCPR e programador C++ e Java. x += (double)(tempo)*320.0/1000.0; ... Nas horas vagas desenvolve o Sector 7, um jogo de nave 2D indie, por mais que ainda não tenha achado um pixel artist. http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine por Wilson “WolveWilson” Jr. ARTIGO

2D .NET Games 2 de 3 te Usando GDI+ ar P Nesta segunda parte do artigo estaremos abordando como resolver o problema do flicker quando estamos movimentando um gráfico na tela. Você pode estar se perguntando o que é flicker? Flicker é um efeito de refresh que faz com que o gráfico fique trêmulo (piscando) durante o movimento. Isso ocorre porque o desenho está sendo feito diretamente na memória de vídeo, gerando uma falta de sincronia entre o que está sendo desenhado e o que está se desenhando na memória de vídeo naquele momento. Para resolvermos esse problema estaremos ensinando como implementar uma técnica, muito utilizada, chamada de double buffering.

O que é o double buffering ? Próxima Parte Geralmente os programas Windows desenham diretamente Na próxima parte deste artigo estaremos entrando na parte no vídeo quando o evento WM_PAINT ocorre. Isso pode causar mais legal: A implementação de um jogo completo. Estaremos o efeito de flicker por conta do refresh (atualização) que implementando o famoso RALLY-X !!!! E comentando o código para a janela executa repetidamente. Isso ocorre, por exemplo, vermos na prática como usar os conhecimentos que adquirimos. durante uma animação, um ‘arrastar’ de mouse, um resize Conto com vocês, até a próxima.  (redimensionamento) de uma janela e etc... Nós podemos resolver isso aplicando uma técnica conhecida como DOUBLE BUFFERING, que consiste em fazer todo o desenho Wilson Junior em um ‘buffer’, ou seja, em background, e só após o término de É Formado em Informática pela PUC-RIO. Atua na área de informática há tudo, o vídeo é atualizado (inteiramente e de uma só vez). Desta mais de 10 anos. Trabalha como Analista de Negócios e tem como hobby a forma eliminamos o problema, porque quando o monitor estiver programação de jogos. Já programou em Basic, C, C++, Dbase II, Clipper, VB, atualizando a tela, não estaremos desenhando diretamente nela, Delphi, Assembly, e atualmente, C#. Hoje encontra-se envolvido com o projeto evitando-se a falta de sincronismo que origina o problema. Last Energy, um shoot’em up 3D. A grande vantagem dessa técnica é que, como veremos a seguir, ela é de fácil implementação e será muito útil para nossos jogos em 2D, podendo ser aplicada na maioria dos casos. Além disso ela serve de base para técnicas mas avançadas. Implementação O próprio C# tem uma implementação interna dessa técnica. Para ‘ativá-la’ basta acrescentarmos as seguintes linhas

SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.DoubleBuffer, true);

A título de exemplo no final do artigo você encontrará os fontes da edição anterior com o acréscimo dessas três linhas e com uma modificação no intervalo do timer1 de 150 para 50. Não percam na terceira parte a Experimente comentar as três linhas de setstyle para que você implementação do rally-x em c#. possa notar a diferença. http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine ARTIGO

Listagem 1: Exemplo using System; using System.Windows.Forms; de 3 using System.Drawing; e 2 rt namespace DefaultNamespace a { ///

P /// Description of MainForm. /// public class MainForm : System.Windows.Forms.Form { private System.ComponentModel.IContainer components; private System.Windows.Forms.Timer timer1; public int x,y=10; public MainForm() { // // The InitializeComponent() call is required for Windows Forms designer support. // InitializeComponent();

SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.DoubleBuffer, true); }

[STAThread] public static void Main(string[] args) { Application.Run(new MainForm()); } #region Windows Forms Designer generated code ///

/// This method is required for Windows Forms designer support. Do not change the method contents inside the source code editor. /// The Forms designer might not be able to load this method if it was changed manually. /// private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.timer1 = new System.Windows.Forms.Timer(this.components); // // timer1 // this.timer1.Enabled = true; this.timer1.Interval = 50; this.timer1.Tick += new System.EventHandler(this.Timer1Tick); // // MainForm // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 266); this.Name = “MainForm”; this.Text = “MainForm”; } #endregion void Timer1Tick(object sender, System.EventArgs e) { x =x + 1; y =y + 1; Invalidate(); //Força o repaint em todo a janela, tb pode ser //passada a área especifica de refresh por parametro if ((x > 200) & (y > 200)) Application.Exit(); } protected override void OnPaint(PaintEventArgs e) { Graphics dc = e.Graphics; Font fnt1 = new Font(“Tahoma”,30,FontStyle.Bold); dc.DrawString(“teste”, fnt1, Brushes.Black, x,y); base.OnPaint(e); } } }

http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine por Matías Rodriguez ARTIGO BREW Primeiros Passos Este tutorial tenta iniciar o leitor no desenvolvimento de aplicações para dispositivos móveis utilizando a tecnologia Brew (se pronuncia “bruu”). Na primeira parte vamos ter uma visão geral desta plataforma. Na segunda parte iremos configurar o ambiente para que na terceira parte possamos criar uma pequena aplicação de testes. Na quarta e última vamos ver algumas especificações de alguns modelos de celular disponíveis no Brasil. Para baixar o SDK e desenvolver o exemplo é necessário ter um sistema operacional Windows e o compilador Microsoft Visual C++ 6 ou superior.

Sobre o Brew sistema de arquivos, rede, mensagens de outros o arquivo BAR (visto anteriormente) e o arquivo A tecnologia Brew (Binary Runtime Enviroment módulos), etc. O Brew disponibiliza um editor app_res.h onde app é o nome da aplicação para for Wireless) da Qualcomm (mesma criadora para criar e alterar arquivos MIF. Quando estamos ser incluído no projeto. da tecnologia CDMA) chegou ao Brasil graças à desenvolvendo uma aplicação para rodar no operadora Vivo. Esta tecnologia já está presente emulador podemos escolher um número aleatório Arquivo _res.h em outros países da América do Sul, América do como id mas deve-se tomar cuidado para não Gerado a partir do arquivo BRI, nada mais é que Norte, Europa e Ásia. escolher o mesmo número de algum componente um arquivo que deve ser incluído (#include) no da API. No caso de querer rodar a aplicação num projeto para saber o identificador dos recursos Brew é uma solução tanto de software quanto celular de verdade é necessário requisitar um (imagens, caixas de diálogos, textos) da aplicação. de hardware. Isto quer dizer que não é qualquer número único com a própria Qualcomm. celular que pode rodar uma aplicação Brew, A programação pode ser feita tanto em C quanto somente um celular com um chip Brew. Na parte Diretório em C++. A API consiste em uma biblioteca de de software Brew nada mais é que uma API que Diretório da aplicação. Deve ter o mesmo nome funções estruturadas de uma forma orientada fornece acesso aos recursos do hardware como que o arquivo MIF. Este diretório contém todos os a objetos. A API é muito similar à plataforma sistema de arquivos, rede, estado das teclas, visor arquivos da aplicação. A aplicação só enxerga os COM da Microsoft. Além disso, o próprio estilo (dependendo do modelo do celular pode existir arquivos neste diretório e os de um outro diretório de programação é similar ao desenvolvimento mais de um) e outras funcionalidades como comum a todas as aplicações. de aplicações Win32 (orientado a eventos), criar caixas de diálogo para entrar e/ou mostrar onde uma função de callback é registrada e o informações, tocar sons e músicas, agenda de Arquivo DLL (Dynamic Link Library) ambiente repassa todos os eventos (EVT_KEY_ endereços, etc. Arquivo com a aplicação em si. Deve possuir o PRESS, EVT_APP_START, EVT_APP_STOP, etc.) mesmo nome que o diretório da aplicação. Contém ocorridos para esta função. O Brew chama uma aplicação de módulo o código executável da aplicação. Esta DLL é ou applet. Um módulo pode ou não usar gerada pelo compilador. Uma grande restrição é que não se pode funcionalidades de outros módulos. Um incluir (#include) nenhum arquivo fora os do módulo é formado por uma estrutura de Arquivo BAR (Brew Applet Resource) Brew e logicamente os da aplicação sendo arquivos e diretórios. Existe um diretório com Arquivo com os recursos da aplicação. Deve possuir desenvolvida. Isto quer dizer que funções como todas as aplicações. Cada aplicação possui seu o mesmo nome que o diretório da aplicação. Este malloc, free, printf, strcmp, memset, objetos da próprio subdiretório. Num dispositivo com as arquivo guarda recursos como textos, imagens e stl (Standard Template Library), etc. não podem aplicações app1 e app2, por exemplo, existe caixas de diálogo. O Brew disponibiliza um editor ser utilizados. Para ajudar um pouco a vida do um “diretório” com os arquivos “app1.mif”, de recursos para gerar este arquivo. desenvolvedor a API define equivalentes em “app2.mif” e os subdiretórios “app1” e “app2”. BREW para as funções mais comuns, sendo que O diretório de cada aplicação é formado pelo Durante o desenvolvimento da aplicação existem o nome é sempre em maiúscula. Ex: MALLOC, executável (dll), arquivos de recursos (bar) outros arquivos que o desenvolvedor tem que STRCMP, ATOI, SPRINTF, etc. Outra restrição e arquivos específicos de cada um. A seguir lidar, que são: importante é que não se pode utilizar variáveis vamos explicar com mais detalhes cada um dos estáticas nem globais, pois este tipo de dado arquivos que o desenvolvedor tem que lidar no Arquivo BID (Brew classID) não pode ser tratado em aplicações que são desenvolvimento de aplicações Brew. Nada mais é que um .h disfarçado. Este arquivo é baixadas dinamicamente. A plataforma Brew gerado a partir do arquivo MIF e define (#define) o ainda não suporta o uso de ponto flutuante Arquivo MIF (Module Information File) identificador único da aplicação. Deve ser incluído (float e double), para isso são disponibilizadas Arquivo com informações do módulo. Este arquivo (#include) no projeto. algumas funções de ponto fixo (fixed point) contém o identificador único (entre todos os auxiliares. No caso do C++ é necessário sempre outros módulos Brew existentes no mundo) Arquivo BRI (Brew Resource Intermediate) sobreescrever os operadores new e delete de 32 bits de uma aplicação, quais classes são É um arquivo manipulado pelo desenvolvedor. globais para utilizarem as funções MALLOC e exportadas, informações como nome e ícones É nele que, usando um editor específico, FREE e não a implementação padrão. O Brew para serem mostradas no menu de seleção de adicionamos recursos como imagens, textos e SDK vem com um emulador onde é possível aplicações, privilégios do módulo (acesso ao caixas de diálogos. Usando o editor podemos gerar testar as aplicações sendo desenvolvidas sem  http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine ARTIGO a necessidade de ter um dispositivo Brew um compilador como o Microsoft Visual C++ arquivos “demobrew.mif”, “demobrew.bid” real como um celular. Para compilar e rodar a 6.0 ou superior. e no caso específico da nossa aplicação (que aplicação no emulador um compilador como o usa um arquivo de recursos) “demobrew. Microsoft Visual C++ é suficiente. Para facilitar a tarefa de criação da nossa bar” e “demobrew._res.h”. Abra o “Brew Mif aplicação de testes, vamos baixar também Editor” para podermos criar um identificador No caso de querer rodar a aplicação num o “Suplementos (add-ins) do Brew para o único para nossa aplicação. Para isso clique celular real é necessário adquirir um no botão “Novo Applet” (figura 4). Vamos compilador ARM cujo custo é alto. Existe um especificar um id local para testes. Então compilador GNU mas a Qualcomm não oferece devemos escolher a opção “Localmente” e suporte para ele. Para testar a aplicação basta vamos digitar algum número que não seja copiar ela para o diretório de aplicações do utilizado por outra classe do Brew (figura emulador seguindo os padrões mostrados 5). Ao confirmar, uma tela irá aparecer para previamente . No caso de querer rodar a salvar o arquivo “demobrew.bid”, este arquivo aplicação num celular real, lamentavelmente pode ser salvo no diretório do projeto. Termine é bem mais complicado que J2ME, por de preencher as informações da aplicação exemplo. É necessário ter adquirido um como mostrado na figura 6 e vá ao menu celular habilitado para testes Brew. Isto quer Figura 2: Várias versões do SDK para serem baixadas. A versão 2.0 vai ser escolhida pois representam a maioria dos dizer que o celular só serve para isso e não Celulares disponíveis no Brasil. pode ser utilizado para outra tarefa. Microsoft Visual Studio” como mostra a figura Para distribuir uma aplicação Brew é 3. Este plugin disponibiliza um Wizard para necessário ser um Desenvolvedor Registrado a criação de aplicativos Brew e disponibiliza da Qualcomm e a aplicação em si tem que uma barra de ferramentas que auxiliam no passar por uma série de testes onde o valor desenvolvimento. dos testes pode chegar a mais de US $1.000. Uma vez que a aplicação passou por todos Aplicação de Exemplo os testes, é possível oferece-la a todas as No Visual Studio 6.0 é necessário habilitar operadoras que suportam Brew em todo o o menu de add-ins do Brew. Para fazer isto mundo. A pesar de o desenvolvimento de deve-se ir em “Tools” -> “Customize...”, clicar Figura 4: Criando um novo id para nossa aplicação aplicações Brew para um desenvolvedor na aba “Add-ins and Macro Files” e habilitar independente ou mesmo uma empresa os add-ins do Brew. Para criar nossa aplicação “Arquivo” -> “Salvar”. Salve como “demobrew. pequena ser relativamente caro, uma das de exemplo vá ao menu “File” -> “New...” e mif” no diretório do projeto. Nossa aplicação principais vantagens do Brew é este de testes precisa de um arquivo de sistema de distribuição chamado BDS recursos (demobrew.bar). Para criá- (BREW Distribution System). lo, abra o aplicativo “Brew Resource Editor”, vá ao menu “Recurso” -> Baixando o Brew SDK “Nova string...” e coloque os dados Para baixar o Kit de desenvolvimento para nossa aplicação como mostra basta acessar o endereço http://brew. a figura 7. Salvar o arquivo como qualcomm.com/brew/pt/ e clicar na “demobrew.bri” no diretório do opção “Faça o Download do Brew SDK” projeto, e para finalizar, vá no menu (figura 1). Na primeira vez é necessário “Gerar” -> “Gerar arquivos .BAR...” se registrar no site (é grátis). Uma vez para gerar o arquivo “demobrew. feito o registro vamos para a página Figura 3: Suplementos adicionais para o desenvolvimento de aplicações Brew para o bar” e “demobrew_res.h”. de download do SDK. Vamos escolher Microsoft Visual C++ 6.0 ou superior. a versão 2.0 em Português (o idioma é O Wizard gerou uma estrutura indiferente) pois atualmente é a versão do Brew selecionar “Brew Application Wizzard”. Como (struct) chamada “demobrew” contendo que tem mais celulares aqui no Brasil (ver figura nome, vamos utilizar “demobrew”. Como algumas variáveis que poderão ser acessadas 2). O SDK é composto por várias ferramentas, este é um exemplo simples, na primeira tela pela aplicação. O ponto de entrada do  um Emulador, documentação da API e das do Wizard não vamos escolher nenhuma ferramentas e os arquivos necessários para opção. Caso quiséssemos mexer com compilar e linkar uma aplicação Brew utilizando arquivos, por exemplo, a opção “File” poderia ser selecionada para que o Brew incluísse os cabeçalhos necessários. Na tela seguinte vamos configurar para não gerar comentários no fonte gerado (o ideal seria colocar sim, mas para facilitar este exemplo vamos colocar não).

Uma vez que o wizard gerou os Figura 5: É necessário escolher um id local para nossa aplicação. Figura 1: Site do Brew em Português onde é possível baixar o SDK. arquivos, precisamos criar os Usar um número que não seja usado por nenhuma classe da API. http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine ARTIGO

Figura 7: Criando uma string UNICODE no arquivo de recursos para ser Figura 6: Configurando algumas informações da aplicação. usada pela aplicação.

Listagem 1: Exemplo static boolean demobrew_HandleEvent(demobrew* pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam) { AECHAR buffer[ 16 ]; //buffer para guardar a mensagem. Figura 8: Aplicação demobrew rodando no switch (eCode) { emulador. case EVT_APP_START: { características de alguns celulares //carregar a string do arquivo de recursos (bar) ISHELL_LoadResString( pMe->pIShell, DEMOBREW_RES_FILE, IDC_MENSAGEM, buffer, sizeof( buffer ) ); Brew disponíveis aqui no Brasil. //desenhar a mensagem na tela. IDISPLAY_DrawText( pMe->pIDisplay, AEE_FONT_NORMAL, buffer, -1, 0, 0, NULL, IDF_ALIGN_ Conclusão CENTER|IDF_ALIGN_MIDDLE ); //Atualizar a tela. Este artigo tentou iniciar o leitor IDISPLAY_Update ( pMe->pIDisplay ); este diretório é localizado em “c:\Arquivos de no desenvolvimento de aplicações return(TRUE); programas\BREW SDK v2.0.1 Pt\Examples”. Brew. Existem muitos detalhes técnicos e } Nesse diretório deve-se criar um subdiretório comerciais não mostrados aqui. O próprio case EVT_APP_STOP: return(TRUE); chamado “demobrew” e copiar lá dentro os SDK contém uma vasta documentação da default: arquivos “demobrew.dll” (gerado pelo Visual API e exemplos que podem e devem ser break; C++) e “demobrew.bar”. Agora é necessário consultados. O site http://brew.qualcomm. } abrir a aplicação “Brew Emulator”, escolher com/brew/pt/ está cheio de notícias, return FALSE; } nossa aplicação e fazê-la rodar. O resultado é exemplos, conselhos, dicas, etc. Possui mostrado na figura 8. também fóruns onde desenvolvedores programa é a função “int AEEClsCreateInsta Certificados pela Qualcomm podem postar nce(AEECLSID ClsId, IShell *pIShell, IModule Perfil de alguns dispositivos dúvidas. Quem não é desenvolvedor *po, void **ppObj)”. Esta função é invocada disponíveis no Brasil certificado mesmo assim pode ler os fóruns. pelo ambiente Brew e deve chamar a função Ao desenvolver aplicações para dispositivos Os arquivos do projeto estão disponíveis no “AEEApplet_New” informando a função de celulares devemos tomar precauções site da Revista JogoPRO.  callback para receber eventos, quanta memória Memória deve ser alocada inicialmente para a aplicação Celular Versão Brew Resolução Heap Stack (estrutura demobrew) entre outras coisas. Persistente LGE BD6070 BREW 2.0.1 120x146 16 Bits 600 Kb 8 Kb 660 Kb Foi gerada também a função “boolean Motorola E310 BREW 2.0.2.6 128x110 8 Bits 600 Kb 16 Kb 1.5 Mb demobrew_HandleEvent(demobrew* pMe, AEEEvent eCode, uint16 wParam, uint32 LGE LX5450 BREW 2.0.2.6 120x146 16 Bits 500 Kb ? 1.5 Mb dwParam)”. Esta é a função que irá receber Motorola V810 BREW 2.0.2.6 128x142 16 Bits 1 Mb ? 2.0 Mb os eventos do ambiente. No nosso exemplo, Kyocera KX414c BREW 2.0.2.6 104x68 12 Bits 400 Kb ? 1.5 Mb no evento EVT_APP_START (nossa aplicação está iniciando) iremos carregar uma string LGE BX4170 BREW 2.0.2.6 128x114 16 Bits 512 Kb ? 1.5 Mb em formato unicode do arquivo “demobrew. Samsung SCH-A655 BREW 2.0.2.6 128x146 16 Bits 614 Kb ? 2.0 Mb bar” e em seguida vamos mostrar o seu Tabela 1: Celulares Brew conteúdo na tela (Listagem 1). O demo não faz muita coisa, mas mostra o básico de extras na hora de alocar memória, uma aplicação Brew. O SDK vem com vários programar nossos algoritmos, etc. Tudo Matías Gonzalo Rodriguez exemplos inclusive com o código fonte que isto pois os dispositivos possuem muitas É formado em Ciencia da Computação e podem ser rodados no emulador. limitações se comparados a um PC, por pós-graduado em Desenvolvimento exemplo. Para conseguir as especificações de Jogos. Diretor da Sumersoft Tecnologia. Para rodar nossa aplicação basta copiar o técnicas de cada dispositivo, muitas vezes Entusiasta das linguagens C/C++, Java e arquivo “demobrew.mif” para o diretório com as devemos recorrer aos próprios fabricantes. Smalltalk. Gosta de jogar e desenvolver aplicações de exemplo do Emulador. Geralmente A tabela 1 abaixo mostra algumas Jogos em suas horas vagas. http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine por Daniel “NeoStrider” Monteiro ARTIGO Introdução a programação em Symbian OS Nokia Series 60 em C++.

Com este artigo, pretendo demonstrar esta incrível plataforma que é a Series 60 da Nokia, baseado no sistema operacional Symbian OS. Não pretendo aqui usar qualquer biblioteca extra, de modo que somente com a API básica do sistema seja possível fazer games de qualidade. Somente com o SDK fornecido pela Nokia. Vale lembrar, este artigo não vai dar uma aula de programação para N-Gage, embora os softwares criados com o que for ensinado neste artigo possam ser executados nele sem dificuldade.

Symbian é um consórcio atualmente Para que existem UIDs? Para criar aplicações, basta derivar formado pelas gigantes Nokia, Internamente, são usadas pelo sistema estas classes e implementar os métodos Sendo, LG Electronics, Mitsubishi para associar tipos de arquivos à suas apropriados ao comportamento Eletric, Siemens, Benq, Lenovo respectivas aplicações. Mais adiante desejado a cada componente do O, Motorola, Panasonic, Sanyo , Arima, veremos outra utilidade interessante para sistema. Samsung , Sony Ericsson e Fujitsu. Todas as UIDs. elas unidas para criar o sistema operacional Application: Symbian, um novo padrão na computação Conceitos Básicos (derivada de CEikApplication. Básica do móvel, e agora mais recentemente, um Symbian OS 6.1, montada em cima de padrão para SmartPhones. O sistema em O framework CONE: CApaApplication, do EPOC32 R5.0) si não é novo: trata-se de uma evolução CONE é o nome dado ao framework de do EPOC32, da Psion Computers, que vem aplicações que possuem interface gráfica Esta classe encapsula as etapas de usando este sistema em seus handhelds há no SymbianOS. Refiro me a aplicações com construção de estruturas básicas usadas quase uma década, e muito do que se usa interface gráfica, porque é possível criar para construir os outros componentes na programação Series 60 é literalmente “aplicações” sem interface gráfica. Tratam- do framework, como a cleanup stack derivado de componentes antigos do EPOC32. se de servidores de serviço. Eles funcionam (não por acaso, esta classe é criada com junto de aplicações comuns, dividindo as o new tradicional). UID tarefas do programa de uma forma mais UID é um numero de identificação racional, e aproveitando melhor a timeslice A Application é quem cria a Document, associado a cada aplicação Symbian. do sistema. que veremos agora. Repetir um número ou usar um pertencente a outra aplicação pode trazer complicações Aplicações cone normalmente têm a Document: de solução difícil pelo usuário. Para obter seguinte ordem: (derivada de CEikDocument. básica do um UID para sua aplicação, a Symbian Symbian OS 6.1, montada em cima de mantém um email destinado a esse fim. ApplicationDocumentAppUi AppView CApaDocument, do EPOC32 R5.0) 

http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine ARTIGO Na plataforma Series 60 (a propósito: Series architecture, e é muito boa à medida compatível (C++Builder, CodeWarrior 60 se refere a UI, mais especificamente que permite chamar as views de outras ou Visual C++), de Active Perl, usado no às classes que usamos, como as CEik, que aplicações, mais ou menos como se fosse processo de montagem da aplicação, e são do UIKON e mais os extras do pacote possível chamar uma janela de uma outra do JRE 1.3. Alternativamente, é possível AVKON), esta classe não tem tanto uso aplicação Windows. Neste caso, precisamos pegar um pacote que fornece o SDK 1.2 como em outras plataformas Symbian, associar identificações para cada view. de Series 60, Active Perl e o C++Builder 6 nas quais esta classe é responsável por Para chamar views de outros programas, mobile edition. tudo num único processo de cuidar do documento da aplicação. Este precisamos saber os números tanto da instalação. É fazer o download, instalar e documento é um conceito sem uso em UID da aplicação, quanto do ID da View começar a desenvolver. Series 60. Trata-se do arquivo de trabalho desejada. no momento, como no Microsoft Word, que SDKs: temos o documento que estamos editando, Criando Games em cima do framework Existem diferenças nos SDKs: SDKs 1.x servem a document tem seu document. Esta classe Quanto à uma melhor opção para para Series 60 1.0 e SDKs 2.X servem para cria a AppUi, que será muito importante multimídia, não vamos abordar aqui aparelhos Series 6.0 2.0. Qual é a diferença? para nossa aplicação. nenhuma outra arquitetura que não a Series 60 2.0 roda em cima de SymbianOS 7.0 arquitetura tradicional. Muito menos e é compatível com Series 60 1.0. enquanto AppUI: usaremos Servidores (embora com eles o Series 60 1.0 é baseado em Symbian 6.1. A (derivada de CEikAppUi. Especifica do desempenho seja maior). princípio é possível ter dois SDKs instalados no Symbian 6.0 e derivada de CCoeAppUi) compilador, mas existem precauções a serem A tática mais comum com a arquitetura tomadas, principalmente quanto às variáveis Na UI Series 60, esta classe é uma das mais tradicional, usando uma única view, é de ambiente, que controlam o processo de importantes, pois ela faz parte do sistema incluir na view uma instância de CPeriodic montagem. de gerenciamento de eventos. Sem falar (ou de sua básica, CTimer), que chama uma que ela contem a UI de fato. Curiosamente, função CallBack (passada como TCallBack) Compiladores: não é ela que cuida de desenhar os que atualiza a tela e responde ao sistema Entre os compiladores listados acima como componentes, mas somente de agrupá-los operacional, capturando os eventos compatíveis, cada um tem suas e representar sua organização. Esta classe do sistema, etc. particularidades de trabalho, cria AppView. bem como vantagens e desvantagens. AppView: Vale lembrar (Também chamada de Container por alguns que o consorcio autores. Classe derivada de CCoeControl Symbian prefere porque implementa controles visuais o CodeWarrior, para nossa GUI. Existente desde o mas a Nokia esta EPOC32 5.0, usando o mesmo dando preferência à nome - curiosamente Borland, tanto que a existia sem a AppUi) tendência é transformá-lo no compilador padrão. Outra Nesta classe, temos consideração a ser lembrada é o input e o output. o C++BuilderX que foi feito tendo Esta classe pode conter desenvolvimento multiplataforma instâncias dela mesma em mente e agrega uma função de RAD e funcionar como um eficiente, e por isso é uma boa opção para compound control, que divide desenvolvimento em Series 60.  áreas da tela e repassa para seus componentes. O sistema já Daniel Monteiro veio preparado para isso. No fundo, temos Respondendo ao sistema Tem 20 anos, é estudante da Universidade Federal uma única view com diversos compound A resposta ao sistema se dá de forma Fluminense e quando não está estudando ou controls. Essa é a chamada arquitetura muito semelhante ao Visual BASIC: trabalhando nos seus jogos para Symbian, ele está tradicional. automáticamente. Tudo que a aplicação detonando alguém no N-Gage... ‘’ Ashen ROX!!!!’’ deve fornecer são os métodos Uma outra alternativa para a construção apropriados a serem chamados pelo Saiba mais de interfaces gráficas é basear a aplicação framework, para atuar em caso de em dialogs, neste caso nossa AppView eventos. Mas sem responder ao Sites herda uma classe chamada CAknDialog, sistema, temos apenas uma aplicação www.codeblood.com.br funcionando de forma parecida com que exibe uma única tela e fica www.newlc.com forms, mas menos flexível em termos parada. www.forum.nokia.com.br de manipulação pelo usuário. Funciona www.nokia.com parecido com as Common Dialogs da Ferramentas e SDKS www.series60.com Microsoft e por fim uma alternativa Tudo que precisamos para www.symbian.com que lembra a tradicional, mas que desenvolver para Series 60 é o SDK Livro permite a alternância de views ativas. fornecido pela Nokia ou por uma das Developing Series 60 Applications , EMCC Esta é a chamada Avkon Switching view licenciadas , um compilador C++ Software , ISBN 0-321-22722-0 http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine por Eduardo Dias Favero ARTIGO Apresentação de produtos: 3DS MAX e MAYA Gostaria de agradecer aos idealizadores da revista eletrônica JogosPRO, e aos leitores que apoiaram a idéia e a fazem crescer. Bom, não confrontarei as duas ferramentas de produção 3D, pois não cabe a mim, e o artista 3D não se limita pela sua ferramenta, e sim pela sua imaginação. Irei apresentar os prós e contras de cada ferramenta e seu custo/beneficio, sem “puxar o saco” de nenhum produto, tudo é baseado na minha opinião sobre eles. Caso alguém discorde, mande um e-mail. Separei em tópicos para a fácil análise, então, vamos a eles!

Primeiramente, que agora foi incorporado na versão 7), para do próprio programa. O MAYA se sobressai neste a Comunidade Brasileira: você editar a figura, é preciso mexer em muitos quesito, o 3DS Max começou a ter suporte a A comunidade brasileira de Computação menus, e a aplicação de pesos de vértices nos pixel shader na viewport, e aos shaders do Direct Gráfica é muito grande quando o programa bones é demorada e pode causar Lesão por X, apenas na versão 6, enquanto o MAYA fazia em questão é o 3DS max. Por ter se instalado Esforço Repetitivo (LER). já há algumas versões. Agora a briga é pelo primeiro no Brasil, o 3DS max é muito normal map, que por sinal, fará muita diferença difundido entre os artistas, arquitetos e O MAYA não apresenta alguns desses problemas, nos próximos jogos. Entraríamos em outra designers, então. Mesmo na comunidade por poder ajustar apenas com um clique a questão que é: os modelos, é melhor que eles brasileira, você acha muitos sites e fóruns viewport, se teremos o Hypershade, Hypergraph, tenham poucos polígonos (em torno de 1500), com diversos tutoriais e suporte. e (ou) gráfico de animações. mas tenham vários mapas (Normal, reflexão, especular), do que ter um modelo lotado de Já o MAYA, por ter entrado depois na indústria Modelagem polígonos (em torno de 7000), com expressões brasileira, perdeu o seu espaço para o 3DS Aqui as duas ferramentas se dividem: faciais, mas sem efeitos? O bom seria se os dois max, assim como o Softimage XSI está Modelagem em polígonos no 3DS max, e estivessem juntos... engatinhando atualmente no Brasil (e tomara modelagem em NURBS no MAYA. que já comece a andar). O MAYA estava na Setup/RIG de personagens mesma situação há alguns anos atrás. Agora, Por quê? Bom, pela Auto Desk (3DS Max, O que seria do RIG do 3DS max sem o Character empresas como a Vetor Zero mostram o poder Auto CAD) trabalhar antigamente com seu Studio ? Seria a mesma coisa que é hoje. O do MAYA em seus comerciais. Lembram da foco somente em arquitetura, as ferramentas Character Studio (CS) é muito bom para fazer tartaruga de uma determinada marca de precisavam ser as mais precisas possível, e tendo personagens humanos rapidamente, mas é cerveja? Então... em sua maioria, as “retas” e o uso de polígonos, limitado para outros modelos. Um exemplo a parte de modelagem em NURBS do 3DS Max é é: caso for fazer um dragão, suas asas teriam Velocidade de aprendizagem mais fraca... Já a Alias (MAYA) trabalhou desde que ser feitas com os bones nativos do 3DS O 3DS max possui uma referência enorme, o inicio com programas voltados a filmes, logo, Max. A possibilidade do CS importar arquivos com diversos exemplos e ajuda após a instalá- precisava de ferramentas que apresentassem de Motion Capture e migrar a animação de um lo. Muitos sites, como o www.redpixel. “curvas” e o uso de Splines para a modelagem. modelo a outro faz com que ele seja uma ótima com.br, oferecem tutoriais em vídeo, o que ferramenta, porém está sendo ultrapassada por aumenta a velocidade de aprendizagem. O Atualmente o NURBS está sendo deixado de ferramentas como o CAT (Character Animation MAYA também vem com vários exemplos lado, sendo substituído pela modelagem em Toolkit). após instalá-lo, e possui um comando dentro polígonos e subdivisão. do programa, no menu ajuda, que acha o O MAYA possui ferramentas muito boas para menu ou ferramenta que você procura. Um Como o foco são os jogos, o 3DS max se sobressai edição de bones, seleção, limite de rotação, sem exemplo de site que possui tutoriais em vídeo neste quesito de modelagem em polígonos, a necessidade que há no 3DS max de ir no wire é o: www.digital-tutors, e o próprio site da com várias ferramentas e várias maneiras de se parameters, e com opções semelhantes a do empresa que o produz. chegar ao mesmo resultado. Agora, caso queira Character Studio. fazer a produção de vídeos e personagens High Interface Poly, MAYA é a maneira mais rápida. É claro que Animação A interface do 3DS max é boa e rápida para varia, do gosto do artista. Os dois produtos apresentam ferramentas se trabalhar, mas há alguns problemas de de animação robustas e estáveis, com a organização. Um exemplo é o editor de Texturização possibilidade de animação não linear,e materiais, difícil de organizar seus shaders Não há muitas diferenças entre as duas edição de Keyframes antigos, e com suporte e a interface não ajuda; outro exemplo é a ferramentas, somente o suporte que elas dão a exportar soft body. No 3DS max há o plugin interface do Character Studio (plugin do MAX as Engines, colocando seus shaders na viewport Reactor com o Ragdoll (muito usado em toda  http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine ARTIGO a indústria de jogos por sua física ser mais realista). O Reactor foi incorporado ao 3DS max recentemente, dizem que o 3DS max é uma caixa de plugins, que em todas as versões, eles jogam mais alguns lá dentro. E o MAYA possui seu soft body integrado. Render O 3DS max só foi incorporar um render na sua versão 6, incorporou o Mental Ray como render nativo do 3DS Max, o MAYA possuia o Mental Ray há mais tempo, sem mencionar os renders: V-RAY, BRAZIL, RENDERMAN, etc. Plugins O MAYA é um dos poucos programas que não precisam de plugins, tudo o que o artista precisa tem no MAYA, salvo determinadas ferramentas que são muito precisas no desenvolvimento de jogos. O 3DS max, possuí uma das maiores extensões de plugins existentes no mercado, o único problema, é se caso for comprar todos os plugins necessários para o 3DS max, o preço ficará mais caro que o MAYA UNLIMITED (versão com suporte a fluídos, pelos e cabelos, etc). Interface do 3DS MAX 7 Extensão O 3DS max possuí o MAX Script e o MAYA possuí o MEL, ambos baseados em C, o principal recurso para se usar os scripts, é poder fazer exportadores para as Engines e aumentar a velocidade de produção. Preços 3DS max: $3,495.00*

MAYA complete (versão parecida com a do 3DS max): $2,199.00*

MAYA unlimited (versão com todos os plugins e suporte a cabelos, fluídos, pelos, roupa, etc.) $7,199.00*

* Nota: preocupado com os preços acima? O 3DS max e o MAYA possuem versões de aprendizagem gratuitos em seus sites, o 3DS max com uma versão que dura 30 dias, e o MAYA com uma versão de aprendizagem que não há limite de tempo (MAYA Personal Learning Edition).

Interface do Maya Considerações Finais Se de um lado temos empresas de jogos como: Eduardo Dias Favero Sites Blizzard, Ubi Soft, Konami, entre outras, usando É modelador e animador 3D, atualmente o 3DS Max, temos de outro lado empresas de trabalha na empresa de jogos Oniria 3DS MAX jogos como: Sony, Capcom, Nintendo, Square- Entertainment, situada em Londrina-PR. Nas http://www.discreet.com Enix, entre outras, usando o MAYA, claro que horas vagas, gosta de jogar Final Fantasy e muitas dessas empresas usam os dois programas relembrar os jogos do Atari. MAYA dentro do desenvolvimento de jogos, chegando a http://www.alias.com usar o Softimage XSI e o Lightwave também.  contato: [email protected]

http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine por Wilson “WolveWilson” Jr. ARTIGO

O SuperWaba é uma plataforma de desenvolvimento criada no inicio de 2000 pelo Guilherme Hazan (guich), derivado do projeto livre chamado Waba, do americano Rick Wild. Ambos foram projetados de forma que possibilite o uso de ferramentas já existentes que dêem suporte a Java, como por exemplo o , que possui um plug-in especifico para o superwaba.

Vantagens economia de tempo utilizado por chamadas ao Uma comunidade crescente de cerca de Garbage Collection. 30.000 usuarios de inúmeros países como Brasil, EUA, França, Alemanha, Canada. Sprite class: Representa um objeto do jogo que pode ser movido. Implementa funções Várias novas versões por ano e inúmeras muito úteis para jogos, como testes de colisão, melhorias e correções. movimento e etc.

A plataforma é disponibilizada sob a AnimatedSprite: Extende a classe Sprite visando licença GNU Lesser General Public License o suporte de multiplos objetos ou multiplos (LGPL), que permite o desenvolvimento de frames de uma animação. aplicações comerciais, ao mesmo tempo Metal Corps que protege a plataforma de ser fechada. http://www.geocities.com/veilkrand/Readme.html Além disso a API acrescenta dois novos controles: O Animation control usado para prover conteúdos Portabilidade: aplicações desenvolvidas A API de games é composta das de imagem dinâmica, implementando efeitos são executadas em todos os PDAs seguintes classes: especiais, e uma extensão desse controle chamada suportados nas várias plataformas sem Animated Button, que como o nome sugere, requererem quaisquer modificações ou GameEngine: Essa classe abstrata implementa implementa as funcionalidades de um botão em especializações. o framework da API, provendo acesso a serviços uma imagem animada. como configuração do jogo e pontuação, estados Bibliotecas poderosas e fáceis de usar, do engine, etc. Futuro focadas no desenvolvimento rápido de Esta para ser lançada a versão 5.0, que agora aplicações, com um baixo uso de memória. Options e HighScores: Usadas respectivamente esta fazendo uso internamente da biblioteca SDL para guardar informações de configuração / (Simple DirectMedia Layer), obtendo com isso Baixo custo de propriedade, livre de preferência e, pontuações / tabela de recordes. maior performance na parte gráfica, biblioteca licenças (royalty free). de imagens suportando qualquer formato (além TextRenderer: Usada para exibir textos, como de só gif, jpeg e png) e suporte a arquivos de Acesso ao código fonte permite customizações status do game, pontuação, nível e etc, de maneira musica mod, o que nos abre um leque ainda para necessidades específicas, além de permitir eficiente, sem criação de objetos, o que gera uma maior de opções.  a verificação, por questões de segurança ou estratégicas. Baixo risco de descontinuidade: O projeto SuperWaba pode ser mantido pela própria comunidade e não está nas mãos de apenas uma companhia.

Próxima versão, que já esta em fase de testes, prevê compatibilidade com o Symbian OS 6/7.

API de Games Além das vantagens que vimos acima, o superwaba tem uma que muito nos interessa que é a existência de uma API especifica para games, criada pelo Frank Diebolt (um colaborador do projeto), cujo o tutorial esta disponível para download gratuito. http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine ARTIGO

O Lançamento esta previsto para o dia 13 de Dezembro, e será em Fortaleza em um dos primeiros centros de treinamento autorizado. Conclusão SuperWaba se mostra uma boa alternativa de desenvolvimento, muito similar ao Java e com uma série de vantagens, enfim, algo que vale a pena ser levado em conta quando se precisa de portabilidade e o foco for PDA/Mobile.

Até a próxima...  Sushi Miaou SW Breakout Wilson Junior http://www.wabyanko.com http://www.programming.de/palm.php É formado em Informática pela PUC-RIO. Atua na área de informática há mais de 10 anos. Trabalha Sites e Links como Analista de Negócios e tem como hobby a Super Waba programação de jogos. Já programou em Basic, http://www.superwaba.com.br C, C++, Dbase II, Clipper, VB, Delphi, Assembly, e SDL atualmente, C#. Hoje encontra-se envolvido com o http://www.libsdl.org/index.php projeto Last Energy, um shoot’em up 3D.  http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine ARTIGO

Exemplo de Código: Jogo Ping.java import superwaba.ext.xplat.game.*; gameDoClearScreen = CLEAR_SCREEN; import waba.fx.*; gameHasUI = HAS_UI; import waba.sys.*; setBackColor(Settings.isColor ? new Color(102,255,255):Color.WHITE); import waba.ui.*; import superwaba.ext.xplat.util.props.*; MainWindow.defaultFont = MainWindow.defaultFont.asBold(); public class Ping extends GameEngine // inform the system to remove any delays when reading the keys { waba.sys.Vm.interceptSystemKeys(waba.ui.IKeys. // game API setup parameters PAGE_UP | waba.ui.IKeys.PAGE_DOWN | protected final static boolean ARCADE_GAME = true; waba.ui.IKeys.HARD1 | protected final static boolean WAVE_SUPPORT = false; waba.ui.IKeys.HARD2); } // you may change these 3 boolean values to experiment the game engine /** // different drawing strategies. * overrideable function called by the framework when the game starts.
protected final static boolean DBL_BUFFERED = true; */ protected final static boolean CLEAR_SCREEN = true; public void onGameInit() protected final static boolean USE_BACKGROUND = false; //fdie@420_ { 26 // get the high scores protected final static boolean SPRITE_BKGD_SAVING = false; highScores=getHighScores(); protected final static boolean HAS_UI = false; // access the settings ‘username’ & ‘sound’ properties // Increase the game level each time the scores is a multiple of 128 // if the properties do not yet exist, use the specified default values private final static int SCORE_NEXT_LEVEL=128; settings=getOptions(); // Ball speed increase of 10% at each level private final static int SPEED_INCR_PERC=10; optUserName = settings.declareString (“userName”,”noname”); optSound = settings.declareBoolean (“sound”,false); // Racket move speed when controlled with the keyboard private final static int RACKET_SPEED=7; // set the racket X coordinate which will remain constant racketX=Settings.screenWidth-8; // reduce the game playground to display the game level and score protected final static int GAME_MINY=12; // we need 1 racket and 1 ball // game level & score racket = new Racket (RACKET_SPEED); private int level,score; ball = new Ball (this,racket); // racket position // create two text renderers, one for the ‘level’ and one for the ‘score’ private int racketX,racketY; // we use the current font, the text should be black. // Level value display has 2 and score has 5 digits. // define the game sprites private Racket racket; levelRenderer=createTextRenderer(getFont(),Color.BLACK,”level: private Ball ball; “,2,false); scoreRenderer=createTextRenderer(getFont(),Color.BLACK,”score: // 2 text renderers to quickly display level and score values “,5,true); private TextRenderer levelRenderer; private TextRenderer scoreRenderer; // load game animated logo logo=new AnimLogo(); // define 2 game settings, // by declaring them static they can be accessed in all classes. // display the introduction screen showIntroduction(); protected static Properties.Str optUserName; } protected static Properties.Boolean optSound; /** // the high scores and settings * Game logo accessor. Options settings; * @return game logo HighScores highScores; */ Animation getAnimLogo() // little animation sample { private AnimLogo logo; return logo; } /** * Ping constructor. /** */ * overrideable function called by the framework when the game public Ping() exits.
{ * Nothing to do here, the previously accessed Options/Highscores waba.sys.Settings.setPalmOSStyle(true); * databases are automaticaly closed by the framework. */ // adjust attributes public void onGameExit() gameName = “Ping”; { // when not run on device, appCreatorId does not always return the } same value. gameCreatorID = Settings.onDevice ? waba.sys.Settings. /** appCreatorId:”PiNg”; * overrideable function called by the framework when the game starts gameVersion = 100; running. gameHighscoresSize = 7; * The game is stopped by the the framework run() function. gameRefreshPeriod = ARCADE_GAME ? 75 : NO_AUTO_REFRESH; * (re)intialize the game before the start. gameIsDoubleBuffered = DBL_BUFFERED; */  http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine ARTIGO

Exemplo de Código: Jogo Ping.java public void onGameStart() { { // we got a pen event, store the Y coordinate as the next racket Y posi- onBounce(); tion racketY=evt.y; // reset the racket position & the ball settings (position & speed) racket.setPos(racketX,racketY=Settings.screenHeight>>1,false); // refresh the racket position ball.reinit(); racket.setPos(racketX,racketY,true); level=score=0; } // if non arcade game is selected, redrawings have to be called explicitly. if (!ARCADE_GAME) public void onBounce() refresh(); { } if (USE_BACKGROUND) { /** // pass null to disable an automatic background displaying * overrideable function called by the framework when the pen useBackground(logo.nextFrame()); //fdie@420_26 moves.
} * @param evt } */ public final void onPenDrag (PenEvent evt) /** { * overrideable function called by the framework when the game stops // we got a pen event, store the Y coordinate as the next racket Y posi- running.
tion * The game is stopped by the the framework stop() function.
racketY=evt.y; */ public void onGameStop() // refresh the racket position and cancel the keyboard mode { racket.setPos(racketX,racketY,true); // when the game stops, popup the GameOver window swap(GameOver.getInstance(this,highScores,score,optUserName. // if non arcade game is selected, redrawings have to be called explicitly. value)); if (!ARCADE_GAME) } refresh(); } /** * overload Superwaba’s painting function. /** * @param gfx Graphics to draw at. * overrideable function called by the framework when a key is */ pressed.
public final void onPaint(Graphics gfx) * @param evt { */ if (gameIsRunning) public final void onKey (KeyEvent evt) { { int sk = Vm.getSystemKeysPressed(); if (evt.key==IKeys.PAGE_UP || evt.key==IKeys.UP) if (sk != 0) racket.move(true); { else if ((sk & (Vm.SK_PAGE_UP | Vm.SK_HARD1)) != 0) if (evt.key==IKeys.PAGE_DOWN || evt.key==IKeys.DOWN) racket.move(true); racket.move(false); if ((sk & (Vm.SK_PAGE_DOWN | Vm.SK_HARD2)) != 0) racket.move(false); // if non arcade game is selected, redrawings have to be called explicitly. } if (!ARCADE_GAME) refresh(); // redisplay the racket } racket.show(); Container blankContainer; // move the ball, that’s the hard work /** Creates and places a blank container in the screen. */ ball.move(); public void blankScreen() { // draw the ball if (blankContainer == null) ball.show(); { blankContainer = new Container(); // Increase the game level each time the scores is a multiple of blankContainer.setRect(getRect()); SCORE_NEXT_LEVEL blankContainer.setBackColor(backColor); if ((score & SCORE_NEXT_LEVEL-1) == 0) } { swap(blankContainer); // increase the level and the ball speed } level++; ball.increaseSpeed(SPEED_INCR_PERC); /** } * display the game ending screen (hiscores screen). */ score++; public void showHighScores() { // render level & score swap(GameOver.getInstance(this,highScores,0,null)); levelRenderer.display(16,2,level,false); } scoreRenderer.display(Settings.screenWidth>>1,2,score,false); } /** } * display the game introduction screen. */ /** public final void showIntroduction() * overrideable function called by the framework when the pen touches { the screen.
Introduction.swapTo(this); * @param evt event that occurs. } */ } public final void onPenDown (PenEvent evt)

http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine por Bruce “Sinner” Barrera ARTIGO Introdução ao Desenvolvimento de Jogos com BREW & OpenGL / ES Demorou um pouco, mas finalmente surgiu a necessidade dos dispositivos móveis terem suporte a aplicativos e jogos 3D. O OpenGL há anos é um padrão da indústria de games por ser suportado diretamente pelo hardware gráfico e além de ser gratuito e multiplataforma. Nada mais natural que houvesse uma implementação dele para celulares e handhelds, surgindo assim o OpenGL/ES (ES de Embedded Systems). Em 2000 foi fundado um consórcio representado pelas grandes companhias do mercado (Nvidia, ATI, 3dLabs, SGI, Sun...), chamado Khronos Group, com o intuito de criar padrões de APIs abertas para inúmeros tipos de mídia e dispositivos. Felizmente, incluído nesse meio, estava o OpenGL/ES e os dispositivos móveis.

ançado em 2003, o OpenGL/ES foi definido configurar o SDK e até mesmo com um subconjunto do OpenGL. Mas não prepará-lo para utilização conjunta se iluda, praticamente todas as funções com o Visual Studio 6.0 da Microsoft, mais importantes da funcionalidade fixa por isso não estarei entrando em Ldo OpenGL estão presentes no OpenGL/ES apesar detalhes nesse tópico. das limitações de memória e processamentos dos dispositivos móveis atuais. Mesmo com Além do SDK propriamente dito e do essas limitações é possível escrever bons jogos Visual Studio Add-On, será necessário para celulares e PDAs e para os desenvolvedores também baixar e instalar a extensão independentes isso até se torna uma vantagem, do BREW para o OpenGL/ES. Essa pois equipamentos limitados não permitem extensão pode ser obtida em: tecnologias de ponta nem gráficos “top quality”, SkyBox no OpenGL/ES o que permite que pequenas equipes sejam https://brewx.qualcomm.com/brew/ capazes de desenvolver bons jogos e até sdk/download.jsp?page=dx/devmisc descobrir a quantidade de limitações que concorrer com as ditas “grandes” do mercado. existem na programação de celulares e Descompacte o arquivo em uma pasta PDAs. Verá que não tem milhares de bytes Como o OpenGL/ES é um padrão, várias qualquer e : de memória, que não há váriáveis globais implementações dele estão disponíveis para nem estáticas (!) e que é tudo baseado em diversas plataformas. Nesse artigo procurarei  Mova a pasta inc para a respectiva pasta timers e eventos. Mas calma, apesar das mostrar como montar um pequeno framework inc do SDK do BREW. dificuldades aparentes não é tão dificil funcional do OpenGL/ES em conjunto com a quanto aparenta ser. plataforma BREW, desenhar algumas figuras  Mova a pasta src para a respectiva pasta geométricas, receber interação do teclado, src do SDK do BREW. As variáveis globais trabalhar com timers e eventos do BREW foram pro espaço, e agora ? e a partir desse ponto, onde procurar mais  Mova a dll que está na pasta BREW.3.x Os leitores mais perceptivos a essa altura já informações para que o leitor seja capaz de para a pasta bin\modules do SDK do estarão se perguntando: se não há variáveis desenvolver seus próprios games e entrar para o BREW globais nem estáticas como reproduzir suas mundo cobiçado do 3D na palma da sua mão! funcionalidades ? Como criar uma classe  Mova todos os arquivos da pasta devices global que conterá a lógica do meu game ou Iniciando para a pasta devices do SDK do BREW. aplicativo ? A primeira coisa que o leitor deve fazer para começar o desenvolvimento é instalar o SDK da Para testar no emulador a aplicação gerada, A plataforma BREW armazena uma BREW. Ele é gratuito e pode ser baixado em escolha o device BlackCap16, atualmente o struct global para nós, struct essa que único device no emulador que dá suporte ao obrigatoriamente deve conter como primeiro https://brewx.qualcomm.com/brew/sdk/ OpenGL/ES. membro uma outra struct do tipo AEEAplet. download.jsp?page=dx/3.0. Mas após ela, podemos armazenar qualquer Voltando à parte técnica, quem está tipo de dados que quisermos. Essa struct Nessa edição existe um ótimo artigo do acostumado com a programação do PC global é gerada automaticamente pelo Matías Rodriguez sobre como instalar, tomará um susto a princípio, quando wizard de criação de aplicações (para quem  http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine ARTIGO usa Visual Studio) e geralmente possui o mesmo nome da aplicação. Veja a criação dessa estrutura e a alocação de um ponteiro para ela no corpo da função AEEClsCreateInstance. Esse ponteiro será passado como parâmetro para a maioria das funções utilizadas por nós.

Seguindo o paradigma da Orientação a Objetos como boa prática de programação, vamos criar uma classe CGame, e acrescentá-la a essa estrutura global do BREW. Essa classe conterá a lógica do nosso jogo conforme mostra o código abaixo:

// opengl_1.cpp struct opengl_1 Efeito de Wave texturizado Efeito de Blur { AEEApplet a; // a estrutura obrigatória do BREW // game.cpp CGame m_Game; // nossa classe do jogo boolean CGame::Create(IShell * shell, IDisplay * display) { int m_OldTime; // usado para calcular a velocidade do game m_Shell = shell; }; m_Display = display; Abaixo segue o cabeçalho da nossa classe CGame. Observe a estrutura // obtem as informações do celular AEEDeviceinfo que contém diversas informações do celular incluindo mDeviceInfo.wStructSize = sizeof(mDeviceInfo); o tamanho da tela, sua altura e largura . Essas informações podem ser ISHELL_GetDeviceInfo(m_Shell, &mDeviceInfo); usadas para adaptar nosso jogo aos mais diversos celulares existentes mudando o tamanho da tela utilizada em run-time, evitando a DBGPRINTF(“ *** Width %d, Height %d”, GetWidth(), GetHeight()); recompilação do game e facilitando sua distribuição. return TRUE; } // game.h class CGame void CGame::Destroy() { { private: } // ponteiro para ter acesso às funcionalidades do celular IShell * m_Shell; IDisplay * m_Display; A função DBGPRINTF (Debugger printf) serve para escrevermos texto no painel output do debugger do Visual Studio. Para isso devemos incluir // estrutura que contém informações do celular AEEStdLib.h no programa. AEEDeviceInfo m_DeviceInfo; Timers e Eventos public: A programação no BREW é event-based ou seja, baseado em eventos // métodos de criação da nossa classe disparados pela plataforma BREW. Nesse tipo de programação o boolean Create(IShell * shell, IDisplay * display); desenvolvedor deve criar funções de callback que respondem e fazem void Destroy(); certas ações dependendo do evento em questão. Se alguma função entrar em loop, o BREW detecta e restarta o dispositivo para evitar // o método que sera chamado pelo evento de timer deadlock. void Tick(int timeElapsed); Mas como simular um jogo normal, onde geralmente se tem um // métodos para retornarem os atributos da classe loop principal onde são feitas as atualizações do elementos do jogo, IShell * getShell() { return m_Shell; } tratamento de inputs, etc ? A resposta é simples e direta: Através de IDisplay * getDisplay() { return m_Display; } eventos. Tudo na plataforma BREW é feito através de eventos que são disparados em situações específicas. Ao clicar uma tecla do celular, int getWidth() { return m_DeviceInfo.cxScreen; } por exemplo, um evento KeyPress é disparado. Então para simularmos int getHeight() { return m_DeviceInfo.cyScreen; } o loop principal de um jogo vamos usar o evento de timer. }; Para usarmos o evento de timer, vamos criar uma função de callback O trecho de código abaixo mostra parte da implementação da que reproduzirá o que faríamos dentro de um loop do jogo. Vamos classe CGame, seus métodos de criação e liberação de recursos. colocar dentro da nossa classe CGame o método Tick(int elapsedtime) Essas classes devem ser chamadas dentro das funções criadas que será invocado sempre que o timer disparar o evento. Esse com o wizard, opengl_1_InitAppData e opengl_1_FreeAppData, método é que será responsável por simular o loop principal do jogo. respectivamente. Essas duas funções recebem o ponteiro para a Para configurarmos o timer do BREW, utilizamos a função ISHELL_ estrutura global do BREW, então o acesso à nossa classe CGame é SetTimer. Ela recebe quatro parâmetros, um ponteiro para o ISHELL bem fácil. da aplicação, de quanto em quanto tempo o timer será acionado em  http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine ARTIGO O cubo girando rodando no emulador TickTime é uma constante usada na função SetTimer. Agora só falta ativar o timer pela primeira vez, pois todas as vezes subsequentes serão ativadas pela própria função SetTimer. Para isso coloque uma chamada da função no método opengl_1_HandleEvent, criado pelo Wizard. Adicione uma chamada a SetTimer no case EVT_APP_START. Esse case é avaliado quando a aplicação é iniciada.

Resolvendo o problema com o Fixed Point Math Os chips ARM que estão na maioria dos dispositivos que suportam o BREW, não suportam operações aritméticas de ponto-flutuante. Eles usam um formato chamado Fixed Point Math 16.16. É como pegar uma variável de 32 bits e utilizar seus 16 primeiros bits para parte inteira do número e os 16 restantes para a parte fracionária. Para converter um int para 16.16, basta fazer um shift esquerdo de 16 bits. Um shift direito converte de volta para inteiro. Basta setar uma macro e não se preocupar mais com isso:

// int to 16.16 macro #define ITOFP(x) ((x)<<16)

Recebendo Input do usuário Toda vez que o usuário aperta um tecla, um milisegundos, um ponteiro para a função de callback e um ponteiro evento é disparado para ser tratado pela função tratadora de eventos, (void *) que receberá qualquer dado extra que você quiser passar para a opengl_1_HandleEvent. Cabe a nós desenvolvedores colocarmos a rotina de callback. uma chamada a nossa função de tratamento do teclado, após os cases EVT_KEY_PRESS e EVT_KEY_RELEASE: void SetTimer(test_project1 * data) { // opengl_1.cpp handle event int result = ISHELL_SetTimer(data->m_Game.GetShell(), TickTime, ... timer_tick, static_cast < void * > (data)); case EVT_KEY_PRESS: if (result != SUCCESS) pMe->m_Game.KeyPressed(wParam); { return TRUE; DBGPRINTF(“ *** SetTimer failed”); } case EVT_KEY_RELEASE: } pMe->m_Game.KeyReleased(wParam); void timer_tick(void * data) return TRUE; { ... test_project1 * tp1 = static_cast < test_project1 * > (data);

int TimeElapsed = GETUPTIMEMS() - tp1->m_OldTime; Resta agora criarmos os métodos KeyPressed e KeyRelease na nossa tp1->m_OldTime = GETUPTIMEMS(); classe CGame. Esses métodos guardarão as teclas pressionadas no vetor m_KeysDown que possui um tamanho igual a AVK_LAST tp1->m_Game.Tick(TimeElapsed); – AVK_FIRST que são constantes que definem os códigos virtuais das teclas do dispositivo. AVK_FIRST não necessariamente é igual SetTimer(tp1); } a zero. // game.h A função GETUPTIMEMS() retorna o tempo que o dispositivo esteve ligado class CGame em milisegundos. É semelhante à função GetTickCount da API do Win32. { Para fazer a função de callback ser chamada na proporção de frames por ... segundo que você desejar, calcula-se dessa maneira: boolean m_KeysDown[AVK_LAST - AVK_FIRST]; ... void KeyPressed(int keyCode); const int WantedFPS = 20; void KeyReleased(int keyCode); const int TickTime = 1000 / WantedFPS; ...  http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine ARTIGO

Comparação entre as outras tecnologias e o OpenGL ES

OpenGL ES finalmente! Ela se chamará Renderer e pode ser vista abaixo: Depois de nos preocuparmos com a infraestrutura do jogo, deixemos a parte chata de lado e vamos ao que interessa: 3D com OpenGL ES! Quem já // From Renderer.h conhece o OpenGL bem, não terá dificuldades para se integrar ao OpenGL/ class Renderer ES já que praticamente todo o conhecimento se traduz para ele. Esse artigo { assume que o leitor já possui um certo conhecimento de OpenGL e não private: estarei explicando o funcionamento dos comandos básicos. IGL * mIGL; IEGL * mIEGL; Uma das primeiras diferenças a ser notada, é a sufixo do nome das funções. No PC nós usávamos letras que designavam o tipo do parâmetro recebido EGLDisplay mDisplay; por cada função. Era i para integer, f para float, v para vetores, etc. Como os EGLConfig mConfig; tipos de dados no BREW são limitados, estaremos usando na maior parte EGLSurface mSurface; do tempo o Fixed Point Math, que recebeu o sufixo x no lugar do float. EGLContext mContext; Então teremos a seguinte tradução: public: glRotatef -> glRotatex, por exemplo. boolean Create(IShell * shell, IDisplay * display); void Destroy(); Outra diferença significativa que os desenvolvedores irão logo notar, diz respeito a forma de envio de vértices para o pipeline de renderização. O void FlipToScreen(); OpenGL ES apenas possui o modo imediato de envio de vértices através }; da função glDrawElements que envia um buffer de vértices de uma vez só, para aumentar a eficiência e performance. Portanto o desenvolvedor precisará fazer uma pequena revisão de como utilizar glVertexPointer, IGL é a interface do seu programa com o OpenGL. EGL é uma glColorPointer, glNormalPointer pois provavelmente está acostumado com o camada específica do BREW para ficar entre o IGL e a arquitetura par glBegin...glEnd e a função glVertex. da plataforma. Os demais atributos guardam informações do vídeo, configurações do modo de vídeo, a superfície de renderização e o Para utilizar o OpenGL/ES no seu jogo ou aplicativo é necessário adicionar estado das variáveis do OpenGL (context). o cabeçalho IGL.h e o arquivo GL.c, ambos encontrados nos diretórios inc e src do SDK. Eles possuem os protótipos das funções do OpenGL/ES. Inicialização da Classe de Renderização A rotina de inicialização da classe instancia as interfaces e Iremos manter o paradigma da Orientação a Objetos e criar uma classe checa para ver se algum erro ocorreu, para evitar travamento do apenas para o gerenciamento da renderização. dispositivo móvel.  http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine ARTIGO

Bool Renderer::Create() { if (ISHELL_CreateInstance(shell, AEECLSID_GL, (void **)&mIGL) != SUCCESS) { Destroy(); return FALSE; } if (ISHELL_CreateInstance(shell, AEECLSID_EGL, (void **)&mIEGL) != SUCCESS) { Destroy(); return FALSE; } IGL_Init(mIGL); IEGL_Init(mIEGL); mDisplay = eglGetDisplay(display); if (mDisplay == EGL_NO_DISPLAY) { Destroy(); return FALSE; } EGLint major = 0; GLint minor = 0; if (eglInitialize(mDisplay, &major, &minor) == FALSE) { Livro “OpenGL ES Game Development” recém lançado Destroy(); return FALSE; } Esse método também inicializa o display e obtém a versão do OpenGL/ES instalada (variáveis major e minor). Depois DBGPRINTF(“ *** ES version %d.%d”, major, minor); de mostrar no output do debug a versão atual, obtém a GLint numConfigs = 1; configuração do display e depois obtém um “device bitmap” que if (eglGetConfigs(mDisplay, &mConfig, 1, &numConfigs) == FALSE) { será onde será desenhado a saída do OpenGL/ES (Front Buffer). Destroy(); Feito isso, está na hora de criar um surface de renderização, return false; usando as informações do display e configuração, coletadas } antes. Esse surface de renderização será associado com o device IBitmap * DeviceBitmap = NULL; bitmap e se transformará no que o OpenGL comum chamaria de IDIB * DIB = NULL; device context. (geralmente a GDI do Windows). Por fim, cria um if (IDISPLAY_GetDeviceBitmap(display, &DeviceBitmap) != SUCCESS) context de renderização, exatamente como o OpenGL normal { faz e diz pro OpenGL/ES colocar como target de renderização Destroy(); o display, config, context e surface criados. Se conseguirmos return FALSE; } chegar até aqui sem erros, a infra-estrutura toda do OpenGL/ES e do nosso framework estará montada, vindo agora a parte mais if (IBITMAP_QueryInterface(DeviceBitmap, AEECLSID_DIB, (void**)&DIB) != SUCCESS) divertida, a de desenhar! { IBITMAP_Release(DeviceBitmap); Não esqueça de limpar a bagunça Destroy(); return FALSE; Antes de irmos para a parte mais interessante, um lembrete. } Estamos usando um dispositivo altamente limitado, com memória reduzida. Então não esqueça de criar um método mSurface = eglCreateWindowSurface(mDisplay, mConfig, DIB, NULL); CRenderer::Destroy() onde limparemos todas as interfaces e IDIB_Release(DIB); ponteiros criados no processo de incialização. Esse método IBITMAP_Release(DeviceBitmap); deve ser sempre chamado ao fim do nosso jogo ou aplicativo. if (mSurface == EGL_NO_SURFACE) Consulte o código fonte para ver como isso é feito. { Destroy(); return FALSE; Até que enfim a tela deixará de ser preta } Como última parte desse artigo, vamos desenhar um cubo girando. Apesar de ser um exemplo simples, mContext = eglCreateContext(mDisplay, mConfig, NULL, NULL); mostra na prática como fazer uma pequena animação if (mContext == EGL_NO_CONTEXT) e desenhar uma figura geométrica usando o Immediate { Mode do OpenGL/ES. Destroy(); return FALSE; } Antes de desenhar, vamos ver como fica a implementação da troca do back buffer com o front buffer, o famoso if (eglMakeCurrent(mDisplay, mSurface, mSurface, mContext) == FALSE) { SwapBuffers do OpenGL: Destroy(); return FALSE; void Renderer::FlipToScreen() } { glSwapBuffers(mDisplay, mSurface); } }  http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine ARTIGO

A rotina anterior troca o que está desenhado no surface de renderização (back buffer) com Demo de Environment Map feito pela NVidia o display do celular ou PDA (front buffer). Agora que o leitor já sabe enviar o render para a tela, vamos ao código OpenGL puro para desenho de um cubo girando. Esse código está no método CGame::Tick() que se encarrega de desenhar na tela toda vez que o timer é acionado. void CGame::Tick(int timeElapsed) { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glPushMatrix(); glLoadIdentity(); glTranslatex(0,0, ITOFP(-15)); if (mRotateAngle > 360) mRotateAngle = 0; glRotatex(ITOFP(mRotateAngle), ITOFP(0), ITOFP(1), ITOFP(0)); glRotatex(ITOFP(45), ITOFP(1), ITOFP(0), ITOFP(0)); int FaceData[24] = { // cubo Observe o uso de uma nova constante, o GL_FIXED para dizer -ITOFP(2), ITOFP(2), ITOFP(2), ITOFP(2), ITOFP(2), ITOFP(2), para as funções que os números estão usando o Fixed Point ITOFP(2), -ITOFP(2), ITOFP(2), Math do BREW. -ITOFP(2), -ITOFP(2), ITOFP(2), -ITOFP(2), ITOFP(2), -ITOFP(2), ITOFP(2), ITOFP(2), -ITOFP(2), Por último nós trocamos os buffers, efetivando o desenho na ITOFP(2), -ITOFP(2), -ITOFP(2), tela através da chamada do método FlipScreen() do objeto -ITOFP(2), -ITOFP(2), -ITOFP(2) }; Renderer. O trecho de código que vem logo a seguir usa apenas a API do BREW para escrever texto na tela, nesse caso, int ColorData[32] = a quantidade de FPS em que o programa está rodando. { // First to eighth vertex color ITOFP(1), ITOFP(0), ITOFP(0), ITOFP(0), Conclusão ITOFP(0), ITOFP(1), ITOFP(0), ITOFP(0), Esse artigo montou um pequeno framework suficiente para ITOFP(0), ITOFP(0), ITOFP(1), ITOFP(0), ITOFP(1), ITOFP(1), ITOFP(1), ITOFP(0), o leitor já poder começar a fazer pequenos jogos em 3D e que ITOFP(1), ITOFP(0), ITOFP(0), ITOFP(0), respondam a interface do usuário. Um tópico não abordado ITOFP(0), ITOFP(1), ITOFP(0), ITOFP(0), ITOFP(0), ITOFP(0), ITOFP(1), ITOFP(0), foi o de som com o BREW, possivelmente assunto para um ITOFP(1), ITOFP(1), ITOFP(1), ITOFP(0) próximo artigo. O código-fonte do framework pode ser }; encontrado para download no site da revista uint8 IndexData[36] = { 0, 1, 2, 0, 2, 3, //front face (www.jogospro.com.br) e foi preparado no Microsoft Visual 4, 5, 1, 0, 1, 5, //top face Studio .NET 2003. Qualquer dúvida usem o tópico do artigo 3, 2, 6, 7, 3, 6, //bottom face na seção da Revista no fórum do site. Até a próxima.  5, 4, 7, 6, 5, 7, //back face 1, 5, 6, 2, 6, 5, //right face 4, 0, 3, 7, 4, 3}; //left face Bruce “Sinner” Barrera É desenvolvedor profissional e atualmente trabalha com glVertexPointer(3, GL_FIXED, 0, FaceData); // Set the vertex (position) data source glColorPointer(4, GL_FIXED, 0, ColorData); // Set the color data source visualizações 3D de estruturas de concreto para engenharia. glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_BYTE, IndexData); // Draw the Também está desenvolvendo uma engine e ferrramentas triangle para jogos 3D. Pretende se candidatar a uma vaga no concurso do Ministério da Cultura (JogosBR). glPopMatrix(); Quando não está programando, está programando. Veja Mais m_Renderer.FlipToScreen(); Livro OpenGL ES Game Development por Dave Astle and Dave Durnil AECHAR buffer[16]; http://www.gamedev.net/columns/books/bookdetails.asp?productid=425 WSPRINTF(buffer, 16, L”FPS: %d”, 1000 / timeElapsed); IDISPLAY_DrawText(mDisplay, AEE_FONT_BOLD, buffer, -1, 5, 5, NULL, 0); Concurso de OpenGL ES patrocinado pela Qualcomm http://www.gamedev.net/community/contest/qualcomm2004/ IDISPLAY_Update(mDisplay); OpenGL ES Oficial Site // atualiza o angulo de rotação do cubo mRotateAngle += 1; http://www.khronos.org/ } Site da Qualcomm sobre o OpenGL ES http://www.cdmatech.com/solutions/products/opengles_overview.jsp No código acima é possível ver os elementos novos do OpenGL/ES: o uso das funções Nvidia HandHeld SDK baseado no OpenGL ES glRotatex e glTranslatex que usam o Fixed Point Math do BREW. Observe que todos os http://developer.nvidia.com/object/hhsdk_home.html valores me ponto flutuante foram convertidos usando a macro ITOFP. O vetor FaceData guarda as coordenadas de todos os vétices que compõe o cubo e o índice de duas faces Forum Oficial da Qualcomm sobre OpenGL ES são guardados no vetor IndexData. O ColorData guarda as cores de cada vértice. http://brewforums.qualcomm.com/forumdisplay.php?f=49

Com as funções glVertexPointer e glColorPointer nós enviamos os dados para o buffer Demos de OpenGL ES http://www.hybrid.fi/main/esframework/demos.php do OpenGL que por sua vez envia para o pipeline através da função glDrawElements. http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine Simpósio Brasileiro de O SBGames aconteceu em Curitiba, nos dias 20 e 21 de outubro. E a Jogos para Computador e JogosPRO foi lá conferir o maior Entretenimento Digital evento de jogos do Brasil.

Jogo: Erinia Olha nós aqui! Phillipe Kling David e André Kling David

Jogo: Gods of the Virtual Boards Scylla Cabral da Costa Neto e Jefferson Valadares Mariana Stephani e Renato Klieger Gennari ambos da Jynx Playware

Jogo: Pequeno Guardião do Tempo Jogo: Edugraph Autor: Luis Ernesto Autor: Rafael Pereira Dubiela Esse pessoal vive no mundo da Lua. Hora do lanche! Luiz Henrique de Figueiredo no tutorial “A Linguagem LUA e suas Aplicações em Jogos”

Representantes das principais empresas de jogos do Brasil marcando presença: O Spy (também conhecido como Rodrigo), na palestra “Desen- Continuum, South Logic e Ignis Games. volvendo Jogos com Ferramentas de Software Livre”

Galera se preparando para assistir o Organizadores do Festival de Jogos Independentes Festival de Jogos Independentes contabilizando os votos dos três finalistas.

Veja várias outras fotos do evento no site (www.jogospro.com.br)

Todas as fotos por Matias Rodriguez.

Momento artístico do nosso fotográfo. +Um momento artístico do nosso fotográfo. por Fabrício Kolk Carvalho FIM DO JOGO Criatividade nos Jogos Criatividade. O que é criatividade? Higinbotham. Ele foi o precursor dos jogos. Criou todo explica a P.N.L. (programação neuro lingüística), tente, um novo universo, com o uso de um osciloscópio e muita ao receber um estímulo (uma música por exemplo) Criatividade é o fator diferencial de qualquer jogo. imaginação. interpretá-lo com outros sentidos (essa técnica foi usada para criar o filme “Fantasia” da Disney, que é o O que seria criatividade? Criatividade consiste na atividade Mas o mais importante, ao invés de ficar falando de mapeamento de uma composição musical). de inventar. Percorrendo pelas páginas do Aurélio passado, é aplicar e desvendar o mistério da criatividade achamos a seguinte definição para a palavra “invenção”: desses grandes Gurus dos Games. O grande mistério O importante é fazer a transição do lado esquerdo do é associar a todo instante o que quer que você esteja raciocínio para o lado direito, entrando em um estado Invenção (do latim inventione) 5. Novo meio para se chegar fazendo, com jogos. Como por exemplo Miyamoto, o alterado de consciência. Para se atingir esse estado a um fim. inventor de “Link” e “Super Mario Bross”: “Conversando há varias maneiras. Ao estar mergulhado em alguma com meus colegas em papos do dia-a-dia, por exemplo, me atividade, isso costuma acontecer, tente a seguinte O fim é o jogo. O meio é a criatividade traz muitas idéias. As idéias podem vir até no meio de um experiência: Qualquer atividade onde algo novo é formado é chamado banho numa banheira quente!” de processo criativo. Com esse processo em vista, temos Coloque um CD que você goste bastante (de preferência dois tipos básicos de criatividade. A pura e a Aplicada. Esses Game designers tem suas mentes livres para fazer algo mais clássico, melódico ou instrumental. Evite associações a todo instante. Para isso ocorrer, primeiro músicas cantadas). Olhe para a palma da sua mão Criatividade pura: É o tipo de criatividade que todos você deve ser uma pessoa com poucos preconceitos. por aproximadamente 7 minutos. Não dê atenção ao nós temos. Consiste de fazer associações deliberadas Não ficar ancorado a velhas idéias, ser mutante, tempo. Sempre que pensar que isso é uma coisa idiota unindo coisas que não precisam ter um resultado lógico constantemente atualizado. de se fazer, olhe mais afundo e tente parar com esse ou aplicado. Geralmente os artistas utilizam esse conceito pensamento. Com a observação da palma da mão, para fazer os seus modelos. Muitas das idéias vêem às pessoas em sonhos. Isso você começará a perceber a conexão das rugas, verá acontece por que enquanto sonhamos, desligamos os o universo que existe em cada traço. Você começará Criatividade aplicada: Nesse processo, pegamos fatores que inibem as nossas ações pragmáticas em nosso a pensar diferente. Ao se escutar uma música isso todo o potencial da criatividade pura e canalizamos, cérebro. acontece com frequência também. usando o conhecimento. Nesse estágio mais elaborado e complexo, que colhemos os frutos aproveitáveis. Frutos O cérebro humano, pode ser dividido em duas grandes Antes de pensar no game design, roteiro, (etc.) de um como avanços tecnológicos de Engines, a originalidade zonas. O lado esquerdo e o direito. Cada zona é jogo, você tem que atingir esse estado. Então, sempre dos roteiros, os horríveis monstros, as novas técnicas de responsável por um tipo diferente de processamento tente fazer esse exercício. Repita-o até que se sinta em um jogabilidade. de informações e estado diferente de raciocínio. raciocínio. O lado Esses tipos de criatividade podem se formar de duas esquerdo, é o que Quando começar a pensar formas: leva mais ênfase na diferente você está pronto para nossa sociedade. É pensar sobre o seu jogo. Feche os 1. Quando você cria tudo novo. Uma idéia totalmente o lado matemático, olhos e deixe a imaginação rolar. original, baseada em nada, ou quase nada. Quando algo lógico, preciso, Visualize as suas fases, os seus desse nível surge, há um salto em todo o paradigma e detalhístico, preto e personagens, o jogo todo. percepção. Você cria os tijolos. Cria a casa usando-os. branco, enfim, sem graça. O lado direito jogue-o na sua mente, passe 2. Quando você cria usando ferramentas já utilizadas por é o artístico, surreal, Storyboard do jogo “Super Mario Bross”. pelas missões, escute a música de outros. Nesse caso, você tem os tijolos e monta a casa colorido, universal, fundo, derrote os inimigos. Você usando-os. Estas são as coisas na qual você se baseia para criativo. Quando dormimos, entorpecemos o lado irá arquitetar o seu jogo (em sua mente primeiro), livre do obter o produto final já existente. esquerdo, e o direito fica livre para agir. Por isso muitas velho tipo de pensamento. Ao pensar em seu jogo comece idéias nos vêm durante o sono e por isso que temos a fazer o storyboard. Tome cuidado, idéias construídas O segundo processo, “menos” criativo, é o mais comum. sonhos muito bizarros, desvinculados de tempo, lógica nesse estado, geralmente são apagadas facilmente, pelo Isto porque muito já foi inventado, tornando cada vez mais e espaço. Ser criativo significa ver caminhos diferentes, fato de o lado esquerdo (memória) estar entorpecido. difícil o processo. ou seja, fora da lógica. Logo, usar mais o lado direito Então, registre todas as idéias rapidamente. do cérebro. Nos tempos atuais, a falta de criatividade tem feito É capaz de você não criar um enredo como o de com que os Game designers dêem mais ênfase aos Certo. Já chegamos a um ponto. Mas e agora? Como “Final Fantasy”, mas certamente você criará algo bem aspectos visuais do jogo, do que os da diversão, fazemos para entorpecer o lado esquerdo e aplicar o melhor do que no estado normal de raciocínio. Com estratégia e originalidade. Sempre há lançamentos de potencial do direito na criação de jogos? a prática, esse potencial criativo apenas cresce e se jogos anteriores, com apelo visual cada vez maior. Os fortalece. Não deixe essa oportunidade passar, Deixe a game designer se sentem mais seguros apostando em Há inúmeras maneiras e ferramentas. Uma delas é muito imaginação rolar, Boa Criação! personagens já de sucesso do que arriscar novos. Desde os importante, era a usada por Mozart, Aristóteles, Walt primórdios dos jogos essa aposta acontece, assim como disney, e é chamada de Sinestesia. Sinestesia consiste Para maiores informações, se informe sobre o livro “Pong”, que foi cópia, e depois foi copiado. em interpretar sensações com outros sentidos, como por “Desenhando com o lado direito do cérebro”: exemplo, comer uma música, escutar uma pintura. É a As grandes inovações dependem do meio em que se vive. tentativa de interpretar estímulos usando outros sentidos Fabrício Kolk Carvalho A maior explosão criativa que se teve foi em 1958 com que não são destinados a essa interpretação. Assim como Site: http://btuliob.vilabol.uol.com.br http://www.jogospro.com.br NOVEMBRO 2004 JOGOSPRO e-magazine