sábado, 21 de março de 2015

[Game Maker] Introdução de como criar seu jogo!


Oi! Meu nome é Felipe, estive mexendo no Game Maker por mais de quatro ou cinco anos e este será uma breve introdução de como criar seu primeiro jogo utilizando GML (Game Maker Language). Para isso, nós teremos que pacientemente estudar cada recurso que o Game Maker disponibiliza (que são muitos, por sinal) à nosso favor para que tornemos isso possível. De início, vamos utilizar técnicas simples e macetes básicos para um jogo funcional, livre de bugs e agradável ao olhar. Embora eu tenha feito outros guias anteriores à esse, eu acho que vale à pena recomeçar de uma forma melhor.


Nesta introdução, eu irei apenas dar ênfase aos detalhes mais importantes e básicos do Game Maker. Será uma passada geral pela interface do programa, principalmente para aqueles que não estão familiarizados com ele. 

Índice:
1. Recursos do Game Maker 8.0
2. Aprendendo e mantendo a organização
3. Primeiros passos no Game Maker
4. Trabalhando com códigos

1. Recursos do Game Maker 8.0:

O Game Maker trabalha com os seguintes tipos de recursos: Sprites, Objects, Paths, Sounds, Scripts, Rooms e TimeLines (GM versão 8.0 e 8.1). Dois deles, Paths e TimeLines, particulamento não são tão utilizados, pois são usados apenas como uma forma "fácil" de realizar certas ações. Eu pessoalmente não os utilizo e não tenho interesse em usá-los.

Os 'Sprites' são todas as animações que você irá utilizar no seu jogo. Geralmente, os utilizadores sempre preferem sprites do tamanho 32x32 para menos, pois isso poupa bastante trabalho, deixa o jogo mais leve e ao mesmo tempo fácil de torná-lo agradável ao jogador. Você pode utilizar de programas externos para fazer suas Sprites e depois importá-las para o Game Maker entretanto. Eu costumo utilizar bastante do Pixel Art, então utilizar sprites do tamanho 16x16 ou 8x8 é bastante comum em meus jogos.

Os 'Objects' são todos os elementos do jogo. Isto é, tudo que você irá colocar no jogo. Eles podem ser utilizados da forma que você imaginar. Por exemplo: uma parede é um objeto, o jogador é um objeto, um baú é um objeto, e até mesmo um "controlador" invisível que controla a interface do jogo e marca os pontos e nem sequer aparece no jogo para o jogador, é um objeto também. Á um objeto pode ser atribuído variáveis, ações, scripts, Sprites, e também outras configurações do próprio Game Maker como Solid, Visible e até mesmo Persistent. Calma que chegaremos lá.

Os 'Scripts' são folhas de códigos que você atribui um nome, por exemplo, Script_Jogador_Movimento ou Script_Inimigo_Atacar. Quanto mais folhas de Scripts para cada função você cria, mais organizado fica seu projeto, pois assim você sempre irá saber aonde você exatamente deve ir para alterar alguma coisa que não ficou muito bom, ou acabou por não funcionar.

Os 'Sounds' são, nada mais que, os efeitos sonoros que você irá utilizar em seu jogo, seja eles um simples *clic* ou uma trilha sonora.

Por fim, as 'Rooms', elas são os ambientes do seu jogo. Um ambiente não é necessariamente um local que o seu personagem anda livremente, mas também pode ser uma Room de Menu Principal, uma Room de uma animação ou uma Room exibindo uma tela de Game Over. São utilizados também Rooms que agregam apenas alguns Objetos de inicialização do jogo, no qual passa tão depressa que o jogador nem sequer nota a sua transição.

2. Aprendendo e mantendo a organização:

A seguir eu irei passar algumas dicas sobre a criação de jogos e o início de um projeto.

