<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Totem Gufler's Blog &#187; totemgufler</title>
	<atom:link href="http://totemgufler.wordpress.com/author/totemgufler/feed/" rel="self" type="application/rss+xml" />
	<link>http://totemgufler.wordpress.com</link>
	<description>First Hand Reports From TSL</description>
	<lastBuildDate>Mon, 21 Jul 2008 18:19:18 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='totemgufler.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/f3308bd942704f4c091c58fee2f09d05?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Totem Gufler's Blog &#187; totemgufler</title>
		<link>http://totemgufler.wordpress.com</link>
	</image>
			<item>
		<title>Wild West Sim</title>
		<link>http://totemgufler.wordpress.com/2008/07/21/wild-west-sim-2/</link>
		<comments>http://totemgufler.wordpress.com/2008/07/21/wild-west-sim-2/#comments</comments>
		<pubDate>Mon, 21 Jul 2008 18:19:18 +0000</pubDate>
		<dc:creator>totemgufler</dc:creator>
				<category><![CDATA[Second Life]]></category>

		<guid isPermaLink="false">http://totemgufler.wordpress.com/?p=30</guid>
		<description><![CDATA[The Wild West Sim that I mentioned before is, as far as I can tell, complete. I started out working on the project, but I had to stop because of school and other things. However, it looks like everyone else continued working and the whole place is done. At least, as done as it&#8217;s going [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=30&subd=totemgufler&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The Wild West Sim that I mentioned before is, as far as I can tell, complete. I started out working on the project, but I had to stop because of school and other things. However, it looks like everyone else continued working and the whole place is done. At least, as done as it&#8217;s going to be.</p>
<p>The whole place actually looks worse than I left it last. But, what can you do? That&#8217;s life on the Teen Grid.</p>
<p><a href="http://totemgufler.files.wordpress.com/2008/07/snapshot_003.png"><img class="alignnone size-medium wp-image-31" src="http://totemgufler.files.wordpress.com/2008/07/snapshot_003.png?w=300&#038;h=187" alt="" width="300" height="187" /></a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/totemgufler.wordpress.com/30/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/totemgufler.wordpress.com/30/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/totemgufler.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/totemgufler.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/totemgufler.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/totemgufler.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/totemgufler.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/totemgufler.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/totemgufler.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/totemgufler.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/totemgufler.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/totemgufler.wordpress.com/30/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=30&subd=totemgufler&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://totemgufler.wordpress.com/2008/07/21/wild-west-sim-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1f344a0e2440aaba172145eae4f7c646?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">totemgufler</media:title>
		</media:content>

		<media:content url="http://totemgufler.files.wordpress.com/2008/07/snapshot_003.png?w=300" medium="image" />
	</item>
		<item>
		<title>Yes, windows is still suckish in the future</title>
		<link>http://totemgufler.wordpress.com/2008/07/19/yes-windows-is-still-suckish-in-the-future/</link>
		<comments>http://totemgufler.wordpress.com/2008/07/19/yes-windows-is-still-suckish-in-the-future/#comments</comments>
		<pubDate>Sat, 19 Jul 2008 14:23:13 +0000</pubDate>
		<dc:creator>totemgufler</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://totemgufler.wordpress.com/?p=28</guid>
		<description><![CDATA[
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=28&subd=totemgufler&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><img class="alignnone" src="http://i14.tinypic.com/2ur1h6t.gif" alt="" width="320" height="240" /></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/totemgufler.wordpress.com/28/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/totemgufler.wordpress.com/28/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/totemgufler.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/totemgufler.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/totemgufler.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/totemgufler.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/totemgufler.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/totemgufler.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/totemgufler.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/totemgufler.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/totemgufler.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/totemgufler.wordpress.com/28/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=28&subd=totemgufler&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://totemgufler.wordpress.com/2008/07/19/yes-windows-is-still-suckish-in-the-future/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1f344a0e2440aaba172145eae4f7c646?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">totemgufler</media:title>
		</media:content>

		<media:content url="http://i14.tinypic.com/2ur1h6t.gif" medium="image" />
	</item>
		<item>
		<title>X-Flight Flight Assist</title>
		<link>http://totemgufler.wordpress.com/2008/03/26/x-flight-flight-assist/</link>
		<comments>http://totemgufler.wordpress.com/2008/03/26/x-flight-flight-assist/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 00:44:23 +0000</pubDate>
		<dc:creator>totemgufler</dc:creator>
				<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Second Life]]></category>

		<guid isPermaLink="false">http://totemgufler.wordpress.com/?p=25</guid>
		<description><![CDATA[A pretty old flight assist that seems pretty popular. It&#8217;s not that good; I even made a better one (I might post mine soon), but it is important to put as much as I can up to help people learn as much as possible. This can just be put into an object and attached to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=25&subd=totemgufler&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>A pretty old flight assist that seems pretty popular. It&#8217;s not that good; I even made a better one (I might post mine soon), but it is important to put as much as I can up to help people learn as much as possible. This can just be put into an object and attached to your avatar.</p>
<p><span id="more-25"></span><font color="#ff6600"> //X-flight script for increased flying speed and control<br />
//Developed by Goodwill Epoch on 6/12/2003<br />
//Revision 1.9a<br />
//For explicit use only by members of the Kazenojin Airship guild<br />
//<br />
//May be sold with explicit permission from Goodwill Epoch to non-members<br />
//Settings must be set to no-modify no view to prevent theft of script<br />
//script may not be modified without permission from Goodwill Epoch</font></p>
<p><font color="#ff6600">//List of customizable commands<br />
list commands = ["X", "go", "stop", "status", "speed", "accel", "pos", "accelmode", "turnmode", "hovermode", "posmode"];</font></p>
<p><font color="#ff6600">//Help for commands<br />
list com_help = ["Trigger for any commands to be entered", "Enable flight enhancements", "Disable flight enhancements", "List current modes and their state", "Current impulse, place a number after to set. limit 1-500", "Current acceleration, place a number after to set. limit 10-100",  "Current coordinates", "Acceleration of movement. Use 'on' or 'off' to set.", "Slow down while turning. Use 'on' or 'off' to set.", "Allows hovering at all heights. Use 'on' or 'off' to set.", "Displays position over object. Use 'on' or 'off' to set."];</font></p>
<p><font color="#ff6600">//Default movement variables<br />
float speed = 050;<br />
float accel = 10;<br />
float move = 0;<br />
float attached = 0;</font></p>
<p><font color="#ff6600">//Counters and temp variables<br />
float accel_count = 0;<br />
string temp_newcommand;<br />
integer temp_newcom_pos;<br />
integer wait_for_conf = FALSE;<br />
integer test_move = FALSE;</font></p>
<p><font color="#ff6600">//Simplified say strings<br />
string off = &#8220;off&#8221;;<br />
string on = &#8220;on&#8221;;</font></p>
<p><font color="#ff6600">//Default settings<br />
integer accelmode = TRUE;<br />
integer turnmode = TRUE;<br />
integer hovermode = TRUE;<br />
integer posmode = FALSE;</font></p>
<p><font color="#ff6600">//Other variables<br />
integer listen_num;<br />
string notecard = &#8220;X-Flight enhanced flight info&#8221;;<br />
string notehelp = &#8220;X-Flight enhanced flight help&#8221;;</font></p>
<p><font color="#ff6600">//Returns a on/off string from a true/false pass<br />
string on_off(integer test)<br />
{<br />
if(test)<br />
{<br />
return on;<br />
}<br />
else<br />
{<br />
return off;<br />
}<br />
}</font></p>
<p><font color="#ff6600">//Returns a true/fals from an on/off string<br />
integer true_false(string test)<br />
{<br />
if(test == on)<br />
{<br />
return TRUE;<br />
}<br />
else<br />
{<br />
return FALSE;<br />
}<br />
}</font></p>
<p><font color="#ff6600">//Help menu handler<br />
help()<br />
{<br />
llSay(0, &#8220;Current help&#8221;);<br />
integer a;<br />
for(a = 0; a &lt; llGetListLength(com_help); a++)<br />
{<br />
llSay(0, llList2String(commands, a) + &#8221; &#8211; &#8221; + llList2String(com_help, a));<br />
}<br />
llSay(0, &#8220;customize &#8211; Allows you to customize certain commands. &#8216;&#8221; + llList2String(commands, 0) + &#8221; customize [old command] [new command]&#8216; Be sure to use full words without spaces for commands. You will then need to type &#8216;yes&#8217; to confirm.&#8221;);<br />
llSay(0, &#8220;reset &#8211; Resets entire script. &#8216;&#8221; + llList2String(commands, 0) + &#8221; reset&#8217; WARNING: Will erase all customize data and settings.&#8221;);<br />
}</font></p>
<p><font color="#ff6600">//Allows customization of function names<br />
customize(string old_com, string new_com)<br />
{<br />
//Checks for commands and proper commands<br />
if((old_com == &#8220;&#8221;) || (new_com == &#8220;&#8221;))<br />
{<br />
llSay(0, &#8220;Not enough information, please try again or view help for more info.&#8221;);<br />
}<br />
else<br />
{<br />
integer listpos = llListFindList(commands, [old_com]);<br />
if(listpos == -1)<br />
{<br />
llSay(0, &#8220;Command not found, please view help for more info on current command settings&#8221;);<br />
}<br />
else    //Sets up wait to confirm changing commands<br />
{<br />
temp_newcommand = new_com;<br />
temp_newcom_pos = listpos;<br />
llSay(0, &#8220;Do you want command &#8216;&#8221; + old_com + &#8220;&#8216; to be changed to &#8216;&#8221; + new_com + &#8220;&#8216;? Please say &#8216;yes&#8217;&#8221;);<br />
wait_for_conf = TRUE;<br />
}<br />
}<br />
}</font></p>
<p><font color="#ff6600">//Take controls<br />
get_controls()<br />
{<br />
llListenRemove(listen_num);<br />
listen_num = llListen(0, &#8220;&#8221;, llGetOwner(), &#8220;&#8221;);<br />
llSetTimerEvent(.5);<br />
llSetText(&#8220;&#8221;, &lt;0,0,0&gt;, 0);<br />
llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS);<br />
}</font></p>
<p><font color="#ff6600">//Handle Commands<br />
com_handle(integer com_num, string message)<br />
{<br />
if(com_num == 1) //Go<br />
{<br />
get_controls();<br />
}<br />
else if(com_num == 2) //Stop<br />
{<br />
llReleaseControls();<br />
llSay(0, &#8220;All stop&#8221;);<br />
}<br />
else if(com_num == 3) //Status<br />
{<br />
llSay(0, &#8220;Current settings:&#8221;);<br />
llSay(0, llList2String(commands, 4) + &#8221; &#8211; &#8221; + (string)((integer)speed));<br />
llSay(0, llList2String(commands, 5) + &#8221; &#8211; &#8221; + (string)((integer)accel));<br />
llSay(0, llList2String(commands, 7) + &#8221; &#8211; &#8221; + on_off(accelmode));<br />
llSay(0, llList2String(commands, <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> + &#8221; &#8211; &#8221; + on_off(turnmode));<br />
llSay(0, llList2String(commands, 9) + &#8221; &#8211; &#8221; + on_off(hovermode));<br />
llSay(0, llList2String(commands, 10) + &#8221; &#8211; &#8221; + on_off(posmode));<br />
}<br />
else if(com_num == 4) //Speed<br />
{<br />
float tempvar = (integer)message;<br />
if((tempvar &gt; 0) &amp;&amp; (tempvar &lt;= 500))<br />
{<br />
speed = tempvar;<br />
llSay(0, llList2String(commands, com_num) + &#8221; is now &#8221; + (string)((integer)speed));<br />
}<br />
else<br />
{<br />
llSay(0, llList2String(commands, com_num) + &#8221; is currently &#8221; + (string)((integer)speed));<br />
}<br />
}<br />
else if(com_num == 5) //Acceleration<br />
{<br />
float tempvar = (integer)message;<br />
if((tempvar &gt;= 10) &amp;&amp; (tempvar &lt;= 100))<br />
{<br />
accel = tempvar;<br />
llSay(0, llList2String(commands, com_num) + &#8221; is now &#8221; + (string)((integer)accel));<br />
}<br />
else<br />
{<br />
llSay(0, llList2String(commands, com_num) + &#8221; is currently &#8221; + (string)((integer)accel));<br />
}<br />
}<br />
else if(com_num == 6) //current pos<br />
{<br />
vector pos = llGetPos();<br />
llSay(0, &#8220;&lt;&#8221; + (string)((integer)pos.x) + &#8220;, &#8221; + (string)((integer)pos.y) + &#8220;, &#8221; + (string)((integer)pos.z) + &#8220;&gt;&#8221;);<br />
}<br />
else if(com_num == 7) //Acceleration mode<br />
{<br />
if((message == &#8220;off&#8221;) || (message == &#8220;on&#8221;))<br />
{<br />
accelmode = true_false(message);<br />
llSay(0, llList2String(commands, com_num) + &#8221; is now &#8221; + message);<br />
}<br />
else<br />
{<br />
llSay(0, llList2String(commands, com_num) + &#8221; is currently &#8221; + on_off(accelmode));<br />
}<br />
}<br />
else if(com_num == <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> //Turning mode<br />
{<br />
if((message == &#8220;off&#8221;) || (message == &#8220;on&#8221;))<br />
{<br />
turnmode = true_false(message);<br />
llSay(0, llList2String(commands, com_num) + &#8221; is now &#8221; + message);<br />
}<br />
else<br />
{<br />
llSay(0, llList2String(commands, com_num) + &#8221; is currently &#8221; + on_off(turnmode));<br />
}<br />
}<br />
else if(com_num == 9) //Hover Mode<br />
{<br />
if((message == &#8220;off&#8221;) || (message == &#8220;on&#8221;))<br />
{<br />
hovermode = true_false(message);<br />
llSay(0, llList2String(commands, com_num) + &#8221; is now &#8221; + message);<br />
}<br />
else<br />
{<br />
llSay(0, llList2String(commands, com_num) + &#8221; is currently &#8221; + on_off(hovermode));<br />
}</font></p>
<p><font color="#ff6600">}<br />
else if(com_num == 10) //Position display mode<br />
{<br />
if((message == &#8220;off&#8221;) || (message == &#8220;on&#8221;))<br />
{<br />
posmode = true_false(message);<br />
llSay(0, llList2String(commands, com_num) + &#8221; is now &#8221; + message);<br />
}<br />
else<br />
{<br />
llSay(0, llList2String(commands, com_num) + &#8221; is currently &#8221; + on_off(posmode));<br />
}<br />
}<br />
}</font></p>
<p><font color="#ff6600">//Check for flight and altitude for hover<br />
set_flight()<br />
{<br />
vector pos = llGetPos();<br />
float ground = llGround(&lt;0,0,0&gt;);<br />
if(llGetAgentInfo(llGetOwner()) &amp; AGENT_FLYING)<br />
{<br />
move = 1;<br />
if(hovermode &amp;&amp; ((pos.z &gt; 55) &amp;&amp; (pos.z &gt; (ground + 35))))<br />
{<br />
llSetForce(&lt;0,0,9.8&gt; * llGetMass(), FALSE);<br />
}<br />
else<br />
{<br />
llSetForce(&lt;0,0,0&gt;, FALSE);<br />
}<br />
}<br />
else<br />
{<br />
move = 0;<br />
llSetForce(&lt;0,0,0&gt;, FALSE);<br />
}<br />
// Display position over object if position mode is on<br />
if(posmode)<br />
{<br />
llSetText(&#8220;&lt;&#8221; + (string)((integer)pos.x) + &#8220;, &#8221; + (string)((integer)pos.y) + &#8220;, &#8221; + (string)((integer)pos.z) + &#8220;&gt; \n \n \n&#8221;, &lt;1,1,1&gt;, 1);<br />
}<br />
else<br />
{<br />
llSetText(&#8220;&#8221;, &lt;0,0,0&gt;, 0);<br />
}<br />
}</font></p>
<p><font color="#ff6600">//Handle Listen Messages<br />
listen_handler(string message)<br />
{<br />
list lst_msg = llParseString2List(message, [" "],[]);<br />
if(llList2String(lst_msg, 0) == llList2String(commands, 0))<br />
{<br />
wait_for_conf = FALSE;<br />
if(llList2String(lst_msg, 1) == &#8220;help&#8221;)   //If help pass to help<br />
{<br />
help();<br />
}<br />
//If customize pass to customize<br />
else if(llList2String(lst_msg, 1) == &#8220;customize&#8221;)<br />
{<br />
customize(llList2String(lst_msg, 2), llList2String(lst_msg, 3));<br />
}<br />
//If reset reset script<br />
else if(llList2String(lst_msg, 1) == &#8220;reset&#8221;)<br />
{<br />
llSay(0, &#8220;Reseting Script&#8221;);<br />
llResetScript();<br />
}<br />
//Pass to command handler if a command<br />
else<br />
{<br />
integer listpos = llListFindList(commands, llList2List(lst_msg, 1, 1));<br />
if(listpos != -1)<br />
{<br />
com_handle(listpos, llList2String(lst_msg, 2));<br />
}<br />
}<br />
}<br />
//If Response to customize, confirm<br />
else if((llList2String(lst_msg, 0) == &#8220;yes&#8221;) &amp;&amp; wait_for_conf)<br />
{<br />
llSay(0, &#8220;Changing command to &#8221; + temp_newcommand);<br />
commands = llDeleteSubList(commands, temp_newcom_pos, temp_newcom_pos);<br />
commands = llListInsertList(commands, [temp_newcommand], temp_newcom_pos);<br />
}<br />
else<br />
{<br />
wait_for_conf = FALSE;<br />
}<br />
}</font></p>
<p><font color="#ff6600">control_handler(integer levels, integer edges)<br />
{<br />
test_move =TRUE;<br />
accel_count ++;<br />
if(accel_count &gt; accel)<br />
{<br />
accel_count = accel;<br />
}<br />
float acc_percent = 1;<br />
if(accelmode)<br />
{<br />
accel_count ++;<br />
if(accel_count &gt; accel)<br />
{<br />
accel_count = accel;<br />
}<br />
acc_percent = accel_count / accel;<br />
}<br />
float turning = 1;<br />
vector impulse = &lt;0,0,0&gt;;<br />
if (levels &amp; CONTROL_UP)<br />
{<br />
impulse += &lt;0,0,speed&gt;;<br />
}<br />
if (levels &amp; CONTROL_DOWN)<br />
{<br />
impulse += &lt;0,0,-speed&gt;;<br />
}<br />
if (levels &amp; CONTROL_FWD)<br />
{<br />
impulse += &lt;speed,0,0&gt;;<br />
}<br />
if (levels &amp; CONTROL_BACK)<br />
{<br />
impulse += &lt;-speed,0,0&gt;;<br />
}<br />
if (levels &amp; CONTROL_LEFT)<br />
{<br />
impulse += &lt;0,speed,0&gt;;<br />
}<br />
if (levels &amp; CONTROL_RIGHT)<br />
{<br />
impulse += &lt;0,-speed,0&gt;;<br />
}<br />
if (levels &amp; CONTROL_ROT_RIGHT)<br />
{<br />
if(turnmode)<br />
{<br />
turning = 0;<br />
}<br />
}<br />
if (levels &amp; CONTROL_ROT_LEFT)<br />
{<br />
if(turnmode)<br />
{<br />
turning = 0;<br />
}<br />
}<br />
llApplyImpulse((vector)(impulse * move * turning * acc_percent), TRUE);<br />
}</font></p>
<p><font color="#ff6600">//Default State, sets up basic listens, and events<br />
default<br />
{<br />
state_entry()<br />
{<br />
get_controls();<br />
}</font></p>
<p><font color="#ff6600">on_rez(integer param)<br />
{<br />
get_controls();<br />
}</font></p>
<p><font color="#ff6600">listen(integer channel, string name, key id, string message)<br />
{<br />
listen_handler(message);<br />
}</font></p>
<p><font color="#ff6600">control(key id, integer levels, integer edges)<br />
{<br />
control_handler(levels, edges);<br />
}</font></p>
<p><font color="#ff6600">timer()<br />
{<br />
set_flight();<br />
if(!test_move)<br />
{<br />
accel_count = -1;<br />
}<br />
test_move = FALSE;<br />
}</font></p>
<p><font color="#ff6600">//Detect touch, if not owner then give info. If owner display help.<br />
touch(integer total_touched)<br />
{<br />
integer a = 0;<br />
key toucher;<br />
for(a = 0; a &lt; total_touched; a++)<br />
{<br />
toucher = llDetectedKey(a);<br />
if(toucher == llGetOwner())<br />
{<br />
llGiveInventory(toucher, notehelp);<br />
llSay(0, &#8220;Please type &#8216;&#8221; + llList2String(commands, 0) + &#8221; help&#8217; for more help with commands&#8221;);<br />
}<br />
else<br />
{<br />
llGiveInventory(toucher, notecard);<br />
}<br />
}<br />
}</font></p>
<p><font color="#ff6600">//Detect if permission to take controls is enabled<br />
run_time_permissions(integer permissions)<br />
{<br />
if (llGetPermissions() &amp; PERMISSION_TAKE_CONTROLS)<br />
{<br />
llSay(0, &#8220;All Go&#8221;);<br />
llTakeControls(CONTROL_DOWN|CONTROL_UP|CONTROL_FWD|CONTROL_BACK|CONTROL_LEFT|CONTROL_RIGHT|CONTROL_ROT_LEFT|CONTROL_ROT_RIGHT, TRUE, TRUE);<br />
}<br />
}<br />
}</font></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/totemgufler.wordpress.com/25/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/totemgufler.wordpress.com/25/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/totemgufler.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/totemgufler.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/totemgufler.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/totemgufler.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/totemgufler.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/totemgufler.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/totemgufler.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/totemgufler.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/totemgufler.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/totemgufler.wordpress.com/25/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=25&subd=totemgufler&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://totemgufler.wordpress.com/2008/03/26/x-flight-flight-assist/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1f344a0e2440aaba172145eae4f7c646?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">totemgufler</media:title>
		</media:content>
	</item>
		<item>
		<title>Invisiprim</title>
		<link>http://totemgufler.wordpress.com/2008/03/26/invisiprim/</link>
		<comments>http://totemgufler.wordpress.com/2008/03/26/invisiprim/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 00:35:59 +0000</pubDate>
		<dc:creator>totemgufler</dc:creator>
				<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Second Life]]></category>

		<guid isPermaLink="false">http://totemgufler.wordpress.com/?p=24</guid>
		<description><![CDATA[This is the only working invisiprim script I have found. Retrieved from LSL Wiki. Just add it to an object and the object will become an avatar hiding invisiprim!

///////Created by Joker Opus, November 8th//////
//Feel free to mod this, do not steal//
default
{
state_entry()
{
key owner = llGetOwner();
llListen(0,&#8221;",owner,&#8221;");
llSetTexture(&#8220;38b86f85-2575-52a9-a531-23108d8da837&#8243;, ALL_SIDES);
llSetTexture(&#8220;e97cf410-8e61-7005-ec06-629eba4cd1fb&#8221;, ALL_SIDES);                     //This is all the textures and functions that formulate [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=24&subd=totemgufler&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This is the only working invisiprim script I have found. Retrieved from <a href="http://www.lslwiki.org" target="_blank">LSL Wiki</a>. Just add it to an object and the object will become an avatar hiding invisiprim!</p>
<p><span id="more-24"></span></p>
<p><font color="#ff6600">///////Created by Joker Opus, November 8th//////<br />
//Feel free to mod this, do not steal//</p>
<p>default<br />
{<br />
state_entry()<br />
{<br />
key owner = llGetOwner();<br />
llListen(0,&#8221;",owner,&#8221;");<br />
llSetTexture(&#8220;38b86f85-2575-52a9-a531-23108d8da837&#8243;, ALL_SIDES);<br />
llSetTexture(&#8220;e97cf410-8e61-7005-ec06-629eba4cd1fb&#8221;, ALL_SIDES);                     //This is all the textures and functions that formulate the invisiprim<br />
llSetPrimitiveParams([PRIM_BUMP_SHINY, ALL_SIDES, PRIM_SHINY_NONE, PRIM_BUMP_BRIGHT]);<br />
llOffsetTexture(0.468, 0.0, ALL_SIDES);<br />
llScaleTexture(0.0, 0.0, ALL_SIDES);<br />
llSetAlpha(1.0, ALL_SIDES);<br />
llSetTimerEvent(5);<br />
}<br />
listen(integer channel, string name, key id, string msg)<br />
{<br />
if( msg== &#8220;uncloak&#8221; )<br />
{                                          //When you say uncloak, it will go back to a non-invisiprim.<br />
llSetTexture(&#8220;4c1ce202-4196-f1c1-0409-367b3a71543e&#8221;, ALL_SIDES);<br />
}<br />
}<br />
}</font></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/totemgufler.wordpress.com/24/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/totemgufler.wordpress.com/24/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/totemgufler.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/totemgufler.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/totemgufler.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/totemgufler.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/totemgufler.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/totemgufler.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/totemgufler.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/totemgufler.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/totemgufler.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/totemgufler.wordpress.com/24/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=24&subd=totemgufler&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://totemgufler.wordpress.com/2008/03/26/invisiprim/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1f344a0e2440aaba172145eae4f7c646?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">totemgufler</media:title>
		</media:content>
	</item>
		<item>
		<title>Calculator Script</title>
		<link>http://totemgufler.wordpress.com/2008/03/26/calculator-script/</link>
		<comments>http://totemgufler.wordpress.com/2008/03/26/calculator-script/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 00:31:17 +0000</pubDate>
		<dc:creator>totemgufler</dc:creator>
				<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Second Life]]></category>

		<guid isPermaLink="false">http://totemgufler.wordpress.com/2008/03/26/calculator-script/</guid>
		<description><![CDATA[Note: I did not make this script, Zindorf Yossarian did. Stick the script in an object and start calculating!

// Calculator
// By Zindorf Yossarian    (Please include my name with any version of this script &#8211; I worked hard on it.)
//
// CAPABILITES
//
//  My aim with this calculator was to make it capable of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=23&subd=totemgufler&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Note: I did not make this script, Zindorf Yossarian did. Stick the script in an object and start calculating!</p>
<p><span id="more-23"></span></p>
<p><font color="#ff6600">// Calculator<br />
// By Zindorf Yossarian    (Please include my name with any version of this script &#8211; I worked hard on it.)<br />
//<br />
// CAPABILITES<br />
//<br />
//  My aim with this calculator was to make it capable of most of the basic functions of a scientific calculator. Its capablilies are as follows:<br />
//    Basics: All the functions addition, subtraction, multiplication, division, exponents, and radicals are supported, as well as negative numbers.<br />
//    Parentheses: Any number of parentheses may be used in an expression.<br />
//    Trigonometry: Sine, Cosine, Tangent, Arcsine, Arccosine, and Arctangent are supported.<br />
//    Angle modes: Answers can computed using degrees or radians.<br />
//    pi and e are preset constants, and can be used in your expressions.<br />
//    Variables: The user can define and use variables.<br />
//    Answer Memory: The calculator will remember the answer to the last problem, and the term &#8220;ans&#8221; can be used in the next expression to refer to the last answer.<br />
//<br />
// USING THE CALCULATOR<br />
//<br />
//  To compute an expression, type the expression, followed by an equals &#8220;=&#8221; sign. Spacing does not matter.<br />
//      ex. &#8220;2+2 =&#8221; will return 4.  &#8220;3^3 =&#8221; will return 9.  &#8220;3*(4/-2)=&#8221; will return -6.<br />
//  For radicals, use sqrt. It will take the square root of the value directly following it.<br />
//      ex. &#8220;sqrt 4 =&#8221; will return 2.  &#8220;sqrt (20*5) =&#8221; will return 10.<br />
//  Trigonometric functions too will use the value directly following it.<br />
//  The trigonometric functions this calculator uses are sin, cos, tan, asin, acos, &amp; atan.<br />
//  asin, acos, and atan are arcfunctions, or 1/sin, 1/cos, and 1/tan. They are the opposite of the sin, cos, and tan.<br />
//      ex. &#8220;sin 90 =&#8221; will return 1. &#8220;tan 45 =&#8221; will return 1. &#8220;atan(tan 30) =&#8221; will return 30.<br />
//  Angle mode can be toggled between degree and radian mode. To change the mode, say &#8220;degree mode&#8221; or &#8220;radian mode&#8221;.<br />
//  The default mode is degree.<br />
//  To store variable, say &#8220;store&#8221;, followed by the desired variable name, followed by the equals &#8220;=&#8221; sign, followed by the desired variable value.<br />
//  The variable name will appear in hovertext, followed by its value. You may also use mathematical expressions to define variables.<br />
//      ex. &#8220;store foo = 6&#8243; will store foo as six, for later use. Text will appear with &#8220;foo = 6&#8243;.<br />
//          you may then use foo in an expression: &#8220;foo ^ 2 =&#8221; will return 36.<br />
//          then you may say, &#8220;store bar = foo + 3&#8243;. bar will be stored as 9, and the text will add another line with &#8220;bar = 9&#8243;.<br />
//  To delete a variable, say &#8220;delete&#8221; follwed by the variable name.<br />
//</font></p>
<p><font color="#ff6600">list storedVariables = ["ans", 0, "pi", 3.141593, "e", 2.718282]; // This list is used to store the user-defined variables, and always has three variables for<br />
// the last answer &#8220;ans&#8221; variable, pi, and e. It is strided, so it has the variable name followed by that variable&#8217;s<br />
// value in the list. For now, the value of &#8220;ans&#8221; is 0, but it will change when expressions are solved.</font></p>
<p><font color="#ff6600">list variableNames = ["ans", "pi", "e"]; // This list holds only the names of the user-defined variables, as well as &#8220;ans&#8221;. It does not include their values.<br />
integer angleMode = 1; // angleMode can be either 1 or 0, 1 being degrees mode, and 0 being radian mode. For now we are in degree mode.</font></p>
<p><font color="#ff6600">debug(string debugInput)    // This function exists as a convienient way to debug the script.<br />
{                           // All you need to do is pass a string to it, and it will say the string to the owner.<br />
llOwnerSay(debugInput); // This is preferable to many decentralized ownersays, because with this you can stop<br />
}                           // the debugs by commenting out one line.</font></p>
<p><font color="#ff6600">update_text() // This function updates the hovertext which displays your variables.<br />
{<br />
list unstridedVars; // This list will hold in each entry a string consisting of the variable name, then an equals sign, then the value. We use this list for<br />
// setting the hovertext that tells the value of each variable.<br />
integer indexCounter; // The indexCounter is used as we scan the strided storedVariables list, and put the names of the variables into the unstridedVars list.</font></p>
<p><font color="#ff6600">// We start this loop with the counter at 6, the index in the storedVariables list where the first user-defined variable name is. (remember the first six entries<br />
// are for stored answers and constants) the counter is incremented by 2 each time, so that we go to the next name in the strided list, and skip the numbers.<br />
for (indexCounter = 6; indexCounter &lt; llGetListLength(storedVariables); indexCounter = indexCounter + 2)<br />
{<br />
// We get a list comprising of the variable name and the value after it from the storedVariables list, which is made elsewhere.<br />
// Then we convert those two name and value entries to a string, and insert an &#8220;=&#8221; between them.<br />
// That string with &#8220;name = value&#8221; is added to the unstridedVars list.<br />
unstridedVars += [llDumpList2String(llList2List(storedVariables, indexCounter, indexCounter + 1), " = ")];</font></p>
<p><font color="#ff6600">// Remember that list just for holding the variable names? Here&#8217;s where we put in all those names. First we reset the list to get rid of old, possibly deleted names.<br />
variableNames = ["ans", "pi", "e"];<br />
// Now that we have a nice clean slate, we just grab the variable name entry from the storedVariables list, and add it to the variableNames list.<br />
variableNames += llList2List(storedVariables, indexCounter, indexCounter);<br />
}</font></p>
<p><font color="#ff6600">// Finally, the loop finishes, so we can display our variables. The unstridedVars list (with the &#8220;name = value&#8221; strings) is converted into a string, and &#8220;\n&#8221; newlines are<br />
// inserted to put each variable on its own line.<br />
llSetText(llDumpList2String(unstridedVars, &#8220;\n&#8221;) + &#8220;\n \n \n &#8220;, &lt;.7, 0, 0&gt;, 1);</font></p>
<p><font color="#ff6600">// &#8220;What about the variableNames list?&#8221;, you ask, &#8220;You never used it!&#8221; Don&#8217;t worry, we just piggybacked off of this function to set it up. It&#8217;s used a bit later, in both<br />
// the solving_initiator and the variables_handler functions.<br />
}</font></p>
<p><font color="#ff6600">// Here is where it all begins. When the calculator recognizes some speech as a mathematical expression being put in, that expression gets sent here, in raw string form.<br />
list solving_initiator(string initiatorInput)<br />
{<br />
// First things first. We have to convert that big string to something the calculator can understand, like a list. llParseString2List is perfect for this. We can<br />
// look at our string, and make list entries for each mathy thing, while throwing out spaces. But due to some limitations in the number of things the function can parse<br />
// a string into all at once, we divide this parsing business into three parts, converting to strings in between each parsing.</font></p>
<p><font color="#ff6600">// The first think that gets put into list form is the variables. We parse the string, throwing out nothing, and list-o-fying all the variable names.<br />
list math = llParseString2List(initiatorInput, [], variableNames);<br />
// Now our list probably looks something like this: ["mathy stuff, like 6+2 * sin 3", "some variable name NOT its value.", "some more mathy stuff", "another variable name"]</font></p>
<p><font color="#ff6600">// The list is put into the variables_handler function, which converts all the variable names to their numerical values. That list is then made into a string, with &#8220;, &#8220;<br />
// between each element.<br />
string CSVmath = llList2CSV(variables_handler(math));<br />
// And we parse the string again, this time for operators and parenthesis. And we throw out commas, spaces, and that equals sign you put at the end of the expression.<br />
math = llParseString2List(CSVmath, [",", " ","="], ["(", ")", "+", "-", "*", "/", "^"]);<br />
// Now the list looks like this: ["number", "operator", "another number", "another operator", "a variable"]<br />
CSVmath = llList2CSV(math); // Again, the list is converted to a string with &#8220;, &#8221; between each element.<br />
// Now for the final parsing, for all the trigonometric functions.<br />
math = llParseString2List(CSVmath, [",", " ", "="], ["sqrt", "asin", "acos", "atan", "sin", "cos", "tan"]);</font></p>
<p><font color="#ff6600">// Yay! we have a list with all the the parts of the expression separated, and with actual numbers instead of variable names.<br />
// It&#8217;s time to do some math.</font></p>
<p><font color="#ff6600">// We look for parenthesis in the math list. If there are parentheses, we need to deal with them. If not, we can skip a step and just do the math.<br />
if(llListFindList(math, ["("]) != -1)<br />
{<br />
// Yes, there are parenthesis. Go to the parentheses_handler function, and save whatever it spits back.<br />
math = parentheses_handler(math);<br />
}<br />
else<br />
{<br />
// Nope, no parenthesis. Go to the math_handler function, and save whatever it spits back.<br />
math = math_handler(math);<br />
}</font></p>
<p><font color="#ff6600">return math; // Finally, return that math list. By now, it should be only one number: The solution.<br />
}</font></p>
<p><font color="#ff6600">// This function is for finding the variable names in a list, and replacing them with their value. The function is always called from the solving_initiator,<br />
// and is supplied with a list with the variable names parsed out. You will notice that through this function, I just modify the input variable, variablesInput,<br />
// until it is what I want to output. Yes, I know this is kinda lame, since most the time it isn&#8217;t really the input, but why waste extra variables when you already<br />
// have a perfectly good one. I do this a lot with input variables, so be aware of it.<br />
list variables_handler(list variablesInput)<br />
{<br />
integer tempInteger; // We use this mostly in the for loop, to look at each part of the input list, checking for variables.<br />
// The loop will consecutively go through each element in the input list.<br />
for (tempInteger = 0; tempInteger &lt; llGetListLength(variablesInput); tempInteger ++)<br />
{<br />
// We look for the current element in the input list, checking to see whether it is in the variables list.<br />
// llListFindList returns -1 if the thing looked for does not exist.<br />
integer tempIndex = llListFindList(variableNames, llList2List(variablesInput, tempInteger, tempInteger));<br />
if (tempIndex != -1)<br />
{<br />
// The index was not -1, so there was a variable! Replace the name with its value.<br />
variablesInput = llListReplaceList(variablesInput, llList2List(storedVariables, tempIndex*2 + 1, tempIndex*2 + 1), tempInteger, tempInteger);<br />
}<br />
}</font></p>
<p><font color="#ff6600">// The entire input list has been scanned through, so we return the result to the solving_initiator.<br />
return variablesInput;<br />
}</font></p>
<p><font color="#ff6600">// The parentheses_handler. It is the backbone of this calculator, and also happens to be the most complicated part. It systematically goes through the expression,<br />
// finding sets of parentheses, and handing the contents of them over to the math_handler to be solved. The answer it gets from the math_handler then replaces that<br />
// set of parentheses, and it looks for the next set. This is called from the solving_initiator, and takes a fully parsed list with the mathematical expression.<br />
list parentheses_handler(list parenInput)<br />
{<br />
while (TRUE) // We just keep going through this loop over and over until all the parentheses are gone.<br />
{<br />
// We find the index of the first forward parentheses, and the first backward parentheses.<br />
integer forwardParenIndex = llListFindList(parenInput, ["("]);<br />
integer backwardParenIndex = llListFindList(parenInput, [")"]);<br />
if (forwardParenIndex != -1 &amp;&amp; forwardParenIndex &lt; backwardParenIndex) // If a forward parenthesis occurs before the backward one.<br />
{<br />
// This finds the backwards parentheses opposite to the forward one.<br />
integer corrParenIndex = corresponding_paren_finder(parenInput, forwardParenIndex, backwardParenIndex);</font></p>
<p><font color="#ff6600">// Everything after the forward parentheses is sent to the parentheses_handler, and the result, which will be a single number,  is put into the original<br />
// list, in place of the set of parentheses. Yes, this does call upon itself. Another copy of itself. And that copy might call on another copy, and so on.<br />
// But each time, everything before the first forward parentheses, and the forward parentheses itself is cut off. Eventually, the backwards<br />
// parentheses will come first, or there will be no more forward parentheses. And then that bit of math inside the parentheses is solved, and returned.<br />
// And the next copy solves and returns and the next copy solves and returns until we are all the way back here. If all that hurts your head, don&#8217;t worry:<br />
// It hurts mine too.<br />
parenInput = llListReplaceList(parenInput, parentheses_handler(llList2List(parenInput, forwardParenIndex + 1, -1)), forwardParenIndex, corrParenIndex);<br />
}</font></p>
<p><font color="#ff6600">else if (backwardParenIndex != -1 &amp;&amp; (forwardParenIndex == -1 || forwardParenIndex &gt; backwardParenIndex)) // There is a backward parentheses, and it is either in<br />
{                                                                                                         // front of the forward one, or there is no forward one.<br />
parenInput = llDeleteSubList(parenInput, backwardParenIndex, -1); // Everything behind and including the backwards parenthesses is deleted.<br />
}<br />
else // If neither of the above two ifs are true, there are no parenthesis. The list is now ripe for the solving.<br />
{<br />
parenInput = math_handler(parenInput); // And solved it is, with the math_handler.<br />
return parenInput; // The solved thing is returned. It should be a single number.<br />
}<br />
}</font></p>
<p><font color="#ff6600">return ["Something really exploded here."]; // This is just here for the compiler. Obviously, it will never get triggered, there is an &#8220;always&#8221; loop just above it!<br />
}</font></p>
<p><font color="#ff6600">// This function takes a list with a forward parentheses, and finds the backward one that corresponds, then returns the corresponding parentheses&#8217; index.<br />
// It is also passed the forward and backward parentheses indexes, as found in the parentheses_handler.<br />
integer corresponding_paren_finder(list corrParenInput, integer forwardParenIndex, integer backwardParenIndex)<br />
{<br />
// Since llListFindList only gets the index of the first occurance of something, like our parentheses, we need to replace those parentheses with something else,<br />
// so we can find the next one. Here, we replace forward parentheses with &#8220;f&#8221; and backwards ones with &#8211; you guessed it! &#8211; &#8220;b&#8221;. So let&#8217;s replace the first forward<br />
// parentheses with an &#8220;f&#8221;&#8230;<br />
corrParenInput = llListReplaceList(corrParenInput, ["f"], forwardParenIndex, forwardParenIndex);<br />
forwardParenIndex = llListFindList(corrParenInput, ["("]); // &#8230; and find the next one.<br />
integer level = 0; // &#8220;level&#8221; is used to keep track of the level or layer of parenthesis we are in, in case parentheses are nested.<br />
do<br />
{<br />
if (forwardParenIndex != -1 &amp;&amp; forwardParenIndex &lt; backwardParenIndex) // There is a forward parentheses, and it comes before the backward one. There is a<br />
{                                                                      // nested set of parenthesis!<br />
corrParenInput = llListReplaceList(corrParenInput, ["f"], forwardParenIndex, forwardParenIndex); // Replace that forward parentheses with &#8220;f&#8221;&#8230;<br />
forwardParenIndex = llListFindList(corrParenInput, ["("]); // &#8230; find the next forward parentheses&#8230;<br />
level ++; // &#8230; and increase the level<br />
}<br />
else if (level &gt; 0 &amp;&amp; (forwardParenIndex == -1 || backwardParenIndex &lt; forwardParenIndex)) // There is a backwards parenthesis before any forward ones, and<br />
{                                                                                          // the level is greater than 0. We need to check the level so that if<br />
// this is the last backwards parentheses we don&#8217;t replace it, thereby<br />
// losing the index.<br />
corrParenInput = llListReplaceList(corrParenInput, ["b"], backwardParenIndex, backwardParenIndex); // Replace the parentheses with a &#8220;b&#8221;&#8230;<br />
backwardParenIndex = llListFindList(corrParenInput, [")"]); // &#8230; find the next one&#8230;<br />
level &#8211;; // &#8230; and decrease the level.<br />
}<br />
} while (level &gt; 0); // Now, after all that is done, the level is checked. If is is more than zero, it repeats, or else it breaks from the loop.</font></p>
<p><font color="#ff6600">return(llListFindList(corrParenInput, [")"])); // Return the index of the corresponding backwards parentheses.<br />
}</font></p>
<p><font color="#ff6600">// Ahh, the math_handler! So good for doing&#8230; math. This will take a list, which is by now free of parenthesis and variables, and is just numbers and operators,<br />
// and computes the expression&#8217;s value, using the proper order of operations.<br />
list math_handler(list mathInput)<br />
{<br />
integer tempIndex; // tempIndex is used a lot, in the many &#8220;for&#8221; loops here, as the index of an operator.<br />
float tempSolution; // the solution to each small bit of the expression is put here for about .001 seconds, and then is moved into the main mathInput list, which<br />
// slowly but surely gets solved.</font></p>
<p><font color="#ff6600">// Each part of the math_handler represents a different calculator function. They all use &#8220;for&#8221; loops to check for the existence and location of the operator<br />
// or trig function. Many are almost exactly similar to each other. The stuff inside the loop will only happen if the operator it is looking for exists.</font></p>
<p><font color="#ff6600">// negatives &#8211; this looks for each &#8220;-&#8221;, and then checks out what comes before it to see whether it should be a negative number or a minus sign.<br />
for (tempIndex = llListFindList(mathInput, ["-"]); tempIndex != -1; tempIndex = llListFindList(mathInput, ["-"]))<br />
{<br />
// If the &#8220;-&#8221; appears before anything else, or an operator appears before it, it must be a negative.<br />
if (tempIndex == 0 || -1 != llListFindList(["(", "*", "/", "^", "sqrt", "sin", "cos", "tan", "asin", "acos", "atan", "+", "-"], llList2List(mathInput, tempIndex &#8211; 1, tempIndex &#8211; 1)))<br />
{<br />
tempSolution = (-1 * (float)llList2String(mathInput, tempIndex + 1)); // So multiply the number after the &#8220;-&#8221; by negative one&#8230;<br />
mathInput = llListReplaceList(mathInput, [tempSolution], tempIndex, tempIndex + 1); // &#8230; and replace both the &#8220;-&#8221; and the number with that negative.<br />
}<br />
else // It&#8217;s a minus sign, but we still replace it with &#8220;m&#8221;, to distinguish it from negatives. Remember, that &#8220;for&#8221; loop checks for &#8220;-&#8221; each time. If we don&#8217;t<br />
{    // replace the &#8220;-&#8221; with something else, it will loop endlessly.<br />
mathInput = llListReplaceList(mathInput, ["m"], tempIndex, tempIndex);<br />
}<br />
}<br />
// sines<br />
for (tempIndex = llListFindList(mathInput, ["sin"]); tempIndex != -1; tempIndex = llListFindList(mathInput, ["sin"]))<br />
{<br />
// This is a compressed if/else statement, to save space. It uses an if/else to provide an answer in radians or degrees, depending on the mode.<br />
// If the value of mode is 1, then input is converted to degrees before being processed. Or, if mode equals 0, no conversion occurs.<br />
// The sin of the list element after the &#8220;sin&#8221; in the list is found, and that answer is put into the mathInput list. The next 5 trig functions<br />
// are all roughly the same, so I won&#8217;t bother explaining them.<br />
if (angleMode) { tempSolution = llSin((float)llList2String(mathInput, tempIndex + 1) * DEG_TO_RAD); }<br />
else { tempSolution = llSin((float)llList2String(mathInput, tempIndex + 1)); }<br />
mathInput = llListReplaceList(mathInput, [tempSolution], tempIndex, tempIndex + 1);<br />
}<br />
// cosines<br />
for (tempIndex = llListFindList(mathInput, ["cos"]); tempIndex != -1; tempIndex = llListFindList(mathInput, ["cos"]))<br />
{<br />
if (angleMode) { tempSolution = llCos((float)llList2String(mathInput, tempIndex + 1) * DEG_TO_RAD); }<br />
else { tempSolution = llCos((float)llList2String(mathInput, tempIndex + 1)); }<br />
mathInput = llListReplaceList(mathInput, [tempSolution], tempIndex, tempIndex + 1);<br />
}<br />
// tangents<br />
for (tempIndex = llListFindList(mathInput, ["tan"]); tempIndex != -1; tempIndex = llListFindList(mathInput, ["tan"]))<br />
{<br />
if (angleMode) { tempSolution = llTan((float)llList2String(mathInput, tempIndex + 1) * DEG_TO_RAD); }<br />
else { tempSolution = llTan((float)llList2String(mathInput, tempIndex + 1)); }<br />
mathInput = llListReplaceList(mathInput, [tempSolution], tempIndex, tempIndex + 1);<br />
}<br />
// arcsines<br />
for (tempIndex = llListFindList(mathInput, ["asin"]); tempIndex != -1; tempIndex = llListFindList(mathInput, ["asin"]))<br />
{<br />
if (angleMode) { tempSolution = llAsin((float)llList2String(mathInput, tempIndex + 1))  * RAD_TO_DEG; }<br />
else { tempSolution = llAsin((float)llList2String(mathInput, tempIndex + 1)); }<br />
mathInput = llListReplaceList(mathInput, [tempSolution], tempIndex, tempIndex + 1);<br />
}<br />
// arccosines<br />
for (tempIndex = llListFindList(mathInput, ["acos"]); tempIndex != -1; tempIndex = llListFindList(mathInput, ["acos"]))<br />
{<br />
if (angleMode) { tempSolution = llAcos((float)llList2String(mathInput, tempIndex + 1))  * RAD_TO_DEG; }<br />
else { tempSolution = llAcos((float)llList2String(mathInput, tempIndex + 1)); }<br />
mathInput = llListReplaceList(mathInput, [tempSolution], tempIndex, tempIndex + 1);<br />
}<br />
// arctangents<br />
for (tempIndex = llListFindList(mathInput, ["atan"]); tempIndex != -1; tempIndex = llListFindList(mathInput, ["atan"]))<br />
{<br />
if (angleMode) { tempSolution = llAtan2((float)llList2String(mathInput, tempIndex + 1), 1)  * RAD_TO_DEG; }<br />
else { tempSolution = llAtan2((float)llList2String(mathInput, tempIndex + 1), 1); }<br />
mathInput = llListReplaceList(mathInput, [tempSolution], tempIndex, tempIndex + 1);<br />
}<br />
// squareroots<br />
for (tempIndex = llListFindList(mathInput, ["sqrt"]); tempIndex != -1; tempIndex = llListFindList(mathInput, ["sqrt"]))<br />
{<br />
tempSolution = llSqrt((float)llList2String(mathInput, tempIndex + 1));              // This finds the squareroot of the number after &#8220;sqrt&#8221;,<br />
mathInput = llListReplaceList(mathInput, [tempSolution], tempIndex, tempIndex + 1); // and puts it into the mathInput list.<br />
}<br />
// exponents<br />
for (tempIndex = llListFindList(mathInput, ["^"]); tempIndex != -1; tempIndex = llListFindList(mathInput, ["^"]))<br />
{<br />
tempSolution = llPow((float)llList2String(mathInput, tempIndex &#8211; 1) , (float)llList2String(mathInput, tempIndex + 1)); // This finds the number before &#8220;^&#8221;<br />
mathInput = llListReplaceList(mathInput, [tempSolution], tempIndex &#8211; 1, tempIndex + 1);                                // to the power of the number after,<br />
}                                                                                                                          // and puts it into the mathInput list.<br />
// multiplication<br />
for (tempIndex = llListFindList(mathInput, ["*"]); tempIndex != -1; tempIndex = llListFindList(mathInput, ["*"]))<br />
{<br />
tempSolution = (float)llList2String(mathInput, tempIndex &#8211; 1) * (float)llList2String(mathInput, tempIndex + 1); // Multiplies the number before &#8220;*&#8221;<br />
mathInput = llListReplaceList(mathInput, [tempSolution], tempIndex &#8211; 1, tempIndex + 1);                         // by the number after, and puts it into<br />
}                                                                                                                   // the mathInput list.<br />
// division<br />
for (tempIndex = llListFindList(mathInput, ["/"]); tempIndex != -1; tempIndex = llListFindList(mathInput, ["/"]))<br />
{<br />
tempSolution = (float)llList2String(mathInput, tempIndex &#8211; 1) / (float)llList2String(mathInput, tempIndex + 1); // Follows the same format as multiplication<br />
mathInput = llListReplaceList(mathInput, [tempSolution], tempIndex &#8211; 1, tempIndex + 1);<br />
}<br />
// addition<br />
for (tempIndex = llListFindList(mathInput, ["+"]); tempIndex != -1; tempIndex = llListFindList(mathInput, ["+"]))<br />
{<br />
tempSolution = (float)llList2String(mathInput, tempIndex &#8211; 1) + (float)llList2String(mathInput, tempIndex + 1);  // Follows the same format as division<br />
mathInput = llListReplaceList(mathInput, [tempSolution], tempIndex &#8211; 1, tempIndex + 1);<br />
}<br />
// subtraction<br />
for (tempIndex = llListFindList(mathInput, ["m"]); tempIndex != -1; tempIndex = llListFindList(mathInput, ["m"]))<br />
{<br />
tempSolution = (float)llList2String(mathInput, tempIndex &#8211; 1) &#8211; (float)llList2String(mathInput, tempIndex + 1);  // Follows the same format as addition<br />
mathInput = llListReplaceList(mathInput, [tempSolution], tempIndex &#8211; 1, tempIndex + 1);<br />
}<br />
// We have now gone through the list and solved everything. There is one number left in the list.<br />
return mathInput;<br />
}</font></p>
<p><font color="#ff6600">// That&#8217;s all the functions. Now into the friendly old default state.<br />
default<br />
{<br />
state_entry()<br />
{<br />
llSetText(&#8220;&#8221;, &lt;0,0,0&gt;, 0); // Clears all hovertext with the variables.<br />
llListen(0, &#8220;&#8221;, llGetOwner(), &#8220;&#8221;); // Listens to the owner.<br />
}<br />
listen(integer channel, string name, key id, string message)<br />
{</font></p>
<p><font color="#ff6600">if (llGetSubString(message, -1, -1) == &#8220;=&#8221;) // If an &#8220;=&#8221; sign comes last in the message, the user wants us to compute something!<br />
{<br />
list math = solving_initiator(message); // Send the message all the way up to the solving_initiator, where it begins its long journey to solvedom.<br />
// After said long journey, the answer is put into the math list.</font></p>
<p><font color="#ff6600">llWhisper(0, llDumpList2String(math, &#8221; &#8220;)); // Whisper the answer. (You could use ownersay, but then you can&#8217;t show off the calculator.)</font></p>
<p><font color="#ff6600">storedVariables = llListReplaceList(storedVariables, [llList2Float(math, 0)], 1, 1); // We just got a new answer, so put that in for the value of &#8220;ans&#8221;</font></p>
<p><font color="#ff6600">}<br />
else if (llGetSubString(message, 0, 4) == &#8220;store&#8221;) // The user wants to store something.<br />
{<br />
integer equalsIndex = llSubStringIndex(message, &#8220;=&#8221;); // Get the index of the equals sign.</font></p>
<p><font color="#ff6600">// Get whatever comes after the equals sign, and solve it. Then store that solution to the variableValue list.<br />
list variableValue = solving_initiator(llGetSubString(message, equalsIndex + 2, -1));<br />
integer tempIndex = llListFindList(storedVariables, [llGetSubString(message, 6, equalsIndex - 2)]); // See if the variable is already stored.<br />
if (tempIndex == -1) // If it is not&#8230;<br />
{<br />
storedVariables = storedVariables + [llGetSubString(message, 6, equalsIndex - 2), llList2String(variableValue, 0)]; // Add the variable and its value to the list.<br />
update_text(); // Update the hovertext. (and the variableNames list too.)<br />
}<br />
else if (tempIndex &gt; 7) // The variable was already in the list, and is not &#8220;ans&#8221; or a constant&#8230;<br />
{<br />
// So we just replace the old value with the new one<br />
storedVariables = llListReplaceList(storedVariables, [llList2String(variableValue, 0)], tempIndex + 1, tempIndex + 1);<br />
}<br />
}<br />
else if (llGetSubString(message, 0, 5) == &#8220;delete&#8221;) // The user wants to delete a variable.<br />
{<br />
integer tempIndex = llListFindList(storedVariables, [llGetSubString(message, 7, -1)]); // Find where that variable is<br />
if (tempIndex &gt; 5) // If the variable is in the list, and is not the answer variable or a constant&#8230;<br />
{<br />
storedVariables = llDeleteSubList(storedVariables, tempIndex, tempIndex + 1); // Delete the name and value of the variable<br />
update_text(); // And update the text and variableNames<br />
}<br />
}<br />
else if (llGetSubString(message, -4, -1) == &#8220;mode&#8221;) // The user wants to change the mode.<br />
{<br />
if (llGetSubString(message, 0, -6) == &#8220;radian&#8221;) // And he wants radian mode.<br />
{<br />
llWhisper(0, &#8220;Calculator set to radian mode.&#8221;); // Acknowledge the change, so the user knows the calculator heard him.<br />
angleMode = 0; // And change the mode integer to 0. Since radians are used by the LSL functions, no conversion will occur<br />
}<br />
else if (llGetSubString(message, 0, -6) == &#8220;degree&#8221;) // He wants degree mode.<br />
{<br />
llWhisper(0, &#8220;Calculator set to degree mode.&#8221;); // Acknowledge the change.<br />
angleMode = 1; // Change the mode integer so that the angles will be converted.<br />
}<br />
}<br />
}<br />
}</font></p>
<p><font color="#ff6600">// Whew! All done commenting.</font></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/totemgufler.wordpress.com/23/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/totemgufler.wordpress.com/23/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/totemgufler.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/totemgufler.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/totemgufler.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/totemgufler.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/totemgufler.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/totemgufler.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/totemgufler.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/totemgufler.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/totemgufler.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/totemgufler.wordpress.com/23/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=23&subd=totemgufler&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://totemgufler.wordpress.com/2008/03/26/calculator-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1f344a0e2440aaba172145eae4f7c646?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">totemgufler</media:title>
		</media:content>
	</item>
		<item>
		<title>The Fall of the Fur Tool</title>
		<link>http://totemgufler.wordpress.com/2008/03/22/the-fall-of-the-fur-tool/</link>
		<comments>http://totemgufler.wordpress.com/2008/03/22/the-fall-of-the-fur-tool/#comments</comments>
		<pubDate>Sun, 23 Mar 2008 01:19:05 +0000</pubDate>
		<dc:creator>totemgufler</dc:creator>
				<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[Second Life]]></category>

		<guid isPermaLink="false">http://totemgufler.wordpress.com/?p=17</guid>
		<description><![CDATA[The Fur Tool, one of the most popular multi-tools on the grid (alongside the NK tool), is just about dead. When I first started SL, I visited the Fur Plateau, where a big sign handed out fur tools for free. Just about everyone on the grid had one, and the NK tool was only just [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=17&subd=totemgufler&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The Fur Tool, one of the most popular multi-tools on the grid (alongside the NK tool), is just about dead. When I first started SL, I visited the Fur Plateau, where a big sign handed out fur tools for free. Just about everyone on the grid had one, and the NK tool was only just appearing on the scene.</p>
<p><span id="more-17"></span></p>
<p>As the creators of the Fur Tool stopped support for the tool and ultimately removed the inventory giver, the Fur Tool lost popularity. It was impossible to get one if you didn&#8217;t already have it, and after the giver was gone for a little while, the only name in multi tools was NK. Half the people on the grid hadn&#8217;t even heard of the Fur Tool.</p>
<p>Now, only a select few SL veterans still have one, mostly as mementos of a time long gone in TSL. The functions on the Fur Tool have been reverse engineered (not really, but that sounds cool), and now there are free, open source multi tools that, though not as elegantly, offer the same features.</p>
<p><a target="_blank" href="http://totemgufler.wordpress.com/2008/03/22/fur-tool-help-file/">Here</a> is the complete help file included in the Fur Tool. As you can see, it is chock full of useful, and useless, but equally cool, feaures. (It looks to me like a few of them are taken from the MG, though how, I don&#8217;t know)</p>
<p>Here is a picture of the fur tool while it is attached to my forearm:</p>
<p><img src="http://totemgufler.files.wordpress.com/2008/03/fur-tool.png" /></p>
<p>The Fur.Light feature:</p>
<p><img width="500" src="http://totemgufler.files.wordpress.com/2008/03/fur-light.png" /></p>
<p>The Fur platform:</p>
<p><img width="500" src="http://totemgufler.files.wordpress.com/2008/03/fur-plat.png" /></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/totemgufler.wordpress.com/17/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/totemgufler.wordpress.com/17/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/totemgufler.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/totemgufler.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/totemgufler.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/totemgufler.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/totemgufler.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/totemgufler.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/totemgufler.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/totemgufler.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/totemgufler.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/totemgufler.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=17&subd=totemgufler&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://totemgufler.wordpress.com/2008/03/22/the-fall-of-the-fur-tool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1f344a0e2440aaba172145eae4f7c646?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">totemgufler</media:title>
		</media:content>

		<media:content url="http://totemgufler.files.wordpress.com/2008/03/fur-tool.png" medium="image" />

		<media:content url="http://totemgufler.files.wordpress.com/2008/03/fur-light.png" medium="image" />

		<media:content url="http://totemgufler.files.wordpress.com/2008/03/fur-plat.png" medium="image" />
	</item>
		<item>
		<title>Fur Tool Help File</title>
		<link>http://totemgufler.wordpress.com/2008/03/22/fur-tool-help-file/</link>
		<comments>http://totemgufler.wordpress.com/2008/03/22/fur-tool-help-file/#comments</comments>
		<pubDate>Sun, 23 Mar 2008 00:23:44 +0000</pubDate>
		<dc:creator>totemgufler</dc:creator>
				<category><![CDATA[Second Life]]></category>

		<guid isPermaLink="false">http://totemgufler.wordpress.com/2008/03/24/fur-tool-help-file/</guid>
		<description><![CDATA[The help file from the Fur Tool:

=-[Fur.Tool] Help-=
=-Version: 2.4-=
Any case is accepted for all commands. For sensor features, short names are accepted.
The [Fur.Tool] listens on channel 2 as well as the default typing channel, 0.
Any abuse caused by this tool cannot be blamed on the creator and can only be blamed on the owner. Use [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=21&subd=totemgufler&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The help file from the Fur Tool:</p>
<p><span id="more-21"></span></p>
<p><font color="#0000ff">=-[Fur.Tool] Help-=<br />
=-Version: 2.4-=</font></p>
<p><font color="#0000ff">Any case is accepted for all commands. For sensor features, short names are accepted.<br />
The [Fur.Tool] listens on channel 2 as well as the default typing channel, 0.<br />
Any abuse caused by this tool cannot be blamed on the creator and can only be blamed on the owner. Use at your own risk.</font></p>
<p><font color="#0000ff">Optional HUD Attachment: Wear the “Fur Hud 2.0″ for a HUD that is quick and easy to use and that can do lots of the commands with the push of a button. Pressing the button on the side labeled “[FUR.TOOL]” will hide or show the HUD.</font></p>
<p><font color="#0000ff">User Features<br />
=========<br />
Setting Theme “fur.theme.Name of Color”. (Added 2.0) &#8211; Colors are listed below.<br />
Setting Theme Manually “fur.theme.&lt;R,G,B&gt;”. (Added 2.1)<br />
Setting Random theme “fur.theme.random”. (Added 2.0)<br />
Theme Colors “red”, “blue”, “green”, “white”, “black”, “orange”, “grey”, “yellow”, “gold”, “pink”, “cyan”, “purple”, “brown”, “dark red”, “navy”, “dark green”, “light blue”, “aquamarine”, “tan”, “hot pink”, “silver”, “orchid”, “slate grey”, “flesh”, and “copper”. (Added 2.0 &#8211; Updated 2.1)<br />
Afk Ring “afk”. (Added 2.0)<br />
Brb Ring “brb”. (Added 2.0)<br />
Autoshield “fur.as:on” “fur.as:off”. (Added 1.6 &#8211; Updated 2.1)<br />
Flight Enhacement Default On &#8211; Allows you to fly to any height “fur.fe:on” “fur.fe:off”. (Added 1.7)<br />
Graphical User Interface “fur.menu”. (Added 1.6)<br />
Goto Position “fur.gpos.&lt;X,Y,Z&gt;”. (Added 2.1)<br />
Help Notecard “fur.help”. (Added 1.0)<br />
Last (Does Last [Fur.Tool] Command Said) “fur.last”. (Added 1.6)<br />
Locking to Position “fur.lock” “fur.unlock”. (Added 1.0 &#8211; Updated 2.2 &#8211; Now works even if you exit the sim)<br />
Name2Key a Person “fur.n2k.Full And Exact name”. (Added 1.6)<br />
News “fur.news”. (REMOVED)<br />
Privacy Platform at Height “fur.pplat.height”. (Added 2.1)<br />
Tool Hiding “fur.thide” “fur.tshow”. (Added 1.5)<br />
Updating Tool “fur.update”. (Added 1.2 &#8211; Updated 2.3)<br />
Animation Player “fur.anim.Animation Name” starts the dance/animation of your choice. (Added 1.2)<br />
Just put any dance/animation you want into the gadget, and replace “Animation Name” with the dance/animation you put.<br />
Current Dances Preset: chicken, funky, getdown, hiphop, zombie, and boogie.<br />
“fur.anim off” stops the dance/animation.<br />
“fur.anim all off” stops all animation you are doing. (Added 2.2)</font></p>
<p><font color="#0000ff">Sensor Features<br />
==========<br />
Beaconing People “fur.beacon.avatarname”. (Added 1.0 &#8211; Updated 2.1)<br />
Beacon Off “fur.beacon off”.<br />
Bouncing People Away “fur.bounce.avatarname”. (Added 1.0)<br />
Bouncing Self Away “fur.bounce.self”. (Added 1.7)<br />
Follower “fur.follower” &#8211; to rez it. Then after rezzed, SIT on it and then say “fur.follow.avatarname” to follow. “fur.stop follow” to stop follow. “kill follower” to kill follower.<br />
Goto a Person “fur.goto.avatarname”. (Added 2.0)<br />
Hopping on People “fur.hopon.avatarname”. (Added 2.1)<br />
Hugging People “fur.hug.avatarname”. (Added 1.2)<br />
Inverse Bounce “fur.ibounce.avatarname”.( Added 2.4)<br />
Kissing People “fur.kiss.avatarname”. (Added 1.2)<br />
Pushing People Away “fur.push.avatarname”. (Added 1.0)<br />
Pushing Self Away “fur.push.self”. (Added 1.7)<br />
Requesting an Avatar To Your Position “fur.request.avatarname”. (Added 1.7)<br />
Sitting on People “fur.siton.avatarname”. (Added 2.1)<br />
Troning People In a Cone shaped Trap “fur.trap.avatarname”. (Added 2.4) &#8211; It traps them basically but in a cone.<br />
Trone Features: Turn View of Person On “view on” View of Person Off “view off”.</font></p>
<p><font color="#0000ff">Gravity Features<br />
==========<br />
No Gravity “fur.gravity off”. (Added 2.1 &#8211; Updated 2.2)<br />
Gravity Normal “fur.gravity normal”. (Added 2.1 &#8211; Updated 2.2)<br />
Gravity Medium “fur.gravity medium”. (Added 2.2)<br />
Gravity High “fur.gravity high”. (Added 2.2)</font></p>
<p><font color="#0000ff">Scanning Features (Updated 2.2)<br />
============<br />
Scan for Agents “fur.scan” “fur.scan.agent”. (Added 1.0)<br />
Scan for Active Objects “fur.scan.active”. (Added 2.0)<br />
Scan for Passive Objects “fur.scan.passive”. (Added 2.0)<br />
Scan for Scripted Objects “fur.scan.scripted”. (Added 2.0)</font></p>
<p><font color="#0000ff">Fur.Text Feature<br />
==========<br />
A feature which set texts that shows name, species, gender, orientation, and status above the gadget.<br />
Make Text Visible “fur.text on”. (Added 1.0)<br />
Make Text Invisible “fur.text off”. (Added 1.0)<br />
Clear Text “fur.text clear”. (Added 2.4)<br />
Setting Name “set name NAME”. (Added 1.0)<br />
Setting Species “set species SPECIE”. (Added 1.0)<br />
Setting Gender “set gender GENDER”. (Added 1.0 &#8211; Updated 2.1)<br />
Setting Orientation “set orientation ORIENTATION”. (Added 1.0)<br />
Setting Status “set status STATUS”. (Added 1.2)<br />
Setting Color “set color &lt;R,G,B&gt;” “set color theme” “set color COLOR”. (Added 1.4)<br />
(Theme &#8211; Applies Current Theme’s Color, COLOR &#8211; Replace with a color on the themes list)</font></p>
<p><font color="#0000ff">Calculator Features (Added 1.4)<br />
====================<br />
“fadd x y” adds x and y.<br />
“fsubtract x y” subtracts y from x.<br />
“fmultiply x y” multiplies x and y.<br />
“fdivide x y” divides x by y.<br />
“fhalf x” halves x.<br />
“fsqrt x” finds the square root of x.</font></p>
<p><font color="#0000ff">Memo and Web Features (Added 1.6 &amp; 1.7)<br />
===========================<br />
“fur.memo.MEMO HERE” to add a memo.<br />
“fur.list memos” to list all memos.<br />
“fur.rmemo.Memo #” to remove a memo. The memo numbers are listed beside the memo on the list.<br />
“fur.aweb.website name~website url” to add a quick website.<br />
“fur.list web” to list all sites.<br />
“fur.rweb.Web #” to remove a website. The website numbers are listed beside the websites on the list.<br />
“fur.web.Website Name” to go to the specified website name. The website name should be the one you put on the list.<br />
“fur.web.URL” to go to a site even though it isn’t on the list.</font></p>
<p><font color="#0000ff">Rezzing Features<br />
===========<br />
Platform “fur.platform”. (Added 1.0 &#8211; Updated 2.0)<br />
Sphere Shield “fur.shield”. (Added 1.0 &#8211; Updated 2.0)<br />
Posing Stand “fur.pose”. (Added 1.0 &#8211; Updated 2.0)<br />
Meditation Mat “fur.mat”. (Added 1.3 &#8211; Updated 2.0)<br />
Workspace “fur.workspace”. (Added 1.3 &#8211; Updated 2.0)<br />
Light “fur.light”. (Added 2.0)<br />
Hide “fur.hide”. (Added 1.0)<br />
Reappear “/5reapp”. (Added 1.0)</font></p>
<p><font color="#0000ff">Manual Mode Just drop an item in it and say “fur:rez:Object:velocity:rotation”. (Added 1.0 &#8211; Updated 1.7)<br />
The velocity should be a vector. The rotation should look like &lt;0,0,0,0&gt; for example.<br />
Just say “fur:rez:Object” for both these things not to apply.<br />
Just say “fur.rez:object: : rotation” to skip velocity and go to rotation.</font></p>
<p><font color="#0000ff">“R.A.T” Rez at Target Feature (Added 1.7):<br />
“fur:rat:person:object:velocity”.<br />
Again, velocity should look like a vector &lt;1,1,1&gt;.<br />
You, also, do not have to specify a velocity.<br />
Note: Object must be physical for the R.A.T to even work.</font></p>
<p><font color="#0000ff">Killing Commands:</font></p>
<p><font color="#0000ff">Platform “kill platform”<br />
Sphere Shield “kill shield”.<br />
Posing Stand “kill pose”.<br />
Meditation Mat “kill mat”.<br />
Workspace “kill workspace”.<br />
Light “kill light”.<br />
Kill All “kill all”.</font></p>
<p><font color="#0000ff">Rezzed Sphere Shield Commands:</font></p>
<p><font color="#0000ff">Turning the sphere shield’s push/follow features on “shield.on”.<br />
Turning the sphere shield’s push/follow features off “shield.off”.</font></p>
<p><font color="#0000ff">[Fur.Tool] Credits<br />
===========<br />
Scripter: Bhavin Poindexter.<br />
Model Designer: Inuyasha Overlord.<br />
Objects Designer: Reggie Clifton.<br />
Beta Testers: Copper Shriner, Reggie Clifton, and Sesshomaru Takakura.<br />
Fur.Hide Scripts by: Wolfy Fielding.<br />
Privacy Platform Script: JacobX Goff.<br />
Hug and Kiss Scripts from Hug and Kiss Attachment: Scripted by Francis Chung. </font></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/totemgufler.wordpress.com/21/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/totemgufler.wordpress.com/21/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/totemgufler.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/totemgufler.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/totemgufler.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/totemgufler.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/totemgufler.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/totemgufler.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/totemgufler.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/totemgufler.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/totemgufler.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/totemgufler.wordpress.com/21/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=21&subd=totemgufler&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://totemgufler.wordpress.com/2008/03/22/fur-tool-help-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1f344a0e2440aaba172145eae4f7c646?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">totemgufler</media:title>
		</media:content>
	</item>
		<item>
		<title>New Avatar</title>
		<link>http://totemgufler.wordpress.com/2008/03/02/new-avatar/</link>
		<comments>http://totemgufler.wordpress.com/2008/03/02/new-avatar/#comments</comments>
		<pubDate>Sun, 02 Mar 2008 16:00:56 +0000</pubDate>
		<dc:creator>totemgufler</dc:creator>
				<category><![CDATA[Second Life]]></category>

		<guid isPermaLink="false">http://totemgufler.wordpress.com/2008/03/02/new-avatar/</guid>
		<description><![CDATA[Yesterday, I spent a couple hours working on a new avatar for myself. I always cringe when I have to say that I am wearing items that others have made (I like to make everything myself), but I never really had the skills to make a good looking human. I didn&#8217;t really want a furry, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=16&subd=totemgufler&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Yesterday, I spent a couple hours working on a new avatar for myself. I always cringe when I have to say that I am wearing items that others have made (I like to make everything myself), but I never really had the skills to make a good looking human. <span id="more-16"></span>I didn&#8217;t really want a furry, mostly because of what they suggest on the main grid (it is not so much like that on the teen grid, but I still avoid them anyway). After reading the Plywood web comic, I decided I really wanted a robot avatar. They are simple, they almost always look good, and it kind of goes with my techie, scripting personality.</p>
<p>Here is the culmination of all my efforts:</p>
<p><img src="http://totemgufler.files.wordpress.com/2008/03/totem.png" alt="Totem’s Totbot avatar" /></p>
<p>It&#8217;s pretty basic, but, seeing as it is my first full avatar, I am pretty darn proud!</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/totemgufler.wordpress.com/16/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/totemgufler.wordpress.com/16/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/totemgufler.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/totemgufler.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/totemgufler.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/totemgufler.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/totemgufler.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/totemgufler.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/totemgufler.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/totemgufler.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/totemgufler.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/totemgufler.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=16&subd=totemgufler&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://totemgufler.wordpress.com/2008/03/02/new-avatar/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1f344a0e2440aaba172145eae4f7c646?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">totemgufler</media:title>
		</media:content>

		<media:content url="http://totemgufler.files.wordpress.com/2008/03/totem.png" medium="image">
			<media:title type="html">Totem’s Totbot avatar</media:title>
		</media:content>
	</item>
		<item>
		<title>Dark Matter</title>
		<link>http://totemgufler.wordpress.com/2008/03/02/dark-matter/</link>
		<comments>http://totemgufler.wordpress.com/2008/03/02/dark-matter/#comments</comments>
		<pubDate>Sun, 02 Mar 2008 15:21:14 +0000</pubDate>
		<dc:creator>totemgufler</dc:creator>
				<category><![CDATA[Second Life]]></category>
		<category><![CDATA[dark matter]]></category>
		<category><![CDATA[didi]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[sl]]></category>
		<category><![CDATA[venture]]></category>

		<guid isPermaLink="false">http://totemgufler.wordpress.com/?p=12</guid>
		<description><![CDATA[My new project, Dark Matter, is well underway. We are an initiative focused on helping with skill building and education in the teen grid and beyond. We will offer many resources for developers in SL and out to help them improve their skills and be better set to improve the world around them. Right now, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=12&subd=totemgufler&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>My new project, Dark Matter, is well underway. We are an initiative focused on helping with skill building and education in the teen grid and beyond. We will offer many resources for developers in SL and out to help them improve their skills and be better set to improve the world around them. Right now, the website is almost complete. All that is left is to find one more member for the team.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/totemgufler.wordpress.com/12/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/totemgufler.wordpress.com/12/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/totemgufler.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/totemgufler.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/totemgufler.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/totemgufler.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/totemgufler.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/totemgufler.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/totemgufler.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/totemgufler.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/totemgufler.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/totemgufler.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=12&subd=totemgufler&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://totemgufler.wordpress.com/2008/03/02/dark-matter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1f344a0e2440aaba172145eae4f7c646?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">totemgufler</media:title>
		</media:content>
	</item>
		<item>
		<title>Wild West Sim</title>
		<link>http://totemgufler.wordpress.com/2008/02/24/wild-west-sim/</link>
		<comments>http://totemgufler.wordpress.com/2008/02/24/wild-west-sim/#comments</comments>
		<pubDate>Sun, 24 Feb 2008 22:16:59 +0000</pubDate>
		<dc:creator>totemgufler</dc:creator>
				<category><![CDATA[Second Life]]></category>

		<guid isPermaLink="false">http://totemgufler.wordpress.com/2008/02/24/wild-west-sim/</guid>
		<description><![CDATA[Eye4You has recently added a new sim connected to the original Eye4You island on the teen grid. The new are is meant to become a Wild West themed sim created almost entirely by teens. As far as I understand, any teen who wants to and has the necessary skills is welcome to help out on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=11&subd=totemgufler&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Eye4You has recently added a new sim connected to the original Eye4You island on the teen grid. The new are is meant to become a Wild West themed sim created almost entirely by teens. As far as I understand, any teen who wants to and has the necessary skills is welcome to help out on the build is whatever way they want. This will look pretty cool when it&#8217;s done!</p>
<p>SLurl: <a href="http://slurl.com/secondlife/Land%20of%20LincolnTG/222/54/27">Land of LincolnTG</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/totemgufler.wordpress.com/11/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/totemgufler.wordpress.com/11/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/totemgufler.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/totemgufler.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/totemgufler.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/totemgufler.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/totemgufler.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/totemgufler.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/totemgufler.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/totemgufler.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/totemgufler.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/totemgufler.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=totemgufler.wordpress.com&blog=1490363&post=11&subd=totemgufler&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://totemgufler.wordpress.com/2008/02/24/wild-west-sim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1f344a0e2440aaba172145eae4f7c646?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">totemgufler</media:title>
		</media:content>
	</item>
	</channel>
</rss>