Mostrando postagens com marcador Passo-a-passo. Mostrar todas as postagens
Mostrando postagens com marcador Passo-a-passo. Mostrar todas as postagens

segunda-feira, 23 de março de 2015

[Game Maker] Aula 1: Meu primeiro personagem!

Olá! Neste guia, eu irei focar em dar dicas preciosas para alguém que está iniciando agora na GML, para começar com o pé direito!

Ao iniciar o trabalho em qualquer programa novo, é normal ficar perdido. O que fazer primeiro? Como fazer as coisas? O que é importante? Devo me preocupar com isso agora? São essas e muitas outras perguntas que passa pelas nossas cabeças. Mas, não se preocupe. Este guia foi feito para lhe abrir o caminho principal, do início até o Boss da fase! Não deixaremos nenhum item importante para trás!

Caso você não esteja muito familiarizado com a interface do Game Maker, sugiro que dê uma olhada na seção Introdutória antes. Então, vamos lá. Neste guia eu abordarei criação de personagens, inimigos básicos, obstáculos básicos, armadilhas básicas e salas simples. Para os mais avançados, já aviso que não entrarei em detalhes como Views, 

Índice:
1. Preparações básicas
2. Faremos o primeiro personagem

1. Preparações básicas:
Para viajarmos no conteúdo desse módulo inicial, vou propor um desafio essencial em qualquer jogo: criar o personagem controlável pelo jogador. Vale lembrar que eu sou um adepto ao estilo RPG Top-Down, então é neste estilo que eu irei usar para exemplificar.

Padrões do jogo:
Todos os jogos precisam de um padrão, para que permaneçam no mesmo estilo do começo ao fim. Para isso, você deve estabelecer primeiro alguns pontos de referência para depois sair criando todas as coisas.

No meu caso, o padrão de jogo é o seguinte:
Estilo: Top-Down (vista de cima, sem gravidade, personagem move-se para qualquer direção)
Tamanho da máscara: 16x16 (explicarei o que é isso já já!)
Origem da máscara: X:8 Y:8
Tamanho dos sprites: aproximadamente 16x16

Primeiro passo: criar uma sprite. Estas sprite deverá ser de tamanho padrão, contendo apenas uma subimagem de um círculo perfeito (é importante que ele esteja perfeito, cobrindo a imagem toda! Se precisar, use a tecla Shift enquanto faz o círculo) de qualquer cor opaca. Nas opções de Origem da imagem (Origin, como visto na imagem abaixo), marque x:8 y:8 (pois é o centro de uma imagem 16x16) ou simplesmente aperte o botão "Center" uma única vez. Algo parecido com isso:
Este tipo de sprite é importante para todos os jogos 2D, pois ele funcionará como uma "máscara" para todas as outras coisas. Em outras palavras, este círculo vermelho vai funcionar nos bastidores do jogo como uma espécie de área de contato para o jogador, inimigos, paredes, armadilhas... todos são círculos, só que o jogador não vê isso (claro que é possível criar infinitos tipos de máscaras, como quadrados, triângulos, maiores, menores, irregulares, ou todas elas juntas. Mas não iremos complicar muito por agora)!

Deixar a origem da imagem no centro é importante, como já dito, para o nosso progresso funcionar corretamente. Eu particularmente não tinha este recurso quando comecei a usar o Game Maker, e me acostumei a trabalhar sempre sem ele, deixando as origens das minhas imagens x:0, y:0. Isso, na verdade, sempre me dá trabalho adicional, mas o ponto que eu quero chegar é que deixarmos o ponto de origem da imagem centralizado é uma ótima convenção. Recomendo você começar desde já com este costume.

Conclua e coloque o nome da nossa máscara exatamente assim: "sprite_mask_padrao16x16". Feito isso, crie uma pasta chamada "Sprites importantes" na seção dos sprites (Botão Direito sobre a pasta fixa dos Sprites > "Create Group"). Coloque nossa máscara padrão nesta pasta de sprites importantes. A razão dela estar ali é que será um recurso que usaremos durante todo o jogo.

Só com isso já podemos ir para o próximo passo!

2. Faremos a primeira personagem
É mais que claro que quando pegamos um jogo qualquer com a personagem principal que aparentemente consegue destruir tudo, matar hordas de inimigos, gigantes, dragões, e todos os tipos de criaturas utilizando um arsenal mitológico de armas mágicas e poderes proibidos no qual ele vem adquirindo por toda sua aventura, e tudo isso sozinho, nos sentimos impressionados.

Muito bem, não vamos fazer nada disso. Ainda.

A verdade é que para fazer todos esses tipo de coisa, não é necessário ser nenhum Expert em GML. Basta dominar o básico, ter muita imaginação e muita paciência para aplicar o que você quer dentro do seu jogo. Como o objetivo deste guia é deixar as coisas claras, e não complicar sua vida, faremos uma personagem que apenas anda, ataca e coleta itens, ok? Muito bem, criaremos o primeiro objeto do jogo... a personagem!

Crie um objeto chamado "objeto_jogador_geral". Faça as coisas mais básicas nele já, colo marcar o check-up de Solid e adicionarmos a mask dele (que fizermos anteriormente). Como já dito, a máscara transforma o personagem num eterno quadrado para o funcionamento do jogo, que ajuda a impedir muitas situações de travamento em paredes e em inimigos enquanto anda ou ataca. Deixe-o de lado um pouco.

Voltamos ás sprites. Agora é a hora que os seus dotes artísticos falam mais alto, mas como o objetivo é simplificar, vamos usar o sistema de preguiçoso: uma única sprite animada para cada ação da personagem, que gira de acordo com a sua direção com uma função chamada image_angle. Vale lembrar que isso só funciona na versão paga do GM, e caso você não tenha adquirido-a, não se preocupe, pois nos guias seguintes abandonaremos o método do preguiçoso e usaremos algo que todos possam usar, algo que dá significantemente mais trabalho e resulta em cerca de 21 animações diferentes para uma única personagem.

Crie uma sprite chamada "sprite_jogador_andar". Faça-o no mesmíssimo padrão que fizemos a mask: tamanho 16x16, origem centralizada (não se esqueça!). Desta vez você pode colocar várias subimagens na sprite para fazer uma animação do personagem andando. Uma animação básica leva cerca de 4 subimagens, animações complexas podem levar números altos. De qualquer forma, isso não vai alterar na jogabilidade do nosso jogo. Um exemplo de animação básica que quebra um galho:

Se quiser salvar essa imagem e usá-la você mesmo:

Feito isso, deixe-a de lado e faremos outra animação necessária, seguindo sempre a mesma idéia. A nova sprite deverá se chamar "sprite_jogador_atacar". Neste caso, apenas 4 subimagens é muito pouco. Tudo vai depender da sua técnica e da sua capacidade artística. Outro detalhe, neste caso eu não usei uma sprite 16x16, e sim uma 20x20, para ter mais espaço para fazer a animação de ataque. É importante notar isso pois neste caso, a origem da imagem não pode ser centrelizada, e nem igual ás anteriores! (ou a imagem ficará deslocada quando o personagem atacar!). Caso você use a minha animação, o ponto de origem para que ela se alinhe com as outras animações é x:8, y:10. Caso você use a sua própria, você terá de alinhar a imagem conforme o necessário.

Imagem para salvar:

Certo, já temos as duas animações mais importantes! Normalmente uma personagem teria dezenas de animações, como pular, usar cada habilidade, morrer, descer e subir escadas, enfim, uma infinidade de ações visuais, mas não vamos nos preocupar com nada nisso agora. Vamos deixar só por isso mesmo.

