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 F7+ · Conteúdo, escala e polimento

Unreleased

Em desenvolvimento ativo

A fundação está de pé: engine própria em C++, sistema solar, planeta esférico, gravidade radial, física, persistência e a primeira camada de multiplayer. O trabalho agora é dar ao planeta o tamanho e a matéria de um planeta — escala real, oceanos em que se nada, subsolo que se escava, atmosfera que separa o dia da noite — e ao personagem um corpo que pisa nele.

Terreno, água e subsolo

  • O planeta ganhou tamanho de planeta. O raio passou de 20 para 2 000 alturas de personagem. Antes a volta a pé levava um minuto e a montanha mais alta batia na cintura do player; agora existe relevo que se enxerga de longe e se escala de perto.
  • 70% de água. Era 3,3%. A fração vale para qualquer seed, então todo mundo gerado nasce com oceano de verdade, e não com poças.
  • Água em que se nada. A água virou três coisas que ela não era: leito próprio abaixo do nível do mar, casca na superfície e empuxo. Antes o player caminhava sobre o mar.
  • Água translúcida. Dentro dela dá para ver o leito e o que está sobre ele, que é justamente quando isso passa a importar.
  • Túnel virou vão de verdade. Escavação horizontal, teto e parede que desaparece entre vizinhos: dois tiles cavados lado a lado formam corredor, não dois poços com uma parede no meio.
  • O player entra no subsolo. Havia um chão intransponível segurando todo mundo na superfície, o que fazia do túnel, da tocha e da câmera subterrânea cenário decorativo por baixo dele.
  • Escavação na altura certa. Um golpe abria um pé-direito de 20 alturas de personagem, e o resultado era uma laje. Agora são 2, então degrau, rampa e câmara com altura legível passam a existir.
  • Tile na escala do jogador. De 18,8 para 9,4 alturas de personagem por tile: "placa tectônica" era descrição literal, não figura de linguagem.
  • Material do tile com efeito medível. O tipo de terreno deixou de ser só cor e passou a afetar movimento, escavação e o que cai ao cavar.
  • Crosta, manto e núcleo. As camadas do subsolo deixaram de ser paleta de parede e ganharam efeito real: descer fundo passou a custar.
  • Linha de árvores. A densidade de vegetação passou a ter eixo de altitude, então a montanha deixa de ser pedra do sopé ao pico.
  • Pedra solta e galho no chão, coletáveis. A camada pequena que faz um chão parecer habitado, ligada ao inventário: coletar virou ação de verdade.
  • Props na escala do mundo. Árvore e pedregulho eram dimensionados como fração do raio do planeta; com o planeta cem vezes maior viraram pedras gigantes, no sentido literal.
  • Batimetria. O leito afunda de verdade abaixo do nível do mar, em vez de ficar rente à casca.

