.:: Menu Rápido ::.

Linux | C/C++ | Downloads | SDL | [×]

terça-feira, 5 de maio de 2009

Apresentação da SDL na aula de P.A.

Andei trabalhando muito estes dias... Oficina sobre edição de mapas 2D e palestra sobre SDL no 1º Encontro de Desenvolvedores de Jogos do Tocantins e agora uma apresentação sobre desenvolvimento de jogos em SDL... ou desenvolvimento do jogo come poto em SDL, tanto faz ;)

» Post Completo...

  • cod_sdl.zip - Um exemplo de código para iniciantes. Este é o código exemplo que vem com o Dev-Cpp e que é mostrado quando se cria um novo projeto SDL. Também pode ser encontrado em: SDL - A Biblioteca dos Jogos 2D

  • cod_collide.zip - Um exemplo de código que mostra como tratar colisão. Ele quase se encaixou no trabalho do jogo come ponto. Também pode ser encontrado em: SDL_Collide - Colisão 2D para jogos

  • cod_ttf.zip - Para imprimir o placar de recordes ou qualquer tipo de texto em SDL existem duas formas: Você pode carregar uma imagem com todas as letras e números que irá utilizar... e se virar para imprimí-los ou utilizar a SDL_Ttf e carregar diretamente de um formato verdadeiro de texto. Também pode ser encontrado em: Imprimindo texto com SDL_Ttf

  • cod_sdl.zip - Para tirar todas as dúvidas a respeito da estrutura SDL_Surface é recomendado ler o post: SDL_Surface - Introdução detalhada

  • velha.zip - Jogos de tabuleiro geralmente são mais fáceis de se implementar, pois eles geralmente são mais estáticos (sem movimento ou animação). Mas este neste código as peças possuem animação em seu surgimento. Experimente criar uma IA para este jogo... será um desafio interessante (dica: use o algorítimo Minimax). Também disponível em: [Mini-curso] Programação de jogos 2D com SDL

  • cod_fps.zip - É o exemplo onde uma bolinha fica quicando e se movendo de um lado para o outro (movimento em função do tempo). Disponível em: Controle de tempo e Frame Rate

  • cod_tmx.zip - Todos os exemplos valem muito a pena conferir... mas se você está procurando por algo mais profissional você não pode deixar de ver este. Ele mostra como carregar um mapa em formato TMX e também como construí-lo em seu jogo. Disponível em: Carregando mapas 2D no formato TMX

.:: Códigos de Exemplo ::.
Estes códigos eu fiz especialmente para a apresentação ou resgatei de meus back-ups. O Mário Clone e o relevoGL são do tempo em que eu conheci a SDL.
  • drMarioClone.zip - Exemplo perfeito de como NÃO IMPLEMENTAR um jogo. Mapa da fase totalmente desprovido de sistema de tiles... no Lugar apenas uma imagem gigantesca ! Sistema de Sprite totalmente ineficiente... vários estados repetidos para animar o personagem. Colisão quase nula... um único pixel na base do personagem testando colisão na imagem máscara. A força da gravidade é a única que funciona ! Isso se você não tentar pular 2x... quando o personagem atinge a altura máxima. Eu deveria esconder este código... mas gosto dele... é muito engraçado !!!

  • superSmiley.zip - Já estou preparando a versão 2.0 do Mario Clone... Mapa de tiles editado no Tiled, sprites que funcionam, colisão por retângulos, coleta de moedas... tudo que precisar pra se tornar exemplo de COMO IMPLEMENTAR. Mandei o editor junto... abra o arquivo world.tmx pelo editor e veja toda a fase do Super Mário.

  • relevoGL.zip - Um exemplo curioso usando SDL e OpenGL onde uma esfera se move sobre uma superfície irregular formada por várias esferas. Quando se usa SDL o uso da lib GLUT é desnecessário, mas acabei usando uma função para gerar esfera. Logo tem que linkar com GLUT tbm.

  • drLib.zip - Classes como Timer, Frame, Sprite e Grid se encontram aqui. Além de encontrar o código você encontrará também a documentação destas classes no diretório html.

  • fundoDoMar.zip - Uma grande coleção de exemplos... principalmente sobre colisão de retângulos e colisão de círculos. Deve ser estudado minunciosamente. No diretório lib encontram-se vária classes que podem ser aproveitados em outros jogos. Vector2D.hpp é um desses arquivos que possuem classes milagrosas. Foi desenvolvida por ViniGodoy... que aliás tem um ótimo blog sobre SDL e OpenGL.

