# RoguePixel — Animações das 12 armas

Entrega para aprovação visual produzida com a skill `imagegen` e geração nativa, usando os sprites finais aprovados como referência principal. Os doze PNGs em `final/` foram preservados; seus hashes foram conferidos.

[Visualizador interativo local](weapon_animation_preview.html) · [Prancha de disparos e golpes](../assets/previews/weapon_animation_board_attacks_3x.gif) · [Prancha de recargas e preparo](../assets/previews/weapon_animation_board_utility_3x.gif) · [Manifesto](../assets/weapons/weapons_manifest.json)

## Resumo por arma

**40 estados, 206 frames PNG**: dez idles estáticos de um frame, dois idles animados e 28 ações. Todos os estados possuem frames individuais, spritesheet transparente, ampliação 4×, GIF e metadados. Foram selecionadas 27 fontes nativas; os pares de golpe/recuperação compartilham uma sequência contínua de doze poses, separada em dois estados de seis frames.

Cada nome da tabela abre o GIF com todos os estados daquela arma. Esses GIFs e as pranchas reiniciam as ações somente para demonstração. Os GIFs de cada animação e seus metadados mantêm as ações únicas sem loop.

| Arma / GIF completo | Estados, frames e FPS sugerido |
|---|---|
| [Pistola de Bits](../assets/weapons/bit_pistol/animations/all_animations_4x.gif) | `idle`: 1f / 1fps (estático) · `fire`: 6f / 14fps · `reload`: 8f / 10fps |
| [Teclado Bélico](../assets/weapons/combat_keyboard/animations/all_animations_4x.gif) | `idle`: 1f / 1fps (estático) · `attack`: 6f / 12fps · `recover`: 6f / 12fps |
| [Lançador de Pendrives](../assets/weapons/usb_launcher/animations/all_animations_4x.gif) | `idle`: 1f / 1fps (estático) · `fire`: 6f / 12fps · `reload`: 8f / 10fps |
| [Martelo de Debug](../assets/weapons/debug_hammer/animations/all_animations_4x.gif) | `idle`: 1f / 1fps (estático) · `attack`: 6f / 11fps · `recover`: 6f / 11fps |
| [Escopeta DDoS](../assets/weapons/ddos_shotgun/animations/all_animations_4x.gif) | `idle`: 1f / 1fps (estático) · `fire`: 6f / 12fps · `reload`: 8f / 9fps |
| [Laser de Fibra Óptica](../assets/weapons/fiber_optic_laser/animations/all_animations_4x.gif) | `idle`: 1f / 1fps (estático) · `charge`: 8f / 11fps · `fire`: 6f / 14fps · `cooldown`: 6f / 9fps |
| [Metralhadora de Pacotes](../assets/weapons/packet_machine_gun/animations/all_animations_4x.gif) | `idle`: 1f / 1fps (estático) · `fire_loop`: 6f / 15fps (loop) · `reload`: 8f / 10fps |
| [Injetor SQL](../assets/weapons/sql_injector/animations/all_animations_4x.gif) | `idle`: 1f / 1fps (estático) · `fire`: 6f / 13fps · `reload`: 8f / 10fps |
| [Canhão de Kernel](../assets/weapons/kernel_cannon/animations/all_animations_4x.gif) | `idle`: 1f / 1fps (estático) · `charge`: 8f / 10fps · `fire`: 6f / 11fps · `cooldown`: 6f / 8fps |
| [Foice de Malware](../assets/weapons/malware_scythe/animations/all_animations_4x.gif) | `idle`: 1f / 1fps (estático) · `attack`: 6f / 12fps · `recover`: 6f / 12fps |
| [Compilador Supremo](../assets/weapons/supreme_compiler/animations/all_animations_4x.gif) | `idle`: 4f / 6fps (loop) · `charge`: 8f / 10fps · `fire`: 6f / 12fps · `cooldown`: 6f / 8fps |
| [Formatador 9000](../assets/weapons/formatter_9000/animations/all_animations_4x.gif) | `idle`: 6f / 7fps (loop) · `charge`: 8f / 10fps · `fire`: 6f / 11fps · `cooldown`: 6f / 8fps |

## Inventário completo

| Arma | Pasta da animação | Frames | FPS | Loop |
|---|---|---:|---:|---|
| Pistola de Bits | [`idle`](../assets/weapons/bit_pistol/animations/idle/) | 1 | 1 | Estático |
| Pistola de Bits | [`fire`](../assets/weapons/bit_pistol/animations/fire/) | 6 | 14 | Não |
| Pistola de Bits | [`reload`](../assets/weapons/bit_pistol/animations/reload/) | 8 | 10 | Não |
| Teclado Bélico | [`idle`](../assets/weapons/combat_keyboard/animations/idle/) | 1 | 1 | Estático |
| Teclado Bélico | [`attack`](../assets/weapons/combat_keyboard/animations/attack/) | 6 | 12 | Não |
| Teclado Bélico | [`recover`](../assets/weapons/combat_keyboard/animations/recover/) | 6 | 12 | Não |
| Lançador de Pendrives | [`idle`](../assets/weapons/usb_launcher/animations/idle/) | 1 | 1 | Estático |
| Lançador de Pendrives | [`fire`](../assets/weapons/usb_launcher/animations/fire/) | 6 | 12 | Não |
| Lançador de Pendrives | [`reload`](../assets/weapons/usb_launcher/animations/reload/) | 8 | 10 | Não |
| Martelo de Debug | [`idle`](../assets/weapons/debug_hammer/animations/idle/) | 1 | 1 | Estático |
| Martelo de Debug | [`attack`](../assets/weapons/debug_hammer/animations/attack/) | 6 | 11 | Não |
| Martelo de Debug | [`recover`](../assets/weapons/debug_hammer/animations/recover/) | 6 | 11 | Não |
| Escopeta DDoS | [`idle`](../assets/weapons/ddos_shotgun/animations/idle/) | 1 | 1 | Estático |
| Escopeta DDoS | [`fire`](../assets/weapons/ddos_shotgun/animations/fire/) | 6 | 12 | Não |
| Escopeta DDoS | [`reload`](../assets/weapons/ddos_shotgun/animations/reload/) | 8 | 9 | Não |
| Laser de Fibra Óptica | [`idle`](../assets/weapons/fiber_optic_laser/animations/idle/) | 1 | 1 | Estático |
| Laser de Fibra Óptica | [`charge`](../assets/weapons/fiber_optic_laser/animations/charge/) | 8 | 11 | Não |
| Laser de Fibra Óptica | [`fire`](../assets/weapons/fiber_optic_laser/animations/fire/) | 6 | 14 | Não |
| Laser de Fibra Óptica | [`cooldown`](../assets/weapons/fiber_optic_laser/animations/cooldown/) | 6 | 9 | Não |
| Metralhadora de Pacotes | [`idle`](../assets/weapons/packet_machine_gun/animations/idle/) | 1 | 1 | Estático |
| Metralhadora de Pacotes | [`fire_loop`](../assets/weapons/packet_machine_gun/animations/fire_loop/) | 6 | 15 | Sim |
| Metralhadora de Pacotes | [`reload`](../assets/weapons/packet_machine_gun/animations/reload/) | 8 | 10 | Não |
| Injetor SQL | [`idle`](../assets/weapons/sql_injector/animations/idle/) | 1 | 1 | Estático |
| Injetor SQL | [`fire`](../assets/weapons/sql_injector/animations/fire/) | 6 | 13 | Não |
| Injetor SQL | [`reload`](../assets/weapons/sql_injector/animations/reload/) | 8 | 10 | Não |
| Canhão de Kernel | [`idle`](../assets/weapons/kernel_cannon/animations/idle/) | 1 | 1 | Estático |
| Canhão de Kernel | [`charge`](../assets/weapons/kernel_cannon/animations/charge/) | 8 | 10 | Não |
| Canhão de Kernel | [`fire`](../assets/weapons/kernel_cannon/animations/fire/) | 6 | 11 | Não |
| Canhão de Kernel | [`cooldown`](../assets/weapons/kernel_cannon/animations/cooldown/) | 6 | 8 | Não |
| Foice de Malware | [`idle`](../assets/weapons/malware_scythe/animations/idle/) | 1 | 1 | Estático |
| Foice de Malware | [`attack`](../assets/weapons/malware_scythe/animations/attack/) | 6 | 12 | Não |
| Foice de Malware | [`recover`](../assets/weapons/malware_scythe/animations/recover/) | 6 | 12 | Não |
| Compilador Supremo | [`idle`](../assets/weapons/supreme_compiler/animations/idle/) | 4 | 6 | Sim |
| Compilador Supremo | [`charge`](../assets/weapons/supreme_compiler/animations/charge/) | 8 | 10 | Não |
| Compilador Supremo | [`fire`](../assets/weapons/supreme_compiler/animations/fire/) | 6 | 12 | Não |
| Compilador Supremo | [`cooldown`](../assets/weapons/supreme_compiler/animations/cooldown/) | 6 | 8 | Não |
| Formatador 9000 | [`idle`](../assets/weapons/formatter_9000/animations/idle/) | 6 | 7 | Sim |
| Formatador 9000 | [`charge`](../assets/weapons/formatter_9000/animations/charge/) | 8 | 10 | Não |
| Formatador 9000 | [`fire`](../assets/weapons/formatter_9000/animations/fire/) | 6 | 11 | Não |
| Formatador 9000 | [`cooldown`](../assets/weapons/formatter_9000/animations/cooldown/) | 6 | 8 | Não |

