🔬Avançado

Jazz Scripts e Animações

Domine a criação de Jazz Scripts para controlar animações complexas em interações sociais.

🎯 O Que São Jazz Scripts?

Jazz Scripts definem state machines que controlam animações sincronizadas entre múltiplos atores (Sims, objetos, props). Eles são essenciais para interações sociais complexas.

1️⃣

Estrutura de um Jazz Script

State Machine "SeuMod_Social"
{
    Priority High
    Property BlendMotionAccumulation
    
    // Atores envolvidos
    Actor "x"  // Sim iniciante
    Actor "y"  // Sim alvo
    
    // Parâmetros
    Parameter "IsMirrored" = "no"
    Parameter "x:Age" = "adult"
    
    // Animações
    Assign Actor "a_SeuMod_start.ma"."x" as "x"
    Assign Actor "a_SeuMod_start.ma"."y" as "y"
    Assign Actor "a_SeuMod_loop.ma"."x" as "x"
    Assign Actor "a_SeuMod_loop.ma"."y" as "y"
    Assign Actor "a_SeuMod_stop.ma"."x" as "x"
    Assign Actor "a_SeuMod_stop.ma"."y" as "y"
    
    // Estados
    State "Enter"
    {
        Property Entry
        Transitions to "Loop"
        Play "a_SeuMod_start_x" for "x"
        {
            Flags AtEnd
            Blend In 0.2
        }
        Play "a_SeuMod_start_y" for "y"
        {
            Flags AtEnd
            Blend In 0.2
        }
    }
    
    State "Loop"
    {
        Property Loop
        Transitions to "Exit"
        Play "a_SeuMod_loop_x" for "x"
        {
            Flags AtEnd, LoopAsNeeded
            Blend In 0.2
        }
        Play "a_SeuMod_loop_y" for "y"
        {
            Flags AtEnd, LoopAsNeeded
            Blend In 0.2
        }
    }
    
    State "Exit"
    {
        Property Exit
        Play "a_SeuMod_stop_x" for "x"
        Play "a_SeuMod_stop_y" for "y"
    }
}
2️⃣

State Properties

PropertyDescrição
EntryEstado de entrada (pode ser definido explicitamente)
ExitEstado de saída (finaliza a state machine)
LoopEstado em loop (permanece até receber Next State)
OneShotExecuta uma vez e para
SynchronizedSincroniza atores
JoinEstado de entrada para conversas em grupo
3️⃣

Flags de Animação

Play "animacao_x" for "x"
{
    Flags AtEnd, LoopAsNeeded
    Blend In 0.2
}
FlagDescrição
AtEndPadrão - anima até o fim
LoopAsNeededRepete animação se necessário
InterruptiblePode ser interrompida
ForceBlendForça blend suave
HoldPoseMantém pose final
4️⃣

Usando no Código C#

public override bool Run()
{
    // 1. Entrar na postura social
    Actor.EnterSocializingPosture(Target);
    
    // 2. Iniciar interação social
    if (BeginSocialInteraction(
        new SocialInteractionB.Definition(null, "sua_interacao", false),
        pairedSocial: true,
        doCallOver: false))
    {
        // 3. Configurar State Machine
        EnterStateMachine("SeuMod_Social", "Enter", "x", "y");
        SetActor("x", Actor);
        SetActor("y", Target);
        
        // 4. Animar
        AnimateJoinSims("Friendly");
        
        // 5. Loop até sair
        DoLoop((ExitReason)(-5652481));
        
        // 6. Finalizar
        EndCommodityUpdates(true);
        WaitForSyncComplete();
    }
    
    return true;
}
5️⃣

Convenções de Nomes

Prefixos de Animação

  • a_ - Adulto
  • c_ - Criança
  • t_ - Teen
  • e_ - Elder
  • o_ - Objeto
  • a2o_ - Adulto para Objeto
  • a2a_ - Adulto para Adulto
  • a2c_ - Adulto para Criança

Suffixos de Ator

  • _x - Ator 1 (iniciante)
  • _y - Ator 2 (alvo)
  • _z - Ator 3
  • _prop - Prop/objeto