O personagem

  • Corpo low-poly feito à mão. 472 triângulos, malha fechada e simétrica, no lugar do modelo gerado por IA, que carregava túnica aberta e defeito de superfície.
  • Personagem chega pintado no jogo. O carregador de modelo passou a ler cor por vértice, então a arte sai do Blender e entra na engine sem passo intermediário.
  • Encara a direção do movimento. Quatro cardeais e quatro diagonais.
  • Ancorado no chão de verdade. Fim da flutuação sobre relevo: a altura do player passou a ser lida da mesma malha que se vê.
  • Colisão com o cenário. Árvore, arbusto, cogumelo e pedregulho viraram obstáculo sólido; no pedregulho dá para subir.
  • Pulo na escala certa. Subia 640 alturas de personagem, porque a altura do salto estava sendo multiplicada pelo raio do planeta.

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

  • A noite voltou a ser noite. O brilho do céu passou a sair da elevação do sol, com crepúsculo contínuo, em vez de um valor fixo escolhido pelo modo de câmera. A sensação de dia e noite estava sumindo justamente no modo de jogo.
  • Luas com atmosfera e cor de rocha. No lugar do disco chapado que ficava inteiro preto, branco, laranja ou azul.
  • Atmosfera com mais glow. Halo largo e quente abraçando o limbo iluminado, mais perto da referência astronômica: em caminho rasante o azul se extingue primeiro e sobra o laranja, que é a mesma conta do pôr do sol.
  • Iluminação e atmosfera seguem o enquadramento, não o modo de câmera. Afastar no modo de jogo até ver o planeta inteiro passou a render a mesma imagem que o modo cinematic.
  • Zoom sem limite. O limite tinha sido calibrado quando o planeta era cem vezes menor, e impedia afastar o bastante para enxergar o relevo novo.
  • O céu cobre a tela. Fim do disco escuro de borda dura que aparecia na vista de espaço, e que estava centrado na câmera em vez de no planeta.
  • Biomas em cores, vistos do espaço. O passe de nuvens saturava o planeta de branco e granulava a imagem.
  • 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

  • Resolução dinâmica. A escala de render se ajusta sozinha para caber no orçamento de 16,6 ms por quadro, em vez de derrubar o FPS quando a cena aperta.
  • Upscaler FSR 1.0. Alternativa viável ao DLSS dentro de OpenGL 3.3, para quem joga em GPU modesta.
  • Anti-aliasing SMAA. Serrilhado tratado em pós-processo.
  • Presets de qualidade Low, Med e High. O jogo passa a ter o que oferecer a máquina fraca sem virar outro jogo.
  • Tela de configurações no jogo (F10), com persistência. A escolha sobrevive ao fechar.
  • Janela de log em tempo real. Segunda janela de observabilidade, com arquivo e linha de cada evento, para diagnosticar sem parar a sessão.
  • Busca de tile em tempo constante. Consumia 30% do quadro (974 µs por chamada, cinco vezes por quadro); agora custa 0,56 µs. É o que tornou possível diminuir o tile.
  • Cor por vértice no carregador de modelos. O OBJ passou a carregar a pintura junto com a geometria.
  • 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

  • Forja de Equipamento. Monte o loadout inteiro numa tela: elmo, peitoral, botas, arma e mochila, 187 itens jogáveis, os 11 tiers com moldura e numeral aplicados ao vivo, qualidade em estrelas, raça e classe, e a barra de habilidades derivada do que está equipado. Assume o lugar do grid estático de Conjuntos, cujos 31 conjuntos passaram a ser montáveis peça a peça.
  • As Habilidades (326/326). Catálogo completo das habilidades inatas, com filtros por origem (afinidade, classe, raça) e por tipo (passiva, ativa), cada uma com efeito e proveniência.
  • As Afinidades (280). O mapa raça × classe: a liga rara do anão ferreiro, a granada dupla do boticário humano, o mergulho do phibens. Inclui o sistema elemental do Mago e as afinidades que só valem sob condição de ambiente (noite, submerso, subterrâneo).
  • Os 24 Sub-governantes. A camada da hierarquia que faltava: seres não-humanoides que servem, ou espreitam, sob os Governantes.
  • Compêndio reaberto (520/809). O catálogo do jogo cresceu de 517 para 809 itens (sementes, itens de trapper, culinária, refino), então o Compêndio deixou de estar completo e volta a revelar em levas.
  • O topo do site virou title sequence. A cover estática deu lugar a um vídeo curto: o viajante caminha até a margem do lago e se agacha olhando a paisagem, com a logo se dissolvendo no meio do plano.
  • Arte recortada em todo o site. As 846 imagens de item e criatura e os 26 Governantes trocaram o fundo cinza por versões transparentes: cada retrato virou gravura sobre a folha, sem a caixa atrás.
  • 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 de Itens completo (517/517). Todos os itens do jogo revelados no site, em 63 levas — cada um com retrato, epígrafe e descrição em tom de compêndio antigo, aberto em modal de papiro.
  • O Bestiário completo (326/326). Nova seção no site com todas as criaturas do mundo — os exércitos dos sete governantes (do Governante aos mini mobs), a fauna livre e os slimes — cada uma com retrato e descrição em tom de bestiário antigo; dois filtros (Domínio e Patente) que abrem mostrando os 28 líderes dos exércitos.

Infraestrutura de projeto

  • Pipeline de arte low-poly local. Uma imagem de referência entra, um modelo texturizado sai, tudo numa GPU doméstica. Gerar as peças do catálogo por serviço pago de image-to-3D era inviável no custo, e o gargalo de arte deixou de depender de crédito de API.
  • 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 Canon do planeta e lobby → F7+ conteúdo, escala e polimento.
  • 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 renderizados 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.