integer l1; integer x; integer earflick; integer earsdown; vector rot; default { on_rez(integer start_param) { if(l1!=0) llListenRemove(l1); l1=llListen(1,"",llGetOwner(),""); if(earflick==TRUE) { llSetTimerEvent(2+llFrand(8)); } else { llSetTimerEvent(0); } } state_entry() { if(l1!=0) llListenRemove(l1); l1=llListen(1,"",llGetOwner(),""); } listen(integer channel, string name, key id, string msg) { msg=llToLower(msg); if(msg=="ears up"||msg=="earsup") { llSetLocalRot(<-0.29028, 0.00000, 0.00000, 0.95694>); earsdown=FALSE; } else if(msg=="ears down"||msg=="earsdown") { llSetLocalRot(<-0.65903, 0.25628, 0.70694, 0.01542>); earsdown=TRUE; } else if(msg=="earflick on"||msg=="eartwitch on") { earflick=TRUE; llSetTimerEvent(2+llFrand(8)); } else if(msg=="earflick off"||msg=="eartwitch off") { earflick=FALSE; llSetTimerEvent(0); } } timer() { if(earsdown==FALSE) { for(x=0; x < 4; x++) { rot=llRot2Euler(llGetLocalRot()); rot.z=rot.z + 0.1; rot.x=rot.x - 0.05; llSetLocalRot(llEuler2Rot(rot)); llSleep(0.01); } for(x=0; x < 4; x++) { rot=llRot2Euler(llGetLocalRot()); rot.z=rot.z - 0.1; rot.x=rot.x + 0.05; llSetLocalRot(llEuler2Rot(rot)); llSleep(0.01); } } llSetTimerEvent(2+llFrand(8)); } }