Voltemos ao nosso "objeto_jogador_geral". Coloque a sprite padrão dele como "sprite_jogador_andar", e vamos começar a trabalhar encima dele. Primeiramente, deixe-me dar uma rápida refrescada de como funciona os eventos dos objetos:

1) O Create Event, Game Start e Room Start são eventos de inicialização. Tudo que você colocar dentro deles será feito em primeiro lugar, útil para estabelecer as regras.
2) O step event padrão é onde todos os códigos que precisam ser executados o tempo todo, de novo e de novo, até que o objeto seja destruído ou passe para uma outra room, como por exemplo scripts para os inimigos andar.
3) Os eventos de Colisão ocorrem ao bater o objeto em que a colisão é especificada, isso é muito importante para impedir que o jogador adentre a parede, por exemplo.
4) Existem outras dezenas de tipos de eventos, dos quais são úteis em situações específicas. Logo você descobrirá quando usar cada um deles, mas agora não é importante.

Para adicionar qualquer evento, apenas clique no botão "Add Event" e selecione qual você quer atribuir ao objeto. Usaremos todos os eventos vistos na imagem abaixo: Create Event, Step Event, Cinco funções para o teclado, o Event Other Animation End e um evento de Colisão. Eventos que ficam vazios somem automaticamente ao concluir a edição do objeto, então não se preocupe se você adicionar o evento errado. Por este mesmo motivo, não se preocupe em criar todos os eventos agora, fique calmo, e eu direi quando você deverá fazê-los.

Certo! Agora, no Create Event do "objeto_jogador_geral", crie uma folha de código vazia. Escreva apenas isso:

{
//Setup do personagem
var_atacando = false;
}

Acabamos de criar uma regra para o objeto. Agora ele reconhece uma nova variável, a tal da "var_atacando". Ele não sabe o que é isso, ele não sabe o seu propósito, e ele não faz a menor idéia de sequer vai usá-la alguma vez, mas o importante é que ele já conhece, e para ela foi atribuído um valor: false. Isso é equivalente ao binário 0. Para o computador, 1 e 0 é como sim ou não: tudo depende da pergunta. E agora que ele conhece a sua nova variável "var_atacando" e sabe que é "false", nós podemos utilizá-la para algum propósito. Para nós, é um pouco óbvio do por quê ela vai servir mais á frente, mas para o computador não - lembre-se sempre disso.

Agora vamos ao Step Event do objeto jogador. Crie outra folha de código vazia e este provavelmente será o maior código, onde atribuiremos um monte de novas regras que o nosso personagem deverá seguir para o jogo funcionar como o esperado. Estas regras serão totalmente lógicas: com um pouco de conhecimento básico em inglês e matemática, não será muito difícil você entender o que está se passando.

Eu também adicionei uma série de comentários no meio do código para ajudá-lo á entender a lógica. Para facilitar ainda mais (uau!), vamos dividir este código em quatro etapas só para questões didáticas (as quatro partes podem estar numa mesma folha de código, sem problema nenhum, porém você deve se lembrar que não é permitido separá-los em quatro grupos de {} chaves diferentes sem mais nem menos, logo evite copiar o código com as { chaves iniciais e as chaves finais }), assim, você poderá estudá-las separadamente sem precisar criar conexões entre elas.

Primeira etapa do step event: configuração rápida visual do jogador:

{
//1. Vira a sprite do jogador na direção que ele está no momento
image_angle = direction;
}

Antes de continuarmos o código do step event, vamos fazer com que o jogador se movimente. Para isso, temos que ensiná-lo como, e quando se movimentar. Adicione agora quatro eventos de teclado: um para virar á esquerda, outro á direita, outro para se mover á frente e outro para recuar. Eu recomendo as setas do teclado: Keyboard Up, Keyboard Down, Keyboard Left e Keyboard Right (use a imagem acima para ajudar na identificação se necessário). Você também pode usar o padrão "WASD".

No evento do botão para virar á esquerda (left), adicione o seguinte código:
{
//Lembre-se que uma rotação circular completa é 360 graus. Isso explica o número abaixo.

if direction < 360
    direction += 9;
else
    direction = 0;
}

No evento do botão á direita (Right), o exato oposto do código acima:
{
if direction >= 0
    direction -= 9;
else
    direction = 360;
}

No evento do botão para mover-se á frente (Up):
{
//A velocidade deve ser proporcional ao tamanho dos sprites que você vai usar. Esse valor mostra quantos pixels o objeto se move por ação. Neste caso, como o jogo utiliza um padrão de tamanho 16x16, 3 pixels por movimento é uma velocidade agradável: nem muito lerdo, nem muito rápido.

speed = 3;
}

E por fim, no evento de recuar (mover-se para trás, Down).
{
//Velocidade negativa = move-se na direção contrária. É interessante sempre colocar uma velocidade menor neste caso, pois é comum a personagem andar mais lenta para trás.

speed = (-2);
}


Muito bem. Agora, que atribuímos ás teclas direcionais a função de dar direção e velocidade ao nosso personagem, precisamos colocar nele um freio. Não fazer isso seria igual fazer um carro que só possui o acelerador: ele não para mais. E não existe ar no nosso jogo, logo, é quase uma simulação de vácuo: o personagem nunca vai perder essa velocidade adquirida.

Isso, é claro, não está certo. Pelo menos não nesta ocasião, então, para concertarmos isso, voltaremos ao código do Step Event para completá-lo mais uma vez. Já aviso: acostume-se sempre em viajar por entre os diferentes eventos ao montar qualquer coisa: nenhum evento age completamente isolado, um está dependendo do outro.

Segunda etapa do step event: questões de movimentação e de animação de movimentação

{
//Vale lembrar que o Game Maker possui uma série de variáveis pré-estabelecidas, como por exemplo: speed, image_speed, image_index, direction, etc...

//2. Se a speed do jogador for maior ou menor que zero...
if (speed > 0 || speed < 0)
    {
    
    //Diminui a velocidade do personagem, como um carro: desacelera ele quando o jogador parar de acelerar
    if speed > 0
        speed -= 1;
        
    //Velocidade negativa: anda na direção oposta, ou seja, para trás.
    if speed < 0
        speed += 1;
    
    //Faz com que a animação de andar aconteça
    image_speed = 0.25;
    
    }
}

Se você analisar o código acima, perceberá diversas programações lógicas extremamente simples que, como já dito, com um conhecimento básico em inglês e matemática, mesmo sem os meus comentários, você é capaz de perceber o que cada parte do código faz. Vale lembrar que ao montar um código, a ordem da cadeia lógica pode ser importante.

Agora, vamos deixar novamente o Step Event de lado. Vamos adicionar uma nova habilidade ao nosso personagem. Aquela que estávamos planejando desde o início, no Create Event: permitir que o personagem possa atacar. Nós já trabalhamos na animação do ataque do personagem anteriormente, agora é hora de a implantarmos nele. Para fazermos isso, nós precisaremos criar um novo objeto: o "objeto_ataque_geral". Como o próprio nome já diz, ele será o que de fato irá machucar os inimigos, e os inimigos o usarão para nos machucar.

O objeto_ataque_geral deverá ter a Mask e a Sprite da nossa "sprite_mask_padrao16x16", e também aplicaremos um novo conceito: desmarcaremos a opção Visible, ou seja, em código, visible = false. Quando não é visible, ele ainda existe, ele ainda está lá, e ele ainda faz tudo o que deve fazer. A diferença que o jogador não pode vê-lo, e é isso que nós queremos que a área do nosso ataque seja: algo que exista, mas que não fique visível ao jogador.

No Create Event do objeto_ataque_geral também usaremos algo extremamente útil, os Alarms. Ao todo, existem 12 alarms diferentes. Alarms são eventos que são ativados depois de um período determinado, executam o código atribuído á eles e depois só são executados novamente se forem acionados novamente. É exatamente igual um despertador da vida real: a diferença que este daqui não serve para fazer barulho. Os alarms são acionados pelo seguinte código:

Padrão: alarm[numero do alarm, entre 0 e 11] = (segundos que o alarm demora para acionar*30)
Exemplos: alarm[0] = 45; alarm[3] = 180; alarm[2] = 30; alarm[11] = 300 (Demoram 1.5, 6, 1 e 10 segundos para serem acionados, respectivamente). Bem, só usaremos um único Alarm por agora. Pode ser qualquer um, mas por convenção usaremos o alarm[0].

O alarm[0] do objeto_ataque_geral o destruirá, para que o ataque não fique existindo para sempre. Neste caso, atribuiremos uma vida útil rápida de um ataque, neste caso, 1/6 de segundo é o suficiente. No Create Event do objeto_ataque_geral colocaremos então:

{
//Lembre-se: 30 = 1 segundos, 60 = 2 segundos, 150 = 5 segundos, 300 = 10 segundos...)
alarm[0] = 5;
}

Agora, criaremos o evento do Alarm 0 ainda no objeto_ataque_geral e colocaremos o seguinte nele:
{
instance_destroy();
}

Como ainda não temos nenhum inimigo, deixaremos o ataque por isso mesmo. A verdade é que só precisamos disso para terminarmos a nossa personagem, depois nos preocupamos com o resto. Deixe o objeto_ataque_geral de lado e voltemos ao objeto_jogador_geral.

Muito bem. Agora vamos criar um novo evento de teclado. Eu escolhi a tecla Barra de Espaço para funcionar como tecla de ataque, mas você pode escolher qualquer outra de sua preferência.

No evento da tecla de ataque, atribuiremos o seguinte código:

if var_atacando == false
    {
    //Avisamos ao jogo que o personagem iniciou um ataque.
    var_atacando = true;
    
    //Criaremos uma instância do objeto_ataque_geral. "aaa" é como queremos que o jogo interprete o ataque criado. Pode ser qualquer outro nome, como "i", "yy", "var_ataque", "ataquecriado", etc...
    aaa = instance_create(x, y, obj_ataque_geral);

    //Então atribuímos variáveis para o ataque criado, no qual o jogo aprendeu que é o tal do "aaa".
    aaa.speed = 4;
    aaa.direction = direction;
    
    }

Certo. Agora, o jogador efetivamente "ataca". Mas para que isso seja 100%, precisaremos retornar ao Step Event para concluirmos as últimas etapas que darão vida ao personagem. Adicione as últimas peças de códigos que concluem a lógica:

Terceira etapa do step event: alternar corretamente entre a animação de andar e atacar
{
//3. Se o jogador estiver atacando...
if var_atacando == true
    {
    //Animação de atacar...
    sprite_index = spr_jogador_atacar;
    image_speed = 0.25;
    }
else
    {
    //Se não... ele tem a animação de andar.
    sprite_index = spr_jogador_andar;
    }
}

Última etapa do step event: toques finais para sofisticar mais a animação do personagem e evitar erros
{
//4. Caso o jogador não esteja andando nem atacando, a velocidade da animação dele zera e a subimagem volta ao zero
if (speed == 0 && var_atacando == false)
    {
    image_speed = 0;
    image_index = 0;
    }
}

Ótimo! Antes de realizar um rápido teste, temos que fechar o círculo ainda para que não haja nenhum erro. Ainda falta uma coisa importante! Veja só, para nós, o circuito se fecha no momento que o jogador lança o ataque, e este é destruído, e o jogador volta á sua posição original, pronto para realizar outro golpe, certo? Certo! Mas para o computador, não é tão simples. Ele não compreende isso, e por isso precisamos ensiná-lo o momento certo em que o ataque do jogador é finalmente finalizado. Na etapa do botão de ataque, como fizemos acima, nós avisamos que o jogador iniciou um ataque. Agora, temos que avisar que o ataque é finalizado no exato momento que o jogador guarda o seu punhal no bolso. Para a nossa sorte, existe um Evento que demarca este exato momento: Animation End.

Adiciona o evento Animation End no objeto_jogador_geral e adicione o seguinte código:

{
if var_atacando == true
    var_atacando = false;
}

Pronto. Agora o círculo se fecha: temos uma história com começo, meio e fim. Quando isso acontece, é sinal de que algo já está em pleno funcionamento e pronto para ser testado. Então, o que está esperando?


Salve o seu progresso, coloque o objeto_ataque_geral como visible temporariamente para que você conseguia ver se realmente existe um ataque saindo na direção certa da personagem enquanto ela ataca. Crie uma room qualquer e dê o nome de rm_testroom. Durante o teste, observe se a animação da personagem volta à posição original após o ataque, observe se ela anda em todas as direções (inclusive para trás).

Caso tudo ocorra bem, parabéns! Você conseguiu, e o mérito foi todo seu! Caso algo tenha dado errado, analise o que não está dando certo, volte atrás no passo que corresponde ao erro e observe o que está faltando.

Acho que estamos mais que prontos para ir para o próximo passo!

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

sábado, 20 de julho de 2013

[Mix Master] Todas as missões (quests) disponíveis

Oi pessoal, bem? Eu andei vasculhando a internet por alguns guias das Quests disponíveis em MixMaster e achei apenas guias com poucas informações. A tradução do servidor brasileiro e os Bugs no sistema de missões também não ajudam nada, então eu decidi fazer um pequeno guia com todas as World Quests e Locals Quests disponíveis até então para quem quiser completá-las.

Nota: existem missões realmente bugadas que não podem ser iniciadas/completadas.
Nota2: 99% dos diálogos e opções do servidor BR estão bugados e/ou não fazem o menor sentido. Para selecionar a opção nos NPCs, clique sempre na primeira frase. O motivo disso é que os diálogos estão bugados, porém as opções ainda existem, por mais que você não consiga vê-las corretamente.
Nota3: Tenha disponível a habilidade "Pressa" (Haste) ao menos no nível 1 para ajudar correr pra lá e pra cá.

Índice:
1. Saga: Benção das Divindades
  1.1 Missão 1: Benção das divindades
  1.2 Missão 2: Benção das divindades pt. 2
  1.3 Missão 3: Benção das divindades pt. 3
  1.4 Missão 4: Benção das divindades pt. final
2. Saga: A Árvore da Propagação
  2.1 Missão 1: O início da busca
  2.2 Missão 2: Salve a Árvore!
  2.3 Missão 3: A Maldição da Árvore
  2.4 Missão 4: Missão da Harmonica
  2.5 Missão 5: O Mistério do Pássaro Dourado
  2.6 Missão 6: Lágrimas de Shira
  2.7 Missão 7: Cubo do Caos
  2.8 Missão 8: A masmorra do vento pt. 1
  2.9 Missão 9: A masmorra do vento pt. 2
  2.10 Missão 10: As lágrimas angelicais
  2.11 Missão 11: O espelho mágico
  2.12 Missão 12: Jardim do passado
  2.13 Missão 13: O relógio perdido
  2.14 Missão 14: Salvando a Árvore (bugada, impossível de prosseguir)
3. Saga: Os desafios de Linklyn
  3.1 Missão 1: Nível 20 ou superior
  3.2 Missão 2: Nível 50 ou superior
  3.3 Missão 3: Nível 70 ou superior
  3.4 Missão 4: Nível 90 ou superior
  3.5 Missão 5: Nível 100 ou superior
4. Missões dos Personagens
  3.1 Vanyah, missão para Ditt (requer testes)
  3.2 Fennecus, missão para Jin (requer testes)
  3.3 MechaOstrich, missão para Phoy (requer testes)
  3.4 Strigidae, missão para Penril (requer testes)
5. As demais missões separadas
  5.1 Missão para Purmai
  5.2 Missão para Runatic (Lunacy)
  5.3 Missão para a masmorra de Lunacy
  5.4 Missão para encantamentos de itens (Chisel)
  5.5 Missão para a masmorra de Rojeta
  5.6 Missão de Garrick de Magirita (incompleta)
  5.7 Missão de Garnick em Purmai (incompleta)
6. Lista de missões bugadas (impossível de serem feitas)



Saga: Benção das Divindades
Recompensa total: 3.000 GP, 15 pontos de atributos

Missão 1: Benção das divindades:
Para começar esta Quest Line, precisamos do reconhecimento do capitão Actum (X: 200, Y: 165) localizado em Makrita East Sea. Ele pedirá que você obtenha um Colar da Benção que podem ter sido roubados por Bebes ou Nosies.

Obtenha os itens:Henches que deixam cair:
Necklace of Blessing: Bebes ou Nosies (Makrita West Sea)

Dicas:
Apenas os Babes e os Nosies da MAKRITA WEST SEA (este mesmo mapa) deixam cair o colar. Nos outros mapas eles NÃO deixam cair.

Depois que obter o item, retorne ao capitão Actum e devolva o item à ele. Depois disso, você será reconhecido como um soldado e poderá prosseguir com a próxima Quest.  Lembre-se de guardar o Necklace of Blessing para uma futura missão. Recompensa: 1.000 GP.

Missão 2: Benção das divindades Pt. 2 
Agora temos que ajudar o recruta Linburn (X: 037, Y: 062), que está em em Islaba Damp Area, na parte noroeste do mapa. Prossiga para esta área (você pode teleportar-se diretamente aqui em algumas localizações (VeHeserba > Magirita West Sea > Islaba Damp Area), ou então teleporte-se até Herseba e ande até aqui). Ele pedirá um Cinto da Divindade, no qual pode ser obtido através de Nars ou ChezzDogs.

Obtenha os itens:Henches que deixam cair:
Belt of Blessing: Nars ou ChezzDogs (Islaba Damp Area)

Dicas:
Para esta missão, nenhuma.

Ao obter o item, retorne ao Linburn e complete a missão. Lembre-se de guardar o Belt of Blessing para uma futura missão. Recompensa: 1.000 GP.

Missão 3: Benção das divindades Pt. 3
Agora precisamos ajudar o soldado Rowe (X: 134, Y: 122) antes que ele possa nos ajudar a prosseguir com a World Quest. Ele pedirá que recuperemos o Anel de Elfo, no qual lhe recuperará as forças. Para obtermos o Anel, devemos derrotar alguns Mitras e DeepSurfers neste mesmo mapa.

Obtenha os itens:Henches que deixam cair:
Ring of Elf: Mitra e DeepSurfer (Herseba Entrance)

Dicas:
Apenas os henchs deste mapa deixam cair o anel.

Assim que obter o anel, retorne-o ao Rowe e complete a missão.  Lembre-se de guardar o Ring of Elf para à próxima missão. Recompensa: 1.000 GP.

Missão 4:  Benção das Divindades, Pt. final:
Leve o Necklace of Goddes, o Belt of Goddes e o Ring of Elf (itens obtidos durante as três missões anteriores) para Cherrish (X: 47, Y: 158) que está na cidade de Rudis (você pode pegar um Teleporte diretamente para cá). Entregue os itens à ele e complete esta rápida missão. Recompensa: 15 pontos de atributos.


Saga: A Árvore da Propagação
Recompensa total: 15 Pontos de atributos, 49.000 GP, 5 Poções que curam 200 HP

Missão 1: O início do busca
Fale com Demble (X: 162, Y: 89), um Guarda na cidade de Magirita exatamente ao lado do Teleporte da cidade. Ele pedirá para buscar três esferas que poderiam ajudar a Árvore da Propagação.

Obtenha os itens:Henches que deixam cair:
Sound of Wind:Metalock (Northen Magirita)
Origin of Sound:Pee (Northen Magirita)
Continuity of Vibration:Manglock (Northen Magirita)

Dicas:
Metalocks podem ser encontrados na área central do mapa. Pees e Manglocks podem ser encontrados na área norte/nordeste do mapa.

Depois que obter os três itens, retorne ao guarda Demble e conclua a missão. Recompensa: 3.000 GPs

Missão 2: Salve a Árvore!
O primeiro passo é falar com a Árvore da propagação que está em Makrita East Sea (X: 169, Y: 169). Pegue o teleporte para Mekrita e desça um mapa para chegar até lá rapidamente, e depois e só seguir as coordenadas (centro do mapa). Ela irá pedir uma Leaf of Life, no qual o hench DooDoo, encontrado em Makrita Soulth Prairie pode deixar cair.

Obtenha os itens:Henches que deixam cair:
Leaf of Life: DooDoo (Makrita Soulth Prairie)

Dicas:
Os DooDoos ficam na parte Leste do mapa.

Assim que obter a Folha, entregue-a à Árvore da Propagação e conclua a missão. Recompensa: 3.000 GPs

Missão 3: A Maldição da Árvore:
A Árvore da Propagação pedirá para falar com Anez, a Cartomante de Magirita (X: 100, Y: 100). A Cartomante dirá que apenas três frutas podem ajudar a Árvore da Propagação: uma Maçã, uma Laranja e um cacho de Uvas.

Obtenha os itens:Henches que deixam cair:
Apple (fruit):Bota e Sumping (Magirita West Sea)
Pear (fruit):Bota e Sumping (Magirita West Sea)
Grape (fruit):Bota e Sumping (Magirita West Sea)

Dicas:
Mate alguns Kurmas também para obter uma "Harmonica", item necessário para a próxima missão.

Assim que obter os três itens, retorne à Anez em Magirita e conclua a missão (clique na primeira linha do texto para selecionar a opção corretamente). Caso Anez se recuse a concluir a missão, retorne até a Árvore da Propagação, fale com ela mais uma vez e então só assim retorne à Anez. Recompensa: 5 pontos de atributos.

Missão 4: Missão da Harmonica:
Á este ponto, é possível que a Lista de missões Bugue no servidor BR, então as missão não serão listada e os diálogos muito menos farão sentido, mas ainda sim é possível completar as missões com os itens corretos. Para continuar, você deverá falar com Alene (X: 96, Y: 191) em Soulthern Rudis. Antes de ir até ela, é recomendável obter o item necessário para a missão com antecedência (como indicado na dica anterior). Para chegar até lá, você pode pegar um Teleporte até Rudis e então ir a partir dali. 

Obtenha os itens:Henches que deixam cair:
Harmonica: Kurma (Magirita West Sea)

Dicas:
Lembre-se que Soulthern Rudis é muito perigoso para níveis baixos pois os henches WingCrusher e DashaBell são poderosos e agressivos, então evite passar por eles (os outros não irão atacar entretanto).

Depois que obter o item, fale com Alene novamente e conclua a missão. Para ter certeza que a missão foi completa com sucesso, observe se você tem um Golden Brush no seu inventário. Caso positivo, prossiga com o guia. Lembre-se que devido aos Bugs é possível que a Harmonica não desapareça do seu inventário. Recompensa: 3.000 GP e Golden Brush.

