-
Notifications
You must be signed in to change notification settings - Fork 33
feat(docs) : Documentação de como criar mapa com IA. #373
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
2da2251
d024e4c
fcac549
8796459
bee2fff
e19d7f9
77836d5
c8b9a75
c1c966c
d155273
9924273
5f13df6
00c1a9e
28fbe3e
4f94df6
9f96cba
e55d452
f413576
85c898d
402b055
46adabf
ab99afe
74e7313
53f45c8
faee813
8e57c44
423f4ef
ac68e9a
afd7e31
3fab153
66166eb
d7dbb6d
436ad5a
fd80184
bdd60a4
67e8837
ab3f875
311aaf2
cf37895
60fda19
682d207
ea616b5
61a4f4d
11c5406
dce6b9e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,212 @@ | ||
| --- | ||
| id: criar-mapa-com-ia | ||
| title: Criar mapa usando IA | ||
| sidebar_label: Criar mapa usando IA | ||
| sidebar_position: 7 | ||
| description: Fluxo prático para pedir, implementar, integrar e validar um mapa criado com assistência de IA no CORO SOLTO. | ||
| --- | ||
|
|
||
| # Criar mapa usando IA | ||
|
|
||
| IA acelera modelagem procedural, texturas, integração e testes, mas não decide sozinha se | ||
| o mapa é jogável. Neste projeto, um mapa só está pronto quando o jogo real abre, os dois | ||
| times conseguem navegar, obstáculos têm colisão, armas são alcançáveis e uma captura foi | ||
| olhada por uma pessoa. | ||
|
|
||
| Este guia complementa a página **Como colaborar**. A página de | ||
| colaboração documenta o formato e as réguas vigentes; aqui o foco é **como conduzir um | ||
| agente de IA sem deixar contrato, gameplay ou documentação para trás**. | ||
|
|
||
| ## Antes de pedir código | ||
|
|
||
| Comece com uma ficha curta. Quanto mais concreta ela for, menos o agente preencherá lacunas | ||
| com decisões genéricas. | ||
|
|
||
| | Decisão | O que informar | | ||
| |---|---| | ||
| | Identidade | id em `snake_case`, nome exibido, tema e categoria do menu | | ||
| | Modo | se abre em rounds ou CTF; `ctfMode` define apenas o padrão | | ||
| | Espaço | limites aproximados, interior/exterior e níveis de altura | | ||
| | Rotas | rota principal, dois flancos e pontos de reencontro | | ||
| | Cobertura | objetos baixos, paredes, edifícios e linhas de tiro que devem ser quebradas | | ||
| | Spawns | lados dos times, proteção inicial e direção em que olham | | ||
| | Objetivos | posições e nomes das bandeiras quando houver CTF | | ||
| | Arsenal | quantidade e distribuição; nunca reduza armas existentes para “limpar” a cena | | ||
| | Arte | materiais, clima, referências visuais e elementos proibidos | | ||
|
|
||
| Não peça apenas “faça um mapa bonito”. Diga qual decisão o jogador toma nos primeiros | ||
| segundos, onde acontece combate curto e onde uma arma de longo alcance pode dominar. A IA | ||
| precisa de uma intenção de gameplay, não só de uma lista de objetos. | ||
|
|
||
| ## Prompt reutilizável | ||
|
|
||
| Copie, preencha os colchetes e envie ao agente a partir da raiz do repositório: | ||
|
|
||
| ```text | ||
| Crie a branch map/[id]. Leia AGENTS.md, docs/LICOES.md e tools/eval/ARCH.md antes de editar. | ||
|
|
||
| Crie o mapa [nome], id [id], com tema [tema]. Ele deve abrir em [rounds/CTF], ter limites | ||
| aproximados de [x × z], três rotas jogáveis ([descreva]) e estes marcos visuais: [lista]. | ||
| Spawns: [descrição]. Coberturas e obstáculos: [lista]. Arsenal: [distribuição]. | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [leve] Prompt presume scripts que podem mudar O prompt reutilizável cita scripts específicos como node tools/eval/map-contrato-check.mjs e npm run eval:mapid. Se esses scripts mudam de nome ou são removidos, o prompt fica desatualizado para humanos e agentes que o copiam. Tip conserto: Deixe o prompt apontar para seções de documentação que listam os comandos atuais (ex. 'Veja tools/eval/README.md para os comandos de validação'), em vez de encaixar nomes de script hardcoded.
|
||
|
|
||
| Direção visual: [materiais, clima, paleta e referências]. Não use pessoa real, gore, | ||
| marca/obra protegida, CDN ou dependência de runtime. Prefira texturas procedurais ou assets | ||
| com licença compatível e procedência registrada. | ||
|
|
||
| Antes de implementar, escreva uma régua específica que reprove sem o mapa e declare a | ||
| mutação que prova que ela morde. Depois implemente sem duplicar sistemas existentes. | ||
|
|
||
| Integre o mapa em public/js/maps.js, public/js/main.js, src/data/jogo.ts e gere | ||
| public/img/map-previews/[id].jpg sem HUD, personagens ou armas visíveis. | ||
|
|
||
| Valide contrato, colisões, spawns, waypoints, pickups, bots, preview, console, check:fast e | ||
| build. Gere uma captura, olhe a imagem e descreva o que foi realmente verificado. | ||
| Não faça commit até eu pedir. | ||
| ``` | ||
|
|
||
| Adapte o prompt em vez de acrescentar correções contraditórias no fim. Se o conceito mudou, | ||
| reescreva a ficha e diga explicitamente o que substitui a decisão anterior. | ||
|
|
||
| ## Fluxo recomendado | ||
|
|
||
| ### 1. Leia as regras e proteja o trabalho atual | ||
|
|
||
| Antes de trocar de branch, rode `git status -sb`. Não leve mudanças de outro mapa para a | ||
| branch nova. Leia `AGENTS.md`, as lições 1–5 de `docs/LICOES.md` e a frente **MAPAS / MUNDO** | ||
| em `tools/eval/ARCH.md`. | ||
|
|
||
| Mapas vivem em `public/`, que usa módulos ES servidos diretamente. Não adicione bundler, | ||
| CDN ou dependência de runtime. | ||
|
|
||
| ### 2. Faça a régua nascer vermelha | ||
|
|
||
| Crie `tools/eval/<id>-check.mjs` com invariantes próprias do mapa. Exemplos: | ||
|
|
||
| - marcos obrigatórios existem e têm nomes estáveis; | ||
| - cada obstáculo visível possui um colisor coerente; | ||
| - os dois times alcançam o centro e os objetivos; | ||
| - rampas, escadas ou passagens são atravessáveis pelo movimento real; | ||
| - materiais visíveis possuem textura e UV válido; | ||
| - o preview esconde HUD, personagens e armas. | ||
|
|
||
| Rode a régua antes da implementação e registre a falha. Para cada cláusula, crie um | ||
| `--mutante=<nome>` que remova ou corrompa exatamente a propriedade medida. Uma régua que | ||
| continua verde com o mutante não protege o mapa. | ||
|
|
||
| ### 3. Implemente o contrato do mapa | ||
|
|
||
| Crie `public/js/map_<id>.js` exportando uma função `build*`. Use um mapa registrado de | ||
| tamanho parecido como referência; não copie um arquivo inteiro para depois renomear. | ||
|
|
||
| O objeto devolvido pelo builder precisa respeitar o contrato consumido pelo jogo: | ||
|
|
||
| ```text | ||
| root · colliders · occluders · spawns · bounds | ||
| waypoints { nodes, adj } · nearestWaypoint · findPath | ||
| ``` | ||
|
|
||
| Campos como `groundHeightAt`, `slowAt`, `pickups`, `ctfPoints`, `sun` e `hemi` entram | ||
| conforme o mapa precisa. Antes de registrá-lo, confira o contrato: | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [grave] Régua específica sem mandar rodar mutantes O guia fala em criar mutantes que provam que a régua morde, mas não inclui um comando como node tools/eval/-check.mjs --mutante= no checklist de validação. Um agente pode criar a régua e achar que cumpriu sem ter testado a mutação. Tip conserto: Acrescente no checklist do passo 6: 'Rode cada mutante e confirme reprova antes de registrar o mapa.'
|
||
|
|
||
| ```bash | ||
| node tools/eval/map-contrato-check.mjs --extra=public/js/map_<id>.js | ||
| ``` | ||
|
|
||
| Use colisores simples separados da malha visual. Neste projeto eles são AABBs; uma parede | ||
| rotacionada pode parecer correta e ainda permitir que o jogador deslize pelo canto. Teste a | ||
| travessia pelo movimento real, não apenas contando objetos no array `colliders`. | ||
|
|
||
| ### 4. Integre todas as superfícies públicas | ||
|
|
||
| Um arquivo em `public/js/` não aparece sozinho no jogo. Atualize no mesmo PR: | ||
|
|
||
| | Arquivo | Responsabilidade | | ||
| |---|---| | ||
| | `public/js/maps.js` | import, nome exibido, builder e `ctfMode` quando aplicável | | ||
| | `public/js/main.js` | descrição (`MAP_DESC`) e categoria (`MAP_CAT`) do seletor | | ||
| | `src/data/jogo.ts` | entrada de `MAPAS` usada pelas páginas públicas e metadados | | ||
| | `public/img/map-previews/<id>.jpg` | cartaz quadrado, nomeado exatamente como o id | | ||
|
|
||
| Não edite contagens geradas em README ou documentação. Rode `npm run docs` depois do | ||
| registro para que `tools/gen-docs.mjs` atualize os blocos derivados do código. | ||
|
|
||
| ### 5. Gere e confira o preview | ||
|
|
||
| Com o servidor em execução, capture vários ângulos: | ||
|
|
||
| ```bash | ||
| npm run dev | ||
| node tools/eval/g2ui-map-previews.mjs <id> -1.2,-0.6,0,0.6,1.2 | ||
| ``` | ||
|
|
||
| As imagens de calibração ficam em `/tmp/gauntlet/g2ui-maps/`. Escolha uma que explique o | ||
| layout e grave o JPG versionado: | ||
|
|
||
| ```bash | ||
| node tools/eval/g2ui-map-previews.mjs --write <id>=/tmp/gauntlet/g2ui-maps/<arquivo>.png | ||
| ``` | ||
|
|
||
| Olhe o JPG final. Confirme textura, enquadramento, leitura das rotas e ausência de HUD, | ||
| personagens, viewmodel e armas. O script detectar zero erros de console não prova que a | ||
| imagem ficou boa. | ||
|
|
||
| ### 6. Valide gameplay e integração | ||
|
|
||
| Depois de registrar o mapa, rode: | ||
|
|
||
| ```bash | ||
| npm run eval:mapcontrato | ||
| node tools/eval/map-check.mjs <id> | ||
| node tools/eval/pickup-check.mjs | ||
| node tools/eval/botsim.mjs 60 <id> | ||
| npm run eval:mapid | ||
| npm run docs | ||
| npm run arch | ||
| npm run check:fast | ||
| npm run build | ||
| ``` | ||
|
|
||
| Abra também `http://localhost:4321/?debug=1&auto=P,mst&map=<id>` e exercite pelo menos: | ||
|
|
||
| 1. nascimento dos dois times; | ||
| 2. rota principal e os dois flancos; | ||
| 3. colisão dos obstáculos e acesso a desníveis; | ||
| 4. coleta de armas; | ||
| 5. uma luta com bots; | ||
| 6. objetivos de CTF, quando existirem; | ||
| 7. console sem `pageerror` ou erro de recurso do mapa. | ||
|
|
||
| Se a geometria de paredes mudou em um mapa que usa grafite assado, rode também | ||
| `npm run grafite`; `eval:grafitelayout` reprova quando o layout fica velho. | ||
|
|
||
| ## Como revisar a resposta da IA | ||
|
|
||
| Faça uma segunda leitura como adversário, sem reutilizar a justificativa do agente: | ||
|
|
||
| - remova um colisor e confirme que a régua reprova; | ||
| - parta uma ligação do grafo e confirme que os bots perdem a rota; | ||
| - retire o preview e confirme que `eval:mapid` detecta o cartaz ausente; | ||
| - reorganize waypoints e confirme que caminhos usam índices, não coordenadas por acaso; | ||
| - caminhe contra cada obstáculo importante; | ||
| - procure pontos abertos demais, gargalos sem saída e linhas de sniper entre spawns; | ||
| - confira a captura em 3:2, proporção usada na revisão visual do projeto. | ||
|
|
||
| Peça correção quando o jogo contradizer o relatório, mesmo com o portão verde. A regra da | ||
| casa é simples: se uma pessoa encontra o defeito e a régua não encontra, falta uma | ||
| invariante — não uma explicação melhor. | ||
|
|
||
| ## Definition of done | ||
|
|
||
| O mapa criado com IA está pronto para PR quando: | ||
|
|
||
| - possui identidade visual própria sem material protegido ou pessoa real; | ||
| - aparece no seletor, na categoria correta e nas páginas públicas; | ||
| - tem preview revisado visualmente; | ||
| - spawns, rotas, colisões, pickups e objetivos funcionam no jogo real; | ||
| - bots navegam sem ficar presos; | ||
| - a régua específica passa e seus mutantes reprovam; | ||
| - `check:fast` e `build` passam; | ||
| - o PR marca risco alto e pede revisão humana de gameplay. | ||
|
|
||
| IA pode produzir o primeiro rascunho em minutos. O que transforma esse rascunho em mapa do | ||
| jogo é a combinação de contrato explícito, mutação, captura olhada e teste jogável. | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[leve] Renumeração manual de tabela
A tabela foi renumerada na mão na seção 3 (10→11, 11→12, 12→13). Se alguém adicionar outra entrada no futuro, tem que lembrar de propagar o número. O projeto tem histórico de esse tipo de número à mão desatualizar.
Tip
conserto: Rode npm run docs para gerar o número automaticamente, ou aceite que esta tabela de navegação não precisa ser numerada sequencialmente.