CEM Animation
para Blockbench
Aprende a animar mobs de Minecraft con resource packs. Catálogo completo de animaciones, graficador en tiempo real, simulador 3D y traductor de Blockbench a CEM.
¿Qué es CEM Animation?
Imagina que quieres que el cerdo de Minecraft mueva las patas al caminar de una forma distinta a la del juego. Con CEM puedes reemplazar esas animaciones usando solo un archivo de texto, sin programar ni modificar el juego.
Analogía: una partitura musical
CEM es como darle a un músico instrucciones escritas en lugar de tocar para él. En lugar de mostrarle el movimiento directamente, le escribes: "cuando el personaje dé un paso, mueve el brazo 45 grados hacia adelante". El juego lee esas instrucciones y las ejecuta en tiempo real, cada fotograma.
Define cómo se ve: dónde están los huesos, qué texturas usar, cómo están conectadas las piezas.
Fórmulas matemáticas dentro del .jem. Cada fórmula le dice a un hueso cuánto rotar o moverse en cada momento.
Sin estos mods el juego ignora tus archivos. EMF es el recomendado — funciona mejor y es compatible con Sodium e Iris.
Minecraft te dice cosas como "el personaje camina a velocidad 0.7". Usas esos datos en tus fórmulas.
Jerarquía del modelo
Analogía: muñecas rusas
Los huesos están anidados como muñecas rusas. Si mueves el cuerpo (la muñeca grande), los brazos y piernas (las pequeñas dentro) se mueven con él. Esto se llama jerarquía padre-hijo.
Cada mob tiene huesos predefinidos que no puedes eliminar. Solo puedes agregar piezas dentro de esos huesos.
body.¿Por qué "this.rx": 0?
El cerdo tiene su body rotado -90° en X para que las patas apunten hacia abajo. Si metes tu personaje dentro heredará esa rotación. La línea "this.rx": 0 cancela esa rotación y te da un espacio limpio.
Estructura del archivo
Analogía: una receta de cocina
Cada línea dice: "para el ingrediente X (hueso), haz esta operación (eje) con esta cantidad (expresión)". El juego sigue la receta cada fotograma.
torad(90) si piensas en grados.Variables disponibles
Las variables son datos que el juego te entrega en tiempo real. Piénsalas como sensores: el juego mide cosas del mundo y tú usas esas mediciones.
| Variable | En palabras simples | Rango |
|---|---|---|
| limb_swing | Un contador que avanza mientras el mob camina. Como un reloj de pasos — nunca retrocede. Es la "X" de tu ciclo de caminata. | 0 → ∞ |
| limb_speed | Qué tan rápido va el mob. 0 = parado, 1 = sprint. Multiplícalo en tu fórmula para que la animación se apague al detenerse. | 0 → 1 |
| age | Cuánto tiempo lleva vivo el mob en ticks. Nunca para, incluso parado. Perfecto para "respira aunque esté quieto". | 0 → ∞ |
| head_pitch | Hacia dónde mira la cabeza verticalmente. Negativo = arriba, positivo = abajo. Ya en radianes. | -π/2 → π/2 |
| head_yaw | Hacia dónde mira horizontalmente. Para que la cabeza siga la vista del jugador. | -π → π |
| time | Tiempo total del juego. Blockbench lo entiende, a diferencia de limb_swing. Úsalo para previsualizar en el editor. | 0 → 27719 |
| Variable | En palabras simples | Rango |
|---|---|---|
| hurt_time | Al recibir daño empieza en 10 y baja a 0. Úsala para que el personaje reaccione al golpe visualmente. | 10 → 0 |
| swing_progress | Progreso del ataque: 0 = inicio del golpe, 1 = fin del golpe. | 0 → 1 |
| death_time | Sube de 0 a 20 mientras el mob muere. Para animaciones de muerte. | 0 → 20 |
| health | Vida actual en puntos. Combínala con max_health para porcentaje. | 0 → max |
| anger_time | Tiempo de agresividad restante (ticks). Para mobs hostiles. | 0 → 780 |
Solo tienen dos valores: true (sí) o false (no). En fórmulas, true=1 y false=0. Se usan principalmente con if().
| Variable | ¿Cuándo es verdadera? |
|---|---|
| is_on_ground | El mob está tocando el suelo |
| is_in_water | El mob está en agua |
| is_in_lava | El mob está en lava |
| is_burning | El mob está en llamas |
| is_hurt | Está recibiendo daño ahora mismo |
| is_sneaking | Está agachado |
| is_sprinting | Está corriendo a velocidad máxima |
| is_aggressive | Tiene un objetivo y va a atacar |
| is_child | Es la versión bebé |
| is_tamed | Está domesticado |
| is_alive | Está vivo (útil en animaciones de muerte) |
| is_ridden | Alguien lo está montando |
Los ejes son como articulaciones
Cada hueso puede moverse en tres ejes de rotación. Cuál es "adelante/atrás" depende de cómo esté orientado tu hueso en Blockbench. Si no sabes cuál usar, prueba los tres.
| Eje | Tipo | Descripción |
|---|---|---|
| rx | rotación | Rotar en X. En modelos estándar: adelante/atrás. |
| ry | rotación | Rotar en Y. En modelos estándar: izquierda/derecha. |
| rz | rotación | Rotar en Z. Inclinarse de lado. Puede ser adelante/atrás si el hueso está rotado 90°. |
| tx / ty / tz | posición | Desplazar el hueso sin rotarlo. |
| sx / sy / sz | escala | Cambiar el tamaño. 1=normal, 2=doble, 0.5=mitad. |
| visible | bool | Mostrar/ocultar el hueso y sus hijos. |
Funciones matemáticas
Las funciones son herramientas de cocina
sin() es como un batidor que convierte un número en una ola suave. clamp() es como un tope físico. No necesitas saber matemáticas — solo qué hace cada herramienta.
Convierte cualquier número en una ola entre -1 y 1. Base de todos los movimientos cíclicos: caminata, respiración, sway.
Igual que sin() pero empieza en 1 en lugar de 0. Siempre 90° desfasada. Útil para movimiento circular combinado con sin().
Evita que un valor salga de rango. Como poner un tope físico para que una articulación no gire de más.
Mezcla suavemente entre a y b. t=0 devuelve a, t=1 devuelve b, t=0.5 devuelve el punto medio. Para transiciones.
Si c es verdadero devuelve a, si no devuelve b. Como un interruptor: "si está en agua, anima así; si no, asá".
Quita el signo negativo. Convierte la ola de sin() en jorobas siempre positivas. Útil para rebotes.
Convierte grados a radianes. torad(90)=1.5708. Úsalo cuando piensas en grados pero el sistema necesita radianes.
x elevado a la potencia y. pow(t,2) crea ease-in (arranca despacio y acelera). Útil para movimientos naturales.
floor redondea hacia abajo, ceil hacia arriba. Para efectos escalonados o discretos.
Devuelve el menor o mayor de dos valores. Para limitar sin usar clamp, o para combinar dos condiciones.
La raíz cuadrada. Crea curvas de desaceleración (ease-out). sqrt(t) desacelera al llegar al final.
Número aleatorio entre 0 y 1. Con seed siempre devuelve el mismo resultado. Para variaciones únicas por entidad.
Catálogo de animaciones
Haz clic en una animación para cargarla en el graficador. Cubre rotación, traslación, escala y condicionales.
Graficador de expresiones
Escribe cualquier expresión y mira la curva en tiempo real. El eje X es limb_swing, el eje Y es el resultado en radianes.
Comparar dos expresiones
Simulador 3D de hueso
Visualiza cómo rota y se mueve un hueso en 3D con tus expresiones CEM. Arrastra para orbitar, rueda para zoom. Selecciona el pivote para cambiar el punto de articulación — desde la base hasta cualquier cara. Activa Trayectoria para ver el recorrido de la punta del hueso, y Fantasma para comparar con la pose en reposo.
Simulador de caminata
Edita las expresiones y ve el resultado en tiempo real sobre una figura articulada.
Simulador de caminata 3D
Humanoid completo de 13 piezas con expresiones CEM editables por cada hueso. Arrastra para rotar la vista, usa la rueda para zoom. Selecciona una pieza en la lista para editar sus expresiones rx/ry/rz.
Simulador de cubo 3D
Activa transformaciones con los checkboxes y mira cómo se apilan sobre el cubo en tiempo real. Cambia el pivote para entender cómo cambia el centro de rotación — desde el centro del cubo hasta cualquiera de sus 6 caras, o el origen del mundo para simular una órbita. Arrastra para orbitar, rueda para zoom.
Traductor bbmodel → CEM
Pega tu .bbmodel completo y el traductor detecta automáticamente todas las animaciones. Asigna una categoría a cada hueso (caminata, idle, nadar…) y ajusta la velocidad de 0 a 200% para afinar el resultado antes de copiar.
Receta: Caminata
Receta: Idle y respiración
Receta: Daño y ataque
Receta: Condicionales
if() es un interruptor
Permite comportamientos distintos según el estado del mob. Puede encadenarse para múltiples condiciones.
Referencia de ángulos
| Grados | Radianes | torad() | Uso típico |
|---|---|---|---|
| 5° | 0.087 | torad(5) | Micro idle, respiración |
| 15° | 0.262 | torad(15) | Sway de cabeza |
| 30° | 0.524 | torad(30) | Pierna al saltar |
| 45° | 0.785 | torad(45) | Caminata normal |
| 60° | 1.047 | torad(60) | Caminata enérgica |
| 90° | 1.571 | torad(90) | Brazo horizontal |
| 180° | 3.142 | pi | Fase opuesta completa |