<?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>Full of BS &#187; Game Algorithms</title>
	<atom:link href="http://fullof.bs/category/programming/game-algorithms/feed/" rel="self" type="application/rss+xml" />
	<link>http://fullof.bs</link>
	<description>He just never stops talking</description>
	<lastBuildDate>Mon, 19 Oct 2009 15:08:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Gearing Up for Public SVN</title>
		<link>http://fullof.bs/gearing-up-for-public-svn/</link>
		<comments>http://fullof.bs/gearing-up-for-public-svn/#comments</comments>
		<pubDate>Thu, 24 Jul 2008 16:01:46 +0000</pubDate>
		<dc:creator>John Haugeland</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[ECMA / Javascript]]></category>
		<category><![CDATA[ECMAScript]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Game Algorithms]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tools and Libraries]]></category>
		<category><![CDATA[Web and Web Standards]]></category>
		<category><![CDATA[a*]]></category>
		<category><![CDATA[astar]]></category>
		<category><![CDATA[embed]]></category>
		<category><![CDATA[embeddable]]></category>
		<category><![CDATA[htstub]]></category>
		<category><![CDATA[Public svn]]></category>
		<category><![CDATA[regression test]]></category>
		<category><![CDATA[scastar a star]]></category>
		<category><![CDATA[scutil]]></category>
		<category><![CDATA[stochastic test]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[unit test]]></category>
		<category><![CDATA[webserver]]></category>

		<guid isPermaLink="false">http://fullof.bs/?p=271</guid>
		<description><![CDATA[I&#8217;m going to be releasing a few new libraries in the next several days, both by archive and public subversion.  I&#8217;ve already bought the domains and built a forum for them.  I even wasted a couple hours subversion automating everything down to the line of having little library websites made automatically, with custom per-library color [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m going to be releasing a few new libraries in the next several days, both by archive and public subversion.  I&#8217;ve already bought the domains and built a forum for them.  I even wasted a couple hours subversion automating everything down to the line of having little library websites made automatically, with custom per-library color palettes.</p>
<p>I was a little bored.</p>
<p>So we&#8217;re going to have three libraries progressing in the immediate future, with quite a few more over time:</p>
<ol>
<li><a title="HtStub - an embeddable Erlang webserver" href="http://htstub.com/" target="_blank">HtStub</a> &#8211; An embeddable, zero-config, zero-behavior secure Erlang webserver</li>
<li><a title="StoneCypher's A* library, with tutorial" href="http://scastar.com/" target="_blank">SC A-Star</a> &#8211; An efficient, modular ECMAscript (flash/actionscript, javascript, jscript etc) A* implementation with support for custom grid geometries (<em>includes algorithm tutorial</em>)</li>
<li><a title="TestErl - an erlang library for unit, regression and stochastic testing" href="http://testerl.com/" target="_blank">TestErl</a> &#8211; unit, regression and stochastic testing for Erlang</li>
<li><a title="ScUtil - StoneCypher's erlang utility library" href="http://scutil.com/" target="_blank">ScUtil</a> &#8211; a fairly large list of gap filling functionality for Erlang</li>
</ol>
<p>In the near future, I will add C++ and PHP libraries, as well as many some libraries for more obscure languages like FormulaONE, Mozart-Oz, Factor and maybe (sadly) Delphi.  I have more than 30 libraries ready for release.</p>
<p>All those repos are pretty empty at the moment.  That will change in coming days, and I&#8217;m sure I&#8217;ll post lots of boring little snippets here about whatever minor new thing my crap does.</p>
<p>Yay!</p>
]]></content:encoded>
			<wfw:commentRss>http://fullof.bs/gearing-up-for-public-svn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Million Dollars For A Strong Predictor</title>
		<link>http://fullof.bs/a-million-dollars-for-a-strong-predictor/</link>
		<comments>http://fullof.bs/a-million-dollars-for-a-strong-predictor/#comments</comments>
		<pubDate>Tue, 03 Oct 2006 01:51:50 +0000</pubDate>
		<dc:creator>John Haugeland</dc:creator>
				<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[Game Algorithms]]></category>
		<category><![CDATA[Gaming]]></category>
		<category><![CDATA[General Interest]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.sc.tri-bit.com/archives/187</guid>
		<description><![CDATA[That&#8217;s right.  Netflix will give you a million bucks if you can write an algorithm which one-ups their existing algorithm by 10% or better on grounds of predicting what their customers will like, based on their prior history.
Now that&#8217;s a win.
]]></description>
			<content:encoded><![CDATA[<p>That&#8217;s right.  <a title="Million dollar prize" href="http://www.netflixprize.com/">Netflix will give you a million bucks</a> if you can write an algorithm which one-ups their existing algorithm by 10% or better on grounds of predicting what their customers will like, based on their prior history.</p>
<p>Now that&#8217;s a win.</p>
]]></content:encoded>
			<wfw:commentRss>http://fullof.bs/a-million-dollars-for-a-strong-predictor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On Shadowcasting</title>
		<link>http://fullof.bs/on-shadowcasting/</link>
		<comments>http://fullof.bs/on-shadowcasting/#comments</comments>
		<pubDate>Sun, 02 Apr 2006 06:09:18 +0000</pubDate>
		<dc:creator>John Haugeland</dc:creator>
				<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Game Algorithms]]></category>
		<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Gaming]]></category>
		<category><![CDATA[Nintendo DS]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Southgate]]></category>

		<guid isPermaLink="false">http://blog.sc.tri-bit.com/?p=83</guid>
		<description><![CDATA[I haven&#8217;t written a roguelike in a long, long time.  Last time, I used the traditional light-per-room model for lighting from the original Rogue; these days, I don&#8217;t find that at all satisfactory.  It&#8217;s time for a proper shadowcaster.

And, to be plain, I&#8217;d forgotten how much of a hassle a shadowcaster actually is. [...]]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t written a roguelike in a long, long time.  Last time, I used the traditional light-per-room model for lighting from the original Rogue; these days, I don&#8217;t find that at all satisfactory.  It&#8217;s time for a proper shadowcaster.<br />
<span id="more-107"></span></p>
<p>And, to be plain, I&#8217;d forgotten how much of a hassle a shadowcaster actually is.  I went to dig up maybe some example code, but the good answers were few and far between; there are several each at various roguelike sites like <a title="Dungeondweller's development section" href="http://roguelikedevelopment.org/development/">Dungeondweller</a>, but the articles are written to widely varying levels of quality, most without source, and with no apparent method to compare between methods.  Most of them an experienced programmer can ignore out of hand, but one of the algorithms up there is just repeated line of sight, which is dead slow.  It&#8217;s enough to make a man think about writing another <a title="My empty-ish tutorial page" href="http://sc.tri-bit.com/Category:Tutorials">tutorial</a>&#8230;</p>
<p>Luckily, I know what&#8217;s up, so I&#8217;m going to implement recursive shadowcasting.  There&#8217;s a not-half-bad implementation in this tutorial by <a title="Gordon Lipford's LOS tutorial" href="http://sc.tri-bit.com/Computing_LOS_for_Large_Areas">Gordon Lipford</a>, but in several places he sacrifices efficiency or power for readability.  Right thing to do for a tutorial.  Wrong thing to do for production code.  (He also has several unexplained actions here and there, writes pseudocode where interactions aren&#8217;t clear, and requires the reader to reimplement several structures from explanations, but whatever.)  At any rate, his method is efficient, flexible, and less painful to implement than some of its competition, so I&#8217;m running with it.</p>
<p>One of the very cool things about Lipford&#8217;s method is that it&#8217;s arc-angle based.  As a result, objects don&#8217;t actually have to fit a tile; rays are radiated.  That means that anti-aliasing one&#8217;s shadows is in fact realistic; I&#8217;m halfway done with that in my shadowcaster now.  Other things could be added, but I&#8217;ve decided to skip them for now.  One of the <strong>really</strong> neat things about this modified method, though, which uprises from the line of sight algorithm is that I have accurate overhead cover rules and a good set of premise data to work in the notion of &#8220;perception.&#8221;</p>
<p>Simulating perception accurately is traditionally a problem for AI behavior, but in a Roguelike it&#8217;s a bigger problem than usual.  Because roguelikes offer such complex tactical situations, and because speed in varying environments is such an issue, players often want to &#8220;lose&#8221; the predators by hiding.  Lots of the common methods for handling roguelike behavior involve simple distance calculations, meaning monsters can semi-effectively follow you through visual obstacles which otherwise should confuse them, such as walls.  Sometimes this is of great tactical advantage to the player; s/he can use slight speed or distance advantages to get around a wall with a u-turn, then rely on the monster keeping the nearest mathematical distance and walk the other way down the wall, acquiring some safety.</p>
<p>Now, I&#8217;m all for cheating on the player&#8217;s behalf; one of these days I&#8217;ll blog about it at length.  However, there&#8217;s cheating and there&#8217;s cheating.  Some of it keeps little nagging things from ruining gameplay; that&#8217;s good cheating.  Being lax on player bullet collision, and being overstrict on player personal collision, means that the player &#8220;just barely gets by&#8221; when oftentimes they shouldn&#8217;t, and &#8220;just barely makes the shot&#8221; when oftentimes they shouldn&#8217;t.  You can just crank the game difficulty to compensate, and it leads to a player never feeling like they were ripped off or cheated.  The Japanese game company <a title="Treasure" href="http://www.treasure-inc.co.jp/index01.html">Treasure</a> are absolute masters of this careful balance (sorry, AFAIK they don&#8217;t have an English-language page.  Just pretend you can read it.)  But, there&#8217;s another kind of cheating that game programmers do.  Actually, there are several others; I&#8217;m gonna skip stuff like giving opponent AI information it shouldn&#8217;t have to keep it competitive.  Right now, what I&#8217;m going to talk about is sacrificing realism for computation time.</p>
<p>There are several problems with cheating to save computation time.  Some of them are reconcilable; others aren&#8217;t.  Generally the least controllable issue here is that oftentimes you just can&#8217;t afford the raw horsepower to do what you want to do correctly.  First person shooters in the 286/386 era are a prime example; Wolfenstein and DooM got by just fine with blitting, but given modern standards they look positively silly.  The important bit here, though, is that Wolfenstein and DooM&#8217;s approximations were good enough™ they did not adversely impact the game, and until they were made outdated by the horsepower required for a more accurate solution, the impositions their techniques created generally didn&#8217;t impact the game.  (There are a few exceptions, notably the 2d+height map preventing truly 3d maps, but that was more of an engine issue than an issue of approach, so whatever.)</p>
<p>Horsepower aside, though, there are also issues of sloth or ignorance.  In fact, field of view algorithms provide an excellent example even compounded above the previous example.  Gee, can you guess what I&#8217;m gonna start going on about?</p>
<p>The fact of the matter is that on a complex 2d planar map, even implemented well, field of vision code is moderately expensive.  <a title="Hansjörg Malthaner" href="http://www.simugraph.com/en/aboutme.html">Hansjörg  Malthaner</a> brags, and rightfully so, that his <a title="FOV in H-World" href="http://h-world.simugraph.com/docs/fov.html">field of view implementation</a> can crank out a 59&#215;59 area in under 2ms on a 400mHz k6/2.  Whereas that may sound like hopelessly antiquated equipment by today&#8217;s standards, please remember that that&#8217;s talking about the field of view for just one creature; even dealing with a machine that can push 16x what that does, when you&#8217;re dealing with (say) 256 creatures &#8211; and that&#8217;s not terribly unlikely in a Roguelike at deeper levels &#8211; you&#8217;re still looking at around 32ms, just to figure out what monsters can see what.  That&#8217;s before you consider anything like, say, what the monsters&#8217; responses would be.  And, to put that in perspective, we&#8217;re talking about a full two frames at 60fps (the rate at which most console hardware runs) &#8211; that&#8217;s slow enough to see a stutter, even on modern hardware.</p>
<p>And &#8211; <em>I cannot emphasize this enough</em> &#8211; Hansjörg&#8217;s implementation is <u>good</u>.  This is not the upshot of some naïve bumbling.  This is what kind of speeds one should expect.</p>
<p>Now, granted, this is a fairly severe situation.  For one, 59&#215;59 implies sight radius 29, which is big by anyone&#8217;s standards, and since we&#8217;re talking about area which is exponential and a workload tied to a surface unit instead of an edge, and since that workload is also exponential, then having an area that big is pretty serious.  Also, games other than roguelikes don&#8217;t usually have low to middling hundreds of active, thinking opponents at a time (well, inasfar as roguelike creatures think, really, but that&#8217;s beside the point.)  But, as we all know, I&#8217;m working on the Nintendo DS, which is a 67mHz ARM9; when we&#8217;re there, we&#8217;re just not talking about cutting edge computational power, and therefore speed seriously matters to me.  Granted that the field of view in my game is much smaller, it&#8217;s still a pretty big issue.</p>
<p>This is where the kung-fu comes in.  See, there are other repurcussions to choosing a field of vision mechanism other than speed.  Granted speed is what we&#8217;re interested in here, but there are other things to be considered.  That is, for example, why I&#8217;m not implementing the <a title="It's honestly kinda slick, despite being kinda sick" href="http://jwelton.v-space.org/discuss/LOSSpaghetti.html">giant goto map generator</a> of Jesse Welton&#8217;s.  Instead, what I&#8217;m doing is going to give me view regions for specific tiles; that information will be enough to implement a much, much stronger perception algorithm, by gauging what fraction of a tile is visible.  That way I can have monsters with very long sight who won&#8217;t notice you sneaking up on them around corners, or monsters who only see six or seven tiles away, but who notice absolutely everything in range.  It should make far more satisfactory AI chase behavior, especially since I&#8217;m going to be tracking actual creature knowledge.</p>
<p>Anyway, that&#8217;s just what I&#8217;m working on in Southgate at the moment.  New topics soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://fullof.bs/on-shadowcasting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Goddamned Nano-X Thief</title>
		<link>http://fullof.bs/goddamned-nano-x-thief/</link>
		<comments>http://fullof.bs/goddamned-nano-x-thief/#comments</comments>
		<pubDate>Sat, 25 Mar 2006 09:48:27 +0000</pubDate>
		<dc:creator>John Haugeland</dc:creator>
				<category><![CDATA[Game Algorithms]]></category>
		<category><![CDATA[Nintendo DS]]></category>

		<guid isPermaLink="false">http://blog.sc.tri-bit.com/?p=89</guid>
		<description><![CDATA[I can&#8217;t believe someone beat me to Nano-X on the DS.  SO VERY LAME.
Mad props to Bret, I&#8217;m just jealous.  But, good work, and also I hate you now.   
]]></description>
			<content:encoded><![CDATA[<p>I can&#8217;t believe <a title="GRAAAH" href="http://www.dslinux.org/blogs/pepsiman/wp-trackback.php?p=51">someone beat me to Nano-X on the DS</a>.  SO VERY LAME.</p>
<p>Mad props to Bret, I&#8217;m just jealous.  But, good work, and also I hate you now.  <img src='http://fullof.bs/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://fullof.bs/goddamned-nano-x-thief/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Field of Vision Code</title>
		<link>http://fullof.bs/field-of-vision-code/</link>
		<comments>http://fullof.bs/field-of-vision-code/#comments</comments>
		<pubDate>Tue, 21 Mar 2006 01:07:18 +0000</pubDate>
		<dc:creator>John Haugeland</dc:creator>
				<category><![CDATA[Game Algorithms]]></category>
		<category><![CDATA[Nintendo DS]]></category>
		<category><![CDATA[Southgate]]></category>

		<guid isPermaLink="false">http://blog.sc.tri-bit.com/?p=87</guid>
		<description><![CDATA[I&#8217;m working on a field-of-vision implementation for Southgate at the moment, which is both very fast and highly accurate. It also provides anti-aliased shadows, accounts for shadows that are smaller than a single tile, and (I haven&#8217;t decided yet) might even end up supporting non-opaque shadows.
Depending on how well it turns out, I dunno, I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on a field-of-vision implementation for Southgate at the moment, which is both very fast and highly accurate. <span id="more-100"></span>It also provides anti-aliased shadows, accounts for shadows that are smaller than a single tile, and (I haven&#8217;t decided yet) might even end up supporting non-opaque shadows.</p>
<p>Depending on how well it turns out, I dunno, I might release the code and/or write a tutorial. The code is based on the tutorial by <a title="Yay I reformatted it" href="http://sc.tri-bit.com/Computing_LOS_for_Large_Areas">Gordon Lipford </a>(which I originally found on <a title="So ... hard ... on eyes ..." href="http://roguelikedevelopment.org/php/article/showArticle.php?path=development/LOS/articles/&amp;article=Computing%20LOS%20for%20Large%20Areas%20-%20Gordon%20Lipford%20[gclipford@sympatico.ca].txt">Dungeondweller</a>.) My adjustments to it are just tuning and slight extensions which aren&#8217;t in fact very difficult to make, plus a bunch of style refactorings. We&#8217;ll see &#8211; maybe I&#8217;ll put it with the other tutorials and example code. For now, <a title="That's One" href="http://roguelikedevelopment.org/php/article/showArticle.php?path=development/LOS/articles/&amp;article=FOV%20using%20recursive%20shadowcasting%20-%20Bj%F6rn%20Bergstr%F6m%20[dungeondweller@swipnet.se].txt">Björn Bergström&#8217;s tutorial</a> or <a title="That's two" href="http://roguelikedevelopment.org/php/article/showArticle.php?path=development/LOS/articles/&amp;article=Line%20of%20Sight%20-%20Tobias%20Downer%20[toby@iglou.com].txt">Tobias Downer&#8217;s tutorial</a> will be the best no-code explanations you can find.</p>
]]></content:encoded>
			<wfw:commentRss>http://fullof.bs/field-of-vision-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Easier is Harder</title>
		<link>http://fullof.bs/easier-is-harder/</link>
		<comments>http://fullof.bs/easier-is-harder/#comments</comments>
		<pubDate>Sat, 04 Feb 2006 08:28:08 +0000</pubDate>
		<dc:creator>John Haugeland</dc:creator>
				<category><![CDATA[Game Algorithms]]></category>
		<category><![CDATA[Gaming]]></category>
		<category><![CDATA[My Games]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[Southgate]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[difficulty]]></category>
		<category><![CDATA[new tool]]></category>
		<category><![CDATA[paradox]]></category>

		<guid isPermaLink="false">http://blog.sc.tri-bit.com/?p=21</guid>
		<description><![CDATA[Why would I say that?
Because every time I develop a tool to make things easier, that just gives me an excuse to make a system triple as complicated. Every time I make something easier, it turns harder.  This is something of an annoying habit of mine, though it&#8217;s also led to some of the [...]]]></description>
			<content:encoded><![CDATA[<p>Why would I say that?</p>
<p>Because every time I develop a tool to make things easier, that just gives me an excuse to make a system triple as complicated. Every time I make something easier, it turns harder.  This is something of an annoying habit of mine, though it&#8217;s also led to some of the best things I&#8217;ve invented.  That said, it&#8217;s also led to a lot of wasted time and extra complexity &#8211; not that that&#8217;s exactly a terrible thing in a hobby project, but still.  Whether this is going to turn out in that fashion remains to be seen.<br />
<span id="more-56"></span><br />
Once again I&#8217;m babbling about my new dungeon generator.  I set up a sort of tagging system which allows the system to determine what kinds of styles are appropriate for the rooms, so that themed levels will come out correctly.  The problem is, I wanted all this flexibility, and now I&#8217;ve got this giant mass of code that quivers every time I touch it, and occasionally howls at the moon.  Unfortunately, that&#8217;s actually fairly common behavior for my code.  Go figure.</p>
<p>Anyway, I&#8217;ve got six room types implemented under the new system, and the dungeon generator&#8217;s already turning out surprisingly interesting results.  I&#8217;m veddy pleased.  Hopefully, you will be too, but if I don&#8217;t get out of the blog and actually write it, we&#8217;ll never know.</p>
]]></content:encoded>
			<wfw:commentRss>http://fullof.bs/easier-is-harder/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dungeon Generators are Interesting</title>
		<link>http://fullof.bs/dungeon-generators-are-interesting/</link>
		<comments>http://fullof.bs/dungeon-generators-are-interesting/#comments</comments>
		<pubDate>Fri, 03 Feb 2006 08:25:47 +0000</pubDate>
		<dc:creator>John Haugeland</dc:creator>
				<category><![CDATA[Game Algorithms]]></category>
		<category><![CDATA[My Games]]></category>
		<category><![CDATA[Southgate]]></category>
		<category><![CDATA[dungeon]]></category>
		<category><![CDATA[dungeon generator]]></category>
		<category><![CDATA[generator]]></category>
		<category><![CDATA[rogue]]></category>
		<category><![CDATA[roguelike]]></category>

		<guid isPermaLink="false">http://blog.sc.tri-bit.com/?p=20</guid>
		<description><![CDATA[Dungeon Generators are strange creatures.
I&#8217;m discovering, since I haven&#8217;t attempted one in several years, that the older a programmer you are and the more strange tools in your belt, the more fun dungeon generators are to write.  Back in the day, it seemed like a huge and painful task.  Now that modularity is [...]]]></description>
			<content:encoded><![CDATA[<p>Dungeon Generators are strange creatures.</p>
<p>I&#8217;m discovering, since I haven&#8217;t attempted one in several years, that the older a programmer you are and the more strange tools in your belt, the more fun dungeon generators are to write.  Back in the day, it seemed like a huge and painful task.  Now that modularity is second nature, it&#8217;s turning into a joy to write.  This is sort of a surprise to me; last time I wrote a Roguelike, the monster system was by far and away the most entertaining, and the level system something of a chore.  I kind of wonder whether the new monster system is going to be as much fun.<br />
<span id="more-55"></span><br />
Anyway, one of the greatest joys of the new way I&#8217;m doing things is the distribution method for rooms.  It&#8217;s a little memory hungry, but on the bright side I can just snap new room types into place, and bang, they&#8217;re used appropriately throughout the whole game, according to depth, theme, and several things I&#8217;m not yet discussing.  I&#8217;ve only snapped in a few kinds of room so far, but already I can play around with the probabilities, and I&#8217;m getting results I really like.  This generator is both much easier to extend and to balance than the old one.  It&#8217;s going to be quite a bit more entertaining for me, I think.</p>
<p>After that, I think it&#8217;s time to put my foot down about how the character system actually works.  It&#8217;s changed too many times in my head.  I need an implementation.  I have a really weird idea, though, and if it pans out, you guys are going to give me total horizon stare.  (Teh awesumm.)</p>
<p>In the meantime, besides the daily image, I have <a title="Liquid Lady movie" href="http://www.ebaumsworld.com/videos/liquidlady.html">a neat link</a> which someone handed to me on IRC.  It&#8217;s weird &#8211; half the people who watch it think it&#8217;s gross, and the other half think it&#8217;s hawt.  I find myself in the latter camp.</p>
]]></content:encoded>
			<wfw:commentRss>http://fullof.bs/dungeon-generators-are-interesting/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MTD(f) can bite my ass</title>
		<link>http://fullof.bs/mtdf-can-bite-my-ass/</link>
		<comments>http://fullof.bs/mtdf-can-bite-my-ass/#comments</comments>
		<pubDate>Sun, 01 Jan 2006 07:13:02 +0000</pubDate>
		<dc:creator>John Haugeland</dc:creator>
				<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[Game Algorithms]]></category>
		<category><![CDATA[Gaming]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[minimum test driver]]></category>
		<category><![CDATA[minimum test driver f]]></category>
		<category><![CDATA[mtd-f]]></category>
		<category><![CDATA[mtdf]]></category>
		<category><![CDATA[ply]]></category>
		<category><![CDATA[ply culling]]></category>
		<category><![CDATA[ply tree]]></category>

		<guid isPermaLink="false">http://blog.sc.tri-bit.com/?p=5</guid>
		<description><![CDATA[Minimum Test Driver is a great tree-culling algorithm. That said, my implementation is broken, so mtd(f) can go to hell.

So, the tree culler that Aske Plaat came up with is pretty damned fast.  I snapped it into my Highly Crappy™ chess algorithm, and sure enough I got about a 7% cull increase over the [...]]]></description>
			<content:encoded><![CDATA[<p>Minimum Test Driver is a great tree-culling algorithm. That said, my implementation is broken, so mtd(f) can go to hell.</p>
<p><span id="more-42"></span><br />
So, the tree culler that <a title="Aske Plaat was the original inventor of Minimum Test Driver(f)" href="http://www.cs.vu.nl/~aske/">Aske Plaat</a> came up with is pretty damned fast.  I snapped it into my Highly Crappy™ chess algorithm, and sure enough I got about a 7% cull increase over the old iterative deepening Alpha Beta culler.</p>
<p>Yeah, except it&#8217;s got a small problem, is the problem.  For reasons I don&#8217;t yet understand, it&#8217;s playing the wrong side of the tree.  It walks and evaluates the tree correctly, but instead of playing the best move it can find, it plays the worst.  (Actually I&#8217;m keeping it around for misere games, and it&#8217;s not half bad at them, but that&#8217;s not the point.)</p>
<p>The point is, what the hell is wrong with my code?</p>
<p>I&#8217;ll release the revised <a title="One of the better MTD(f) explanatory pages" href="http://theory.lcs.mit.edu/~plaat/mtdf.html">mtd(f) code</a> Real Soon Now; I just need to, you know, get it to work.  (Oddly, there&#8217;s another version of that page on <a title="Older version of Aske Plaat's page" href="http://www.cs.vu.nl/~aske/mtdf.html">his old academic web page</a>, except it seems to be out of date, and as a result is missing several bug-fixes.)</p>
<p>Still, it&#8217;s just amazing watching this game play.  It&#8217;s fantastically good at sucking.  I can&#8217;t not beat it.</p>
]]></content:encoded>
			<wfw:commentRss>http://fullof.bs/mtdf-can-bite-my-ass/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