Um projeto mal organizado nunca será terminado. Ou, pelo menos, nunca terá um resultado bom. Nunca. Claro que, você que está começando não precisa se preocupar tanto em organizar seus primeiros projetos. Na verdade, para dominar qualquer forma de programação, o programador iniciante terá que se submeter à muito, muito tempo de "tentativa e erro". Assim, ele irá chegar sempre em novos resultados, irá compreender como funciona cada função e assim, poderá distinguir qual a melhor, mais simples e mais eficiente forma de se programar qualquer coisa que ele desejar. Para criar um jogo, isso não vai ser diferente.

Antes de criar um projeto sério, onde o principal objetivo é criar um jogo real e funcional, é importante manter a qualidade dentro da programação. Posso garantir para você que a qualidade do código vai refletir, e muito, na jogabilidade à seguir. Criar códigos gigantescos com milhares de funções e chamar variáveis sempre que você quiser fazer alguma coisa é uma péssima ideia. Se você me perguntar qual é o melhor código para fazer 'x' coisa, eu logo irei responder: "o código mais simples, lógico e limpo que você conseguir criar". Isso serve para qualquer tipo de jogo, códigos simples são os mais fáceis de se trabalhar, são os menos propensos a causar bugs inexplicáveis e, as vezes, incorrigíveis.

O nome que você dá recursos também deve ter uma atenção especial. Algumas regras básicas à serem seguidas é: 1) nunca utilizar acentuação, símbolos ou espaços (o GM não reconhece esses caracteres), 2) utilizar de nomes simples, descritivos e claros, criando padrões (exemplos: sprite_jogador_direcao_direita, objeto_inimigo_dragao, objeto_item_arma_00, som_tiro) e 3) tomar cuidado para não repetir nomes entre nenhum recurso (por exemplo, uma Sprite e um Objeto que ambos se chamam 'item_cura'). Criar pastas para subdividir seus recursos também é essencial para uma boa organização.

Outro ponto que você deve dar atenção é à própria jogabilidade. Primeiro, deve-se pensar na ideia geral do jogo, trabalhando sempre os pontos mais importantes como Movimentação e Inteligência Artificial. Após fazer a base do jogo, só então é recomendável você criar coisas adicionais, como itens de bônus, novas naves ou então asinhas para o seu personagem. Deixe sempre o mais trabalhoso e complicado primeiro, pois assim você pode criar novas coisas a partir do padrão que foi utilizado, e não ao contrário.

Outra dica é sempre procurar criar uma história para o seu jogo. Se o seu jogo é de um rato atrás de uma fatia de queijo, então imagine algo tão simples quanto o próprio jogo para resumir a situação ao jogador. História em um jogo é um ponto importantíssimo, pois ajuda o jogador à se localizar no universo que você está tentando criar e deixa mais claro o objetivo principal do jogo, além de ajudar o próprio programador a compreender no que deve ser trabalhado.

No mais, guarde sempre estas dicas. Ninguém é obrigado à fazer tudo isso nas primeiras tentativas, mas trabalhe encima disso. Como eu disse, o modo "tentativa e erro" de início é, disparado, a melhor forma de você tentar entender as coisas. Nenhum guia, por melhor que seja, vai ser tão eficaz quanto a experiência que você obter tentando criar as coisas por si só. É uma tarefa difícil, mas em pouco tempo você irá conseguir filtrar muitas coisas e com elas, ir se aprofundando cada vez mais.

De início, fazer um bonequinho andar corretamente e parando ao topar com obstáculos já é um grande progresso. Apenas nessa brincadeira, você está trabalhando com o sistema de movimentação, colisão de obstáculos e o sistema de condições (o personagem parar SE ele bater em um obstáculo).

3. Primeiros passos no Game Maker:

O Game Maker já possui um tutorial bem simples explicando todos os passos para a criação de um jogo de "point and click" na sua inicialização.

