<?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/"
	>

<channel>
	<title>Furc!Wank &#187; Tutorials</title>
	<atom:link href="http://wank.furced.net/tags/tutorials/feed/" rel="self" type="application/rss+xml" />
	<link>http://wank.furced.net</link>
	<description>WERE IN UR DREAMZ... WERE JUDGIN UR RPZ!</description>
	<lastBuildDate>Fri, 08 Jun 2007 10:43:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Dreamweaving 101</title>
		<link>http://wank.furced.net/archive/dreamweaving-101/</link>
		<comments>http://wank.furced.net/archive/dreamweaving-101/#comments</comments>
		<pubDate>Wed, 16 May 2007 00:19:00 +0000</pubDate>
		<dc:creator>the skullkitty</dc:creator>
				<category><![CDATA[Dreamweaving]]></category>

		<guid isPermaLink="false">http://furc.void-star.net/wank/archive/dreamweaving-101/</guid>
		<description><![CDATA[Despite common perception, there is nothing esoteric about dreamweaving; the Furcadian term for creating custom &#8216;maps&#8217; called dreams.  Astute readers may notice that one of the main pastimes of F!W is reviewing dreams, and that many of these are indeed quite terrible.  The good news is that terrible dreamweaving is almost invariably caused [...]]]></description>
			<content:encoded><![CDATA[<p>Despite common perception, there is nothing esoteric about dreamweaving; the Furcadian term for creating custom &#8216;maps&#8217; called dreams.  Astute readers may notice that one of the main pastimes of <strong>F!W</strong> is reviewing dreams, and that many of these are indeed quite terrible.  The good news is that terrible dreamweaving is almost invariably caused by things that are easily avoidable, such as bad planning and over-ambition (what&#8217;s known as <a href="http://en.wikipedia.org/wiki/Featuritis" class="ext">featuritis</a> in programming).  Making beautiful dreams isn&#8217;t difficult, and you don&#8217;t even need anything other than the default Furcadia patches.</p>
<p>Shall we begin?</p>
<h4>Dream Editor Overview</h4>
<p><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial00.png" rel="flashbox[d101]" title="The Dream Editor window on startup."><img src="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial00.thumbnail.png" alt="Dreamweaving 101: Dream Editor" class="postimg imgright"></a>First things first; boot up the <strong>Dream Editor</strong> (<code>DreamEd.exe</code>), which you should be able to find in your main Furcadia directory.  If you already have a dream open, select <strong>File > New</strong> in order to &#8216;clear&#8217; the current dream from the editor&#8217;s memory.  Note that the editor can only have one dream open at a time, and that dream is what is uploaded to Furcadia by pressing the <strong>Place Dream</strong> (<code>Ctrl+T</code>) button; though that being said you do not need to have the editor open in order to upload a dream.</p>
<p>By default, the editor opens up a 140&#215;70 tile map, with a default &#8216;green grass&#8217; background.  Before we start, I&#8217;ll let you explore the editor a little bit (assuming this is your first time working with it).  The main tools that you will be using are found to the left of the screen, under the minimap (which gives you a very small rendition of your overall dream).</p>
<p><img src="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial02.png" alt="Dreamweaving 101: Object Properties" class="postimg imgleft">The first thing is the <strong>object properties</strong> palette.  In Furcadia, there are three types of object; floors, walls and, well, objects.  As suspected, floors go on the ground.  They are usually (but not always) walkable, and can have objects and furres sitting on top of them.  Walls are generally impassible barriers&#8230; except when they contain doors.  They stand on the &#8216;edges&#8217; of floor tiles, and do not interfere with objects.  Almost everything else in Furcadia is an object.  Trees, tables and lamps are all objects, as are &#8216;gettable&#8217; items like keys and weapons.  Only one object may be in a square at a time.  Objects are rendered (drawn) &#8216;underneath&#8217; any furres occupying their square, behind any object/furre occupying a square in front of them, and in front of any object/furre in a square behind them.  If a large object is occupying the same space as a wall, it may be clipped awkwardly by the wall segment in front of it.</p>
<p>The object properties palette shows information about the currently selected object/floor/wall, including its ID number, what it looks like, and whether it is sittable/gettable/walkable.  If an object is walkable it means your furre can walk on top of it.  A sittable object will force your furre to sit when they come into contact with it (such as chairs and pillows).  And a gettable object can be carried around.</p>
<p><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial01.png" rel="flashbox[d101]" title="The Dream Editor palette window.  This time we're selecting floors."><img src="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial01.thumbnail.png" alt="Dreamweaving 101: Palette" class="postimg imgright"></a>Clicking on the preview of the object will bring up the full object palette.  The interface is a little dated, but from this window you can pick which object/floor/wall you wish to place.  Space bar will move to the next page of objects, until the selection has been exhausted and it comes back to the beginning.  Left clicking an object will turn that into your &#8216;brush&#8217; and you can then place it anywhere you like on the map.  Left click to place the object.  Objects &#8217;stick&#8217; to your brush, so in order to drop them you will either have to select another object, or to right-click in an empty square.  Right-clicking onto of any object will also turn your brush into that object.  Note that this will work depending on your <strong>brush type</strong> &#8212; as indicated by the three icons below and to the right of the object properties.  If you&#8217;re currently working on walls, right-clicking on an object in a square with no wall will clear your wall brush rather than pick up the object.  You can remove objects/floors/walls by either over-writing them with something else or by &#8216;drawing over&#8217; them with an empty brush (object type #0).  Note that floor #0 is grass; represent &#8216;dead space&#8217; with black (#161) instead, though note that by default this is walkable.</p>
<p><img src="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial03.png" alt="Dreamweaving 101: Toolbar" class="postimg imgleft">The next thing to lookout for is the brush-type toolbar.  Generally you want to be placing single objects (the pen), however to fill in a defined area you can use the selection.  To fill in the <em>whole</em> area, use the bucket.</p>
<p><img src="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial04.png" alt="Dreamweaving 101: Square Information" class="postimg imgright">The final thing we&#8217;re going to look at is the <strong>Information palette</strong>.  This will give you info some details about the square your <em>brush is currently hovering over</em>, as well as the general size of your dream.  The <code>Current X</code> and <code>Current Y</code> values are especially useful, and we&#8217;ll be pulling them out later on when we start up with DragonSpeak.</p>
<p>Anyway, get the hang of the editor by laying down some random floors, walls and objects.  The interface is pretty archaic (though as of the Kitterwing update you can actually resize the viewing window; gasp) and I find it takes a lot of getting used to.  When you feel that you&#8217;re doing okay, &#8216;clear&#8217; your existing dream by going to <strong>File > New</strong>.  We&#8217;re ready to build our dream.</p>
<h4>F!W&#8217;s Tutorial Dream: The Grotto</h4>
<p>There are a lot of <em>big</em> dreams in Furc.  In fact, oversized and empty dreams seem almost <em>de rigueur</em>.  I hate these things with a passion, so we&#8217;re not going to make one of those.  Instead, we&#8217;re going to make a small &#8216;grotto&#8217; space where we can hang out and chat with a few friends.  In keeping with this theme, we&#8217;re going to make a small forested area; not unlike the one that graces the current <strong>F!W</strong> header image.  In this tutorial we&#8217;re also going to start up with some basic DragonSpeak, including commands and an animation.  Sound good?  I thought so.</p>
<p><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial05.png" rel="flashbox[d101]" title="The Dream Settings window, complete with appropriate options for our dream."><img src="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial05.thumbnail.png" alt="Dreamweaving 101: Dream Settings" class="postimg imgleft"></a>Okay, first things first; before we even lay down a single floor tile, go to <strong>Patches > Dream Settings</strong> (<code>Ctrl+L</code>).  This window is fairly self-explanatory, and you can pretty much fill it in however you want.  Note that we <em>aren&#8217;t</em> using a custom patch.  For now, the default stuff that comes with Furc is good enough for us.  When you&#8217;re done, click <strong>OK</strong>.  Before we continue, we should really save our dream. Stick it wherever you think you&#8217;ll be able to find it again; mine&#8217;s in <code>My Documents/Furcadia/Dreams/fwtutorial</code>.</p>
<p><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial06.png" rel="flashbox[d101]" title="To landscape, first we lay down a rough area to work on."><img src="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial06.thumbnail.png" alt="Dreamweaving 101: Landscaping 1" class="postimg imgright"></a>With that saved, it&#8217;s time to start building our dream.  This is the fun part.  We&#8217;re going for a secluded forest grotto, so start out with a square of grass in the top left corner of your map.  You&#8217;ll have to expand this out later, but for now this is a good starting point.  Now it&#8217;s time to start adding the detail.  I built up the map in the following way:</p>
<ul>
<li>First I added a &#8216;frame&#8217; of large trees around the north-west and north-east borders.</li>
<li>Next I started to lay down some mid-size shrubs and ferns.  We want a real &#8216;enchanted forest&#8217; kind of vibe, so keep everything tight and busy; but remember to leave it open in the middle.</li>
<li>More details, including the long grasses.  I originally added a border of shrubs around the south in order to give the place a &#8216;cross-section&#8217; kind of view.  However it looked way too regular.  Hrm&#8230;</li>
<li>More big trees!  This time, we want to completely pad out the viewer&#8217;s windows (it&#8217;s that large square that appears around your cursor) so that no matter where they&#8217;re standing all they can see is green.</li>
<li>I laid down grass floor underneath my &#8216;forest&#8217;.  Small gaps were filled in with more smallish shrubs/trees.</li>
<li>Once satisfied with the greenery, I threw in a few random rocks.</li>
<li>Finally, I added a pond (#1070) to the northern corner.</li>
</ul>
<div style="text-align: center;"><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial07.png" rel="flashbox[d101]" title="I added in the big details first; here a frame of large trees."><img src="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial07.thumbnail.png" alt="Dreamweaving 101: Landscaping 2" class="postimg"></a> <a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial08.png" rel="flashbox[d101]" title="I then started to backfill with smaller details..."><img src="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial08.thumbnail.png" alt="Dreamweaving 101: Landscaping 3" class="postimg"></a> <a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial09.png" rel="flashbox[d101]" title="... and more."><img src="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial09.thumbnail.png" alt="Dreamweaving 101: Landscaping 4" class="postimg"></a></div>
<p>The trick here is <em>wabi-sabi</em>; you&#8217;re trying to emulate a &#8216;natural&#8217; scene, so don&#8217;t be too regular.  There is enough default greenery in the basic Furcadia items list that you should be able to avoid have too many of the same object standing next to itself (except for the grass, since this is the look we&#8217;re going for).  Essentially, you want to landscape like a bowl; high stuff around the outside, lower stuff in the centre.  Use a few rocks as accents, but not too many since it will weigh down the scene.  Remember; enchanted forest!</p>
<p>Once you&#8217;re happy with your initial landscape, go <strong>Walkthrough > Run Walkthrough</strong> (<code>R</code>).  This will open up a kind of faux Furcadia session.  Wander around a bit.  Check your clipping.  Check that you can&#8217;t walk off the map.  Check that you can&#8217;t see any &#8216;black space&#8217; devoid of trees.  I should point out that the editor&#8217;s walkthrough renders objects a little differently to the real Furcadia, and it sometimes misses the corners of large objects that have their base off screen.  Furcadia itself doesn&#8217;t do this, but if you&#8217;re worried about &#8216;holes&#8217; around the edges, backfill underneath the outside trees with smaller shrubs.</p>
<div style="text-align: center;"><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial10.png" rel="flashbox[d101]" title="Running a walkthrough to see where the errors are.  Make a note of 'bad clipping' around the edges, as well as undesired walkable paths."><img src="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial10.thumbnail.png" alt="Dreamweaving 101: Walkthrough 1" class="postimg"></a> <a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial11.png" rel="flashbox[d101]" title="The second thing I noticed in the walkthrough was that you could get 'under' the pond; have to fix that as well."><img src="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial11.thumbnail.png" alt="Dreamweaving 101: Walkthrough 2" class="postimg"></a></div>
<p><img src="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial12.png" alt="Dreamweaving 101: The Unwalkable Object" class="postimg imgleft">Anyway, I found two errors in the walkthrough.  One was a path were I could walk off the map; back in the editor I blocked this up with a larger, non-walkable bush.  The second was the fact that my furre could walk <em>under</em> the pond.  This is a classic example of bad clipping and something that should be cleaned up.  The area was too open to add in more bushes, so instead I went and found object #254; the <strong>Unwalkable Object</strong>.  Technically invisible, the Unwalkable Object does exactly what it claims; furres can&#8217;t walk onto any square it occupies.  Since the &#8216;base&#8217; for the pond is actually in the object&#8217;s bottom right corner, I filled in the rest of the tiles underneath it with Unwalkable Objects.  I then re-ran the walkthrough a couple of times to make sure I was satisfied with the &#8216;neatness&#8217; of my creation.  Neatness is very important in &#8216;weaving, and easily separates out the great dreams from the mediocre ones.  Yes, your visitors <em>do</em> notice, so make sure to take some time to clean up.</p>
<p><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial13.png" rel="flashbox[d101]" title="Once we're mostly happy with our landscaping, boot up the DS Editor."><img src="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial13.thumbnail.png" alt="Dreamweaving 101: Starting the DS Editor" class="postimg imgright"></a>Okay, so now we&#8217;re reasonably happy with the <em>look</em> of our dream, but what about what it <em>does</em>?  Well, right now it does nothing.  Let&#8217;s fix that; go <strong>DragonSpeak > Run DS editor</strong> (<code>D</code>).</p>
<div class="clearboth"></div>
<h4>Basic DragonSpeak</h4>
<p><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial14.png" rel="flashbox[d101]" title="The DragonSpeak Editor. Currently looking a bit low on scripting."><img src="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial14.thumbnail.png" alt="Dreamweaving 101: The DS Editor" class="postimg imgleft"></a>There&#8217;s nothing scary about DragonSpeak.  While you can do some crazy fun stuff with it, the basics are pretty basic and it doesn&#8217;t take much to make some impressive dream effects.  The first thing you have to know about DS is that it&#8217;s pretty much written in English; commands do exactly what they sound like they do.  The second thing is that the default DS editor neatly lists out all the DS commands, numerically by type, and clearly marks up what variables each line expects.</p>
<p>The first time you open up the DS editor in a new dream, you&#8217;ll see a few lines similar to the ones above.  It&#8217;s not doing much; nothing really except for suggesting a start location for furres who warp into the dream.  This location is probably wrong.  To fix it, find the co-ordinates of a tile that <em>is</em> better using the <strong>Information</strong> window (see, I told you Current X &#038; Y would come in handy).  Change the brown numbers in the brackets on <code>5:15</code> to these co-ordinates.  Test it with the walkthrough.  That&#8217;s your start location.  Easy.</p>
<p>Some more notes about the DS Editor.  The layout is fairly intuitive; the main part of the screen is filled with the raw commands, while the bottom pane lists all possible commands broken down into Causes, Additional conditions, Areas, Filters and Effects.  Have a flip through these tabs to get a bit of an understanding on what the difference is and how to use them.  To add a command to your script, simply double-click it in the bottom pane and it will appear at the position of your text cursor, all neatly indented and everything.  <em>Variables</em> are marked by the editor in brown; the brown text indicates that you should add in your own values.</p>
<p>One more thing before we start; hit the little <strong>+</strong> button just above the commands reference until it reads <code>Expert (variables)</code>.  This will open up <em>all</em> DS commands instead of just giving us a basic list.</p>
<p>Okay, let&#8217;s start coding.  We&#8217;ve got something that plunks a new furre in the dream down at some starting location, but that&#8217;s it.  We should probably be nice and give them some kind of direction when they get there.  This is called the <strong>entrytext</strong>, and we set it using <code>5:210</code>.</p>
<p><code class="codeblock"><em>/* setting up the dream */</em><br />
(0:0) When everything is starting up,<br />
            (5:212) set silent speech prefix (for spoken commands) to {<strong>*</strong>}<br />
            (5:210) set entrytext to {<strong>Welcome to &lt;b>The Grotto&lt;/b>. Type &lt;b>*help&lt;/b> for help.</strong>}</code></p>
<p><code>0:0</code> indicates to us that the following effects will be executed when the dream is first <em>uploaded</em>, and will continue to be in effect for the entire life of the dream.  We&#8217;ve set two effects to occur; <code>5:212</code> and <code>5:210</code>.</p>
<p><code>5:212</code> is a great effect that not nearly enough dreams use and I can&#8217;t for the life of me fathom why.  You use it in conjunction with spoken dream commands to &#8217;squelch&#8217; (silence) the output.  I&#8217;ve used an asterisk here, so anything anyone says anywhere in the dream, whether it is a command or not, starting with an asterisk <em>will not be broadcast to other furres</em>.  Technically you can use any character &#8212; or string of characters &#8212; here, but be wary of anything used internally by Furcadia (such as <code>`</code>) or by common proxies (like <a href="http://heroinpuppy.com" title="Furnarchy @ Heroin Puppy" class="ext">Furnarchy</a>&#8217;s use of <code>@</code>).</p>
<p><code>5:210</code>, meanwhile, sets the dream&#8217;s entrytext.  This will be shown to any furre upon entry into the dream.  The &#8216;usual&#8217; Furcadia HTML (<code>&lt;b></code>, <code>&lt;i></code>, <code>&lt;u></code> and <code>&lt;a></code>) works here; and in fact in any text DS sends to Furc&#8217;s chat buffer.</p>
<p>To test your DS, you can either upload your dream to Furcadia somewhere or run it in a dev environment like <a href="http://dotidom.net/index.php4?mod=dreamer3" title="Furcadia Dreamer Reloaded" class="ext">Dreamer</a>.  Actually, Dreamer is pretty awesome and y&#8217;all should download it anyway.  Go do it now.</p>
<p>The next thing we&#8217;re going to do is the animation, mostly because it&#8217;s really easy and looks cool.  The code for it is:</p>
<p><code class="codeblock">/* the animation */<br />
(0:100) When <strong>1</strong> seconds have passed, offset by <strong>0</strong>,<br />
      (3:1) everywhere on the whole map,<br />
            (5:400) Cycle the three object types in this sequence one step forward: <strong>1070</strong>, <strong>1071</strong>, <strong>1072</strong>.</code></p>
<p><code>0:100</code> sets up what is called a &#8216;tick&#8217;.  The first number (in this case 1) represents the number of seconds that you want each tick to &#8216;fire&#8217;.  This particular cause ticks every one second.  The second number is how many seconds &#8216;delay&#8217; do you want before the tick starts.  We want it to start immediately, so we put 0.</p>
<p><code>3:1</code> is a filter, but it&#8217;s a pretty all-inclusive one; it tells the cause to work everywhere on the whole map.</p>
<p>Finally, <code>5:400</code> does the actual animation.  It takes three object IDs and simply cycles through them; so Object #1070 becomes Object #1071 and so on.  The three objects we&#8217;ve specifies here are all versions of the pond with different surface ripples, the end effect looks animated.</p>
<p>The next set of commands are all variations on a theme, so I&#8217;m going to lump them together.  They&#8217;re the different dream commands.</p>
<p><code class="codeblock">/* dream commands */<br />
(0:31) When a furre says {<strong>*help</strong>},<br />
            (5:200) emit message {<strong>You may use the following commands within this dream:</strong>} to whoever set off the trigger.<br />
            (5:200) emit message {<strong>&lt;b>*help&lt;/b>: You're looking at it.</strong>} to whoever set off the trigger.<br />
            (5:200) emit message {<strong>&lt;b>*about&lt;/b>: Basic dream information.</strong>} to whoever set off the trigger.<br />
            (5:200) emit message {<strong>&lt;b>*look &lt;i>[object]&lt;/i>&lt;/b>: Look around or at objects.</strong>} to whoever set off the trigger.</code></p>
<p><code class="codeblock">(0:31) When a furre says {<strong>*about</strong>},<br />
            (5:200) emit message {<strong>&lt;b>The Grotto&lt;/b>, a tutorial dream developed by the nice folks at &lt;a href="http://furc.void-star.net/wank">Furc!Wank&lt;/a>.</strong>} to whoever set off the trigger.</code></p>
<p><code class="codeblock">/* looking */<br />
(0:31) When a furre says {<strong>*look</strong>},<br />
   (1:8) and they can see position (<strong>18</strong><strong>,21</strong>),<br />
            (5:200) emit message {<strong>You have reached a small clearing in the forest.  A small &lt;i>pond&lt;/i> ripples gently to the north, and a small ring of &lt;i>rocks&lt;/i> have been laid out in the south.</strong>} to whoever set off the trigger.</code></p>
<p><code class="codeblock">(0:31) When a furre says {<strong>*look pond</strong>},<br />
   (1:8) and they can see position (<strong>18</strong>,<strong>17</strong>),<br />
            (5:200) emit message {<strong>A small &lt;i>pond&lt;/i> ripples gently in the breeze.  You think you can see something glinting at the bottom...</strong>} to whoever set off the trigger.</code></p>
<p><code class="codeblock">(0:31) When a furre says {<strong>*look rocks</strong>},<br />
   (1:8) and they can see position (<strong>18</strong>,<strong>23</strong>),<br />
            (5:200) emit message {<strong>A small ring of stones has been arranged here.  They look perfect for sitting and enjoying the scenery.</strong>} to whoever set off the trigger.</code></p>
<p>Dream commands!  Note that we&#8217;ve prefixed them all with our squelch-character (<code>*</code>).</p>
<p>I suspect at this point it&#8217;s fairly obvious, but I&#8217;m a big fan of those old-style command-based adventure games; things like <em>King&#8217;s Quest</em> and <em>Zork</em>.  To that end, here I&#8217;ve set up a system of &#8216;looking&#8217; very similar to the one which used to appear in those old games.  They all use the additional condition <code>1:8</code>, which is pretty useful in this kind of situation since it checks what is drawn on a furre&#8217;s screen, and whether they can &#8217;see&#8217; a certain object (there are other conditions that you can use instead, including make sure a furre is standing in a particular spot, or within a certain area).  Obviously it makes no sense to <strong>*look pond</strong> if there&#8217;s no pond to look at.  Objects that can be looked at are marked with italic text in descriptions just as a little visual clue to the visitor.</p>
<p><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial15.png" rel="flashbox[d101]" title="I re-ordered the rocks a bit to make a nice little sitting ring."><img src="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial15.thumbnail.png" alt="Dreamweaving 101: One Last Look" class="postimg imgleft"></a>And that&#8217;s about it.  Save your DS and re-test your dream; congratulations, you&#8217;ve successfully made a neat little semi-private where you and some mates can hang out, enjoy the gentle ripples of your animated pond and relive 1989 with your text-based look commands.  You&#8217;ll note that in my final product I re-arranged my previously semi-random rocks a bit into a sitting ring.  Hopefully by now you&#8217;ve had enough of an introduction to the dream and DS editors that you can start compiling more extensive dreams.  Remember; have fun and experiment!</p>
<p>As to the glinting object in the bottom of the pool?  Well, you&#8217;ll have to wait for the next tutorial, won&#8217;t you?</p>
<div style="text-align: center; clear: both;"><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial16.png" rel="flashbox[d101]" title="And there we have it; a cute little leafy grotto, complete with animated pond."><img src="http://furc.void-star.net/wank/wp-content/uploads/2007/05/dstutorial16.thumbnail.png" alt="Dreamweaving 101: Finished Product" class="postimg"></a></div>
<h4>More&#8230;</h4>
<ul>
<li><strong>Tutorial Files:</strong> <a href='http://furc.void-star.net/wank/wp-content/uploads/2007/05/fwtutorial00.zip' title='The Grotto'>fwtutorial00.zip</a>.</li>
</ul>
<img src="http://wank.furced.net/?ak_action=api_record_view&id=84&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://wank.furced.net/archive/dreamweaving-101/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Building a Basic Dream Bot</title>
		<link>http://wank.furced.net/archive/building-a-basic-dream-bot/</link>
		<comments>http://wank.furced.net/archive/building-a-basic-dream-bot/#comments</comments>
		<pubDate>Thu, 10 May 2007 03:24:07 +0000</pubDate>
		<dc:creator>the skullkitty</dc:creator>
				<category><![CDATA[FurBot]]></category>

		<guid isPermaLink="false">http://furc.void-star.net/wank/archive/building-a-basic-dream-bot/</guid>
		<description><![CDATA[ Every dream needs a bot.  Well, this probably isn&#8217;t strictly true but bots can definitely add some ease-of-use functionality to your dream, particularly with their ability to auto-summon players.  They&#8217;re also useful for various other sneaky dream maintenance tasks like logging visitors, and acting as a kind of &#8216;messaging service&#8217; for people [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot000.png" rel="flashbox[fb]" title="The FurBot main window."><img src='http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot000.thumbnail.png' alt="FurBot: Main Window" class="postimg imgleft"></a> Every dream needs a bot.  Well, this probably isn&#8217;t strictly true but bots can definitely add some ease-of-use functionality to your dream, particularly with their ability to auto-summon players.  They&#8217;re also useful for various other sneaky dream maintenance tasks like logging visitors, and acting as a kind of &#8216;messaging service&#8217; for people to leave comments about how awesome your dream is.</p>
<p>The good news is that bots are not hard to make.  In fact, by the end of this post you will not only have a bot that does all of the above, but will also hopefully become familiar enough with the interface to extend its functionality to suit your own dream.  So let&#8217;s get started.</p>
<p>First off, you&#8217;re going to need to <a href="http://furbot.dreammakersguild.com/" class="ext" title="FurBot">download FurBot</a>. Originally developed by <a href="http://furc.sanct.net/" class="ext" title="sanctimonious' ultimate DISASTER site">sanctimonious</a>, it is probably <em>the</em> most popular bot client currently running in Furcadia.  As a bonus to anyone experienced with dreamweaving, the command scripting interface is fairly similar to the DragonSpeak editor, which is always nice.</p>
<p>Okay, so go download FurBot and run the installer. I&#8217;ll wait here until you get back&#8230;</p>
<p>&#8230; okay great.  Now it&#8217;s time to open the client. You should be presented with a window similar to the one above. We don&#8217;t currently have a bot open, so it&#8217;s a good idea to create one straight away (it&#8217;s highly likely that you <em>will</em> crash the client, so remember to save early and save often). The first thing we need to do is check some settings, so go <strong>File > Configuration</strong>. In the configuration window, make sure the following information is filled in:</p>
<div style="text-align: center"><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot000.png" rel="flashbox[fb]" title="FurBot configuration settings."><img src='http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot001.png' alt='FurBot: Configuration' class="postimg"></a></div>
<p>Obviously make sure that the <strong>Furcadia client program</strong> points to your <code>Furcadia.exe</code> application.  There&#8217;s also a caveat here with the <strong>Who Is Online Detection</strong> setting; I can never make this work by simply ticking the box (it always unticks itself).  Instead, change the number in the <em>Execute map Who every</em> box and hit <strong>Save</strong>.  You can tell if the WhoIs is working (and we <em>will</em> need it) because &#8212; once connected to Furcadia &#8212; the results will appear in the log message on the main FurBot screen.  But we&#8217;re getting a bit ahead of ourselves.</p>
<div style="text-align: center"><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot002.png" rel="flashbox[fb]" title="FurBot bot command settings."><img src='http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot002.png' alt='FurBot: Bot' class="postimg"></a></div>
<p>Next we need to turn on the parts of our bot that we will be using.  Bots can perform several different tasks:</p>
<ul>
<li><strong>Actions</strong> are triggered when the bot &#8216;hears&#8217; another furre. Whispers, speech and emits can all be triggers for actions.</li>
<li><strong>Filters</strong> don&#8217;t actually make the bot &#8216;do&#8217; anything. Instead they govern what data is recorded in the logs and presented in the main bot window.</li>
<li><strong>Timers</strong> cause something to happen after a certain period of time has elapsed.</li>
<li><strong>Triggers</strong> are a bit like actions but are (a-har) triggered by non-speech events.</li>
<li>Finally, <strong>who detection</strong> commands manipulate data returned by the bot&#8217;s <code>`who</code> tick.</li>
</ul>
<p>We are going to be using <em>actions</em>, <em>triggers</em> and <em>who detection</em>, so make sure these three options are ticked.</p>
<p>Our next step is to actually make a character to use as our bot.  Boot up the Furcadia client and make a character in the usual way.  I&#8217;ve called mine <strong>F!W Test Bot</strong>.  Get it into the game and park it somewhere reasonably private (preferably a private dream).  Remember, that while bots are legal on Furcadia they are still governed by the same rules as normal players.  It&#8217;s highly likely that at least once you&#8217;ll end up making your bot do something stupid (such as spam random text), so it&#8217;s best to put it somewhere it won&#8217;t bother other users (and they won&#8217;t bother it).  Once you&#8217;re happy with your spot, log out of the client.</p>
<p>Back in FurBot, Click the <strong>Edit</strong> button under <em>Current bot</em>.</p>
<div style="text-align: center"><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot003.png" rel="flashbox[fb]" title="FurBot bot settings."><img src='http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot003.png' alt='FurBot: Edit Bot' class="postimg"></a></div>
<p>From this window, click <strong>Load from .INI&#8230;</strong> and select the <code>.ini</code> file for the bot character you just made.  Make sure all the details are correct, and press <strong>Save</strong>.</p>
<p><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot004.png" rel="flashbox[fb]" title="The bot goes live!"><img src='http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot004.thumbnail.png' alt='FurBot: The Bot' class="postimg imgleft"></a>Now we save the bot (<strong>File > Save bot</strong>).  Make sure to put it somewhere you&#8217;ll easily find it again; I put mine inside <code>My Documents/Furcadia/Bots</code>.  Now it&#8217;s time to connect the bot to the game, so from the main FurBot window press <strong>Connect</strong>.  If all is well and good, the Furcadia client should open up and your bot should appear on the screen, standing wherever it was when you logged it out.  Assuming you&#8217;ve set FurBot&#8217;s options correctly, after a few moment a message should appear in the client window telling you that you may close the client (that&#8217;s Furcadia, <em>not</em> FurBot).  Do so.  If you look back at the FurBot window, it should still appear connected. The easiest way to tell is to look at the icon in the system tray (next to the clock); if the traffic light is green, the bot is online.  Also make sure that your bot is who&#8217;ing appropriately; you should see the output of the who appear in FurBot&#8217;s log every now and again.  If it doesn&#8217;t, open back up the configuration window and change the time increment until it starts.</p>
<p><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot005.png" rel="flashbox[fb]" title="Setting up an auto-summon."><img src='http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot005.thumbnail.png' alt='FurBot: Edit Triggers' class="postimg imgright"></a>Okay, so we&#8217;ve got a bot but it doesn&#8217;t actually <em>do</em> anything at the moment.  Time to fix that.  First off, we&#8217;re going to make it auto-summon.  Open up the <strong>Editing Triggers</strong> window and click <strong>Add</strong>.  Fill in the details as shown.  To get the <strong>Editing Effects</strong> pane open, click <strong>Add</strong> underneath the the &#8216;then&#8217; textbox.  To save the trigger, click <strong>Save</strong>, then <strong>Update</strong>, then <strong>Save Changes</strong> (and yes, it&#8217;s convoluted; I &#8216;drop&#8217; rules all the time due to mis-clicks!).</p>
<div style="text-align: center"><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot010.png" rel="flashbox[fb]" title="Testing the summoning bot..."><img src='http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot010.png' alt='FurBot: Join Bot 1' class="postimg"></a></div>
<div style="text-align: center"><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot011.png" rel="flashbox[fb]" title="... success!"><img src='http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot011.png' alt='FurBot: Join Bot 2' class="postimg"></a></div>
<p>Once you&#8217;ve clicked save (or <strong>Apply</strong>) in the triggers window, save your bot again.  Now it&#8217;s time to test your rule.  Boot up Furcadia again and open a different character.  Request to join your bot; hopefully, you should be instantly whisked away to its location!</p>
<div style="text-align: center"><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot006.png" rel="flashbox[fb]" title="Creating the log arrivals rule..."><img src='http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot006.thumbnail.png' alt='FurBot: Log Arrivals' class="postimg"></a> <a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot007.png" rel="flashbox[fb]" title="... and the log departures rule."><img src='http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot007.thumbnail.png' alt='FurBot: Log Departures' class="postimg"></a></div>
<p>Now we&#8217;re going to make the log arrivals and departures rule.  For this, we&#8217;re going to need open up <strong>Edit Who Detection</strong>.  In a similar way that you created the auto-summon trigger, fill in the WhoIs window as above.  This time we&#8217;re making two separate rules, so you&#8217;ll have to go through the process twice.  You&#8217;ll notice we&#8217;ve got some words in square brackets.  These represent <em>variables</em> in FurBot.  A variable is a word that, when the script is executed, will be replaced with another value.  There are quite a number of internal FurBot variables (full details can be found on the website), and you can define your own using WolfScript, but for now the ones we&#8217;ll be using are as follows:</p>
<ul>
<li><code>[DATE]</code> will be replaced by the current date in US format (mm-dd-yyyy).</li>
<li><code>[TIME]</code> will be replaced by the current time (24-hours, no seconds).</li>
<li><code>[PLAYER]</code> will be replaced by the name of the furre that triggers the script (in this case, the furre entering or leaving the dream).</li>
<li><code>[APPDIR]</code> will be replaced by the path to the directory where the bot is run from; usually the FurBot install directory. You can replace this with a hard-coded path (i.e. to the folder where you saved your bot).</li>
</ul>
<p>You&#8217;ll also notice that where it says <em>If _______ comes to the map</em> we have an asterisk (<code>*</code>) in place of a name.  The asterisk is what&#8217;s known as a <em>wildcard character</em>, and in this case it will match anything.  You can, of course, put an actual name in this space however that would mean the script was triggered only when that furre entered the dream.  Since we want this to log <em>everyone</em>, we use the wildcard.</p>
<p>Save your two new detections and it&#8217;s time to test them out once more.  To do this, simply leave and then re-enter the dream containing your bot (or, if you&#8217;re on a public or otherwise popular map, just let it run for a while).  Note that FurBot gets its player information on each tick of the <code>`who</code> command, so it&#8217;s theoretically possible to jump in an out of a dream quickly enough to not be &#8216;detected&#8217; by the bot.  If you&#8217;re having a problem with &#8216;missing&#8217; players in this fashion, you can simply set the who tick to a shorter duration.  Anyway, when you think you&#8217;ve got a few records, open up your <code>visitors.log</code> file from wherever you decided to save it (it&#8217;s a plain text file, so opening it with Notepad is okay).  If all is well, you should see some lines that look similar to:</p>
<p><code class="codeblock">"05-10-2007 12:04   IN    Loki|Laufeyjarson"<br />
"0"<br />
"05-10-2007 12:06   OUT   Loki|Laufeyjarson"<br />
"0"</code></p>
<p>Don&#8217;t worry about the numbers in the quotation marks for now; these are markers for more complex log manipulations by FurBot.</p>
<div style="text-align: center"><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot008.png" rel="flashbox[fb]" title="The whisper log. First we reply to the user..."><img src='http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot008.thumbnail.png' alt='FurBot: Whisper Reply' class="postimg"></a> <a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot009.png" rel="flashbox[fb]" title="... then we log their message."><img src='http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot009.thumbnail.png' alt='FurBot: Whisper Log' class="postimg"></a></div>
<p>We&#8217;re almost done.  The final thing we want out bot to do is reply to anyone who whispers it, and to log their message in a file so we can read it later.  Open up <strong>Editing Actions</strong> and create a new action as follows.  This action has two parts to its <em>Then</em> clause instead of the one we&#8217;ve previously been using.  The first one replies to the whisperer (note that to get the &#8216;large&#8217; editing text box, simply double-click in the small text box normally provided).  If you want to insert your own dream URL into the message as opposed to F!Ws (though of course we wouldn&#8217;t say no to the publicity), you can use <code>[DREAMURL]</code>.  Note that this will take the last dream retrieved from <code>`who</code>, so it will only work <em>if your bot is sitting in your own dream</em>.</p>
<p>The next part of the rule we&#8217;re going to add will log the message that was whispered to our bot; this is similar to what we did for logging arrivals and departures, except this time our <em>0 Record Name</em> line looks like:</p>
<p><code class="codeblock">[DATE] [TIME]   [PLAYER]: [MESSAGE]</code></p>
<p><code>[MESSAGE]</code> is another internal variable which returns the message from the triggering player (more technically, it&#8217;s everything after the first space character).</p>
<div style="text-align: center"><a href="http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot012.png" rel="flashbox[fb]" title="The bot talks back!"><img src='http://furc.void-star.net/wank/wp-content/uploads/2007/05/furbot012.png' alt='FurBot: Auto-Reply' class="postimg"></a></div>
<p>Save your new action (and your bot) and test it out by booting up Furcadia and whispering your bot. You should get a response back, and your <code>whispers.log</code> should record the message.</p>
<p>And that&#8217;s it!  Congratulations, you&#8217;ve successfully made a very simple yet hugely useful dream bot.</p>
<h4>More&#8230;</h4>
<ul>
<li><strong>Tutorial Files:</strong> <a href='http://furc.void-star.net/wank/wp-content/uploads/2007/05/fwtestbot00.zip' title='Download the full test bot.'>fwtestbot00.zip</a>.</li>
</ul>
<img src="http://wank.furced.net/?ak_action=api_record_view&id=53&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://wank.furced.net/archive/building-a-basic-dream-bot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
