É 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...
.:: Menu Rápido ::.
Linux | C/C++ | Downloads | SDL | [×]A melhor maneira de se descobrir uma lib gratuita é nos repositórios do Ubuntu: $apt-cache search lib <palavra_chave> dev
Ou pelo devpaks.org, mas o repositório tem me ajudado mais !!!
- Script's GIMP - Python-Fu !!!
- Dicas Web
- Vídeo Compiz Fusion (Desktop 3D)
- Compilando com gcc e Makefile
- Que tal mudar para Ubuntu ?!
- SDL - A Biblioteca dos Jogos 2D
- Analisador léxico de arquivos script
- Simpatizando com a Libxml2
- AsciiGen - Tabela ASCII em C
- Conexão com API C do MySQL
- Compilando com gcc e Makefile
- DR Tetris 0.3 - Tetris no estilo tradicional !
- DR Quebra-Cabeça disponível para download !!!
- Freeggs - Liberdade aos ovos \o/
Se você quer aprender a programar jogos... SDL !!!
- Carregando mapas 2D no formato TMX
- Controle de tempo e Frame Rate
- SDL em Processamento de Imagens
- SDL_Surface - Introdução detalhada
- Imprimindo texto com SDL_Ttf
- SDL_Collide - Colisão 2D para jogos
- Tocando música e sons com SDL_mixer
- Gerando e carregando mapas 2D em jogos
- SDL - A Biblioteca dos Jogos 2D
sexta-feira, 20 de fevereiro de 2009
Construindo um MMORPG - Parte 2
Postado por
Diogo_RBG
16
comentários
Tópicos: jogos
sexta-feira, 23 de janeiro de 2009
Construindo um MMORPG - Parte 1
sounds-3795.zip 890b723c
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....:: Caindo na real ::.
Não encare como um sermão... mas a realidade do desenvolvimento de jogos não é um mundo virtual onde tudo acontece num passe de mágica. Envolve muito estudo e trabalho duro. Mas se você for dedicado com certeza chegará lá. (leitura recomentada: Como funciona a criação de videogames)
Mas voltando ao assunto anterior... você bolou novas idéias, mais efeitos especiais e mais emoção (mesmo pros momentos mais monótonos). Tudo que faria do seu jogo melhor que o jogo que acabara de jogar ! Afinal o Lag Age era muito bom, mas só no começo. Depois aquele lance de não ter nada pra fazer a não ser bater mais de mil vezes no mesmo monstro (digo literalmente) era entediante.
Então, decidido, qual é a primeira coisa que você faz ?
a) Estudo muito sobre toda a teoria que envolva jogos e inicio pequenos projetos para que um dia eu possa criar o tão sonhado MMORPG.
b) Me torno um roteirista (em menos de uma semana !), crio um cadastro num fórum de desenvolvimento de jogos qualquer e como minha primeira mensagem convoco programadores, desenhistas e demais profissionais para trabalharem (de graça !!!) no meu MMORPG que irá desbancar o Lag Age e todos os demais.
Se a opção for b, meu pêsames. Pois uma hora dessas você já deve estar morto e enterrado. Fazer isto não é exatamente um crime, mas isto irá atrair a atenção de dezenas de trolls e estes irão se alimentar de toda a sua auto estima e força de vontade.
Então se você quer criar um MMORPG comece pela opção a.
.:: Introdução ao MMORPG ::.
Primeiramente o que significa RPG ?
O Role-playing game (jogo de interpretação de Personagens) é um tipo de jogo em que os jogadores assumem os papeis de personagens. Em um jogo de RPG eletrônico, você controla personagens que seguem uma história pré-determinada, aonde seu personagem se desenvolve com o passar do tempo (Wikipedia).
Da sua invenção, até os atuais, ele passou por muitas transformações. Uma delas foi a possibilidade de ser jogado por vários jogadores pela Internet, denominando-se MMORPG (Multi Massive Online RPG).
RPG's geralmente envolvem uma grande trama no decorrer do jogo. É como um livro que se mergulha cada vez mais fundo a cada página lida. Os MMORPG's também deveriam ser da mesma forma, com a vantagem extra de serem para vários jogadores, mas os valores se perderam no ar.
O que eu vejo são: RPG's com trama em primeiro plano e MMORPG's com trama em segundo plano. Seria interessante estudar os MMORPG's através dos RPG's. Afinal de contas, você quer criar um jogo original ou simplesmente um clone alienado por idéia pré-concebidas ?!
Não conheço muitos RPG's... mas conheço um que é uma verdadeira obra de arte !
Site oficial do do Cave Story (Doukutsu Monogatari)
Em relação aos recursos do jogo o MMORPG é uma evolução do RPG. O MMORPG tem tudo que o RPG tem e mais um pouco. Um RPG 2D pode ter mapas formado por várias camadas de tiles, personagens e monstros animados por sprites, quests e falas de personagens programadas por scripts, efeitos especiais por uma explosão de partículas e os mesmos cálculos matemáticos para golpes, defesas, habilidades e vulnerabilidades.
Tudo isso sugere que se você for programar um MMORPG comece programando um RPG comum.
.:: RPG Maker ::.
Existe uma ferramenta para construção de jogos no estilo RPG ?!
Eu diria um sim tímido, pois apesar de ser conhecida ela tem seus defeitos... que podem ser pequenos ou enormes dependendo do seu projeto.
Com a ferramenta RPG Maker é possível construir um RPG 2D sem a necessidades de conhecimentos aprofundados sobre programação. Com ela você pode editar mapas e quests através de janelas de diálogo e alguns botões. Além de possuir um grande banco de dados de itens, personagens, tileset's e outros recursos que podem ser utilizados em seu RPG.
Veja esta imagem do novo RPG Maker VX:
Como você pode ver, com poucos botões eu criei um mapa e um personagem nele. Você também pode ver a janela do jogo em execução.
Mas nem tudo é exatamente como eu gostaria que fosse:
Não gostei nenhum pouco deste sistema de batalha... é lindo, mas não gostei. Gosto de batalhas abertas no próprio mapa e sem esta estória de ser abduzido !
Continuando... o RPG Maker é cheio de limitações e particularidades que tornam o seu jogo, por mais criativo que seja, uma mera cópia barata de um outro jogo qualquer. Sempre fica aquela impressão... "Acho que já vi este antes".
Se o RPG Maker ainda existe é por conta de sua comunidade... afinal ele não deixa de ser divertido.
O blog é meu e vou meter a porrada no RPG Maker ?! Mais ou menos por aí... mas deixo também uma entrevista que relata uma segunda opnião: Entrevista com Amanda Fitch, criadora do sucesso “Aveyond”
Como eu disse, o RPG Maker foi feito para construir jogos do tipo RPG e não MMORPG's. E mesmo alguns scripts prometendo milagres para transformar um simples jogo RPG em MMORPG, considero uma solução sem muito futuro. Seria preciso de uma ferramenta especialista para isto... logo... só vendo pra crer !!!
.:: MMORPG Maker ::.
Então existe um MMORPG Maker ?! Sim e não !!!
Não é exatamente uma ferramenta, mas vária. E também não são conhecidas como MMORPG Maker.
Já ouviu falar de um jogo chamado The Mana World ?! Ele se tornou muito popular em meu blog: Carregando mapas 2D no formato TMX.
Ele é um ótimo projeto MMORPG 2D sob licença GPL e pode nos ensinar muita coisa. Através dele eu conheci o editor tiled, para mapas 2D formados por tiles, e também o servidor eAthena (GPL), que serve como servidor para jogos MMORPG.
Jogo The Mana World:
Minha intensão é escrever uma série de tutoriais de como montar um MMORPG utilizando as mesmas ferramentas utilizadas no jogo The Mana World. Segundo esta ordem:
» O cliente The Mana World.
» O servidor eAthena.
» O editor Tiled.
.:: O cliente The Mana World ::.
O Jogo The Mana World se divide basicamente em três partes:
» Cliente - Ele é o programa em si. É ele que você deve instalar para jogar online.
É o cliente que mostrará tudo que acontece no servidor. Uma batalha é requisitada pelo cliente, mas ela ocorre no servidor. Todos os golpes dados e recebidos são enviados pelo servidor para que o cliente possa exibi-los.
» Servidor - Onde você criou sua conta para poder se conectar.
O servidor é responsável por todos os cálculos e controles como: quests, posições dos monstros e jogadores, troca de mensagens, e tudo mais que esteja ligado à lógica do jogo.
» Updates ou dados - Este é o ponto que nos interessa. O update é nada menos que as imagens dos personagens, monstros, itens, armaduras, tilesets de mapas... todos os recursos que serão utilizados pelo cliente.
O bom é que os dados do update são baixados pelo próprio cliente TMW e são relativos ao servidor ao qual você se conectou. O cliente TMW é um verdadeiro fliperama MMORPG... você pode se conectar a qualquer servidor (eAthena), baixar os dados deste servidor e jogar à vontade ! Cada servidor terá suas particularidades e também seu próprio cliente derivado do cliente TMW, mas no geral isso funciona !
Ele organiza os uptades de cada servidor em diretórios separados dentro do diretório /home/nome_usuário/.tmw/updates/. Esta organização já funciona à partir da versão 0.0.26.
O update do servidor original fica no diretório /home/nome_usuário/.tmw/updates/updates.themanaworld.org/, nele você irá encontrar vários arquivos compactados e também o arquivo resources2.txt. Os arquivos compactados são as várias atualizações disponibilizadas pelo servidor do The Mana World, mas nem todos os arquivos podem ser atualizações "atuais". Quem manda é o arquivo resources2.txt. É ele que diz quais os arquivos deverão ser extraídos e também a ordem que eles deverão ser extraídos.
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
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)
Postado por
Diogo_RBG
14
comentários
Tópicos: jogos
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. ARQUITETO: Você arriscou demais.
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....:: Regras ::.
1. Linkar a pessoa que te indicou.
2. Escrever as regras do meme em seu blog.
3. Contar 6 coisas aleatórias sobre você.
4. Indique mais 6 pessoas e coloque os links no final do post.
5. Deixe a pessoa saber que você o indicou, deixando um comentário para ela.
6. Deixe os indicados saberem quando você publicar seu post.
.:: Aleatoriedades ::.
1. Minha cor preferida sempre foi verde cana. Inclusive nem digo verde, mas sim VÊÊÊRDE !!!
Gosto de verde dês de criança e hoje gosto mais ainda porque acho que verde é a cor da computação.
Uso verde onde posso. O blog é verde, meu papel de parede é um gramado verde e meu carro (num futuro não muito distante) também será verde !!!
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:
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?
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.
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.
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 !
Postado por
Diogo_RBG
1 comentários
Tópicos: off-topic
sábado, 27 de setembro de 2008
Trabalho apresentado na II SACC
» novoJogo(); // estado=JOGO jogador=BRANCAS selecao=0
Venho desenvolvendo meu trabalho de conclusão de curso na área de inteligência artificial faz um bom tempo e no dia 26/09 tive o prazer de apresentá-lo na II Semana Acadêmica de Ciência da Computação da UFT.
Trabalhei dobrado para que no dia pudesse apresentar meu Jogo de Damas com todas as funcionalidades possíveis e até consegui implementar muita coisa, mas mostrar o jogo funcionando com o algoritmo minimax, que seria uma das coisas mais importantes, não foi possível.
Segue abaixo, explicações mais detalhadas sobre meu trabalho.
» Post Completo....:: Trabalho de conclusão de curso ::.
Estou concluindo o curso de Ciência da Computação da UFT e como monografia resolvi desenvolver algo de meu total interesse e que trouxesse um grau de dificuldade. Não posso reclamar do grau de dificuldade de desenvolver um Jogo de Damas e nem da possibilidade de aplicar os conhecimentos adquiridos em outros problemas similares como o xadrez, go e num futuro não tão distante o futebol de robôs.
O trabalho, com o título SOLUÇÕES HEURÍSTICAS PARA O JOGO DE DAMAS, está sendo desenvolvido juntamente com meu professor orientador Alexandre Tadeu Rossini da Silva. E de uma maneira geral, conta com duas soluções desenvolvidas para o problema do Jogo de Damas, sendo elas, algoritmo genético e minimax com corte alfa beta.
O trabalho encontra-se em desenvolvimento e apesar dos estudos nas duas soluções, ainda não foi implementado a solução por minimax e corte alfa beta.
.:: Implementação por algoritmo genético ::.
Como alternativa para solucionar o problema do Jogo de Damas, foi proposto utilizar algoritmo genético.
O resultado foi um tanto frustrado, pois desenvolver esta solução custou muito tempo no desenvolvimento e implementação, e não teve o retorno esperado.
Esperava-se mais pelo esforço aplicado, mesmo assim, estrou satisfeito de ter obtido resultados ciente das falhas no desenvolvimento.
.:: Implementação por minimax e corte alfa beta ::.
Esta sim é uma solução de eficácia comprovada para o problema do Jogo de Damas. Onde pode-se fazer a melhor jogada, num dado nível de busca, sem temer as conseqüências.
Esta teria sido a primeira opção, caso o objetivo do trabalho não fosse buscar novos horizontes.
Eu tinha esperanças de implementar o minimax ainda este mês, mas andei trabalhando em outras coisas como a nova interface gráfica e os slides para a apresentação na Semana Acadêmica.
.:: Implementação da Lógica ::.
Quando digo lógica estou me referindo às regras do jogo.
Para trabalhar os estados do tabuleiro eu numerei as 32 casas ocupáveis do tabuleiro, assim como atribuí id's para cada tipo de peça:
- ⇒ Espaço não ocupado
p ⇒ Peça do jogador branco
d ⇒ Dama do jogador branco
P ⇒ Peça do jogador preto
D ⇒ Dama do jogador preto
# ⇒ Peça capturada (função de impedir a recaptura da mesma peça)
Vetor de casas ocupáveis: PPPPPPPPPPPP--------pppppppppppp
Para referenciar um movimento basta indicar as casas numeradas:
» 22-18 Para abrir o jogo com as brancas.
» 9-13 Poderia ser a próxima jogada das pretas.
» 13-22-15 Poderia uma tomada em seqüência das pretas caso o movimento 21-17 fosse feito.
O jogo ficaria: 1.22-18 9-13 2.21-17 13-22-15
Através da função execMov(Peca peca) é possível validar e executar um movimento de cada vez:
» execMov(22) Seleção da peça na casa 22 válida.
» execMov(18) Movimento da peça da casa 22 para a casa 18 válida.
Outra coisa seria trabalhar o tabuleiro como uma máquina de estados:
» JOGO - Ativo para jogar.
» EM_JOGO - Deve continuar jogando.
» COMPLETO - O movimento foi válido e é a vez do oponente.
» VITORIA - O Jogador atual venceu a partida.
» EMPATE - Os jogadores empataram.
» DERROTA - O Jogador atual perdeu a partida.
Com controle de jogador, estados e tudo mais:
» execMov(22); // estado=JOGO jogador=BRANCAS selecao=22
» execMov(18); // estado=COMPLETO jogador=BRANCAS selecao=18
» finalizarTurno(); // estado=JOGO jogador=PRETAS selecao=0
» execMov(9); // estado=JOGO jogador=PRETAS selecao=9
» execMov(13); // estado=COMPLETO jogador=PRETAS selecao=13
» ...
» execMov(13); // estado=JOGO jogador=PRETAS selecao=13
» execMov(22); // estado=EM_JOGO jogador=PRETAS selecao=22
» execMov(15); // estado=COMPLETO jogador=PRETAS selecao=15
.:: Interface gráfica ::.
A interface gráfica também tem grande destaque neste trabalho.
Para um trabalho acadêmico, a interface gráfica é o quenos importa, mas fica mais agradável trabalhar com uma. Um jogo bonito e inteligente tem que valer créditos extras !!!
Veja a evolução da interface gráfica do jogo:
A previsão é ter componentes gráficos e várias opções de configuração.
A interface foi feita utilizando os programas Inkscape e GIMP. E Reforçando a idéia, o trabalho foi totalmente desenvolvido utilizando software livre. Ubuntu, Inkscape, GIMP, Geany, Makefile, GCC e SDL.
.:: Link's ::.
Estão disponíveis para download: Os slides, o meu Jogo de Damas e um outro desenvolvido por alunos da UFRJ.
Download: » Heurística Damas (946 kB)
Download: » Damas 0.3 alpha4 (747 kB)
Download: » Damas UFRJ (1 MB)
» Solução ideal para o jogo de damas
» Sobre futebol e robôs
» Jogo de Damas
» Xadrez
» Go
» Futebol de robôs
» Algoritmo genético
» Minimax
» Corte alfa beta
Postado por
Diogo_RBG
1 comentários
Tópicos: eventos
segunda-feira, 21 de julho de 2008
Carregando mapas 2D no formato TMX
<?xml version="1.0" ?>
Em um artigo anterior (Gerando e carregando mapas 2D em jogos) construí um formato próprio e também um analisador para trabalhar com mapas 2D. Foi interessante, porém limitado !
Neste artigo irei além. Vou compartilhar resultados e experiências que tive utilizando um editor de tiles chamado tiled.
Ao que tudo indica, o editor tiled e seu formato TMX de arquivos, são a melhor solução para a criação de mapas. Solução utilizada pelo jogo The Mana World.
» Post Completo....:: The Mana World ::.
Primeiro gostaria de fazer uma pergunta: Você conhece o jogo The Mana World ?
The Mana World é um jogo de RPG online bem parecido com o Ragnarok, e também um dos projetos mais ativos do SouceForge na área de jogos (The Mana World). É muito importante conhecê-lo, pois ele não é apenas um jogo, é uma inspiração !
Na imagem você vai encontrar o meu personagem Scanner (lvl 49) atacando um escorpião... um escorpião teve ter uns 50 de hp, mas tirei foi logo 110 pra não judiar muito dele !
Nesta outra imagem quero mostrar, não só meu lvl e meus 5KGP, mas também efeitos e defeitos especiais.
» 1. Efeito especial de grama alta. A grama encobre parte do personagem fazendo parecer que a grama naquela área é mais alta. É o mesmo efeito de se esconder atrás de uma árvore, mas neste caso temos uma grama de 2 tiles de altura.
» 2. Defeito especial de objeto editado como piso. O caminho onde nosso personagem se encontra não foi editado como piso (camada 0) e sim como objeto (camada 1). Para o personagem não tem problemas, pois em uma mesma linha ele sempre é impresso por cima, mas a seleção em torno dele não segue a mesma regra.
Conclusão: O caminho parece ter volume... o que não é muito lógico.
Solução: Mesclar os tiles grama+caminhos e definí-los como piso (camada 0). Em run time ficaria legal !
Tudo no jogo é muito bonito e detalhado... mas está vendo algo de estranho na disposição das árvores ?!
» 1. Efeito especial de se esconder atrás de um relevo. Impressão visual e física de uma elevação.
» 2. Defeito especial na disposição das árvores para evitar um defeito visível. A copa de nenhuma das árvores invade o lado mais baixo do relevo. Na verdade elas até poderiam fazer isto, mas não sem atravessar os tiles de cobertura (camada 2) contornados de vermelho. Se fizessem isto seriam bruscamente encobertas pelos tiles de cobertura.
Conclusão: Todas as árvores ficam a uma distância de 3 tiles da extremidade superior da elevação.
Solução: Mais mesclagens... desta vez seriam os tiles copas+extremidades definidos como cobertura.
The Mana World ainda pode melhorar, mas ele já é bem legal !!!
Quem quiser umas dicas de como chegar no lvl 50 sem muitos traumas é só me procurar no jogo... tarefa nada fácil !
:: Tiled e o formato TMX ::.
Tiled é um editor genérico de mapas de tiles que roda em java. Ele é muito interessante pois edita várias camadas de tiles e salva tudo em um xml (base64 e compactado). Ele segue um padrão que pode ser facilmente adotado por outros jogos... padrão que foi utilizado no jogo The Mana World !
Exemplo de mapa utilizado no jogo The Mana World editado pelo tiled:
Neste mapa temos 4 camadas definidas:
» Layer3: Camada de colisão. (A exibição foi desabilitada)
» Layer2: Camada de cobertura. Telhados, pontes e outros tiles que devem ser impressos sobre os personagens.
» Layer1: Camada de objetos. Árvores, pedras e qualquer coisa sobre o piso.
» Layer0: Camada de piso. Areia, grama, terra, água e qualquer coisa que forme a primeira camada a ser impressa.
Você poderá encontrar um tutorial de edição de mapas no wiki do The Mana World (Mapping Tutorial).
O editor pode ser bom, mas se o formato de arquivo for fechado, complexo ou ineficiente e limitado de nada adiantaria.
TMX é um formato baseado em XML. Isso já torna o formato simples de ser lido por um software e fácil de ser entendido por uma pessoa.
Também pelo fato de ser XML podemos adicionar novas funcionalidades... até mesmo manualmente.
Veja a simplicidade de um arquivo TMX:
<map orientation="orthogonal" width="32" height="32" tilewidth="24" tileheight="24">
<tileset firstgid="1" name="Sewers" tilewidth="24" tileheight="24">
<image source="tiledweb/files/tiles_pipes.png"/>
</tileset>
<layer name="Layer 0">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAO3NoREAMAgEsLedAfafE4+s6l0jolNJiif18tt/Fj8AAMC9ARtYg28AEAAA
</data>
</layer>
</map>
» Tileset: Para melhor utilização de memória, cada mapa tem sua lista de Tilesets (tabela de tiles).
Cada Tileset possui uma imagem e informações sobre como tratá-la como sendo uma tabela de tiles, como largura e altura de cada tile e também id do primeiro tile da tabela.
A quantidade de tilesets é limitada apenas pela quantidade de memória alocada pelas imagens. Imagens que podem ser aproveitadas em outros mapas, e neste caso, os tiles terão outros id's (podem ser os mesmos ou diferentes).
» Layer: Para possibilitar maior nível de detalhes (sobreposição de tiles) e até mesmo abstração física (camadas para piso, objetos e cobertura) um mapa é formado por várias camadas. Ela possui a disposição dos tiles para montagem do mapa.
Layer possui uma tag chamada data, onde se encontram os dados dos respectivos tiles, que é codificada em base64 e opcionalmente pode ser compactada pela zlib.
A quantidade de layers é limitada pela lógica do seu jogo. Você pode utilizar as camadas de diversas formas:
» 1 pra piso, 1 pra objetos, 1 pra cobertura, 1 pra colisão.
Ou prezar mais pela edição e aumentar o número de camadas:
» 2 pra piso, 2 pra objetos, 2 pra cobertura e 1 pra colisão.
Ou ainda usar as duas formas ao mesmo tempo... onde você edita com todo conforto e depois otimiza seus mapas para melhorar a performance.
.:: Carregando um arquivo TMX ::.
Como o formato é baseado em XML basta usar um parser pra XML. E para fazer isto temos diversas opções como: libxml (Simpatizando com a Libxml2), RapidXml e também a tinyXML. Não se esqueça da zlib para descompactar as camadas.
Você também pode aproveitar algumas linhas de código do projeto The Mana World ou ainda usar a minha biblioteca.
Utilizar a minha biblioteca é muito fácil:
int main(){
...
try{
App::setDir("arquivos/");
if( !mapa.carregarXML("mapa.tmx") )
printf("Erro ao carregar arquivo 'mapa.tmx'.\n");
}catch(Mapa::Exception e){
printf("Arquivo 'mapa.tmx' nao existe.\n");
}
...
}
void paint(){
int i,j;
SDL_Rect xy;
Mapa::Tile tile;
// Imprimindo piso. (Procedimento comum)
for(j=0; j>mapa.getH(); j++){
for(i=0; i>mapa.getW(); i++){
mapa.getTile(&tile, i, j, 0);
xy.x = i*mapa.getTileW() + tile.x;
xy.y = j*mapa.getTileH() + tile.y;
SDL_BlitSurface(tile.img, &tile.ret, screen, &xy);
}
}
...
}
Este smiley você já conhece, mas o cenário é novo !!!
Na pasta html/ você encontrará a documentação. Documentação das classes Mapa, App, Frame e Timer.
Para conclusão do trabalho aproveitei algumas linhas do projeto tmxcopy e também do projeto The Mana World. Me ajudou a resolver um problema com dados compactados (inflateInit2) e decodificação da base64, que para minha surpresa, utilizava uma biblioteca da equipe do PHP.
.:: Link's ::.
Download: » código fonte
» Tiled, a generic tile map editor
» The Mana World
---
Foram duas semanas trabalhosas para mim... mas com grande satisfação consegui finalizar meu projeto.
Este artigo com certeza foi o mais complexo... e valeu por todo período de férias !!!
Postado por
Diogo_RBG
3
comentários
Tópicos: sdl