## Arquivos e ordem

```text
assets/weapons/<id>/animations/
  <animacao>/
    frames/frame_00.png ...
    spritesheet.png
    spritesheet_4x.png
    preview_4x.gif
    metadata.json
  all_animations_4x.gif
  _references/approved_128x128.png
  _references/approved_128x128_4x.png
  _sources/<acao>_source_ai.png
  _sources/<acao>_source_ai_v2.png      # quando houve revisão
  _sources/<fonte>.json               # prompt e origem nativa
```

Leia as spritesheets da esquerda para a direita e depois na próxima linha. Seis frames usam grade 3×2; oito, 4×2; quatro, 2×2; idle estático, 1×1. Os PNGs de animação têm **128×128 pixels** e os GIFs individuais **512×512**, ampliação exata 4× nearest-neighbor. O canvas maior acomoda arcos e mecanismos, conservando o corpo no tamanho do sprite aprovado de 64×64; não amplia a arma. As pranchas usam 3×, sempre na mesma escala.

Os dez idles estáticos são cópias exatas dos pixels aprovados com margem e alinhamento. Não são anunciados como loops animados. Os demais estados têm hashes de frame distintos dentro de cada sequência.

## Empunhadura, disparo e orientação

Todos os estados usam ponto de empunhadura **(64,64)** no canvas de 128×128. Origem no canto superior esquerdo, X cresce para a direita e Y para baixo. A primeira coluna numérica abaixo mostra o ponto escolhido no PNG aprovado de 64×64. Boca e contato são referências da pose neutra, convertidas para o canvas de animação.

| Arma | Empunhadura no PNG 64×64 | Boca ou contato no canvas 128×128 | Ângulo base |
|---|---|---|---:|
| Pistola de Bits | (40, 42) | (41, 51) boca | -150.52° |
| Teclado Bélico | (33, 47) | (62, 40) contato | -94.76° |
| Lançador de Pendrives | (42, 44) | (35, 55) boca | -162.76° |
| Martelo de Debug | (35, 46) | (53, 41) contato | -115.56° |
| Escopeta DDoS | (44, 39) | (28, 55) boca | -165.96° |
| Laser de Fibra Óptica | (43, 38) | (28, 60) boca | -173.66° |
| Metralhadora de Pacotes | (45, 41) | (31, 51) boca | -158.50° |
| Injetor SQL | (43, 42) | (28, 53) boca | -163.01° |
| Canhão de Kernel | (46, 44) | (28, 45) boca | -152.18° |
| Foice de Malware | (47, 48) | (31, 37) contato | -140.71° |
| Compilador Supremo | (46, 40) | (26, 57) boca | -169.56° |
| Formatador 9000 | (46, 42) | (27, 52) boca | -162.03° |

