Mostrando postagens com marcador Tutorial. Mostrar todas as postagens
Mostrando postagens com marcador Tutorial. Mostrar todas as postagens

sábado, 20 de julho de 2013

[Dark Souls] Atributos do Personagem!


Neste guia de Dark Souls (sim, faz muito tempo desde o último) eu vou continuar explicando coisas difíceis de serem compreendidas neste jogo. E desta vez vamos falar dos pontos de atributos que você pode colocar no seu personagem. Qual atributo é melhor? Em que devo investir mais? Devo investir mais em Vitalidade ou Resistência? Bem... para responder essas perguntas, temos que entender como os atributos funcionam.

Primeiro de tudo, você já ouviu que "tudo em excesso faz mal"? Bem... isso meio que se aplica aos atributos de Dark Souls. Existe algo que todos os 9 atributos possuem que eu gosto de chamar de Ápice de efeito (AdE): você investe muito em um atributo, digamos que Vitalidade. Cada ponto de Vitalidade que você coloca, mais vida por nível você terá. Porém, existe um momento que o Ápice do Efeito do atributo da vitalidade chega e, quando isso acontece, você começa a ganhar menos vida por cada ponto que você distribui em vitalidade. Ou seja: focar em um atributo é bom, mas chega uma hora que parar e investir em outro pode ser (depende muito do que o jogador quer fazer) muito mais benéfico à você.

Entender quais são os Ápices do efeito de cada atributo é essencial para você saber exatamente o que você está construindo (buildando), afinal, pontos de atributos são caros e devem ser escolhidos cuidadosamente. Primeiro, vamos á lista de atributos e, em seguida, uma explicação dos "malefícios" que investir num atributo depois da área do efeito.

Índice:
1. Lista de atributos e suas finalidades
2. Efeitos do Ápice de Efeito nos atributos
3. Como funciona o Ápice do Efeito em cada atributo
4. Conclusão

1. Lista de Atributos e suas finalidades:

Atributo:
Efeito:
AdE:
Attunement:

- Gera espaços para magias/milagres/piromancias.

50

Dextery:

- Atende as condições de certas armas que exigem destreza
- Armas que escalam dom destreza causam mais dano
- Aumenta a velocidade de conjuração de magias/milagres/piromancias

40/45/50

Endurance:

- Aumenta o máximo de Stamina
- Aumenta a resistência contra Bleed (sangramento)
- Aumenta a carga máxima do personagem
40

Faith:


- Atende as condições de milagres e equipamentos que exigem Faith para serem usados
- Aumenta a defesa mágica
- Aumenta o dano causado por armas que escalam com Faith
- Aumenta o dano causado por milagres

50

Humanity:

- Aumenta a chance de encontrar itens
- Aumenta a resistência contra Curse (maldição)
- Aumenta suas resistências gerais
- Aumenta o dano causado por armas que escalam com humanidade (caóticas)

10

Intelligence:

- Atende as condições de magias e equipamentos que exigem Inteligência para serem usados
- Aumenta o dano de magias
- Aumenta o dano de armas que escalam com inteligência (Encantadas e Mágicas)

40/45/50

Resistance:

- Aumenta a defesa física
- Aumenta a resistência contra fogo e veneno

15/30

Strenght:

Atende as condições de milagres e equipamentos que exigem Força para serem usados
- Aumenta o dano causado por armas que escalam com Força

40/50

Vitality:

- Aumenta a vida máxima por nível recebida

50


2. Efeito do Ápice do Efeito (AdE) nos atributos:

Aqui, eu vou listar alguns motivos do por quê não ultrapassar o limite da Ápice do Efeito em cada atributo, afinal, essas marcas não existem por acaso. Quer dizer, não tem absolutamente nada de errado em criar um personagem com 99 pontos de Vitalidade, porém existe uma certa penalidade gradual em ultrapassar a marca dos 50 pontos. Algumas penalidades são mais severas, como a de Attunement, pois você não ganha absolutamente nada em troca ao investir além dos 50 pontos (você vai estar jogando seus pontos literalmente fora).

Atributo:
AdE:
Ao ultrapassar o limite do Ápice do Efeito...
Attunement: 
50
Você não pode ganhar mais espaços para habilidades.
Dextery: 
40/45/50O bônus de dano em armas que escalam com força será cada vez menor entre cada limite. Magias não podem ser lançadas mais rápido do que 45 pontos.
Endurance: 
40
Você não ganha mais Stamina (ela tem um limite de 160).
Faith: 
50
Contribuição á eficácia dos milagres cai bruscamente.
Humanity: 
10/30
Não oferece mais Item Discovery ou bônus de dano com armas que escalam com Humanidade após 10 humanidades. Não oferece mais resistência contra Curso (maldição) após 30 humanidades.
Intelligence:
40/45/50O bônus de dano em armas que escalam com inteligência será cada vez menor entre cada limite, e cai drasticamente em 45 pontos a escala com o Logan's Catalyst.
Resistance:
15/30
Resistência contra veneno em menor escala.
Strenght:
40/50
O bônus de dano em armas que escalam com força será cada vez menor entre cada limite.
Vitality:
50
O bônus de HP máximo será gradualmente menor.

3. Como funciona o Ápice do Efeito em cada atributo:

Eu vou representar graficamente a eficácia de cada atributo deste o primeiro ponto até 99 pontos, e então você irá finalmente entender por quê existe um ponto chamado de Ápice do Efeito:

Attunement:

Você ganha 1 espaço para magias extra em cada 10 pontos que você atribui aqui. Como esses espaços estão sempre em você, o efeito de Attunement permanece constante, até atingir a marca de 50 pontos, onde você tem 10 espaços para magias. A partir dai, você não ganha mais nenhum espaço para habilidades e então, nada acontece.

Dextery:
Os benefícios da destreza é maximizado até os 25 pontos, onde você atendende os requisitos de destreza de todos os equipamentos do jogo e, por causa disso, sua eficácia cai um pouco até os 40 pontos, onde a escala de dano de certas armas cai bastante. Aos 45 pontos, você atinge a velocidade máxima de conjuração de habilidades e a partir dos 50 pontos, a única coisa adicional que você recebe pela destreza é um minúsculo acréscimo de dano em certas armas.

Endurance:
Aos 40 pontos de Endurance, você não ganha mais Stamina adicional, o que é praticamente metade do seu benefício. O aumento de carga e resistência contra sangramento permanece constante desde o primeiro ponto até o último (não muda), justificando o efeito linear a partir dos 40 pontos.

Faith:
Até aos 50 pontos, você obtém o total máximo pelos pontos de Faith. O aumento eficácia dos Milagres permanece constantemente maior e você continua a atender os requisitos de Faith nos milagres. Aos 50 pontos, o acréscimo de eficácia nos Milagres é cortado bruscamente e você já obtém acesso ao Miracle mais potente (Sunlight Spear).

Humanity: 
Aos 10 pontos, você não ganha nem Item Discovery e nem ampliação de dano em armas caóticas. A Curse Resistance é a única que continua á crescer levemente até a marca de 30 humanidades e, depois disso, você não ganha mais nada.

