Sobre o projeto

singedTerra é um jogo de artilharia por turnos baseado em navegador, escrito do zero em TypeScript, apresentado como uma homenagem ao Scorched Earth (1991) de Wendell Hicken. Ele mantém o loop clássico: escolha um ângulo, leia o vento, defina a potência e dispare, enquanto o terreno registra as consequências. É jogável como uma partida hot-seat de 2 a 4 jogadores em um único navegador ou online através de salas públicas e privadas do Supabase. Mecânicas principais. O terreno é um bitmap por pixel: explosões cavam buracos reais, solos sem suporte desmoronam, tanques se acomodam em crateras e armas do tipo terra podem construir novas coberturas. Cada rodada é semeada e cada turno recebe um vetor de vento determinístico, para que cada cliente resolva a mesma trajetória de voo. Dezesseis armas abrangem fogo direto, explosões aéreas, explosivos saltitantes, napalm, construção de terreno, tunelamento e defesa. O movimento consome combustível, e o dano gera créditos que devem ser divididos entre munição, escudos, baterias e combustível ao longo de partidas de várias rodadas. A apresentação inclui tanques autorais, um campo de batalha ao crepúsculo, instrumentos balísticos, iluminação de impacto, tremor de tela e áudio sintetizado. Garagem de tanques. Cada assento possui uma Garagem: os jogadores começam com os chassis Foundry, Ranger, Bulwark ou Jackal e combinam partes de mobilidade, casco, torre e canhão em uma silhueta personalizada, que aparece na prévia do elenco e é levada para a partida. Modos e netcode. Os assentos controlados por computador usam a mesma física determinística que os jogadores humanos, e os modos hot-seat e online não utilizam físicas diferentes. O hot-seat executa o motor compartilhado diretamente no navegador via HotSeatClient. Para o jogo online, cada navegador executa sua própria cópia do mesmo motor: o Supabase valida as ações da sala, atribui números de sequência, armazena o log ordenado e transmite as linhas confirmadas através do Realtime. A partida online canônica é uma semente mais um log de ações ordenado; o estado do jogo é reconstruído localmente em vez de ser transmitido por um servidor com ticking, o que torna os timesteps fixos, a aleatoriedade semeada e a paridade de replay parte do contrato de design. Controles. As teclas de seta miram o canhão e aumentam ou diminuem a potência; A e D movem e gastam combustível; Q alterna a arma selecionada; Espaço ou Enter dispara ou ativa o escudo selecionado; G alterna a guia de trajetória; M silencia ou restaura o áudio sintetizado; segurar F avança rapidamente o tiro atual localmente. Layouts de toque substituem o teclado por um Command Deck agrupado cobrindo Mira, Potência e Direção, enquanto Arma e Menu são utilitários e Fogo, Loja, combustível e Arsenal permanecem no trilho tático. No desktop, arrastar para fora do tanque ativo define o ângulo e a potência sem disparar. Execução e verificação. O projeto requer Node 24.15 ou superior na linha Node 24 LTS, além de npm; npm install seguido de npm run dev serve o cliente Vite em localhost:5173, e o jogo hot-seat não requer configuração de backend. O jogo online requer VITE_SUPABASE_URL e VITE_SUPABASE_ANON_KEY em client/.env; espera-se que a chave anon seja enviada no cliente público, enquanto a Row-Level Security e a validação de Edge Function protegem os dados do lado do servidor. Os comandos de verificação incluem npm run check (verificação de tipo mais harnesses do motor determinístico), npm run test:client (testes de cliente Vitest e DOM), npm run check:edge (testes Deno para Supabase Edge Functions), npm run test:e2e (verificações de layout e jogabilidade em Chromium de produção) e npm run build. O CI executa os mesmos portões principais em cada pull request, e alterações em shared/src/engine/ devem preservar o replay determinístico. Layout do repositório e documentação. client/ contém o app Vite, renderizadores Canvas, HUD HTML, entrada e lobby; shared/ contém o motor determinístico, lógica de replay e tipos compartilhados; supabase/ contém migrações Postgres e árbitros de Edge Function sem estado; scripts/checks/ contém o motor determinístico e harnesses de contrato; e2e/ contém salvaguardas de layout e jogabilidade em navegador de produção; docs/ contém registros de jogador, arquitetura, desenvolvimento e projeto. A documentação cobre como jogar, arquitetura, desenvolvimento e operações, o sistema de UI e a especificação atual. O projeto é lançado sob a Licença MIT e não é afiliado nem endossado pelos autores originais do Scorched Earth.