Project Plateau
Project Plateau: four glass plates, one living valley, and the road back to camp.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Bullet hell de sobrevivência em pixel art moderna, para navegador. Você é Ômega. Seu poder é ilimitado. Sua vida, não.
Jogar · Mecânicas · Arquitetura · Documentação · Roadmap
Zona de Teste 7, 03:14 da manhã. Um reator experimental falha com um pesquisador dentro. O corpo dele se desfaz e se reconstrói como Ômega, uma consciência que manipula a matéria à vontade.
O exército chega primeiro. Depois os blindados, a força aérea, o serviço secreto. Quando nada disso funciona, entram em cena sociedades secretas, alienígenas e os maiores super-heróis do mundo.
Ao contrário do bullet hell clássico, aqui você não é frágil: tem ataques infinitos, 1000 de essência, regeneração e poderes que apagam inimigos da existência. A tensão vem do volume. Inimigos, projéteis e o dano de cada golpe crescem sem teto até derrubar até um deus. Uma partida dura de 3 a 15 minutos, e o objetivo é bater o recorde.
| Poder | Efeito | |
|---|---|---|
| 🔆 | Rajadas de energia | Automáticas e infinitas, ~12 disparos por segundo |
| 🌟 | Raio Cósmico | Feixe de 480 px que atravessa tudo e queima projéteis |
| ⚪ | Apagar da existência | Remove inimigos próximos sem deixar rastro. Vale pontos em dobro |
| 💫 | Teleporte | Salto até a mira, com explosão na chegada |
| 🔥 | Aura de contato | Desintegra quem chega perto |
| ⏸️ | Parar o Tempo · Clones Quânticos · Chuva de Estrelas · Escudo de Fase | Desbloqueáveis pelas evoluções |
Exército → Blindados → Força Aérea → Serviço Secreto → Mísseis guiados → Maçons → Invasão alienígena → Tudo ao mesmo tempo
E a cada ~55 s, um herói: Capitão Égide · Valquíria Volt · Titã Carmesim · Sentinela Estelar.
| Desktop | Celular | ||
|---|---|---|---|
WASD / setas | Flutuar | Arrastar à esquerda | Joystick virtual |
| Mouse | Mirar | Mira automática | |
| Segurar clique | Raio Cósmico | RAIO (segurar) | Raio Cósmico |
Espaço | Apagar | APAGAR | Apagar |
Shift / botão direito | Teleporte | TELEPORTE | Salto na direção do movimento |
Q | Parar o Tempo | PARAR TEMPO | Parar o Tempo |
1 2 3 | Escolher evolução | Tocar na carta | Escolher evolução |
P · M | Pausar · Som |
Requer Node 22.18+.
git clone https://github.com/Le-Jr/singularidade.git
cd singularidade
npm install
npm run dev # → http://localhost:5173
| Comando | O que faz |
|---|---|
npm run dev | Servidor de desenvolvimento com recarga automática |
npm run build | Checa os tipos e gera dist/, pronto para qualquer hospedagem estática (itch.io, GitHub Pages, Netlify) |
npm run preview | Serve o dist/ localmente |
npm test | Testes da simulação (Vitest) |
npm run sim -- 20 | Relatório de balanceamento: um bot joga 20 partidas com semente, sem navegador |
npm run playtest | Com o dev rodando, joga no Chromium sem janela e salva capturas em .playtest/ |
A regra principal: a lógica do jogo não conhece o Phaser. Tudo o que decide o resultado de uma partida fica em src/sim/, em TypeScript puro, com timestep fixo de 60 Hz e sorteios com semente. A mesma semente com as mesmas entradas reproduz a mesma partida, e a simulação roda no Node para testes e balanceamento.
flowchart LR
C["🎮 Controls<br/><sub>teclado · mouse · toque</sub>"] -- SimInput --> S["🧠 Sim.step(1/60)<br/><sub>src/sim · TypeScript puro</sub>"]
S -- muta --> G[("GameState")]
G -- lê --> V["🎨 WorldView<br/><sub>Phaser 4 · WebGL</sub>"]
S -- SimEvent --> E["GameScene"]
E --> A["🔊 Synth<br/><sub>Web Audio</sub>"]
E --> H["📟 HUD<br/><sub>DOM</sub>"]
src/
├── main.ts inicialização do Phaser e escala 16:9
├── scenes/ GameScene: fluxo da partida e loop de timestep fixo
├── sim/ regras do jogo, sem Phaser e sem DOM
│ └── data/ tabelas de inimigos, chefes e evoluções
├── render/ pixel art em código, texturas geradas, desenho do mundo
├── input/ teclado, mouse, joystick virtual, botões do celular
├── audio/ sintetizador de efeitos sonoros
└── ui/ HUD, telas e recorde
tests/ testes da simulação
tools/ balance.ts · playtest.ts
legacy/ a versão original em JavaScript puro, arquivo único
Os detalhes ficam em docs/08-architecture.md.
O repositório não tem nenhum arquivo de imagem ou áudio do jogo. Cada sprite é uma grade de caracteres com paleta:
soldier: {
rows: ['..gggg..', '.gGGGGg.', '..ssss..', '..skks..', '.gggggg.', /* … */],
pal: { g: '#4f6b2f', G: '#6d8b3c', s: '#e0b48a', k: '#22201c' },
},
As texturas (sprites, silhuetas de dano, projéteis com gradiente, chão, brilho, vinheta) são geradas na inicialização. Os sons são sintetizados em tempo real com osciladores e ruído filtrado da Web Audio API. A resolução interna é 400×225, ampliada sem suavização, com brilho aditivo, centenas de partículas, tremor de tela e filtros de câmera.
| Documento | Conteúdo | |
|---|---|---|
| 🌌 | Visão geral | Conceito, história, protagonista, loop de jogo |
| 🎮 | Controles | Teclado, mouse e celular |
| ⚡ | Poderes | Poderes iniciais e desbloqueáveis, com números |
| 💀 | Inimigos | Os 7 tipos, atributos e padrões de tiro |
| 🦸 | Chefes | Os 4 super-heróis e seus ataques |
| 🧬 | Evoluções | As 11 cartas e builds sugeridas |
| 📈 | Dificuldade e pontuação | Curvas de escala, ascensão, recorde |
| 🧠 | Architecture | Código, loop, modelo de dados (em inglês) |
| 🎨 | Arte e áudio | Direção visual, paleta, sprites e sons |
| 🗺️ | Changelog e roadmap | Versões e próximos passos |
O projeto traz skills em .claude/skills/ que o Claude Code carrega sozinho quando a tarefa pede:
| Skill | Para quê |
|---|---|
singularidade-dev | Arquitetura, regras do código, diferenças do Phaser 4, como testar e quais docs atualizar |
game-content | Receitas para criar inimigos, chefes, evoluções, poderes e fases de ameaça |
pixel-art-and-sfx | Formato dos sprites, paleta, efeitos visuais e receitas de som |
balance-tuning | Onde fica cada número da dificuldade e como medir mudanças com npm run sim |