<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://opensimulator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://opensimulator.org/index.php?action=history&amp;feed=atom&amp;title=User%3AAllen_Kerensky%2FMyriad_Lite_Preview_5%2FMelee</id>
		<title>User:Allen Kerensky/Myriad Lite Preview 5/Melee - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://opensimulator.org/index.php?action=history&amp;feed=atom&amp;title=User%3AAllen_Kerensky%2FMyriad_Lite_Preview_5%2FMelee"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview_5/Melee&amp;action=history"/>
		<updated>2026-06-04T02:23:49Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview_5/Melee&amp;diff=27328&amp;oldid=prev</id>
		<title>Allen Kerensky: moved User:Allen Kerensky:Myriad Lite Preview 5:Melee to User:Allen Kerensky/Myriad Lite Preview 5/Melee: move into subsite</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview_5/Melee&amp;diff=27328&amp;oldid=prev"/>
				<updated>2012-02-06T22:34:50Z</updated>
		
		<summary type="html">&lt;p&gt;moved &lt;a href=&quot;/wiki/User:Allen_Kerensky:Myriad_Lite_Preview_5:Melee&quot; class=&quot;mw-redirect&quot; title=&quot;User:Allen Kerensky:Myriad Lite Preview 5:Melee&quot;&gt;User:Allen Kerensky:Myriad Lite Preview 5:Melee&lt;/a&gt; to &lt;a href=&quot;/wiki/User:Allen_Kerensky/Myriad_Lite_Preview_5/Melee&quot; title=&quot;User:Allen Kerensky/Myriad Lite Preview 5/Melee&quot;&gt;User:Allen Kerensky/Myriad Lite Preview 5/Melee&lt;/a&gt;: move into subsite&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 22:34, 6 February 2012&lt;/td&gt;
			&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Allen Kerensky</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview_5/Melee&amp;diff=27197&amp;oldid=prev</id>
		<title>Allen Kerensky: created</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview_5/Melee&amp;diff=27197&amp;oldid=prev"/>
				<updated>2012-02-06T17:04:36Z</updated>
		
		<summary type="html">&lt;p&gt;created&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Myriad Lite Melee =&lt;br /&gt;
&lt;br /&gt;
Melee weapons are hand-held weapons that strike opponents directly around you, as opposed to a ranged weapon like a firearm or bow.&lt;br /&gt;
&lt;br /&gt;
== Melee Attack Dice ==&lt;br /&gt;
The Myriad RPG System includes these reference melee weapon attack/damage suggestions:&lt;br /&gt;
# Unarmed Combat&lt;br /&gt;
# Short animal claws, knife, dagger, blackjack, knuckledusters&lt;br /&gt;
# Long animal claws, short sword, machete, wooden baseball bat, staff&lt;br /&gt;
# Fire axe, long sword, katana, aluminum baseball bat, poleaxe&lt;br /&gt;
# Battleaxe, claymore, laser sword, daikatana, double-ended polearm&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
# Create a melee object, such as a sword approximately 1m long.&lt;br /&gt;
# Drag and Drop the Myriad Lite Melee script for sword fighting (below) from inventory into the object&lt;br /&gt;
# Take the melee weapon into into inventory.&lt;br /&gt;
# Attach it to your right hand&lt;br /&gt;
# Adjust the position and rotation&lt;br /&gt;
# Detach the mele weapon back into inventory again to &amp;quot;save&amp;quot; the new default attach point.&lt;br /&gt;
# Attach or wear the melee weapon when desired.&lt;br /&gt;
&lt;br /&gt;
== Myriad_Lite_Melee-v0.0.4-20120202.lsl ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Myriad_Lite_Melee-v0.0.4-20120202.lsl&lt;br /&gt;
// Copyright (c) 2012 By Allen Kerensky (OSG/SL)&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad RPG licensed under the Creative Commons Attribution 2.0 UK: England and Wales&lt;br /&gt;
// http://creativecommons.org/licenses/by/2.0/uk/&lt;br /&gt;
// Myriad Lite software Copyright (c) 2011 by Allen Kerensky (OSG/SL)&lt;br /&gt;
// Baroun's Adventure Machine Copyright (c) 2008-2011 by Baroun Tardis (SL)&lt;br /&gt;
// Myriad Lite and Baroun's Adventure Machine licensed under the&lt;br /&gt;
// Creative Commons Attribution-Share Alike-Non-Commercial 3.0 Unported&lt;br /&gt;
// http://creativecommons.org/licenses/by-nc-sa/3.0/&lt;br /&gt;
// You must agree to the terms of this license before making any use of this software.&lt;br /&gt;
// If you do not agree to this license, simply delete these materials.&lt;br /&gt;
// There is no warranty, express or implied, for your use of these materials.&lt;br /&gt;
//============================================================================&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMAT REFERENCE&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CHANMYRIAD OUT - RPEVENT|message&lt;br /&gt;
// CHANATTACH IN  - REGISTERATTACHMENTS&lt;br /&gt;
// CHANATTACH OUT - ATTACHMELEE|int attackdice|int attachpoint|str name&lt;br /&gt;
// CHANATTACH OUT - DETACHMELEE|int attackdice|int attachpoint|str name&lt;br /&gt;
// CHANPLAYER OUT - CLOSECOMBAT|int attackdice|key victim|key attacker|str weaponname&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL VARIABLES&lt;br /&gt;
//============================================================================&lt;br /&gt;
key WEARER = NULL_KEY; // UUID of melee weapon user&lt;br /&gt;
integer ATTACHPOINT = 0; // attachment point&lt;br /&gt;
// Melee Attack Dice&lt;br /&gt;
// 1D - Unarmed Combat&lt;br /&gt;
// 2D - Short animal claws, knife, dagger, blackjack, knuckledusters&lt;br /&gt;
// 3D - Long animal claws, short sword, machete, wooden baseball bat, staff&lt;br /&gt;
// 4D - Fire axe, long sword, katana, aluminum baseball bat, poleaxe&lt;br /&gt;
// 5D - Battleaxe, claymore, laser sword, daikatana, double-ended polearm&lt;br /&gt;
integer MELEEATTACKDICE = 4; // long sword&lt;br /&gt;
string DIV=&amp;quot;|&amp;quot;; // Myriad message field divider&lt;br /&gt;
string ANIM_SWORD = &amp;quot;sword_strike_r&amp;quot;; // use built in right handed sword strike animation&lt;br /&gt;
integer CHANATTACH; // hold the dynamically calculated attachment channel number&lt;br /&gt;
integer HANDATTACH; // hold a handle to remove the attachment channel if needed&lt;br /&gt;
integer CHANMYRIAD = -999; // the Myriad RPEVENT channel number&lt;br /&gt;
integer ANIM = FALSE; // do we have permission to animate the avatar?&lt;br /&gt;
float WEAPON_LENGTH = 2.0; // a six-foot longsword is the default&lt;br /&gt;
integer SAFETY_ON = TRUE; // can this weapon be used or is it sheathed?&lt;br /&gt;
&lt;br /&gt;
// SAFETY OFF - turn off safety and enable firing&lt;br /&gt;
SAFETYOFF() {&lt;br /&gt;
    SAFETY_ON = FALSE; // switch the safety off&lt;br /&gt;
    llRequestPermissions(llGetOwner(),PERMISSION_TAKE_CONTROLS|PERMISSION_TRIGGER_ANIMATION); // request permissions&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// SAFETY ON - turn on safety&lt;br /&gt;
SAFETYON() {&lt;br /&gt;
    SAFETY_ON = TRUE; // switch the safety on&lt;br /&gt;
    llReleaseControls();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// DRAW THE WEAPON&lt;br /&gt;
DRAW(string hand) {&lt;br /&gt;
    // draw code goes here - turn copy in hand visible?&lt;br /&gt;
    if ( llGetAttached() == 5 &amp;amp;&amp;amp; ( hand == &amp;quot;left&amp;quot; || hand == &amp;quot;both&amp;quot; ) ) {&lt;br /&gt;
        llRegionSay(CHANMYRIAD,llKey2Name(llGetOwner())+&amp;quot; draws a weapon with their left hand.&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Left hand weapon drawn.&amp;quot;);&lt;br /&gt;
        llSetLinkAlpha(LINK_SET,1.0,ALL_SIDES);        &lt;br /&gt;
    }&lt;br /&gt;
    if ( llGetAttached() == 6 &amp;amp;&amp;amp; ( hand == &amp;quot;right&amp;quot; || hand == &amp;quot;both&amp;quot; ) ) {&lt;br /&gt;
        llRegionSay(CHANMYRIAD,llKey2Name(llGetOwner())+&amp;quot; draws a weapon with their right hand.&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Right hand weapon drawn.&amp;quot;);&lt;br /&gt;
        llSetLinkAlpha(LINK_SET,1.0,ALL_SIDES);        &lt;br /&gt;
    }&lt;br /&gt;
    SAFETYOFF(); // unholster and turn off safety&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// SHEATHE THE WEAPON&lt;br /&gt;
SHEATHE(string hand) {&lt;br /&gt;
    // sheathe code goes here - turn copy in hand invisible?&lt;br /&gt;
    if ( llGetAttached() == 5 &amp;amp;&amp;amp; ( hand == &amp;quot;left&amp;quot; || hand == &amp;quot;both&amp;quot; ) ) {&lt;br /&gt;
        llRegionSay(CHANMYRIAD,llKey2Name(llGetOwner())+&amp;quot; sheathes their left-hand weapon.&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Left hand weapon sheathed.&amp;quot;);&lt;br /&gt;
        llSetLinkAlpha(LINK_SET,0.0,ALL_SIDES);        &lt;br /&gt;
    }&lt;br /&gt;
    if ( llGetAttached() == 6 &amp;amp;&amp;amp; ( hand == &amp;quot;right&amp;quot; || hand == &amp;quot;both&amp;quot; ) ) {&lt;br /&gt;
        llRegionSay(CHANMYRIAD,llKey2Name(llGetOwner())+&amp;quot; sheathes their right-hand weapon.&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Right hand weapon sheathed.&amp;quot;);&lt;br /&gt;
        llSetLinkAlpha(LINK_SET,0.0,ALL_SIDES);        &lt;br /&gt;
    }&lt;br /&gt;
    SAFETYON(); // turn on safety before holstering&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// SETUP THE WEAPON&lt;br /&gt;
SETUP() {&lt;br /&gt;
    CHANATTACH = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetOwner(),1,7)); // calculate dynamic attachment channel&lt;br /&gt;
    HANDATTACH = llListen(CHANATTACH,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;); // start listening on attachment channel&lt;br /&gt;
    SAFETY_ON = TRUE; // safe the weapon until drawn&lt;br /&gt;
    llSetLinkAlpha(LINK_SET,0.0,ALL_SIDES); // turn invisble as if sheathed&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEFAULT STATE&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY EVENT - called on reset&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP();&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // ON_REZ EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    on_rez(integer params) {&lt;br /&gt;
        params = 0; // LSLINT&lt;br /&gt;
        SETUP();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // ATTACH EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        if ( id != NULL_KEY ) { // if id not equal null key, this is an attach&lt;br /&gt;
            WEARER = id; // save the id we attached to&lt;br /&gt;
            ATTACHPOINT = llGetAttached(); // get the position we attached to&lt;br /&gt;
            // tell the region we're arming a weapon&lt;br /&gt;
            llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(WEARER)+&amp;quot; equips their &amp;quot;+llGetObjectName());&lt;br /&gt;
            integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)WEARER,1,7)); // calculate dynamic attach channel&lt;br /&gt;
            // send attach melee message to HUD which disables fist fighter&lt;br /&gt;
            llWhisper(dynchan,&amp;quot;ATTACHMELEE&amp;quot;+DIV+(string)MELEEATTACKDICE+DIV+(string)ATTACHPOINT+DIV+llGetObjectName());&lt;br /&gt;
            llRequestPermissions(id,PERMISSION_TAKE_CONTROLS|PERMISSION_TRIGGER_ANIMATION); // request permissions&lt;br /&gt;
        } else { // the id was null key, so this is a detach&lt;br /&gt;
            integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)WEARER,1,7)); // calculate dynamic attach channel&lt;br /&gt;
            if ( dynchan != 0 ) { // is channel valid&lt;br /&gt;
                // tell the region we're disarming&lt;br /&gt;
                llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(WEARER)+&amp;quot; disarms their &amp;quot;+llGetObjectName());&lt;br /&gt;
                // send detach message to HUD which re-enables fist fighter&lt;br /&gt;
                llWhisper(dynchan,&amp;quot;DETACHMELEE&amp;quot;+DIV+(string)MELEEATTACKDICE+DIV+(string)ATTACHPOINT+DIV+llGetObjectName());&lt;br /&gt;
            } else { // channel was not valid&lt;br /&gt;
                llSay(DEBUG_CHANNEL,&amp;quot;DETACH EVENT WITHOUT PREVIOUS ATTACH?&amp;quot;); // report the problem&lt;br /&gt;
            }&lt;br /&gt;
            WEARER = NULL_KEY; // cleanup wearer key on detach&lt;br /&gt;
            ATTACHPOINT = 0; // cleanup attachpoint on detach&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // LISTEN EVENT - whisper, say, show, regionsay...&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    listen(integer channel,string speakername,key speakerid,string message) {&lt;br /&gt;
        speakername = &amp;quot;&amp;quot;; // LSLINT&lt;br /&gt;
        speakerid = NULL_KEY; // LSLINT&lt;br /&gt;
        if ( channel == CHANATTACH ) { // did this message come in on attachment channel?&lt;br /&gt;
            if ( message == &amp;quot;REGISTERATTACHMENTS&amp;quot; ) { // is this a HUD asking for attachments to register?&lt;br /&gt;
                WEARER = llGetOwner(); // who is wielding me?&lt;br /&gt;
                ATTACHPOINT = llGetAttached(); // where am I attached?&lt;br /&gt;
                integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)WEARER,1,7)); // calculate wearer's dynamic attachment channel&lt;br /&gt;
                llWhisper(dynchan,&amp;quot;ATTACHMELEE&amp;quot;+DIV+(string)MELEEATTACKDICE+DIV+(string)ATTACHPOINT+DIV+llGetObjectName()); // tell HUD we're attached to disable fist fighter&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if ( message == &amp;quot;DRAWLEFT&amp;quot; ) { DRAW(&amp;quot;left&amp;quot;); return;} // draw weapon if in left hand&lt;br /&gt;
            if ( message == &amp;quot;DRAWRIGHT&amp;quot; ) { DRAW(&amp;quot;right&amp;quot;); return;} // draw weapon in right hand&lt;br /&gt;
            if ( message == &amp;quot;DRAWBOTH&amp;quot; ) { DRAW(&amp;quot;both&amp;quot;); return; } // draw weapon in both hands&lt;br /&gt;
            if ( message == &amp;quot;SHEATHELEFT&amp;quot; ) { SHEATHE(&amp;quot;left&amp;quot;); return;} // sheathe left-hand weapon&lt;br /&gt;
            if ( message == &amp;quot;SHEATHERIGHT&amp;quot; ) { SHEATHE(&amp;quot;right&amp;quot;); return;} // sheathe right-hand weapon&lt;br /&gt;
            if ( message == &amp;quot;SHEATHEBOTH&amp;quot; ) { SHEATHE(&amp;quot;both&amp;quot;); return; } // sheathe both weapon&lt;br /&gt;
            if ( message == &amp;quot;SAFETYOFF&amp;quot; ) { SAFETYOFF(); return; } // unsafe the weapon&lt;br /&gt;
            if ( message == &amp;quot;SAFETYON&amp;quot; ) { SAFETYON(); return; } // safe the weapon&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // RUN_TIME_PERMISSIONS EVENT - what is object allowed to do to avatar?&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if ( perm &amp;amp; PERMISSION_TAKE_CONTROLS ) { // can object read controls?&lt;br /&gt;
            llTakeControls(CONTROL_LBUTTON|CONTROL_ML_LBUTTON,TRUE,TRUE); // start watching the left mouse button in both views&lt;br /&gt;
        }&lt;br /&gt;
        if ( perm &amp;amp; PERMISSION_TRIGGER_ANIMATION ) { // can we also trigger animations for sword swings?&lt;br /&gt;
            ANIM = TRUE; // remember that we have permission now&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // CONTROL EVENT - read arrow keys and mouse button&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    control(key id,integer level,integer edge) {&lt;br /&gt;
        if ( SAFETY_ON == TRUE ) {&lt;br /&gt;
            llOwnerSay(&amp;quot;Your weapon is sheathed, draw it!&amp;quot;);&lt;br /&gt;
            llReleaseControls();&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if ( id == WEARER ) { // make sure controls come from wielder&lt;br /&gt;
            if ( ( level &amp;amp; CONTROL_LBUTTON &amp;amp;&amp;amp; edge &amp;amp; CONTROL_LBUTTON ) || ( level &amp;amp; CONTROL_ML_LBUTTON &amp;amp;&amp;amp; edge &amp;amp; CONTROL_ML_LBUTTON ) ) { // if left mouse button pressed in regular or mouselook mode&lt;br /&gt;
                llSensor(&amp;quot;&amp;quot;,NULL_KEY,(AGENT|ACTIVE|PASSIVE),WEAPON_LENGTH,PI/6); // trigger a sensor sweep for avatars within weapon range, and standing in front of us&lt;br /&gt;
                if ( ANIM == TRUE ) llStartAnimation(ANIM_SWORD); // if we can show sword swing, go ahead&lt;br /&gt;
                llSleep(0.2); // pause to let animation run&lt;br /&gt;
                return; // return now to skip processing any more events we add later&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // SENSOR EVENT - what did we find?&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    sensor(integer num_detected) {&lt;br /&gt;
        while(num_detected--) { // step through all AGENTS returned by sensor sweep&lt;br /&gt;
            integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetOwner(),0,6)); // calculate attackers HUD dynamic channel&lt;br /&gt;
            // send the close combat skill check message to attacker to start close combat skill check&lt;br /&gt;
            // attackers hud adds attacker stat and skill and sends the information to the victim to finish the opposed close combat skill check&lt;br /&gt;
            // we region say this so others can keep score or detect cheaters, etc&lt;br /&gt;
            llRegionSay(dynchan,&amp;quot;CLOSECOMBAT&amp;quot;+DIV+(string)MELEEATTACKDICE+DIV+(string)llDetectedKey(num_detected)+DIV+(string)llGetOwner()+DIV+llGetObjectName());&lt;br /&gt;
            &lt;br /&gt;
            key who = llDetectedKey(num_detected); // who did we hit with sensor?&lt;br /&gt;
            key owner = llList2Key(llGetObjectDetails(who,[OBJECT_OWNER]),0); // is this an agent/avatar for sure?&lt;br /&gt;
            if ( who == owner ) { // yep, we hit an avatar&lt;br /&gt;
                // tell the region an attempted attack is underway&lt;br /&gt;
                llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(llGetOwner())+&amp;quot; strikes at &amp;quot;+llDetectedName(num_detected)+&amp;quot; in Close Combat!&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // NO_SENSOR EVENT - we didn't find anything to hit&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    no_sensor() {&lt;br /&gt;
        // we do nothing in this - but having a nosensor block avoids bugs where sensors would fail if nonsensor was missing&lt;br /&gt;
    }&lt;br /&gt;
} // end default&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/wiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>	</entry>

	</feed>