2023-12-23 – Armas de raios de energia já a destruir inimigos, no meu Game Engine em C++…
Agora sim já tenho as armas a causar destruição total nos inimigos (tive mais umas horinhas livres), comecemos pelo meu exemplo de plataformas:
Antes de partirmos para as “technicalities”, e antes de vos mostrar o vídeo completo de plataformas, deixo o vídeo no Shoot Em Up de testes, para quem queira ver, e onde podem ver que decidi neste caso específico deixar a arma sinusoidal ter poder para eliminar as próprias balas (estilo a circular do R-Type) mas os lasers não:
Vamos começar por verificar que, quando um inimigo é atingido, não é logo destruído, eu defino quanto é que cada píxel em contacto, por cada frame passado, destrói na nave ou objecto inimigo.
Por isso podem ver abaixo em câmera lenta, que à medida que o raio vai passando (aqui está com frames cortados), a energia do inimigo vai decrescendo aos poucos, até chegar a zero, altura em que explode.
Podem ver também que enquanto o raio passa por eles, eles têm um efeito engraçado, vejam:
O efeito acima era para desenhar raios eléctricos na nave atingida, mas como trabalho (por vontade própria) sempre com um portátil que ronde os 500€, dos que têm só 8GB, e alguma lentidão (além de fazer em Linux e o meu IDE ser o simples CodeBlocks), para me forçar a escrever código optimizado e para mostrar que o segredo de bom código está no programador e não em máquinas potentes (diz-se que “existem dois tipos de programadores: os que sabem programar e os que sabem usar IDEs” e eu sou dos primeiros :)), decidi cortar esse efeito para não consumir tanto CPU e manter os FPS altos.
Mas o cálculo da colisão é super exacto, eu defino quanta percentagem de dano causo à nave, por cada píxel de raio que está em contacto com ela, por cada frame passado (tipo 1/60 segundos em 60 FPS por exemplo), e apesar de aqui verem isto aos saltos por ser um gif, ela vai decrescendo minhentas vezes, um bocadinho em cada frame, até chegar ao 0 e explodir:
A destruição pode ser assim de 1%, 12%, 32, 34, 35, 36, 37, 89, 100%, 200%, ou até 15,5% por exemplo! Com precisão de 6 decimais, poderia ser só de 0,000001% o dano causado! 🙂
Notem acima no 3º inimigo, o que cai à direita (desenhado por um amigo, o Vitor Bonifácio, bem como os outros inimigos), mostra pelo menos 3 quebras na barra de saúde (health bar), mas na realidade foram mais, só que os frames foram cortados.
Podem reparar também que acima a torre de baixo resiste ao primeiro impacto, porque o raio toca-lhe nas pontas apenas, e fiz isso de propósito para ela poder resistir.
Notem que como tocou nas pontas (e como eu não defini muita força de destruição), tanto o raio do meio como o de baixo (ambos nas pontas), só lhe tirou perto de um terço de energia, mas no segundo ataque tirou mais porque além do raio nas pontas, leva também com o da diagonal já não na ponta como antes, mas no meio da torre, o que o faz perder mais de dois terços da energia e perder.
Sim, é mesmo calculado píxel a píxel, ao pormenor!
Daí se o raio passar de frente por uma nave ou torre (com as actuais configurações), ela não resiste, mas se for só na diagonal ou nas pontas, tem chances de sobreviver.
Mesmo assim, vejam a chacina que foi neste vídeo de testes de plataformas:
Pura destruição, não?
Os raios “laser” (entre aspas porque lasers nunca seriam assim), aqui no nível de plataformas causam tanta destruição que estão ao nível da arma “Yaka Arrow” da personagem Yondu dos Guardiões da Galáxia (aquela seta teleguiada que destrói tudo o que apanha pela frente).
Não se preocupem, eu depois compenso com um vídeo mais natalício e pacífico.
É importante referir que tanto nos raios laser, como nos sinusoidais, os píxeis de cada um dos três raios conta um a um, em especial o raio real e não as sombras de luz que cada um dos três tem.
Mesmo assim, muito à frente dos jogos habituais, em que basta um toque e é logo tudo destruído (como nos R-Types por exemplo).
As armas foram baseadas, as sinusoidais, no ataque Special Beam Cannon da personagem Piccolo do Dragon Ball como mencionei no post anterior:
Aqui a personagem com o seu ataque:
Mas a que é uma mistura desta com a circular do R-Type, usei já no exemplo das naves, e aqui está um exemplo de como é feita, mas explicado melhor no meu post anterior (indicado no fim do texto):
Tudo isto foi mencionado com mais pormenor no meu post anterior (indicado no fim do texto).
Sobre os vídeos pacíficos, eu adoro passar parte do Dia de Natal a programar algo no meu Game Engine, pelo que farei depois algo que tenha a ver com o Natal, para contrariar a tendência de destruição bem visível neste post. 😛
Podem verificar no post anterior, mais tecnicalidades sobre o desenvolvimento destas armas.
Deixo também um vídeo meu a jogar ao R-Type onde poderão ver a fonte de inspiração dos raios “Tri-Laser” bem como dos outros:
De qualquer das formas desejo um Bom Natal a todos, e até à próxima.
2023-12-23.
Partilhado no mesmo dia no meu LinkedIn, em:
Post seguinte sobre o meu Game Engine:
Post anterior sobre o meu Game Engine: