Sistema de animaciones
Animorph usa un sistema de controladores de animación por capas. Cada controlador decide qué animación reproducir según el estado del jugador.
Controladores disponibles
| ID | Cuándo actúa |
|---|---|
emote | Cuando hay un emote activo (máxima prioridad, salvo muerte). |
extended_pose | Poses avanzadas: vuelo normal, vuelo con elytra, caída libre con/sin elytra. |
simple_pose | Poses básicas: idle, caminar, correr, agacharse, nadar, dormir, montar. |
idle | Fallback: se usa cuando ningún otro controlador devuelve una animación. |
arm_right / arm_left | Pose de cada brazo individualmente. Opera en primera y tercera persona. |
arms / fp_arms | Renderizado combinado de brazos en primera persona. |
bb_* | Controladores de animador BlockBench (máquina de estados). El nombre coincide con el del fichero JSON sin extensión. |
Los controladores se evalúan en orden de prioridad. El primero que tenga una animación activa gana para ese ciclo de renderizado.
Nombres de animaciones requeridos por cada controlador
Cada controlador busca animaciones con nombres exactos y predefinidos en tu archivo .animation.json.
Si la animación no existe con ese nombre exacto, el controlador simplemente no la reproduce (no da error).
simple_pose
| Nombre en Blockbench | Cuándo se usa |
|---|---|
pose.standing | De pie, sin moverse. |
pose.idle | Idle genérico. |
pose.crouching | Agachado (Shift). |
pose.swimming | Nadando. |
pose.flying | Volando (modo creativo o vuelo habilitado). |
pose.fall_flying | Planeando con elytra. |
pose.sleeping | Durmiendo en una cama. |
pose.sitting | Montando (caballo, minecart, bote…). |
pose.spin_attack | Ataque giratorio con tridente. |
pose.dying | Animación de muerte. |
extended_pose
Versión más detallada de simple_pose. Distingue variantes dentro de un mismo estado.
| Nombre en Blockbench | Cuándo se usa |
|---|---|
extended_pose.standing.idle | De pie, sin moverse. |
extended_pose.standing.walk | Caminando. |
extended_pose.standing.sprint | Corriendo (sprint). |
extended_pose.crouching.idle | Agachado, sin moverse. |
extended_pose.crouching.walk | Caminando agachado. |
extended_pose.flying.idle | Volando, sin moverse. |
extended_pose.flying.walk | Volando y moviéndose. |
extended_pose.flying.sprint | Volando a máxima velocidad. |
extended_pose.fall_flying | Planeando con elytra. |
extended_pose.swimming | Nadando. |
extended_pose.sleeping | Durmiendo. |
extended_pose.sitting | Montando un vehículo. |
extended_pose.dying | Animación de muerte. |
arm_right y arm_left
| 3ª persona | 1ª persona | Cuándo se usa |
|---|---|---|
arm_right.hold | fp.arm_right.hold | Sosteniendo cualquier objeto (por defecto). |
arm_right.empty | fp.arm_right.empty | Mano vacía. |
arm_right.swing | fp.arm_right.swing | Atacando / golpeando. |
arm_right.eat | fp.arm_right.eat | Comiendo. |
arm_right.bow | fp.arm_right.bow | Tensando un arco. |
arm_right.crossbow | fp.arm_right.crossbow | Cargando una ballesta. |
arm_right.trident | fp.arm_right.trident | Lanzando tridente. |
Para el brazo izquierdo, sustituye arm_right por arm_left en todos los nombres.
Queries Molang
Animorph añade queries personalizadas que puedes usar en condiciones de transición y en la propiedad de peso de las animaciones.
| Query | Tipo | Descripción |
|---|---|---|
query.limb_swing | float | Ciclo de balanceo de extremidades (0 .. 2π) |
query.limb_swing_amount | float | Intensidad del balanceo: 0 = parado, 1 = corriendo |
query.ground_speed | float | Velocidad horizontal normalizada |
query.pitch | float | Inclinación de la cabeza (−1..1, 0 = recto) |
query.yaw | float | Rotación horizontal de la vista |
query.body_yaw | float | Rotación del cuerpo respecto a la vista |
query.left_hand_swing | float | Swing del brazo izquierdo al atacar (0..1) |
query.right_hand_swing | float | Swing del brazo derecho al atacar (0..1) |
query.is_flying | bool | El jugador está en modo vuelo |
query.can_fly | bool | El jugador tiene permiso de vuelo activo |
query.death_time | float | Ticks desde la muerte (0 si vivo) |
query.use_action | enum | Acción del ítem activo: BOW, TRIDENT, SPYGLASS, EAT… |
query.use_time | float | Ticks que lleva usando el ítem activo |
query.use_time_left | float | Ticks restantes de uso (ej: carga del arco) |
Ejemplo: transición con query personalizada
// Jugador volando y moviéndose → transición a vuelo con movimiento
"query.is_flying && query.limb_swing_amount > 0.05"
// Peso de animación de arco ponderado por carga (0 a 1 en ~1 segundo)
"query.use_action == 'BOW' ? math.min(query.use_time / 20.0, 1.0) : 0.0"
// Inclinar cabeza según el pitch del jugador
"query.pitch * -1.0"
// Detectar que el jugador acaba de morir
"query.death_time > 0" Configuración de primera persona
Controla qué se renderiza y cómo se ven los brazos cuando el jugador usa la vista en primera persona.
Toda la configuración va bajo properties.first_person en el YAML del modelo.
| Campo | Tipo | Descripción |
|---|---|---|
show_equipment | boolean | Muestra la armadura equipada sobre el modelo en primera persona. |
model.show | boolean | Muestra el cuerpo completo del modelo en primera persona (torso, piernas…). |
model.offset.x/y/z | number | Desplazamiento del modelo respecto al punto de cámara. |
custom_arms.show | boolean | Muestra los brazos del modelo en primera persona en lugar de los brazos vanilla. |
custom_arms.custom_render_items | boolean | Renderiza los ítems sostenidos a través de las manos del modelo. |
custom_arms.both_hands | boolean | Renderiza ambas manos (derecha e izquierda). |
properties:
first_person:
show_equipment: true
model:
show: true
offset:
x: 0
y: 0
z: 0
custom_arms:
show: true
custom_render_items: true
both_hands: true