Skip to content

feat(mapas): fauna de verdade nos 12 mapas + céu fotográfico da piscina (BUG-57) - #376

Closed
rubenmarcus wants to merge 2 commits into
v2/arnes-grafite-servefrom
v2/fauna-todos-mapas
Closed

feat(mapas): fauna de verdade nos 12 mapas + céu fotográfico da piscina (BUG-57)#376
rubenmarcus wants to merge 2 commits into
v2/arnes-grafite-servefrom
v2/fauna-todos-mapas

Conversation

@rubenmarcus

Copy link
Copy Markdown
Member

Porte da frente de ambiência do branch /game — pedido literal do dono (17/08): "ele tem ambiência real, coisa que nenhum dos outros mapas tem — horizonte, animais, animações no céu; precisamos disso em todos os mapas". Empilhado no #369 (mergear na ordem).

O que

  • ambientlife.js + 4 GLB CC-BY 4.0/CC0 (rato, pombo-chão, pombo-voo, cão caramelo — fontes e licenças em public/models/ambient/FONTE.md, pipeline do /game), com fallback procedural — o mapa nunca nasce sem vida
  • Configs de fauna nos 12/12 mapas (mesmas coordenadas validadas no /game; UPA, 100% interno, só rato — pombo dentro de prédio fechado é ruído)
  • game.js: ambience.onShot no _fireHitscan (bicho foge de TODO tiro, de jogador e de bot), update no tick, dispose no teardown
  • main.js: preload no menu (o backdrop builda o mapa real — o caramelo passeia no menu) e na partida
  • Piscina (comunitária): céu fotográfico equiretangular via map_sky.js — o plano de cor chapada atrás dos vidros lia como parede infinita
  • Grafite regerado (5 mapas mudaram de hash)

Réguas (Lei 1/3: reprovavam antes, mutantes mordem)

Régua O que prova
eval:ambience (novo, no check:fast) AR1 todo mapa tem vida · AR2 população por bioma · AR3 nada nasce em sólido — `--mutante=sem-ambience
tools/eval/fauna-shots.mjs (browser) FS1 GLB carregado no jogo real (~34k tris de fauna vs 1,6k do fallback) · FS2 animação avança · FS3 tiro real pelo _fireHitscan muda estado pra flee/takeoff12/12

Custo de cena medido: 10–57k tris de fauna por mapa (orçamento do cena-tetos cabe).

BOT4 — dívida registrada com A/B, não regressão

O estimador do BOT4 é documentado como instável ante materiais novos (invariants.mjs: generateUUID consome o RNG semeado). A/B com as MESMAS sementes, sem fauna × com fauna:

sementes janela sem fauna janela com fauna
A (default) 3,808 s 2,986 s (falha)
B 3,899 s 4,641 s (passa)

O estimador cavalga o teto de 3,0s por variância de amostra (17–25 mortes), enquanto o bot fica menos letal em todos os eixos com fauna (taxaAcerto 0,028→0,022; mortes/min 0,695→0,472). Registrado no KNOWN-RED.json com a tabela; o conserto certo é o estimador (mediana/IC), não afrouxar o teto.

Não portado (follow-up registrado no KNOWN-BUGS)

horizon.js (aqui nenhum mapa é favela aberta), régua browser ambience-check.mjs completa do /game (depende de traçante), urubu/extras via Mint/Tripo.

  • check:fast: 53/54 (vermelho único changelog:check, pré-existente na main)
  • eval:invariants: 39/55, nenhuma falha nova

PR substituta da #370 — a original ficou com registro wedged (head/base congelados no commit de um acidente de force-push, commits=0, sem reopen possível). Branch e conteúdo idênticos; reviews da original seguem lá.

@vercel

vercel Bot commented Aug 19, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
csbrasil Ready Ready Preview Aug 19, 2026 9:17pm

Request Review

@csbrasil-BOT csbrasil-BOT added needs-human-gameplay Mudança exige revisão humana de gameplay/render/HUD needs-staging Mudança precisa validação integrada em staging target:main PR apontando para a branch main labels Aug 19, 2026
@csbrasil-BOT

csbrasil-BOT commented Aug 19, 2026

Copy link
Copy Markdown
Collaborator

csbrasil-bot classification

Note

@rubenmarcus abriu 56 arquivo(s) · +10525 −1841, base v2/arnes-grafite-serve.

O que mudou

área arquivos + amostra
📚 docs 15 +181 −203 ARCH.generated.md, KNOWN-BUGS.md, README.md
🧪 arnês 15 +9653 −1603 ARCH.md, KNOWN-RED.json, README.md
🗺️ mapas 13 +219 −6 map_atacadao.js, map_brasilia.js, map_ferrovelho.js
🎨 assets 6 +1 −1 sky_pool.webp, dog_caramelo.glb, pigeon_flight.glb
🎮 jogo 4 +445 −15 ambientlife.js, game.js, graffiti_layout.js
📦 outros 2 +21 −10 package.json, style.css
🌐 site 1 +5 −3 index.astro

Labels

label por quê
needs-human-gameplay toca gameplay/render/HUD/mapa/personagem — decisão de humano
needs-staging mudança de runtime/UI — valida integrado no staging antes do merge
target:main vai direto pra main, sem fila de integração

@estraga-codigo estraga-codigo left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Palhaço Mal

Palhaço Mal · revisor da casa · 🤡

mapa da mudança

  • docs (15): ARCH.generated.md, KNOWN-BUGS.md, README.md, STATUS.md
  • mapas (13): map_atacadao.js, map_brasilia.js, map_ferrovelho.js, map_havan.js
  • arnês (13): ARCH.md, KNOWN-RED.json, README.md, ambience-registry-check.mjs
  • assets (5): sky_pool.webp, dog_caramelo.glb, pigeon_flight.glb, pigeon_ground.glb
  • jogo (4): ambientlife.js, game.js, graffiti_layout.js, main.js
  • outros (1): package.json

Tip

Risco BAIXO · nota 10/10 ▓▓▓▓▓▓▓▓▓▓

pente fino passado: nenhum achado que eu defenda em voz alta

Revisão de bot — fio não resolvido TRAVA o merge (a main exige conversa resolvida). Resolve ou refuta.

impacto cruzado

graph RL
  main_js["main.js"] --> game_js["game.js"]
  graffiti_pass_js["graffiti_pass.js"] --> graffiti_layout_js["graffiti_layout.js"]
  maps_js["maps.js"] --> map_atacadao_js["map_atacadao.js"]
  maps_js["maps.js"] --> map_brasilia_js["map_brasilia.js"]
  site_bg_js["site-bg.js"] --> map_brasilia_js["map_brasilia.js"]
  maps_js["maps.js"] --> map_ferrovelho_js["map_ferrovelho.js"]
  main_js["main.js"] --> map_havan_js["map_havan.js"]
  maps_js["maps.js"] --> map_havan_js["map_havan.js"]
Loading

(grafo local de public/js, uma rodada atrás do head do PR.)

maquiagem de verde por cima de vermelho eu desenmascaro no primeiro golpe de vista 🤡

@estraga-codigo

Copy link
Copy Markdown
Collaborator

Esbirro

Esbirro · plantão da produção · 🕵️

check vermelho parado neste PR

Caution

Não sei classificar este vermelho. Segue o que o CI cuspiu — palpite de bot sobre bug alheio só atrapalha.

o quê valor
head 30a63c67c256
checks vermelhos 2
classe outra
hora do plantão 2026-08-19T02:15:14.591Z

Vermelho:

classify (https://github.com/corosolto/client/actions/runs/32206149429/job/95929712632)
portao (https://github.com/corosolto/client/actions/runs/32205740070/job/95928570110)

Rabo do log:

2026-08-19T01:47:01.9650052Z env:
2026-08-19T01:47:01.9650677Z   GH_TOKEN: ***
2026-08-19T01:47:01.9651038Z   PR_NUMBER: 376
2026-08-19T01:47:01.9651293Z   DESIRED_BASE_BRANCH: staging
2026-08-19T01:47:01.9651674Z   pythonLocation: /opt/hostedtoolcache/Python/3.13.15/x64
2026-08-19T01:47:01.9652103Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.13.15/x64/lib/pkgconfig
2026-08-19T01:47:01.9652527Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.13.15/x64
2026-08-19T01:47:01.9652920Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.13.15/x64
2026-08-19T01:47:01.9653315Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.13.15/x64
2026-08-19T01:47:01.9653697Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.13.15/x64/lib
2026-08-19T01:47:01.9654054Z ##[endgroup]
2026-08-19T01:47:02.1922121Z GraphQL: Your token has not been granted the required scopes to execute this query. The 'login' field requires one of the following scopes: ['read:org'], but your token has only been granted the: ['repo', 'workflow'] scopes. Please modify your token's scopes at: https://github.com/settings/tokens., Your token has not been granted the required scopes to execute this query. The 'name' field requires one of the following scopes: ['read:org', 'read:discussion'], but your token has only been granted the: ['repo', 'workflow'] scopes. Please modify your token's scopes at: https://github.com/settings/tokens., Your token has not been granted the required scopes to execute this query. The 'slug' field requires one of the following scopes: ['read:org', 'read:discussion'], but your token has only been granted the: ['repo', 'workflow'] scopes. Please modify your token's scopes at: https://github.com/settings/tokens.
2026-08-19T01:47:02.2292258Z Traceback (most recent call last):
2026-08-19T01:47:02.2375135Z   File "<stdin>", line 7, in <module>
2026-08-19T01:47:02.2375953Z   File "/opt/hostedtoolcache/Python/3.13.15/x64/lib/python3.13/subprocess.py", line 577, in run
2026-08-19T01:47:02.2376656Z     raise CalledProcessError(retcode, process.args,
2026-08-19T01:47:02.2377206Z                              output=stdout, stderr=stderr)
2026-08-19T01:47:02.2378242Z subprocess.CalledProcessError: Command '['gh', 'pr', 'edit', '376', '--add-label', 'needs-human-gameplay,needs-staging,target:main']' returned non-zero exit status 1.
2026-08-19T01:47:02.2433098Z ##[error]Process completed with exit code 1.


nada fora do normal no meu turno 🕵️

@rubenmarcus
rubenmarcus force-pushed the v2/arnes-grafite-serve branch from 6e3b69f to 8ec5134 Compare August 19, 2026 02:55
…na (BUG-57)

Porte da frente de ambiência do /game (pedido do dono, 17/08: 'horizonte,
animais, animações no céu — precisamos disso em todos os mapas'):

- ambientlife.js: rato/pombo-chão/pombo-voo/cão caramelo em GLB
  (CC-BY 4.0 / CC0, fontes e licenças em public/models/ambient/FONTE.md),
  com fallback procedural — o mapa nunca nasce sem vida
- configs de fauna nos 12/12 mapas do registro (UPA, 100% interno, só
  rato — pombo dentro de prédio fechado é ruído)
- game.js: ambience.onShot no _fireHitscan (bicho foge de TODO tiro,
  jogador e bot), update no tick, dispose no teardown
- main.js: preload da fauna no menu (o backdrop builda o mapa real) e na
  partida (cobre entrada direta por URL)
- piscina (comunitária): céu equiretangular via map_sky.js — o plano de
  cor chapada atrás dos vidros lia como parede infinita

Réguas:
- eval:ambience (AR1 todo mapa tem vida · AR2 população por bioma · AR3
  nada nasce em sólido) entrou no check:fast; mutantes mordem
- tools/eval/fauna-shots.mjs (browser): FS1 GLB carregado no jogo real,
  FS2 animação avança, FS3 tiro real muda estado pra flee/takeoff — 12/12
  com capturas
- grafite regerado (5 mapas mudaram de hash)

BOT4 registrado como dívida com A/B de duas sementes: estimador documentado
como instável ante materiais novos; o bot ficou MENOS letal com fauna em
todos os eixos. Não é regressão de IA.

Commit-grande: frente inteira — 12 mapas + runtime + 4 GLB + régua nova.
Signed-off-by: rubenmarcus <rubenmarcus.dev@gmail.com>
Agent: OpenCode

@estraga-codigo estraga-codigo left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Palhaço Mal

Palhaço Mal · revisor da casa · 🤡

mapa da mudança

  • docs (15): ARCH.generated.md, KNOWN-BUGS.md, README.md, STATUS.md
  • mapas (13): map_atacadao.js, map_brasilia.js, map_ferrovelho.js, map_havan.js
  • arnês (13): ARCH.md, KNOWN-RED.json, README.md, ambience-registry-check.mjs
  • assets (5): sky_pool.webp, dog_caramelo.glb, pigeon_flight.glb, pigeon_ground.glb
  • jogo (4): ambientlife.js, game.js, graffiti_layout.js, main.js
  • outros (1): package.json

Tip

Risco BAIXO · nota 10/10 ▓▓▓▓▓▓▓▓▓▓

pente fino passado: nenhum achado que eu defenda em voz alta

Revisão de bot — fio não resolvido TRAVA o merge (a main exige conversa resolvida). Resolve ou refuta.

impacto cruzado

graph RL
  main_js["main.js"] --> game_js["game.js"]
  graffiti_pass_js["graffiti_pass.js"] --> graffiti_layout_js["graffiti_layout.js"]
  maps_js["maps.js"] --> map_atacadao_js["map_atacadao.js"]
  maps_js["maps.js"] --> map_brasilia_js["map_brasilia.js"]
  site_bg_js["site-bg.js"] --> map_brasilia_js["map_brasilia.js"]
  maps_js["maps.js"] --> map_ferrovelho_js["map_ferrovelho.js"]
  main_js["main.js"] --> map_havan_js["map_havan.js"]
  maps_js["maps.js"] --> map_havan_js["map_havan.js"]
Loading

(grafo local de public/js, uma rodada atrás do head do PR.)

todo bug confessa no diff, eu só faço o interrogatório 🤡

@estraga-codigo

Copy link
Copy Markdown
Collaborator

Esbirro

Esbirro · plantão da produção · 🕵️

check vermelho parado neste PR

Caution

Não sei classificar este vermelho. Segue o que o CI cuspiu — palpite de bot sobre bug alheio só atrapalha.

o quê valor
head dbdb7b04e80c
checks vermelhos 1
classe outra
hora do plantão 2026-08-19T03:17:16.161Z

Vermelho:

portao (https://github.com/corosolto/client/actions/runs/32210660013/job/95942566612)

Rabo do log:

2026-08-19T03:06:45.3742038Z       malha sem tinta:  Mesh×105
2026-08-19T03:07:10.2707530Z OK   loja_h         cobertura  55.9%  (meta 49%)  346/619 placas | 328 peças (0 murais) | 36 arquivos | altura 0.30–2.30 m (mediana 1.05)
2026-08-19T03:07:10.2709217Z       por faixa (altura · pintadas/placas · %):  1.6m 233/311 74.9%   3.2m 63/218 28.9%   5.0m 50/90 55.6%
2026-08-19T03:07:10.2710984Z       peladas (x,z · pintadas/placas):  -32,24 0/4   -8,32 0/6   -16,32 0/9   16,32 0/4   16,48 0/4   32,32 0/5   32,8 0/6   32,24 0/10   8,48 2/8   -40,56 2/7   -40,32 4/11   -16,56 5/13   -40,16 4/10   -40,24 4/10
2026-08-19T03:07:10.2711841Z       malha sem tinta:  havan-deco×179   Mesh[inst]×50   Mesh×44
2026-08-19T03:07:22.6344465Z BAIXO ferro_velho    cobertura  45.5%  (meta 46%)  695/1529 placas | 460 peças (0 murais) | 45 arquivos | altura 0.45–2.70 m (mediana 1.10)
2026-08-19T03:07:22.6348638Z       por faixa (altura · pintadas/placas · %):  1.6m 514/842 61%   3.2m 181/496 36.5%   5.0m 0/191 0%
2026-08-19T03:07:22.6350042Z       peladas (x,z · pintadas/placas):  -24,-24 0/12   -24,-8 0/34   -24,-16 0/33   -24,0 0/38   -24,8 0/33   -24,16 0/36   -24,24 0/32   -16,-16 0/30   -16,-8 0/24   -16,16 0/40   -16,24 0/41   -8,40 0/3   0,-8 0/15   0,8 0/3
2026-08-19T03:07:22.6352946Z       malha sem tinta:  Muro_de_carros_esmagados_1×543   Mesh×171   Mesh[inst]×97   Guindaste_com_eletroímã_1×20   Monte_de_carros_1×2   Prensa_de_carros_1×1
2026-08-19T03:07:37.0248022Z OK   quebrada       cobertura  70.4%  (meta 67%)  1083/1538 placas | 931 peças (5 murais) | 94 arquivos | altura 0.38–2.20 m (mediana 1.40)
2026-08-19T03:07:37.0249556Z       por faixa (altura · pintadas/placas · %):  1.6m 597/760 78.6%   3.2m 356/530 67.2%   5.0m 130/248 52.4%
2026-08-19T03:07:37.0251297Z       peladas (x,z · pintadas/placas):  8,-24 0/10   16,40 0/5   -16,32 4/17   -8,16 1/4   -8,-24 8/21   -16,-24 10/22   -16,-32 7/14   16,-8 24/48   -24,-16 16/31   -24,-8 13/25   16,-32 20/37   -16,-16 12/22   -16,0 25/44   -8,24 4/7
2026-08-19T03:07:37.0253566Z       malha sem tinta:  Mesh[inst]×339   Mesh×77   Weathered_Green_Dome_Tent_1×17   tripo_node_b802e5a9-b4f0-4363-a1ab-2f6ce333f5af×8   arquibancada_1×5   Arara_de_roupas_1×4   Kombi_1×3   Object_2×1
2026-08-19T03:07:37.1446285Z -> tools/eval/graffiti_census.json
2026-08-19T03:07:37.1448637Z
2026-08-19T03:07:37.1449377Z PORTÃO VERMELHO — 2 mapa(s) com parede pintada abaixo da meta:
2026-08-19T03:07:37.1449905Z   praca_poderes: cobertura 29.9% < meta 35%
2026-08-19T03:07:37.1450369Z   ferro_velho: cobertura 45.5% < meta 46%
2026-08-19T03:07:37.1613204Z ##[error]Process completed with exit code 1.


de plantão: vi, registrei, hora no relógio 🕵️

Palavras do dono (18/08): 'a tela tá muito difícil de navegar e poluída
porque já tem muitos mapas'. Medido antes: a strip de carrossel desenhada
pra 5 cartazes de 196px espremia os 12 cards a 98px (1536×1024) e 50px
(960×640), transbordando a faixa, com paginação de 5 quebrando o scan.

Agora: ficha do mapa à esquerda + GRADE auto-fill minmax(208px,1fr) com
scroll vertical à direita. Cards a 275px (3:2) e 228px (960), zero
paginação (fim dos dashes), ↑↓ pulam a LINHA da grade — colunas contadas
por offsetTop real, porque auto-fill muda com o viewport — e ←→/setas
continuam na ordem da categoria.

Réguas escritas ANTES (reprovavam o carrossel — conferido):
- UIR25 no eval:redesign: esqueleto da grade + teclado 4 direções
- eval:screenquery:browser mede o USO: cardMin ≥190px, cols ≥3 por
  offsetTop, overflow-y auto, e dois ArrowDown reais avançam 2×cols
- telas-menu7 continua válida (o fluxo de abertura não mudou)

Commit-grande: docs/arch regeridos após main.js/style/index mudarem de
tamanho (blocos gerados acompanham a árvore em cada PR).


Agent: OpenCode

Signed-off-by: rubenmarcus <rubenmarcus.dev@gmail.com>

@estraga-codigo estraga-codigo left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Palhaço Mal

Palhaço Mal · revisor da casa · 🤡

mapa da mudança

  • docs (15): ARCH.generated.md, KNOWN-BUGS.md, README.md, STATUS.md
  • arnês (15): ARCH.md, KNOWN-RED.json, README.md, ambience-registry-check.mjs
  • mapas (13): map_atacadao.js, map_brasilia.js, map_ferrovelho.js, map_havan.js
  • assets (6): sky_pool.webp, dog_caramelo.glb, pigeon_flight.glb, pigeon_ground.glb
  • jogo (4): ambientlife.js, game.js, graffiti_layout.js, main.js
  • outros (2): package.json, style.css
  • site (1): index.astro

Tip

Risco BAIXO · nota 10/10 ▓▓▓▓▓▓▓▓▓▓

pente fino passado: nenhum achado que eu defenda em voz alta

Revisão de bot — fio não resolvido TRAVA o merge (a main exige conversa resolvida). Resolve ou refuta.

impacto cruzado

graph RL
  main_js["main.js"] --> game_js["game.js"]
  graffiti_pass_js["graffiti_pass.js"] --> graffiti_layout_js["graffiti_layout.js"]
  maps_js["maps.js"] --> map_atacadao_js["map_atacadao.js"]
  maps_js["maps.js"] --> map_brasilia_js["map_brasilia.js"]
  site_bg_js["site-bg.js"] --> map_brasilia_js["map_brasilia.js"]
  maps_js["maps.js"] --> map_ferrovelho_js["map_ferrovelho.js"]
  main_js["main.js"] --> map_havan_js["map_havan.js"]
  maps_js["maps.js"] --> map_havan_js["map_havan.js"]
Loading

(grafo local de public/js, uma rodada atrás do head do PR.)

maquiagem de verde por cima de vermelho eu desenmascaro no primeiro golpe de vista 🤡

@estraga-codigo

Copy link
Copy Markdown
Collaborator

Esbirro

Esbirro · plantão da produção · 🕵️

check vermelho parado neste PR

Caution

Não sei classificar este vermelho. Segue o que o CI cuspiu — palpite de bot sobre bug alheio só atrapalha.

o quê valor
head 54591968349b
checks vermelhos 1
classe outra
hora do plantão 2026-08-19T22:06:29.949Z

Vermelho:

portao (https://github.com/corosolto/client/actions/runs/32303044920/job/96229705284)

Log do run já expirou — abrir pelo link do check.


nada fora do normal no meu turno 🕵️

@rubenmarcus

Copy link
Copy Markdown
Member Author

Superado pela feat/times-e-mapas-completo, que já carrega esta feature numa versão mais avançada.

Comparado, arquivo a arquivo:

este PR feat/times-e-mapas-completo
ambientlife.js 410 linhas, só rato 561 linhas, 7 espécies (rato, pomba, cachorro, gato, galinha, vaca, tatu, barata, papagaio)
fauna-shots.mjs 138 linhas, 12 mapas 196 linhas, 17 mapas (PR #397)
cobertura medida ambience-registry-check AR1–AR6 verdes nos 17 mapas; fauna-shots FS1/FS2/FS3 verdes em 17/17

Manter os dois abertos garantiria conflito pesado nos mesmos arquivos quando a branch grande for para a main. Nada aqui se perde — a fauna, os céus por mapa e a grade do map-screen já estão lá, mais adiante.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-human-gameplay Mudança exige revisão humana de gameplay/render/HUD needs-staging Mudança precisa validação integrada em staging target:main PR apontando para a branch main

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants