mar 042009
 

Blz?

Se você não conhece o GDJCE.com está na hora de conhecer, essas últimas semanas o site tem publicado diversos artigos do antigo site ArsLudica, quem conheceu as comunidades brasileiras de gamedev por volta de 2001 a 2002 deve lembrar dele. Foi criado quando o primeiro PDJ, o qual era mantido pelo seu fundador o Geovanni da (infomaster, senão me engano) teve alguns problemas com a sustentabilidade do site e foi forçado a fecha-lo, assim diversos membros ativos da comunidade se uniram e criaram o ArsLudica, o qual foi durante muito tempo uma ótima referencia sobre o assunto aqui no brasil, chegando a fazer parcerias importantes como por exemplo com o NeHe e com GameTutorials, onde tiveram diversos artigos traduzidos para nosso idioma.

Pois bem, a novidade agora é que o GDJCE.com que apesar de se focar em encontros locais(presenciais) está meio que ampliando seu papel e está publicando os artigos que foram esquecidos por quase 04 anos na internet. Inclusive diversos dos artigos publicados são de “figuras” conhecidas das comunidades hoje.

Só para citar olha os artigos que merecem destaque:

out 152008
 

Blz!

Depois de muito tempo sem postar, resolvi colocar aqui uma dica ótima para quem usa o mencoder, um codificador de vídeos para linux (não me recordo se tem versão para windows), eu usei muito ele, tem algum tempo atrás para codificar videos de filmagens, e hoje acabei me deparando com um problema:

Como enviar vídeos de 40mb para o youtube de forma rápida…“, o tamanho em si não era problema par ao youtube e sim para minha conexão (1024/384kbps) o que tornava o envio algo demorado e chato.

Resolvi então procurar na net algum tutorial, já que não lembrava de cabeça os comandos e perdi o script que havia montado para meu uso. Acontece que acabei achando nos primeiros resultados do google um link para um fórum, onde por coincidência um amigo(do mundo dos Games e Linux – CidoLoco) estava recomendando um tutorial.

Fica aqui a dica de leitura obrigatória para aqueles que estão fazendo filmagens digitais e querem disponibiliza-las no youtube.

Para os apressados, um resumo de como estou fazendo:

mencoder DSCF3861.AVI -ovc xvid -xvidencopts fixed_quant=5
 -oac mp3lame -lameopts br=128 -srate 8000 -o 6edjc_video_03.avi

Desta forma, tive uma grande diminuição do arquivo, o que facilitou e muito o upload, veja:

  • De 33M DSCF3852.AVI para 3,2M 6edjc_video_01.avi
  • De 42M DSCF3860.AVI para 2,1M 6edjc_video_02.avi
  • De 5,1M DSCF3861.AVI para 435K 6edjc_video_03.avi

Ou seja, uma super compressão que resultou em uploads extremamente rápidos e de boa qualidade 🙂

Referências:

http://www.biglinux.com.br/klaos/mencoder.pdf

abr 192008
 
Conforme foi anunciado anteriormente[1], realizamos a migração do projeto PJMOO do CódigoLivre[2] para o SourceForge[3], com isso estamos disponibilizando as edições da primeira revista virtual brasileira sobre desenvolvimento de jogos, a “JogosPro e-Magazine” em nosso novo endereço[4]:

———————————————-

Referência
[1]http://davidferreira-fz.blogspot.com/2008/04/mudanca-de-wiki.html
[2]http://www.codigolivre.org.br
[3]http://www.sourceforge.net
[4]http://pjmoo.wiki.sourceforge.net/eBook_JogosPro

jan 272008
 

Blz!
Estou começando a lançar os vídeos tutoriais[1] do F2IBuilder[2], o gerador de fontes bitmap, as quais são usadas principalmente em jogos e software multimídias, e estou planejando uma série de vídeos tutoriais ensinando a usar o software. Lembrando que o F2IBuilder é Software Livre, foi desenvolvido em Java e pode ser executando em diversas plataformas principalmente em GNU/Linux e MS-Windows. Agradeço sua ajuda na divulgação 😉

Veja o primeiro vídeo tutorial abaixo:

T+!
Vida Longa e Próspera!

———————————————-

Referência
[1]http://br.youtube.com/watch?v=CdV04IzJlik
[2]http://f2ibuilder.googlecode.com
[3]http://davidferreira-fz.blogspot.com/search/label/F2IBuilder

jun 252007
 
Como mencionei anteriormente, foi criado um grupo de estudos sobre desenvolvimento de jogos na UFC, o DoG[1], e mensagens indo e vindo, foi sugerido pelo Felipe Ribeiro (Moderador do Grupo), que as pessoas participantes com ou sem experiência tentassem desenvolver um jogo/demo para que pudéssemos trocar idéias sobre implementação, dúvidas, curiosidades e dificuldades que surgissem no decorrer do desenvolvimento.
Para tentar encontrar pontos comuns para troca de experiência foi proposto dois temas, sendo eles o desenvolvimento de um “Pong” ou de um “Tetris”, e logo em seguida tivemos o primeiro post com o primeiro jogo, era o Pong do Charles[2], o qual de fato acabou servindo de incentivo para mim, e me levou a pensar:

