Você é um agente de desenvolvimento trabalhando no meu jogo. Quero adicionar um Modo Melhorado: uma camada de melhorias de visual, sensação de combate (game feel), som, interface e fluidez que liga e desliga com uma tecla, sem mudar as regras do jogo. Você não sabe qual é a minha stack. Pode ser Unity, Godot, Unreal, GameMaker, Defold, Bevy, MonoGame, LÖVE, Pygame, Phaser, PixiJS, Three.js, uma engine própria ou outra coisa. Descubra lendo o projeto antes de propor qualquer mudança. Esta lista veio de melhorias aplicadas e medidas num ARPG 2D top-down em pixel art. Trate-a como um cardápio de técnicas, não como receita: para cada item, encontre o equivalente na minha stack (recurso nativo, biblioteca conhecida ou código próprio), adapte ao meu gênero e à minha perspectiva (2D ou 3D, lateral, isométrica, primeira pessoa...) e descarte o que não fizer sentido. Quando a stack não tiver o recurso, proponha a alternativa mais barata (ex.: luz falsa com sprites aditivos, sombra oval no chão) e diga a limitação. As armadilhas descritas aconteceram de verdade; evite repeti-las. Referência de custo: no jogo de referência (1080p, placa de vídeo de entrada atual), o pacote visual completo custou cerca de 1 ms por quadro. Use só como ordem de grandeza. 1. Regras de trabalho Ponto de volta antes de tudo. Faça um commit ou branch antes de alterar qualquer coisa. Se o projeto não usa controle de versão, me peça para fazer uma cópia. Não mude as regras do jogo (dano, vida, velocidade, IA, economia, tabelas de drop) sem me perguntar. O foco é visual, som, sensação, interface e fluidez. Tudo atrás de um interruptor. Cada melhoria visual fica dentro do Modo Melhorado, ligado por tecla (ex.: F8) e por argumento de inicialização (ex.: --enhanced). Com o modo desligado, o jogo fica exatamente como era: é a referência para comparar antes e depois. Código separado. Coloque as melhorias numa pasta própria, um arquivo por área, ligados por um gerenciador. Nos sistemas existentes, adicione só ganchos (eventos, sinais ou callbacks), sem reescrevê-los. Pergunte antes de: trocar o pipeline de render ou o espaço de cor, instalar dependências, baixar ou comprar assets, mudar configurações globais do projeto. Use só assets com licença clara (ex.: CC0 da Kenney) e guarde o arquivo de licença junto. Teste no executável de release (build, export ou versão publicada), não só no editor ou no modo de depuração. Meça o desempenho antes e depois de cada bloco de melhorias. Acessibilidade: opção para desligar tremor de tela, clarões e câmera lenta, e volumes separados. 2. Diagnóstico (sua primeira resposta, sem alterar nada) Leia o projeto e me diga: Engine ou framework e versão, linguagem, como o jogo roda (executável, navegador, celular, console) e os arquivos que comprovam (ex.: project.godot, ProjectSettings/, *.uproject, *.yyp, Cargo.toml, package.json, main.lua, requirements.txt). Render: 2D ou 3D, perspectiva, estilo de arte, resolução interna e escala (pixel perfect?), se já existe luz e sombra dinâmica, shaders próprios e pós-processamento, e se um shader consegue ler a imagem da tela. Como fases e dados são montados: cenas, editor de mapas (Tiled, LDtk...), JSON ou código. Câmera, entrada (teclado, mouse, controle), física e movimento do personagem, áudio (mixer, filtros, reverb) e sistema de interface. Itens: todos têm ícone? Como o loot chega ao jogador (no chão, no corpo, direto na bolsa)? Desempenho atual no executável: FPS médio, 1% low e pior quadro num trajeto fixo. Em seguida, proponha um plano: quais itens do cardápio se aplicam, como ficam no meu jogo, com qual recurso da minha stack, o custo estimado e a ordem por impacto. Espere minha aprovação antes de implementar. 3. Estrutura do Modo Melhorado Um gerenciador com ligar e desligar por módulo: luz, sombras, distorção, clima, combate, áudio, câmera e interface. Ganchos por eventos nos sistemas do jogo: projétil criado, impacto, inimigo criado, ataque iniciado, inimigo morto, dano recebido, nível subiu, item coletado. Flags de diagnóstico por módulo (desliga só aquele) para medir o custo de cada parte. Um aviso curto na tela ao ligar e desligar (ajuda em vídeo). Ao desligar, cada módulo restaura os valores originais (guarde-os ao ligar). Melhorias de jogabilidade e interface que eu aprovar como permanentes (loot no chão, menus) podem ficar fora do interruptor, com uma opção nas Configurações para voltar ao comportamento original. 4. Mapa de equivalentes (exemplos) Use como ponto de partida para achar o recurso certo na minha stack: Ler a imagem da tela num shader (distorção, onda de choque): screen texture, render target ou framebuffer da engine, ou desenhar a cena numa textura e aplicar o shader nela. Partículas: o sistema nativo ou um pool próprio de quads com vida, velocidade e cor. Câmera lenta e pausa: escala de tempo global (time scale, time dilation) ou multiplicar o delta do jogo, deixando a interface no tempo real. Áudio com filtro e reverb: buses ou mixer da engine, FMOD ou Wwise, Web Audio (BiquadFilterNode, ConvolverNode). Tremor de câmera: deslocamento com ruído que decai (impulso), somado à posição da câmera. Texto nítido: fonte vetorial ou SDF em vez de bitmap ampliado. 5. Cardápio de melhorias O nome técnico de cada efeito vem entre parênteses, para facilitar a busca na documentação da stack. 5.1 Luz com relevo (normal maps) 2D: gere normal maps a partir dos próprios sprites com um script: altura = luminância × alfa, suavize uns 2 px, aplique o filtro Sobel e limite a inclinação. Ligue nas luzes 2D que usam normal map (ou num shader de iluminação próprio). A luz das tochas passa a revelar o relevo de pedras, paredes e personagens. 3D: normal maps e height maps nos materiais, oclusão de ambiente. Armadilhas: um shader próprio sem o caminho de normais fica preto quando a luz usa normal map; em atlas e tilesets, o filtro não pode ler o tile vizinho: prenda a amostragem dentro de cada célula; normal map tira luz da cena (fator N·L): compense a intensidade e compare a luminância média com o modo desligado; inclinação forte demais vira granulado e escurece tudo. 5.2 Sombras 2D: oclusores de luz. Personagens animados: uma forma simples, como um oval do tamanho do corpo. Objetos parados (árvores, casas, móveis): um oclusor por objeto, com o contorno convexo dos pixels opacos, calculado uma vez. 3D: sombras das luzes locais, com distância ajustada ao tamanho da cena. Armadilhas: um oclusor por tile custou ~1,3 ms por quadro; um por objeto, ~0,2 ms; uma luz dentro do próprio oclusor fica presa (velas em cima de mesa, luz que acompanha o personagem): tire a sombra dessa luz ou não ponha oclusor nesse objeto; silhueta exata por quadro de animação travou ~2 s numa troca de personagem. 5.3 Atmosfera Feixes de luz em janelas e frestas (luz volumétrica ou formas aditivas). Distorção (precisa ler a tela): ar tremendo sobre o fogo (heat haze), onda de choque em explosões (shockwave distortion), ondulação de água. Clima: chuva: partículas esticadas, um respingo quando cada gota termina e ondulações iluminadas nas poças; relâmpago: um pulso curto na luz global e o trovão 1–2,5 s depois; brasas sobre fogueiras, poeira iluminada perto das tochas, folhas. Água viva: brilhos animados em coordenadas de mundo (em pixel art, alinhados à grade de pixels). Marcas no chão (decals): sangue, queimado, flechas cravadas. Use um pool com limite (ex.: 160) e faça as marcas sumirem depois de 20–30 s. Leitura da cena: telhados e copas ficam transparentes quando o jogador passa atrás (top-down e isométrico). Em 3D: silhueta do personagem atrás de paredes. Pós-processamento: bloom com limiar alto, vinheta, grão de filme sutil, gradação de cor (split toning). Armadilhas: contraste no pós-processo de uma cena escura deixou tudo ~30% mais escuro: prefira exposição levemente positiva com bloom e meça a luminância; a interface precisa ficar numa camada acima da distorção; ler a tela só com o Modo Melhorado ligado; partículas que seguem a câmera precisam crescer com o campo de visão (em tela cheia, a área visível pode ser 4× maior); clarões de tela inteira precisam de uma opção para desligar (fotossensibilidade). 5.4 Sensação de combate (game feel) Rastro em projéteis (trail) e arco no golpe corpo a corpo (slash arc, smear). Faíscas e sangue saindo na direção do golpe (hit sparks, blood splatter); clarão de luz e partículas subindo na morte. Pausa curta no acerto (hitstop), tremor de câmera por impulso (screen shake), pulso de aberração cromática e distorção de lente no impacto, vinheta avermelhada ao tomar dano (damage vignette). Golpe final: câmera lenta curta (slow motion, ~30% da velocidade por 0,3–0,6 s, voltando suave) na última morte da área ou em chefe; impact frame (1–3 quadros de alto contraste) só em chefe; onda de choque. Números de dano nítidos (floating damage numbers): contorno, cor por tipo e um salto maior no crítico. Vibração do controle proporcional ao golpe (haptic feedback). Armadilhas: câmera lenta frequente parece travamento: reserve para momentos especiais; com o jogo pausado pela escala de tempo, nenhum efeito pode restaurar a escala sozinho (a câmera lenta terminando "despausava" o jogo); timers e animações da interface precisam usar tempo real, senão congelam com o jogo pausado. 5.5 Som Efeitos curtos CC0 (ex.: Kenney Impact Sounds, RPG Audio, Interface Sounds) com 2–5 variações por evento, variação de altura e volume (pitch randomization), panorama pela posição na tela, limite de vozes e intervalo mínimo por som. Ambiente: passos por tipo de chão contados pela distância andada; reverb por área (caverna × rua); o resto abaixa nos golpes fortes (ducking); música por área com transição suave. Interface: passar o mouse (com intervalo mínimo, para não metralhar ao varrer uma grade), clicar, confirmar, erro, abrir e fechar painel, virar página. Ponha o som num componente comum de botão, em vez de configurar botão por botão. Trilhas: normalize a loudness (no projeto de referência elas vieram a −34 LUFS; ficaram em −20 LUFS a música e −30 LUFS o ambiente) e use streaming para arquivos longos. Volumes separados (geral, música, efeitos, interface) salvos nas preferências. Testes automáticos rodam mudos. Sem arquivo de chuva? Dá para sintetizar: ruído rosa filtrado com estalos de gotas. Armadilha: dois sistemas tocando o mesmo evento (moedas na coleta, abrir painel) dobraram o som; centralize cada evento num só lugar. 5.6 Câmera Zona morta, amortecimento, um leve deslocamento para onde o jogador mira (lookahead), jogador e chefe enquadrados juntos, limite nas bordas do mapa, tremor por impulso. Armadilhas: em pixel art com escala inteira, o zoom precisa acompanhar a resolução atual (a tela cheia ficou com zoom 2×); em teleporte, avise a câmera, senão ela atravessa o mapa suavizando. 5.7 Controles Controle completo: um analógico move, o outro mira, gatilhos atacam, Start abre as Configurações, Select abre o inventário, vibração. Quando o mouse se mexe, ele volta a mandar na mira. Se a engine tiver dois sistemas de entrada, mantenha o antigo funcionando. 5.8 Colisão e movimento (confira mesmo fora do Modo Melhorado) Teste automático: encoste o personagem na diagonal em centenas de faces de parede do mapa e meça quanto ele desliza; teste também a multidão (inimigos cercando o jogador) e um teleporte atravessado andando. Movimento cinemático no estilo "move and slide": desencaixe o corpo de qualquer sobreposição pelo eixo de menor penetração; faça uma varredura da forma (shape cast) até o contato, com margem maior que a tolerância da física; deslize o restante ao longo da superfície, até 4 vezes. Armadilha: funções de deslize pensadas para jogo de plataforma (com "chão" e ângulo máximo) travam em top-down. No jogo de referência, 16,7% das faces prendiam o personagem; com o movimento próprio, 0%. Depuração: uma tecla (ex.: F4) que desenha as caixas de colisão, com cor diferente para corpos sobrepostos. 5.9 Loot e itens Todo item tem ícone. Se faltar, gere no mesmo estilo dos existentes (no projeto de referência, um script de pixel art desenhou os 7 materiais sem ícone e 3 montes de gold: poucas moedas, monte e bolsa, escolhidos pela quantia). Loot no chão: ao morrer, o inimigo solta o gold e cada pilha de item com o próprio ícone. Eles saltam em arco (girando e crescendo), quicam, caem espalhados em volta do corpo (ângulo áureo, sem entrar em paredes) e ficam com um brilho no chão na cor da raridade. Raro e épico ganham um feixe de luz vertical e uma luz pequena. A queda tem som pelo material (moeda, metal, madeira, tecido) e um sino no épico. Nome no chão na cor da raridade quando o jogador chega perto, com o mouse em cima ou segurando ALT. Nomes vizinhos não se sobrepõem: cada um tenta a própria altura, depois uma linha acima, uma abaixo, e assim por diante. Coleta por ímã (passando perto; o gold com raio maior) ou por clique. O que não cabe na capacidade de peso fica no chão, marcado "(pesado)", com um aviso. Aviso de coleta na lateral da tela: ícone, nome na cor da raridade e quantidade; coletas seguidas do mesmo item somam na mesma linha. Largar item da bolsa no chão (botão direito; Shift larga uma unidade). O item largado só volta pelo ímã depois que o jogador se afasta. O loot some depois de um tempo, piscando nos últimos segundos. Uma opção nas Configurações volta ao comportamento original. Armadilhas: em alguns pipelines a cor do sprite não chega a um shader aditivo próprio: o brilho saiu branco em vez da cor da raridade. Confira a cor numa captura; brilho forte demais vira um "prato branco" embaixo do item: deixe o comum quase invisível e reserve a força para o épico; ícone reduzido pela metade sem filtro perde o contorno: reduza com a média de cada bloco 2×2 ponderada pelo alfa. 5.10 Inventário e tooltips Casas da bolsa com fundo e borda na cor da raridade (comum sem moldura, épico pulsando) e um marcador de item novo que some ao passar o mouse ou fechar a bolsa. Botão de ordenar (raridade, tipo, nome), lembrado nas preferências. Tooltip rico: ícone, nome na cor da raridade, tipo e slot, descrição, atributos em verde, requisitos em vermelho quando não atendidos (com o valor atual do jogador), comparação com o item equipado no mesmo slot (+/−), peso, valor e a dica de uso. Equipar: som pelo material (metal, couro, tecido), o ícone voa da bolsa até o slot e uma mensagem mostra a principal mudança de atributo. Gold contando até o valor novo; barra de capacidade animada, vermelha perto do limite. Painéis entram com fade e um leve deslize, com som de abrir e fechar. Armadilha: a bolsa era redesenhada 20 vezes por segundo (a cada mudança de stamina) mesmo fechada. Marque como "suja" e redesenhe só ao abrir. 5.11 Menus Menu principal vivo: música começando abafada e abrindo em ~3 s (filtro passa-baixa), uma cama de ambiente (vento), poeira no ar e fagulhas, luz de tocha tremendo, névoa rasteira, um reflexo passando no título, brilho de hover que acende e apaga suave, onda de energia na cor da classe ao trocar de personagem, barras de atributo animadas, som próprio por classe, tique ao digitar o nome. Transições: entrada com fade do preto e um leve zoom; ao começar o jogo, fanfarra, a música sai e a tela escurece; o jogo entra com fade. Configurações (ESC, Start ou botão): pausa o jogo e reúne volumes por canal (com um tique a cada 10% ao arrastar), tela cheia, VSync, o Modo Melhorado, as opções de loot e um "Sair" com confirmação. O ESC fecha primeiro o painel aberto por cima. 5.12 Fluidez Compile a versão de release otimizada (AOT, IL2CPP, LTO ou o equivalente da stack) numa pasta separada de cada variante. Pré-aquecimento de shaders e pipelines (cache de PSO ou equivalente): no projeto de referência, o engasgo no início caiu de ~380 ms para ~110 ms. O primeiro uso de um efeito não pode travar: crie ou aqueça partículas, sons e shaders no carregamento. Use pools para efeitos e evite alocar memória a cada quadro. Um shader usado só por código precisa entrar no executável (material referenciado ou lista de "sempre incluir"). A remoção automática de variantes deixou a build rosa ou escura. 6. Medição e testes (obrigatório) Benchmark: trajeto fixo (ex.: 30 s, sempre o mesmo caminho) com VSync desligado. Meça FPS médio, 1% low e pior quadro, nos dois modos, em janela e em tela cheia. Rode mais de uma vez: a variação entre rodadas pode passar de 10%. Capturas A/B: nos mesmos pontos do mapa, uma imagem com o modo desligado e outra com ele ligado. Efeitos rápidos são capturados por evento (no instante do impacto), não por tempo fixo. Cenários automáticos que rodam no executável e geram capturas e um log: combate; loot (matar, soltar, coletar, abrir a bolsa e o tooltip); menus (entrada, troca de classe, saída); colisão. Use tempo real nas esperas (o menu pausa o jogo) e rode sem som e sem gravar o save nem as preferências. Regressão: o modo desligado continua idêntico ao original e o log não tem erros. 7. Entrega Um documento curto com: o que foi aplicado e com qual recurso da stack; como ligar (teclas e flags); o custo em FPS de cada parte; o que ficou de fora e por quê; as licenças dos assets usados. Executáveis testados com o modo desligado e ligado, e as capturas de antes e depois.