Body Movement States
MNN strings for common movement patterns. A physical therapist documenting a patient's gait uses the same notation as an avatar controller. The virtual world makes it visible β the string is identical in a clinic log, a game engine, or a cable rig.
@MOV(Idle) @ACT(TrA:1, Ers:1) >> Intercost/DorsRami
@MOV(Walk) @ACT(Glu.Mx:2, Quad.RF:2, Gas:1) >> InfGlu/Fem/Tib
@MOV(Run) @ACT(Glu.Mx:3, Quad.RF:3, HpFl:2, Gas:2) >> InfGlu/Fem/Tib
@MOV(Fly) @ACT(Trp.L:2, Ser:2, TrA:2) >> CNXI/LTh/Intercost @JNT(Bi.Sh:Flex=30,Abd=20)
@MOV(Sit) @ACT(HpFl:2, Ers:1, TrA:1) >> Fem/DorsRami @JNT(Bi.Hip:Flex=90 Bi.Kn:Flex=90)
@MOV(Sit.Floor) @ACT(Pir:2, Ers:1, TrA:1) >> Sci.T/DorsRami @JNT(Bi.Hip:Flex=90,ER=45)
@MOV(Swim) @ACT(Lat:2, Pec.S:2, TrA:2, Obl.E:1) >> ThDors/MedPec
@MOV(Dance) @ACT(Obl.E:2, TrA:1, Glu.Md:1) >> Intercost/SupGlu
Social Interactions & Expressions
Compound strings encoding body, face, and voice together β a complete behavioral state at one moment. Useful anywhere an expression must be precisely reproduced: actor coaching, NPC scripting, clinical expression assessment, or vocal training feedback.
@MOV(Wave) @ACT(Dlt.A:2, Dlt.L:1, Tri:1) >> Axil/Rad @JNT(R.Sh:Flex=100,Abd=60) @FNN(Zyg.Mj:3, Orb.Oc.O:2) >> CNVII/Zyg
@MOV(Idle) @ACT(TrA:1) @FNN(Orb.Or:1, Zyg.Mj:1) >> CNVII @RES(Ch:2, Or:1) @PLC(A) @VOC(Fl) @BR(Sp2)
@MOV(Idle) @ACT(RA.U:2, Obl.E:2) @JNT(Sp.L:Flex=15) @EXPR(Laugh) @FNN(Zyg.Mj:4, Orb.Oc.O:3, Dep.Lab:2) @RES(Ch:3, H:2) @VOC(Fl) @BR(Sp3)
@MOV(Bow) @ACT(Ers:2, RA.U:1) @JNT(Sp.L:Flex=35, Sp.C:Flex=20) @FNN(Zyg.Mj:1, Orb.Or:1) >> CNVII
@MOV(Idle) @ACT(Dia:3, TrA:2, Ers:1) @FNN(Zyg.Mj:2, Orb.Or:2) @RES(H:3, Ch:3, Zy:3, Ma:3) @PLC(F) @VOC(Fl) @BR(Sp5)
@MOV(Dance) @ACT(Obl.E:2, Glu.Md:2) @EXPR(Laugh) @FNN(Zyg.Mj:3, Orb.Oc.O:3) @RES(H:2, Zy:2) @VOC(Hd) @BR(Sp2)
Vehicle States
VMN strings for vehicle physics states. The virtual environment makes them visible, but the strings themselves are platform-neutral β they map directly to the LSL vehicle physics API for Second Life / OpenSim, and could equally drive a simulator or documentation tool.
@VMN(Car) @ATT(Rol=4,Yaw=270) @VEL(Fwd=14) @CTRL(Throt=0.7,Steer=-20) @MODE(Cruise)
llSetVehicleType(VEHICLE_TYPE_CAR); llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <14,0,0>); llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 1.0); llSetVehicleFloatParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, 0.35); llSetVehicleFlags(VEHICLE_FLAG_NO_DEFLECTION_UP); llSetVehicleFlags(VEHICLE_FLAG_LIMIT_ROLL_ONLY);
@VMN(Sea) @ATT(Rol=-12,Yaw=135) @VEL(Fwd=7) @CTRL(Throt=0.4,Rudd=-8) @MODE(Cruise)
llSetVehicleType(VEHICLE_TYPE_BOAT);
llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME,
llEuler2Rot(<0.0, -12.0, 135.0> * DEG_TO_RAD));
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <7,0,0>);
llSetVehicleFloatParam(VEHICLE_BUOYANCY, 1.0);
llSetVehicleFlags(VEHICLE_FLAG_REACT_TO_WIND);@VMN(Air) @ATT(Pit=-3,Rol=0,Yaw=090) @VEL(Fwd=62,Vert=-2) @ALT(m=200) @CTRL(Throt=0.3) @MODE(Approach)
llSetVehicleType(VEHICLE_TYPE_AIRPLANE);
llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME,
llEuler2Rot(<-3.0, 0.0, 90.0> * DEG_TO_RAD));
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <62, 0, -2>);
llSetVehicleFloatParam(VEHICLE_LINEAR_MOTOR_TIMESCALE, 2.4);@VMN(Heli) @ATT(Pit=0,Rol=0,Yaw=000) @VEL(Fwd=0,Vert=0) @ALT(m=80) @CTRL(Throt=0.68,Coll=0.68) @MODE(Hover)
llSetVehicleType(VEHICLE_TYPE_AIRPLANE); llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <0,0,0>); llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.9); llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 0.5); // Custom rotor: llApplyImpulse via rotor script
@VMN(Sub) @ATT(Pit=-6,Yaw=270) @VEL(Fwd=4,Vert=-0.5) @ALT(m=-40) @CTRL(Throt=0.4,Buoy=0.35) @MODE(Cruise)
llSetVehicleType(VEHICLE_TYPE_BOAT);
llSetVehicleFloatParam(VEHICLE_BUOYANCY, 0.35);
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, <4, 0, -0.5>);
llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME,
llEuler2Rot(<-6.0, 0.0, 270.0> * DEG_TO_RAD));@VMN(Multi:Air+Sea) @PROGRESS(0.70) @MODE(Transition:AirToSea) @ATT(Pit=-5,Rol=0,Yaw=090) @VEL(Fwd=38,Vert=-1.5)
float p = 0.70;
llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_EFFICIENCY,
0.5 * (1.0 - p));
llSetVehicleFloatParam(VEHICLE_BUOYANCY, p * 1.0);
llSetVehicleFloatParam(VEHICLE_LINEAR_FRICTION_TIMESCALE,
4.0 + (6.0 * p));
if (p >= 0.95) llSetVehicleType(VEHICLE_TYPE_BOAT);Inhabited Vehicles β Body + Vehicle + Face
The notation has no separate layer for βsomething riding something elseβ β you just compose the protocols. A physiotherapist documenting posture during driving, a simulator instructor logging pilot position under load, or a game designer scripting a cockpit scene all use the same string format.
@VMN(Air) @ATT(Pit=3,Rol=-25,Yaw=270) @VEL(Fwd=88) @MODE(Cruise) @MOV(Sit) @ACT(Trap:1) @JNT(Sp.T:Lat=8, Sp.C:Rot=-10) @FNN(Corr:1, Orb.Oc.O:2)
@VMN(Car) @VEL(Fwd=22) @CTRL(Throt=0.85,Steer=-35) @MODE(Cruise) @MOV(Sit) @ACT(Obl.E:2, Trap:2, Bic:1) @JNT(Sp.T:Lat=-12) @FNN(Corr:2, Orb.Oc.O:2)
@VMN(Sea) @ATT(Rol=-28,Yaw=045) @VEL(Fwd=6) @MODE(Cruise) @MOV(Stab) @ACT(Obl.E:3, Lat:2, Ers:2) @JNT(Sp.L:Lat=28) @FNN(Corr:2, Plat:1)
@VMN(Space) @ATT(Pit=0,Yaw=090) @VEL(Fwd=180) @MODE(Orbit) @MOV(Float) @ACT(TrA:1) @JNT(Bi.Hip:Flex=30 Bi.Kn:Flex=20) @FNN(Zyg.Mj:1, Front:1)
NPCs, Pets & Companions
In virtual worlds, NPCs are the use case. In physical rehab, the trainer watches while the patient moves β the notation captures both the intended behavior and the actual body state. The same structure applies: an identifier, an intended state (BEH or care plan), and the actual movement state (MNN/FNN).
@AGENT(id=Mittens,type=Pet,species=Cat) @BEH(Follow:Player1,Radius=1.5m) @MOV(Walk) @ACT(Ers:1) >> DorsRami @FNN(Orb.Oc.O:2)
@AGENT(id=Aria,type=NPC,role=Companion) @BEH(Idle) @MOV(Idle) @ACT(TrA:1) @FNN(Zyg.Mj:2, Orb.Oc.O:1) >> CNVII @RES(Ch:2, Or:1) @PLC(A) @VOC(Fl) @BR(Sp2)
@AGENT(id=Guard1,type=NPC,role=Guard) @BEH(Patrol,Radius=10m) @MOV(Walk) @ACT(Trp.U:1, Ers:1) @FNN(Corr:1) >> CNVII/Temp
@AGENT(id=Rex,type=Pet,species=Dog) @BEH(Greet:Player1) @MOV(Run) @ACT(Glu.Mx:3, Quad.RF:3, Gas:2) @FNN(Zyg.Mj:3, Orb.Oc.O:2, Dep.Lab:1)
@AGENT(id=Shopkeeper,type=NPC,role=Merchant) @BEH(Idle) @MOV(Sit) @ACT(HpFl:1, Ers:1) @JNT(Bi.Hip:Flex=90 Bi.Kn:Flex=90) @FNN(Zyg.Mj:1)
@AGENT(id=Drake,type=Creature,species=Dragon) @BEH(Idle) @MOV(Sit.Floor) @ACT(Ers:2, TrA:1) @FNN(Orb.Oc.O:2)
Full Scene β Multiple Agents
Multiple subjects in one notation snapshot. In a virtual world this is players, NPCs, and pets. In a clinical setting it could be a patient and a physical therapist. In a training session, an athlete and a coach. The notation is the same in all cases.
@ENS(Preset:MidSummerNoon) // Player avatar @AGENT(id=Player1,type=Avatar) @MOV(Walk) @ACT(Glu.Mx:2, Quad.RF:2) @FNN(Zyg.Mj:2) // Companion NPC following @AGENT(id=Aria,type=NPC,role=Companion) @BEH(Follow:Player1) @MOV(Walk) @FNN(Zyg.Mj:1, Orb.Oc.O:1) // Pet dog at 2m @AGENT(id=Rex,type=Pet,species=Dog) @BEH(Follow:Player1,Radius=2m) @MOV(Walk) @ACT(Glu.Mx:1)
species= field in @AGENT() tells the rendering engine which rig to use β quadruped, avian, or custom. The notation string doesn't change; the renderer interprets it. This means one notation system covers all character types in one virtual world.