# RoguePixel — Animações de inimigos comuns e objetos

Animações produzidas a partir dos sprites finais aprovados, com geração artística nativa `imagegen`. Os sprites base e os conceitos aprovados permanecem preservados. Tavast e Windows Update seguem as identidades v2 já incorporadas aos sprites finais.

## Entrega

- 9 inimigos, cada um em quatro direções: sul (`s`), oeste (`w`), norte (`n`) e leste (`e`). Nenhum exige oito direções nesta etapa.
- 4 objetos, sem direções.
- 53 spritesheets, 185 sequências/estados e 950 frames individuais RGBA de 64×64: 912 de inimigos e 38 de objetos.
- 51 imagens-fonte selecionadas da geração nativa. `closed` e `opened` reutilizam diretamente os dois estados aprovados do baú. Bits usa `source_ai_v2.png` nas duas animações; as primeiras versões foram preservadas apenas como histórico, após detectar problemas de fundo/transparência.
- Frames individuais, spritesheet PNG, spritesheet ampliada 4× por nearest-neighbor, GIF 4× por sequência e `metadata.json` em cada pasta.

[Visualizador interativo](enemy_animation_preview.html) · [Prancha animada](../assets/previews/enemy_object_animation_board_4x.gif) · [Manifesto](../assets/previews/enemy_animation_manifest.json) · [Validação técnica](../assets/previews/enemy_animation_validation.json)

O visualizador funciona localmente, sem servidor: permite selecionar animação/direção, pausar, avançar um frame e trocar velocidade, ampliação e fundo. Animações sem loop param no último frame; use reiniciar para revê-las. A prancha mostra movimento frontal dos inimigos, abertura do baú e loops dos demais objetos, com os tempos individuais preservados. Os objetos aparecem a 3× na prancha por espaço; os inimigos a 4×. As prévias individuais são 4×.

## Animações e caminhos

Frames e FPS abaixo são por direção. Os nove inimigos têm quatro sequências em cada animação; objetos têm uma.

