Vomit

Written by Kitsune
key target = "";
 
MakeParticles()
{
    if (target == "owner") target = llGetOwner();
    if (target == "self") target = llGetKey();
 
    llParticleSystem([
        PSYS_PART_FLAGS , 0
    //| PSYS_PART_BOUNCE_MASK
    //| PSYS_PART_WIND_MASK
    | PSYS_PART_INTERP_COLOR_MASK
    | PSYS_PART_INTERP_SCALE_MASK
    //| PSYS_PART_FOLLOW_SRC_MASK
    | PSYS_PART_FOLLOW_VELOCITY_MASK
    //| PSYS_PART_TARGET_POS_MASK
    | PSYS_PART_EMISSIVE_MASK
    //| PSYS_PART_TARGET_LINEAR_MASK
    ,
    //PSYS_SRC_TARGET_KEY,target,
    //Patterns:
    //PSYS_SRC_PATTERN_DROP
    //PSYS_SRC_PATTERN_EXPLODE
    //PSYS_SRC_PATTERN_ANGLE
    //PSYS_SRC_PATTERN_ANGLE_CONE
    //PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY     
 
    PSYS_SRC_PATTERN,          PSYS_SRC_PATTERN_ANGLE_CONE
 
    ,PSYS_SRC_TEXTURE,           "75f7ceed-1b02-6579-92e2-6464363139b3"
    ,PSYS_PART_MAX_AGE,          2.5
    ,PSYS_SRC_BURST_RATE,        0.01
    ,PSYS_SRC_BURST_PART_COUNT,  1
    ,PSYS_SRC_BURST_RADIUS,      0.01
    ,PSYS_SRC_BURST_SPEED_MIN,   .4
    ,PSYS_SRC_BURST_SPEED_MAX,   .6
    ,PSYS_SRC_ACCEL,             <0.0,0.0,-1.50>
    ,PSYS_PART_START_COLOR,      <.52,.02,.0>
    ,PSYS_PART_END_COLOR,        <.40,.10,.0>
    ,PSYS_PART_START_ALPHA,      1.0
    ,PSYS_PART_END_ALPHA,        0.0
    ,PSYS_PART_START_SCALE,      <.07,.07,.07>
    ,PSYS_PART_END_SCALE,        <.6,.6,.6>
    ,PSYS_SRC_ANGLE_BEGIN,       PI
    ,PSYS_SRC_ANGLE_END,         170 * DEG_TO_RAD
    ,PSYS_SRC_INNERANGLE,         PI
    ,PSYS_SRC_OUTERANGLE,         170 * DEG_TO_RAD
    ,PSYS_SRC_OMEGA,             <0.0,0.0,0.0>
            ]);
}
 
string ANIM = "express_open_mouth";
string ANIM2 = "express_anger";
vector pos;
 
default {
    state_entry()
    {
        llSetTimerEvent(0.0);
    }
 
    attach(key attached)
    {
        if (attached != NULL_KEY)
        {
            llRequestPermissions(attached, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);
            llListen(23468723,"",NULL_KEY,"");
        } else
        {
            llSetTimerEvent(0.1);
        }
    }
 
    run_time_permissions(integer perms)
    {
        if(perms & (PERMISSION_TRIGGER_ANIMATION))
        {
            llTakeControls(CONTROL_LBUTTON,TRUE,TRUE);
        }
    }
 
    control(key id, integer level, integer edge)
    {
        pos = llGetAgentSize(id);
        float zee = pos.z;
        if(edge & level & CONTROL_LBUTTON)
        {
            llParticleSystem([]);
            llStartAnimation(ANIM);
            llStartAnimation(ANIM2);
            integer rand = llRound(llFrand(4));
            if(rand == 0)
                llTriggerSound("60edd6cd-6dd8-4520-d545-eca32e0ad7bc",1.0);
            if(rand == 1)
                llTriggerSound("efbda044-dc6c-c9f0-e622-1079c8c1a566",1.0);
            if(rand == 2)
                llTriggerSound("a7abc081-58b5-39c4-fd5e-8fc77362cfca",1.0);
            if(rand == 3)
                llTriggerSound("dd54d31d-9640-46e7-1cd1-33507182c2c5",1.0);
            if(rand == 4)
                llTriggerSound("36b4dc22-e5d0-4cb9-03c9-573bab173de3",1.0);
 
            MakeParticles();
            llSleep(1.25);
            llRezObject("puke",llGetPos() + <1.0,0,-zee/1.85> * llGetRot(),ZERO_VECTOR,ZERO_ROTATION,1);
            llParticleSystem([]);
        }
    }
    listen(integer channel, string name, key id, string msg)
    {
        pos = llGetAgentSize(llGetOwner());
        float zee = pos.z;
        list tokens = llParseString2List(msg, [" "],[]);
        if(llList2Key(tokens,0)==llGetOwner() && llList2String(tokens,1)=="drink")
        {
            llParticleSystem([]);
            llStartAnimation(ANIM);
            llStartAnimation(ANIM2);
            integer rand = llRound(llFrand(4));
            if(rand == 0)
                llTriggerSound("60edd6cd-6dd8-4520-d545-eca32e0ad7bc",1.0);
            if(rand == 1)
                llTriggerSound("efbda044-dc6c-c9f0-e622-1079c8c1a566",1.0);
            if(rand == 2)
                llTriggerSound("a7abc081-58b5-39c4-fd5e-8fc77362cfca",1.0);
            if(rand == 3)
                llTriggerSound("dd54d31d-9640-46e7-1cd1-33507182c2c5",1.0);
            if(rand == 4)
                llTriggerSound("36b4dc22-e5d0-4cb9-03c9-573bab173de3",1.0);MakeParticles();
            llSleep(1.25);
            llRezObject("puke",llGetPos() + <1.0,0,-zee/1.85> * llGetRot(),ZERO_VECTOR,ZERO_ROTATION,1);
            llParticleSystem([]);
        }
    }
}