.:: Menu Rápido ::.

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

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... .:: Mapas ::.
Estou certo de que você já teve a curiosidade de saber como funciona um mapa em jogos 2D. Eles geralmente são formados por tiles. Mas você já editou algum em sua vida ?!
Mapa editado no RPG Maker.

Aqueles que responderam sim provavelmente estão falando do RPG Maker. A experiência de quem já é acostumado com o RPG Maker conta muita coisa, mas quem nunca o experimentou não precisa ficar preocupado. Neste tuto iremos abordar uma outra ferramenta chamada Tiled.

.:: Tiled - O editor de Mapas ::.
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 ! (como eu havia descrito em: Carregando mapas 2D no formato TMX)

Nós vamos criar o nosso mapa agora mesmo, então, certifique-se de que você tem a máquina virtual do Java instalada, baixe o Tiled e o execute com o comando:

cd /caminho_completo_do_editor/
java -jar tiled.jar

Em seguida você verá uma interface como esta. (versão 0.7.2)
Ele é realmente muito simples... não tem segredo.

Então, vamos criar um novo mapa. Vá em file > New... ou digite Ctrl+N.
Assim como na figura, crie um mapa Orthogonal de dimensões 32x32 e formado por tiles de dimensões 32x32. Feito isso a única coisa que você verá é uma área vazia. Sem nenhum tile para desenhar.
obs.: Antes de prosseguirmos salve seu mapa no formato tmx (meu_primeiro_mapa.tmx). Os tilesets que for utilizar devem estar localizados neste mesmo diretório onde você salvou o mapa. Soltos ou organizados em outros diretórios.

Para poder desenhar tiles em nosso mapa precisamos de um tileset. Na pasta de exemplos do editor tem um bom tileset para ser utilizado:
Para adicionar um tileset vá no menu e clique em Tilesets > New Tileset... e então escolha o tileset tmw_desert_spacing.png (imagem acima).
Normalmente um tileset não possui espaços entre tiles, mas como esse possui nós precisamos informar isto ao editor. Tile spacing e Margin setados como 1 correspondem a esta configuração.
Agora que você já possui um tileset, clique na lata de tinta, escolha o tile de areia e clique sobre a área vazia do mapa. Mude para a ferramenta lápis e desenhe algumas calçadas, pedras e plantas.
Use o botão direito do mouse para selecionar tiles que irão flutuar sobre a tela. Assim você poderá editar mapas mais rapidamente.

Que tal adicionar mais um tileset para o mapa ficar um pouco mais diversificado ? Use este tileset de tiles duplos:
Ao adicionar o tileset informe à opção Tile heigth o valor 64. Isto fará o Tiled reconhecer um tile um pouco maior que o configurado no mapa. Dessa forma:
Experimente agora desenhar com tiles duplos... eles dão a impressão de altura ao objeto.

Mas e as camadas ? Imagino que você deve estar se perguntando pra que servem as camadas... pois bem, experimente desenhar o tile do muro deste tileset:
Obs.: Ao adicionar o tileset informe à opção Tile heigth o valor 96. Pois este é um tileset de tiles triplos.
Me diga se ao desenhar o muro o resultado não foi este ? Um buraco no chão ?
Isso acontece porque substituímos os tiles do piso por tiles que deveriam ser impressos sobre o piso. Tiles que possuem transparência devem ser impressos em uma camada separada. Para criar um nova camada clique no botão Add a layer localizado na aba Layers.

Agora só falta conhecer mais um detalhe: A camada de colisão.
Cada tile vermelho é um tile de obstrução. Tile que só tem efeito no próprio jogo.

Você pode usar qualquer tileset para esta camada, mas se quiser usar o mesmo que eu:

.:: Criando mapas para o jogo The Mana World ::.
Acima eu mostrei como criar mapas. Mas se você pretende criar um mapa para o TMW você deve seguir uma série de regras. Até porque o Tiled é o editor oficial do jogo, mas não foi feito exclusivamente para ele. As regras vão do diretório onde os tilesets devem ser encontrados até o nome das camadas. Mais detalhes em: Mapping Tutorial.

Algumas dicas:
» Sistema de Diretórios - Para que o mapa seja corretamente carregado ele precisa respeitar o sistema de diretórios. Os tilesets devem ser encontrados em graphics/tiles e os mapas em maps. Dessa forma:
» Novo Mapa - O mapa deve ser Orthogonal com tile de dimensões 32x32 e mapa de dimensões 60x60 (mínimo) a 200x200 (máximo).
» Fronteiras - É recomendado reservar os 20 tiles mais extremos do mapa (diagrama). Não se deve ter acesso aos tiles destas bordas para que os senário não pareça limitado. Deixando a câmera correr livremente.
» Passagens - Uma passagem é uma porta que leva a outro mapa. Mapas de cenários abertos devem ser envolvidos por algum tipo de obstáculo (montanhas, árvores, água, cercas) que reduza as passagens para alguns tiles. Pois as passagens (ou portas) não podem ser muito largas.
» Novo tileset - Para adicionar um novo tileset sempre use Reference tiled image. Já Tile spacing e Transparent color não devem ser utilizados. Você pode obter os tilesets extraindo dos pacotes de atualização ou então copiando do repositório git (git://gitorious.org/tmwdata/mainline.git).
» Camadas - Para que seu mapa tenha realmente um comportamento 2D suas camadas devem seguir uma ordem e nomes pré-determinados.
»» Ground - Camada para terrenos. Nesta camada vão os tiles de grama, terra, areia, água, calçadas... tudo que faz parte do piso. Alguns tiles de pequenos objetos misturados ao piso também vão aqui. Regra: Devem estar abaixo da camada Fringe e possuir tiles totalmente preenchidos (sem transparência) para evitar bugs gráficos. Não precisa se chamar Ground.
»» Fringe - Camada de objetos. Ela é que dá dimensão 2D ao mapa imprimindo objetos em movimento na frente ou atrás de seus tiles. Regra: Esta camada separa as camadas de piso das camadas de objetos aéreos. Precisa se chamar Fringe.
»» Top - Camada de objetos aéreos. Nesta camada vão os tiles que estão acima da superfície do mapa ou aquele que você quer impresso sobre o personagem. Regra: Devem estar acima da camada Fringe. Não precisa se chamar Top.
»» Collision - Camada de colisão. Esta camada não é visível no jogo e determina se um tile permite passagem ou não. Quando terminar de marcar os tiles que não permitem passagem pintes as áreas que ficarem inacessíveis, pois isto evita que o servidor coloque monstros nestas áreas. Regra: Somente o tile vermelho do tileset collision.png pode ser utilizado nesta camada. Precisa se chamar Collision.

Então, vamos construir nosso primeiro mapa jogável pelo TMW !!!
Primeiro baixe os dados de update diretamente do repositório utilizando o git:

cd $HOME
git clone git://gitorious.org/tmwdata/mainline.git tmwdata

Antes de criar um novo mapa, experimente editar um pronto primeiro. abra o mapa 001-1.tmx pelo editor Tiled e faça algumas alterações.
Para ver as alterações do mapa no jogo execute o cliente TMW de um modo diferente. Usando os parâmetros -u (para pular a tela de updates) e -d (para setar o novo diretório de dados). Dessa forma:

tmw -ud /home/nome_do_usuário/tmwdata

obs.: Substitua nome_do_usuário por seu nome de usuário.
Feito isso é só entrar no jogo normalmente e ir até as alterações que você fez no mapa. Você verá os outros jogadores passando por tiles onde você impediu passagem, mas você não poderá fazer o mesmo. Teoricamente você também estaria passando por tiles bloqueados, mas o servidor não irá aceitar isto. Logo, para o servidor e outros jogadores, você não estará realmente passando por cima de tiles bloqueados.
O jogo irá carregar seu mapa logo no começo da execução. Mudar o mapa não fará mudanças imediatas. Você terá que sair e entrar no jogo novamente. Para tornar este processo um pouco mais rápido você pode usar mais alguns comandos ao executar o cliente TMW:

tmw -ud /home/nome_do_usuário/tmwdata -U nome_do_usuário -P senha_do_usuário

obs.: Todos os comandos executados no terminal vão direto para o arquivo /$HOME/.bash_history... então tome cuidado com sua senha !!!

.:: Finalizando ::.
O tutorial já está ficando muito extenso... e vou parando por aqui mesmo. Mas ainda tem espaço para mais dicas.
Editar mapas é divertido e beeemmm demorado. É mais produtivo quando você já tem todo o mapa em mente, por isso fazer um esboço pode ser uma boa idéia. Se o mapa ficar realmente bom experimente enviar para o projeto TMW (Sending the map to the dev team). Mas é claro que você deve estar utilizando os tilesets do projeto e também criar um mapa que se encaixe no jogo. De qualquer forma, se você realmente for fazer um mapa para o projeto participe pelo menos do fórum.

O jogo TMW possui mais algumas propriedades, efeitos de partículas e Tiles animados. Coisas que não comentei por não ter total domínio... mas taí o link pra quem se interessar. Leia diretamente da fonte: Mapping Tutorial (TMW).

Para criar um pacote de atualização basta compactar os arquivos para um arquivo .zip e então adicioná-lo à lista de atualizações (resources2.txt) com seu respectivo hash. Este hash não é um hash comum, por isso você vai precisar do programa adler32. Mais detalhes em: How to release an update.

.:: Link's ::.
» Tiled
» Tiled Wiki
» Game map edition using Tiled (Silveira Neto)
» Mapping Tutorial (TMW)
» How to release an update (TMW)

---
Fico devendo os scripts para o próximo !!!

10 comentários:

Unknown disse...

Excelente post Diogo
Enquanto leio o tutorial dá vontade mesmo de sair criando os mapas que estavam guardados na memória :-)
Ótimas explicações também.
Parabéns!