Para iniciar o seu primeiro projeto, eu indico que você não se preocupe com a parte gráfica. Crie diversos sprites limpos, como quadrados de uma só cor de diversos tamanhos para representar as paredes, diversos quadrados de outra cor representando os inimigos e assim sucessivamente. A parte da mecânica inicial do jogo é sempre o momento mais crucial de qualquer projeto pois é daí que o jogo irá se desenvolver.

Antes de prosseguir desta parte, tenta certeza que o jogo flui bem e que nada fique travando em paredes ou parando de funcionar por alguma razão.

4. Trabalhando com códigos:

Trabalhar usando códigos é essencial. De início, o programador pode fazer coisas utilizando o sistema Drag'n Drop, mas cedo ou tarde ele terá que  se acostumar a programar utilizando a GML pois a partir de certo ponto, é impossível trabalhar sem ela.

Para começar, devo lhe dar dicas para manter seu código bem organizado:

- Crie o bom costume de nomear suas variáveis sempre com um início padrão, como por exemplo "var_" (var_jogador_vidas, var_inimigo_dano, var_inimigo_velocidade, var_dinheiro_quantidade) ou algo do gênero, o que for melhor para você.

- Sempre que você abrir {chaves}, procure sempre deixar o conteúdo interno em um nível de texto superior ao anterior (utilizando a tecla TAB), para deixar claro quando as condições são abertas e quando são fechadas, e também se aquelas condições estão dentro de outras condições. Por exemplo:

{
if var_condicao_01 == true
      {
       sprite_index = 0;
       image_index = 0;

       if var_condicao_02 == false
              {
               var_dano = 2;
               var_energia -= 1;
               
               image_index = (image_number - 1);
               }
       else
               var_morto = true;

       if var_condicao_03 == false
               var_velocidade = 4;

       }
}

Outro conselho é sempre trabalhar por partes em qualquer situação. Por exemplo, você quer fazer um inimigo. Crie diversas folhas de scripts para cada ação que o inimigo pode executar, como por exemplo, script_inimigo_andar, script_inimigo_atacar, script_inimigo_morrer, script_inimigo_sprites, e por aí vai, interligando-os internamente sempre que necessário. Como eu disse anteriormente, isso vai ajudar você á descobrir exatamente onde ir sempre que alguma coisa estiver saindo errado. Para ligar um script ao outro através de código, você pode usar a função script_execute(nome_do_script). Por exemplo:

{
//Script geral do inimigo comum

if var_recurso_energia > 0
      {
       
       if distance_to_object(obj_jogador) <= var_visao || var_seguir_jogador > 0
              {

              var_seguir_jogador = 90;
              //90 = 3 segundos! Portanto: 30 = 1 segundo!

              script_execute(script_inimigo_seguir_jogador);

              if place_meeting(x,  y,  obj_jogador) && var_ataque_delay <= 0
                     {
                     
                     var_ataque_delay = 60;
                     //60 = 2 segundos!

                     obj_jogador.var_recurso_energia -= var_dano;

                     sound_play(snd_mordida);
                     
                     }
              
              }
       else
              {
              
              var_seguir_jogador <= 0
                     script_execute(script_andar_aleatoriamente)
              
              }

       if var_seguir_jogador > 0
              var_seguir_jogador -= 1;

       if var_ataque_delay > 0
              var_ataque_delay -= 1;
       
       }
else
       {
       
       script_execute(script_inimigo_deixar_item);
       instance_destroy();
       
       }

}

Vale lembrar de declarar todas as variáveis no Crate Event para não ocorrer nenhum erro. Lembre-se: você ensina a GML!

Nos próximos posts eu irei abordar dicas valiosas para a programação para iniciantes e para avançados que também querem aprimorar suas técnicas. Vou deixar claro que algumas coisas eu não costumo usar, portanto não posso lhe tirar todas as dúvidas. Mas farei o melhor! Procure pela TAG "Game Maker" para mais guias, ou clique abaixo para ver a próxima aula!


Aula anterior - Próxima aula

Um comentário:

Dúvidas? Pergunte!
Ajudou? Agradece!
:]