Poderia desenvolver um, serviria tanto pra validar as últimas modificações no GBF[3], quanto a aprender algumas coisas legais e ainda ter a oportunidade de conversar de igual pra igual com as pessoas(já que também era uma experiência nova para mim).

E assim, motivado pela empolgação, desafio e pelo bate-papo, fui levado a desenvolver meu primeiro pong, meio tardiamente, mas fui, e realmente é como falo nas minhas palestras, é uma experiência legal, divertida, simples e viciante, pensei em adicionar mil coisas nele, como sistema de partículas e afins, mas resolvi deixa-lo o mais simples e fiel ao tradicional possível para que quem sabe sirva de exemplo para implementações de quem gostaria de começar a programar jogos.

Experiência

Apesar de já ter desenvolvido o framework GBF[3], e outros demos, não havia feito coisas de concepção simples e divertidas como o pong, e tive que pensar um pouco em como implementar um pong, algumas dúvidas que tive antes e durante o desenvolvimento foram:
  • Como fazer a bolinha rebater na tela;
  • Como fazer com que o CPU jogasse sem acertar todas e que não fosse totalmente burro;
  • Como delimitar a duração do jogo;

Respondendo as essas perguntas comecei então a procurar minhas saídas:

“Como fazer a bolinha rebater na tela”

Fazem anos que não via física, e cheguei a pensar em algo complexo como mudar a direção da bolinha por meio de ângulos, seno, cosseno e etc. Acabei procurando um livro de física para lembrar conceitos relacionados a mecânica, como movimentos uniformes, e etc, pois não lembrava mais nada disso, e nem sabia ao certo se isso resolveria, o fato é que o livro que recorri não era muito explicativo, na verdade era apenas exercícios (esses livros de hoje, parecem não serem feitos para que as pessoas aprendam sozinhas), comecei a ler, e reler, porém não consegui ver de fato a aplicação para o meu caso especifico, o qual seria apenas fazer a bolinha se desviar ou voltar. Sendo assim comecei a procurar pelo Google na esperança de achar alguns sources e acabei foi de fato achando um tutorial/apostila do Silveira Neto[7] (hehehe logo do Silveira, tão próximo e tão longe, ele também é daqui de Fortaleza, tive que ir na Internet para achar o que precisava), e lá tinha justamente o exemplo de uma bola sendo rebatida, aproveitei isso e adaptei para o pong. O fato é que a solução era super simples e eu procurando complicações físicas, bastava no caso inverter os valores de x e y para o que a bolinha voltasse na direção oposta exemplo:

if (bola.y>480){
velocidade.y = – velocidade.y;
}

bola.y+=velocidade.y;

Isso faz com que se a bolinha bater no fundo da tela, volte. Simples não ? pra mudar a direção de X, basta fazer a mesma operação com o eixo X.

“Como fazer com que o CPU jogasse sem acertar todas e que não fosse totalmente burro”

Minhas primeiras idéias foi tentar fazer algo randomico que, quando a bolinha passase do meio da “quadra”, fosse feito um random para determinar se o cpu iria ou não pegar a bola, porém isso pareceu que ia ser baseado muito na sorte e que não ficaria muito natural, então antes de testar, resolvi abandonar a idéia.
Acabei lembrando do PacZero[4], e que eu havia implementado um algoritmo de colisão circular para determinar quando os fantasmas podia “ver” o pacman, e resolvi aplicar o mesmo principio, sendo assim, resolvi criar uma circulo de visão para o cpu, assim, quando a bolinha entrasse em seu raio de visão ele moveria-se para rebate-la. Porém essa alternativa acabou mostrando que com um circulo de visão grande demais, o cpu não erra, e um pequeno demais ele erra muito, então por meio da tentativa, erro e estimativa defini que seu circulo de visão teria um raio de _VALOR_ pixel, e que conforme o cpu ganhe as partidas maior vai ficando seu circulo de visão para assim dificultar a vida do jogador, porém este ponto não ficou muito natural, tem certos macetes (jogadas) que fazem com que o cpu perca.
Esse é um ponto que está muito aberto as melhorias, visto que ficou altamente simplório o pseudo esquema de I.A. do CPU, pontos que eu talvez mude em versões futuras:
  • Fazer com que o cpu se “distraia”, ou que “fique confiante demais” e só vá atrás da bola na última hora, o que causaria o efeito de incerteza se ele acertaria ou não
  • Fazer com que ele decida onde bater na bola, use as três partes da raquete para provocar efeitos diferentes na bola;
  • Fazer com que a visão aumente quando ele perder uma partida, pois assim na será um desafio maior para o jogador;

“Como delimitar a duração do jogo”

Pensando um pouco em como determinar as partidas, acabei me baseando na experiência do projeto de jogo “Pancada”[5](O qual ainda não concluí), que me lembrou do principio de rounds, porém no pancada esses intervalos de partidas são baseados no tempo, e para o FZPong pensei em utilizar o principio de tempo para determinar a duração de cada set, porém acabei chegando a conclusão que seria mais interessante que fosse espelhado em regras como jogos de volley/tenis, assim determinei que para vencer um set, um jogador precisa de ter 5 pontos de vantagem sobre o outro, e para poder vencer a partida, é necessário que um jogador tenha 2 sets de vantagem sobre o outro.

