<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Heroic Adventure!</title>
        <link>http://geekswithblogs.net/cwilliams/category/5275.aspx</link>
        <description>stuff only about HA!</description>
        <language>en-US</language>
        <copyright>Chris Williams</copyright>
        <managingEditor>chrisgwilliams@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>writing sample</title>
            <link>http://geekswithblogs.net/cwilliams/archive/2008/06/29/123465.aspx</link>
            <description>&lt;span style="font-weight: bold;"&gt;The following is an excerpt from a story I'm working on. Writing fiction is a lot harder than blogging. Writing interesting fiction even harder still... so take this for what it is.  A rough, first attempt.  enjoy (or avoid... your choice.)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;p class="MsoNormal" style="color: rgb(0, 0, 255);"&gt;&lt;font size="3"&gt;Lathan swung his axe for what felt like the thousandth time that day, turning, ducking and swinging as blood and gore flew past his head. For every orc the warrior took down, it seemed as though another stepped in to continue the fight. &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="color: rgb(0, 0, 255);"&gt;&lt;font size="3"&gt;“Where the hell is Shawna?” he cursed to himself, more worried than angry. She wasn’t much good in a fight and the tenets of her faith prevented her from wearing armor. If she had fallen… well, best not to think about that now. Without the halfling’s divine healing on their side, mending wound and spirit, Lathan wasn’t sure how much longer they would last. &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="color: rgb(0, 0, 255);"&gt;&lt;font size="3"&gt;Shaking off thoughts of his own mortality, Lathan threw himself back into the fight. He had felt it was hopeless before the first swing, but they had been caught completely off guard by the ambush and he didn’t have time to think about that now. Ducking under a wild swing, spinning around and slicing the orc in half from behind, he stole a glance across the battlefield, where he could see Durok’s dwarven helm shining in the moonlight, the dwarf fighting from atop a steadily growing pile of dead orcs. &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="color: rgb(0, 0, 255);"&gt;&lt;font size="3"&gt;Behind him, he heard the reassuring song of the elf Azura, getting closer and closer. Every note served to bolster his confidence and renew his strength. How she could sing like that and fight at the same time, he would never understand. Before long he was taking orcs down two at a time and the gaps weren’t being filled quite so fast.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="color: rgb(0, 0, 255);"&gt;&lt;font size="3"&gt;“Just maybe, gods willing, we’ll make it through this day after all.” Lathan barely had time to finish his thought as he felt the searing heat of a firebolt spell flying past his head. “Damn that wizard if he doesn’t kill us all before the orcs do.”&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123465"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123465" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/cwilliams/aggbug/123465.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Williams</dc:creator>
            <guid>http://geekswithblogs.net/cwilliams/archive/2008/06/29/123465.aspx</guid>
            <pubDate>Mon, 30 Jun 2008 03:30:25 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/cwilliams/comments/123465.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/cwilliams/archive/2008/06/29/123465.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/cwilliams/comments/commentRss/123465.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/cwilliams/services/trackbacks/123465.aspx</trackback:ping>
        </item>
        <item>
            <title>Heroic Adventure! now with automatic updates</title>
            <link>http://geekswithblogs.net/cwilliams/archive/2008/06/16/122888.aspx</link>
            <description>I've been playing with ClickOnce at work lately, and I like it, so I decided to publish HA! with it. &lt;br /&gt;
&lt;br /&gt;
HA! really is the perfect application for it, since there are no external dependancies (other than .NET 2.0) and it doesn't care where you put it. I'll also be able to tap into the ClickOnce On-Demand API (which you can't do unless its running under ClickOnce) and pull down updates automatically in the background.&lt;br /&gt;
&lt;br /&gt;
The project along with all the sourcecode, bug tracking, etc is all still hosted on Codeplex at &lt;a href="http://www.heroicadventure.com"&gt;http://www.heroicadventure.com&lt;/a&gt; but the publish site (since Codeplex still doesnt offer ClickOnce support) is &lt;a href="http://www.ILoveVB.net/HA/publish.htm"&gt;http://www.ILoveVB.net/HA/publish.htm&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Once you visit the publish page and install HA! you can just run it from your start menu and it will automatically check for updates when you run it and you'll always have the latest version (unless you choose not to update.)&lt;br /&gt;
&lt;br /&gt;
Of course, automatic updates does kind of imply that I'll actually be updating HA! once in a while... no?&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122888"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122888" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/cwilliams/aggbug/122888.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Williams</dc:creator>
            <guid>http://geekswithblogs.net/cwilliams/archive/2008/06/16/122888.aspx</guid>
            <pubDate>Mon, 16 Jun 2008 13:54:25 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/cwilliams/comments/122888.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/cwilliams/archive/2008/06/16/122888.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/cwilliams/comments/commentRss/122888.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/cwilliams/services/trackbacks/122888.aspx</trackback:ping>
        </item>
        <item>
            <title>The Gygax</title>
            <link>http://geekswithblogs.net/cwilliams/archive/2008/03/07/120352.aspx</link>
            <description>I've been struggling with how to properly pay my respects to someone I never met in person, but that had such a tremendous impact on my life. &lt;br /&gt;
&lt;br /&gt;
I've looked at all the various tributes and cartoons, and I've heard the stories about people getting together in WoW and City of Heroes (and even City of Villains), setting aside their weapons and talking about what a huge effect Gary Gygax and D&amp;amp;D had on their lives.&lt;br /&gt;
&lt;br /&gt;
3 days later, I'm still at a loss for words. You know, how to really express how unbelievably sad this makes me.&lt;br /&gt;
&lt;br /&gt;
But I have figured out a fitting tribute... in three parts.&lt;br /&gt;
&lt;br /&gt;
The first one is fairly obvious. &lt;a href="http://geekswithblogs.net/cwilliams/archive/2008/03/02/120136.aspx"&gt;Selling the D&amp;amp;D collection&lt;/a&gt; is pretty much out of the question now.&lt;br /&gt;
&lt;br /&gt;
The second one makes perfect sense to me.  Heroic Adventure! would have never existed if not for Gary Gygax. So, from this point forward I am dedicating it to Gary Gygax.  The next build you see (um... eventually) will feature his name on the title screen.  &lt;span style="font-style: italic;"&gt;(edit: This one is done, although not checked in to source control yet. Check out the &lt;a href="http://www.ilovevb.net/ha/ha_title_screen.png"&gt;screenshot&lt;/a&gt;. The stalactites and stalagmites are new too, and... wait for it... randomly generated.  I love it.)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The third part might take a little while to work out the details, but I'm adding a new creature "The Gygax" to &lt;a href="http://www.heroicadventure.com" title=""&gt;HA!&lt;/a&gt; in the form of a wise old man, later in the game. He'll be a pretty key part of the unfolding storyline. I thought about making him a monster, because honestly I think he'd appreciate the untold thousands of horrific ends that would await him, but I'm pretty happy with my decision.&lt;br /&gt;
&lt;br /&gt;
So thank you again Gary, for D&amp;amp;D and the D&amp;amp;D Cartoon and for (decades later) Heroic Adventure!  It sucks that you're gone, but your work and the effect it had lives on through millions of people.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120352"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120352" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/cwilliams/aggbug/120352.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Williams</dc:creator>
            <guid>http://geekswithblogs.net/cwilliams/archive/2008/03/07/120352.aspx</guid>
            <pubDate>Fri, 07 Mar 2008 16:55:49 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/cwilliams/comments/120352.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/cwilliams/archive/2008/03/07/120352.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/cwilliams/comments/commentRss/120352.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/cwilliams/services/trackbacks/120352.aspx</trackback:ping>
        </item>
        <item>
            <title>Dwarf Fortress - how did I never hear about this?</title>
            <link>http://geekswithblogs.net/cwilliams/archive/2008/02/27/120018.aspx</link>
            <description>From the DF wiki:&lt;br /&gt;
&lt;p style="font-style: italic;"&gt;&lt;strong&gt;Dwarf Fortress&lt;/strong&gt; is an ASCII game which includes both a &lt;a title="" href="http://en.wikipedia.org/wiki/Roguelike"&gt;roguelike&lt;/a&gt; &lt;a title="Adventure mode" href="http://dwarf.lendemaindeveille.com/index.php/Adventure_mode"&gt;adventure mode&lt;/a&gt;, and the more popular &lt;a title="Dwarf Fortress Mode" href="http://dwarf.lendemaindeveille.com/index.php/Dwarf_Fortress_Mode"&gt;Dwarf Fortress Mode&lt;/a&gt;, which focuses on the creation and survival of a small dwarven settlement. It has a very steep learning curve, partly due to its ASCII graphics, but also due to the fact that it is one of the most complex games ever released. Dwarf Fortress is completely free. &lt;br /&gt;
&lt;/p&gt;
&lt;p style="font-style: italic;"&gt;Before you play, you must &lt;a title="World generation" href="http://dwarf.lendemaindeveille.com/index.php/World_generation"&gt;generate a world&lt;/a&gt; to play in, which persists until you create a new one. &lt;a title="World Generation" href="http://dwarf.lendemaindeveille.com/index.php/World_Generation"&gt;World generation&lt;/a&gt; can be time consuming, even on modern computers, but be patient. It's worth it. &lt;/p&gt;
&lt;p style="font-style: italic;"&gt;Dwarf Fortress has three major game modes and a fourth non-game mode: &lt;/p&gt;
&lt;ul style="font-style: italic;"&gt;
    &lt;li&gt; &lt;a title="Dwarf Fortress mode" href="http://dwarf.lendemaindeveille.com/index.php/Dwarf_Fortress_mode"&gt;Dwarf Fortress Mode&lt;/a&gt;: In this mode you manage a number of &lt;a title="Dwarves" href="http://dwarf.lendemaindeveille.com/index.php/Dwarves"&gt;dwarves&lt;/a&gt; whose task is to create a &lt;a title="Dwarf fortress mode" href="http://dwarf.lendemaindeveille.com/index.php/Dwarf_fortress_mode"&gt;fortress&lt;/a&gt;. &lt;/li&gt;
    &lt;li&gt; &lt;a title="Reclaim fortress mode" href="http://dwarf.lendemaindeveille.com/index.php/Reclaim_fortress_mode"&gt;Reclaim Fortress&lt;/a&gt;: Once you have created and &lt;a title="Losing" href="http://dwarf.lendemaindeveille.com/index.php/Losing"&gt;abandoned/lost&lt;/a&gt; a &lt;a title="Dwarf fortress mode" href="http://dwarf.lendemaindeveille.com/index.php/Dwarf_fortress_mode"&gt;fortress&lt;/a&gt;, you can take a band of &lt;a title="Military" href="http://dwarf.lendemaindeveille.com/index.php/Military"&gt;military&lt;/a&gt; dwarves to &lt;a title="Combat" href="http://dwarf.lendemaindeveille.com/index.php/Combat"&gt;fight&lt;/a&gt; the monsters that now inhabit it. If you succeed, the fortress is yours to play in once more, just like the standard &lt;a title="Dwarf fortress mode" href="http://dwarf.lendemaindeveille.com/index.php/Dwarf_fortress_mode"&gt;dwarf fortress mode&lt;/a&gt;. &lt;/li&gt;
    &lt;li&gt; &lt;a title="Adventure mode" href="http://dwarf.lendemaindeveille.com/index.php/Adventure_mode"&gt;Adventure Mode&lt;/a&gt;: In this mode you explore the world in a fashion similar to Rogue, Nethack, or Angband, completing quests and killing monsters. In adventure mode you can uncover details about your world's &lt;a title="Legends" href="http://dwarf.lendemaindeveille.com/index.php/Legends"&gt;legends&lt;/a&gt;. &lt;/li&gt;
    &lt;li&gt; &lt;a title="Legends" href="http://dwarf.lendemaindeveille.com/index.php/Legends"&gt;Legends&lt;/a&gt;: In the fourth mode you can read more about the &lt;a title="Legends" href="http://dwarf.lendemaindeveille.com/index.php/Legends"&gt;legends&lt;/a&gt; of your world, provided you've discovered them through &lt;a title="Adventure mode" href="http://dwarf.lendemaindeveille.com/index.php/Adventure_mode"&gt;adventuring&lt;/a&gt;. &lt;/li&gt;
&lt;/ul&gt;
&lt;p style="font-style: italic;"&gt;An important part of Dwarf Fortress is that it creates a randomly generated, persistent &lt;a title="World Generation" href="http://dwarf.lendemaindeveille.com/index.php/World_Generation"&gt;world&lt;/a&gt; for you to play in. (The world is only "on" when you are actually playing in it, however.) When you die in either the &lt;a title="Adventure mode" href="http://dwarf.lendemaindeveille.com/index.php/Adventure_mode"&gt;adventure&lt;/a&gt; or &lt;a title="Fortress" href="http://dwarf.lendemaindeveille.com/index.php/Fortress"&gt;fortress&lt;/a&gt; modes, your next game will be in the same world, albeit a few days later. You can visit your old fortress, or get revenge on the monster that killed your adventurer. If your fortress or your adventurer had done anything of particular note, there's a chance that the game will generate a &lt;a title="Legend" class="new" href="http://dwarf.lendemaindeveille.com/index.php?title=Legend&amp;amp;action=edit"&gt;legend&lt;/a&gt; for them, which you can read about in the &lt;a title="Legends" href="http://dwarf.lendemaindeveille.com/index.php/Legends"&gt;legends&lt;/a&gt; section. (Provided you've discovered enough information about the legend) &lt;/p&gt;
&lt;br /&gt;
&lt;br /&gt;
For more info:  &lt;a href="http://dwarf.lendemaindeveille.com/index.php/Dwarf_Fortress:About"&gt;http://dwarf.lendemaindeveille.com/index.php/Dwarf_Fortress:About&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
For even MORE info, read this cool &lt;a href="http://www.gamasutra.com/view/feature/3549/interview_the_making_of_dwarf_.php"&gt;Gamasutra article&lt;/a&gt;.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120018"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120018" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/cwilliams/aggbug/120018.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Williams</dc:creator>
            <guid>http://geekswithblogs.net/cwilliams/archive/2008/02/27/120018.aspx</guid>
            <pubDate>Wed, 27 Feb 2008 16:45:30 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/cwilliams/comments/120018.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/cwilliams/archive/2008/02/27/120018.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/cwilliams/comments/commentRss/120018.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/cwilliams/services/trackbacks/120018.aspx</trackback:ping>
        </item>
        <item>
            <title>The best week ever...</title>
            <link>http://geekswithblogs.net/cwilliams/archive/2008/02/20/119809.aspx</link>
            <description>&lt;span style="font-weight: bold;"&gt;This just might be the best week ever, or at least the best one in a long time...&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Sunday I watched the new &lt;a href="http://geekswithblogs.net/cwilliams/archive/2008/02/18/119736.aspx"&gt;Knight Rider&lt;/a&gt; which was a lot of fun.  I hope they make it a series.&lt;br /&gt;