.:: Jogos de Exemplo ::.

.:: Conclusão ::.
Desenvolver jogos em SDL é muito fácil... mas você deve ter reparado que desenvolver jogos não é tão fácil assim. Mesmo os jogos mais simples podem exigir o domínio de diversas técnicas. Se você estiver pensando em desenvolver o seu primeiro jogo começe de vagar. Os jogos de tabuleiro geralmente são mais simples... não tem movimento, animação ou colisão... é bem mais fácil que outros como um jogo de plataforma ou de naves.

terça-feira, 31 de março de 2009

Construindo um MMORPG - Parte 3

Eis a parte desta série de tutoriais que todos esperavam. A hora de colocar as mãos na massa. Liberte toda sua criatividade desenhando mapas e escrevendo aventuras para seu jogo. Resgate agora mesmo aqueles rabiscos feitos em seus antigos cadernos de escola e comece a dar vida a todos eles !!!

» Post Completo...

sexta-feira, 20 de fevereiro de 2009

Construindo um MMORPG - Parte 2

É com grande satisfação que escrevo a continuação deste tutorial. Demorou pra sair, mas saiu !
E só relembrando, iremos montar nosso MMORPG 2D utilizando o servidor eAthena e o cliente TMW.
Construindo um MMORPG - Parte 1 foi "um tanto" superficial, mas agora o bicho vai pegar.
Diria que instalar o servidor eAthena e configurá-lo a gosto é o bicho da goiaba. Mas o basicão tá garantido.

» Post Completo...

git clone git://gitorious.org/tmw-eathena/mainline.git eathena
cd eathena
make

Caso você esteja tendo problemas com a clonagem, tente um outro link nesta lista de repositórios Git.
Este inda não são os dados do servidor TMW, mas apenas os arquivos de um novo servidor eAthena e seu código fonte.
Após a compilação você deverá ter 3 novos binários: char-server, login-server e map-server.

» Segundo passo: Baixe os dados do TMWServer do repositório Git para o diretório eathena-data/:

cd ..
git clone git://gitorious.org/tmw-eathena-data/mainline.git eathena-data
cd eathena-data


» Terceiro passo: Compile o arquivo eathena-monitor.c que se encontra com os dados do TMWServer (diretório eathena-data/) e copie os binários do diretório eathena/ para eathena-data/.

