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

IDCuándo actúa
emoteCuando hay un emote activo (máxima prioridad, salvo muerte).
extended_posePoses avanzadas: vuelo normal, vuelo con elytra, caída libre con/sin elytra.
simple_posePoses básicas: idle, caminar, correr, agacharse, nadar, dormir, montar.
idleFallback: se usa cuando ningún otro controlador devuelve una animación.
arm_right / arm_leftPose de cada brazo individualmente. Opera en primera y tercera persona.
arms / fp_armsRenderizado 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 BlockbenchCuándo se usa
pose.standingDe pie, sin moverse.
pose.idleIdle genérico.
pose.crouchingAgachado (Shift).
pose.swimmingNadando.
pose.flyingVolando (modo creativo o vuelo habilitado).
pose.fall_flyingPlaneando con elytra.
pose.sleepingDurmiendo en una cama.
pose.sittingMontando (caballo, minecart, bote…).
pose.spin_attackAtaque giratorio con tridente.
pose.dyingAnimación de muerte.

extended_pose

Versión más detallada de simple_pose. Distingue variantes dentro de un mismo estado.

Nombre en BlockbenchCuándo se usa
extended_pose.standing.idleDe pie, sin moverse.
extended_pose.standing.walkCaminando.
extended_pose.standing.sprintCorriendo (sprint).
extended_pose.crouching.idleAgachado, sin moverse.
extended_pose.crouching.walkCaminando agachado.
extended_pose.flying.idleVolando, sin moverse.
extended_pose.flying.walkVolando y moviéndose.
extended_pose.flying.sprintVolando a máxima velocidad.
extended_pose.fall_flyingPlaneando con elytra.
extended_pose.swimmingNadando.
extended_pose.sleepingDurmiendo.
extended_pose.sittingMontando un vehículo.
extended_pose.dyingAnimación de muerte.

arm_right y arm_left

3ª persona1ª personaCuándo se usa
arm_right.holdfp.arm_right.holdSosteniendo cualquier objeto (por defecto).
arm_right.emptyfp.arm_right.emptyMano vacía.
arm_right.swingfp.arm_right.swingAtacando / golpeando.
arm_right.eatfp.arm_right.eatComiendo.
arm_right.bowfp.arm_right.bowTensando un arco.
arm_right.crossbowfp.arm_right.crossbowCargando una ballesta.
arm_right.tridentfp.arm_right.tridentLanzando 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.

QueryTipoDescripción
query.limb_swingfloatCiclo de balanceo de extremidades (0 .. 2π)
query.limb_swing_amountfloatIntensidad del balanceo: 0 = parado, 1 = corriendo
query.ground_speedfloatVelocidad horizontal normalizada
query.pitchfloatInclinación de la cabeza (−1..1, 0 = recto)
query.yawfloatRotación horizontal de la vista
query.body_yawfloatRotación del cuerpo respecto a la vista
query.left_hand_swingfloatSwing del brazo izquierdo al atacar (0..1)
query.right_hand_swingfloatSwing del brazo derecho al atacar (0..1)
query.is_flyingboolEl jugador está en modo vuelo
query.can_flyboolEl jugador tiene permiso de vuelo activo
query.death_timefloatTicks desde la muerte (0 si vivo)
query.use_actionenumAcción del ítem activo: BOW, TRIDENT, SPYGLASS, EAT
query.use_timefloatTicks que lleva usando el ítem activo
query.use_time_leftfloatTicks restantes de uso (ej: carga del arco)

Ejemplo: transición con query personalizada

javascript
// 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.

CampoTipoDescripción
show_equipmentbooleanMuestra la armadura equipada sobre el modelo en primera persona.
model.showbooleanMuestra el cuerpo completo del modelo en primera persona (torso, piernas…).
model.offset.x/y/znumberDesplazamiento del modelo respecto al punto de cámara.
custom_arms.showbooleanMuestra los brazos del modelo en primera persona en lugar de los brazos vanilla.
custom_arms.custom_render_itemsbooleanRenderiza los ítems sostenidos a través de las manos del modelo.
custom_arms.both_handsbooleanRenderiza ambas manos (derecha e izquierda).
yaml
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