O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Criando um jogo de plataforma (4/5)

Iniciado por MayLeone, 01/12/2012 às 11:23

[box class=titlebg]Criando um jogo de plataforma p4 (inimigos e obstáculos)[/box]
[box class=catbg3]Bom, olá! Bem vindo (a) a mais uma parte do tutorial de como criar seu jogo de plataforma, através da engine>> Rpg Maker XP.
Na parte anterior desse tutorial, você aprendeu um pouco do básico de um jogo de plataforma, que seria como criar os sprites de animação e como configurar os tipos de ataques, tudo isso feito por eventos.
Aqui nesta parte do tutorial iremos aprender a criar os obstáculos no mapa, os inimigos (título do tutorial auto-explicativo) e diversas coisas, usando eventos, ainda! Mas claro, iremos usar um pouco os scripts nessas tarefas.
Vamos lá![/box]


[box class=titlebg]Os diversos tipos de inimigos:[/box]
[box class=catbg3]Para começar, quero vocês tenham uma ideia de que, em qualquer jogo, independente do seu gênero, temos os inimigos (personagens que são rivais do herói, e que nos cabe destruí-los para passarmos de fase, e completarmos o jogo)
Certo, mas vamos pensar... nem todos os inimigos são iguais, e não digo em termos gráficos, e sim de atitudes, por exemplo... uns atiram coisas, outros passam voando pelo mapa, outros tem uma rota definida de caminho... enfim... vários, não é? Aqui irei dar exemplos de alguns tipos de inimigos que iremos configurar no jogo de plataforma, eles são:

O que a imagem acima quer dizer.
O primeiro tipo de inimigo nos atira flechas (que podem nos causar danos se acertar-nos). Já o outro anda de um lado para o outro, da esquerda pra direita, sem sair dessa rota. O próximo é mais dificil de matar, não basta o atacar uma vez para que ele morra. O do lado é aéreo, ou seja, ele passa voando pelo mapa, por cima de todos. O de baixo é aquático, ou seja, fica submerso na água (só podemos encontra-lo dentro d'gua). O outro é 'perseguidor', isto é, persegue o personagem no mapa, até que o mate, o outro passa reto no mapa... vai andando sem querer saber o que vem pela frente, até sumir. E o último é um 'saltador', ou seja, ele vive pulando pela fase atrás do herói.

Iremos aprender a criar esses tipos de inimigos no mapa, começamos pelo mais fácil: o que anda em rotas.
O que isso quer dizer? Significa que ele se move a partir de uma rota configurada, podendo tanto ser da esquerda para direita, quanto pra cima ou para baixo, ou para baixo e para esquerda, ou para cima e para direita... enfim tanto faz, o que importa é que ele se move conforme uma rota pré-configurada por você mesmo.
Vamos lá...[/box]

[box class=titlebg]Configurando seu inimigo:[/box]
Spoiler
[box class=catbg3] Primeiro crie o evento do inimigo no mapa, e coloque o gráfico que queria para ele, deixe-o em animação fixa e processo paralelo.
Agora em comandos de eventos chame o comando chamar script e ponha isto:
$game_map.events[@event_id].gravity = 0

Após fazer isso, chame esse comando novamente, só que dessa vez coloque isto:
self.high = true

Vá em controle de Switch Local, e escolha a A, deixando-a on.
Agora, nesse mesmo evento, crie uma nova página, ligue a switch local A, coloque em animação fixa, processo paralelo, com o mesmo gráfico da página anterior para o inimigo, e deixe a ''freq'' ou como chamamos frequência em altíssima.
Assim:





Certo! agora iremos configurar a rota do carinha aí.
Para isso vá em tipo, e escolha pré-definido.
Irei fazer com que ele dê três passos para a esquerda e depois três para a direita.
Coloque em mover evento três ''mover à esquerda'' coloque esperar 5 frames, e agora coloque mudar gráfico. Então escolha o gráfico do seu char do lado esquerdo, depois disso coloque para esperar 4 frames. Repita esse processo mais quatro vezes, só que sem o ''mover à esquerda'', só repita o processo do gráfico (mais fácil copiar e colar o que já tem feito)
Agora coloque mover à direita três vezes e pronto (não esqueça de deixar marcado a opção ''repetir operação''):
Spoiler
[close]

Esse tipo de inimigo está pronto!
Agora vamos fazer com que o ataque (tanto o de primeira pessoa, quanto o de enterrada, tenha efeito sobre ele) E essa parte do tutorial irá servir para todos os inimigos, exceto o inimigo titulado de ''mais dificil de matar'', mas isso a gente discute outra hora.
Bem vamos lá...

Agora que configurou a rota do inimigo, vamos em comandos de eventos.
Logo na primeira linha, chame o comando chamar script e ponha isto novamente:
game_map.events[@event_id].gravity = 0

E depois com outro ''chamar script'' ponha isto:
self.high = true

Pronto.
Agora iremos nos utilizar do script de colisão, aquele que eu passei à vocês na primeira parte desse tutorial, que por sua vez, nos livra da irritante tarefa de criar colisões entre dois eventos através de variáveis.
O conceito do script é o seguinte: ele irá necessitar do ID dos dois eventos que desejamos colidir para que certos comandos sejam ativados, dentre eles no caso são: o evento do ataque em primeira pessoa e o evento do inimigo.
Para isso, pegue a ID do evento do seu ataque. (A ID é o número do evento, você o encontra nessa barra no evento, acima do nome do seu evento:


No meu caso, o evento do inimigo que acabamos de criar é 008, como mostrado no print acima, e o do meu evento de ataque é de ID 003.
Então o que iremos fazer agora... iremos chamar o comando condição, nele marque a opção ''script''
Lá ponha isto: colisao(8,3,0)
Sendo que 8 é a ID do evento do inimigo e 3 a ID do evento do ataque, então aqui você irá colocar os números das IDs dos eventos que você quer colidir.
Zero é o número que indica que o evento X passe através do evento Y para que o mesmo tenha efeito. (recomendo que sempre, SEMPRE mesmo deixar em 0 essa parte)
Bom, agora dentro das condições iremos fazer o seguinte, já que esse é o comando de colisão entre evento e ataque, será quando o ataque acertar o inimigo. O que acontecerá aqui será configurado ao seu gosto, mas eu vou deixar um exemplo aqui.
Quando o ataque colidir com o inimigo, o inimigo irá piscar (animação) e então ele irá cair do mapa até desaparecer e de quebra você ainda ganhará 250 pontos (na verdade dinheiro, lembra do que eu disse na parte 1 do tutorial? o dinheiro será usado como pontos)
Para fazer isso coloque a animação que preferir no evento do inimigo (eu criei uma piscando) e ponha esperar 5 frames. Essa foi a animação, agora para o evento cair do mapa, chame o comando chamar script e coloque isto:
self.high = true

Chame-o novamente e ponha mais isso:
$game_map.events[@event_id].gravity = 2

Agora coloque esperar 20 frames, em seguida, ponha para aumentar seu dinheiro em 250 (ou a quantia que quiser) e coloque o comando ''apagar evento temporário''
Bem, essa foi a primeira parte do seu comando, ele deve estar mais ou menos assim:


É, ainda não acabamos, faltam colocar para que o herói receba danos ao tocar o evento do inimigo, e que o evento do inimigo morra ao colidir com o evento de enterrada.
Vamos por parte, primeiro os danos no herói:

Agora na segunda linha do seu comando, coloque 4 vars, duas delas configuradas com as Coordenadas X e Y do heroi e duas delas com as mesmas coordenadas (X e Y) do evento do inimigo.
Feito isso, vem a parte meia que complicada (nem tanto, vai) chame o comando condições e nele escolha a var X do heroi, depois em baixo da opção ''constante'' nas condições, você encontra uma outra opção com o nome de ''variável'', marque essa opção e selecione a var X do INIMIGO!


Dê ok.
Agora em baixo dessa condição, crie mais outra condição da mesma forma só que com as vars das coordenadas Y do heroi e em baixo na opção ''variável'' a var das coordenadas Y do inimigo.
Bom, essa foi a parte ''complicada''
Nem tanto  né, só é complicada na hora de colocar var X com var X e var Y com var Y.
Agora vem a parte legal, os comandos caso o inimigo e o heroi estiverem nas mesmas coordenadas X e Y (que foi o que configuramos agora)
Aqui também fique à seu critério, mas como eu gosto de deixar exemplos aqui... aí vai um.
Em baixo da segunda condição eu coloquei para que uma SE se execute com o som do personagem levando um dano, logo em seguida mudei o gráfico dele para o gráfico dele ''morrendo'' depois de 10 frames eu coloquei para que o gráfico dele normal (correndo) volte e que ele perca 100 de Hp, e por fim esperar 20 frames (para que o comando tenha uma pausa e não se repita novamente, tirando mais outra quantidade de Hp, logo em seguida)
O comando até aqui ficou assim:


Essa última parte, você deve estar pensando que eu poderia ter simplesmente colocado a opção ''ao tocar evento'' para que esses comandos se ativassem, ao invés de ter esse trabalho todo com as vars, mas não... tenho dois motivos para não ter feito dessa maneira.
O primeiro: como o evento já estava em processo paralelo para executar a função do script de colisão, seria impossível colocar ao tocar evento, já que o evento está em processo paralelo.
O outro motivo é que, mesmo eu não tendo o evento de colisão, se fosse o caso, eu não poderia colocar ''ao tocar evento'', pois graças ao script de plataforma, o evento não funciona ao tocar nele, a não ser que o evento esteja com a opção ''atravessar'', porém, com essa opção marcada, o evento não pararia de executar seus comandos de danos, pois o herói poderia atravessa-lo, fazendo assim, perder-se todas as vidas sem poder se mover e sair do inimigo.
Enfim, vamos para a última parte dos comandos do inimigo: a enterrada.
Ele é feito praticamente da mesma maneira que o comando do ataque: através do script de colisão.
Você irá colocar a ID do evento de enterrada e a ID do evento do inimigo nas condições de script, depois é só colocar os mesmos comandos do ataque e suas colisões.
Seu evento então, deve ficar assim:

É um comando enorme, mas enfim acabamos nosso evento do inimigo!
Agora iremos aprender a criar outros tipos de inimigos (só que apenas suas rotas e mudanças de gráficos) os comandos que aprendemos agora aplica-se em todos os outros tipos de inimigos, só não esqueça de mudar as vars e as IDs no script de colisão.[/box]
[close]


[box class=titlebg]Outros tipos de inimigos:[/box]
[box class=catbg3]Outros tipos de inimigos:
Aquáticos: esses inimigos você pode colocar uma rota também, só que nas fases que seu personagem está por baixo d'gua.
Aéreos: Deixe esse inimigo em algum local alto, que não seja o chão, coloque o chamar script com esse código: $game_map.events[@event_id].gravity = 0 para que ele fique voando pelo mapa, e não caia.
Perseguidores: basta deixar em 'tipo' a opção seguir herói para esse tipo de inimigo.
Saltadores: em rota pré-definida, deixe para que esse evento dê pulos para frente e na direção do herói, assim: coloque a opção pular e deixa-a assim: Coordenada X: -2 Coordenada Y: -1. Agora coloque esperar 4 frames, ponha a opção de pulo outra vez com a mesma configuração anterior, e por fim deixe a opção 'seguir herói'.
Não esqueça de marcar as opções 'ignorar se bloqueado' e 'repetir operação'.
Passam reto: Simples, deixe a opção em pré-definido, e coloque mover à esquerda (ou a direção que você deseja) quantas vezes forem necessárias. Deixe marcado a opção 'repetir operação'.

Agora quero dar uma atenção especial para dois tipos de inimigos:
1º o inimigo que é mais difícil de matar, o que isso quer dizer? quer dizer que, não basta você ataca-lo apenas uma vez para que ele morra, você terá que ataca-lo mais algumas vezes para que isso aconteça.
2º o inimigo que atira coisas (no caso aqui, flechas) você precisará de alguns comandos extras para isso, mas vamos por partes, sim? começaremos primeiro pelo inimigo que morre após ser atacado mais de uma vez.[/box]

[box class=titlebg]Difícil de matar:[/box]
Spoiler
[box class=catbg3]Para começar a criar seu inimigo que deve ser atacado mais de uma vez para morrer, crie o evento dele no mapa (obviamente) coloque o seu gráfico, deixe em processo paralelo. Agora crie uma nova var com o nome de 'hpenemie' ou o nome que quiser.
Feito isso, coloque a opção operando em ''substituir'' e deixe a constante em 400 (farei com que o inimigo apenas morra se o atacar 3 vezes, porém você pode deixar a constante que preferir)
Pronto, dê ok, e em controle de switch local, ligue-a na A.
Crie uma nova página nesse evento, com a swtich local A ligada, nessa página ponha o gráfico do seu inimigo e deixe em processo paralelo, também.
Agora é hora de fazer uma coisa que você já aprendeu, a colisão.
Crie uma nova condição nessa página do evento, com a opção ''script'' e coloque assim: colisao(A,B,0)
Sendo que A é a ID do seu inimigo e B a ID do evento do ataque (deixe o zero ali)
Agora coloque para que uma animação de ataque se reproduza no evento do inimigo, e que você ganhe 250 pontos (dinheiro).
Logo depois, coloque em opções de variável e escolha a var ''hpenemie'' coloque na opção operando em subtrair (-) e deixe a constante em 100, assim:

Ok.
Agora crie uma nova condição, vá em opções de variável e escolha novamente a var hpenemie, deixe a constante em 100 e deixe a opção em menor/igual a:

Pronto, agora nessa condição você coloca o que deseja para a morte do inimigo.
Eu coloquei, para que ele caia do mapa mesmo, como padrão do meu jogo.
Chamei o script coloquei:
self.high = true
chamei esse comando novamente e botei:
$game_map.events[@event_id].gravity = 2

Depois, no mesmo evento é só colocar os comandos já ensinados nessa parte do tutorial, para que o inimigo também possa causar danos no herói e tirar Hp dele, faça isso com os comandos de var x com var x e var y com var y.
Bom, seu evento deve ter ficado mais ou menos assim:
1°:

2º:

É basicamente isso, nada tão complexo.
Agora podemos seguir em frente e criar o inimigo que atira flechas (finalmente)
[/box]
[close]

[box class=titlebg]Inimigos que atiram flechas:[/box]
Spoiler
[box class=catbg3]Primeiro de tudo, saiba que nessa parte do tutorial, meu inimigo fica parado no mapa, ele não sai atirando a flecha dele por todos os lados, porém, no fim desse tutorial trago uma demo do mesmo sistema de inimigo, só que em vez dele ficar parado atirando, ele vai andado pelo mapa. Irei explicar com o inimigo parado, para que se torne mais fácil o desenvolvimento do tutorial e de entendimento.
Crie o evento do seu inimigo no mapa, com todos aqueles comandos que você já conhece (colisão de ataque, dano, e etc...)
Agora à frente do evento do inimigo, crie um novo evento sem gráficos e deixe em processo paralelo, e ponha o script de gravidade zero.
Agora crie uma nova página e uma nova switch com o nome de arrow (ou o nome que quiser), e ligue-a nessa página.
Na página, coloque o gráfico da flecha, deixe em direção fixa e alta prioridade, vel rapidíssima e freq altíssima, deixe a rota em pré-definida, ponha mover à esquerda (ou qualquer direção que você queira), e 'repetir operação'.
Em comandos de eventos, crie as vars das coordenadas X e Y do herói e desse evento da flecha.
Faça o procedimento que você já aprendeu: condição de var x do heroi com var x da flecha, e o mesmo com as vars Y.
Ponha para o personagem para perder 100 de Hp e mude o gráfico dele, para ele morrendo e depois voltando ao normal, depois de tudo isso desligue a switch desse evento, assim:

Nesse mesmo evento crie uma nova página em branco e uma switch com o nome de ''arrowend''.
Pronto, nesse evento você não irá mexer mais.
Agora crie um novo evento em processo paralelo sem graficos.
Chame o comando ''ciclo'' coloque esperar 80 frames, depois coloque a SE de um som de flecha sendo atirada, agora coloque operação de switch ''arrow'' on, depois de 29 frames switch ''arrow'' off.
Nesse mesmo evento, crie uma nova página, e uma nova switch, coloque o nome dessa switch de cicloend e pronto.
Crie mais um outro evento em processo paralelo sem gráficos, e ponha uma nova condição assim:
Condição switch 'arrow' off >> chame o  comando ''posição de evento'' e coloque-o na posição que o evento da flecha está no mapa.
Feito isso, volte para o evento do inimigo, coloque que em vez dele cair do mapa ao morrer, uma switch ligue caso ele morra.
Para fazer isso coloque nos comandos de colisão uma nova switch com o nome que quiser.
Crie uma nova página no evento do inimigo, ligue essa switch que você acabou de criar, e deixe essa página em branco.
Agora, no evento de posição de evento, coloque uma nova condição: condição de switch (a que você acabou de criar) onn>> switch clicoend e arrowend on.
Fazendo assim, quando o inimigo morrer, tanto a flecha, quanto o evento de ciclo sumam.
Tudo deve ficar assim:

Acabou essa parte do tutorial.
E como prometido, o sistema do inimigo em movimento atirando coisas:
Clique aqui para baixar.[/box]
[close]

[box class=titlebg]Obstáculos:[/box]
[box class=catbg3]Nossa, Mayleone! quanta coisa! e o saco desse tutorial ainda não chegou ao fim?
Bom, como eu gosto de explicar até os mínimos detalhes, sinto informa que... este tutorial ainda nem está perto do fim, mas creio que se você está lendo, significa que, quer realmente aprender, então vamos lá!

Já aprendemos a criar os inimigos, que por sua vez, são os obstáculos maiores de um jogo, porém podemos criar mais três obstáculos.
Eu trago aqui para vocês três comandos para obstáculos, porém, agora que você tem base de como criar um jogo desse estilo, você mesmo poderá criar seus próprios obstáculos, mas, se quiser meus exemplos para começar, trago aqui também... eles são:
• Obstáculo 1: 'Esmagador';
• Obstáculo 2: Totens com drop-item;
• Obstáculo 3: Terrenos proibidos;
[/box]

[box class=titlebg]Esmagador:[/box]
Spoiler
[box class=catbg3]O que seria esse tal de ''esmagador''? Nunca ouvi nem falar.
Um esmagador, é um evento no mapa que se movimenta de cima para baixo,e se o player passar por baixo dele e ele estiver descendo, o mesmo acaba esmagando o personagem, fazendo assim ele morrer, por isso do nome de esmagador.
Eu usei um char bem fajuto para criar meu esmagador, este aqui:
Spoiler
[close]

Ele na verdade, é um pedaço do sprite de um dos inimigos do game Decap Attack, usei o mesmo como esmagador, aumentando seu zoom.
Bom, vamos ao esmagamento!

1º Crie o evento do seu esmagador no mapa, coloque o gráfico que eu passei (ou o que você quiser) e ponha-o em direção fixa e alta prioridade.
2º: Vel>> 5 e Freq >> 6.
Rota pré-definida.
Você configura a rota como quiser, eu por exemplo, configurei a minha assim:
Esperar 40 frames; Mover abaixo (seis vezes); SE (usei uma do RTP mesmo, a SE 039); Esperar 40 frames;  Mover acima (cinco vezes); Repetir operação, assim:

Pronto, essa parte está feita, agora é hora dos danos (você tem noção de como configurar um evento de dano)
3º Deixe iniciar quando no processo paralelo.
Agora em comandos de eventos, coloque o script de plataforma zero, e depois configure 4 vars, duas das coordenadas X e Y do herói e mais duas com as mesmas coordenadas, só que do evento do esmagador.
Agora vá em :Condições de evento, escolha a var X do player com a var X do esmagador, crie uma condição dentro dessa condição e coloque a var Y do player com a var Y do esmagador.
Dentro das condições de efeitos, você coloca o que você desejar, eu coloquei o de sempre: SE do player sendo atacado, ele mudando de gráfico para ele morrendo e depois voltando ao normal, e perdendo 100 de Hp, e depois esperar 20 frames.
Basicamente, sempre serão esses os comandos que você irá usar nos danos, de acordo com a necessidade do seu jogo.

Aprendeu como criar seu esmagador? Epa! ótimo!
Podemos seguir agora para os obstáculos de drop-item.[/box]
[close]


[box class=titlebg]Drop-item:[/box]
Spoiler
[box class=catbg3]Na verdade, não são obstáculos, são mais uma ajuda (na maioria das vezes)
Esses obstáculos, podem ser caixas, barris, totens (caso do meu jogo) o que você desejar.
Eles são eventos, que, se forem acertados pelo ataque do herói, eles podem te dar um item, uma poção, alguma coisa que aumente sua vida, ou ate mesmo uma bomba!
A configuração do mesmo, é igual ao das outras, exceto por um detalhe: a switch! Isso mesmo, a switch que ativará a outra aba do seu evento, que seria o item dado pelo evento acertado.
Vamos lá:
Crie o evento do seu obstáculo, e ponha nele o gráfico que quiser (eu coloquei um toten)
Deixe-o em direção fixa e processo paralelo.
Agora, em comandos de eventos, chame o comando de condições.
Iremos utilizar mais uma vez o script de colisão.
Condição >> condições de efeitos >> 4º aba >> script.
Nessa opção ponha: colisao (A,B,0)
Troque o A pela ID do seu evento de obstáculo, e B pela ID do evento de ataque.
Agora coloque, para que quando o evento de ataque colidir com esse evento, mostre uma animação de ataque, coloque para esperar 5 frames, e depois uma SE com som de algo sendo quebrado, aumente os pontos em 250 (se preferir) e coloque em controle de switch local, escolha a A.
Seu evento na primeira parte deve ter ficado mais ou menos assim:

Agora, nesse mesmo evento, crie uma nova página, e coloque a switch local A on.
Nessa página, ponha o gráfico do item que você quer que o obstáculo dê, e logo em seguida, deixe-o em ''atravessar''.
Iniciar quando terá que estar em ''ao tocar evento''.
Em comandos de eventos, ponha um comentário assim: event
Agora, coloque para que uma SE de drop-item se reproduza, coloque também o efeito desse item (isto fica a seu critério) eu coloquei para que o item aumente meu HP, então eu coloquei>> mudar Hp do herói>> constante +100.
Depois, vá em controle de switch local e coloque a B.
Crie uma nova página nesse mesmo evento, deixo-o em branco e ligue a Switch B.
Seu evento deverá ficar assim:

Seu evento de drop-item está prontissimo!

E agora, hora de configurar o último obstáculo! Os terrenos que causam danos.[/box]
[close]


[box class=titlebg]Terrenos:[/box]
Spoiler
[box class=catbg3]Terrenos que causam danos, podem ser, tipo um local com lava, que se o herói pisar nela, ele morrerá.
Para fazer um desses, vá no database primeiramente, e vá em tilesets.
Agora na opção ''terreno'', você irá colocar a ID do terreno que causará danos ao herói, caso ele pise no mesmo (para escolher a ID, basta clicar com o mouse no tile que você quer que seja terreno proibido.)
Eu colocarei para que o tile de lava seja o terreno, e a ID dele será um:

Pronto, agora que você configurou seu terreno, vá ainda no database em eventos comuns.
Agora, crie um novo evento comum, com o nome que quiser, deixe em processo paralelo e escolha uma switch para ativação/desativação desse evento.
Em comandos de eventos, crie uma nova var, com o nome que quiser, deixe a opção ''operando'' em personagem e escolha a opção mapa (última opção) assim:

Pronto!
Agora chame o comando condições, e escolha a var do terreno que você acabou de configurar, e deixe a constante que é referente à ID do seu terreno (por exemplo, meu terreno é ''1'' então deixarei a constante em 1, se fosse dois, eu iria deixar a constante em 2)
Agora, coloque o que você gostaria que acontecesse,c aso o player pisasse no seu terreno.
Eu irei colocar, para que ele perca 100 de Hp, mude o gráfico para morrendo e depois voltando ao normal, e por fim, teleporto ele para um local do mesmo mapa, fora do terreno:

Pronto, acabou, agora é só ligar a switch desse evento comum, no mapa em processo paralelo.[/box]
[close]


[box class=titlebg]Finalização:[/box]
[box class=catbg3]E essa parte do tutorial  finalmente chegou ao fim, você aprendeu a configurar os demais tipos de inimigos, aprendeu a criar um esmagador para seu jogo, um drop-item e terrenos que causam danos!
Na próxima parte desse tutorial, você aprenderá, as configurações finais: As plataformas em movimento, um sisteminha de ''mola'', criará um menu por eventos (tela-titulo), como ajustar sua barra de vidas, e eu trarei um sisteminha de vidas, muito bom!
Te aguardo na parte 5 desse tutorial de como criar seu jogo de plataforma no Rpg Maker.

Qualquer dúvida com essa parte do tutorial, entrar em contato.[/box]