Roblox: recriar o que está em um vídeo de referência
O padrão do usuário é "exatamente como no vídeo". Eles rejeitam efeitos ou mecânicas inventados, animação travada e floreios que não estão no clipe. Tudo aqui mantém você ancorado na referência e verificando contra ela — não contra sua memória.
Ferramentas: Roblox Studio MCP (execute_luau, search_asset, insert_asset, upload_image, screen_capture, start_stop_play, user_keyboard_input, user_mouse_input, get_console_output, multi_edit), Blender MCP (execute_blender_code — extração de quadros e criação de VFX), PowerShell/Bash.
0. Regras básicas
- Reproduza apenas o que o vídeo mostra. Ambíguo? Olhe mais quadros; ainda não claro? Pergunte — não preencha lacunas com suas próprias ideias.
- Texturas/imagens: não desenhe as suas próprias. Use a Creator Store primeiro. Se nada estiver próximo, crie o asset no Blender a partir da referência (§4) e informe ao usuário que você fez isso.
- O acionador padrão é um pressionamento de tecla (pergunte qual, se não especificado).
- Sem floreios não solicitados (giros, cambalhotas de desenho animado). O usuário os odiou explicitamente.
- Copie mecânicas, sensação e efeitos — não marcas, nomes, arte de UI ou assets roubados de outro jogo, e não clone um jogo existente inteiro. Se for solicitado a fazer um jogo idêntico a outro, recrie as mecânicas/efeitos específicos mostrados e diga isso.
1. Extrair e estudar os quadros
- Renderize quadros através do Blender (ffmpeg geralmente está ausente): envie
scripts/extract_frames.pyparaexecute_blender_codecomVIDEO/OUTconfigurados. Ele usa uma cena descartável e não altera o .blend do usuário. No Windows, mantenhaOUTcurto (MAX_PATH). scripts/contact_sheet.ps1 -Dir <OUT>→ folhas 4×4 rotuladas. Leia todas as folhas, depois abra quadros individuais em cada corte, impacto, mudança de UI e entrada. Para mecânicas rápidas, useSTEP = 1no momento que você está medindo.- Decida o que você está construindo: VFX/cena cinematográfica, sistema de jogo, ou ambos (a maioria dos movimentos de combate são ambos: um sistema que decide o que acontece + VFX que mostra isso).
- Escreva a especificação antes de construir — é contra o que você verificará depois:
- Folha de batidas (VFX): uma linha por batida com tempo (quadro/fps), câmera, cada efeito (forma, cor, textura, tamanho, vida útil, contagem), pose de cada personagem, pós-processamento.
- Especificação do sistema (mecânicas): entradas, estados e transições, tempos (windup/active/recovery/cooldown em quadros), distâncias e velocidades (medidas contra o corpo R15 de ~5 studs), números mostrados na tela, UI e suas animações, o que outros jogadores veem. Veja
references/systems.md.
2. Inspecionar o lugar
search_game_tree + despejos rápidos de Lighting, StarterPlayer, ReplicatedStorage, ServerScriptService. Reutilize os frameworks existentes do usuário (módulos de combate, remotos, armazenamento de dados, kits de UI) em vez de construir paralelos; corresponda ao estilo de código deles.
3. Assets da Creator Store
search_asset(escopocreator_store,priceFilter: free) com 3–5 frases por elemento. Compare candidatos visualmente:scripts/asset_sheet.ps1constrói uma folha de miniaturas rotuladas para ler ao lado dos quadros de referência.- Um id de asset Decal não é o id da imagem: resolva com
game:GetObjects("rbxassetid://"..id)[1].Texture(Edit datamodel) antes de usar em partículas/GUIs. - Modelos gratuitos frequentemente contêm backdoors. Após inserir um Model, liste todos os
LuaSourceContainer; mantenha apenas o que você precisa e destrua o resto. - Avatares reais como dummies/inimigos:
Players:CreateHumanoidModelFromUserId(Players:GetUserIdFromNameAsync(name))funciona do Edit. Ancora o HRP, coloque os pés no chão, remova scripts exceto Animate.
4. Quando construir VFX no Blender
Padrão: efeitos nativos do Roblox (partículas, feixes, trilhas, partes, GUIs) — baratos, ajustáveis, renderizados ao vivo. Vá para o Blender quando a referência mostrar algo que os nativos não conseguem aproximar bem:
| Referência mostra | Saída do Blender | Para o Roblox via |
|---|---|---|
| crescentes 3D grossos de corte, espirais retorcidas, domos de onda de choque, estacas, fraturas de chão com profundidade | malha com UVs (+ textura de gradiente/ruído) | EditableMesh construído a partir de dados exportados, ou 3D Importer |
| fumaça desenhada à mão/anime, fogo, explosões, rajadas de energia, quadros de impacto | folha de flipbook renderizada (PNG transparente) | upload_image → ParticleEmitter flipbook / ImageLabel |
| texturas complexas (trilhas de ruído, rampas de gradiente, mapas de redemoinho) | PNG renderizado | upload_image → Beam/Trail/Texture |
Leia references/blender_vfx.md para o pipeline (configuração de cena, renderização de flipbook + empacotamento de grade, exportação de malha para Luau, upload localhost, construtor EditableMesh, animação de malhas na linha do tempo).
5. Construir
- VFX / cenas cinematográficas: um ModuleScript de cliente dirigido por uma linha do tempo (eventos, tomadas de câmera, atualizadores por quadro, atrasos de linha do tempo, zonas de warp, pausa) com uma pilha de limpeza, mais corpos com keyframes para lançador e alvo. Copie o esqueleto em
references/engine.md. - Sistemas: servidor-autoritativo — o cliente envia intenção via um RemoteEvent, o servidor valida (cooldown, estado, alcance, limite de taxa) e aplica o resultado, os clientes renderizam feedback. Layout de pastas e receitas por sistema em
references/systems.md. - Ambos: o servidor decide acertos/dano/estado e dispara clientes; cada cliente executa o módulo de VFX. Mantenha os tempos em uma config compartilhada para que mecânicas e visuais permaneçam sincronizados.
6. Animação que parece viva
Poses estáticas parecem "pão". O que funciona:
- Rastros de keyframe, não poses — dezenas de keys por personagem; cada key = pose + substituições + easing dentro dela.
- Cada ataque: antecipação (Quad.In) → ataque (Exponential.Out, 40–70 ms) → excesso (Quad) → assentamento (Sine.InOut). Cada acerto em um alvo: key de recuo + impulso de tremor decrescente.
- Vida aditiva a cada quadro: respiração, deriva de ruído lenta em todas as juntas, tremor de acerto, tremor.
- Dê aos alvos uma performance (sobresalto, recuos, cambaleio, colapso no chão: joelhos, mãos, lado). Sem cambalhotas a menos que o clipe as tenha.
- Corresponda as batidas da história aos cortes do clipe; pergunte sobre ritmo e use zonas
TimeWarppara desacelerar seções.
7. Verificar contra a referência
- Teste de jogo. Linhas do tempo: avance com
PauseAte tire screenshots de cada batida ao lado do quadro de referência correspondente. Sistemas: acione entradas comuser_keyboard_input/user_mouse_input, leia o estado de ambos os datamodelsClienteServer, e meça tempos (os.clock) e distâncias contra a especificação — números, não impressões. - Câmera de depuração em
Enum.RenderPriority.Last.Value; limpe partículas/desative feixes e GUIs enquanto pausado para ver corpos. execute_luauexecuta em sua própria VM:requiredá uma instância de módulo separada — observe o estado do jogo (atributos, ancoragem, CameraType), não campos de módulo.- Termine com uma entrada real, depois confirme limpeza/restauração e
get_console_outputlimpo.
8. Pegadinhas
Leia references/gotchas.md antes de construir — feixes invisíveis de 1 segmento, halos escuros ao redor de luzes, borrão DepthOfField, Expo vs Exponential, transformações de juntas só renderizando quando escritas no PreSimulation, rigs de AnimationConstraint, escala de tamanho de corpo + fixação no chão, profundidade de água de terreno, sobreposições refletidas na água, armadilhas de rede, e mais.
9. Relatório
O que cada batida/mecânica agora faz (com timestamp ou por estado), quais assets foram usados (ids da loja, assets feitos no Blender e seus ids de upload), qualquer coisa que não pôde ser correspondida e por quê, onde os ajustáveis estão (módulos de config, Cutscene.Poses/Tracks, TimeWarp), e um lembrete para salvar o lugar (Ctrl+S).