Ballistic Vector é um jogo tático de combate e simulação balística 2D desenvolvido em Godot 4.6 (utilizando o renderizador GL Compatibility). O jogo foi construído como parte do Projeto Acadêmico Curricular (PAC #1), com foco em edutainment (educação matemática) para auxiliar na visualização prática e intuitiva de Funções Quadráticas e mecânicas balísticas parabólicas.
O jogador assume o comando de um canhão de defesa terrestre com o objetivo de proteger seu território contra bombardeios de esquadrões de aviões inimigos e destruir o bunker inimigo (Boss) de cada fase.
[Mapa de Guerra] ── Seleciona Base (Alpha, Bravo, Charlie) ──> [Loja de Munições]
▲ │
│ ▼
[Vitória na Campanha] <── Completar 3 Fases <── [Arena de Combate (Turnos Físicos)]
- Mapa de Guerra Estratégico (
war_map.gd): Uma interface inspirada em cartas náuticas/steampunk antigas onde o jogador escolhe qual base inimiga (Alpha, Bravo ou Charlie) quer atacar. Cada base possui 3 fases de dificuldade progressiva. - Loja de Munições Integrada: Permite ao jogador comprar munições especializadas (Enferrujada ou Perfurante) utilizando o ouro adquirido em combate. O visual conta com cards padronizados, ícones de munição desenhados proceduralmente (
ammo_icon.gd, que colore a ponta com a cor doAmmoData) e animações de feedback de compra. - Física Balística Customizada (
projectile.gd): Não depende de corpos rígidos do motor para os projéteis. Os tiros seguem equações diferenciais discretas sob ação gravitacional customizada de acordo com o tipo da munição. - Mira Preditiva Integrada (
arena.gd): O canhão calcula em tempo real a trajetória parabólica futura do tiro através de um loop de simulação rápida e desenha uma linha tracejada (AimLine) que é interrompida exatamente no ponto de colisão com os obstáculos terrestres. - IA Inimiga com Evasão Dinâmica (
airplane_enemy.gd): Os aviões realizam patrulhas aéreas e bombardeiam o jogador, mas agora possuem sensores geométricos. Utilizando a APIGeometry2Ddo Godot, os aviões detectam se a sua trajetória de voo colidirá com as montanhas e arremetem de volta para cima ou invertem a direção, evitando bater nos obstáculos.
Durante o combate na Arena, o topo central da tela mostra as variáveis da parábola — ângulo, força e gravidade — cada uma com a sua engrenagem. O jogador escolhe uma engrenagem e a gira para alterar aquele valor, vendo a linha de mira responder na hora.
| Tecla / Ação | Função |
|---|---|
| Seta Esquerda / Seta Direita | Escolhe qual engrenagem está selecionada, seguindo a ordem em que elas aparecem na HUD. |
| Seta Cima / Seta Baixo | Gira a engrenagem selecionada, aumentando ou diminuindo o seu valor. Com o ângulo selecionado — o padrão — a seta para cima levanta o canhão. |
| Mouse (segurar e girar) | Agarra a engrenagem e a gira como uma manivela: o valor acompanha o movimento circular do cursor em volta dela. Duas voltas percorrem a faixa inteira. |
| Shift (Segurar) | Gira a engrenagem 5x mais devagar, para acertar o número exato. |
| Barra de Espaço | Realiza o disparo do projétil ativo. |
| Tecla Tab | Alterna entre os tipos de munição disponíveis no inventário (Enferrujada / Perfurante). Cada munição traz a sua própria gravidade. |
| Tecla H ou botão ? | Pausa o jogo e abre a tela de ajuda, com as teclas e a explicação da parábola. |
| Esc | Abre o menu de pausa. Com a ajuda ou o menu já aberto, fecha o que estiver na frente. |
| Botão de engrenagem (canto superior esquerdo) | Abre o menu de pausa: continuar, ajustes de áudio, reiniciar a batalha ou voltar ao mapa de guerra. |
Ao lado das três engrenagens, a HUD calcula em tempo real o alcance e a altura máxima
do tiro pelas fórmulas do lançamento oblíquo (R = v²·sen(2θ)/g e H = v²·sen²θ/(2g)),
para que a criança veja a matemática reagir ao que ela está fazendo. Com o canhão apontado
para baixo os dois viram um traço, porque a fórmula só vale com o tiro subindo.
AudioManager(Singleton Autoload): Gerencia de forma persistente todo o fluxo sonoro entre as trocas de cenas. Utiliza a conexão de sinalfinisheddo Godot para implementar loops perfeitos e contínuos de trilha sonora, contornando limitações de runtime.Global(Singleton Autoload): Mantém o registro do progresso de fases concluídas nas bases, o montante financeiro e o inventário de munições do jogador entre a Arena e o Mapa de Guerra.- Mapeamento de Recursos (
AmmoData): Criação de dados de munições baseados emResource, permitindo alterar física, dano, custo e cores diretamente pelo inspetor do editor de forma modular.
Toda a UI compartilha um único sistema de estilo, em scripts/ui/:
ui_tokens.gd: fonte única de cores, escala tipográfica (seis corpos) e geometria. Nenhum literal de cor ou de tamanho de fonte deve existir fora dele.ui_theme.gd: compila oThemedo jogo a partir dos tokens. O resultado é gravado emassets/resources/ui_theme.trese registrado emproject.godotcomogui/theme/custom. Ao mexer nos tokens, regenere:
godot --headless --script res://tools/build_ui_theme.gdO tema precisa ser um recurso de projeto, e não algo aplicado pela árvore de nós, porque
CanvasLayerinterrompe a herança de tema — e menu, HUD e todos os modais deste jogo vivem emCanvasLayer.
ui_button.gd,ui_panel.gd,ui_modal.gd: componentes reutilizáveis. OUiModalcentraliza comCenterContainer(e nãoPRESET_CENTER, que não acompanha a resolução) e concentra a pausa deferida.arena_hud.gd,shop_panel.gd,pause_menu.gd: as telas montadas sobre esses componentes.
- Godot Engine 4.6 ou superior (Standard Edition).
- Clone o repositório ou faça o download da pasta do projeto.
- Abra a Godot Engine e clique em Importar (Import).
- Navegue até a pasta
BallisticVectore selecione o arquivoproject.godot. - Clique em Importar & Editar (Import & Edit).
- Pressione F5 (ou clique no botão Play no canto superior direito) para rodar o jogo. A cena padrão inicial configurada é o Menu de Boas Vindas (
menu_play.tscn).
- Interface & Ícones: Packs visuais adaptados da Kenney UI (licença CC0).
- Músicas e Efeitos: Coleção de assets sonoros STEAMPUNK/Medieval licenciados para uso no projeto.