¿Qué hace Sprites de fuego en 8 bits con fuego re-hecho?
Requiere movimientos ya renderizados por el skill fire-sprites: este skill trabaja a partir de las capas separadas de cuerpo y fuego en moves/NAME/, no de video plano. $KIT es la raíz del kit (dos niveles hacia arriba desde este archivo); py es $KIT/.venv/bin/python; ejecutar desde el directorio del proyecto.
py $KIT/tools/retro.py # cada movimiento renderizado
py $KIT/tools/retro.py "breath_*" # o solo algunos (nombres o patrones glob)
abrir retro.html
Por qué se reconstruye el fuego y no se reduce
Reducir un sprite de fuego y ajustarlo a una paleta da un blob blanco plano: en cámara, la llama está recortada a blanco, por lo que no hay color dentro de ella para conservar. En su lugar:
- Cuerpo: reducido de tamaño, borde alfa duro, mapeado a una paleta fija de 8 colores de piel y cuero (ponderada por luminosidad para que sobreviva el sombreado), con un contorno oscuro de 1 píxel.
- Fuego: la forma real de la llama se mantiene fotograma a fotograma, pero su color se redibuja. La profundidad de un píxel dentro de la llama selecciona un paso en una rampa de calor de 7 colores, rojo oscuro en el borde, pasando por naranja y amarillo hasta un centro blanco, con un tramado ordenado de 4x4 entre pasos. La profundidad se mide en relación al grosor de esa llama, por lo que una llama de espada fina aún obtiene un centro caliente y una nube de aliento enorme obtiene un gradiente ancho. Un pequeño pase de apertura elimina líneas delgadas de pared que se filtraron en la capa de fuego.
retro.html muestra cada movimiento de cuatro maneras: fuego reconstruido y cuantización directa, a alturas de cuerpo de 64 px y 40 px. La versión directa está ahí para que el malabarista pueda ver la diferencia; el fuego reconstruido es el que se debe usar. La animación corre "on twos" (la mitad de la velocidad de fotogramas maestra), lo que da sensación retro y reduce a la mitad el tamaño del conjunto de sprites.
Salidas: retro/NOMBRE_B64.png, NOMBRE_B40.png (reconstruido), NOMBRE_A64.png, NOMBRE_A40.png (directo), y retro/atlas.json con cuadrícula de fotogramas, fps y punto de anclaje del pie. Dibújalos con escalado nearest-neighbour solo a múltiplos enteros (image-rendering: pixelated en CSS).
Qué decirle al malabarista
Mira el resultado antes de describirlo. Hallazgos típicos:
- Las nubes de aliento se ven muy bien; el redibujado les da estructura que al metraje le falta.
- Las nubes que tocaron el borde del fotograma, una ventana o una pared quemada salen cuadradas a esta escala.
- El cuerpo se vuelve casi blanco en el pico de un aliento y se mapea a azul marino oscuro en fotogramas de silueta, porque la paleta sigue la luz del metraje. Ofrece mantener los tonos de piel estables si eso le molesta (aún no implementado).
Cambiar el aspecto
Edita las constantes al inicio de tools/retro.py: BODY_PAL (paleta del cuerpo, más oscuro primero), FIRE_RAMP (borde a centro), los tamaños en for B in (64, 40), y la curva de profundidad en la línea heat =. Mantén la paleta fija en todos los movimientos de un malabarista para que las animaciones coincidan entre sí.