Asteroth

Changelog

Marcos do desenvolvimento, em ordem cronológica reversa. O versionamento semântico começa no primeiro demo jogável (Fase 1). Por enquanto, tudo está sob Unreleased.

Versão atual Unreleased · pré-1.0 Fase F0 · Fundação 3D

Unreleased

Em desenvolvimento ativo

Construção da fundação técnica e do canon público. A engine própria (C++) está sendo escrita do zero, junto com o sistema solar, o planeta esférico, o caminhar do player em gravidade radial, e a primeira camada de física, persistência e multiplayer.

Física

  • Raycast no mundo. Consulta de "o que está nessa direção" pra detecção de chão, ataques diretos e queries em geral. Base pro PlayerController saber quando está pisando, e pra hit-scan de armas.
  • Colliders de mesh estático. Estruturas complexas (árvore, prédio, qualquer mesh do mundo) ganham colisão real.
  • PlayerController em cápsula kinemática. Personagem agora é uma cápsula física que respeita colisão, com sincronização automática entre lógica e pose visual.
  • Cápsula, esfera estática do planeta e helpers de mutação. Vocabulário básico de formas físicas no jogo.
  • Velocidade do player em mundo + gravidade radial. O personagem cai em direção ao centro do planeta, não pra "baixo" da tela. Funciona em qualquer ponto da esfera.
  • Gravidade radial por corpo. Cada objeto físico responde individualmente à atração do planeta.
  • API de corpos físicos. Vocabulário mínimo pra criar, mover e destruir entidades com física.
  • Tick fixo 60Hz. Simulação determinística pra multiplayer não desincronizar entre clientes.
  • Foundation da camada de física. Sistema próprio integrado ao loop principal do jogo.

Mundo e planeta

  • Continentes maiores via camadas de ruído. Geração combina ruído continental + detalhe, produzindo massas de terra reconhecíveis.
  • Frame visual planet-local. Render alinha eixos ao ponto onde o player está, em vez de coordenadas globais.
  • Biome assignment + refinamento de tipo de tile. Cada tile do mundo recebe bioma e textura coerente com o entorno.
  • Geração de mundo por seed. Mesma seed gera mesmo planeta, sempre.
  • Modificação local de tiles. Player pode alterar o mundo: cavar, construir, derrubar.
  • Icosphere subdivision. Geometria do planeta com triângulos distribuídos uniformemente.
  • UV-sphere geometry. Planeta vira esfera de verdade no render (não mais cubo placeholder).

Sistema solar e câmeras

  • Save/load do tempo orbital. Posição do planeta no sistema solar persiste entre sessões.
  • Períodos de órbita gameplay vs cinematic. Gameplay usa 10 minutos por órbita (sombras sutis), cinematic usa 30 segundos (órbita visível em demo).
  • Câmera close-follow. Câmera segue o personagem de perto, base do POV de gameplay.
  • Câmera ISO local v2. Câmera isométrica alinhada ao plano tangente do planeta no ponto do player.
  • Cinematic demo wirado. Cena com sol, planeta e órbita, base dos primeiros vídeos públicos.
  • Reconciliação cinematic ↔ gameplay. Mesmas constantes celestes em ambos os modos.
  • Planeta orbita o sol de verdade. Translação orbital real, não animação fake.
  • Top-down camera + TAB switcher. Troca rápida entre câmera de jogo e câmera de mapa.
  • Marcadores 3D pras câmeras inativas. Debug visual de onde cada câmera está apontando.
  • Caminhar e girar na esfera. Player se move respeitando a curvatura, sem "cair" do planeta.
  • Cena demo E3 com rotação tipo Terra. Eixo inclinado oscilante, primeira aparição visual coerente do planeta.

Renderização e engine

  • Sistema de partículas. CPU-side, com billboards GL, suportando câmera externa.
  • Texturas via stb_image. Carregamento de imagens em formato comum (PNG, JPG).
  • Sistema de luz solar exponencial. Decay realista de intensidade conforme distância e ângulo.
  • Lambert no shader padrão. Iluminação difusa básica, base de tudo que vai ter sombra.
  • Pipeline de shader + integração câmera ↔ renderer. Vocabulário mínimo pra desenhar qualquer mesh com qualquer câmera.
  • Depth test habilitado. Objetos atrás de outros não atravessam mais.
  • Suporte HiDPI + resize. Janela escala corretamente em monitores Retina e ao redimensionar.
  • Logging com file sink. Sessão grava log em disco pra análise pós-jogo.
  • Cubo girando + animação de rotação. Primeiro frame com algo se mexendo na engine.

UI, inventário e áudio

  • Equip / unequip flow. Personagem veste e tira itens, com efeito no estado.
  • UI de inventário. Primeira tela funcional do jogo.
  • Modelo de dados de inventário. Slots, stacks, peso.
  • Layout system + widget basics + UI rendering layer. Toolkit interno de UI, sem dependências externas.
  • Music streaming + sound system básico. Áudio de fundo e efeitos discretos funcionando.

Multiplayer e servidor

  • Anti-cheat foundation. Detecção de patterns suspeitos no comportamento do client.
  • Logging de violations + validação server-side. Servidor não confia em nada que vem do client.
  • Login flow token-based + session store. Sessões persistem em memória ou Redis, com refresh e logout.
  • Account creation + password hashing seguro. Senhas nunca em texto puro, hash com salt.
  • Area-of-interest por player. Cada cliente só recebe updates da região visível pra ele.
  • Delta updates por visibility transition. Quando algo entra ou sai da área visível, só a transição é enviada.
  • Spatial partitioning da superfície do planeta. Mundo dividido em células pra query eficiente de "quem está perto".
  • DB layer F5 MVP + schema MVP. Primeira camada de persistência server-side.
  • Authoritative game state. Servidor é fonte de verdade, client renderiza.
  • Server-only build. Mesma codebase compila como servidor headless.
  • Lobby system 2-4 players co-op. Primeira sessão multiplayer pequena.
  • Tile modification protocol. Mudanças no mundo sincronizadas entre clientes.
  • Conflict resolution last-write-wins server-side. Política simples e previsível pra alterações simultâneas.
  • Multi-client interpolation + client prediction + reconciliation. Movimento de outros players suave no client local, com correção quando o servidor discorda.
  • Connection management + message serialization. Foundation do networking.

Persistência

  • API high-level de save/load. Salvar e carregar partida com uma chamada.
  • Framework de migration. Saves antigos abrem em versões novas, sem perder estado.
  • Serialização de world state e player state. Tudo que o jogo precisa pra continuar de onde parou.

Lore e design público

  • Taxonomia de tipos de item. Catálogo seed com 21 categorias (armas, ferramentas, recipientes, consumíveis, etc).
  • Exclusivos por classe. Cada classe ganhou pelo menos uma ação ou produção que ninguém mais consegue. Monopólio funcional pra garantir demanda real.
  • Canon completo de fama. 9 atributos, conversão 0,005, redistribuição em PvP por contribuição, perda de 50% na morte.
  • Concept arts: backgrounds e letras. Primeira leva de arte pública, base do branding em asteroth.com.br.
  • Compêndio: leva 26 (212/517): Espaldar, Bracelete — fecha o capítulo Armadura.

Infraestrutura de projeto

  • Pre-push hook. Suite de testes roda antes de qualquer push, impede commit quebrado de subir.
  • GitHub Project v2 "Asteroth". Tracking de épicos e issues público.
  • Roadmap por fases. F0 Fundação 3D → F1 Cinematic demo → F2 Gameplay SP → F3 Save/UI/áudio → F4 MP pequeno → F5 MMO infra → F6+ conteúdo.
  • Pipeline de release CI/CD. Build automatizado a cada merge.
  • Spec coverage comprehensive em todos os épicos. Cada sistema sobe com cobertura de teste antes do próximo começar.
  • Relatório HTML visual de specs. Resultados de teste rendezirados em painel próprio.

Histórico inicial (pré-changelog)

Os primeiros commits da engine, antes do Keep a Changelog formal:

  • Documentação do CMakeLists.
  • Refactor do triangle render pra caller pattern.
  • Documentação do main.cpp.
  • Primeira passada de documentação linha-a-linha do código.