&lt;br /&gt;
My tablet &lt;a href="http://geekswithblogs.net/cwilliams/archive/2008/02/20/119790.aspx"&gt;finally showed up yesterday&lt;/a&gt; and its working GREAT.&lt;br /&gt;
&lt;br /&gt;
My &lt;a href="http://geekswithblogs.net/cwilliams/archive/2008/01/23/118841.aspx"&gt;XBOX 360 has been repaired&lt;/a&gt; and is on it's way. (&lt;span style="font-style: italic;"&gt;edit:  FedEx says it will be here tomorrow.&lt;/span&gt;)&lt;br /&gt;
&lt;br /&gt;
I just finished tech editing a (IMO) terrific VB 2008 book for O'Reilly.&lt;br /&gt;
&lt;br /&gt;
Yesterday I got a nice letter from Microsoft, not just informing me about my MVP status &amp;amp; benefits but also welcoming me to the North Central district. Slightly more personal than your usual form letter. Pretty cool. &lt;br /&gt;
&lt;br /&gt;
Yesterday was Boy #1's Birthday, and we had a great time. His actual party is this weekend, and there will be rock. (Apparently some of his buddies are bringing musical instruments.)  I'm really looking forward to this.&lt;br /&gt;
&lt;br /&gt;
Today I lined up another tech editing gig, this time for Deitel (Pearson Ed) for another VB 2008 book!&lt;br /&gt;
&lt;br /&gt;
Today, I found out that there will be &lt;a href="http://geekswithblogs.net/cwilliams/archive/2008/02/20/119805.aspx"&gt;XNA support for the ZUNE&lt;/a&gt; (omfglol) by the end of the year AND that there will be &lt;a href="http://www.microsoft.com/XNA" title=""&gt;XNA&lt;/a&gt; Community Games on XBOX Live, starting today (with DBP winner The Dishwasher)&lt;br /&gt;
&lt;br /&gt;
The &lt;a href="http://dreambuildplay.com/main/winners.aspx"&gt;Dream Build Play Silicon Minds Warmup Challenge&lt;/a&gt; winners are posted. Go there now. I'll wait.&lt;br /&gt;
&lt;br /&gt;
Tomorrow night is my &lt;a href="http://www.twincitiesxnausergroup.com"&gt;XNA User Group,&lt;/a&gt; and we're talking about one of my FAVORITE topics (other than yours truly):  Game AI&lt;br /&gt;
&lt;br /&gt;
I spent several hours last night working on &lt;a href="http://www.heroicadventure.com" title=""&gt;HA!&lt;/a&gt; again... that was awesome.&lt;br /&gt;
&lt;br /&gt;
This weekend I'm hosting 20 complete strangers in my home for a Boardgames Meetup. Should be fun.&lt;br /&gt;
&lt;br /&gt;
Man, this week has just flown by...&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119809"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119809" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/cwilliams/aggbug/119809.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Williams</dc:creator>
            <guid>http://geekswithblogs.net/cwilliams/archive/2008/02/20/119809.aspx</guid>
            <pubDate>Wed, 20 Feb 2008 20:24:39 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/cwilliams/comments/119809.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/cwilliams/archive/2008/02/20/119809.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/cwilliams/comments/commentRss/119809.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/cwilliams/services/trackbacks/119809.aspx</trackback:ping>
        </item>
        <item>
            <title>Mersenne Twister vb.net code</title>
            <link>http://geekswithblogs.net/cwilliams/archive/2008/02/19/119768.aspx</link>
            <description>I recently posted the VB.NET Mersenne Twister code (rewritten from C# courtesy of Paul Vick) over at ILoveVB.NET.  If you haven't looked at it before, it's pretty neat stuff. It wasn't even possible in VB.NET 1.1 because of a lack of support for unsigned integers, with VB.NET 2.0 that problem went away.&lt;br /&gt;
&lt;br /&gt;
If you don't know what a Mersenne Twister is, or why I would want one over, say, System.Random or System.Security.Cryptography.RNGCryptoServiceProvider then you may want to read &lt;a href="http://geekswithblogs.net/cwilliams/archive/2005/04/20/37134.aspx"&gt;this fine piece of writing&lt;/a&gt; first.&lt;br /&gt;
&lt;br /&gt;
So there ya have it, if you're looking for some "true" random, and speed &amp;amp; security aren't big factors, go with the twister.&lt;br /&gt;
&lt;br /&gt;
Posted &lt;a href="http://ilovevb.net/Web/blogs/heroicadventure/archive/2008/02/19/a-more-random-random.aspx"&gt;here&lt;/a&gt; at: &lt;a href="http://www.ilovevb.net"&gt;www.ILoveVB.NET&lt;/a&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119768"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119768" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/cwilliams/aggbug/119768.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Williams</dc:creator>
            <guid>http://geekswithblogs.net/cwilliams/archive/2008/02/19/119768.aspx</guid>
            <pubDate>Tue, 19 Feb 2008 21:05:07 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/cwilliams/comments/119768.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/cwilliams/archive/2008/02/19/119768.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/cwilliams/comments/commentRss/119768.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/cwilliams/services/trackbacks/119768.aspx</trackback:ping>
        </item>
        <item>
            <title>HA! 0.1.6f</title>
            <link>http://geekswithblogs.net/cwilliams/archive/2008/02/18/119751.aspx</link>
            <description>&lt;a title="" href="http://www.heroicadventure.com"&gt;HA!&lt;/a&gt; 0.1.6f hit &lt;a href="http://www.heroicadventure.com"&gt;CodePlex&lt;/a&gt; tonight after a very long period of no activity on my part. The main purpose of this update is to provide a couple minor bugfixes and most importantly a working build again.&lt;br /&gt;
&lt;br /&gt;
I'm not sure how it happened, but &lt;a title="" href="http://www.heroicadventure.com"&gt;HA!&lt;/a&gt; sat in a broken state for a long time. I would occasionally try to fix it, but there was a good bit of code "missing."  I eventually found it all again, and got it working. &lt;br /&gt;
&lt;br /&gt;
Once that was taken care of, I actually found myself in the mood to work on &lt;a title="" href="http://www.heroicadventure.com"&gt;HA!&lt;/a&gt; again and spent a couple hours tonight making minor enhancements and improvements towards v0.1.7.&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119751"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119751" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/cwilliams/aggbug/119751.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Williams</dc:creator>
            <guid>http://geekswithblogs.net/cwilliams/archive/2008/02/18/119751.aspx</guid>
            <pubDate>Tue, 19 Feb 2008 05:58:35 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/cwilliams/comments/119751.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/cwilliams/archive/2008/02/18/119751.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/cwilliams/comments/commentRss/119751.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/cwilliams/services/trackbacks/119751.aspx</trackback:ping>
        </item>
        <item>
            <title>HA! mentioned on Dot Net Rocks</title>
            <link>http://geekswithblogs.net/cwilliams/archive/2007/12/17/117783.aspx</link>
            <description>&lt;p&gt;Recently &lt;a title="" href="http://www.heroicadventure.com"&gt;HA!&lt;/a&gt; got mentioned on DotNetRocks.  (If you're interested, it's &lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=296"&gt;here&lt;/a&gt; at around the 30 minute mark.)&lt;/p&gt;
&lt;p&gt;The whole show, about Open Source, is actually quite good. So even if you don't care about &lt;a title="" href="http://www.heroicadventure.com"&gt;HA!&lt;/a&gt;, give the show a listen.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117783"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117783" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/cwilliams/aggbug/117783.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Williams</dc:creator>
            <guid>http://geekswithblogs.net/cwilliams/archive/2007/12/17/117783.aspx</guid>
            <pubDate>Mon, 17 Dec 2007 18:44:22 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/cwilliams/comments/117783.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/cwilliams/archive/2007/12/17/117783.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/cwilliams/comments/commentRss/117783.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/cwilliams/services/trackbacks/117783.aspx</trackback:ping>
        </item>
        <item>
            <title>Game Development w/ ADD</title>
            <link>http://geekswithblogs.net/cwilliams/archive/2007/05/12/112450.aspx</link>
            <description>One of the fun things about working on &lt;a href="http://www.heroicadventure.com" title=""&gt;HA!&lt;/a&gt; is all the neat ideas I come up with while coding. &lt;br /&gt;
&lt;br /&gt;
Annnnd, one of the downsides of having ADD (not AD&amp;amp;D) is all the neat ideas I come up with while coding.&lt;br /&gt;
Today was a good example of both. I was working on the overland encounters code for &lt;a href="http://www.heroicadventure.com" title=""&gt;HA!&lt;/a&gt; and was getting pretty deep into the factors that determine whether you...&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-style: italic;"&gt;{Edit: ADD in action, I just stepped away to grab a drink of water and then I watched about half a game of "Ticket to Ride, sold a guy some magic cards, picked out some new dice, decided on watching 300 again tonight and then remembered I wanted something to drink. 43 minutes later...}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
...have an encounter with a wandering creature or NPCs....&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-style: italic;"&gt;{Edit: ok, this one is not my fault exactly. This lady and her kids came in the shop and we started talking about the "My Pet Monster" on our shelf, and then about the fact they live on Paris Mountain. Then I realized I never actually got my drink from earlier, so I had to fix that... I'm back now.}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
What was I talking about? *sigh*&lt;br /&gt;
&lt;br /&gt;
Right... overland wandering monsters. So I spent a while working on the various criteria that affect whether you actually have an encounter overland. One of the factors that affects this is whether or not you are invisible. &lt;br /&gt;
&lt;br /&gt;
So I add the check for Hero invisibility, and then I have to go add the boolean flag to the Hero to indicate whether he/she is invisible. Then I think, well ya know monsters could be invisible too, so I move the flag out of the Hero class and into the avatar class that heros and all monsters inherit from. &lt;br /&gt;
&lt;br /&gt;
So then I think about the fact that there's no way currently for a hero to actually become invisible. So I decide to add an invisibility ring to &lt;a href="http://www.heroicadventure.com" title=""&gt;HA!&lt;/a&gt; so characters (heros or monsters alike) can can actually become invisible. &lt;br /&gt;
&lt;br /&gt;
In order to add this ring, I inherit from the ring class and then decide I need to create an interface for effects of rings. since invisibility would (in theory) only be affected when the ring was put on or taken off, I create a iRingActivation interface that all rings implement, so I can just call a single method whenever any ring is put on and the appropriate code would fire.&lt;br /&gt;
&lt;br /&gt;
After I implement this, I think to myself, hey I could use this with any item that gets equipped... like a sword or whatever.  So I rename the interface to iActivatedItem and start thinking of ways that I could add special powers.&lt;br /&gt;
&lt;br /&gt;
So then i decide I'm a little hungry, so I go in the office/kitchen... and see my drink on the counter. I grab it and head back to start working on the ring of invisibility class. At some point I realize that my ADD has caused me to stop what I'm doing about a dozen or so times, so I decide to take a break from working on the class to write a blog entry about how my ADD proves to be such a distraction.&lt;br /&gt;
&lt;br /&gt;
So anyway, I think I'm going to watch 300 tonight. Eventually I'll get back to the code, because I just thought about how I need to add a method for when items are unequipped, otherwise our hero won't be able to become visible again. &lt;br /&gt;
&lt;br /&gt;
And while I was writing that, I just thought about how the iActivatedItem would be a good way to implement cursed items as well.&lt;br /&gt;
&lt;br /&gt;
And thinking that made me think of adding a new trap (invisibility) of course, as a permanent intrinsic, which would make it harder to detect when overland (see, it goes full circle) but it could also be a penalty that would affect the Hero's ability to receive quests and interact with villagers.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-style: italic;"&gt;{Edit: while typing this, the Immigrant Song by led Zeppelin came on the radio and it reminded me of the Viking Kittens, so I had to pull that up and watch it.  www.vikingkittens.com if you're interested.}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
But first... first... I have to finish the overland encounter code, right after I finish the iActivatedItem code, and the invisibility ring... and watch 300.  &lt;br /&gt;
&lt;br /&gt;
Now where the hell did I put my food?&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=112450"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=112450" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/cwilliams/aggbug/112450.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Williams</dc:creator>
            <guid>http://geekswithblogs.net/cwilliams/archive/2007/05/12/112450.aspx</guid>
            <pubDate>Sun, 13 May 2007 00:05:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/cwilliams/comments/112450.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/cwilliams/archive/2007/05/12/112450.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/cwilliams/comments/commentRss/112450.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/cwilliams/services/trackbacks/112450.aspx</trackback:ping>
        </item>
        <item>
            <title>TinkyWinky takes a walk... (aka AutoWalk part 2)</title>
            <link>http://geekswithblogs.net/cwilliams/archive/2007/03/18/109146.aspx</link>
            <description>&lt;img src="http://www.heroicadventure.com/images/small_ha_logo.gif"&gt;

&lt;P&gt;If you're too lazy to type in a name when creating a character in &lt;a title="" href="http://www.heroicadventure.com" &gt;HA!&lt;/a&gt; I give you one randomly chosen from a list. Sometimes it's the name of a friend, like Robin, or it's androgynous, like Pat. Sometimes it's just silly, like TinkyWinky or IneedaName.

&lt;P&gt;So lately, in an effort to test and refine the &lt;a href="http://geekswithblogs.net/cwilliams/archive/2007/03/04/107932.aspx"&gt;autowalk feature&lt;/a&gt;, I've been creating a lot of characters that I didn't care much about. As with most manual testing, you often discover stuff along the way, while focusing on something else entirely. I've discovered a number of things while banging on the autowalk code.

&lt;P&gt;&lt;ol&gt;
&lt;li&gt;I need a longer list of lazy names.

&lt;li&gt;the game is too damn hard for 78% of the character classes available. &lt;i&gt;Technically I knew this, but dying 3 times out of 4, before even getting a chance to TRY autowalking really drove the point home.&lt;/I&gt;

&lt;li&gt;I had started implementing "corner" tiletypes, but hadn't finished it. &lt;i&gt;I found this by occasionally seeing a message that said "Thud! You run into the " instead of "Thud! You run into the wall." That's been corrected.&lt;/i&gt;

&lt;li&gt;The action order (initiative) doesn't make good sense, and won't scale well. &lt;i&gt;Like most turn-based games, nothing happens unless the player provides input (by pressing a key.) We have a basic initiative system where the character takes turns with the monsters, some faster than others. Currently the moster initiative is recalculated POST player move, every turn. As the game matures, it is inevitable that some creatures will be significantly faster (or slower) than the hero, and this method will no longer work as intended. I need to refactor this so the hero is presented a turn at the appropriate point or points DURING the initiative cycle, not before it.&lt;/i&gt;

&lt;li&gt;coming up with the autowalking code is frickin hard!! There's a lot going on. More on this below.
&lt;/ol&gt;

&lt;P&gt;The first challenge was injecting autowalk commands into the loop without requiring additional input from the player. Since nothing happens without input from the player, I have to simulate that input. The easiest way to do this was to provide a keybound command ('w') that prompts the player for a direction. (This is based on the standard numeric keypad with 123 at the bottom.) 

&lt;P&gt;Once a general direction is determined, the fun part starts. Since we want the auto actions to behave the same way as if a player had actually pressed the key, we need to trick the loop into thinking that's what happened. The easiest way I could think of to do this was to set a flag, wrap the player input code with a conditional statement that checks that flag and then bypass the player input, assigning my own values (more on that in a moment) to the variable that would normally hold the player input... then the game processes that input as normal... in theory.

&lt;P&gt;Actually that's almost all there is to it, if you just want the hero to walk infinitely in the direction indicated. In my case, I expected a bit more of my surrogate player. Some of the behaviors I require are below. The hero should:
&lt;BR&gt;

&lt;ol&gt;
&lt;li&gt;stop just short (adjacent) of colliding with an obstacle (like a wall or closed door)
&lt;li&gt;stop one step back from an intersection or open door (anywhere a choice should be made)
&lt;li&gt;stop two steps back from any hostile encounter (this means monsters, NPCs, etc)
&lt;li&gt;stop just short (adjacent) of any nonhostile encounter (townspeople, nonhostile creatures)
&lt;P&gt;
&lt;li&gt;if in a room, continue in direction indicated until any of the above occur
&lt;li&gt;if in a passage, follow passage regardless of direction until any of above occur (requires changing direction as needed)
&lt;li&gt;if autosearch or autoget are enabled, those behaviors will be observed too
&lt;li&gt;if a key is pressed during an autowalk sequence, control is returned to the player.
&lt;/ol&gt;

&lt;P&gt;This involves a lot more than you would think from such a short list. There already exists logic to handle collisions with inanimate objects  such as walls and closed doors, and of course running into a monster initiates combat. What I didn't have, was logic to detect things like corners, turns, intersections, etc.  I didn't NEED to detect these, since the player could plainly see them onscreen and choose how to interact with them.

&lt;P&gt;The first thing I tackled was detecting pending collisions. I say pending, because I didn't want the hero to actually walk into a wall and then stop. That would be silly, and it would also generate a "Thud!" message and take up a turn. None of these are desirable. Instead, I used the same routine to detect if a hero actually walked into an obstacle, only I called it before the pending automove instead of after. If the next step would cause an impact, I simply stop the autowalk loop. No "Thud!" message or extra turn. At this point, control returns to the player.

&lt;P&gt;Now that the hero can stroll across an empty room, or down the straight section of a hallway, we can check off the first one. The next thing I worked on was a little trickier. Basically I needed to detect an opening near me, based on a specific configuration of walls. For example, walking down a hallway that ends in an open door was easy. I simply checked to see if the tile directly ahead of me was open (passable), and the tiles on either side of it, and me, were not. If this was the case, it indicated the end of a hallway and I stopped moving the hero, returning control to the player. This gets a lot more complicated when the wall configuration is less predictable. For example, if the hero is moving through a room, alongside a wall, and comes to an opening, the same rules no longer apply. By the same example, if the hero is crossing an L-shaped room, there is yet another set of criteria.

&lt;P&gt;I've found, at times like this, you need two things: 1. a LOT of patience for debugging the various configurations and 2. a spiral-bound graph paper notebook to quickly illustrate each configuration as you discover it and code it in the detection routine. You would be amazed how much the second one helps.

&lt;P&gt;Ok ok, so I'm still working on the second one, and will be for some time. It's an ongoing process of refinement. Skipping down to the third item on the list, this one was fairly easy. Using a similar concept to detecting walls, I look at a different property of the maptile and see if there is a monster in a given location. Using the hero's current X,Y location on the map array, I can look two cells in every direction to se if there is a monster. If I find one in ANY direction, I stop the autowalk loop. There are a couple noteworthy things here: 1. I look two squares out, checking BOTH squares, not just the outer one, in case a monster somehow slips past it for whatever reason (the monsters move too, ya know) and 2. I also look "behind" me and to the sides, in case something faster than me comes up behind me, or an incorporeal creature steps out of a wall somewhere. Stopping the autowalk before combat ensues give the player a chance to make a choice about how to (or not) approach what might be a significantly stronger creature.

&lt;P&gt;I haven't started the fourth item in the list yet, because there aren't any nonhostile creatures or townspeople yet. So we'll revisit this one later.

&lt;P&gt;and that's enough for this time... I'll have more of a progress report (and maybe even a build) next time around.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=109146"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=109146" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/cwilliams/aggbug/109146.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Williams</dc:creator>
            <guid>http://geekswithblogs.net/cwilliams/archive/2007/03/18/109146.aspx</guid>
            <pubDate>Mon, 19 Mar 2007 03:25:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/cwilliams/comments/109146.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/cwilliams/archive/2007/03/18/109146.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/cwilliams/comments/commentRss/109146.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/cwilliams/services/trackbacks/109146.aspx</trackback:ping>
        </item>
    </channel>
</rss>