Missão 5: O mistério do Pássaro Dourado:
Assim que concluir a próxima missão, nós devemos buscar um Sculpture of Phoenix em Herseba Entrance e entregá-lo à Holden (X: 153, Y:156) neste mesmo mapa. Para chegarmos lá mais rápido, volte para Rudis e pegue um teleporte para Herseba.

Obtenha os itens:Henches que deixam cair:
Sculpture of Phoenix: Monoeye (Herseba Entrance)

Dicas:
Para esta missão, nenhuma.

Depois que obter o item, entregue-o à Holden e conclua a missão. Recompensa: 5 pontos de atributos.

Missão 6: Lágrimas de Shira:
Agora precisamos ir conversar com Shira (X: 75, Y: 60) em VeHeserba. Novamente, você pode pegar um teleporte diretamente para lá. Você literalmente precisa fazer Shire "chorar" para obter suas lágrimas e ajudar a Árvore da propagação, porém suas emoções estão congeladas desde um choque que ele teve ao ter sua família atacada por um "monstro parecido com uma tartaruga". Este monstro está com o anel dela, e talvez possamos trazê-lo até ela e liberar suas emoções.

Pegue um Teleporte de volta à Heserba e vá até Cheseva Ruins. Mate alguns Tanktortus e obtenha o anel.

Obtenha os itens:Henches que deixam cair:
Shira's Ring: Tanktortus (Cheseva Ruins)

Dicas:
Para esta missão, nenhuma.

Ao obter o anel, volte à VeHeserba e entregue o anel à Shira. Ao ver o anel, ela irá chorar de angústia ao lembrar do incidente passado. Suas lágrimas irão se cristalizar e assim obteremos a primeira das três lágrimas de Shira necessárias. Recompensa: 5.000 GPs e Crystal Devil's Tear.

Missão 7: Cubo do Caos:
Agora precisamos ir até Rollingcores Field e encontrar um meio de fazer Shira chorar novamente, porém desta vez tanto de alegria quanto de tristeza ao mesmo tempo. Para facilitar sua vida, você pode se teleportar até Rudis e de Rudis se teleportar diretamente para Rollingcores Field. Exatamente ao lado do Teleportador, você encontrará Harly (X: 137, Y: 99), um jovem elfo que decide trocar favores. Para obtermos a segunda lágrima, precisamos dar à Harly uma Luva de Elfo, obtida pelos henchs Skullwiser deste mesmo mapa.


Obtenha os itens:Henches que deixam cair:
Elf's Glooves: Skullwiser (Rollingcores Field)

Dicas:
Cuidado com os henchs AncietKillas (especialmente este, pois ele ataca de longe) e os BattleRoyales pois eles são agressivos.

Assim que obtidas, leve-as até Harly e complete a missão. Recompensa: Chaos Cube (necessário para a próxima missão).

Missão 8: A Masmorra do vento Pt. 1:
Agora precisamos adentrar a Masmorra do Vento. Para isso, vamos precisar da ajuda de Gordon (X: 170, Y: 171) em Soulthern VeHeserba. Ele dirá que a Masmorra do vento não aceita "jogadores de baixo nível" e coincidentemente você não poderá entrar nela... apenas se você trouxer uma Bota do Ciclone. Para obter este item, ele dirá que um "monstro de língua grande" nesta região as possui.

Obtenha os itens:Henches que deixam cair:
Cyclone Boots: Lausta (Soulthern VeHeserba)

Dicas:
Para esta missão, nenhuma.

Assim que obter o anel, não se afobe muito. Antes, prepare-se com algumas poções (caso você esteja abaixo do nível 30) pois Gordon irá nos levar à uma sala (Masmorra do vento) para que possamos recuperar o Anel do Vento. Lembre-se: se você falhar a missão seguinte, terá que fazer esta mesma missão novamente.

Missão 9: A Masmorra do vento pt. 2:
Assim que você entregar as Botas do Ciclone para Gordon, ele irá transportá-lo para a Masmorra do Vento. Aqui, você encontrará vários Clawless e Chikakis que possuem em média nível de 45, o que pode ser um pouco problemático para jogadores de nível baixo.

Você só possui três minutos aqui dentro, e se demorar muito, será mandado automaticamente para Magirita, portanto, seremos rápido. Encontre Gordon (X: 199, Y: 127) aqui dentro. Ele irá pedir para você encontrar o Anel da Chuva aqui derrotando os inimigos.

Obtenha os itens:Henches que deixam cair:
Ring of Rain: Chikakis e Clawless (Dungeon of Wind)

Dicas:
Seja rápido, você só tem três minutos aqui dentro para completar toda a missão. Se este tempo acabar e você fracassar, terá que encontrar outra Bota do Ciclone. Outra coisa: Gordon irá pegar TODOS os Ring of Rain que você obter, então não adianta pegar reservas.

Ao obter o Ring of Rain, corra até Gordon (X: 199, Y: 127) e misture o Cube of Chaos com o Ring of Rain com a ajuda dele. Ao fazer isto, você obterá um Retrato da Família de Shira. Leve o retrato até Shira (X: 75, Y: 60) em VeHeserba, e, ao fazê-la chorar tanto de felicidade quanto de tristeza, você irá completar a missão e obter a segunda lágrima. Recompensa: 10.000 GP e Crystal of Golden Tear.

Missão 10: As lágrimas angelicais:
Por fim, temos que fazer Shira chorar novamente para obtermos a última lágrima cristalizada. Porém desta vez, de pura e somente alegria. Shira nos indica à falarmos com Manpeace (X: 168, Y: 123) em Owalljae Pradaria. Para chegar lá mais facilmente, teleporte-se à Herseba e ande a partir dali.

Ao encontrá-lo, Manpeace dirá que existe um Bastão da Esperança, no qual poderia fazer Shira chorar de alegria. Porém, ele não nos dará de graça. Ele quer algo caro em troca, no qual poderia ser "Asas de fada". Ele diz que um monstro nesta mesma localização às possuem. Para dar as Asas de Fada ao Manpeace, use a segunda opção.

Obtenha os itens:Henches que deixam cair:
Wings of Fairy: Yassie (Owalljae pradaria)

Dicas:
Manpeace é um pequeno filho da p-, então ele pode simplesmente pegar as Asas de fada e dizer que "ele não prometeu dar o Bastão da Esperança para você agora", então você terá que ir dando Asas de Fadas para ele até receber a Cane of Hope. Sim, vai ser um porre fazer cair algumas Asas de fada. Tenha paciência.

Ao finalmente obter a Cane of Hope (tudo depende da sua sorte, podem ser necessárias várias tentativas), leve-o até Shira (X: 75, Y: 60) em VeHeserba e obtenha a última lágrima cristalizada. Recompensa: 12.000 GP e Crystal of Angel Tear.

Missão 11: O espelho mágico:
Agora precisamos encontrar um frasco de vidro para guardar as lágrimas cristalizadas. Irena (X: 45, Y: 39) em Cheseva Ruins pode ajudá-lo com isso. Teleporte-se á Heserba e vá um mapa à oeste e siga as coordenadas para encontrá-lo (ele esta na mais mais noroeste possível do mapa). Irena irá revelar que as lágrimas podem somente ser guardadas em um frasco mágico que não existe mais. Para isso, você precisa voltar no tempo para obtê-lo com ajuda de um espelho mágico. Para fabricar tal espelho, você precisa de um Prisma e pedaços de vidro. 

Obtenha os itens:Henches que deixam cair:
Pieces of Broken Glass: Dr. Calvin (Cheseva Ruins)
Prims: Dr. Calvin (Cheseva Ruins)

Dicas:
Para esta missão, nenhuma.

Ao retornar ambos os itens para Irena, seleciona a segunda opção para que ele reconstrua o Espelho mágico. Recompensa: 10.000 GP e Magic Mirror.

Missão 12: Jardim do passado:
Agora precisamos voltar ao passado e recuperar o frasco mágico. Para isso, Pedric (X: 190, Y: 194), em Talmor's Field, pode nos ajudar com sua magia. Para chegar lá mais rápido, você pode ir um mapa ao norte (Rollingcores Field), ir até o Teleporte no centro do mapa e teleportar-se ao Acesso Rodoviário de Valcan. De lá, ande até Talmor's Field e siga as coordenadas.

Ao falar com Pedric, ele irá guiá-lo até a Floresta do Passado, onde você encontrará Pumpeds, Rainovas, Torras. Ao falar com ele novamente neste local, ele dirá que alguma Besta pode ter a garrafa de vidro especial.

Obtenha os itens:Henches que deixam cair:
Golden Glass BottleTorra (Forest of the Past)

Dicas:
Neste local, apenas os Rainovas são agressivos. Os Torras são apenas nv. 34 então será fácil para o jogador buscar o item.

Ao obter o frasco, retorne-o ao Pedric no centro deste local e você será recompensado. Recompensa: 5 pontos de atributos.

Missão 13: O relógio perdido:
Agora que temos o frasco, precisamos do espírito da árvore. Pedric disse que Terry (X: 113, Y: 112) em Folk Road pode nos ajudar. Ao falar com ele, ele disse que precisamos "passar num teste" antes, mas desconfiamos que na verdade ele só quer nossa ajuda para resolver um de seus problemas pessoais. Ele quer que recuperemos um relógio perdido que pertencia à ele.

Obtenha os itens:Henches que deixam cair:
Lost Clock: Pumped (Folk Road)

Dicas:
Nesta missão, nenhuma.

Ao obter o Relógio, entregue-o ao Terry. Ele irá dizer que na verdade foi ele quem deu o relógio para o Pumped e isso era realmente um teste, para que o espírito da árvore não caia em maos erradas. Recompensa: 3.000 GP, Spirt of Tree e 5 Steroids (cura 200 de Energia).

A partir daqui infelizmente é impossível prosseguir.

Missão 14: Salvando a Árvore (bugada, impossível de prosseguir):
Hora de salvarmos a Árvore da Propagação, para que criaturas maléficas para de ser criadas. Teleporte-se à Mekrita e volte à falar com a Tree of Propagation (X: 127, Y: 087) em Mekrita East Sea. Entre todos os itens que obtivemos até agora para ela (as três lágrimas e o frasco dourado). Ela vai nos deixar ficar com o espírito por enquanto.

Agora, temos que encontrar Andeli (X: 144, Y: 126) no centro de Twins Valley. Devido à um Bug na quest, o diálogo dele não procede, e a saga termina sem desfecho aqui.



Saga: os desafios de Linklyn:
Recompensa total: 5 bons Henchs aleatórios que combinam com o nível da missão

Missão 1: Nível 20 ou superior:
Encontre Linklyn (X: 092, Y: 196) em Magirita e selecione a opção "desafio nível 20". Lembre-se que você só poderá prosseguir para os demais desafios os fazendo em ordem, não importando o seu nível nesta questão. Como primeiro desafio, ele pedirá um core de um Mitra.

Obtenha os itens:Henches que deixam cair:
Core de Mitra: Mitra (Heserba Entrance)

Dicas:
Nessa missão, nenhuma.

Ao retornar o Core de Mitral à Linklyn, você completa o primeiro desafio. Recompensa: um core aleatório de Clawless, Tentaki, MintRabie, Manta ou Chowie, no nível base.

Missão 2: Nível 50 ou superior:

Retorne à Linklyn (X: 092, Y: 196) em Magirita quando você possuir nível 50 ou mais. Selecione a opção "desafio nível 50", e Linklyn pedirá um core de Clawless, porém nível 55 ou superior. Isso quer dizer que você precisa evoluí-lo antes de entregá-lo.

