Um jogo de plataforma 2D focado em combates intensos contra chefes (Boss Rush), exigindo reflexos rápidos para parry e gestão de estamina. Desenvolvido durante uma Game Jam.
🎮 Jogue no navegador via itch.io 🎬 Assista ao Trailer de Gameplay
Este projeto foi a nossa submissão para a PET Game Jam da UFES, conquistando o 2º lugar. O objetivo principal foi criar uma experiência punitiva e justa, onde o jogador precisa decorar padrões e agir no tempo exato.
Como o tempo de desenvolvimento era restrito, a equipe optou por focar 100% no polimento das hitboxes, colisões e na inteligência dos chefes. Devido a isso, o jogo acabou sendo deixado sem efeitos sonoros, a recomendação é jogar escutando a sua própria playlist.
Projeto construído pelo trio:
O código-fonte foi estruturado utilizando módulos ES6 e empacotado com Vite para otimização web. O projeto brilha na sua arquitetura de combate, baseada fortemente em Máquinas de Estados Finito (FSM) e reatividade de Inteligência Artificial.
O jogador possui um controlador de estado rígido que previne o cancelamento indevido de animações e race conditions. A mobilidade fluida é garantida por transições matemáticas de velocidade e detecção de solo (Grounded).
flowchart TD
%% Nós de Movimento
IDLE((IDLE)) <-->|Input Direcional / Parar| RUN((RUN))
IDLE -->|Input Pulo| JUMP((JUMP))
RUN -->|Input Pulo| JUMP
JUMP -->|Ápice da gravidade| FALL((FALL))
FALL -->|Toca no chão| IDLE
%% Ações de Combate
IDLE -.->|J, K, L, E| Acoes{Ações de Combate}
RUN -.->|J, K, L, E| Acoes
Acoes --> ATK[Ataque / Combo Especial]
Acoes --> DASH[Dash: Esquiva Invulnerável]
Acoes --> PARRY[Parry: Bloqueio Perfeito]
Acoes --> HEAL[Cura: Consome Cargas]
%% Funil de Retorno (Simplificando as setas)
ATK & DASH & PARRY & HEAL --> FimAnim([Fim da Animação])
FimAnim --> IDLE
%% Sistema de Dano
IDLE & RUN & ATK & HEAL ===>|Recebe Golpe| HURT((HURT))
HURT -->|Fim do Stun| IDLE
HURT -->|HP = 0| DEAD((MORTE))
%% Estilos
style IDLE fill:#2d3436,stroke:#74b9ff,stroke-width:2px,color:#fff
style HURT fill:#d63031,stroke:#ff7675,stroke-width:2px,color:#fff
style DEAD fill:#000,stroke:#d63031,stroke-width:4px,color:#fff
style FimAnim fill:#636e72,stroke:#b2bec3,stroke-width:2px,color:#fff
Os chefes (como Akane e Mestre Jubei) compartilham um núcleo de IA agressivo, desenhado para punir erros de posicionamento e evitar que o jogador vença apenas "esmagando botões" (Anti-Stunlock).
flowchart TD
Inicio((Decisão de IA)) --> Dist{Qual a distância?}
%% Árvore de Distância
Dist -->|Longe| CHASE[Persegue o Jogador]
Dist -->|Perto| ATK{Sorteio de Ataque}
CHASE -->|Chegou perto| ATK
ATK -->|RNG / Cooldown| COMBO[Combo Básico / Dash]
ATK -->|RNG / Cooldown| SKILL[Habilidade Especial Unblockable]
%% Reatividade (Estus Punish)
Inicio -.->|Detecta Jogador Curando| PUNISH[Ataque Punitivo Imediato]
PUNISH --> ATK
%% Árvore de Dano e Defesa
Dano((Chefe Recebe Golpe)) --> Check{Estado Atual?}
Check -->|Atacando| ARMOR[Super Armor: Ignora Stun e segue ataque]
Check -->|Idle / Chase| STUN[Sofre Stun e interrompe ação]
Check -->|Já no Stun| BREAKER[Combo Breaker: Fuga imediata]
%% Progressão
STUN --> HP{HP chegou a 0?}
HP -->|Sim, tem vidas restando| ENRAGE[Restaura HP -> Modo Berserk]
HP -->|Sim, última vida| MORTE((Execução / Morte))
%% Estilos
style Inicio fill:#2d3436,stroke:#00b894,stroke-width:2px,color:#fff
style Dano fill:#d63031,stroke:#ff7675,stroke-width:2px,color:#fff
style MORTE fill:#000,stroke:#d63031,stroke-width:4px,color:#fff
public/assets não está inclusa neste repositório público. O código-fonte está preservado aqui exclusivamente para fins de estudo de arquitetura, lógica e portfólio.
Se o projeto for clonado e executado localmente, o terminal funcionará perfeitamente, mas o jogo renderizará uma tela preta devido à ausência das imagens originais.
Para inspecionar a estrutura do bundler e a lógica:
- Clone o repositório:
git clone https://github.com/gustsoprani/towerofechoes.git
- Instale as dependências (Phaser e Vite):
npm install
- Inicie o servidor local:
npm run dev
Para ter a experiência visual completa, utilize o link do itch.io.
