Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

[INT] [Tutorial] Criando Missões

Tutoriais, videoaulas, guias e downloads para te ajudar nos estudos.
Avatar do usuário
Tutoriais & Aulas
Colaborador
Colaborador
Reações: 0
Mensagens: 110

[INT] [Tutorial] Criando Missões

Mensagem por Tutoriais & Aulas » Sex Abr 29, 2016 12:28 am

Autor original: Gonçalves
Tutorial
Criando Missões com Objetivos


Você quer adicionar um pouco mais de diversão aos seu jogos? Que tal adicionar um sistema bem simples de missão? É bem simples de fazer, funciona pra qualquer tipo de jogo e é fácil de deixar do seu jeito. Primeiramente vamos baixar essa engine que servirá de base pra gente:

Código: Selecionar todos

https://dl.dropbox.com/s/j4e7qww5wghc3nb/[Tutorial]%20Criando%20Miss%C3%B5es%20-%20Engine%20Base.gmk
Veja bem como funciona tudo na engine, nosso foco não é ela, mas é bom que entenda como tudo ocorre. Ela tem um jogador, que se move com WSAD e atira com o mouse, um obj_aliado, que não faz nada, e um obj_inimigo, que ataca quem estiver mais próximo.

Desenvolvimento

Primeiro vamos criar nosso objeto missao1, com depth -100000, já coloque-o na room. Agora exclua todos os outros objetos, exceto os blocos e o jogador.

No Create, vamos colocar tudo que terá no início da missão, no nosso caso, definiremos a variável objetivo como 0 e logo depois a mensagem inicial.

Código: Selecionar todos

objetivo = 0
show_message("Está a nossa missão.")
Agora criaremos um inimigo (crie onde quiser) salvando-o numa variável. E logo após, outra mensagem:

Código: Selecionar todos

show_message("Seu primeiro objetivo é matar um inimigo.")
E pra finalizar, criaremos a variável desc que salvará a descrição do objetivo atual:

Código: Selecionar todos

desc = ""
No todo, ficará assim:

Código: Selecionar todos

objetivo = 0
show_message("Está a nossa missão.")
meu_inimigo = instance_create(600,300,obj_inimigo1)
show_message("Seu primeiro objetivo é matar um inimigo.")
desc = ""
Vamos desenhar no Draw o objetivo atual.

Código: Selecionar todos

draw_set_color(c_red)
draw_text(10,room_height-30,desc)
Agora começaremos a criar o sistema de objetivos, que vai no Step. Vamos começar com a seguinte estrutura:

Código: Selecionar todos

if objetivo = 0
{
    // Descrição do objetivo
    Código

    // Outros
    Código

    // Condição de fracasso
    Código

    // Condição de sucesso
    Código
}
Onde está "código" vamos adicionar o conteúdo do objetivo, em cada "aba". Vamos usar esse exemplo:

Código: Selecionar todos

if objetivo = 0
{
    // Descrição do objetivo
    desc = "Mate o inimigo"
    
    // Outros

    // Condição de fracasso
    if ! instance_exists(obj_jogador)
    {
        show_message("MISSÃO FRACASSADA!")
        game_restart()
    }
    
    // Condição de sucesso
    if ! instance_exists(meu_inimigo)
    {
        objetivo += 1
    }
}
Explicando as abas:

"Descrição do objetivo": O código atualiza a descrição atual. A atualização é feita a cada Step, o que não é a forma mais adequada apesar de que muito dificilmente isso pesará no jogo. Cabe ao programador otimizar da melhor mais viável pra ele. Eu costumava atualizar a descrição de objetivo apenas quando cumprisse o anterior, mas prefiro assim.

"Outros": Nessa "aba", eu deixo tudo que não se encaixa no resto, como timers por exemplo, o que não usaremos nesse exemplo.

"Condição de fracasso": Condição para que a missão seja dada como fracassada. Nesse caso, apenas a morte do jogador nos dará esse resultado.

"Condição de sucesso": Condição para que o objetivo seja alcançado e a missão avance, ou se for o caso do último, a missão seja dada como cumprida. Nela checamos se o meu_inimigo, criado no início da missão, não existe/está morto, se sim, avançar.

Agora, como teste, colocaremos abaixo dessa estrutura (fora dela, claro) essa:

Código: Selecionar todos

else if objetivo = 1
{
    // Descrição do objetivo
    desc = "Espere 5 segundos para que a missão seja dada como cumprida"
    
    // Outros
    tempo += 1
    
    // Condição de fracasso
    if ! instance_exists(obj_jogador)
    {
        show_message("MISSÃO FRACASSADA!")
        game_restart()
    }
    
    // Condição de sucesso
    if tempo >= room_speed*5
    {
        show_message("MISSÃO CUMPRIDA!")
        game_restart()
    }
}
Crie a variável tempo no Create e defina como 0.

O objetivo é apenas esperar 5 segundos, e aí então será decretada como cumprida a missão.

Apague esse último objetivo, agora vamos adicionar ao efeito da condição de sucesso do objetivo 0 a criação de um obj_aliado, salvando-o numa variável. Que ficará assim:

Código: Selecionar todos

// Condição de sucesso
    if ! instance_exists(meu_inimigo)
    {
        objetivo += 1
        meu_aliado = instance_create(room_width/2,room_height/2,obj_aliado)
    }
Criaremos o objetivo 1, que ficará assim:

Código: Selecionar todos

else if objetivo = 1
{
    // Descrição do objetivo
    desc = "Proteja a seu aliado dos inimigos ("+string(20-floor(tempo/room_speed))+" segundos restantes)"
    
    // Outros
    tempo += 1
    spawn += 1
    
    if spawn >= 30
    {
        ox = random(room_width)
        oy = random(room_height)
        
         if ! collision_circle(ox,oy,50,obj_bloco,0,0)
        and ! collision_circle(ox,oy,120,obj_jogador,0,0)
        and ! collision_circle(ox,oy,120,obj_aliado,0,0)
        {
            instance_create(ox,oy,obj_inimigo1)
            spawn = 0
        }
    }
    
    // Condição de fracasso
    if ! instance_exists(obj_jogador)
    or ! instance_exists(meu_aliado)
    {
        show_message("MISSÃO FRACASSADA!")
        game_restart()
    }
    
    // Condição de sucesso
    if tempo >= room_speed*20
    {
        show_message("MISSÃO CUMPRIDA!")
        game_restart()
    }
}
Crie a variável spawn no Create e defina como 0.

Ele é um pouco mais complexo. O que acontece nesse?

A descrição tem um contador do tempo restante.

Em "Outros" temos o temporizador da missão e de spawn dos inimigos. Logo após fazemos a checagem do tempo de spawn e criamos um inimigo, também, checamos se ele não está perto demais do jogador, do aliado, e dos blocos.

A condição de fracasso agora, além da morte do jogador, é também a do aliado.

A condição de sucesso é a variável tempo bater 20 segundos, que dará a missão como cumprida.

Engine

A engine final você pode baixar aqui:
Obrigado pela atenção, espero que seja útil!

Responder

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 6 visitantes