| Asset | Animação | Frames | FPS | Loop | Pasta |
|---|---|---:|---:|:---:|---|
| Mouse Descontrolado | `idle` | 4 | 6 | Sim | [mouse/idle](../assets/enemies/mouse/animations/idle/) |
| Mouse Descontrolado | `walk` | 6 | 14 | Sim | [mouse/walk](../assets/enemies/mouse/animations/walk/) |
| Mouse Descontrolado | `hit` | 4 | 12 | Não | [mouse/hit](../assets/enemies/mouse/animations/hit/) |
| Mouse Descontrolado | `death` | 6 | 9 | Não | [mouse/death](../assets/enemies/mouse/animations/death/) |
| Pendrive Infectado | `idle` | 4 | 6 | Sim | [infected_usb/idle](../assets/enemies/infected_usb/animations/idle/) |
| Pendrive Infectado | `walk` | 6 | 12 | Sim | [infected_usb/walk](../assets/enemies/infected_usb/animations/walk/) |
| Pendrive Infectado | `charge` | 6 | 8 | Não | [infected_usb/charge](../assets/enemies/infected_usb/animations/charge/) |
| Pendrive Infectado | `hit` | 4 | 12 | Não | [infected_usb/hit](../assets/enemies/infected_usb/animations/hit/) |
| Pendrive Infectado | `death` | 6 | 12 | Não | [infected_usb/death](../assets/enemies/infected_usb/animations/death/) |
| Vírus Mutante | `idle` | 4 | 6 | Sim | [mutant_virus/idle](../assets/enemies/mutant_virus/animations/idle/) |
| Vírus Mutante | `walk` | 6 | 9 | Sim | [mutant_virus/walk](../assets/enemies/mutant_virus/animations/walk/) |
| Vírus Mutante | `attack` | 6 | 10 | Não | [mutant_virus/attack](../assets/enemies/mutant_virus/animations/attack/) |
| Vírus Mutante | `hit` | 4 | 12 | Não | [mutant_virus/hit](../assets/enemies/mutant_virus/animations/hit/) |
| Vírus Mutante | `death` | 6 | 9 | Não | [mutant_virus/death](../assets/enemies/mutant_virus/animations/death/) |
| Tavast | `idle` | 4 | 6 | Sim | [tavast/idle](../assets/enemies/tavast/animations/idle/) |
| Tavast | `walk` | 6 | 9 | Sim | [tavast/walk](../assets/enemies/tavast/animations/walk/) |
| Tavast | `attack` | 6 | 10 | Não | [tavast/attack](../assets/enemies/tavast/animations/attack/) |
| Tavast | `hit` | 4 | 12 | Não | [tavast/hit](../assets/enemies/tavast/animations/hit/) |
| Tavast | `death` | 6 | 9 | Não | [tavast/death](../assets/enemies/tavast/animations/death/) |
| Teclado Mecânico | `idle` | 4 | 6 | Sim | [mechanical_keyboard/idle](../assets/enemies/mechanical_keyboard/animations/idle/) |
| Teclado Mecânico | `walk` | 6 | 9 | Sim | [mechanical_keyboard/walk](../assets/enemies/mechanical_keyboard/animations/walk/) |
| Teclado Mecânico | `attack` | 6 | 10 | Não | [mechanical_keyboard/attack](../assets/enemies/mechanical_keyboard/animations/attack/) |
| Teclado Mecânico | `hit` | 4 | 12 | Não | [mechanical_keyboard/hit](../assets/enemies/mechanical_keyboard/animations/hit/) |
| Teclado Mecânico | `death` | 6 | 9 | Não | [mechanical_keyboard/death](../assets/enemies/mechanical_keyboard/animations/death/) |
| Cooler Possuído | `idle` | 4 | 6 | Sim | [possessed_cooler/idle](../assets/enemies/possessed_cooler/animations/idle/) |
| Cooler Possuído | `hover` | 6 | 8 | Sim | [possessed_cooler/hover](../assets/enemies/possessed_cooler/animations/hover/) |
| Cooler Possuído | `attack` | 6 | 10 | Não | [possessed_cooler/attack](../assets/enemies/possessed_cooler/animations/attack/) |
| Cooler Possuído | `hit` | 4 | 12 | Não | [possessed_cooler/hit](../assets/enemies/possessed_cooler/animations/hit/) |
| Cooler Possuído | `death` | 6 | 9 | Não | [possessed_cooler/death](../assets/enemies/possessed_cooler/animations/death/) |
| HD Fragmentado | `idle` | 4 | 6 | Sim | [fragmented_hdd/idle](../assets/enemies/fragmented_hdd/animations/idle/) |
| HD Fragmentado | `walk` | 6 | 9 | Sim | [fragmented_hdd/walk](../assets/enemies/fragmented_hdd/animations/walk/) |
| HD Fragmentado | `attack` | 6 | 10 | Não | [fragmented_hdd/attack](../assets/enemies/fragmented_hdd/animations/attack/) |
| HD Fragmentado | `hit` | 4 | 12 | Não | [fragmented_hdd/hit](../assets/enemies/fragmented_hdd/animations/hit/) |
| HD Fragmentado | `death` | 6 | 9 | Não | [fragmented_hdd/death](../assets/enemies/fragmented_hdd/animations/death/) |
| Pop-up Malicioso | `idle` | 4 | 6 | Sim | [malicious_popup/idle](../assets/enemies/malicious_popup/animations/idle/) |
| Pop-up Malicioso | `hover` | 6 | 8 | Sim | [malicious_popup/hover](../assets/enemies/malicious_popup/animations/hover/) |
| Pop-up Malicioso | `attack` | 6 | 10 | Não | [malicious_popup/attack](../assets/enemies/malicious_popup/animations/attack/) |
| Pop-up Malicioso | `hit` | 4 | 12 | Não | [malicious_popup/hit](../assets/enemies/malicious_popup/animations/hit/) |
| Pop-up Malicioso | `death` | 6 | 9 | Não | [malicious_popup/death](../assets/enemies/malicious_popup/animations/death/) |
| Windows Update | `idle` | 4 | 6 | Sim | [windows_update/idle](../assets/enemies/windows_update/animations/idle/) |
| Windows Update | `walk` | 6 | 5 | Sim | [windows_update/walk](../assets/enemies/windows_update/animations/walk/) |
| Windows Update | `attack` | 6 | 10 | Não | [windows_update/attack](../assets/enemies/windows_update/animations/attack/) |
| Windows Update | `hit` | 4 | 12 | Não | [windows_update/hit](../assets/enemies/windows_update/animations/hit/) |
| Windows Update | `death` | 6 | 6 | Não | [windows_update/death](../assets/enemies/windows_update/animations/death/) |
| Baú comum | `closed` | 1 | 1 | Não | [common_chest/closed](../assets/objects/common_chest/animations/closed/) |
| Baú comum | `opening` | 6 | 8 | Não | [common_chest/opening](../assets/objects/common_chest/animations/opening/) |
| Baú comum | `opened` | 1 | 1 | Não | [common_chest/opened](../assets/objects/common_chest/animations/opened/) |
| Bits | `idle_loop` | 4 | 6 | Sim | [bits/idle_loop](../assets/objects/bits/animations/idle_loop/) |
| Bits | `pickup` | 6 | 12 | Não | [bits/pickup](../assets/objects/bits/animations/pickup/) |
| Poção de cura | `idle_loop` | 4 | 6 | Sim | [health_potion/idle_loop](../assets/objects/health_potion/animations/idle_loop/) |
| Poção de cura | `pickup` | 6 | 12 | Não | [health_potion/pickup](../assets/objects/health_potion/animations/pickup/) |
| Arma comum | `idle_loop` | 4 | 6 | Sim | [common_weapon/idle_loop](../assets/objects/common_weapon/animations/idle_loop/) |
| Arma comum | `pickup` | 6 | 12 | Não | [common_weapon/pickup](../assets/objects/common_weapon/animations/pickup/) |