É algo que pode parecerer estranho, a definição desses valores, visto que 5 pontos podem ora parecer muito, mas se levarmos em consideração a Inteligência do “CPU” é algo que fica plausível visto que a velocidade da bola está programada para ir aumentado gradativamente e assim oferecer um desafio mais equilibrado para o jogador.

FeedBack

Esse é um aspecto muito importante, principalmente quando estamos desenvolvendo nos primeiros jogos, protótipos ou quando queremos repassar o conhecimento para as pessoas, por meio deles podemos fugir um pouco da realidade “técnica” e ver quais as reações de jogadores ou de outros desenvolvedores.

Por meio de um desses feedback do Daniel R. Matos do grupo DoG, foi que caiu a ficha de como a figura(sprite) que eu estava usando para representar a bola no jogo estava fora de contexto, isso se deve pq quando iniciei pensei em recriar como o pong fosse um jogo de futebol, porém com meus “grandes dons artísticos”, acabei extrapolando e indo para outra idéia bem oposta, algo que fosse meio que técnico e meio rudimentar, tanto é que podemos observar que as partes da arena do jogo (parte de cima e de baixo) são feitas de pedra, e o fundo do jogo é algo meio confuso/abstrato porém lembra como se fosse um possível gramado e os dois bastões(jogadores/raquetes) são metálicos, e realmente a bola tradicional de futebol ficava destoando o contexto, então depois de receber esse apontamento, corri para o Google a procura de um tutorial(Esfera 3D)[6] que ensinasse como fazer esferas no gimp.

Isso resultou na nova versão do jogo 1.1 só por causa da bola do jogo que agora é uma “esfera metálica” ou similar, bem assim espero eu.
Espero que esse relato possa ajudar ou clarear um pouco o processo de criação do FZPong e que combinado com conversas e o source do jogo possam ajudar no processo de criação e aquisição de conhecimentos relacionados aos jogos.

E por fim temos o download do FZPong[8]:

Código Fonte: FZPong.1.1.src.zip
Versão Linux: FZPong.1.1.bin.linux.tar.gz
Versão MS-Windows e Linux: FZPong.1.1.bin.all.zip

T+!
Vida Longa e Próspera!

———————————————-

Referência

[1] Grupo DoG – http://groups.google.com/group/dog_/
[2] Pong do Charles – http://www.lia.ufc.br/~rockyspirit/pong.tar.bz2
[3] GBF – http://pjmoo.sourceforge.net/wiki/index.php/GBF
[4] PacZero – http://pjmoo.sourceforge.net/wiki/index.php/PacZero
[5] Pancada – http://pjmoo.sourceforge.net/wiki/index.php/Pancada
[6] Tutorial Esfera 3D – http://www.ogimp.com.br/modules/smartsection/item.php?itemid=7
[7] Blog do Silveira – http://www.eupodiatamatando.com
[8] PJMOO Downloads – http://sourceforge.net/project/showfiles.php?group_id=198186

maio 102007
 

Blz!

Foi lançada no final de Abril a quarta edição em caracter especial da revista eletronica PDJZine[1], a qual tem como foco o desenvolvimento de jogos.
Nesta edição especial temos um materia falando sobre o Concurso GPC2006 (Game PDJ Contest 2006)[2], o qual foram avaliados diversos jogos/demos da comunidade de diversos níveis divididos em algumas categorias (web, 2d, 3d, mobile), e tive o prazer e honra de voltar mais uma vez a ajudar a comunidade do PDJ. Só pra conhecimento:
Fui durante muito tempo (de 2000 a 2004) ligado, diretamente as comunidades online(PDJ 2000, ArsLudica, PDJ “o retorno” e Unidev), porém foi no ArsLúdica que alguns meses depois passou a ser o PDJ “o retorno”, que pude de fato desempenhar papeis mais participativos e gerenciais, inclusive fui um dos principais administrares, articuladores e desenvolvedores para manter e o sistema online de fórum e portal, além de desenvolver diversas melhores e integrações entre os dois.

Voltando ao assunto, pude nesta segunda edição do concurso, participar junto com amigos de longa data(do inicio das comunidades brasileiras de desenvolvimento de jogos), como jurado e avaliar os jogos na categoria 2D.

Foi uma experiencia muito boa, e tinha realmente alguns demos muito bons, quase prontos para se tornarem jogos de fato, porém faltava detalhes como inimigos, efeitos sonoros, controle de menus e etc, coisas que “contornam” os jogos para os usuários(jogadores) ou que oferecem uma maior imersão na fantasia do jogo, mas que pelo nível dos demos seriam facilmente implementadas.

Espero poder participar do próximo contest ou como jurado ou como competidor 🙂
E com relação a PDJ fiquem ligados, que parece que vem muitas novidades!

[1]PDJZine – http://www.pdj.com.br/pdjzine/
[2]GPC 2006 – http://www.pdj.com.br/forum/viewtopic.php?t=6347