Intelligence:

A contribuição de dano em magias permanece crescente até 40 pontos de inteligência onde ela é cortada. O benefício da inteligência ainda é levemente alto pois você só obtém acesso à magia mais poderosa (Dragon White Breath) em 50 pontos de inteligência. Apartir dai, o aumento da eficácia das magias continua decrescente.

Resistence:
Teoricamente o atributo que mais vale a pena investir até o final. A partir dos 40 pontos, a resistência adicional contra veneno é bastante reduzida, porém continua progredindo aos poucos. A resistência contra dano físico e fogo continua constante desde o primeiro nível.

Porém... não vale realmente a pena investir neste atributo. O que você ganha com ele pode facilmente ser substituído com alguns pontos adicionais em Vitalidade ou Endurance, que permite equipar armamentos mais pesados enquanto mantém a carga abaixo de 50% de sua capacidade (que facilmente garantem mais pontos defensivos ao personagem que a Resistence jamais conseguiria proporcionar).

Strenght:
Aos 22 pontos, você obtém acesso á metade do arsenal de armas de Dark Souls, o que é mais que o necessário para um mago ou pyromancer. Aos 40 pontos, o dano adicional com armas que se adaptam á força é cortado, e isso ocorre novamente em 50 de força, fora que nesta marca você obtém acesso á arma mais pesada do jogo (Smough Hammer).

Vitallity:
Seus pontos serão gastos perfeitamente até 28 pontos de vitalidade, onde a quantidade de vida ganha vai crescendo cada vez mais. A partir dai, ela começa a cair progressivamente. Ao atingir 50 pontos, a quantidade ganha por ponto chega no limite mínimo (8~9 HP por ponto), e seus pontos gastos começam á ficar cada vez menos eficientes (considerando os gastos).

4. Conclusão:

Só para concluir, quero deixar bem claro novamente que não é errado passar do limite da aproveitamento máximo do atributo. Você constrói o seu personagem como você bem entender, desde que entenda o que você esteja fazendo. Como já dito, atributos em Dark Souls são muito caros, então eles precisam ser distribuídos de certa forma que você possa aproveitar ao máximo seus investimentos.

Só para deixar ainda mais claro: ultrapassar o Ápice do Efeito nos atributos NÃO deixa o seu personagem mais fraco, você apenas é beneficiado de uma maneira menor com os pontos comprados.

Espero que tenha ajudado á esclarecer esta questão. Qualquer dúvidas, como sempre, os comentários estão livres e serão respondidos sempre que possível. Até mais.

domingo, 14 de julho de 2013

[Mix Master] Só uma breve Introdução

E ai pessoal, bem?

Nesse tempinho livre eu tive a oportunidade de jogar um pouco algo que eu não via à muito tempo: Mix Master. Então eu decidi criar este pequeno guia, só pela minha própria nostalgia, e caso vocês queiram experimentar também. Nessa pequena introdução eu vou explicar como ele funciona com alguns detalhes importantes então, se estiver interessado, você pode baixar ele de graça em PT-BR aqui.
Oque este jogo tem de especial?

Este jogo segue o princípio de algo como... Pokemón, onde tudo gira em volta de criaturas chamadas Henches. Você controla um máximo de três Henches, e eles irão lutar ao seu lado à todo momento. De fato, o personagem é incapaz de derrotar qualquer inimigo em seu nível por conta própria. Os gráficos são bem infantis, mas bastante cativantes. :)

Os Henches são encontrados por todo o continente, e podem ser derrotados. Caso o jogador tenha sorte, um Henche derrotado deixa cair um Core, algo como um "ovo", que pode ser renascido para lutar ao lado do jogador ou então Misturado.

O sistema de personagens do jogo é bastante limitado. Ele meio que peca bastante, pois oferece ao jogador apenas 4 personagens diferentes, além da customização ser limitada por três diferentes cores de cabelo. Os personagens disponíveis são a arqueira Penril, o lutador Jin, o garoto Ditt e a elfa Phoy. Cada um utiliza de armas diferentes, mas a mecânica de todos é quase a mesma.
Misturar, misturar e mexer:

O principal sistema do jogo é o de Mistura de Henches. Basicamente você pega um Henche com outro Henche de outro tipo e do sexo oposto para formar novos, maiores e mais poderosos Henches. O sistema de Misturar possui uma probabilidade dependendo da Habilidade pessoal do seu personagem, e caso essa mistura venha à falhar, isso diminui o nível dos Henches envolvidos na mistura, podendo até fazer com que eles desapareçam permanentemente.

Existem mais de 900 Henches diferentes, e 99% deles possuem uma "receita especial" para obtê-los. De fato, existem Henches que só são obtidos exclusivamente a partir da Mistura, diferente da maioria, que podem ser Dropados ao derrotá-los. Logo no Tutorial do jogo você tem uma breve demonstração deste sistema. 

Por fim, os jogadores:

Atualmente não à muitos jogadores ativos de Mix Master (até por quê o jogo é consideravelmente antigo). O servidor Brasileiro em especial é bastante vazio. Por isso, é muito comum você encontrar jogadores mais fortes ajudando jogadores novos à troco de nada, quase à todo momento. Se você quiser passar uma semana "de férias" nesse joguinho, eu só posso dizer que vale à pena. 

segunda-feira, 27 de fevereiro de 2012

[Minecraft] Tutorial: Como colocar textura 32x32 (HD)

Fala galera, tranquilo?

Bom, nesse guia ultra-simples vou ensiar como instalar Texture Packs HD (32x32) no Minecraft.Você pode simplesmente jogar a textura na pasta textures do .minecraft e selecioná-la para jogar, mas animações em HD (como água, lava e fogo) ficarão bugadas. Para arrumar isso:

Baixe um programa chamado HD Texture fix (MCPatcher): Clique aqui!!

Abra o programa. Ele normalmente encontra a pasta do Minecraft automáticamente.

- Selecione a opção HD Textures e HP Font. As outras são opcionais porém recomendáveis.

- Clique em "Patch".

Divirta-se!

[Minecraft] Tutorial: Como trocar a Skin

Eai pessoal, tranquilo?

Bom, dessa vez eu vou fazer mais um rápido e simples tutorial. Dessa vez, explicando como trocar a Skin do seu avatar no Minecraft.

- Para isso, primeiro você precisa baixar a Skin que você deseja usar. Um bom site de Skins: Clique aqui!!

- Depois, entre na sua pasta .minecraft > bin > minecraft.jar (abra-o usando WinRar).

- Entre na pasta mob. Procure o "char.jpg" e troque-o pela nova skin (extraia a skin atual por segurança, caso a nova não dê certo e você possa substituir novamente)

- Renomeie a sua nova skin para "char.jpg", para que dê certo.


Divirta-se x3
Até a próxima!

domingo, 26 de fevereiro de 2012

[Minecraft] Tutorial: Como colocar um mapa SinglePlayer no MultiPlayer.

Fala galera, tranquilo?

Bom, nesse rápido tutorial vou ensinar a vocês como colocar os seus mapas Single Player no seu server.

- Bom, primeiro, copie a pasta do seu mapa para a pasta do minecraft_server.

- Depois, entre no server.properties e coloque a informação "level-name=" para o nome do seu mapa. Lembre-se que deve ser idêntico caso contrário simplesmente será gerado um novo mapa.
- Salve e feche.

- Execute o minecraft_server, e entre no seu server no minecraft.

- Divirta-se!

segunda-feira, 20 de fevereiro de 2012

[Minecraft] Como instalar um Mod

Bom galeras, tranquilo?

Um dúvida muito freqüente é: Como instalar Mods. Então postarei um rápido tutorial de como o fazer de uma forma bem simples.

Índice:

1. Passo-a-passo
2. Programas comumente necessários
3. Dúvidas freqüentes

1. Passo-a-passo:

1. Você deve ter um ModLoader para a sua versão do Minecraft.

2. Vá para a pasta Roaming do seu computador (Menu > Executar > %appdata%) e entre na pasta .Minecraft.
3. Entre na pasta bin.

4. Clique com o botão direito no arquivo minecraft.jar e abra-o com WinRar.

5. Delete a pasta chamada META-INF.

6. Depois disso, basta abrir seu ModLoader e copiar todos os arquivos para dentro do minecraft.jar.


7. Copie também todos os arquivos do Mod para dentro da minecraft.jar

7. Divirta-se! x3

ATENÇÃO: Lembre-se que alguns Mods precisam de outros arquivos além do ModLoader! Consulte o tópico do Mod antes de instalar!

2. Programas comumente necessários:

1. ModLoader (Necessário para praticamente tudo)
2. AudioMod (Necessário para os novos sons dos Mods)

3. Dúvidas freqüentes:

- Ao instalar o Mod, meu minecraft congela na tela preta, por quê?
Uma das causas mais prováveis seria de você esquecer-se de apagar a pasta Meta-inf dentro da minecraft.jar.

- Ao instalar o Mod, meu Minecraft dá erro, por quê?
Duas possibilidades. A primeira seria o caso do seu Minecraft estar atualizado e a versão do Mod que você instalou era para uma versão antiga. A outra possibilidade é de você ter instalado dois ou mais Mods que não são compatíveis entre sí.

- E agora? Como faço para jogar novamente?
Recomendo que você copie todo o conteúdo da sua pasta Save do Minecraft para preservar seus mundos e exclua a pasta .minecraft da pasta roaming (Iniciar > Executar > %appdata%). Depois coloque uma nova .minecraft intacta no lugar e recoloque seus Saves no lugar. Agora seu Minecraft deverá ficar como novo.

segunda-feira, 13 de fevereiro de 2012

[Tutorial] Como fazer a linha de visão inimiga

Olá galera, tudo sussa?

Bom, nesse tutorial eu vou ensinar uma coisa muito útil e bem procurada: A linha de visão do inimigo. Vamos entender como uma variável mágica, a collision_line(x1,y1,x2,y2,obj,prec,notme), funciona, e com ela, faremos nosso inimigo começar a nos caçar apenas quando consegue nos ver.

Vamos lá?

Download do resultado: Clique aqui!

0. Objetivo do tutorial
1. Preparativos
2. Configurando os objetos
3. Testando
4. Considerações finais


0. Objetivo do tutorial:

Criarmos uma linha que liga o jogador e o inimigo e indica a visão do próprio. Se o inimigo ver o jogador, a linha fica vermelha, se não, verde. 
Porém, quando o inimigo parar de ver o jogador, queremos que ele continue procurando por um certo tempo o jogador até desistir, então também programaremos isso.

1. Preparativos

Primeiro, crie os seguintes objetos:

- draw_objeto
- jogador
- inimigo
- parede

Então especifique qualquer sprite para eles. De preferência 32x32 e todas quadradas.

2. Configurando os objetos:

Primeiro, vamos configurar a linha de visão do inimigo. No draw event do draw_objeto, coloque o seguinte código:
if collision_line(self.x,self.y,jogador.x,jogador.y,parede,0,1) //Se o inimigo não está vendo o jogador, ou seja, tem uma parede na frente...
draw_set_color(c_green)//A linha ficará verde
else //Se não...
draw_set_color(c_red) //A linha ficará vermelha. Corre!!

draw_line_width(jogador.x,jogador.y,inimigo.x,inimigo.y,3) //Desenha a linha que liga o jogador e o inimigo
Agora a linha de visão visual do inimigo está completa. Lembre-se que toda a parte de cima, assim como o objeto draw_objeto não serão normalmente necessário em seus jogos. Isso só servirá para você entender como vai funcionar a visão do nosso inimigo.

Agora, vamos programar o nosso inimigo para caçar o nosso herói caso ele o veja. No create event do nosso inimigo, coloque:
seguir =0
E no step event, coloque:
if !collision_line(self.x,self.y,jogador.x,jogador.y,parede,0,1) //Se o inimigo está vendo o jogador...
seguir =150
if seguir >0 //Se ele tiver visto o jogador...
{
seguir -=1
mp_potential_step(jogador.x,jogador.y,3,0) //Ele vai continuar seguindo o jogador até a variável seguir chegar à 0, desviando dos possíveis obstáculos.
}
Dica: Se você quiser adicionar um limite na visão do inimigo de distância, basta colocar if distance_to_object(jogador) <=qualquer_distancia no inicio do código acima.

Agora, no jogador, coloque um sistema de movimentação básico qualquer, apenas para testarmos.

Pronto! Agora tudo está configurado! Vamos ao teste?

3. Testando:

Agora crie uma room e espalhe algumas paredes pelo cenário. Coloque o jogador em uma ponta e o inimigo na outra, porém com obstáculos separando os dois.

Agora vamos ao teste, execute o jogo. Então, entre no campo de visão do inimigo, e quando ele começar a correr atrás de você, tente se esconder e espere ele desistir.

Se tudo deu certo, parabéns! Agora você já sabe como configurar uma visão inimiga!

4. Considerações finais:

Esse foi mais um rápido tutorial de GML. Lembre-se sempre: se for copiar, cite a fonte!

Então, é isso aí, até mais!

sábado, 11 de fevereiro de 2012

[Tutorial] Criando jogo Top-Down - Básico!

Fala galera, de boa?

Bom, eu já tinha feito o guia de como fazer um jogo Top-Down avançado, agora eu vim aqui trazer a vocês como fazer um jogo Top-Down básico, sem complicação, e bem mais fácil. Então, prontos?

Ah, não se esqueça de ir no Menu e ligar o Advanced Mode.

0. Objetivo do tutorial
1. Preparativos
2. Jogador
3. Obstáculos
4. Inimigos
5. Itens
6. Roons do jogo
7. Objetivo do jogo
8. Considerações finais

0. Objetivo do tutorial:

Criar um jogo Top-down em que o personagem deve desviar dos inimigos e salvar ovos de dragões para passar de fase.

1. Preparativos:

Primeiro, vamos criar os sprites e os objetos que usaremos no jogo. Deixe-os parado até o momento que formos usá-los e se quiser, pode especificar o sprite de cada um antes. Então, crie:

Sprites: (Faça todos 32x32 de preferência)
- jogador_baixo
- jogador_cima
- jogador_esquerda
- jogador_direita
- tesouro_sprite
- vida_sprite
- bau_sprite
- parede_1_sprite
- parede_2_sprite
- ovo_de_dragao_sprite (faça com 5 cores diferentes)
- inimigo_1
- inimigo_2
- inimigo_3
- inimigo_4
 obs.: Os inimigos, crie cada um com 4 subimagens, cada uma virada para um lado, começando pela direita, no sentido anti-horário.

Objetos:
- jogador
- ovo_de_dragao
- item_tesouro
- item_bau
- item_vida
- inimigo_principal
- inimigo_1
- inimigo_2
- inimigo_3
- obstaculo_principal
- parede_1
- parede_2

Vamos agora trabalhar com GML. Mas espera, onde devo colocar os códigos? Numa folha de código:


Agora, antes de mais nada, crie uma room. No Create event dela, coloque:
global.pontos =0
Deixe isso guardado no momento e vamos começar nosso trabalho.

2. Jogador:

Bom, como este é um jogo bem simples, nosso jogador será bem rápido de se fazer. No Create event do jogador, coloque:

 vidas =3

Agora, faremos o movimento. No Step event, coloque numa peça de código:

    //Movimentação para a direita
    if keyboard_check(vk_right)
    {sprite_index = jogador_direita
    if place_free(x+4,y){x +=4}
    }

    //Movimentação para a esquerda
    if keyboard_check(vk_left)
    {sprite_index = jogador_esquerda
    if place_free(x-4,y){x -=4}
    }

    //Movimentação para cima
    if keyboard_check(vk_up)
    {sprite_index = jogador_cima
    if place_free(x,y-4){y -=4}
    }

    //Movimentação para baixo
    if keyboard_check(vk_down)
    {sprite_index = jogador_baixo
    if place_free(x,y+4){y +=4}
    }

Agora que o movimento do personagem está pronto como passe de mágica, vamos programar para ele ''andar'' visualmente apenas quando uma tecla de movimento é utilizada. Coloque este código na mesma folha do código acima, depois dele.

    if keyboard_check (vk_down) or keyboard_check (vk_up) or keyboard_check (vk_right) or keyboard_check (vk_left) = true //Checa se algum direcional está sendo pressionado
    {
    image_speed=0.5 //A imagem do personagem se movimentará junto com ele
    }
     else //Se não...
    {
    image_speed =0 //O desenho do personagem ficará parado
    image_index =0 //e voltará para a primeira imagem
    }

Agora, ainda no step event mas em uma folha de código separada, coloque:
if vidas <=0 //Se não sobrarem mais vidas...
{
show_message("Você perdeu!") //Mensagem de Game over
game_restart() //O jogo recomeça
}
E que tal se, a cada 1000 pontos, o jogador ganha uma vida extra? Basta colocar mais um código no step event:
if global.pontos >=1000 //Se tiver mais de mil pontos...
{
vidas +=1 //Uma vida extra!
blobal.pontos -=1000 //Não se esqueça de descontar os pontos.
}
Pronto! Nosso personagem já está configurado! Agora vamos aos outros aspectos do jogo.

3. Obstáculos:

Bom, estes obstáculos vão formar nossas roons. Deixe os objetos parede_1 e parede_2 com Parent obstaculo_principal e ambos Solid também.

Se você quiser criar mais obstáculos, como pedras, árvores e etc, vá em frente, mas lembre-se de deixar todos sólidos e com Parent no obstaculo_principal.

4. Inimigos:

Como nosso personagem não dispõe de armas nem superpoderes, não podemos utilizar inimigos com muita IA ou estaríamos perdidos. Então, vamos utilizar apenas de alguns comandos básicos. Primeiro, temos quatro inimigos, inimigo_1...4 e o inimigo_principal.

Primeiro, coloque no Parent dos quatro inimigos o inimigo_principal.

No create event do primeiro, coloque:
direction = choose(270,90)
speed =4
No create event do segundo:
direction = choose(270,90)
speed =2
No create event do terceiro:
direction = choose(0,180)
speed =4
E no create event do ultimo:
direction = choose(0,180)
speed =2

Agora, adiciona um Collision event com o objeto jogador no inimigo_principal. Coloque o seguinte código:
jogador.vidas -=1 //Menos uma vida
show_message("Você foi atacado! Tente novamente!")//Mensagem
room_restart() //Sala reinicia
Como você pôde ver, mudamos apenas um detalhe de cada. Alguns andam mais rápido, outros mais lento, uns na vertical, outros na horizontal. Coloque sprites diferentes para cada um para ficar mais bonito. Lembre-se o inimigo_principal NÃO faz parte do jogo, então não coloque-o em nenhuma room.

Para finalizar, vamos colocar um código para eles inverterem a direção ao contato com obstáculos, para ficarem patrulhando numa mesma linha. Para isso, crie um Collision event com o objeto obstaculo_principal no objeto inimigo_principal e coloque o seguinte código:

direction +=180
Pronto! Agora os nossos inimigos já estão funcionando, agora vamos para o próximo passo!

5. Itens:

Para o jogo não ficar tão sem-graça, por que não adicionados alguns itens nele? Para isso temos o item_bau, item_tesouro e item_vida. Para programá-los é bem fácil.

Coloque um Collision event em cada com com o jogador.

No item_bau:
global.pontos +=100
instance_destroy()
No item_tesouro:
global.pontos +=50
instance_destroy()
No item_vida:
jogador.vidas +=1
instance_destroy()
Pronto! Agora basta espalhar eles pelo seu jogo! Vale lembrar que programamos o jogador para receber uma vida extra a cada 1000 pontos, então leve isso em consideração antes de distribuir os itens por aí!

6. Roons do jogo:

Antes de mais nada, faça alguns backgrounds legais. Crie mais quatro roons no jogo, totalizando 5. (lembre-se que a primeira precisa ter no Create event global.pontos =0, como eu tinha dito no começo do tutorial)

Coloque o nome das roons de: Sala_1, Sala_2, Sala_3, Sala_4 e Sala_5.

Agora, espalhe os itens e os inimigos e modele os caminhos com os obstáculos. Coloque o jogador numa localização que você ache melhor para começar cada room. Deixe tudo pronto para adicionarmos os detalhes finais.

7. Objetivo do jogo:

Agora vamos ao ovo_de_dragao, o objetivo para passar de fase no jogo e também para completá-lo. Agora, apenas para deixar o jogo mais bonito, coloque o seguinte código no Create event do ovo_de_dragao:
image_speed =0
image_index = room //Agora o ovo ficará com uma subimagem, ou seja, uma cor diferente em cada room
E então crie um Collision event com o objeto jogador:
if (room != room_last) //Se não for a última sala
{
show_message("Você conseguiu! Vamos para a próxima!") //Mensagem de sucesso
room_goto_next() //Próxima sala
}
else//Mas se for...
{
show_message("Você pegou todos os ovos de dragões! Obrigado por jogar!") //Mensagem final
game_end() //Fim de jogo
}
8.Considerações finais:

Bom pessoal, é isso. Aí está um tutorial fácil de entender, rápido de se fazer e que nos garante um jogo bem simples estilo Top-down.

Não se esqueça de preencher as informações do jogo e se quiser, adicionar um Menu nele para ficar mais completo.


Se for copiar, ao menos cite a fonte!


Valeu! E até a próxima!

[Tutorial] Como melhorar o acabamento do seu projeto!!

Iaê galera, tranquilo?

Bom, dessa vez eu vou falar de como melhorar os projetos com acabamentos indispensáveis para o jogo ficar mais bonito e talvez seja a diferença de um jogo ruim para um jogo bom. Então, vamos lá!

1 - Preencha a informação do jogo:

Você pode até desabilitar este comando, mas se não for o caso, preencha com informações necessárias, como história do jogo, controles, créditos, dicas, etc. Não formate em excesso e deixe tudo organizado.

2 - Faça um menu:

Indispensável. Faça um menu com botões que mudam caso o jogador passe a seta sobre e volte ao normal depois. Coloque ao menos quatro botões: Jogar, Carregar, Ajuda e Sair. Isso com certeza lhe rende alguns pontos a favor. 

3 - Utilize efeitos sonoros que combinam:
Mas não coloque qualquer coisa. Não vá colocar um barulho de tiro num jogo de arco e flecha e nem uma música do Sonic num jogo de apocalipse zumbi. Efeitos que não encaixam no jogo é melhor nem colocar, mas um efeito que combina com o jogo é indiscutivelmente a chave para um bom projeto.

4 - Use gráficos originais:

Mesmo que você não seja o melhor spriter, trabalhe nisso. Não é possível melhorar se você não se empenhar nisso, por pior que seja.

5 - Cuidado com os Bugs:

Um jogo com muitos bugs pode fazer até a pessoa desistir de jogar o seu jogo. Trabalhe nesse ponto, teste seu jogo diversas vezes, tente fazer várias possibilidades, quem sabe você não encontra os bugs.

6 - Pense bem no enredo antes de começar:

Projetos com enredos mal pensado são facilmente abandonados pois difícilmente podem ser consertados até certo ponto do jogo. Pense numa história básica, pois você certamente fará alterações durante o jogo. O título, deixe por último, assim você pode ver o projeto completo e pensar em um que mais combina.

7 - Faça uma interface decente:

A interface do jogo é a parte que mais conversa com o jogador. Se a interface for pobre ou mal-feita, que tipo de pessoa iria querer jogar todo o jogo olhando para ela?

8 - Estude novos códigos e teste novas possibilidades:

É o passo principal para evoluir seus jogos e ter a possibilidade de fazer aquelas coisas que você sempre sonhou mas nunca sabia o código para aquilo. E pode ter certeza que esse simples código que você queria vai te abrir muitas outras possibilidades.

9 - Procure sempre inovar:

Ninguém gosta de um jogo comum e sem sal. Esses jogos, você encontra aos milhares idênticos. Procure sempre adicionar recursos inovadores, idéias originais e um sistema de jogo interessante. Ninguém quer um jogo que você só mata ou só pula de plataforma em plataforma.

10 - Procure sempre causar uma boa impressão:

Quem sabe uma abertura de tirar o fôlego? Não se resume simplesmente em gráficos, mas uma interessante, com bons efeitos sonoros e com um tom profissional. Se você não consegue fazer isso, ao menos tente criar uma primeira fase legal para prender o jogador desde o começo, e não guardar só o melhor para depois.

11 - Mude os sprites das caixas de texto:

Para fazer isso, basta usar o message_background(nome_da_imagem) no Create event da primeira room. Também mude os sprite dos botões, ultilizando message_button(nome_da_imagem), lembrando que a imagem dos botões devem ter 3 subimagens (sem mouse, mouse sobre e clique do mouse).

12 - Faça cutscenes de Game over:

Não é nada interessante jogar algo que, no momento que você perde, uma caixa de texto aparece do nada, diz que você morreu e o jogo simplesmente recomeça. Faça uma room separada de Game over, com ao menos 5 segundos de animação, seja escrito "Fim de Jogo" aparecendo lentamente, com alguma musiquinha sádica ou qualquer coisa do Gênero. Use a sua imaginação!

Por enquanto é isso. Assim que eu tiver mais dicas, estarei editando este Post, então fiquem ligados! Até!

[Tutorial] Criando jogo Top-Down - Avançado!

Iae galera, tudo tranquilo?

Bem... dessa vez eu vou criar um super tutorial de como criar seu jogo de Top-Down de aventura e batalha em tempo real. Para quem não sabe, Top-Down é quando você olha o personagem por cima e tem a liberdade de se movimentar para todas as direções (diferente de um jogo de plataforma, onde a gravidade é aplicada ao jogo).

Nesse projetos, vamos explorar muitas possibilidades, o que fará o tutorial ser bem extenso. Mas depois que completarmos, você irá me agradecer. Pode ter certeza x3 Só cuidado para não se perder no fluxo do tutorial. Se não entendeu uma parte, vá tentando até conseguir, não pule partes e leia atentamente ou tudo vai dar errado no final.

Para isso, vocês devem ter o GameMaker 8.0 ou o 8.1 Standard(não usem o 8.1 Lite/grátis pois ela coloca uma watermark  da Yoyo games no seu jogo).

Antes de começarmos, não se esqueca de ir no Menu e checar se a opção Advanced Mode está ativa.

0. Objetivo do tutorial
1. Iniciando
2. O Jogador
    2.1 Primeiros passos
    2.2 Movimentação
    2.3 Ataque
    2.3 Energia, Vidas e Game over
    2.4 Vida Extra
3. Nossa primeira room e a câmera
4. Obstáculos
5. Itens
6. Inimigos e sistema de batalha
7. Objetivo do jogo
8. Interface
9. Considerações finais

0. Objetivo do tutorial:

Criar um jogo Top-Down em que o jogador necessita pegar o diamante no final das fases, atacando os inimigos com socos e flechas se necessário. O jogo deverá apresentar uma interface básica também.

1. Iniciando:

Bom galera, primeiro vamos criar os objetos do jogo. Para os sprites, recomendo que por hora usem alguns básicos como quadrados de diferentes cores. Vamos criar alguns sprites e objetos vazios por hora para usarmos mais tarde:

Sprites: (Faça todos eles 32x32 de preferência)

- jogador_esquerda
- jogador_direita
- jogador_cima
- jogador_baixo
- jogador_ataque_esquerda
- jogador_ataque_direita
- jogador_ataque_cima
- jogador_ataque_baixo
- parede_sprite
- flecha_sprite
- tesouro_sprite
- mask_32_32 (Deve ser um quadrado cheio que ocupe toda a imagem, sem sobras)
- item_energia_sprite
- item_vida_sprite
- diamante_sprite
- vida_barra_sprite
- bola_de_fogo_sprite