O campo `axis` dos metadados contém o vetor unitário da empunhadura até a boca (ou ponto de contato nas três armas corpo a corpo); `axis_degrees` contém seu ângulo. A orientação é única, baseada na perspectiva aprovada. Para o trabalho futuro, considere a sequência inteira em relação a esse eixo, preservando seu pivô. Não foram duplicadas oito direções nem implementada rotação na engine.

A escala é uniforme em cada sequência. Nas armas de fogo, o registro parte da primeira pose e mantém a transformação da folha. Nas três armas corpo a corpo, o cabo foi registrado por pose a partir do detalhe do terminal, com conferência visual, para colocá-lo no mesmo ponto sem alterar a escala; as anotações constam em `source_grip_annotations`. Esse alinhamento apenas posiciona poses já desenhadas por IA. Não gera movimento, não gira a imagem estática e não redesenha os equipamentos por código.

## Escolhas e limites visuais

- Pistola: ferrolho e módulo digital com recuo e recarga.
- Teclado: arco de golpe redesenhado em perspectiva, teclas pressionando e retorno contínuo.
- Pendrives: trilhos, suporte e dispositivos presos ao carregador; nenhuma munição independente.
- Martelo: arco com preparação, faces em perspectiva e atividade do painel holográfico.
- Escopeta: três bocais articulados, bomba e canais de dados.
- Fibra: luz viajando nas fibras, foco da lente e resfriamento.
- Metralhadora: ferrolho cíclico, alimentação conectada, LEDs e magazine com portas de rede.
- Injetor: êmbolo, cápsulas e agulha ligada ao equipamento.
- Kernel: presilhas, núcleo contido, abertura e fechamento mecânico.
- Foice: arco amplo, lâmina e articulações redesenhadas; sem rastro de corte.
- Compilador: três câmaras com atividade de processamento, compilação e descarga interna.
- Formatador: pratos com fases de reflexão diferentes, braço de leitura e íris de emissão.

O `fire` do laser mostra a ativação da lente e das fibras; **não contém o feixe externo**. O mesmo vale para descargas, pendrives e pacotes: esta entrega contém somente a arma animada. Projéteis, explosões, impactos e efeitos separados aguardam outra etapa.

Os pontos `muzzle_neutral` são referências estáticas da pose neutra, não trajetórias de socket por frame. Os mecanismos podem recuar em torno deles; ajuste fino de eventos e saída de projéteis pertence à integração futura. A rasterização do alinhamento pode produzir diferença de um pixel. Não foi realizada validação em gameplay ou Godot.

## Validação e avaliação

[Inventário em JSON](../assets/previews/weapon_animation_inventory.json) · [Validação técnica](../assets/previews/weapon_animation_validation.json) · [Integridade dos sprites aprovados](../assets/previews/weapon_animation_reference_integrity.json) · [Prompts e fontes selecionadas](../assets/weapons/weapon_animation_prompts.json)

Foram conferidos os 40 estados e 206 PNGs: dimensões uniformes, transparência binária, paleta exata do sprite correspondente, margem, igualdade entre frames e spritesheet, ampliações 4× e quantidade de frames nos GIFs individuais. A exportação rejeita frames vazios ou duplicados em sequências animadas. As fontes selecionadas foram copiadas integralmente da saída nativa.

A revisão visual comparou as doze folhas de conferência aos PNGs aprovados, revisou os três arcos e removeu fundos/halos indevidos das fontes de recarga e idle. Os loops de processamento, discos e ferrolho foram ordenados como ciclos, sem repetir o primeiro frame no fim. Os demais estados param no último frame. A aprovação artística permanece com o usuário.

O visualizador abre localmente, sem servidor, e permite selecionar os 40 estados, alterar zoom/fundo/velocidade, pausar, avançar um frame e exibir os pontos. Ele é somente uma ferramenta de avaliação visual.

Nenhum gameplay, integração Godot, projétil, impacto, mapa, nova arma ou efeito separado foi criado.

