This script was written by Todd Borst, the creator of Second Life's puppeteer:
// Open Prim Animator - by Todd Borst
// Extensive Modifications by SignpostMarv Martin
// Note from Todd to other editors: Please document changes you have made to get proper credit.
// Note from Todd to users: People may have edited the script from since I've posted it originally.
// You can always view the original script by clicking the history tab.
// This is provided AS IS without support. Please don't bug me demanding
// help or custom work for this free script.
// Summary: This is a simple prim animation script. Just add this script
// to your object and a dialog will automatically pop up for you to use.
// Features:
// -Single script "Prim Puppeteer" like animation tool
// -Playback controllable through external scripts
// -Animation is scalable and resizeable
// -On-touch trigger built-in
// -Completely free and open sourced
// License:
// You are welcome to use this anyway you like, even bring to other grids
// outside of Second Life. You are welcomed to sell it if you've made your
// own improvements to it. This is effectively public domain. Have fun.
integer COMMAND_CHANNEL = 32;
integer primCount;
integer commandListenerHandle = ERR_GENERIC;
list posList;
list rotList;
list scaleList;
integer currentSnapshot;
integer recordedSnapshots;
vector rootScale;
vector scaleChange = <1 .0, 1.0, 1.0>;
integer maxMemory;
integer freeMemory;
// The values for playAnimationStyle means
// 0 := no animation playing
// 1 := play animation once
// 2 := play animation looping
integer playAnimationStyle;
key op_import = "6b78fcc8-e147-4105-99a6-ff19b4bf559d";
key op_export = "7c2ca168-2b64-4836-8727-8e62b78dbd44";
key op_alter_rootScale = "f9d3389e-a78c-43f8-9e35-c11adec112a5";
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
show_snapshot(integer snapNumber)
{
if (!snapNumber || recordedSnapshots "];
}
while (++i >"];
}
while (++i >"];
}
while (++i > 0)
{
llSetTimerEvent((float)FALSE);
if (secondWord == "next")
{
++currentSnapshot;
if (recordedSnapshots >