Gênero: Espacial / Jogo Incremental
Plataforma: Navegador (Mobile & PC)
Preço: Gratuito — sem necessidade de conta
URL: https://stellar-epoch.sloth255.com/
Visão Geral do Jogo
STELLAR EPOCH: APHELION é um jogo incremental com temática espacial que roda inteiramente no seu navegador. Sem app para instalar, sem assinatura, sem paywall. Seja no smartphone ou no desktop, tudo que você precisa é um navegador para começar a jogar imediatamente.
O título Aphelion se refere ao ponto na órbita de um planeta onde ele está mais distante do Sol — um termo astronômico que captura a vasta escala romântica do universo do jogo.
Funcionalidades
🌠 Um Universo que Evolui com Eventos e Condições
O estado do universo muda dinamicamente com base nas condições e eventos do jogo. Dependendo de como sua partida se desenrolar, você encontrará diferentes cenários e situações cósmicas.
🏁 Um Final de Verdade
Este não é apenas um jogo de números. STELLAR EPOCH: APHELION tem uma conclusão real esperando por você. Cada melhoria e recurso acumulado te aproxima de um objetivo significativo, proporcionando satisfação genuína quando você o alcança.
📱 Funciona no Mobile e PC
O jogo é otimizado para smartphones e navegadores desktop. Jogue onde for mais confortável — seu progresso está sempre a uma aba de distância.
🌍 Suporte Multilíngue
O jogo suporta múltiplos idiomas, para que jogadores de todo o mundo possam aproveitá-lo em sua língua nativa. É um jogo construído para um público global.
🪐 Espaço 3D Renderizado com Three.js
O universo ganha vida usando Three.js, uma biblioteca JavaScript 3D. O cosmos é renderizado em tempo real diretamente no seu navegador, mergulhando os jogadores em um mundo altamente imersivo.
O Que é um Jogo Incremental?
Jogos incrementais (também chamados de idle games ou clicker games) são um gênero onde você acumula recursos gradualmente, desbloqueia melhorias e expande a escala de sua operação passo a passo. O apelo está na sensação de conquista que vem do progresso pequeno e constante somando-se a algo enorme — e na possibilidade de jogar no seu próprio ritmo.
Para Quem é Este Jogo?
- Pessoas que procuram um jogo rápido para jogar sem instalação
- Fãs de cenários espaciais e de ficção científica
- Fãs de jogos incrementais / idle
- Jogadores que gostam de jogos com história e final de verdade
- Quem quiser jogar casualmente no celular ou PC
- Jogadores que preferem jogar em um idioma diferente do japonês
Como Jogar
Basta abrir seu navegador e acessar https://stellar-epoch.sloth255.com/ — é só isso!
Destaques Técnicos
Arquitetura Geral
| Tecnologia | Propósito |
|---|---|
| React + TypeScript | Toda a interface |
| Zustand | Gerenciamento de estado do jogo |
| Vite | Ferramenta de build |
| Firebase | Analytics |
| AWS S3 + CloudFront | Hospedagem |
Loop do jogo: A função tick() no store Zustand é chamada em intervalos regulares a partir de um hook useGameLoop, tratando produção de energia, instalações e spawning de encontros em uma única passagem. O estado é persistido no localStorage.
Renderização 3D com Three.js / React Three Fiber
Toda a renderização 3D é centralizada em SpaceScene.tsx. Os principais pontos técnicos são descritos abaixo.
1. Shaders GLSL Customizados (Sol, Atmosfera, Disco de Acreção)
- Shader do Sol: O fragment shader usa o produto escalar da normal da superfície e a direção da câmera para gerar um efeito de brilho de coroa. O uniform
timeé atualizado a cada frame para criar uma animação de pulso. Quando um flare dispara,flareIntensityé transicionado suavemente usandolerp(). - Shader de Atmosfera: Usando a mesma técnica de produto escalar da normal, uma atmosfera planetária que colore apenas a borda (efeito Fresnel) é renderizada via renderização
BackSide. - Disco de acreção do buraco negro: Um padrão de turbulência construído a partir de múltiplas ondas senoidais sobrepostas cria um gradiente que brilha em branco quente no centro e desvanece para vermelho escuro nas bordas. Os UVs do
RingGeometrysão manualmente corrigidos para mapear radialmente como pretendido.
2. Animação Por Frame com useFrame
- Órbitas de planetas e luas:
angleRefé incrementado a cada frame, eposition.x/zé calculado com funções trigonométricas — uma abordagem leve que não requer simulação física. - Referências de objetos são armazenadas com
useRefpara que posições, rotações e uniforms possam ser escritos diretamente sem acionar re-renders do React, mantendo o desempenho elevado.
3. Renderização Eficiente de Grande Número de Objetos com InstancedMesh
Matrizes de um objeto dummy THREE.Object3D são copiadas para o InstancedMesh, reduzindo todas as instâncias a uma única draw call.
4. Sistemas de Partículas (BufferGeometry)
- Espiral galáctica: Um
Float32Arrayde 5.000 pontos é pré-gerado. Quatro braços espirais são posicionados usando coordenadas polares igualmente espaçadas com dispersão aleatória, e o falloff de brilho viaexp(-dist/18)cria uma galáxia de aparência natural que é mais brilhante no centro. - Efeito de supernova: Vetores de velocidade são embutidos em
userData, e as posições são calculadas comoelapsed * velocitydentro deuseFrame, fazendo as partículas voarem para fora em uma esfera. - Web cósmica: Um grafo de proximidade de 200 nós é renderizado como
LineSegments, conectando quaisquer dois nós dentro da distância 12.
5. Controle de Câmera com Conhecimento de Fase
À medida que o jogo avança pelas fases 1–7, a distância de recuo da câmera muda, produzindo uma expansão visual de escala de sistema solar → galáxia → estrutura cósmica em grande escala. Uma curva de easing customizada (1 - (1-t)^3) é aplicada via requestAnimationFrame para transições suaves.
6. Carregamento Progressivo de Texturas com Suspense
useTexture de @react-three/drei carrega texturas de forma assíncrona e é envolvido em React Suspense. Enquanto as texturas ainda não estão carregadas, um fallback apenas com shader é exibido. Um uniform hasTexture é passado ao GLSL para alternar dinamicamente entre renderização com e sem textura.
7. Tremor de Câmera
Quando um encontro Lendário dispara, um efeito simples de tremor é implementado adicionando e subtraindo um offset aleatório à posição da câmera a cada frame via useThree() para manipulação direta da câmera.
