Conteúdos

Portfolio

Myridian: The Last Stand

Myridian: The Last Stand é um jogo de plataforma móvel da velha escola com impressionantes pixelarts 2D, uma trilha sonora orquestral e ação intensa.

Impulsionado por uma história que exige a interação dos jogadores para evoluir, The Last Stand é o primeiro capítulo da missão de Nettor de despertar os Verges e dar vida a heróis lendários para que possam enfrentar seu maior desafio.

Carlo attacking

Carlo attacking

No final de cada capítulo, o progresso dos jogadores ao atingir seus objetivos ditará como novos heróis, missões e eventos serão inseridos no enredo. Os jogadores mais experientes serão convidados a participar de missões individuais ou cooperativas e seus resultados conduzirão a história.

Lessons Learned

O projeto exigiu uma extensa pesquisa em muitas áreas. Apesar de todos os recursos e funcionalidades disponíveis, Unreal Engine não é otimizado para jogos 2D, faltando algumas ferramentas essenciais.

1. Animações
Heroes running

Heroes running

Devido à falta de uma versão do controlador de animação para Paper2D, encontramos um plugin chamado PaperZD, expondo uma máquina de estado para controlar a transição entre animações da mesma forma que está disponível para malhas de esqueleto.

2. Paletas de Cores & Skins
Neeno skins

Neeno skins

As paletas de cores foram implementadas usando uma combinação de cálculos de materiais e preparações de textura. As cores da textura atuam como índices para selecionar cores de uma paleta nos materiais.

Skins foram implementadas sobrepondo sprites contendo as armas e peças de armadura, utilizando o mesmo mecanismo de paleta para os personagens.

3. Navegação & IA

Como o Unreal Engine não possui navegação 2D, a equipe implementou uma lógica de navegação personalizada usando pontos de caminho vinculados entre eles, com instruções adicionais no personagem deve pular ou cair para o próximo ponto.

Para controlar os personagens, o projeto utilizou controladores de IA usando pontuação de gol, que é muito mais simples do que a funcionalidade de Behavior Trees existente.

4. Multiplayer
Multiplayer fight

Multiplayer fight

A lógica multiplayer foi usada para movimentação de heróis e inimigos, projéteis e plataformas móveis, bem como para replicar o dano causado e recebido entre todos os personagens.

Implementamos técnicas avançadas para reduzir a transmissão de dados entre os peers e o servidor e aumentar a capacidade de resposta percebida pelos jogadores.

O jogo utilizou servidores dedicados hospedados no AWS GameLift, e foi implementado com o mínimo de código possível, recebendo todas as informações sobre a partida do matchmaker.

5. Matchmaking e Backend
Team selection

Team selection

O matchmaker exigia um aplicativo que utilizasse serviços em nuvem para comunicação rápida, grande disponibilidade e custo reduzido. Ele usa uma combinação de DynamoDB, Simple Queue Service e WebSockets controlados pelo API Gateway.

Para gerenciar as contas dos jogadores, utilizamos serviços prontos para uso com armazenamento de dados unificado, single sign on e leaderboards, permitindo que clientes de diferentes plataformas acessem os mesmos dados.

Future roadmap

Atualmente estamos trabalhando em um modo de histórico de um jogador, permitindo que outros jogadores experimentem o jogo sem a necessidade de se conectar a um servidor multiplayer e encontrar pessoas para jogar.