<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/index.php?action=history&amp;feed=atom&amp;title=Open_Prim_Animator</id>
	<title>Open Prim Animator - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/index.php?action=history&amp;feed=atom&amp;title=Open_Prim_Animator"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;action=history"/>
	<updated>2026-07-14T21:46:25Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1195098&amp;oldid=prev</id>
		<title>ObviousAltIsObvious Resident: &lt;lsl&gt; tag to &lt;source&gt;</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1195098&amp;oldid=prev"/>
		<updated>2015-01-25T15:15:51Z</updated>

		<summary type="html">&lt;p&gt;&amp;lt;lsl&amp;gt; tag to &amp;lt;source&amp;gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:15, 25 January 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;lsl&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;source lang=&quot;lsl2&quot;&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// Open Prim Animator - by Todd Borst&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// Open Prim Animator - by Todd Borst&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// Extensive Modifications by SignpostMarv Martin&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// Extensive Modifications by SignpostMarv Martin&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l487&quot;&gt;Line 487:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 487:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;lsl&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;source&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Open Prim Animator|Open Prim Animator]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Open Prim Animator|Open Prim Animator]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>ObviousAltIsObvious Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1188104&amp;oldid=prev</id>
		<title>Vex Streeter: Fix typo (colon instead of semicolon)</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1188104&amp;oldid=prev"/>
		<updated>2014-03-06T18:15:40Z</updated>

		<summary type="html">&lt;p&gt;Fix typo (colon instead of semicolon)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:15, 6 March 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l283&quot;&gt;Line 283:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 283:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             export = [];&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             export = [];&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             i = 0&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             i = 0&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             j = llGetListLength(rotList);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             j = llGetListLength(rotList);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Vex Streeter</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1182281&amp;oldid=prev</id>
		<title>Kireji Haiku: -1 &gt;&gt; ERR_GENERIC</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1182281&amp;oldid=prev"/>
		<updated>2013-10-08T10:30:30Z</updated>

		<summary type="html">&lt;p&gt;-1 &amp;gt;&amp;gt; ERR_GENERIC&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 03:30, 8 October 2013&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l28&quot;&gt;Line 28:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 28:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;integer primCount;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;integer primCount;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;integer commandListenerHandle = &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-1&lt;/del&gt;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;integer commandListenerHandle = &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ERR_GENERIC&lt;/ins&gt;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;list posList;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;list posList;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l191&quot;&gt;Line 191:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 191:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//  touch_start(integer num_detected)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//  touch_start(integer num_detected)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//  {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//  {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//      if (commandListenerHandle == &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-1&lt;/del&gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//      if (commandListenerHandle == &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ERR_GENERIC&lt;/ins&gt;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//      {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//      {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//          if (playAnimationStyle == 0)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//          if (playAnimationStyle == 0)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l463&quot;&gt;Line 463:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 463:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         if (commandListenerHandle != &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-1&lt;/del&gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         if (commandListenerHandle != &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ERR_GENERIC&lt;/ins&gt;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             showMenuDialog();&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             showMenuDialog();&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l481&quot;&gt;Line 481:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 481:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                 llSetTimerEvent((float)FALSE);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                 llSetTimerEvent((float)FALSE);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                 if (commandListenerHandle != &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-1&lt;/del&gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                 if (commandListenerHandle != &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ERR_GENERIC&lt;/ins&gt;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                     showMenuDialog();&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                     showMenuDialog();&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Kireji Haiku</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1180596&amp;oldid=prev</id>
		<title>Todd Borst: Added some comments and changed the license verbiage.</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1180596&amp;oldid=prev"/>
		<updated>2013-08-08T00:02:05Z</updated>

		<summary type="html">&lt;p&gt;Added some comments and changed the license verbiage.&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:02, 7 August 2013&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l2&quot;&gt;Line 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// Open Prim Animator - by Todd Borst&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// Open Prim Animator - by Todd Borst&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// Extensive Modifications by SignpostMarv Martin&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// Extensive Modifications by SignpostMarv Martin&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;// Note from Todd to other editors: Please document changes you have made to get proper credit.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;// Note from Todd to users: People may have edited the script from since I&#039;ve posted it originally.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;// You can always view the original script by clicking the history tab.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// This is provided AS IS without support.  Please don&amp;#039;t bug me demanding&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// This is provided AS IS without support.  Please don&amp;#039;t bug me demanding&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l18&quot;&gt;Line 18:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 22:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// License:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// License:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// You are welcome to use this anyway you like, even bring to other grids&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// You are welcome to use this anyway you like, even bring to other grids&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// outside of Second Life.  &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;If you try &lt;/del&gt;to sell &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;what I&lt;/del&gt;&#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;m giving away for&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// outside of Second Life.  &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;You are welcomed &lt;/ins&gt;to sell &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;it if you&lt;/ins&gt;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ve made your&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;free, you will be cursed with unimaginably bad juju&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;// &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;own improvements to it.  This is effectively public domain.  Have fun&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;integer COMMAND_CHANNEL = 32;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;integer COMMAND_CHANNEL = 32;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Todd Borst</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1173760&amp;oldid=prev</id>
		<title>Kireji Haiku: not done editiing, yet....still working on it. Improved loop speeds so far and readability of code. Still have to rename variable names to make more sense so we don&#039;t need any comments!</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1173760&amp;oldid=prev"/>
		<updated>2012-10-19T18:23:00Z</updated>

		<summary type="html">&lt;p&gt;not done editiing, yet....still working on it. Improved loop speeds so far and readability of code. Still have to rename variable names to make more sense so we don&amp;#039;t need any comments!&lt;/p&gt;
&lt;a href=&quot;https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;amp;diff=1173760&amp;amp;oldid=1159600&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Kireji Haiku</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1159600&amp;oldid=prev</id>
		<title>SignpostMarv Martin: categorisation</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1159600&amp;oldid=prev"/>
		<updated>2011-12-14T11:16:25Z</updated>

		<summary type="html">&lt;p&gt;categorisation&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:16, 14 December 2011&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l446&quot;&gt;Line 446:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 446:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/lsl&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/lsl&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Open Prim Animator|Open Prim Animator]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>SignpostMarv Martin</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1159597&amp;oldid=prev</id>
		<title>SignpostMarv Martin: Committing changes made to OPA made over the past year at work</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1159597&amp;oldid=prev"/>
		<updated>2011-12-14T11:06:30Z</updated>

		<summary type="html">&lt;p&gt;Committing changes made to OPA made over the past year at work&lt;/p&gt;
&lt;a href=&quot;https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;amp;diff=1159597&amp;amp;oldid=1132219&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>SignpostMarv Martin</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1132219&amp;oldid=prev</id>
		<title>Todd Borst at 15:10, 18 January 2011</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1132219&amp;oldid=prev"/>
		<updated>2011-01-18T15:10:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;amp;diff=1132219&amp;amp;oldid=1132216&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Todd Borst</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1132216&amp;oldid=prev</id>
		<title>Todd Borst: moved User:Todd Borst/Open Prim Animator to Open Prim Animator</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1132216&amp;oldid=prev"/>
		<updated>2011-01-18T15:04:15Z</updated>

		<summary type="html">&lt;p&gt;moved &lt;a href=&quot;/wiki/User:Todd_Borst/Open_Prim_Animator&quot; class=&quot;mw-redirect&quot; title=&quot;User:Todd Borst/Open Prim Animator&quot;&gt;User:Todd Borst/Open Prim Animator&lt;/a&gt; to &lt;a href=&quot;/wiki/Open_Prim_Animator&quot; title=&quot;Open Prim Animator&quot;&gt;Open Prim Animator&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:04, 18 January 2011&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Todd Borst</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1132215&amp;oldid=prev</id>
		<title>Todd Borst: Created page with &quot;&lt;lsl&gt; // Open Prim Animator - by Todd Borst  // This is provided AS IS without support.  Please don&#039;t bug me demanding  // help or custom work for this free script.  // Summary: …&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Open_Prim_Animator&amp;diff=1132215&amp;oldid=prev"/>
		<updated>2011-01-18T15:02:16Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;lsl&amp;gt; // Open Prim Animator - by Todd Borst  // This is provided AS IS without support.  Please don&amp;#039;t bug me demanding  // help or custom work for this free script.  // Summary: …&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Open Prim Animator - by Todd Borst&lt;br /&gt;
&lt;br /&gt;
// This is provided AS IS without support.  Please don&amp;#039;t bug me demanding &lt;br /&gt;
// help or custom work for this free script.&lt;br /&gt;
&lt;br /&gt;
// Summary: This is a simple prim animation script.  Just add this script&lt;br /&gt;
// to your object and a dialog will automatically pop up for you to use.&lt;br /&gt;
&lt;br /&gt;
// Features:&lt;br /&gt;
// -Single script &amp;quot;Prim Puppeteer&amp;quot; like animation tool&lt;br /&gt;
// -Playback controllable through external scripts&lt;br /&gt;
// -Animation is scalable and resizeable&lt;br /&gt;
// -On-touch trigger built-in&lt;br /&gt;
// -Completely free and open sourced &lt;br /&gt;
&lt;br /&gt;
// License:&lt;br /&gt;
// You are welcome to use this anyway you like, even bring to other grids&lt;br /&gt;
// outside of Second Life.  If you try to sell what I&amp;#039;m giving away for&lt;br /&gt;
// free, you will be cursed with unimaginably bad juju.&lt;br /&gt;
&lt;br /&gt;
integer COMMAND_CHANNEL = 32;&lt;br /&gt;
&lt;br /&gt;
integer primCount = 0;&lt;br /&gt;
integer commandListenerHandle = -1;&lt;br /&gt;
&lt;br /&gt;
list posList     = [];&lt;br /&gt;
list rotList     = [];&lt;br /&gt;
list scaleList   = [];&lt;br /&gt;
integer currentSnapshot   = 0;&lt;br /&gt;
integer recordedSnapshots = 0;&lt;br /&gt;
&lt;br /&gt;
vector rootScale   = ZERO_VECTOR;&lt;br /&gt;
vector scaleChange = &amp;lt;1,1,1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// For tracking memory usage.  The amount of snapshots you can record is based&lt;br /&gt;
// on the number of prims and available memory.  Less prims = more snapshots&lt;br /&gt;
integer maxMemory  = 0;&lt;br /&gt;
integer freeMemory = 0;&lt;br /&gt;
&lt;br /&gt;
integer playAnimationStyle = 0;&lt;br /&gt;
// The values for playAnimationStyle means&lt;br /&gt;
// 0 = no animation playing&lt;br /&gt;
// 1 = play animation once&lt;br /&gt;
// 2 = play animation looping&lt;br /&gt;
&lt;br /&gt;
// This function is used to display a recorded snapshot&lt;br /&gt;
showSnapshot(integer snapNumber)&lt;br /&gt;
{&lt;br /&gt;
    if(snapNumber &amp;gt; 0 &amp;amp;&amp;amp; snapNumber &amp;lt;= recordedSnapshots )&lt;br /&gt;
    {&lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        vector   pos;&lt;br /&gt;
        rotation rot;&lt;br /&gt;
        vector   scale;&lt;br /&gt;
&lt;br /&gt;
        vector rootPos = llGetPos();&lt;br /&gt;
&lt;br /&gt;
        // Might want to move llGetRot() into the loop for fast rotating objects.&lt;br /&gt;
		// Rotation during the animation playback may cause errors.&lt;br /&gt;
        rotation rootRot = llGetRot();&lt;br /&gt;
&lt;br /&gt;
        //2 is the first linked prim number.&lt;br /&gt;
        for( i = 2; i &amp;lt;= primCount; i++)&lt;br /&gt;
        {&lt;br /&gt;
            pos     = llList2Vector(posList,((snapNumber-1)*(primCount-1))+(i-2));&lt;br /&gt;
            rot     = llList2Rot(rotList,((snapNumber-1)*(primCount-1))+(i-2));&lt;br /&gt;
            scale   = llList2Vector(scaleList,((snapNumber-1)*(primCount-1))+(i-2));&lt;br /&gt;
&lt;br /&gt;
            //Adjust for scale changes&lt;br /&gt;
            if( rootScale.x != 1.0 || rootScale.y != 1.0 || rootScale.z != 1.0 )&lt;br /&gt;
            {&lt;br /&gt;
                pos.x *= scaleChange.x;&lt;br /&gt;
                pos.y *= scaleChange.y;&lt;br /&gt;
                pos.z *= scaleChange.z;&lt;br /&gt;
                scale.x *= scaleChange.x;&lt;br /&gt;
                scale.y *= scaleChange.y;&lt;br /&gt;
                scale.z *= scaleChange.z;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            llSetLinkPrimitiveParamsFast( i, [ PRIM_POSITION, pos, PRIM_ROTATION, rot/rootRot, PRIM_SIZE, scale ] );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// This function is used to start a sequential animation playback.&lt;br /&gt;
// If the delay speed is set too low, the script might not be able to keep up.&lt;br /&gt;
playAnimation(float delay, integer loop)&lt;br /&gt;
{&lt;br /&gt;
  	if(delay &amp;lt; 0.1) delay = 1.0;&lt;br /&gt;
&lt;br /&gt;
  	if( loop == FALSE)&lt;br /&gt;
  		playAnimationStyle = 1;&lt;br /&gt;
  	else&lt;br /&gt;
  		playAnimationStyle = 2;&lt;br /&gt;
&lt;br /&gt;
  	if (recordedSnapshots &amp;gt;= 1)&lt;br /&gt;
  		llSetTimerEvent(delay);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// This shows the edit menu&lt;br /&gt;
showMenuDialog()&lt;br /&gt;
{&lt;br /&gt;
    string temp = (string)((float)freeMemory/(float)maxMemory * 100.0);&lt;br /&gt;
    string menuText = &amp;quot;Available Memory: &amp;quot; + (string)freeMemory + &amp;quot; (&amp;quot; + llGetSubString(temp, 0, 4) +&amp;quot;%)&amp;quot; +&lt;br /&gt;
    &amp;quot;\nCurrent Snapshot: &amp;quot; + (string)currentSnapshot +&amp;quot;\tSnapshots Recorded: &amp;quot; + (string)recordedSnapshots +&lt;br /&gt;
    &amp;quot;\n\n[ Record ] - Record a snapshot of prim positions\n[ Play ] - Play back all the recorded snapshots\n[ Publish ] - Finish the recording process\n[ Show Next ] - Show the next snapshot\n[ Show Prev ] - Show the previous snapshot&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    llDialog(llGetOwner(), menuText, [&amp;quot;Record&amp;quot;,&amp;quot;Play&amp;quot;,&amp;quot;Publish&amp;quot;,&amp;quot;Show Prev&amp;quot;,&amp;quot;Show Next&amp;quot;], COMMAND_CHANNEL);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        maxMemory = llGetFreeMemory();&lt;br /&gt;
        freeMemory = llGetFreeMemory();&lt;br /&gt;
        &lt;br /&gt;
        primCount = llGetNumberOfPrims();&lt;br /&gt;
        commandListenerHandle = llListen(COMMAND_CHANNEL,&amp;quot;&amp;quot;, llGetOwner(), &amp;quot;&amp;quot;);&lt;br /&gt;
        showMenuDialog();&lt;br /&gt;
&lt;br /&gt;
        //setting initial root scale.  this allows the animation to scale if the root size is changed afterwards.&lt;br /&gt;
        rootScale = llGetScale();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //Feel free to remove this on-touch trigger if you are using your own script to control playback&lt;br /&gt;
    touch_start(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        //only activate after publish.&lt;br /&gt;
        if (commandListenerHandle == -1)&lt;br /&gt;
		{&lt;br /&gt;
			//if animation not playing start it, else stop it.&lt;br /&gt;
			if( playAnimationStyle == 0)&lt;br /&gt;
				playAnimation(1.0,TRUE);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				playAnimationStyle = 0;&lt;br /&gt;
				llSetTimerEvent(0);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
		//this is needed to detect scale changes and record the differences in order to adjust the animation accordingly.&lt;br /&gt;
        if (change &amp;amp; CHANGED_SCALE)&lt;br /&gt;
        {&lt;br /&gt;
            if (rootScale != ZERO_VECTOR)&lt;br /&gt;
            {&lt;br /&gt;
                vector newScale = llGetScale();&lt;br /&gt;
                //since change_scale is triggered even with linked prim changes,&lt;br /&gt;
                //this is to filter out non-root changes.&lt;br /&gt;
                if( ( newScale.x / rootScale.x) != scaleChange.x ||&lt;br /&gt;
                    ( newScale.y / rootScale.y) != scaleChange.y ||&lt;br /&gt;
                    ( newScale.z / rootScale.z) != scaleChange.z )&lt;br /&gt;
                {&lt;br /&gt;
                    scaleChange.x = newScale.x / rootScale.x;&lt;br /&gt;
                    scaleChange.y = newScale.y / rootScale.y;&lt;br /&gt;
                    scaleChange.z = newScale.z / rootScale.z;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
		// if new prims are added or removed from this object then the script resets &lt;br /&gt;
		// because the animations are now broken.&lt;br /&gt;
		else if (change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
			if( primCount != llGetNumberOfPrims() )&lt;br /&gt;
			{&lt;br /&gt;
				llOwnerSay(&amp;quot;Link change detected, reseting script.&amp;quot;);&lt;br /&gt;
				llResetScript();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //The message link function is to allow other scripts to control the snapshot playback&lt;br /&gt;
	//This command will display snapshot #2: &lt;br /&gt;
	//     	llMessageLinked(LINK_ROOT, 2, &amp;quot;XDshow&amp;quot;, NULL_KEY);  llSleep(1.0);&lt;br /&gt;
	//&lt;br /&gt;
	//This command will play through all the recorded snapshots in ascending order.  The number &amp;quot;1.0&amp;quot; is the delay speed and can be changed.&lt;br /&gt;
	//     	llMessageLinked(LINK_ROOT, 0, &amp;quot;XDplay&amp;quot;, &amp;quot;1.0&amp;quot;);&lt;br /&gt;
	//&lt;br /&gt;
	//This command will loop through all the recorded snapshots in ascending order.  The number &amp;quot;1.0&amp;quot; is the delay speed and can be changed.&lt;br /&gt;
	//     	llMessageLinked(LINK_ROOT, 0, &amp;quot;XDplayLoop&amp;quot;, &amp;quot;1.0&amp;quot;);&lt;br /&gt;
	//&lt;br /&gt;
	//To stop any playing animation use&lt;br /&gt;
	//		llMessageLinked(LINK_ROOT, 0, &amp;quot;XDstop&amp;quot;, NULL_KEY);&lt;br /&gt;
    link_message(integer sender_num, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if (&amp;quot;XDshow&amp;quot; == str &amp;amp;&amp;amp; num &amp;gt;= 1 &amp;amp;&amp;amp; num &amp;lt;= recordedSnapshots)&lt;br /&gt;
            showSnapshot(num);&lt;br /&gt;
        else if (&amp;quot;XDplay&amp;quot; == str)&lt;br /&gt;
        {&lt;br /&gt;
            currentSnapshot = 1;&lt;br /&gt;
			float delay = (float)((string)id);&lt;br /&gt;
			playAnimation(delay,FALSE);&lt;br /&gt;
		}&lt;br /&gt;
        else if (&amp;quot;XDplayLoop&amp;quot; == str)&lt;br /&gt;
		{&lt;br /&gt;
			float delay = (float)((string)id);&lt;br /&gt;
			playAnimation(delay,TRUE);&lt;br /&gt;
		}&lt;br /&gt;
		else if (&amp;quot;XDstop&amp;quot; == str)&lt;br /&gt;
		{&lt;br /&gt;
			playAnimationStyle = 0;&lt;br /&gt;
			llSetTimerEvent(0);&lt;br /&gt;
		}&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
	//This event handler takes care of all the editing commands.&lt;br /&gt;
	//Available commands are: record, play, publish, show next, show prev, show #&lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        list parsedMessage = llParseString2List(message, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string firstWord = llToLower(llList2String(parsedMessage,0));&lt;br /&gt;
        string secondWord = llToLower(llList2String(parsedMessage,1));&lt;br /&gt;
&lt;br /&gt;
		//display a snapshot&lt;br /&gt;
        if(&amp;quot;show&amp;quot; == firstWord &amp;amp;&amp;amp; recordedSnapshots &amp;gt; 0)&lt;br /&gt;
        {&lt;br /&gt;
			//stop any currently playing animation.&lt;br /&gt;
			llSetTimerEvent(0);&lt;br /&gt;
&lt;br /&gt;
            if(secondWord == &amp;quot;next&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                currentSnapshot++;&lt;br /&gt;
                if(currentSnapshot &amp;gt; recordedSnapshots)&lt;br /&gt;
                    currentSnapshot = 1;&lt;br /&gt;
                    &lt;br /&gt;
                showSnapshot(currentSnapshot);&lt;br /&gt;
            }&lt;br /&gt;
            else if(secondWord == &amp;quot;prev&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                currentSnapshot--;&lt;br /&gt;
                if(currentSnapshot &amp;lt; 1)&lt;br /&gt;
                    currentSnapshot = recordedSnapshots;&lt;br /&gt;
&lt;br /&gt;
                showSnapshot(currentSnapshot);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                // when the conversion fails, snapshotNumber = 0&lt;br /&gt;
                currentSnapshot = (integer)secondWord;&lt;br /&gt;
                if(currentSnapshot &amp;gt; 0 &amp;amp;&amp;amp; currentSnapshot &amp;lt;= recordedSnapshots )&lt;br /&gt;
                {&lt;br /&gt;
                    showSnapshot(currentSnapshot);&lt;br /&gt;
                    llOwnerSay(&amp;quot;Showing snapshot: &amp;quot;+(string)currentSnapshot);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    llOwnerSay(&amp;quot;Invalid snapshot number given: &amp;quot; + (string) currentSnapshot +&lt;br /&gt;
                                &amp;quot;\nA valid snapshot number is between 1 and &amp;quot; + (string) recordedSnapshots);&lt;br /&gt;
                    currentSnapshot = 1;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
		//record a snapshot&lt;br /&gt;
        else if(firstWord == &amp;quot;record&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            integer i = 0;&lt;br /&gt;
            //2 is the first linked prim number.&lt;br /&gt;
            vector rootPos = llGetPos();&lt;br /&gt;
            for( i = 2; i &amp;lt;= primCount; i++)&lt;br /&gt;
            {&lt;br /&gt;
                vector pos = llList2Vector(llGetLinkPrimitiveParams(i, [PRIM_POSITION]),0);&lt;br /&gt;
                //need to convert into local position&lt;br /&gt;
                pos.x -= rootPos.x;&lt;br /&gt;
                pos.z -= rootPos.z;&lt;br /&gt;
                pos.y -= rootPos.y;&lt;br /&gt;
                pos = pos / llGetRot();&lt;br /&gt;
                posList += pos;&lt;br /&gt;
&lt;br /&gt;
                rotation rot = llList2Rot(llGetLinkPrimitiveParams(i, [PRIM_ROTATION]),0);&lt;br /&gt;
                //Converting into local rot&lt;br /&gt;
                rot = rot / llGetRot();&lt;br /&gt;
                rotList += rot;&lt;br /&gt;
&lt;br /&gt;
                scaleList += llList2Vector(llGetLinkPrimitiveParams(i, [PRIM_SIZE]),0);&lt;br /&gt;
            }&lt;br /&gt;
            recordedSnapshots++;&lt;br /&gt;
&lt;br /&gt;
            llOwnerSay(&amp;quot;Total number of snapshots recorded: &amp;quot; + (string)recordedSnapshots);&lt;br /&gt;
            freeMemory = llGetFreeMemory();&lt;br /&gt;
        }&lt;br /&gt;
		//play the animation from beginning to end once without looping.&lt;br /&gt;
        else if (firstWord == &amp;quot;play&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            float delay = (float)secondWord;&lt;br /&gt;
			currentSnapshot = 1;&lt;br /&gt;
			//play the animation once without loop&lt;br /&gt;
			playAnimation(delay, FALSE);&lt;br /&gt;
        }&lt;br /&gt;
        //publish disables the recording features and enables the on-touch trigger&lt;br /&gt;
        else if(&amp;quot;publish&amp;quot; == firstWord)&lt;br /&gt;
        {&lt;br /&gt;
			//stop any currently playing animation.&lt;br /&gt;
			llSetTimerEvent(0);&lt;br /&gt;
			playAnimationStyle = 0;&lt;br /&gt;
			currentSnapshot = 1;&lt;br /&gt;
&lt;br /&gt;
			//remove listeners to disable recording&lt;br /&gt;
            llListenRemove(commandListenerHandle);&lt;br /&gt;
            commandListenerHandle = -1; //indicating that it&amp;#039;s been published&lt;br /&gt;
&lt;br /&gt;
            llOwnerSay(&amp;quot;Recording disabled. Publish complete.\nClick me to toggle animation on/off.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        //if not published, show menu&lt;br /&gt;
        if(commandListenerHandle != -1)&lt;br /&gt;
            showMenuDialog();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
	//Timer event is used to handle the animation playback.&lt;br /&gt;
	timer()&lt;br /&gt;
    {&lt;br /&gt;
		showSnapshot(currentSnapshot);&lt;br /&gt;
&lt;br /&gt;
		//if not at the end of the animation, increment the counter&lt;br /&gt;
		if(currentSnapshot &amp;lt; recordedSnapshots)&lt;br /&gt;
			currentSnapshot++;&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			// if animation is looping, set the counter back to 1&lt;br /&gt;
			if( playAnimationStyle == 2)&lt;br /&gt;
				currentSnapshot = 1;&lt;br /&gt;
			// if animation isn&amp;#039;t looping, stop the animation&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				llSetTimerEvent(0);&lt;br /&gt;
				//if not published, show dialog menu&lt;br /&gt;
				if(commandListenerHandle != -1)&lt;br /&gt;
					showMenuDialog();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Todd Borst</name></author>
	</entry>
</feed>