Obtenha os itens:Henches que deixam cair:
Core de Clawless nível 55 ou mais: Clawless (Tamer's Field)

Dicas:
Você pode mixar um Clawless através de um Liddy (Owalljae Prairie) + Bota (Magirita West Sea). 

Ao ter o core de Clawless nível 55 ou superior, retorne ao Liklyn para completar a missão. Recompensa: um core aleatório de Ballza, SwordTail, BattleRoyale, Wiesha ou Phoenix, no nível base.


Missão 3: Nível 70 ou superior:

Retorne à Linklyn (X: 092, Y: 196) em Magirita quando você possuir nível 70 ou mais. Ele pedirá um Ballza acima do nível 75, e desta vez podedirá também um encantamento de item (Cinzel) aleatório que pode ser obtido através da missão de troca de Henchs de Murett (veja abaixo).

Obtenha os itens:Como obter:
Core de Ballza nível 75 ou maisBallza (Soulthern Rudis)
Item de encantamento: Veja a "Missão para encantamento de itens" abaixo.

Dicas:
Você pode mixar um Ballza através de um Chikaki (Tamer's Field) (1) + Armaball (Cheseva Ruins) ou Chikaki (Tamer's Field) (1) + HornKing (1).

Ao ter ambos os requerimentos corretos, leve-os até Linklyn e receba sua recompensa. Recompensa: um core aleatório de WingCrusher, BloodStinger ou MantyPlan, no nível base.

Missão 4: Nível 90 ou superior:

Desta vez, você precisa de nível 90 ou superior. Linklyn lhe pedirá um WingCrusher igual ou acima do nível 90 e 5 cinzeis de encantamento de item.

Obtenha os itens:Como obter:
Core de WingCrusher nível 90 ou maisWingCrusher (Soulthern Rudis)
5 Itens de encantamento: Veja a "Missão para encantamento de itens" abaixo.

Dicas:
Você pode mixar um WingCrusher através de uma Phoenix (1) + SwordTail (1) (Valcan Acess Road) ou Phoenix (1) + Rainova (1) (Valcan Acess Road).

Ao ter ambos os requerimentos corretos, leve-os até Linklyn e receba sua recompensa. Recompensa: um core aleatório de WingStormer, Ordevil ou BlazeRhino, no nível base.

Missão 5: Nível 100 ou superior:

Desta vez, você precisa de nível 90 ou superior. Linklyn lhe pedirá um WingStormer igual ou acima do nível 100 e 10 cinzeis de encantamento de item.

Obtenha os itens:Como obter:
Core de WingStormer nível 100 ou maisWingStormer (Masmorra de Rojeta - andar 8)
10 Itens de encantamento: Veja a "Missão para encantamento de itens" abaixo.

Dicas:
Veja como entrar na masmorra de Rojeta nível 8 logo abaixo, na lista das demais Quests.

Ao ter ambos os requerimentos corretos, leve-os até Linklyn e receba sua recompensa final. Recompensa: um core aleatório de MacT-Bone, Seki-Shu-Riu, DevilDusty ou SunFlower, no nível base.


Missões dos Personagens:
Você só pode fazer a missão que corresponde ao seu personagem

1. Vanyah, missão para Ditt (para testes):
Fale com Old Mix Builder (X: 152, Y: 047) em Magirita, no Mixer mais ao norte da cidade. Selecione a primeira opção para obter um Vanyah nível 1. Sua missão é evoluir juntamente com ele a partir de agora.

Ao obter nível 30 e o Vanyah nível 26, retorne ao Old Mix Builder para receber um prêmio em experiência e um Vanyah nível 30 com um novo limite de nível.
Ao obter nível 50 e o Vanyah nível 46, retorne ao Old Mix builder para receber um prêmio em experiência e um Vanyah nível 50 com um novo limite de nível.
Ao obter nível 70 e o Vanyah nível 66, retorne ao Old Mix builder para receber um prêmio em experiência e um Vanyah nível 70 com um novo limite de nível.
Ao obter nível 110 e o Vanyah nível 106, retorne ao Old Mix builder para receber um prêmio em experiência e um Vanyah nível 110 com um novo limite de nível.

2. Fennecus, missão para Jin (para testes):
Fale com Alfred (X: 089, Y: 130) em Magirita assim que você estiver nível 30, próximo á Pedra Filosofal (onde você compra as habilidades). Ele irá pedir alguns Chifres de Battledragon como seu primeiro desafio.

Obtenha os itens:Henches que deixam cair:
Battledragon Horn: Battledragon (Rollingcores Field)

Dicas:
Teleporte-se á Heserba para chegar mais rápido. Cuidado com os AncientKillas pois são agressivos.

Assim que obter os itens necessários, retorne á Alfred e complete a primeira missão, recendo o primeiro core. Recompensa: Core de Fenneceus nv. 30 e 20.000 EXP.

Quando você estiver nível 50 ou superior, retorne ao Alfred para o segundo desafio. Ele irá pedir para você obter uma Água especial de um Cacto. Existem três cactos que você pode encontrar em: Folk Road (X: 000, Y: 000), White Prairie (X: 000, Y: 000), Twin Valley (X: 000, Y: 000) ou Owalljae Prairie (X: 000, Y: 000). O cacto correto lhe concederá o item, e então retorne-o para Alfred e receber sua segunda recompensa. Recompensa: Core de Fenneceus nv. 50 e 400.000 EXP.

Retorne ao Alfred ao obter nível 80. Ele pedirá para você um item obtido no nono andar da Masmorra de Rojeta (veja o guia abaixo sobre a Masmorra de Rojeta). Derrote alguns Crinsom Metals e obtenha o seu machado.

Obtenha os itens:Henches que deixam cair:
Crimson Metal Chopper: Crimson Metal (Rojeta Dungeon nv. 9)

Dicas:
Veja como encontrar a masmorra de Rojeta nível 9 no guia da missão mais abaixo na parte das demais Quests.

Ao obter o machado, retorne-o para Alfred e receber sua segunda recompensa. Recompensa: Core de Fenneceus nv. 70.

Retorne á Alfred ao obter nível 110. Como último desafio, você terá que derrotar um Fennecus e obter uma prova disso ao Northern Magirita. Ele se encontra provavelmente em algum lugar próxima á entrada da cidade.

Obtenha os itens:Henches que deixam cair:
Evidence of Patriarch: Fennecus (Northern Magirita)

Dicas:
Fenneceus geralmente se encontra próximo á entrada da cidade.

Entregue a Medalha ao Alfred e conclua o desafio. Recompensa: Core de Fennecus nv. 110.

3. MechaOstrid, missão para Phoy (para testes):
Fale com Damoa (X: 127, Y: 086) em Magirita assim que você estiver nível 30, próximo ao local onde se compra equipamentos. Ela irá lhe pedir uma lista de itens mecânicos para a formação da MechaOstrid.

Obtenha os itens:Henches que deixam cair:
6 Control Unit Platform 
Nippa (Makrita Central Prairie)
2 Imput Device: 
AncientKilla (Rollingcores Field)
1 Control Lever: 
Gamerika (Fork Road)

Dicas:
Nesta missão, nenhuma.

Colete todos os itens e os entregue para Damoa, obtendo assim o primeiro core e um pouco de experiência. Recompensa: Core de MechaOstrid nv. 30 e 20.000 EXP.

Retorne á Damoah ao atingir o nível 70. Ela irá pedir outra seqüencia de itens, que consiste em:

Obtenha os itens:Henches que deixam cair:
2 Soulbreaker's Middle Parts:Soulbreaker (Twins Valley)
2 Soulbreaker's Leg Parts:
Soulbreaker (Twins Valley)
2 Wing of Ayaya: 
Ayaya (Valcan's Valley)

Dicas:
Ayayas são agressivos e atacam á distância, assim como os Gokumas deste mesmo mapa.

Colete todos os itens e os entregue para Damoa, obtendo assim o primeiro core e um pouco de experiência. Recompensa: Core de MechaOstrid nv. 70 e 400.000 EXP.

Retorne á Damoa ao atingir o nível 110. Ela irá lhe desafiar á matar um NeoAyaya que se encontra em White Seashore (ao lado de Purmai). Faça-o e retorne á Damoah que lhe concederá a sua recompensa final. Recompensa: Core de MechaOstrid nv. 110.

4. Strigidae, missão para Penril (para testes):
Fale com Hixx (X: 070, Y: 125), um NPC de cabelo azul perto da vendedora de poções em Magirita. Como teste inicial, ele irá lhe pedir 10 Chifres de Draco. Saia da cidade e mate alguns deles. Depois disso, ele pedirá 5 Peles de AquaPing, que podem ser um pouco chatas de se obterem.

Obtenha os itens:Henches que deixam cair:
10 Horns of Draco Draco (Northern Magirita)
5 Skins of AquaPing: 
AquaPing (Cheseva Ruins)

Dicas:
AquaPing são bastante chatos de se encontrarem (caso você não tenha Premium Zone, caso contrário você poderá encontrá-lo nas ruínas de qualquer cidade). Tenha paciência. Lembre-se que eles também são agressivos.

Após obter todos os itens, retorne ao Hixx e conclua a missão, obtendo o primeiro core nível 30. Recompensa: 20.000 EXP e Strigidae nv. 30.

Retorne ao Hixx novamente ao obter nível 70. Ele desta vez irá pedir Pênas de Fênix e ferrões de Bloodstinger.

Obtenha os itens:Henches que deixam cair:
10 Feathers of Phoênix:  
Phoênix (Valcan Acess Valley)
10 Sting of Bloodstinger: 
Bloodstinger (Valcan's Valley)

Dicas:
Nesta missão, nenhuma.

Após obter todos os itens, retorne ao Hixx e conclua a missão, obtendo o segundo core nível 70. Recompensa: 400.000 EXP e Strigidae nv. 70.

Retorne ao Hixx novamente ao obter nível 110. Ele desta vez irá pedir uma Crown of Fairudo.

Obtenha os itens:Henches que deixam cair:
1 Crown of Fairudo Fairudo (Iskai Forest)

Dicas:
Nesta missão, nenhuma.

Após obter o item, retorne ao Hixx e conclua a missão, obtendo o último core de Strigidae. Recompensa: Strigidae nv. 110.


As demais missões separadas:
Missões rápidas que não fazem parte de nenhuma seqüência

1. Missão para Purmai:
Vá até Valcan Valley (para chegar mais rápido você pode pegar um teleporte para Rollingcores Field e de lá para Valcan Acess Road, depois ir andando até aqui) e encontre o Capitão Patrick (X: 143, Y: 087). Ele dirá que precisa de ajuda em Purmai, mas seu navio está danificado. Para isso, ele precisa de alguns pregos e tábuas para repará-lo, e pede que você os traga para ele.

Obtenha os itens:Henches que deixam cair:
5 Big Nails: Mantyplant, Mintclaw, Bloodslinger (Valcan Valley)
5 Wooden Planks: Phantomwing (Valcan Valley)

Dicas:
Cuidado com os henchs Ayaya e Gokuma deste mapa, pois eles atacam à uma grande distância e são agressivos.

Depois que obter os 10 itens, leve-os até o capitão Patrick e conclua a missão. Fale com ele uma segunda vez para ir para a cidade de Purmai sempre que quiser (não será necessário entregar os itens novamente).

2. Missão para Runatic (Lunacy):
Para ir para Lunacy, você precisa de 10 rosas, que são encontradas matando ForceFlyers em Islaba Damp Área. Assim que obter as 10 rosas, vá até Rudis e fale com Rave (X: 084, Y: 165), um NPC bem ao lado do Teleporte.
Aqui, os diálogos são sinistros e você deve fazer um esquema para trocar as rosas pela passagem para Lunacy. Clique na "segunda opção" para trocar as rosas pela Runatic World Admission Card, que dura 2 horas. Esse é o tempo que você tem para ficar dentro de Runatic e quando ele acabar, você será mandado pelo seu ponto de Respawn. Agora fale com Rave novamente e clique na "terceira opção" para usar o Bilhete e ir para Runatic.

3. Missão para a masmorra de Lunacy:
Em Swamp of Illusion (um dos locais em Runatic), mate Ordevils para obter 11 Invitation Cards (1 para a missão intermediária e 10 para adentrar a Dungeon sempre que você quiser, ou então tenha Premium Zone Acess e apenas 1 Invitation Card será o suficiente). Assim que obtê-las fale com  (X: 141 Y: 109) em Field of Lunacy. Selecione todas as opções possíveis até iniciar a missão do bolo dele.
Leve o bolo (você tem apenas 3 minutos antes que o bolo derreta) para Quadra (X: 140, Y: 138) em Swamp of Illusion. Ao entregar o bolo, Quadra lhe dará um Devil Necklace e pedirá para entregá-lo à Julias, juntamente com uma Invitation Card (dropada pelos Ordevils).
Fale com Julias (X: 163, Y: 081) em Lunacy Dungeon Entrance e entregue ambos os itens para ele, ganhando assim a permissão para entrar em Lunacy Dungeon.
Agora, para entrar em Lunacy Dungeon, ainda em Lunacy Dungeon Entrance, com 10 Invitation Cards (ou Premium Zone Acess) fale com Shock (X: 220, Y: 178). O esquema para trocar as Invitation Cards pelo Lunacy Dungeon Card Acess e entrar na Dungeon é exatamente a mesma para ir para Lunacy: escolha a "segunda opção" do diálogo de Shock e, assim que estiver com o cartão, escolha a "terceira opção" para adentrar a Dungeon de Lunacy.

Lembre-se que, assim como o cartão de Runatic, o tempo de permanência dentro da masmorra de Lunacy é limitada em 2 horas. Outra coisas que é interessante frisar é que em todos os andares se encontram "Warp Masters", NPCs que podem mandar você de volta para Lunacy Dungeon Entrance se você selecionar a primeira opção.

4. Missão para encantamento de Itens:

Esta não é bem uma missão, e sim uma troca. Isso quer dizer que você pode "completá-la" várias vezes para obter as mesmas recompensas. Basicamente, ela consiste trocar um core específico por um item que possui vagas chances de acrescentar atributos adicionais em qualquer item que você escolher.
Para isso, leve os seguintes cores para Murett (X: 081, Y: 053) em Soulthern Rudis, e ele trocará por um encantamento correspondente. Ao obter o encantamento, clique com o botão direito sobre ele e então sobre o item que você deseja encantar (lembre-se que o item precisa estar desequipado). As chances do encantamento falhar são altas, e neste caso, o item de encantamento irá desaparecer. O item não será afetado nesse caso. Obs: você só pode ter um core de cada tipo por vez, ou Murett não irá realizar a troca.

Core:Encantamento:Efeito:
Pumped...do Arqueiro+1 Chance de acerto
Ballza...da Evasão+1 Esquiva
Rainova...do Poder de Ataque+2 Dano
Lausta...do Poder+2 MP
BeetlePete...da Agilidade+1 Agilidade
ThunderBird...da Precisão+1 Exatidão 
Chikaki...da Sorte+1 Sorte
Amazonez...da Vida+2 HP

Além disso, você pode levar um core de GreenTail para Janet (X: 191, Y: 063), no qual ela lhe dará um TearStar, que permite melhorar o encantamento já existente em um item. Lembre-se que você só pode ter um GreenTail na mochila por vez, ou Janet não irá realizar a troca.

5. Missão para a Masmorra de Rojeta:
Adentre a Masmorra de Rojeta (entrada em X: 213, Y: 138) em VeHeserba. Aqui dentro você encontrará nove andares e todos os tipos de monstros agressivos, porém no sétimo andar você não poderá mais prosseguir se não atender as condições: você precisa de nível 80 ou mais, e um Dungeon 8th Floor Admission Ticket, no qual Kugutus (henches encontrados no sétimo andar) deixam cair com certa freqüencia.

No nono andar, você poderá encontrar o Mirror no qual ensina o jogador as habilidades de grau 2. O acesso á estes andares também é necessário para algumas outras missões. Para sair da masmorra, fale com Karens no oitavo andar (ele não está na entrada, está no beco) e você será mandado para VeHeserba.

6. Missão de Garrick de Magirita (incompleta):
Esta missão se inicia em Garrick (X: 127, Y: 097) em Magirita. Depois de alguns diálogos, ele pedirá uma Curse Puryfing Potion, comprada no vendedor de utilidades (poções e afins) tanto de Magirita quando de Makrita por 1.000.000 de GP.

Após entregar a poção para ele, Garrick irá pedir uma Little Glass Bottle e uma Large Glass Bottle, que custam 5.000.000 GP e 10.000.000 GP respectivamente, compradas novamente pelos vendedores de utilidades de Mekrita ou Magirita.

Após isso, eu não sei o que acontece, pois jamais irei gastar tanto dinheiro nestes itens. Alguém que tenha bolas de aço para isso, favor entrar em contato.

7. Missão de Karnick em Purmai (incompleta):

Fale com Karnick (X: 000, Y: 000) em Purmai e ele pedirá 10 Mystic Piece e 20 Unknown Piece. Estes itens são dropados pelos monstros de Iskai Forest, Ruins of Silence e Cold Valley de uma forma incomum, então é extremamente recomendável você ser nível muito alto para tentar adquirir estes itens.


Lista de missões bugadas: 
(impossíveis de serem feitas):

1. "Missão de Forest of Chaos" e "Missão do mapa de Magirita" 

Motivo: Mafiel (X: 154, Y:162) em Magirita (pode ser encontrada em algumas outras cidades também), NPC que deveria iniciar a missão, não possui diálogos. Mesmo que você leve os itens da missão para ela (1 Conhecimento de Jove, 1 Coragem de Jove e 1 Amor de Jove, obtido através de Delvicos, Metalcos e Insecos), ela não responde e a missão não pode ser completa. Sendo assim, o acesso ao Garden of Chaos é impossível e portanto a missão subseqüente (mapa original de Magirita não pode ser feita.

2. "Missão 14" da saga "Árvore da Propagação":

Motivo: Andeli (X: 144, Y: 126) no centro de Twins Valley não procede corretamente com o diálogo. Mesmo que você leve os itens da missão para ele (1 Tamor's Armor e 1 Rocky's Helmet, obtido através dos henchs Soulbreaker e Stoner neste mesmo mapa), o diálogo bugado não muda e é impossível terminar a missão.