Objetos:

- jogador
- ataque_principal
- ataque_1
- flecha
- inimigo_principal
- inimigo_1
- inimigo_2
- inimigo_3
- obstaculo_principal
- obstaculo_alto
- obstaculo_raso
- tesouro
- inimigo
- item_energia
- item_vida
- diamante
- jogador_posicao_inicial
- interface
- bola_de_fogo

Criem esses objetos com os mesmos nomes. Todos eles ficarão vazios, se quiser, você já pode especificar as sprites deles.

Já, já, iremos usar GML (Game Maker Language) para programas nossos jogos, então, copie e cole os códigos em verde e coloque-os nos eventos que eu irei especificar. Mas colar onde? Cole nas páginas do Execute Code.



2. O Jogador

Bem, aqui está o nosso herói da vez. Ele vai carregar em sí o foco principal da câmera do jogo e várias variáveis importantes, por isso, ele nunca poderá deixar de existir.

2.1 Primeiros passos:

Assim sendo, vamos deixá-lo Persistent. Assim, basta colocar ele apenas na primeira room do jogo que ele passará adiante em todas as outras Rooms.

Também deixaremos ele Sólid. Pois assim, os inimigos não vão passar por cima dele futuramente e interpretarão ele como um obstáculo em potêncial.

Para evitarmos bugs na colisão com obstáculos, adicionaremos uma Mask para o jogador. A Mask dele será a mask_32_32 que criamos anteriormente.

Agora no Create event, vamos dar ao nosso personagem algumas funções importantes. Coloque uma peça de código e vamos carregá-lo com algumas informações necessárias.
atacando =false
face =0
pontos =0
energia =100
energia_maximo =energia
vidas =3
2.2 Movimentação:

Agora vamos lhe dar movimentação, que é a parte mais importante. Para isso, vamos usar um código que checa se na direção não existe objetos sólidos, se o botão está sendo pressionado e, enquanto as duas estiverem satisfeitas, o jogador vai andar. Veja um exemplo:
if keyboard_check(vk_up) //Checa se o botão 'Direcional para Cima' está pressionado
{face = 90 //A direção do jogador, em graus. Não é obrigatório, mas será muito útil.
sprite_index = jogador_cima //Caso for verdade, o jogador mudará sua sprite.
if place_free(x,y-4){y -=4} //Agora, se quatro pixels acima estiver livres de obstáculos sólidos, o jogador andará quatro pixels acima. Se não, ele não anda nada.
}
Se você entendeu como funciona este código, será fácil programar as outras direções do personagem. Vamos colocar este código no step event do objeto jogador. Assim, usaremos as setas de direção para movermos nosso personagem.
//Movimentação para a direita
if keyboard_check(vk_right)
{face =0
sprite_index = jogador_direita
if place_free(x+4,y){x +=4}
}

//Movimentação para a esquerda
if keyboard_check(vk_left)
{face =180
sprite_index = jogador_esquerda
if place_free(x-4,y){x -=4}
}

//Movimentação para cima
if keyboard_check(vk_up)
{face =90
sprite_index = jogador_cima
if place_free(x,y-4){y -=4}
}

//Movimentação para baixo
if keyboard_check(vk_down)
{face =270
sprite_index = jogador_baixo
if place_free(x,y+4){y +=4}
}
Depois disso, vamos arrumar a velocidade visual de movimentação do personagem. Mas como assim? Bem, você provavelmente quer ver o seu personagem ''andando'' apenas quando ele tem certa velocidade, e não mechendo as pernas enquanto estiver parado.

Para isso, vamos utilizar o seguinte código, também no step event, e deve ser após o código anterior:
if keyboard_check (vk_down) or keyboard_check (vk_up) or keyboard_check (vk_right) or keyboard_check (vk_left) = true //Checa se algum direcional está sendo pressionado
{
image_speed=0.5 //A imagem do personagem se movimentará junto com ele
}
 else //Se não...
{
image_speed =0 //O desenho do personagem ficará parado
image_index =0 //e voltará para a primeira imagem
}
Agora, a movimentação de nosso personagem está completa.

2.3 Ataque

Bom, agora vamos trabalhar no ataque do nosso personagem. Para inovar, vamos fazer duas possibilidades: o ataque de curto alcance e atirar flechas. ''Atirar flechas'' pode ser facilmente substituido por tiros, então fique ligado!

Antes disso, vamos alterar um pouco os nossos objetos ataque_principal, ataque_1 e flecha. Faça o ataque_1 e a flecha ficarem Parent do ataque_principal.

O ataque_1 representará o ataque de curta distância do personagem, seja um soco ou coisa do tipo. Coloque qualquer sprite, de preferência 32x32 e de apenas uma subimagem. Você provavelmente vai querer que ele exista mais fique invisível aos olhos do jogador, então, vamos desmarcar a caixa de Visible dele. Agora, vá em Other events > Animation End e coloque apenas a função instance_destroy(). Isso fará com que ele se destrua quase instantaneamente. Mas porque isso é necessário? Simples, para ele ser destruído (o ataque) assim que acertar ou não acertar o inimigo.

Agora a flecha. Coloque no objeto uma sprite com 4 subimagens, cada uma com a flecha apontando para uma direção diferente. A primeira subimagem deve ser da flecha apontando para a direita (a segunda, para cima, a terceira para a esquerda e a ultima para baixo). Agora, coloque no create event o seguinte código:
direction = jogador.face //Faz com que ela vá na direção do jogador no momento que ela foi criada
speed =8 //Velocidade da flecha
image_speed =0
image_index=direction*image_number/360 //Este código faz com que a flecha escolha automáticamente a subimagem certa conforme sua direção.
Ainda no Create Event, coloque o alarm[0] para 150, e no evento do alarm[0], coloque instance_destroy(). Isso fará com que, em 5 segundos, a flecha se auto-destrua, para impedir que ela vá muito longe.
Agora coloque um evento de colisão com o objeto obstaculo_alto, instance_destroy() também, para ela ser destruida assim que bater em alguma parede ou coisa do gênero.

Agora que nós programamos os dois tipos de ataque, vamos programar para o jogador em criar ambos. O botão para o jogador atacar de perto será a letra A, e para o jogador atirar uma flecha, será a letra S.

Primeiro vamos programar o ataque curto/soco no jogador. Adicione o seguinte código na letra correspondente (neste caso, a letra A).
if atacando =false //Se ele ainda não estiver atacando no momento...
{atacando =true //Agora ele está.
if face = 0
instance_create(x+16,y,ataque_1)
if face =90
instance_create(y-16,y,ataque_1)
if face =180
instance_create(x-16,y,ataque_1)
if face = 270
instance_create(y+16,y,ataque_1)
}
Agora faça o mesmo com a flecha, só que em outra tecla (no nosso caso, S). Use o mesmo código acima, trocando apenas o ataque_1 por flecha. Se você preferir, troque também todos os 16 por 8, assim, evitará alguns bugs de colisão nas paredes e etc.

Muito bem! Agora nosso personagem ataca! Mas perái... ele pode até criar o ataque e a flecha, mas ele ainda não aparece atacando... Bom, para isso, vamos utilizar um código simples como o de andar, e de quebra, impediremos o jogador de andar enquanto ataca.

Coloque este código no step event, na mesma página do código do movimento, porém primeiro. Assim:
if atacando =true //Se o personagem estiver atacando...
{
image_speed =0.5
if face =0
sprite_index = jogador_atacando_direita
if face =90
sprite_index = jogador_atacando_cima
if face =180
sprite_index = jogador_atacando_esquerda
if face =270
sprite_index = jogador_atacando_baixo
}
else //Ou então... apartir daqui, ficará o código do movimento do personagem, assim, se ele NÃO estiver atacando, ele ficará livre para andar.
{Coloque o código de movimento aqui dentro e apague esta mensagem, ou seu jogo vai dar erro}
Agora, coloque isto no evento Other > Animation end:
atacando =false //Assim, o jogador vai parar de atacar assim que a animação de ataque dele terminar.
Ufa! Sei que essa parte foi extremamente cansativa e trabalhosa, mas posso lhe dizer: o pior já foi. Agora respire fundo e vamos continuar.

2.4 Energia, Vidas e Game over:

Agora vamos programar a parte da energia, vida e para nosso personagem morrer. O Próprio GameMaker oferece esse sistema, mas é, na verdade, bem limitado, fora isso, se você conseguir entender como funciona, você terá infinitas possibilidades!

No Create event do nosso personagem, vamos relembrar algumas coisas que nós especificamos:
energia =100
energia_maximo =energia 
vidas =3
Assim sendo, vamos fazer o seguinte: Quando a energia chegar em 0, o personagem perde uma vida. Se as vidas chegarem ao 0, o jogo acaba. Faça o seguinte, numa folha de código separada no step event do jogador:
if energia < 0 {energia =0} // Impede que a energia fique menos que 0
if energia > energia_maximo {energia = energia_maximo} //Impede que a energia fique mais que o limite que especificamos.

if energia =0 //Agora, se a energia chegar à 0...
{
show_message("Você morreu! Tente novamente!") //Mensagem de morte
vidas -=1 // Retira uma vida
room_restart() // Futuramente faremos com que isso faça o jogador voltar para a posição inicial
}
Muito bem, agora a nossa energia está programada e irá funcionar corretamente. Agora vamos programar as vidas. Você pode colocar este código na mesma folha da energia, depois ou antes:
if vidas <=0 {
show_message("Fim de Jogo!!") // Mensagem de Game over
game_restart() // Reinicia o jogo
}
Muito bem! Agora o nosso Game over também está programado.

2.5: Vida extra:

Nós ainda temos que pensar no que fazer com os pontos que o personagem vai pegar durante o jogo. Por que não colocamos, por exemplo, para cada 1000 pontos que ele obter, ele ganha uma nova vida?
Para isso, coloque outra folha de código no step event:
if pontos >=1000 // Se o jogador tiver mil ou mais pontos
{
vidas +=1 // Ele ganha mais uma vida
pontos -=1000 // Não se esqueça de descontar os mil pontos, ou ele ficará ganhando vidas infinitas toda hora
}
Ótimo! Agora nosso jogador está definitivamente completo! Agora que temos metade do jogo em nossas mãos, vamos aos outros aspectos necessário para o jogo rodar.

3. Nossa primeira room e a câmera:

Bom, agora, crie uma sala de cerca de 960x960 e coloque uma instância de jogador no centro dela.Você pode colocar um background legal.

Agora, vá na aba Views e marque a caixa Enable use of views e no View[0], marque a caixa Visible when room starts. Agora você pode alterar livremente os valores, mas considere muitas coisas antes:

View in room: Altera o tamanho da câmera da room. O padrão é 640x480 e é um bom tamanho, quase ideal. Não precisa alterar o X e Y pois não será uma câmera fixa, ela vai seguir o jogador.

Port on Screen: Altera o tamanha da tela do jogo no computador da pessoa. Se você colocar maior que o View in room, ele vai esticar os gráficos do seu jogo, e se for menor, vai comprimir. O ideal é deixar do mesmo tamanho que o view.

Object following: Coloque jogador. O Hsp (Horizontal Speed) e Vsp (Vertical Speed) é a velocidade da câmera ao seguir o jogador. De preferência deixe -1 como está. Já o Hbor e Vbor, coloque valores como 128/96, para centralizar um pouco o jogador na câmera.

4. Obstáculos:

Agora vamos criar os obstáculos do jogo. Eu pedi a vocês para criarem os objetos obstaculo_principal, obstaculo_raso e obstaculo_alto. Mas por quê isso? 

Bem, a explicação é muito simples: o obstaculo_alto não permitirá a passagem de flechas e coisas do gênero enquanto o obstaculo_raso sim, mas ambos não permitirão o jogador nem os inimigos passarem. Legal, né? Assim, você poderá fazer paredes não deixar flechas passarem, mas ao mesmo tempo possibilitar do jogador atirar flechas nos inimigos do outro lado de um rio ou por grades, por exemplo.

Bom, se você acompanhou o tutorial, já programamos a flecha para ser destruída no contato com o obstáculo_alto.

Agora, faça o obstaculo_alto e obstaculo_raso ficaram no Parent com o obstaculo_principal. Isso não terá uma utilidade definida, mas é somente por conveniência. Coloque também todos os três como Solid por motivos óbvios.

Agora, você pode criar todos os obstáculos que imaginar: árvores, pedras, rios e etc. Mas lembre-se sempre de ligar os obstáculos no Parent com o obstaculo_alto ou o obstaculo_raso, dependendo se ele deixa ou não flechas passarem por ele. Lembre-se: nenhum objeto além do obstáculo_raso e obstáculo_alto devem ser ligados diretamente no obstáculo_principal.

Lembre-se também de colocar a mask_32_32 como mask dos obstáculos para impedir bugs de colisão.

Então, coloque os obstáculos na sua room e faça um rápido teste. Atire flechas e tente andar sobre eles. Se nenhum deles deixar o jogador passar, e os rasos (provalmente rios, por exemplo) não destruirem as flechas, ótimo! Deu tudo certo!

Se você quiser colocar a room como Persistent, fique a vontade. Mas lembre-se: Se ela NÃO for Persistent, sempre que você voltar nela um novo jogador será criado, então, você pode:

- Deixar a room persistent
- Impedir do jogador voltar nessa room depois que sair dela

5. Itens:

Agora vamos criar nossos itens. Eu pedi para vocês criarem três itens: item_energia, item_vida e tesouro. São muito simples de serem programados, e todas suas funções eles serão especificadas via Collision event com o jogador.

item_energia:
jogador.energia +=25
instance_destroy()
item_vida:
jogador.vida +=1
instance_destroy()
item_tesouro:
jogador.pontos +=100
instance_destroy()
Se os itens tiverem uma animação básica em seus sprites, coloque um image_speed =0.5 no Create event para que ela não fique muito rápida.

Agora nós temos os itens para espalhar pelo nosso jogo. Agora vamos continuar que estamos quase acabando!

6. Inimigos e sistema de batalhas:

Bom, agora chegou a hora de colocar ameaças e desafios no nosso jogo. Existe infinitas possibilidades para programar uma IA de inimigos. Não vamos entrar em detalhes perfeccionistas nem uma IA tão inteligente, vamos apenas fazer um molde básico de inimigo.

Como o nosso jogo permite o personagem atacar, vamos ter que fazer inimigos mais agressivos e que saibam atacar o jogador também.

Eu pedi para vocês criarem quatro objetos: inimigo_principal, inimigo_1, inimigo_2, inimigo_3. Assim como nos obstáculos, o inimigo_1,2 e 3 serão ligados no inimigo_principal, e assim como os obstáculos, o inimigo_principal não fará parte do jogo diretamente, é apenas o molde que dará as informações mais necessárias para seus afiliados, por isso, faremos o principal nele, e para diferenciar um inimigo do outro, faremos pequenas alterações, como velocidade, sprite e etc. Se ficou difícil de entender, vamos por a mão na massa que se aprende mesmo é fazendo.

Vamos primeiro fazer o ataque deles, que será representado pelo objeto bola_de_fogo que já foi criado. No Create event da bola_de_fogo, coloque:
move_towards_point(jogador.x,jogador.y,4)
Na colisão com o jogador, coloque:
jogador.energia -10
instance_destroy()
E na colisão com o obstaculo_alto, coloque apenas:
instance_destroy()
No Create event do inimigo_principal, coloque:
velocidade =0
energia =0
delay =0
Então, no step event, vamos fazer uma IA básica:
if distance_to_object(jogador) <=160 //Se ele estiver a menos de 160 pixels de distância do jogador...
{
if distance_to_object(jogador) <=64 //Agora, se ele estiver ainda mais perto do jogador...
{
if delay <=0{
delay =100
instance_create(x,y,bola_de_fogo)  //Ele ataca
}
}
else //Se não...
mp_potential_step(jogador.x,jogador.y,velocidade,0) //Ele continua andando em direção ao jogador
}
else //Se não...
speed =0 //Para de andar

if delay >0{delay -=1}
if energia <=0 {instance_destroy()} //Se a energia acabar, ele é destruido.
Agora vamos fazer o inimigo perder energia quando é atacado. Para isso, crie um Collision event com o objeto ataque_principal:
energia -=irandom_range(10,25) //Faremos ele perder entre 10 e 25 pontos de energia quando atacado.
other.destroy_instance() //Destruir o ataque
Só para finalizar, vamos fazer com que os inimigos parem de andar no contato com a parede. Coloque um evento de colisão com o obstáculo_principal.
speed =0 //Apenas por conveniência, já que a IA dele impede que ele tente atravessar obstáculos
Agora, nosso inimigo_principal já está totalmente pronto. Agora, vamos fazer pequenas alterações no inimigo_1, inimigo_2 e inimigo_3.

No Create event do inimigo_1:
velocidade =1
energia =50
delay =0
No Create event do inimigo_2:
velocidade =4
energia =20
delay =0
No Create event do inimigo_3:
velocidade =2
energia =70
delay =0
Todo os outros eventos não precisam ser alterados, pois estão puxando informação da programação do inimigo_principal, já que estão de Parent nele. Agora que os inimigos estão totalmente programados, você nós podemos partir para o penúltimo passo do nosso mega tutorial.

7. Objetivo do jogo

Claro que todo jogo deve ter um objetivo. Então, vamos colocar como objetivo o jogador pegar o diamante. Você provavelmente deve ter colocado várias instâncias na sua primeira room, então, agora coloque alguns inimigos, faça um pequeno "labirinto" (mas não leve ao pé da letra, pois isso não é um jogo de maze) e coloque o diamante no fim dele. Agora vamos programar o diamante.

Coloque um Collision event do diamante com o Jogador.
if (room != room_last) //Se não for a última room do jogo
{
show_message("Você conseguiu! Vamos para a próxima fase!") //Mensagem de sucesso
room_goto_next() //Próxima fase
}
else //Mas se for...
{
show_message("Parabéns! Você conseguiu vencer a última fase! Obrigado por jogar!!") //Mensagem final
game_end() //O jogo fecha
}
Agora o diamante está programado para passar as fases e terminar o jogo. Mas quando você passa a fase, provavelmente perceberá que o seu jogador, que é Persistent, inicia a próxima no mesmo lugar que ele terminou a anterior. É aí que encontra nosso objeto especial: jogador_posicao_inicial.

Coloque o jogador_posicao_inicial no lugar que você quer que o jogador comece a fase. Então coloque no other > room_start do jogador_posicao_inicial e coloque o seguinte código:
jogador.x = x
jogador y =y
Agora sempre que o jogador entrar numa room ou morrer (lembra que programamos para a room reiniciar quando o personagem morrer?), ele é transportado automáticamente para o jogador_posicao_inicial. Não se esqueça de colocar um sprite qualquer nele e deixar o Visible dele desligado. E claro, lembre-se de colocar o jogador_posicao_inicial em todas as rooms do jogo.

8. Interface:

Agora que nosso jogo está praticamente completo, por que não deixá-lo mais bonito e com algumas informações? Para isso, criamos o sprite vida_barra_sprite. Faça dele um sprite cerca de 100x25 com cerca de 20 subimagens, cada uma menos cheia que a outra.

Salve esta imagem se desejar.
Agora, precisamos de um objeto para colocar nossa interface na tela. Para isso criamos o objeto interface. Deixe ele sempre Visible e Persistent, e coloque ele na mesma sala que o jogador. Além disso, coloque o Depth dela como -1000 (isso fará ela ficar acima de qualquer objeto).

Agora, acrescente o Draw Event e vamos fazer a interface básica do nosso joguinho.
draw_sprite(vida_barra_sprite,(jogador.energia*20/jogador.energia_maximo),view_xview[0]+4,view_yview[0]+4)
Este código colocará sua barra de energia no canto superior esquerdo da tela como mágica. Agora vamos adicionar algumas informações, como vidas restantes e a pontuação.

Coloque uma cor legal no draw event da interface (uma que não seja tão escura nem tão clara) e crie uma fonte legal, nem muito pequena nem muito grande e coloque-a também (ambos acima da folha de código).

Agora adicione o código na mesma folha da barra de vida.
draw_text(view_xview[0]+4,view_yview[0]+30,"Vidas: "+string(jogador.vidas))
draw_text(view_xview[0]+4,view_yview[0]+50,"Pontos: "+string(jogador.pontos))
Pronto! Agora sua interface está completa!

9. Considerações finais:

Pronto! Agora criamos todos os básicos que um jogo deve ter usando GML. Teste seu jogo e veja se funciona. Se algo no tutorial está dando errado, favor avisar!!

Logo, criarei uma engine com tudo pronto e disponibilizarei o Download para vocês verem como é nosso jogo pronto.

Copie, mas cite a fonte!!!

Até a próxima!