domingo, 22 de março de 2015

[Gamer Maker] Aula 0: aprendendo a lidar com GML!

Neste prefácio da Apostila de manuais de GML, eu irei passar um apanhadão sobre como funciona a GML e entregar á vocês noções básicas importantes que irão adiantar a sua vida.

A GML, ou Game Maker Language, é na verdade muito simples de primeira instância. Ela foi planejada para facilitar a vida de novos programadores, ao mesmo passado que adianta o trabalho de programadores experientes e da á eles liberdade ilimitada quando o assunto é 2D. O Game Maker na verdade foi foi para ser usado principalmente em seu sistema fácil de Drag'n'Drop, ou seja, você cria um jogo somente pegando e puxando ícones que executam determinadas funções e altera os valores de acordo com a sua vontade. É possível fazer um jogo perfeito e extremamente funcional sem ter a mínima noção sobre escrever códigos ou coisas do tipo, porém, é muito importante você se acostumar a criar seus jogos diretamente da GML, pois assim você não se limita e acelera em muito o seu trabalho.

Índice:
1. Termos comuns
2. Lógica e operações matemáticas
3. Constantes e variáveis pré-definidas
4. Finalização

1. Termos comuns:
O executável do GML funciona na base de objetos, rooms e scripts. O jogo só lê as instâncias que estão contidas na room atual, e as instâncias funcionam á base dos scripts. Aliás, você sabe o que é room e instância e quaisquer seja esses termos?

Vamos com calma então. Primeiro, deixe-me dar um pequeno "dicionário" de termos muito utilizados.

Instância: nome dado ao representante do objeto dentro da room, enquanto o jogo roda. Por exemplo, existe o objeto obj_inimigo_dragao. Dentro de uma room, chama rm_ninho_do_dragao, existem 10 instâncias do obj_inimigo_dragao. Você programa uma vez, e depois espalha pelas rooms.

Room: sala, ambiente, local. Pode ser um ambiente jogável, uma sala de menu, uma sala de cinemática, uma sala de opções do jogo, etc.

Views: são câmeras. Podem ser fixadas em algum lugar para manter o jogador com a tela fixa, ou podem ser atribuídas á um objeto, como o jogador, por exemplo, para fazer com que ela o siga durante a room.

Eventos: ocasiões em que os códigos são executados nos objetos. Exemplo: você atribui um código para quando o inimigo é criado, para definir as variáveis necessárias para o seu funcionamento, um outro código para ser executado constantemente enquanto ele existir para tornar sua I.A funcional, e um outro código para quando sua instância for destruída, para criar uma pilha de moedas.
Visible: torne o objeto visível ou invisível. Um objeto invisível ainda é completamente existente e possui funções de colisão. É muito útil para criar switches invisíveis e acionamento de armadilhas, por exemplo.

Mask: Área de colisão do objeto, independente do seu Sprite.

Parent: "Pai" do objeto, no qual ele irá copiar todos os eventos dos quais ele não tem nenhum código adicionado. Extremamente útil, pois com este recurso você pode, por exemplo, configurar apenas três tipos de inimigos e depois criar centenas de outros inimigos ligados apenas aos três iniciais, apenas com modificações em sua vida, dano, experiência, velocidade, sprites, habilidades... evitando assim ter que fazer as mesmas coisas diversas vezes. Isso é útil também para criar uma classe inteira de eventos em comuns, como por exemplo os "itens", os "npcs", os "obstáculos", nos quais todos se comportarão quase da mesma maneira, modificando uma coisa ou outra entre cada um.

Solid: variável pré-definida que interfere em ações de colisões. Um objeto solido é tratado pelo jogo como algo que não deve permitir a passagem de outros objetos no qual ele possui algum evento ou relação de colisão, porém isso não significa que ele seja impenetrável e que outros objetos que não possuem relação com ele passem por cima, ignorando-o.

Depth: profundidade visual do objeto. Quanto mais Depth, mais abaixo o objeto fica. Por exemplo: um objeto de depth 1 fica sempre, independente da situação, visualmente abaixo de qualquer objeto de depth 0 ou maior. Um objeto com depth -10000 fica sempre acima visualmente de qualquer objeto de depth -9999 ou menos. Isso é muito útil principalmente de criar enfeites que devem sempre permanecer abaixo de tudo, como flores, para impedir que itens fiquem encima das personagens ou que a interface do jogo fique com coisas atrapalhando.

Persistent: um objeto persistent é transferido de room em room, mantendo sua posição (X,Y). Você pode usar isso para transportar controladores invisíveis importantes ao seu jogo (como um objeto que segura dados de pontuação e desempenho do jogador) ou para transportar certos objetos á uma room específica e depois "desligar" seu Persistent, deixando-o lá. Com isso, me vem à mente trabalhar com personagens que Quests, por exemplo, que geralmente o seguem até o local designado e depois não aparecem mais. Uma room também por ser persistent, ou seja, ela se mantém da mesma maneira que foi deixada quando o jogador reentra, útil para salvar, por exemplo, uma casa pessoal personalizada do jogador ou coisas do tipo.

2. Lógica e operações matemáticas
A lógica da GML também é bem simplificada, não é a toa que é uma boa porta para a entrada de novos programadores. Ela utiliza-se da linguagem matemática simples para fazer suas atribuições, como > (maior), < (menor), == (igualdade comparativa), = (atribuição de um valor)... segue abaixo uma lista destas igualdades lógicas e operações matemáticas:

Comparações lógicas:Significado e uso:
Maior
<Menor
>=Maior ou Igual
<=Menor ou Igual
==Igualdade comparativa
=Atribuição de um valor (nova igualdade)
+=Soma
-=Subtração
*Multiplicação
/Divisão
|| (ou or)"ou"
&& (ou and)"e"
!Inversão. Transforma true em false e vice-versa, e igualdades em desigualdades.
sqrt(x)Raíz quadrada de X
sqr(x)X ao quadrado (X²)
random(x)Valor real aleatório entre 0 e X.
random(x,y)Valor real aleatório entre X e Y.
irandom(x)Valor real inteiro entre 0 e X.
irandom_range(x,y)Valor real inteiro entre X e Y.
round(x)Arredondamento para mais ou para menos.
ceil(x)Arredondamento para mais.
floor(x)Arredondamento para menos.
mean(x,y,z,w...)Moda entre os valores.
median(x,y,z,w...)Mediana entre os valores.
min(x,y,z,w...)Retorna o menor valor.
max(x,y,z,w...)Retorna o maior valor.
choose(x,y,z,w...)Retorna um valor aleatório dentre os especificados.
Entre outros mais, como sin, cos, tg, log...

3. Constantes e variáveis pré-definidas:
Já na parte das variáveis, saiba que todos os objetos do Game Maker são criados já com um pacote de variáveis pré-definidas (claro que o programador pode adicionar infinitas mais, quando quiser). Isso tem um lado bom e um ruim. O lado bom é que pode poupar ao programador de executar ações básicas desnecessárias, como atribuir uma variável de velocidade á um objeto toda vez que quiser que ele se mova, ou atribuir uma nova variável toda vez que o programador quiser que ele torne-se invisível ao jogador. O lado ruim é o custo de memória usada muitas vezes para nada, pois cada instância vem com um pacote de variáveis nas quais o programador sequer irá mexer alguma vez. 

Segue um listão então das variáveis e constantes pré-definidas:

Constante ou variável pré-definida:Significado e uso:
ifCondição"se".
Exemplo: if speed > 0 {image_speed = 1}
Se a velocidade for maior que 0, a velocidade da animação será de 1:1 ao framerate da room.
elseCondição "ou", "se não".
Exemplo: if speed < 0 {image_speed = 0} else {image_speed = 1}
Se a velocidade for menor que 0, a velocidade da animação será nula, se não, ela será de 1:1 ao framerate.
while e doCondição "enquanto... for... faça..."
Exemplos: while image_speed > 1 do {image_speed -= 0.1}
Enquanto a velocidade de imagem for maior que 1, faça ela diminuir 0.1.
switchConjunto compacto e de rápida execução de vários "if" e um "else" para uma única variável.
Exemplos: switch(var_nota)
{
case 8: var_message="Melhore um pouco!"; break;
case 9: var_message="Quase lá!"; break;
case 10: var_message="Excelente!"; break;
default: var_message="Estude mais!"; break;
}
trueEquivale á 1.
Exemplo: (var_teste = 1) é o mesmo que (var_teste = true)
falseEquivale á 0.
Exemplo: (var_ligado = 0) é o mesmo que (var_ligado = false)
repeat(x)Repete a próxima ação ou bloco X número de vezes.
Exemplos: repeat(3) instance_create(x,y,obj_enfeite);