gcc -o eathena-monitor eathena-monitor.c
cp -iv ../eathena/*-server .


» Quarto passo: Crie um diretório link simbólico chamado tmwserver/ dentro de seu $HOME que aponte para o diretório onde se encontram os dados do TMWServer (nosso diretório eathena-data/).

cd $HOME
ln -s /caminho_completo_ate_o_diretorio/eathena-data/ tmwserver

Este passo é opcional caso você mova os dados do TMWServer para o seu $HOME nomeado como tmwserver.

» Configuração: Após seguir todos os passos precisamos fazer algumas configurações em eAthena-data/ para que a "instalação" esteja completa.
Primeiro crie um diretório onde serão armazenados os arquivos de log. mkdir log resolve o problema (dentro do diretório eathena-data/).
Em eathena-data/conf você encontrará vários arquivos com a extensão .example. Remova esta extensão do nome de todos os arquivos. Agora é só configurá-los.

» conf/char_local.conf:

// Server name, no more than 19 characters
server_name: MMORPG REVOLUTION

// Login Server IP
login_ip:127.0.0.1

// Character Server IP
char_ip:127.0.0.1


» conf/map_local.conf:

// Character Server IP
char_ip:127.0.0.1

// Map Server IP
map_ip:127.0.0.1


» conf/login_local.conf:

update_host: http://updates.themanaworld.org/

Aqui não faremos mudanças por enquanto. Explico que os dados de update serão conferidos diretamente no servidor do TMW, mesmo com nosso servidor rodando no localhost (127.0.0.1).

» save/account.txt:

0 s1 p1 2009-02-19 23:15:42.856 S 699 0 a@a.com - 0 127.0.0.1 - 0

Este usuário deve ser adicionado a esta lista. Você pode fazer isso copiando as informações acima ou substituindo account.txt por account.txt.example.
Você poderia copiar a linha acima e colar no arquivo save/account.txt. Mas não dá pra copiar do blog. O problema é que os tab's se perdem ao serem exibidos no blog !
Mas se você copiar esta mesma linha do arquivo account.txt.example e colar em account.txt, garanto que funciona.

.:: Servidor eAthena em ação ::.
Para auxiliar nas tarefas de execução do servidor e também em seu monitoramento, temos o script eathena.sh e programa eathena-monitor. O programa eathena-monitor lança todos os servidores e os reinicia quando falham. O script eathena.sh é utilizado para iniciar/finalizar o programa eathena-monitor.
Para iniciar/reiniciar/finalizar o servidor execute o script eathena.sh com os parâmetro start/restart/stop:

./eathena.sh start
./eathena.sh restart
./eathena.sh stop

Um exemplo de execução do servidor eAthena (sem falhas):

diogorbg@pc:~/tmwserver$ ./eathena.sh start
Starting eathena monitor...
Starting:
* interval: 5 s
* workdir: /home/diogorbg/tmwserver
* login_server: /home/diogorbg/tmwserver/login-server
* map_server: /home/diogorbg/tmwserver/map-server
* char_server: /home/diogorbg/tmwserver/char-server

Agora conecte-se com o seu cliente TMW e crie sua primeira conta para testar se tudo está funcionando bem.
Esta é a primeira tela do jogo. Você tem a opção de se registar ou logar. Use o ip 127.0.0.1 quando pretender se conectar ao servidor local que configuramos e server.themanaworld.org quando pretender se conectar ao servidor oficial.

MMORPG REVOLUTION é o nome do nosso servidor... como configuramos em conf/char_local.conf.

Como nós ainda não temos nosso próprio endereço de updates deixamos por padrão o repositório oficial.
Se você reparar, em versões anteriores à 0.0.26, esta tela era a primeira... o que não nos permitia escolher o servidor de update no próprio jogo.

Escolha do Char (personagem). No servidor oficial me procure por "Heroi br".

E aí está. A cópia do The Mana World rodando em nossa máquina.
Fique atento nos comentários... é uma dica de quest do jogo TMW.

.:: Tornando-se um GM ::.
Dê permissões de GM para sua conta editando o arquivo conf/gm_account.txt:

// <account ID> <level>
2000000 99

2000000 é o id da sua conta. Para ter certeza de seu id verifique no arquivo account.txt.
99 é o seu nível de permissão. 99 é o maior nível e lhe permite fazer de tudo.
Veja o exemplo acima. Estou em uma caverna cheia de cobras perigosíssimas, do tipo que atacam se exitar, e ainda por cima, meu personagem se encontra apenas no nível 6 e muito mal equipado por sinal. Uma mordida bastaria, mas porque eu ainda não morri ? É porque eu estou invisível. Se você for GM, ficar invisível é fácil... é só digitar o comando @hide.
Para ter mais detalhes sobre comandos especiais de GM's leia a documentação que veio junto com o código do eAthena (arquivo eathena/doc/readme.html).

.:: Solucionando problemas ::.
Primeiro verifique se você seguiu todos os passos corretamente. Se os IP's e portas estão corretos.
» Rode o servidor e verifique se o usuário "s1" do servidor se encontra no arquivo save/account.txt. Crie um usuário pelo cliente TMW e verifique se ele também se encontra neste arquivo.
Não se esqueça que você deve ter um diretório do tipo link simbólico em seu $HOME nomeado como tmwserver que aponte para o diretório onde se encontram os dados do TMWServer (diretório eathena-data). O meu $HOME é o diretório /home/diogorbg.

.:: Mundo Tux ::.
Por falta de um tema mais apropriado... resolvi criar meu MMORPG com o nome de Mundo Tux.
Um mundo onde todos os NPC's são pinguins. Tudo não passa de um exemplo de teste, mas até que ficou legal.
Retirando os pinguis, tudo é do projeto TMW ou de algum tópico em discussão no fórum oficial. Eu só tive que juntar tudo. Montei um mapa, configurei o servidor, criei alguns scripts NPC's e criei pacotes de atualização.
O tutorial está ficando extenso... mas ainda cabe instruções de como configurar o Mundo Tux.

» Primeiro passo: Baixe os dois arquivos necessários para executar o mundo tux: eathena-tux.tar.gz e updates.tar.gz. Para ficar mais organizado, extraia os arquivos no mesmo diretório que trabalhamos o eathena e o eathena-data.

» Segundo passo: Como o servidor já foi previamente configurado para rodar no localhost, você só precisa se preocupar em criar diretórios do tipo link simbólico:

cd $HOME
ln -s /caminho_completo_ate_o_diretorio/eathena-tux tmwserver
ln -s /caminho_completo_ate_o_diretorio/updates /home/updates

Para criar um link simbólico em /home é preciso de privilégios de root. Ao invés disso, você pode mudar o endereço de update no arquivo conf/login_local.conf:

update_host: file:///home/updates


Execute o servidor normalmente (./eathena.sh start) e em seguida conecte-se pelo cliente TMW usando o IP local (127.0.0.1).
Para logar com o char Hercules lvl 98 use o login:diogorbg e a senha:asdf.
Você verá que a tela de updates é bem rápida... pois o jogo vai copiar arquivos locais para o diretório $HOME/.tmw/updates/home/updates.
Repare que são vários arquivos compactados e que todos estão descritos no arquivo resources2.txt. Para adicionar um arquivo a esta lista use o programa adler32, cujo código fonte foi enviado em updates.tar.gz (para mais detalhes How to release an update). Exemplo:

adler32 new-update.zip >> resources2.txt


.:: Link's ::.
» Servidor eAthena (wikipédia)
» The Mana World (site oficial)
» Git (wikipédia)
» Configurando o servidor eAthena

--
O melhor eu deixei pro próximo tutorial.
Nele vamos criar script's de NPC's, mapas e modificação de algumas configurações.

sexta-feira, 23 de janeiro de 2009

Construindo um MMORPG - Parte 1

Você estava jogando (maravilhado) um destes Multi Massive Online Role-Playing Game... MMORPG's da vida e de repente parou para se perguntar: Como será que eles funcionam ?! Como será que se faz um ?!
Se você já se fez estas perguntas provavelmente morre de vontade de fazer o seu MMORPG's... e como você já tem muita experiência em jogos deste tipo estava precisando de uma mãozinha no desenvolvimento ! Pois você veio ao lugar certo !!!

» Post Completo...

sounds-3795.zip 890b723c
ambient-3795.zip 2942034a
tiles-3961.zip 5d9b6141
update-3998-4056.zip bc599f23
sprites-4235.zip 7d8a966c
update-4235-4319.zip 52b261c0
update-4319-4411.zip 7f87b88
particles-4412-4604.zip df32f8ed
update-4412-4604.zip d2078869
update-4604-4625.zip f7e1230e
update-4665-4696.zip f96a6c39
update-4732-4789.zip deec551
update-4789-4802.zip 8253631
update-4846-4957.zip e06f0358
update-4957-4963.zip cbc40a88
update-92f5898-5e3b3ca.zip c5a98a9e
database-5e3b3ca.zip f1380cc0
update-5e3b3ca..03da427.zip 218a7faf
update-03da427..54e6da8.zip 3ff4fcfb
items-54e6da8.zip e0512e95
update-54e6da8..b5a9d98.zip 8f561d9a
update-b5a9d98..589d43c.zip 2219df21
update-589d43c..90f54d3.zip 8a53af60
update-90f54d3..a915928.zip c6b49f79
update-a915928..3108eb8.zip 2a7577a9
update-3108eb8..82f97c6.zip 91a8f8f7

Para extrair use o comando: unzip -ao sounds-3795.zip. Repita para todos os arquivos e na mesma ordem em que se encontram no arquivo resources2.txt.
O cliente TMW não precisa dos arquivos extraídos, ele pode fazer isto virtualmente utilizando a lib libcurl PhysicsFS. Mas ele também irá procurar por arquivos extraídos, caso não os encontre nos arquivos compactados.

Experimente baixar e jogar The Mana World agora mesmo, pois no próximo artigo precisaremos dele.
Para o próximo artigo precisaremos da versão 0.0.26, mas se você puder instalar a versão 0.0.27 melhor ainda ! Pois a versão 0.0.27 possui efeitos especiais extras.

.:: Link's ::.
» Como funciona a criação de videogames
» Cave Story (Doukutsu Monogatari)

quinta-feira, 22 de janeiro de 2009

[off-topic] Meme Aleatoriedades

Inicio este ano com o Meme Aleatoriedades. O qual Vinícius Godoy me intimou a participar.
Minha ultima postagem foi em dezembro e antes desta foi em julho (seis meses atrás). Mas este ano pretendo aquecer as coisas por aqui. Inclusive já iniciei um trabalho sobre MMORPG's.

» Post Completo...

Nada mal !!!

2. Se tem um filme que idolatro é o Matrix. Gosto de todos eles. Principalmente o terceiro que terminou de forma incrível.

Último diálogo entre o Oráculo e o Arquiteto:

ARQUITETO: Você arriscou demais.
ORÁCULO: A mudança sempre é.
ARQUITETO: Por quanto tempo acha que essa paz vai durar?
ORÁCULO: O quanto for possível. ... E quanto aos outros?
ARQUITETO: Que outros?
ORÁCULO: Os que quiserem sair.
ARQUITETO: Obviamente serão libertados.
ORÁCULO: Tenho sua palavra?
ARQUITETO: O que acha que eu sou? Humano?

Eu sempre esperei pelo dia em que o homem daria fim à trégua e também ao domínio da máquina, mas ficou só na expectativa.

3. Eu tenho uma importante teoria que diz: A bola é redonda.
Não estou brincando... eu inclusive posso provar isto !
É que minhas outras habilidades incluem sinuca. E quando estou ensinando alguém a jogar eu logo digo: A bola é redonda.
Ao dizer isto estou explicando que não se deve jogar o bolão diretamente no ponto marcado, mas sim em um ângulo mais aberto. O Bolão é redondo e possui raio. O que é diferente de jogar com uma partícula.

Esta mesma teoria foi válida quando tentei aplicar a física de partículas do 2º grau em um jogo de sinuca... não deu certo. Esferas são bem diferentes de partículas.

4. Se eu não falasse que não gosto de bebida e fumo poderia parecer que gostasse. Sendo que na verdade eu detesto.
Na boa... sala com ar condicionado (não ventilada) e cigarro não combinam.
Instalando Cancer !!!

5. Se eu tenho um vício, são os jogos. Mas não é nada grave... é sadio e moderado. Nunca briguei nem apostei nada em jogos. Gosto deles pelo simples prazer do desafio.
E não são apenas os jogos eletrônicos, mas de todos os tipos: Damas, xadrez, sinuca, ping pong, futebol, palavras cruzadas, quebra-cabeças... qualquer coisa que não envolva apenas sorte.
War é jogado com dados, mas a sorte só ajuda jogadores experientes.

6. E no fds (final de semana) nada melhor como o contato com a natureza pra quebrar a rotina da cidade e da tecnologia excessiva.
Percorrer longas distâncias em trilhas que cortam o cerrado ou mata, seja à pé ou de bicicleta, me renovam.
Em Palmas, um lugar que sempre gostei de visitar foi o parque Cesamar. Ele possui uma pista de 2km em torno de um lago que é ótimo para caminhar. E você ainda topa com animais por todo o caminho... só não é bom topar com cobras !

Para continuar a Meme eu convido Renê, Rômulo e Erick.
A lista poderia ser maior... talvez eu a aumente depois !

--
Esperem pelo próximo post... é sobre MMORPG !