Well, for what it's worth, here is the script that makes my tail wag:
vector start;
tailwag()
{
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <-20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <-20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <-20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <-20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <-20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <-20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <-20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <-20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <-20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <-20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*((RAD_TO_DEG*llRot2Euler(llGetLocalRot()))+ <20, 0, 0>

));
llSetRot(llEuler2Rot(DEG_TO_RAD*(start)));
}
default
{
state_entry()
{
start = (RAD_TO_DEG*llRot2Euler(llGetLocalRot()));
llSetTimerEvent(10 + llFrand(10));
}
timer()
{
tailwag();
llSetTimerEvent(10 + llFrand(10));
}
}
It appears to be a script that gets the rotation vector of the prim it's in when the prim is rezzed, then applies some rotations to that vector value. I think you could probably get what you need from this.
Nimilia Strangelove gave me that script. I don't know if she wrote it or got it somewhere else. She didn't say.