Diogo_RBG disse...

Que bom que você gostou !
Pena ser o ultimo tuto que farei :(

Diogo_RBG disse...

Ultimo nada ! Só tô me aquecendo ! Era só piadinha de 1º de Abril !!!

Teremos uma pequena interrupção, pois estarei me organizando para o 1º EDJ-TO (1º Encontro de Desenvolvedores de Jogos do Tocantins) dia 24 de Abril na UFT.
Neste período os posts serão todos relacionados ao encontro... para então voltarmos à programação normal.

Lucas Mello disse...

Boa diogo, legal que as dicas dadas servem não apenas para um mmo, mas também para outros jogos 2D, já que tiles são o método mais usado para construção de mapas, top-view ou scroll, como mario.

Unknown disse...

Parabens Diogo, estou fazendo um jogo usando Allegro e suas dicas foram valiosas

Anônimo disse...

Velho foi uma das coisas mais do caralho que eu li nos ultimos tempos, no bom sentido, parabens cara ficou muito bom aguardo o proximo.

Diogo_RBG disse...

Não sei quando vou poder fazer a parte 4... trabalhando muito e o tempinho que sobra é pra ajudar no The Mana World BR. Lá trabalhamos pra manter um MMO... vc com certeza irá encontrar muitas dicas sobre: Edição de mapas com o Tiled, Scripts do eAthena, pixel art... menos programação de um jogo do zero XD... não sei exatamente o que te interessa mais.

BrasileirinhoPe disse...

Cara Muito bom mesmo estais de parabéns.
to começando um projeto, e vou criar um jogo em Java só que detalhe comecei o curso a quase nada de tempo aprendi na escola o básico do básico mesmo assim vou faze-lo e este teu tutor vai me ajudar e muito ^^

BrasileirinhoPe disse...

Pow cara gostei muito deste tutor ai.
vou começar a fazer um jogo como projeto de escola e to estudando pra isso através do material que acho pela net.

Diogo_RBG disse...

Faça seu jogo, você vai aprender muito com ele. Mas nada de jogos online logo de cara :P ... ou vc verá muitos anos se passarem sem ter um resultado palpável XD. Os primeiros são só para estudos.
boa sorte.