Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
98e6a49
regua(lajes): LV1-LV5 mede cima x baixo, praca no meio e visada dos b…
rubenmarcus Aug 25, 2026
d954ca4
chore(docs): re-deriva blocos gerados apos registrar eval:lajes-vertical
rubenmarcus Aug 25, 2026
46ab377
map2(lajes): praca no terreo, descidas de spawn e o terreo ligado ao …
rubenmarcus Aug 25, 2026
c2fc758
map2(lajes): copa em massas, vida e burburinho na praca + evidencia A/B
rubenmarcus Aug 25, 2026
acbb03b
regua(lajes): LV6 fecha o buraco da aresta-fantasma e QUAD_ESPAC vira…
rubenmarcus Aug 25, 2026
3bb1040
docs(lajes): porque da praca sai do codigo e vira docs/maps/LAJES-PRA…
rubenmarcus Aug 25, 2026
752f10b
chore(docs): re-deriva blocos gerados e ARCH apos a rodada da praca
rubenmarcus Aug 25, 2026
58beae2
map2(lajes): bot deixa de morar no respawn de cima — porta de laje ab…
rubenmarcus Aug 26, 2026
4011951
map2(lajes): pipa voa de verdade — GLB Mint preso numa linha, voo pro…
rubenmarcus Aug 26, 2026
4bf7fab
map2(lajes): 127 barracos viram 63 — uma casa por face, alvenaria no …
rubenmarcus Aug 26, 2026
146a504
docs(lajes): historico sai do codigo e vira docs/maps + KNOWN-BUGS BU…
rubenmarcus Aug 26, 2026
b35a911
style(pipa): tres // seguidos sao UM bloco para a CM1 — constantes nu…
rubenmarcus Aug 26, 2026
9719909
chore(lajes): re-deriva grafite, docs e blocos gerados apos a rodada r2
rubenmarcus Aug 26, 2026
37c4ac4
chore(docs): re-deriva blocos gerados apos os commits da rodada r2
rubenmarcus Aug 26, 2026
bb37c04
chore(eval): map_check.json regerado com 'all' (o eval:map-new so esc…
rubenmarcus Aug 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions ARCH.generated.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ Números atuais das zonas, do quality gate e do `package.json`:

| Zona | O que é | Tamanho medido | Regra |
|---|---|---|---|
| `public/` | o **jogo** | 59 arquivos `.js`, 41.159 linhas · Three.js `r160` vendorizado | ES modules servidos crus, **zero build**, sem dependência de runtime |
| `public/` | o **jogo** | 59 arquivos `.js`, 41.619 linhas · Three.js `r160` vendorizado | ES modules servidos crus, **zero build**, sem dependência de runtime |
| `src/` | o **site** | 18 páginas `.astro`, 21 rotas `/api` · Astro `^7.1.1` | framework é bem-vindo; `service_role` só no servidor |
| `tools/` | o **arnês** | 300 scripts em `tools/eval/`, 77 em `tools/` | node puro: sobe o jogo real sem browser |
| `tools/` | o **arnês** | 304 scripts em `tools/eval/`, 77 em `tools/` | node puro: sobe o jogo real sem browser |

**Não existe `public/index.html`.** O HTML do jogo é `src/pages/index.astro`, servido na rota `/`. Servir `public/` estaticamente entrega os arnêses visuais, **não o jogo** — é a pegadinha que custa a primeira hora de todo mundo.

Expand All @@ -25,10 +25,10 @@ Comandos e scripts atuais do quality gate:
<!-- BEGIN:GERADO:scripts — não edite à mão, rode `npm run docs` -->

```bash
npm run check:fast # node tools/eval/runner.mjs syntax eval:release eval:telemetry eval:identity eval:error-console eval:error-origin eval:webgl eval:webglguard eval:maprotate eval:shaderlog eval:shaderbudget eval:botbrain eval:prune eval:vminspect eval:faccao eval:mapid eval:mapjson eval:mapcontrato eval:ambience-registry eval:parquewheel eval:redesign eval:matchoptions eval:charvoice eval:screenquery docs:check arch:check audio:check feet:check eval:vmlabhud eval:ctfhud eval:pause eval:ctfround eval:ctfwin eval:spawn eval:regen eval:pegada eval:dmgdir eval:ctflabels anims:check anims:merge:check walls:check media:check menuwalls:check travessao:check eval:medianet eval:posters eval:grafitelayout eval:simclock eval:backendhints changelog:check eval:velhooeste eval:penitenciaria eval:charhard eval:charpbr eval:motoca-visual eval:camera-grip eval:pilot-system eval:pilot-grip eval:char-thumbnail eval:asset-integrity eval:gltf-validator eval:props-acervo eval:propsuv1 eval:character-voice eval:audio-pack-character-voice eval:cinematic-ui eval:grafite-editorial eval:map-source eval:map-new eval:campo-contract eval:lajes-rooftop eval:lajes-visual eval:lajes-authored eval:lajes-spatial eval:lajes-gap eval:lajes-circuito eval:lajes-antitrap eval:mansao-water eval:mansao-garden eval:corrego-contract eval:corrego-water eval:look eval:mansao-ocean eval:wind eval:softparticles eval:escala-favela eval:escadao-contract eval:slice-abilities eval:faction-registry eval:mapview eval:devport spec:check skills:check eval:pickuparma eval:mutcega eval:autofix eval:deploygate eval:portaointeiro eval:wfsecret eval:comentario eval:fixture eval:preload eval:docsautoria eval:replaycam
npm run check:fast # node tools/eval/runner.mjs syntax eval:release eval:telemetry eval:identity eval:error-console eval:error-origin eval:webgl eval:webglguard eval:maprotate eval:shaderlog eval:shaderbudget eval:botbrain eval:prune eval:vminspect eval:faccao eval:mapid eval:mapjson eval:mapcontrato eval:ambience-registry eval:parquewheel eval:redesign eval:matchoptions eval:charvoice eval:screenquery docs:check arch:check audio:check feet:check eval:vmlabhud eval:ctfhud eval:pause eval:ctfround eval:ctfwin eval:spawn eval:regen eval:pegada eval:dmgdir eval:ctflabels anims:check anims:merge:check walls:check media:check menuwalls:check travessao:check eval:medianet eval:posters eval:grafitelayout eval:simclock eval:backendhints changelog:check eval:velhooeste eval:penitenciaria eval:charhard eval:charpbr eval:motoca-visual eval:camera-grip eval:pilot-system eval:pilot-grip eval:char-thumbnail eval:asset-integrity eval:gltf-validator eval:props-acervo eval:propsuv1 eval:character-voice eval:audio-pack-character-voice eval:cinematic-ui eval:grafite-editorial eval:map-source eval:map-new eval:campo-contract eval:lajes-rooftop eval:lajes-visual eval:lajes-authored eval:lajes-spatial eval:lajes-gap eval:lajes-circuito eval:lajes-antitrap eval:lajes-bots eval:mansao-water eval:mansao-garden eval:corrego-contract eval:corrego-water eval:look eval:mansao-ocean eval:wind eval:softparticles eval:escala-favela eval:escadao-contract eval:slice-abilities eval:faction-registry eval:mapview eval:devport spec:check skills:check eval:pickuparma eval:mutcega eval:autofix eval:deploygate eval:portaointeiro eval:wfsecret eval:comentario eval:fixture eval:preload eval:docsautoria eval:replaycam
```

`package.json` tem **186 scripts**; o motivo de cada um mora em `SCRIPTS.md` (migrado das chaves `//nome` em 18/08/2026) — é onde está o porquê.
`package.json` tem **188 scripts**; o motivo de cada um mora em `SCRIPTS.md` (migrado das chaves `//nome` em 18/08/2026) — é onde está o porquê.

> Bloco gerado por `node tools/gen-docs.mjs`. Fonte: `node -p "Object.keys(require('./package.json').scripts)"`

Expand Down
81 changes: 81 additions & 0 deletions KNOWN-BUGS.md
Original file line number Diff line number Diff line change
Expand Up @@ -1822,6 +1822,48 @@ animais tambem"*.
riggado CC0 (varredura Quaternius + Poly Pizza 19/08, documentada no FONTE.md); o
pipeline de animação Mint é humanoid-only. Integração no córrego é da frente B.

### BUG-75 · Bot do lajes não sai de perto do respawn porque atira de 50 m — ABERTO 26/08

**Sintoma literal do dono (26/08):** *"os bots ficam so no respawn em cima e nao tentam
circular pelo mapa embaixo tambem"*.

**O portão estava INTEIRO VERDE quando isso foi dito.** A `LV1` provava rota por baixo, a
`LV6` provava aresta de térreo andável, a `CTF2` contava duas rotas separadas. Nenhuma das
três olha para o bot.

**Duas causas foram achadas e CONSERTADAS** na rodada de 26/08 (porta da laje tapada por
guarda de patamar; `nearestWaypoint` respondendo em planta num mapa de duas camadas) — ver
`docs/maps/LAJES-BOTS.md` e a régua `eval:lajes-bots` (LB1/LB2, antes 4 arestas bloqueadas e
84,6% de acerto de camada; depois 0 e 100%).

**O QUE CONTINUA ABERTO, e é o que o dono vê.** Com o combate ligado, o raio de exploração do
bot no lajes é **12,8 m**, contra 23,2 m (escadão), 23,0 m (piscinão) e 38,5 m (ferro velho).
A causa não é o grafo: com o combate suprimido, no MESMO grafo, o raio vai a **44,1 m** e a
escada aparece no rastro. A causa é a soma de duas coisas:

1. no lajes **100% dos engajamentos acontecem acima de 25 m**, mediana **49,9 m** (escadão
19,0 m) — as duas lajes de spawn se enxergam por um corredor de ar sobre o miolo;
2. `_updateBot` **não avança rota nenhuma enquanto `b.target` existe** (`game.js`, ramo
`else` do roam).

O bot não precisa andar para atirar, então não anda: congela onde viu o primeiro inimigo, a
poucos metros do respawn.

**Conserto precisa de decisão do dono**, porque as duas saídas custam caro fora desta frente:
(a) redesenhar a visada do telhado para quebrar o corredor spawn↔spawn — mexe no visual que
o próprio dono chamou de melhor do jogo; (b) deixar o bot progredir na rota com alvo distante
em mãos — mexe na IA de combate de **todos** os mapas.

**Tentativa parcial já medida e insuficiente:** massa de cobertura na frente das duas lajes
de spawn levou o engajamento mediano de 48,6 m para 41,9 m e o térreo de 7,3% para 12,8%,
mas o raio CAIU (15,1 → 13,0 m).

**Sem cláusula de propósito.** `eval:lajes-bots` imprime navegação e partida real lado a lado
em toda execução; a distância entre os dois números é o defeito. Uma cláusula "o bot põe pé
no térreo" foi escrita e **descartada**: medida no estado anterior à rodada ela nascia VERDE
(7,2% das amostras, combate suprimido). Régua que não morde dá por resolvido o que continua
aberto.

### BUG-58 · Lajes é a régua visual de favela, mas está labiríntico e grande demais — ABERTO 17/08

**Sintoma literal do dono:** *"mapa esta muito labirintico e confuso apesar que os becos
Expand All @@ -1836,6 +1878,45 @@ circuito (LC1-LC6) já mede conectividade — falta um teto de COMPLEXIDADE (nº
área total / decisões por travessia) medido contra o que o dono aprovar na versão
simplificada.

**Escala dos barracos — CORRIGIDO EM ARQUIVO 26/08, aguardando olho do dono.** Frase literal
do dono (26/08): *"os barracos estao em escala errada 3-4 barracos onde deviam ser apenas
um, varias estruturas confusas"*.

Medido antes de mexer (o colisor de casa passou a carregar id, altura, fachada e rumo, que é
o que deixa a régua contar barraco sem adivinhar pela caixa):

| | antes | depois |
|---|---|---|
| casas de kit no mapa | **127** | **63** |
| fachada mediana | 1,87 m (para 5,15 m de altura — razão **0,36**) | igual |
| casas com fachada < 2,2 m | 125 de 127 | 62 de 63 |
| casas por célula de 6 × 6 m (mediana / máximo) | 4 / **7** | 2 / **4** |
| pé-direito fora da faixa 2,40–2,80 m (BUG-55) | 1 | 0 |

A causa é a combinação de duas coisas certas isoladamente: as casas do kit são **torres
estreitas** (2,3 m de largura para 6,2 m de altura) e o mapa as escala pela altura da laje
(5,15 m). A fachada sai com 1,87 m, e o laço da fileira enchia a face até acabar — três casas
numa face de 5,8 m.

Conserto: **uma casa por face de bloco**, descentrada por bloco (fachada sempre no meio
devolve simetria de maquete), e o resto da face vira `wallWithRelief` — o mesmo painel de
alvenaria com viga de coroamento e janela que o mapa já usa nos vãos vetados, então nada de
novo entra no vocabulário visual. No beco, painel de 2,2 m entre uma casa e a próxima: o
passo casa→casa vai de ~2,0 m para ~4,1 m. As alturas do beco passam a fechar em pavimento
inteiro (5,20/5,40 de sobrado, 2,70 de térrea) — 4,20 m não era nem um pé-direito nem dois.

**Por que não alargar a casa em vez de tirar as vizinhas:** `placeProp` e `PropBatch` escalam
UNIFORME (o `targetLen` é média geométrica com a altura, não estica só a largura), e para a
fachada encher a face o modelo precisaria de 2,24× no horizontal. Escala não uniforme em
malha instanciada é outra frente. O que separa "casa" de "palito" aqui é o contexto: casa
ladeada por alvenaria lê como casa, três lado a lado leem como cerca de torres.

Régua: **ESC6** em `escala-favela-check.mjs` — no máximo 4 casas por célula de 6 m (o teto é
geométrico: uma célula cabe um bloco, e um bloco tem quatro faces) e pé-direito por pavimento
na MESMA faixa 2,40–2,80 m das outras cláusulas. Vermelha no estado anterior (pior célula 7,
14 células acima do teto), verde depois. Mutante `barracada` repõe as casas enfileiradas e é
mordido (pior célula 10).

**Anti-trap (v2.1, plans/13) — CORRIGIDO EM ARQUIVO 19/08, aguardando olho do dono.**
Frase literal do dono (17/08): *"a parte debaixo tem cantos intransponiveis se vc cai de
cima voce nao sai nunca mais isso nao pode acontecer"*. O LC1-6 media o térreo contíguo
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ contra bots, direto na aba. Sem download, sem instalação, sem cadastro.

| O que | Quanto | Onde confere |
|---|---:|---|
| Código do jogo | 41.159 linhas em 59 arquivos | `git ls-files public/js/*.js \| xargs wc -l` |
| Código do jogo | 41.619 linhas em 59 arquivos | `git ls-files public/js/*.js \| xargs wc -l` |
| `game.js` | **7.260** linhas | `wc -l public/js/game.js` |
| `main.js` | 2.812 linhas | `wc -l public/js/main.js` |
| Armas com GLB | 27 | `git ls-files 'public/models/weapons/*.glb' \| wc -l` |
Expand All @@ -44,7 +44,7 @@ contra bots, direto na aba. Sem download, sem instalação, sem cadastro.
| Personagens jogáveis | 62, em 10 facções | array `CHARACTERS` de `characters.js` |
| Mapas no registro | 17 | objeto `MAPS` de `maps.js` |
| Arnêses visuais em HTML | 16 | `git ls-files 'public/*.html' \| wc -l` |
| Scripts do arnês | 300 | `git ls-files 'tools/eval/*.mjs' 'tools/eval/*.py' \| wc -l` |
| Scripts do arnês | 304 | `git ls-files 'tools/eval/*.mjs' 'tools/eval/*.py' \| wc -l` |
| Scripts de pipeline | 77 | `git ls-files 'tools/*.mjs' \| wc -l` |
| Tarefas de entrada escritas | 26 | `git ls-files 'docs/issues/[0-9]*.md' \| wc -l` |
| Versão | `2.0.0-alpha.184` | `public/js/version.js` e `package.json` (batem) |
Expand Down Expand Up @@ -313,7 +313,7 @@ Os mapas registrados, e em que modo cada um abre:
| `quebrada` | Quebrada (Rua do Baile) | **captura** | `map_quebrada.js` | 1.656 |
| `escadao` | Escadão (Morro) | **captura** | `map_escadao.js` | 813 |
| `campomorro` | Campo do Morro | **captura** | `map_campomorro.js` | 713 |
| `lajes` | Lajes (Comunidade) | **captura** | `map_lajes_authored.js` | 1.263 |
| `lajes` | Lajes (Comunidade) | **captura** | `map_lajes_authored.js` | 1.580 |
| `corrego` | Córrego (Favela de SP) | **captura** | `map_corrego.js` | 1.258 |
| `mansao` | Mansão do Joá | **captura** | `map_mansao.js` | 955 |
| `posto_treta` | Posto da Treta | **captura** | `map_posto.js` | 506 |
Expand Down
4 changes: 2 additions & 2 deletions STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

- **Versão:** `2.0.0-alpha.184`
- **Conteúdo jogável:** 10 facções, 62 personagens, 17 mapas e 27 armas com GLB
- **Código do jogo:** 41.159 linhas em 59 módulos JavaScript
- **Automação:** 186 comandos npm, 300 scripts de avaliação e 77 scripts de pipeline
- **Código do jogo:** 41.619 linhas em 59 módulos JavaScript
- **Automação:** 188 comandos npm, 304 scripts de avaliação e 77 scripts de pipeline

> Bloco gerado por `node tools/gen-docs.mjs`. Fonte: `package.json · CHARACTERS · MAPS · public/models/weapons · public/js · tools/`

Expand Down
2 changes: 1 addition & 1 deletion docs/docs/arquitetura.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ Tamanho dos arquivos que o `gen-arch.mjs` indexa — bloco gerado, regenerado po
| `public/js/weapons.js` | 356 |
| `public/js/springs.js` | 260 |

Total de `public/js/`: **41.159 linhas em 59 arquivos**. O índice símbolo→linha, com a tabela de conflito, é outro bloco gerado: `tools/eval/ARCH.md` (`npm run arch`).
Total de `public/js/`: **41.619 linhas em 59 arquivos**. O índice símbolo→linha, com a tabela de conflito, é outro bloco gerado: `tools/eval/ARCH.md` (`npm run arch`).

> Bloco gerado por `node tools/gen-docs.mjs`. Fonte: ``git ls-files public/js/*.js | xargs wc -l``

Expand Down
2 changes: 1 addition & 1 deletion docs/docs/colaborar.md
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ O registro, gerado do `MAPS` de `public/js/maps.js`:
| `quebrada` | Quebrada (Rua do Baile) | **captura** | `map_quebrada.js` | 1.656 |
| `escadao` | Escadão (Morro) | **captura** | `map_escadao.js` | 813 |
| `campomorro` | Campo do Morro | **captura** | `map_campomorro.js` | 713 |
| `lajes` | Lajes (Comunidade) | **captura** | `map_lajes_authored.js` | 1.263 |
| `lajes` | Lajes (Comunidade) | **captura** | `map_lajes_authored.js` | 1.580 |
| `corrego` | Córrego (Favela de SP) | **captura** | `map_corrego.js` | 1.258 |
| `mansao` | Mansão do Joá | **captura** | `map_mansao.js` | 955 |
| `posto_treta` | Posto da Treta | **captura** | `map_posto.js` | 506 |
Expand Down
Loading
Loading