quinta-feira, 17 de janeiro de 2013

Knight's Trial - Spell Combos

E ai pessoal, tudo bem?

Mais de uma semana atrás eu fiz o ultimo post nesse  blog dizendo que "amanha" eu faria um post mais técnico falando sobre as combinações de spells presentes em Knights Trial... haha por isso, antes de mais nada, peço desculpas pelo atraso.

Então, antes de mais nada, o que eu quero dizer com Spell Combos? Bom, recentemente pra quem jogou Guild Wars 2, é o mesmo princípio, onde algumas magias criam campos que transformam outras mágias que passam pelo campo em magias mais poderosas. Por exemplo...


Repararam na diferença? Na segunda imagem não só tem uns campos de fogo no meio do mapa em pontos aleatórios, mas os projéteis atrás da explosão verde pegaram fogo ao passar pelo campo. Ou, pra ficar mais fácil, fizemos esse video abaixo.



Olha, eu não sei a opinião geral sobre poder combinar as magias (alias se achar um feature legal/interessante/tosco, deixa um comentário!) mas sério... é divertido =P. Não tem nada melhor que atirar na boca do bixo uma pedra flamejante que da o dobro do dano normal... ou uma pedra eletrificada que joga ele duas vezes mais longe, tem hora que parece um jogo de basebal de tão longe que você isola o pobre orc =P.

A verdade é que essa é uma feature que eu acho muito legal, e é muito fácil de implementar (devido à maneira que o jogo funciona). Resumidamente, o que acontece dentro do jogo é que quando um projétil qualquer passa por dentro da área do campo de fogo por exemplo, ele recebe um buff e os efeitos são ativados, e o resto do comportamento dele continua como normal.

É, eu sei... é meio óbvio, mas na prática, é isso aqui, no jogo aparece assim:


Mas o que define o que acontece de verdade é isso aqui:


O circulo verde indica a área real de efeito do campo de fogo (práticamente igual á área do efeito visual) e os quadradinhos verdes indicam a área de efeito dos tiros. Se em qualquer momento do trajeto de cada tiro, ele simplesmente encostar na área do campo de fogo, ele é incendiado.

O maior problema do "é incendiado" é que o evento que diz "ok, esse projétil passou por dentro desse campo de fogo" acontece no campo de fogo, e não no projétil. Então eu preciso fazer com que o Campo de Fogo fale pro Projétil "você está queimando, e seu dano foi mágicamente dobrado". Até ai ok, só que eu preciso que qualquer projétil, seja da skill Rockburst, Frostbolt, Shadowbolt, Flamethrower... qualquer um precisa receber a mesma mensagem e consiga criar um mesmo efeito, e até então, como o comportamento de cada skill é muito diferente da outra (Shadowbolt precisa puxar os inimigos para perto, Flamethrower atravessa os inimigos, Frostbolt reduz a velocidade dos inimigos...), cada projétil tinha um comportamento diferente (uma classe diferente).

A solução foi fazer o que eu já devia ter feito desde o começo, criar uma classe com as características padrão de todos os projéteis (dano, alcance, etc) e fazer com que todas as classes específicas dos projéteis herdassem a inicial. Dessa forma, o Campo de Fogo pode sempre chamar a Classe Pai e dizer "Seja la o que você for, dobre o dano". A parte mais chata na realidade foi criar o efeito visual. Para diminuir a quantidade de trabalho nesse sentido, fizemos um efeito padrão para cada combo, e esse efeito precisa ser aplicado a cada projétil. O jeito fácil e óbvio seria criar um prefab com o efeito visual e simplesmente instancear quando a magia acontecer, posicionar na mesma posição do projétil e tornar o novo objeto filho do projétil. No entanto, como instancear é péssimo pro desempenho, fui obrigado a colocar todos os efeitos visuais de todos os combos em todos os projéteis, assim, quando instancear o projétil, ele já contem todos os efeitos, mas todos desativados. Assim que o projétil atravessa um campo (seja ele de fogo, raio, veneno), o efeito visual equivalente é ativado novamente.

Bom, acho que é isso. Não quis ir muito a fundo até porque não é uma feature das mais complexas de se fazer, mas se tiverem interesse em saber mais, ou só falar sobre o que acham da feature, por favor deixem um comentário!

Abraços,

Nenhum comentário:

Postar um comentário