repeat(global.var_numero_de_pontos)
{
obj_jogador.var_recurso_energia += 1;
obj_jogador.var_recurso_forca += 1;
obj_jogador.var_fome -= 10;
}
globalAlgo que engloba o próprio jogo, e não uma instância ou room específica.
Exemplos: global.var_numero_de_pontos += 100;
global.var_numero_da_fase = 3;
global.var_nome_do_jogador = "Felipe";
allTodas as instâncias da sala.
xCoordenada X (horizontal).
yCoordenada Y (vertical)
xstartValor inicial X da instância no momento que foi criado na room. Não pode ser alterado.
ystartValor inicial Y da instância no momento que foi criado na room. Não pode ser alterado.
selfA própria instância, retorna em forma do id dela.
Exemplo: uuu = instance_create(x, y, obj_magia_de_cura)
uuu.var_alvo_para_curar = (self);
idO número da instância. Funciona como "RG" dela. Nenhuma instância, nunca, tem o mesmo id igual, ou seja, é uma boa forma de acrescentar funções únicas á uma instância específica.
Use sempre entre ( ) parênteses. (id).
nooneNada e Ninguém. Normalmente usado para zerar uma variável, completamente.
Exemplo: var_meu_alvo = noone;
if var_tesouro_do_bau != noone {instance_create(x, y, var_tesouro_do_bau) }
otherUsado só em eventos de colisões, refere-se ao objeto em que você colidiu.
Exemplos: with other do instance_destroy();
other.var_recurso_vida -= 1;
orEquivale á ||, "ou".
andEquivale á &&, "e".
livesVariável global de "vida" pré-definido.
Exemplos: if lives == 0 {room = rm_gameover;}
lives += 4;
lives -= 1;
healthVariável global de "energia" pré-definido. Mínimo de 0 e máximo de 100.
Exemplos: if health == 0 {room_restart(); lives -=1; sound_play(snd_morte)}
scoreVariável global de "pontuação" pré-definido.
Exemplos: 
score += 50;
score += irandom(80);
score += irandom_range(20, 200);
mouse_xCoordenada X do mouse. 
mouse_yCoordenada Y do mouse. 
sprite_indexSprite no qual o objeto está usando no momento. Pode ser usado para definir um novo sprite existente naturalmente.
Exemplos: if sprite_index == spr_super_personagem {var_poder = 90;}
sprite_index = spr_item_poder;
sprite_index = 68;
mask_indexMask no qual o objeto está usando como área de colisão. Assim como o sprite, pode ser normalmente trocada.
Exemplos: if sprite_index = spr_objeto_grande {mask_index = spr_mask_grande;}
mask_index = spr_mask_circulo32x32;
image_indexNúmero da subimagem do sprite atual. Pode ser alterada normalmente.
Exemplos: if speed == 0 {image_speed = 0; image_index = 0;}
if image_index == 0 {var_velocidade += 1;}
image_speedNúmero que é constantemente adicionado ao image_index para ocorrer a animação.
Exemplos: image_speed = 0.25;
if image_speed <= 0 && speed > 0 {image_speed = 0.5;}
image_numberNúmero de subimagens total do sprite utilizado no momento. Embora uma "variável", não pode ser alterada durante o jogo.
image_angleÂngulo, em graus, da imagem. Lembre-se que 360º = volta completa = 0º.
Exemplos: image_angle += 10;
image_angle -= 36;
image_angle = 75;
image_angle = direction;
image_alphaTransparência da imagem, entre 0 (totalmente invisível) e 1 (totalmente opaco).
Exemplos: if var_morto == true 
{
image_alpha -= 0.1; 
if image_alpha <= 0 {instance_destroy();}
}

image_alpha = 0.5;
directionDireção, em graus, do objeto. Ou seja, para onde está virada a "cara" dele.
image_xscaleProporção de tamanho de imagem:tamanho original, horizontalmente.
Exemplos: image_xscale = 2;
image_xscale += 1;
image_yscaleProporção de tamanho de imagem:tamanho original, verticalmente.
Exemplos: image_yscale = 2;
image_yscale += 1;
solidVariável que interfere em eventos de colisão e de movimentação. Um objeto sólido é tratado diferentemente nessas ocasiões, mas não necessariamente é impenetrável.
alarm[0,1,2,3...11]Aciona o alarme selecionado, depois de um momento especificado.
Exemplos: alarm[0] = 30;
alarm[3] = 45;
alarm[7] = 300;
alarm[4] = 900;
alarm[11] = 5;
sleep(x)Congela o jogo totalmente por x milissegundos.
Existem centenas de outras variáveis pré-estabelecidas. Eu só listeis as mais importantes, as mais básicas e as mais utilizadas normalmente.

4. Finalização: 
Existem também algumas convenções matemáticas que são importantes lembrar. O valor de 30 unidades em alarms significa 1 segundo real, 60 unidades em alarms, 2 segundos, 450 unidades em alarms, 15 segundos reais para o alarm ativar.

Tudo (ou 99,9999%) pode ser alterado via código. Enfim... muita coisa ainda deve ser explicada! Use esta postagem como referência fácil enquanto você acompanha o restante da apostila. Espero que eu tenha ajudado em algo! Até a próxima!

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.



:)