Don't click here unless you want to be banned.

LSL Wiki : ExampleAnimationScript

HomePage :: PageIndex :: RecentChanges :: RecentlyCommented :: UserSettings :: You are ia360925.us.archive.org
Here is an example of how to animate an avatar. I wrote this soon after starting
SL to test out the animation system, and it is now free for anyone's use.

-- Xylor Baysklef

////////////////////////////////////////////
// Animation Script v1.2.1
//
// Written by Xylor Baysklef
////////////////////////////////////////////

/////////////// CONSTANTS ///////////////////
list ANIMATIONS  = [ "aim_L_bow", "aim_R_bazooka", "aim_R_handgun", "aim_R_rifle", "angry_fingerwag",
"angry_tantrum", "away", "backflip", "blowkiss", "bow", "brush", "clap",
"courtbow", "cross_arms", "crouch", "crouchwalk", "curtsy",
"dance1", "dance2", "dance3", "dance4", "dance5", "dance6", "dance7", "dance8",
"dead", "drink", "express_afraid", "express_anger", "express_bored",
"express_cry", "express_embarrased", "express_laugh", "express_repulsed",
"express_sad", "express_shrug", "express_surprise", "express_wink",
"express_worry", "falldown", "female_walk", "fist_pump", "fly", "flyslow",
"hello", "hold_R_bow", "hold_R_bazooka", "hold_R_handgun", "hold_R_rifle",
"hold_throw_R", "hover", "hover_down", "hover_up", "impatient",
"jump", "jumpforjoy", "kick_roundhouse_R", "kissmybutt", "kneel_left",
"kneel_right", "land", "laugh_short", "motorcycle_sit", "musclebeach", "no_head", "no_unhappy",
"nyanya", "peace", "point_me", "point_you" ];

list ANIMATIONS2 = [ "prejump", "punch_L", "punch_onetwo", "punch_R", 
"RPS_countdown", "RPS_paper", "RPS_rock",
"RPS_scissors", "run", "salute", "shoot_L_bow", "shout", "sit", "sit_female", "sit_ground", 
"sit_to_stand", "sleep", "slowwalk", "smoke_idle", "smoke_inhale", "smoke_throw_down",
"snapshot", "soft_land", "stand", "standup", "stand_1", "stand_2",
"stand_3", "stand_4", "stretch", "stride", "surf", "sword_strike_R",
"talk", "throw_R", "tryon_shirt", "turnback_180", "turnleft", "turnright",
"turn_180", "type", "uphillwalk", "walk", "whisper", "whistle", "wink_hollywood", "yell",
"yes_happy", "yes_head", "yoga_float" ];
///////////// END CONSTANTS /////////////////

///////////// GLOBAL VARIABLES ///////////////
//integer gToggle = 0;
integer gAnimNumber;
integer gTotalAnims;

string gAnimName = "type";
/////////// END GLOBAL VARIABLES /////////////

default {
    state_entry() {
        //llSay(0, "Init...");
        llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
        
        ANIMATIONS += ANIMATIONS2;
        ANIMATIONS2 = [];
        
        gTotalAnims = llGetListLength(ANIMATIONS);
        gAnimNumber = -1;
        llListen(0, "", llGetOwner(), "");
    }
    
    on_rez(integer param) {
        //llGiveInventory(llGetOwner(), "Animation Names");
        llResetScript();
    }
    
    listen(integer channel, string name, key id, string mesg) {
        string preamble = llGetSubString(mesg, 0, 3);
        if (preamble != "anim" && preamble != "stop")
            return;
                
        integer perm = llGetPermissions();
        
        if ( !(perm & PERMISSION_TRIGGER_ANIMATION)) {            
            llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
            return;
        }
        
        list parsed = llParseString2List(mesg, [ " " ], []);
        //llSay(0, (string)parsed);
        
        string anim = llList2String(parsed, 1);
        
        if (preamble == "stop") {
            //llSay(0, "Stopping: " + llGetAnimation(llGetOwner()));
            //llStopAnimation(llGetAnimation(llGetOwner()));
            if (anim == "")
                anim = gAnimName;
                        
            if (anim == "all") {
                integer i;
                llSay(0, "Stopping all animations... please wait.");
                for (i=0; i<gTotalAnims; i++)
                    llStopAnimation(llList2String(ANIMATIONS, i));
                    
                llSay(0, "Done.");
                    
                return;
            }
                
            //llSay(0, "Stopping: " + anim);
            llStopAnimation(anim);
            return;
        }
                
        gAnimName = anim;
        //llSay(0, "Animation: " + gAnimName);
        llStartAnimation(gAnimName);            
    }
    
    run_time_permissions(integer perm) {
        //llStopAnimation(gAnimName);
        //gToggle = 0;
    }
    
    attach(key id) {
        integer perm = llGetPermissions();
        
        if (id != NULL_KEY) {        
        
            if (! (perm & PERMISSION_TRIGGER_ANIMATION)) {
                llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
            }                
        }
        else {
            
            if (perm & PERMISSION_TRIGGER_ANIMATION) {
                llStopAnimation(gAnimName);
            }
        }
    }

    touch_start(integer total_number) {
        if (llDetectedKey(0) != llGetOwner())
            return;
        
        integer perm = llGetPermissions();
        
        if (perm & PERMISSION_TRIGGER_ANIMATION) {
            if (gAnimNumber != -1) {
                llStopAnimation( llList2String(ANIMATIONS, gAnimNumber) );
            }
                
            
            gAnimNumber++;
            if (gAnimNumber == gTotalAnims)
                gAnimNumber = 0;
                
            gAnimName = llList2String(ANIMATIONS, gAnimNumber);
            
            llStartAnimation( gAnimName );
            llSay(0, "Animation: " + gAnimName);
        }
        else {
            llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
        }
    }
}

For a simpler explanation of animation permissions, see ExampleAnimationBasic.


Examples
Comments [Hide comments/form]
I belive this belongs to the script library, as its much more in-depth and a complete script than an example.
-- KairaOverdrive (2006-09-07 08:24:13)
A beginner's notes: This information wasn't included in the script, but it turns out what you have to do is drop this script into a prim, and click the prim. The prim will then cycle through all the animations, one at a time. Appears to only work for the Owner of the prim, but bystanders see the animation, and the text generated by the prim in chat.
-- 68-190-34-52.dhcp.gwnt.ga.charter.com (2007-06-18 23:58:07)
Attach a comment to this page: