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

domingo, 7 de setembro de 2014

[Mix Master] Onde e como evoluir?!


Para evoluir seu personagem no MixMaster, você deve sempre estar preparado com algumas poções para derrotar inimigos um pouco mais fortes que você e seus Henches. Antes de iniciar com a caçada, lembre-se de algumas coisas importantes.

Índice:

1. Procure um local com monstros fortes
2. Procure um local vantajoso para seus Henches
3. Alguns bons Henches para evolução
4. Locais para evolução


1. Procure um local com Henches fortes: 

O ideal é sempre derrotar inimigos que possuem o nome com a cor Laranja ou Vermelho (pois isso indica que eles ainda são fortes para você). Com isso, o seu ganho de experiência será maximizado. A seqüencia de classificação de poder do monstro é:


Classificação:
Detalhes:
█ Cinza:Experiência nula. Evite.
█ Verde:Experiência medíocre. Evite.
 Amarela:Experiência "fácil" e "grátis", porém existem opções melhores. Evite.
 Laranja:Experiência boa, com custos relativamente baixos. Geralmente a melhor opção caso você não possa gastar muito com poções.
 Vermelha:Experiência excelente, porém os gastos com poções serão mais altos, à menos que os seus Henches tenham vantagem sobre os Henches inimigos (ver abaixo).

2. Procure um local vantajoso para seus Henches:

Em MixMaster, todas as espécies dos Henches possuem vantagem sobre uma espécie e desvantagem sob outra, funciona mais ou menos como 'elementos'. Isso quer dizer que tentar usar Henches do tipo Inseto contra Henches do tipo Animal é uma péssima idéia (pois o dano causado será menor e o dano recebido, maior), porém tentar utilizar Henches do tipo Inseto contra do tipo Metal é a melhor forma de evoluir, pois eles irão ser derrotados com facilidade. Funciona desta maneira:


3. Alguns bons Henches para evolução:

'AquaPing', 'HornKing', 'AncientKilla', 'HornMameo' - todos estes são exemplos de Henches muito visados por jogadores de nível baixo/médio para facilitar a evolução, pois eles atacam de longe (e sua taxa de ataque parecem ser superiores aos outros Henches neste aspecto) além de serem fáceis de se fazerem até mesmo em níveis mais baixos.


Henche:
Combinações:
Onde encontrá-los:
AncientKilla:Monoeye + Delcoi
Monoeye + Yassei
Bota + Dr.Calvin

- Owalljae Prairie (Delcoi, Yassie)
- Nothern western seashore (Bota)
- Herseba entrance (Monoeye)
- Cheseva Ruins (Dr. Calvin)




HornKing:
Delcoi Asakayza
Delcoi Synicks
Delcoi Liddy
Delcoi Cactusing
- Owalljae Prairie (Delcoi, Synicks, Liddy)
- Tamer's Field (Asakayza, Cactusing)




AquaPing:
Dr.Calvin + Delcoi
Dr.Calvin Synicks
- Owalljae Prairie (Delcoi, Synicks)
- Cheseva Ruins (Dr. Calvin)




HornMameo:
Yassei + Liddy
Yassei + Monoeye
Yassei + Synicks
Yassei + Delcoi
Yassei + OneStump
Yassei + Oscar
- Owalljae Prairie (Yassei, Delcoi, Synicks, Liddy, Oscar, OneStump)
- Herseba entrance (Monoeye)





4. Locais onde evoluir:

Esses são os locais mais comuns para jogadores de tal nível evoluírem. Lembre-se sempre de procurar evoluir onde os Henches possuem classificação com o nome vermelho (para que você obtenha 100% de experiência) se possível, e lembre-se também de levar 150~200 poções para manter-se no mapa por um bom tempo. Lembre-se que dependendo da força dos seus Henches, os bons locais para evoluir podem variar bastante.

Níveis:
Local: 
Observações: 
1-10
Arredores de Magirita--
11-19
Magirita West Sea, Mekrita Central Prairie, Mekrita East Sea--
20-30
Islaba Damp Area, Frishcroll--
31-34
Owalljae Prairie--
35-39
Tamer´s Field, Valcan Acess Road, Summer Snow Field--
40-44
Southern Rudis, Twin Valley, Fork Road--
45-50
Valcan Valley--
51-60
White Prairie, Valcan Valley--
60-70
White Prairie, Dragon/Metal/Plant/Bird RoomPara entrar em Dragon/Plant/Metal/Bird Room, você deve ir até "Folk Road" (ao lado de VeHeserba) e falar com o NPC Dungeon Master (X: 115, Y: 125). Clique na primeira opção duas vezes para entrar.
70-93
Dragon/Metal/Plant/Bird Room, White Seashore--
94-110
Lunacy dungeonPara entrar em Lunacy, você precisa coletar 10 Rosas dropado pelos MindFlayer (Odaba Swamp Area). Para entrar em Lunacy Dungeon, você precisará coletar 10 Devil Invitation dropado pelos Ordevil.
111 +
Iskai Forest, Ruins of Silence, Sinan Ruins--

quarta-feira, 25 de junho de 2014

Oi.

Oi! Faz um bom tempo que eu não entro aqui, não é? E sinceramente é uma grande surpresa ver que o Blog ainda continua "ativo" por sí só. Fico feliz que meus guias ainda estejam ajudando pessoas de alguma forma. 
Bem, eu decidi voltar aqui hoje por nenhuma razão especial, mas sinto que eu deveria ter esclarecido algumas coisas antes de ter sumido de repente. 

De qualquer forma, espero que este post esclareça algumas dúvidas para quem estiver interessado.


O Blog acabou?
- Não.

Você vai continuar a postar algo?
- Talvez sim. Talvez vocês não saibam, mas eu não ganho um centavo com este blog e isso para mim é só um lazer.

Você vai continuar "X" guia que você deixou para trás?
- Não.

Você anda ocupado?
- Eu sou um grande desocupado. E mesmo se estivesse, eu com certeza arranjaria tempo para postar algo - se este fosse o problema, é claro.

Por que parou de postar?
- Falta de conteúdo. Na verdade eu sou muito chato para gostar de jogos novos, e esse é o motivo pelo qual o blog sempre teve uma variedade muito baixa. Em compensação, quando eu gosto de um, eu o devoro, até não sobrar mais nada para fazer nele. Por esse motivo, eu não gosto de jogos "infinitos" ou com um "end game" fraco e/ou pouco recompensador em comparação ao esforço. Eu adoro escrever e jogar tempo fora e aqui eu posso fazer os dois ao mesmo tempo. Se eu tivesse um guia muito interessante para fazer, eu certamente faria.

E cá entre nós, este não é o primeiro blog que eu abandono do nada, e devo desculpas á vocês e principalmente para aqueles que eu fiquei devendo algum guia... embora eu não prometo que eu não irei fazer isso de novo.

Pretende postar algo?
- Não quero prometer nada. Se eu tiver vontade, certamente irei postar algo. O tema principal do blog, "JOGOS", me abre muita liberdade para postar o que eu quiser, inclusive a parte da programação, que eu gosto bastante.

Qual projeto você anda trabalhando no momento?
- Algo simples, só para passar o tempo. Na verdade ele é mais um exercício para manter o que eu sei "fresco". Eu tenho umas screenshots prontas dele então vou postar aqui embaixo.

Uau! Data de lançamento desse projeto??
Não tem. E eu não esperaria por ele se fosse você. Eu adoro enfeitar partes do jogo que realmente não importam e deixo de fazer as partes realmente importantes, necessárias para o funcionamento do jogo (como os Bosses) e, sinceramente, eu não estou com muito saco para fazer isso. Não agora. Mas eu mexo nele sempre que bate saudades. :)

E a vida pessoal, novidades?
Ocupado, correndo atrás de alguns documentos e brevemente iniciando faculdade de ciências da computação. Isso quer dizer que em pouco tempo eu irei aparecer aqui mais vezes para reclamar do que eu me meti e como matemática lógica não é o meu forte (mas vai valer a pena :)) ).

Você tem algum contato pessoal, posso adicionar você em algum lugar?
Eu não ficaria nada confortável em passar qualquer contato, especialmente aqui. Desculpe, eu tenho vergonha de falar com estranhos sem ser pessoalmente.

Anda jogando algo? Posso jogar com você?
Eu estava jogando LOL, mas eu só jogo com os amigos para brincar. Eu não jogo partidas ranqueadas pois meu PC não me ajuda (eu uso notebook) e minha Internet não me ajuda (eu uso GVT). E tem dias que ambos decidem não me ajudar ao mesmo tempo, então eu nem perco meu tempo. Fora isso, não, eu não tenho jogado mais nada. Só Throne Rush pelo meu celular, que é aqueles tipos de joguinhos que você demora 5 dias para construir um castelo que libera outras coisas que demoram mais 3 dias, cada uma, para serem construídas, e assim infinitamente (é um joguinho muito legal. Você pode jogar ele pelo Facebook, mas ele é meio bugado e depois de um tempo você vai ficar meio puto por ele esquecer frequentemente de computar os resultados de suas vitórias e etc).

Acho que isso é tudo que eu precisava esclarecer aqui. Abraços, fiquem bem, e tchau.



:) 

sexta-feira, 9 de agosto de 2013

[Neverwinter] Só testando um pouco.

Estou testando um pouco o Neverwinter. Parece ser um jogo muito complexo e bastante complicado, então não entendi muito sobre ele até agora. Não faço a mínima idéia de como o jogo vai prosseguir, tudo que pude notar é que o jogo é bonito e o combate parece ser rápido. A primeira impressão que eu tenho que a primeira Run (do nível 1 até o nível máximo) será divertido, e logo em seguida começara aquela Gear Run (busca incessante por melhores equipamentos) que todo MMO tem, só espero que ele me surpreenda mais do que isso. 

Se você quiser testar também, nw.perfectworld.com.

Ah sim. Á menos que você goste de fazer sequências de missões intermináveis e matar hordas de inimigos às cegas sozinho, eu recomendo que você chame pelo menos um amigo para fazer as missões no cooperativo.

Até mais.