## Organização e leitura dos arquivos

```text
assets/enemies/<id>/animations/<animacao>/
  frames/s/frame_00.png ...
  frames/w/frame_00.png ...
  frames/n/frame_00.png ...
  frames/e/frame_00.png ...
  spritesheet.png
  spritesheet_4x.png
  preview_s_4x.gif ... preview_e_4x.gif
  metadata.json
  source_ai.png
  source_info.json

assets/objects/<id>/animations/<animacao>/
  frames/frame_00.png ...
  spritesheet.png
  spritesheet_4x.png
  preview_4x.gif
  metadata.json
```

Nos inimigos, cada linha da spritesheet corresponde, nesta ordem, a `s`, `w`, `n`, `e`; as colunas avançam no tempo. Em objetos, leia da esquerda para a direita, de cima para baixo. Todos os tiles têm 64×64. `metadata.json` registra dimensões, FPS, loop, contagem, padrão dos caminhos e referência aprovada. Os estados estáticos do baú não têm `source_ai.png`, pois reutilizam os PNGs aprovados.

## Escolhas de movimento

| Asset | Escolhas |
|---|---|
| Mouse Descontrolado | Passos rápidos a 14 FPS, oscilação nervosa do cabo, recuo ao dano e colapso mecânico. Sem ataque adicional. |
| Pendrive Infectado | Sinal vermelho, deslocamento curto e `charge` de preparação para detonação; morte com ruptura contida. |
| Vírus Mutante | Núcleo pulsante, locomoção instável, golpe digital compacto e dissolução em fragmentos. |
| Tavast | Vigilância com lente, varredura laranja no ataque, placa de alerta e identidade FREE mantidas nas vistas frontais. |
| Teclado Mecânico | Teclas e apoios mecânicos em movimento; ataque com tecla projetada e morte com teclas soltas. |
| Cooler Possuído | `hover` substitui `walk`; fases de hélice, impulso de ar no ataque e parada do rotor na morte. |
| HD Fragmentado | Passada pesada, disco aparente, fragmentos orbitando no ataque e caindo na morte. |
| Pop-up Malicioso | `hover` substitui `walk`; oscilação de janela invasiva, abertura agressiva no ataque e fechamento na morte. |
| Windows Update | Passada lenta a 5 FPS, carregamento com 99%, ataque de reinício e desligamento pesado. |
| Baú comum | `closed` e `opened` têm um frame cada. `opening` tem seis; primeiro e último são exatamente os estados aprovados. Sem saque ou novos objetos. |
| Bits | Loop de brilho/rotação e coleta com contração/desaparecimento. |
| Poção de cura | Loop de líquido/luz e coleta opcional incluída. |
| Arma comum | Loop discreto e coleta opcional incluídos. |

Idle e hit usam quatro frames; locomoção, ataque/charge e morte usam seis. Os loops dos objetos usam quatro, abertura/coletas usam seis. Os estados fechado/aberto do baú usam um frame porque são estados estáticos. Nas três coletas, o último frame é intencionalmente transparente. Mortes e ataques não têm loop e conservam o último frame.

## Produção e conferência

Cada animação foi desenhada pela geração nativa usando o sprite aprovado, sua ampliação nearest-neighbor e, nos movimentos dos inimigos, a referência de idle nas quatro direções. Os arquivos `source_ai.png` preservam essas saídas artísticas. [Registro dos prompts](../assets/previews/enemy_animation_prompts.json).

A exportação separa a grade, aplica uma transformação uniforme à sequência inteira, mantém uma margem no tile, fixa alpha em 0/255 e remapeia as cores à paleta do sprite aprovado sem dithering. Uma normalização final elimina arredondamentos de cor da quantização, usando somente cores exatas da referência. Os dois estados aprovados do baú conservam suas próprias paletas. A ampliação usa nearest-neighbor. Esse processamento organiza e exporta a arte gerada; não sintetiza poses ou personagens por código.

A conferência técnica verifica os 950 frames em 64×64, correspondência RGBA entre frames e spritesheets, ampliação exata por blocos de 4×, sequências com variação de frames e ausência de frames vazios fora do final das coletas. A auditoria adicional passou para os 950 frames: alpha binário, bordas transparentes e cores exatas das referências; os 185 GIFs individuais existem e os extremos da abertura do baú coincidem pixel a pixel com os sprites aprovados. As prévias mantêm os FPS definidos nos metadados. [Auditoria dos pixels](../assets/previews/enemy_animation_pixel_audit.json) · [Integridade das 14 referências aprovadas](../assets/previews/enemy_animation_reference_integrity.json). As 51 fontes selecionadas foram copiadas integralmente da saída nativa, com hashes idênticos.

A aprovação artística desta etapa está pendente. Avaliar especialmente a estabilidade de detalhes pequenos entre poses: teclas, fragmentos do HD, circuitos, FREE e 99% ocupam poucos pixels. Vistas de costas ocultam os painéis frontais. Não há animações de bosses ou minibosses, gameplay, mapas ou configuração de engine nesta entrega.

