<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>kometbomb</title>
	
	<link>http://kometbomb.net</link>
	<description>Journal of my adventures in Programming, the Internet and Life.</description>
	<lastBuildDate>Fri, 03 Jul 2009 14:41:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/kometbomb" type="application/rss+xml" /><feedburner:emailServiceId>kometbomb</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Wordle and 30 Years of Games</title>
		<link>http://feedproxy.google.com/~r/kometbomb/~3/7n10jOH7mGY/</link>
		<comments>http://kometbomb.net/2009/07/01/wordle-and-30-years-of-games/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 13:54:22 +0000</pubDate>
		<dc:creator>kometbomb</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Nonsense]]></category>
		<category><![CDATA[Video games]]></category>
		<category><![CDATA[Word cloud]]></category>
		<category><![CDATA[Wordle]]></category>

		<guid isPermaLink="false">http://kometbomb.net/?p=480</guid>
		<description><![CDATA[<img src="http://kometbomb.net/wp-content/uploads/2009/07/small.png" alt="small" style="margin: 8px 8px 8px 8px" title="small" width="85" height="87" class="alignright size-full wp-image-485" /> Here's a superficial analysis on game titles. I have used <a href="http://www.wordle.net/">Wordle</a> to generate a word cloud from lists of recurring phrases in game titles.

What the word clouds show are very generic words like "space" or "super", the number two (a game series is more likely to be two than three games long) and multiple word phrases which usually are popular game series, or games with many expansion packs. It is interesting that the generic words tend to be the same across 30 years -- all generations of gamers seem to prefer dragons. Another point of interest is that a phrase from a 1980s game title is much less likely an established brand as it most likely is in the 1990s. Also, in the 1990s is became common that a game title has the release year attached to it, since EA et al started to churn out minor updates to their sports games as brand new releases.]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a superficial analysis on game titles. I have used <a href="http://www.wordle.net/">Wordle</a> to generate a word cloud from lists of recurring phrases in game titles. What I generally wanted to know is how a generic title from 1985 would differ from a generic title from 2009. The size of a word or phrase is relative to how many different titles contain the text and also how complex the phrase is (so one word long &#8220;phrases&#8221; won&#8217;t dominate the more interesting, relatively rare phrases). </p>
<p>What the word clouds show are very generic words like &#8220;space&#8221; or &#8220;super&#8221;, the number two (a game series is more likely to be two than three games long) and multiple word phrases which usually are popular game series, clichés (Foobar <em>of Doom</em>) or games with many versions or expansion packs. It is interesting that the generic words tend to be the same across 30 years &#8212; all generations of gamers seem to love dragons. Another point of interest is that a phrase from a 1980s game title is much less likely an established brand as it most likely is in the 1990s. Also, in the 1990s is became common that a game title has the release year attached to it, since EA et al started to churn out minor updates to their sports games as brand new releases.</p>
<p>30 years of games. Find your favorites!</p>
<div style="float:left">
<h3 id="toc-1980-2009">1980-2009</h3>
<p><a href="http://kometbomb.net/wp-content/uploads/2009/07/1980-2009.png"><img style="border:0" src="http://kometbomb.net/wp-content/uploads/2009/07/1980-2009-550x285.png" alt="1980-2009" title="1980-2009" width="550" height="285" class="aligncenter size-medium wp-image-491" /></a>
</div>
<div style="float:left">
<h3 id="toc-1980-1989">1980-1989</h3>
<p><a href="http://kometbomb.net/wp-content/uploads/2009/07/1980-1989.png"><img style="border:0" src="http://kometbomb.net/wp-content/uploads/2009/07/1980-1989-550x321.png" alt="1980-1989" title="1980-1989" width="550" height="321" class="aligncenter size-medium wp-image-482" /></a>
</div>
<div style="float:left">
<h3 id="toc-1990-1999">1990-1999</h3>
<p><a href="http://kometbomb.net/wp-content/uploads/2009/07/1990-1999.png"><img style="border:0" src="http://kometbomb.net/wp-content/uploads/2009/07/1990-1999-550x286.png" alt="1990-1999" title="1990-1999" width="550" height="286" class="aligncenter size-medium wp-image-484" /></a>
</div>
<div style="float:left">
<h3 id="toc-2000-2009">2000-2009</h3>
<p><a href="http://kometbomb.net/wp-content/uploads/2009/07/2000-2009.png"><img style="border:0" src="http://kometbomb.net/wp-content/uploads/2009/07/2000-2009-550x267.png" alt="2000-2009" title="2000-2009" width="550" height="267" class="aligncenter size-medium wp-image-483" /></a>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/kometbomb?a=7n10jOH7mGY:x2S2v0aauQc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=7n10jOH7mGY:x2S2v0aauQc:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=7n10jOH7mGY:x2S2v0aauQc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=7n10jOH7mGY:x2S2v0aauQc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=7n10jOH7mGY:x2S2v0aauQc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=7n10jOH7mGY:x2S2v0aauQc:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=7n10jOH7mGY:x2S2v0aauQc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/kometbomb/~4/7n10jOH7mGY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kometbomb.net/2009/07/01/wordle-and-30-years-of-games/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kometbomb.net/2009/07/01/wordle-and-30-years-of-games/</feedburner:origLink></item>
		<item>
		<title>Seen – Monitor bot activity on your Wordpress blog</title>
		<link>http://feedproxy.google.com/~r/kometbomb/~3/iP0FQnBXTDM/</link>
		<comments>http://kometbomb.net/2009/05/21/seen-monitor-bot-activity-on-your-wordpress-blog/#comments</comments>
		<pubDate>Thu, 21 May 2009 20:06:15 +0000</pubDate>
		<dc:creator>kometbomb</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Bots]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Search engines]]></category>
		<category><![CDATA[Website statistics]]></category>

		<guid isPermaLink="false">http://kometbomb.net/?p=444</guid>
		<description><![CDATA[This plugin basically keeps track of visiting search engine spiders and other bots and crawlers. This is useful so you can see if a page has been indexed in e.g. Google. Also, you can immediately see if a modified page has been indexed, which can be harder to check by just searching for the page (which of course could show the older version of the page).]]></description>
			<content:encoded><![CDATA[<p><a href="http://kometbomb.net/wp-content/uploads/2009/05/watchlist.png"><img style="border:0" src="http://kometbomb.net/wp-content/uploads/2009/05/watchlist.png" alt="watchlist" title="watchlist" width="330" height="107" class="alignright size-full wp-image-446" /></a> <strong>Seen</strong> is a Wordpress plugin that shows when and which bots visit your blog. This can be useful to see if a page ever gets visited by bots (so you can adjust <kbd>robots.txt</kbd> or so) or simply to amuse yourself if you are obsessed with what is happening with your blog (everyone knows you are).</p>
<p>Additionally, you can get a better understanding of how fast a page gets indexed by search engines and how fast it gets reindexed after you have modified the page. I found it interesting to note what&#8217;s the general strategy of different bots, now I know Yahoo <em>really</em> keeps visiting the pages and GoogleBot just very rarely visits older pages (but indexes new pages <em>really</em> quickly).</p>
<p>The plugin uses some simple heuristics to decide if a visiting user agent is a bot and puts it in a list of suspected bots (along with data of which pages it visited and when). You can then remove all the user agents that are not bots. Basically, This means you don&#8217;t need to manually add any bots at all, you simply weed out the false alerts. Of course, you can explicitly specify bots by their user agent string or host address.</p>
<h3 id="toc-installing-and-using-seen">Installing and using Seen</h3>
<p><a href="http://kometbomb.net/wp-content/uploads/2009/05/unindexed.png"><img style="border:0" src="http://kometbomb.net/wp-content/uploads/2009/05/unindexed.png" alt="unindexed" title="unindexed" width="459" height="162" class="alignleft size-full wp-image-453" /></a>After installing the plugin (extract the zip file in <strong>wp-content/plugins/</strong> and activate the plugin) data will be automatically recorded. You can monitor what is happening directly from on the Dashboard (there will be two new widgets, a list of bots on the watchlist and a list of unindexed pages). Also, if you go to <strong>Dashboard > Seen</strong> you can see more detailed lists and also the suspected bots list. I think it&#8217;s all quite self-explaining. Hint: you can click the star to add bots to the watchlist &#8212; clicking the yellow star will remove them.</p>
<p>In the options you can combine bots (i.e. when two or more entries have a differing user agent string but really are the same bot), delete them and edit them. The different categories are there so you can e.g. put Technorati bot in &#8220;<em>Search engine (blogs)</em>&#8221; which makes Seen not care if the bot has seen the latest comments. You can also categorize bots as &#8220;<em>Browser</em>&#8221; which means their data will be hidden as it probably won&#8217;t interest you.</p>
<p><strong>Download:</strong> <a href='http://kometbomb.net/wp-content/uploads/2009/05/kbseen-0.5.1.rar'>Seen 0.5.1</a> (Supports WP 2.7 thru 2.8)</p>
<h4 id="toc-whats-new-in-0-5-1">What&#8217;s new in 0.5.1</h4>
<p>See <a href="http://kometbomb.net/2009/05/21/seen-monitor-bot-activity-on-your-wordpress-blog/#comment-817">comment #2</a> below.</p>
<p><strong>Note:</strong> This is not yet 1.0 quality but it should work OK. By downloading and installing the plugin, you acknowledge no responsibility lays on the plugin author.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/kometbomb?a=iP0FQnBXTDM:z62z2T9LPQ0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=iP0FQnBXTDM:z62z2T9LPQ0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=iP0FQnBXTDM:z62z2T9LPQ0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=iP0FQnBXTDM:z62z2T9LPQ0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=iP0FQnBXTDM:z62z2T9LPQ0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=iP0FQnBXTDM:z62z2T9LPQ0:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=iP0FQnBXTDM:z62z2T9LPQ0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/kometbomb/~4/iP0FQnBXTDM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kometbomb.net/2009/05/21/seen-monitor-bot-activity-on-your-wordpress-blog/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://kometbomb.net/2009/05/21/seen-monitor-bot-activity-on-your-wordpress-blog/</feedburner:origLink></item>
		<item>
		<title>Migrating From 32-bit XP To 64-bit Windows 7</title>
		<link>http://feedproxy.google.com/~r/kometbomb/~3/7lKJypPmjXk/</link>
		<comments>http://kometbomb.net/2009/05/07/migrating-from-32-bit-xp-to-64-bit-windows-7/#comments</comments>
		<pubDate>Thu, 07 May 2009 20:52:09 +0000</pubDate>
		<dc:creator>kometbomb</dc:creator>
				<category><![CDATA[Nonsense]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://kometbomb.net/?p=422</guid>
		<description><![CDATA[Here's some quick pointers and answers to questions I, the stubborn XP user, had that made me hesitate trying out the new Windows 7 RC. I didn't immediately find such info on the webs and as a chronic luddite I didn't even think about finding out until absolutely necessary. ]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s some quick pointers and answers to questions I, the stubborn XP user, had that made me hesitate trying out the new <a href="http://www.microsoft.com/windows/windows-7/download.aspx">Windows 7 RC</a>. I didn&#8217;t immediately find such info on the webs and as a chronic luddite I didn&#8217;t even think about finding out until absolutely necessary. </p>
<p>My goals, as always with OS installs, were to minimize reinstalling of apps and data so that I can pretty much pick up where I left. Even though it&#8217;s common for even experienced or otherwise sane people to advocate a simple reformat of the hard drive and installing everything yet again, it&#8217;s just magical thinking to me (although it does make things simpler, but more laborous). In my experience, it takes just a bit of planning to avoid that. A tiny bit. What I did was taking backups of the most vital data (emails, most cherished boobie picture bookmarks and such) but I knew beforehands that&#8217;s not a part of plan B, even.</p>
<p>Then, I just installed the new OS. After some waiting and a reboot or two, the following is a list of what went through my head:</p>
<ul>
<li>I was worried about if old programs still work. <strong>Most programs you used to use in 32-bit XP <em>should</em> work OK</strong>. You simply drop them in <strong>C:\Program Files (x86)</strong>. Generally, I think you should not have trouble with common (non-game) programs because they are not native 64-bit code but see below.</li>
<li>Windows 7 didn&#8217;t remove my <strong>C:\Documents and Settings</strong>, even though for a short moment I thought it did. It&#8217;s simply relocated to <strong>C:\Windows.old</strong>, as are the <strong>Program Files</strong> folder and of course <strong>C:\Windows</strong> is there too in case you need it.</li>
<li>The <strong>Application Data</strong> and the <strong>Local Settings\Application Data</strong> folders that previously were right under the user directory are now in <strong>C:\Users\kometbomb\AppData\</strong> and <strong>C:\Users\kometbomb\AppData\Local\</strong>, respectively. I just dropped the Firefox and Thunderbird profile folders in there and here I am again with the same setup.</li>
<li>I immediately noticed the way I set Viewer2 as the default program for image files no longer works in Windows 7, so this might be a minor annoyance in case someone else does it the way I do. In the Control Panel there&#8217;s a working way to change the default programs manually, although I would hate to do it for more than the 4 different extensions Viewer2 needs. It seems you have to click every extension through and select the program you want to open them. Stuff like this probably is avoided if the program is done exactly as the MS specs tell etc. but the reality is that not everyone did that.</li>
<li>You will have trouble with file permissions if you were using NTFS (especially if this is your first time with more restrictive permissions), but this has always been the case if you move files around inside the same OS and the file owner is different (i.e. you but under a different OS etc.). Currently, I <del datetime="2009-05-07T21:56:59+00:00">have</del> had an interesting problem which causes some files being unable to open even though the folder has the permissions set as they should be. Even Explorer shows the files without the modification date and most programs report they can&#8217;t find the file (which in reality means they can&#8217;t open it even though the file is there).
<p>Found a solution: some (seemingly random) files are recognized as coming from another computer (i.e. my previous OS) and they have to manually be unblocked (file properties -> Unblock). I don&#8217;t know why 99% files that are in the same directory work without a question&#8230;</p>
<p>Personally, I think they could have done without this kind of stuff somehow. Yeah, big boys&#8217; OS&#8217;s have that kind of stuff but it&#8217;s just confusing if you really don&#8217;t want to know about that. After all, it&#8217;s the computer that should do the work. It&#8217;s kind of interesting how otherwise the interface is very much like something your mom would use after a bit of practice but if you just right click a file and go in the properties, there be dragons there.</li>
</ul>
<p>After a week of use, here&#8217;s the problems I have encountered:</p>
<ul>
<li>A total of two BSOD&#8217;s in a few weeks. Both times occured when I played a video (in Windows Media Player, I mostly use Media Player Classic and there has been no problems with it). The crash happened when the video card tried to reboot itself but failed to do so (crash happened in <strong>atikmdag.sys</strong> which is responsible of the reboot stuff). Good news: I think this is related to the AVIVO technology my card uses since I have had no problems except with WMP (because I am guessing MPC won&#8217;t utilize AVIVO &#8212; this is very much a thin, optimistic hunch, though).</li>
<li>It is not possible to mix and match 32-bit and 64-bit binaries freely. That is, a 32-bit program can&#8217;t use a 64-bit library and vice versa. Some examples when this is something that is the user&#8217;s problem, too:
<ul>
<li>A 64-bit media player can&#8217;t use the old 32-bit codecs. So, for some videos you&#8217;ll be using the 32-bit version of, say, <a href="http://sourceforge.net/projects/guliverkli/">Media Player Classic</a>.</li>
<li>Let&#8217;s imagine you compile your hobby project as a 64-bit app for fun. Oops, all the libraries you are used to use are 32-bit and you for some reason can&#8217;t/don&#8217;t bother to compile them as 64-bit DLL&#8217;s. Solution: You revert back to 32-bit code.</li>
<li>Shell extensions (e.g. WinRAR&#8217;s &#8220;Extract to here&#8230;&#8221; when you right click a file and such things) of 32-bit programs that otherwise work perfectly won&#8217;t work anymore (since the extensions are DLL&#8217;s with 32-bit code in them and they can&#8217;t be used by Explorer which is not 32-bit). Solution: Use a 64-bit version of the program (which often still need you to double click on a .reg file to enable the extensions).</li>
</ul>
</li>
<li>Almost constant high CPU use when nothing of value is happening. The culprit was WMPNetworkSvc (I really like the new Performance Monitor that shows an average of used resources and not just the current level of use &#8212; makes it easier to catch those processes that use tons of power except when you are looking). I disabled the service in <strong>Control Panel\System and Security\Administrative Tools\Services</strong> as it sounded like it&#8217;s not useful for me (the label on the tin says it shares media across UPnP devices, whatever that means).</li>
</ul>
<p>More to follow&#8230;</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/kometbomb?a=7lKJypPmjXk:3LCbEElFRcM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=7lKJypPmjXk:3LCbEElFRcM:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=7lKJypPmjXk:3LCbEElFRcM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=7lKJypPmjXk:3LCbEElFRcM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=7lKJypPmjXk:3LCbEElFRcM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=7lKJypPmjXk:3LCbEElFRcM:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=7lKJypPmjXk:3LCbEElFRcM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/kometbomb/~4/7lKJypPmjXk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kometbomb.net/2009/05/07/migrating-from-32-bit-xp-to-64-bit-windows-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kometbomb.net/2009/05/07/migrating-from-32-bit-xp-to-64-bit-windows-7/</feedburner:origLink></item>
		<item>
		<title>Viewer2 Status</title>
		<link>http://feedproxy.google.com/~r/kometbomb/~3/SWD0F2FAocI/</link>
		<comments>http://kometbomb.net/2009/04/10/viewer2-status/#comments</comments>
		<pubDate>Fri, 10 Apr 2009 07:11:12 +0000</pubDate>
		<dc:creator>kometbomb</dc:creator>
				<category><![CDATA[Viewer2]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://kometbomb.net/?p=417</guid>
		<description><![CDATA[Good news. There will be a new version of Viewer2 available soon. In addition to fixing the bugs that have been waiting for a fix for a year or so, it will be a significant improvement in performance (namely proper multi-threaded image loading that results in a lot smoother user interface especially when browsing over slow network connections) and also how the user interface is built. 
]]></description>
			<content:encoded><![CDATA[<p>Good news. A new version of Viewer2 will be available in the near future. In addition to fixing the bugs that have been waiting for a fix for a year or so, it will be a significant improvement in performance (namely proper multi-threaded image loading that results in a lot smoother user interface especially when browsing over slow network connections) and also how the user interface works. </p>
<p>For example, there&#8217;s a new tag cloud view, a more traditional grid based thumbnail list and an improved version (or, a total rewrite) of the light table view which was the only view available until now (with more physical image groups that can contain other subgroups &#8212;  in fact you can view a directory tree this way popping open the directories). Overall, it&#8217;s pretty sweet.</p>
<p>No estimates when it will be done, except for the infamous &#8220;when it&#8217;s done.&#8221;</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/kometbomb?a=SWD0F2FAocI:KnKtJlhO4ZM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=SWD0F2FAocI:KnKtJlhO4ZM:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=SWD0F2FAocI:KnKtJlhO4ZM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=SWD0F2FAocI:KnKtJlhO4ZM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=SWD0F2FAocI:KnKtJlhO4ZM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=SWD0F2FAocI:KnKtJlhO4ZM:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=SWD0F2FAocI:KnKtJlhO4ZM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/kometbomb/~4/SWD0F2FAocI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kometbomb.net/2009/04/10/viewer2-status/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kometbomb.net/2009/04/10/viewer2-status/</feedburner:origLink></item>
		<item>
		<title>Out of Memory?</title>
		<link>http://feedproxy.google.com/~r/kometbomb/~3/Cs66i_fZRSo/</link>
		<comments>http://kometbomb.net/2008/08/19/out-of-memory/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 20:07:34 +0000</pubDate>
		<dc:creator>kometbomb</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://kometbomb.net/?p=375</guid>
		<description><![CDATA[It&#8217;s a common practice not to check what malloc() or new returns, since in an ideal world you will never run out of memory and so allocating memory will never fail. With a reasonably sized page file that is mostly true. When using a page file, this wouldn&#8217;t be a problem since if there is [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s a common practice not to check what <tt>malloc()</tt> or <tt>new</tt> returns, since in an ideal world you will never run out of memory and so allocating memory will never fail. With a reasonably sized <a href="http://en.wikipedia.org/wiki/Paging" title="Paging" rel="wikipedia" class="zem_slink">page file</a> that is mostly true. When using a page file, this wouldn&#8217;t be a problem since if there is free space on the drive the page file is located, <a href="http://en.wikipedia.org/wiki/Virtual_memory" title="Virtual memory" rel="wikipedia" class="zem_slink">virtual memory</a> space can be temporarily enlarged (and a message pops up mentioning that) and the application that tried to allocate memory got what it asked.</p>
<p>However, since I upgraded to the maximum amount of memory Windows XP supports, and switched memory paging completely off, I&#8217;ve noticed some programs will silently fail when the system runs out of memory. And this isn&#8217;t that uncommon since I develop software and the crap programmer I am, silly mistakes are and always will be made that cause huge memory usage (and there&#8217;s also the rest of the software running on the computer). I have noticed at least Firefox simply disappears, while some software die with an error message.</p>
<p>For a game this wouldn&#8217;t be an issue (or a web browser even) but there are tons of programs downloading stuff or just hanging there that you&#8217;ll never notice missing. But it&#8217;s annoying to notice everything isn&#8217;t as you left it. </p>
<p>So, in case you haven&#8217;t thought of allocation failing, you probably should do something about it. When there&#8217;s no free memory left, even a <tt>malloc(sizeof(char))</tt> will invariably fail. A lazy way out would be wrapping the allocation with something that checks if the allocation succeeded and if not, displaying a message box will halt the program until the user does something (kills the offending app reserving all that memory or frees some disk space for the page file) and then clicks &#8220;Retry&#8221; and then the wrapper simply tries to allocate again. In C++, the <tt>new</tt> operator can be overloaded.</p>
<p>Just my 2 cents (Euro).</p>
<h3 id="toc-example-code">Example code</h3>
<h4 id="toc-c">C</h4>
<pre><code>void * my_alloc(size_t bytes)
{
  if (NULL == (ptr = malloc(bytes)))
  {
    // malloc failed, do something about it!
  }
  return ptr;
}</code></pre>
<h4 id="toc-c1">C++</h4>
<p>This uses the function from above C code.</p>
<pre><code>void * operator new(size_t bytes)
{
  return my_malloc(bytes);
}</code></pre>
<div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/91884b1b-4ef2-46ee-8343-cc6bb32f1031/" title="Zemified by Zemanta"><img style="border: medium none ; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=91884b1b-4ef2-46ee-8343-cc6bb32f1031" alt="Reblog this post [with Zemanta]" /></a></div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/kometbomb?a=Cs66i_fZRSo:1VW0CgsBHfY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=Cs66i_fZRSo:1VW0CgsBHfY:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=Cs66i_fZRSo:1VW0CgsBHfY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=Cs66i_fZRSo:1VW0CgsBHfY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=Cs66i_fZRSo:1VW0CgsBHfY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=Cs66i_fZRSo:1VW0CgsBHfY:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=Cs66i_fZRSo:1VW0CgsBHfY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/kometbomb/~4/Cs66i_fZRSo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kometbomb.net/2008/08/19/out-of-memory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kometbomb.net/2008/08/19/out-of-memory/</feedburner:origLink></item>
		<item>
		<title>Introducing Calculon</title>
		<link>http://feedproxy.google.com/~r/kometbomb/~3/-kyWikYd3Zo/</link>
		<comments>http://kometbomb.net/2008/08/05/introducing-calculon/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 15:00:39 +0000</pubDate>
		<dc:creator>kometbomb</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Calculator]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://kometbomb.net/?p=277</guid>
		<description><![CDATA[Here's a desktop calculator I wrote because I thought the standard Windows Calculator sucks (which it does).]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a desktop calculator I wrote because I thought the standard Windows Calculator sucks (which it does). I got annoyed of how you can&#8217;t paste more than a single number and how the scientific mode misses a simple shortcut to square root.</p>
<p style="text-align:center;"><img src="http://kometbomb.net/wp-content/uploads/2008/08/calculon1.png" alt="Calculon" /></p>
<p>My approach is closer to the Google Search calculator feature in that the program only has two text fields, one for the expression and one for the result. It also does conversions and has user-definable functions, constants and whatnot. </p>
<p>Currently, the software is in alpha state (which means it works but is not finished) which I hope will not be perpetual. It is already very much usable, though.</p>
<p>What is left to do is that currently the software does only 80-bit floating point arithmetics (the best precision offered by x87) and displaying the result is double precision (thanks to the fact MinGW uses Windows libraries for printing floats, which have support only up to double precision). I also plan adding simple graphical features for graphing functions.</p>
<p>You can find Calculon (a placeholder name) on <a href="/projects/calculon/">its own project page</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/kometbomb?a=-kyWikYd3Zo:J_nJUh3f8SU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=-kyWikYd3Zo:J_nJUh3f8SU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=-kyWikYd3Zo:J_nJUh3f8SU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=-kyWikYd3Zo:J_nJUh3f8SU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=-kyWikYd3Zo:J_nJUh3f8SU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=-kyWikYd3Zo:J_nJUh3f8SU:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=-kyWikYd3Zo:J_nJUh3f8SU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/kometbomb/~4/-kyWikYd3Zo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kometbomb.net/2008/08/05/introducing-calculon/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://kometbomb.net/2008/08/05/introducing-calculon/</feedburner:origLink></item>
		<item>
		<title>Is X Bullshit?</title>
		<link>http://feedproxy.google.com/~r/kometbomb/~3/RBkR-cEB_ig/</link>
		<comments>http://kometbomb.net/2008/08/04/is-x-bullshit/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 11:47:08 +0000</pubDate>
		<dc:creator>kometbomb</dc:creator>
				<category><![CDATA[Nonsense]]></category>
		<category><![CDATA[Bullshit]]></category>
		<category><![CDATA[Unfunny]]></category>

		<guid isPermaLink="false">http://kometbomb.net/?p=336</guid>
		<description><![CDATA[Here's a little checklist for scoring how much bullshit factor things have.]]></description>
			<content:encoded><![CDATA[<style type="text/css">
.blah > tr { margin-top: 10px; }
.blah th { text-align:center; }
.blah tr > td+td { background-color: #f0f0f0; font-size:16px; text-align:center; font-weight:bold; }
</style>
<table class="blah">
<tr>
<th>X&#8230;</th>
<th>Score</th>
</tr>
<tr>
<td>Sounds too good to be true<sup class='footnote'><a href='#fn-336-1' id='fnref-336-1'>1</a></sup></td>
<td>+1</td>
</tr>
<tr>
<td>Competes with an existing theory while offering simpler, more convenient (and often incomplete, less explanatory) explanations<sup class='footnote'><a href='#fn-336-2' id='fnref-336-2'>2</a></sup></td>
<td>+1</td>
</tr>
<tr>
<td>Main proponents are willing to test the theory/claim for validity</td>
<td>-3</td>
</tr>
<tr>
<td>Someone directly or indirectly benefits of people accepting it as a truth, as an individual (i.e. someone sells the more books/placebo the more people believe in it)<sup class='footnote'><a href='#fn-336-3' id='fnref-336-3'>3</a></sup><sup class='footnote'><a href='#fn-336-4' id='fnref-336-4'>4</a></sup></td>
<td>+2</td>
</tr>
<tr>
<td>Existing knowledge undeniably makes it impossible<sup class='footnote'><a href='#fn-336-5' id='fnref-336-5'>5</a></sup></td>
<td>+3</td>
</tr>
<tr>
<td>&#8230; and the main proponents ignore (and suggest followers to ignore) existing knowledge that clashes with their own ideas<sup class='footnote'><a href='#fn-336-6' id='fnref-336-6'>6</a></sup></td>
<td>+4</td>
</tr>
<tr>
<td>Has peer-reviewed research and/or credible evidence in case it is completely new idea</td>
<td>-2</td>
</tr>
<tr>
<td>Is a radically new idea<sup class='footnote'><a href='#fn-336-7' id='fnref-336-7'>7</a></sup></td>
<td>+1</td>
</tr>
<tr>
<td>Main proponents and experts are from the same field (e.g. evolutionary biologists defending natural selection vs. mathematicians defending creationism)<sup class='footnote'><a href='#fn-336-8' id='fnref-336-8'>8</a></sup></td>
<td>-2</td>
</tr>
<tr>
<td>People supporting the claim or theory are more interested of defending their position and/or creating more supporters rather than researching the subject<sup class='footnote'><a href='#fn-336-9' id='fnref-336-9'>9</a></sup></td>
<td>+1</td>
</tr>
</table>
<h3 id="toc-links">Links</h3>
<ul>
<li><a href="http://www.quackwatch.org/01QuackeryRelatedTopics/signs.html">Seven Warning Signs of Bogus Science</a> by Robert L. Park, Ph.D.</li>
</ul>
<div class='footnotes'>
<div class='footnotedivider'></div>
<ol>
<li id='fn-336-1'><a href="http://en.wikipedia.org/wiki/Cold_fusion">Cold fusion</a> <span class='footnotereverse'><a href='#fnref-336-1'>&#8617;</a></span></li>
<li id='fn-336-2'>Intelligent design <span class='footnotereverse'><a href='#fnref-336-2'>&#8617;</a></span></li>
<li id='fn-336-3'><a href="http://www.youtube.com/watch?v=f_SwD7RveNE">HeadOn</a>, <a href="http://en.wikipedia.org/wiki/HeadOn#Ingredients">see this</a> <span class='footnotereverse'><a href='#fnref-336-3'>&#8617;</a></span></li>
<li id='fn-336-4'><a href="http://www.alexchiu.com">Immortality devices by Alex Chiu</a> <span class='footnotereverse'><a href='#fnref-336-4'>&#8617;</a></span></li>
<li id='fn-336-5'>Homeopathy <span class='footnotereverse'><a href='#fnref-336-5'>&#8617;</a></span></li>
<li id='fn-336-6'><a href="http://en.wikipedia.org/wiki/Flat_Earth_Society">The Flat Earth Society</a> <span class='footnotereverse'><a href='#fnref-336-6'>&#8617;</a></span></li>
<li id='fn-336-7'>A lot of sound science goes here, including quantum mechanics, relativity and such but they satisfy the peer-reviewed research requirement <span class='footnotereverse'><a href='#fnref-336-7'>&#8617;</a></span></li>
<li id='fn-336-8'>Creationism has tons of this, including using them as an authority rather than a guy who knows about things. And <a href="http://en.wikipedia.org/wiki/Project_Steve">tons of Steves disagree</a>. <span class='footnotereverse'><a href='#fnref-336-8'>&#8617;</a></span></li>
<li id='fn-336-9'>The whole climate change hassle fits here, albeit only because while the supporters probably are right, they use their energy to moan about the subject and boosting their egos instead of doing anything. <span class='footnotereverse'><a href='#fnref-336-9'>&#8617;</a></span></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/kometbomb?a=RBkR-cEB_ig:cURDp6Rg5Q8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=RBkR-cEB_ig:cURDp6Rg5Q8:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=RBkR-cEB_ig:cURDp6Rg5Q8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=RBkR-cEB_ig:cURDp6Rg5Q8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=RBkR-cEB_ig:cURDp6Rg5Q8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=RBkR-cEB_ig:cURDp6Rg5Q8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=RBkR-cEB_ig:cURDp6Rg5Q8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/kometbomb/~4/RBkR-cEB_ig" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kometbomb.net/2008/08/04/is-x-bullshit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kometbomb.net/2008/08/04/is-x-bullshit/</feedburner:origLink></item>
		<item>
		<title>Collision Detection with Occlusion Queries Redux</title>
		<link>http://feedproxy.google.com/~r/kometbomb/~3/aJGOPzfFJQg/</link>
		<comments>http://kometbomb.net/2008/07/23/collision-detection-with-occlusion-queries-redux/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 15:37:41 +0000</pubDate>
		<dc:creator>kometbomb</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[Collision detection]]></category>
		<category><![CDATA[Game programming]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Source code]]></category>
		<category><![CDATA[Video games]]></category>

		<guid isPermaLink="false">http://kometbomb.net/?p=317</guid>
		<description><![CDATA[Here we describe a method for checking collisions between arbitrary objects drawn by the GPU. The objects are not limited to any shape, complexity or orientation. The objects that are checked for collisions can be the same objects that are drawn on the screen. The algorithm is pixel perfect but without further refining is limited to 2D collisions.]]></description>
			<content:encoded><![CDATA[<div class="toc">
<ol>
<li><a href="http://kometbomb.net/2008/07/23/collision-detection-with-occlusion-queries-redux/#toc-introduction">Introduction</a></li>
<li><a href="http://kometbomb.net/2008/07/23/collision-detection-with-occlusion-queries-redux/#toc-description">Description</a>
<ol>
<li><a href="http://kometbomb.net/2008/07/23/collision-detection-with-occlusion-queries-redux/#toc-determining-objects-that-need-to-be-tested">Determining objects that need to be tested</a></li>
<li><a href="http://kometbomb.net/2008/07/23/collision-detection-with-occlusion-queries-redux/#toc-drawing-objects">Drawing objects</a></li>
</ol>
</li>
<li><a href="http://kometbomb.net/2008/07/23/collision-detection-with-occlusion-queries-redux/#toc-caveats">Caveats</a></li>
<li><a href="http://kometbomb.net/2008/07/23/collision-detection-with-occlusion-queries-redux/#toc-appendix-a-source-code-for-opengl">Appendix A. Source code for OpenGL</a></li>
<li><a href="http://kometbomb.net/2008/07/23/collision-detection-with-occlusion-queries-redux/#toc-links">Links</a></li>
</ol>
</div>
<h3 id="toc-introduction">Introduction</h3>
<p>Here we describe a method for checking collisions between arbitrary objects drawn by the GPU. The objects are not limited to any shape, complexity or orientation. The objects that are checked for collisions can be the same objects that are drawn on the screen. The algorithm is pixel perfect but without further refining is limited to 2D collisions.</p>
<h3 id="toc-description">Description</h3>
<p>The algorithm can be divided in three separate steps:</p>
<ol>
<li>Determine which objects need testing</li>
<li>Set up the GPU buffers and draw the first object so the stencil buffer is set</li>
<li>Make an occlusion query using the and using the stencil from the previous buffer</li>
</ol>
<p>If the occlusion query returns any pixels were drawn, the two objects overlap.</p>
<h4 id="toc-determining-objects-that-need-to-be-tested">Determining objects that need to be tested</h4>
<div class="alignright" style="font-size:12px"><a href="http://kometbomb.net/wp-content/uploads/2008/07/col1.png"><img alt="Figure 1." src="http://kometbomb.net/wp-content/uploads/2008/07/col1thumb.png" style="border:0"></a><br/>Figure 1.</div>
<p> To speed up the algorithm, we need to eliminate object pairs that can&#8217;t overlap. This can be done by projecting the object bounding volumes in screen space. Then, we can quickly check which 2D polygons overlap and do further checking. Choosing the shape of the bounding volumes/polygons is not relevant. In this document we will use rectangles for the simplicity.</p>
<p>The example case in figure 1 shows two colliding objects (overlapping bounding rectangles shown red), one near hit (green overlap) and one object with no collisions or bounding rectangle overlap. To determine the collisions (and non-collisions) we need checks for every bounding rectangle (15 checks) and two checks using the GPU<sup class='footnote'><a href='#fn-317-1' id='fnref-317-1'>1</a></sup>. Without the use of the bounding rectangles, we would need 13 more checks on the GPU.</p>
<p>The bounding rectangles in the example can be generated by finding the maximum and minimum coordinates and using them as the corner points of the rectangle. Since the algorithm finds collisions as seen from the camera, we need first project the object coordinates (or the object bounding volume coordinates) on the screen and find the minima and maxima using those coordinates. Most 3D frameworks provide functions for projecting a 3D point to screen coordinates using the same transformations as seen on screen<sup class='footnote'><a href='#fn-317-2' id='fnref-317-2'>2</a></sup>.</p>
<h4 id="toc-drawing-objects">Drawing objects</h4>
<p>Before we start drawing the objects on the graphics buffer, we need to clear the stencil buffer. After that, the GPU should be set to draw only to the stencil buffer, that is we don&#8217;t need the color buffer or depth buffer to be updated.</p>
<p>Now, the first object can be drawn. After that, we will draw the second object. Before we start we need to set up the occlusion query to count the drawn pixels. We also need to use the stencil buffer created in the previous step and set the GPU to draw only if the stencil buffer is non-zero. We don&#8217;t need to update any buffers at this point.</p>
<p>After the second object is drawn, the pixel count returned by the occlusion query tells how many pixels overlap. For most purposes, we can assume a non-zero value means the two objects collide<sup class='footnote'><a href='#fn-317-3' id='fnref-317-3'>3</a></sup>.</p>
<p><center><br />
<table>
<tr>
<td><img src="http://kometbomb.net/wp-content/uploads/2008/07/col4.png" width="144" height="96" /><br/>Figure 2.</td>
<td><img src="http://kometbomb.net/wp-content/uploads/2008/07/col5.png" width="144" height="96" /><br/>Figure 3.</td>
<td><img src="http://kometbomb.net/wp-content/uploads/2008/07/col6.png" width="144" height="96" /><br/>Figure 4.</td>
</tr>
</table>
<p></center></p>
<p>Consider the above example. Figure 2 shows two objects as seen on screen. Figure 3 shows the stencil derived by drawing only the green (right) object. Figure 4 shows what will be drawn of the red (left) object if we limit the rendering to drawing on the stencil (the occlusion query will tell us six  pixels were drawn).</p>
<h3 id="toc-caveats">Caveats</h3>
<p>Most of all, doing collision detection with occlusion queries is a curiosity. There are many, many ways to do collisions faster and most likely with less technicalities. On top of it, the algorithm is a bottleneck as it needs full control of the GPU.</p>
<p>This is inherently a 2D algorithm. The GPU sees any situations in which two objects overlap as a collision, as seen from the location of the camera. This if fine for side-scrollers et cetera, which also benefit from pixel perfect (fair, predictable) collisions, and other situations in which all the objects to be tested are on the same plane. Multiple depth levels (e.g. foreground objects never collide with background items) improve the situation and so does drawing only the parts of the objects that are between specified depth levels<sup class='footnote'><a href='#fn-317-4' id='fnref-317-4'>4</a></sup>.</p>
<p>Another possible problem is that the screen resolution may be different between systems, which makes the algorithm have different levels of accuracy. This can be avoided by doing the checks in a fixed resolution. Limiting the collision buffer resolution also improves the algorithm speed in cases the GPU fillrate acts as a bottleneck.</p>
<p>Finally, some older systems may not support occlusion queries or stencil buffers. As of 2008, this is increasingly rare but should be taken into consideration.</p>
<h3 id="toc-appendix-a-source-code-for-opengl">Appendix A. Source code for OpenGL</h3>
<p>The following is source code extracted from a proof of a concept/prototype game written in C++ using OpenGL. The source code should be self explanatory.</p>
<p>The following builds the bounding rectangle for a object:</p>
<pre><code>BoundBox box=object-&gt;GetBoundingBox();

object-&gt;DoObjectTranslations();

glGetDoublev(GL_MODELVIEW_MATRIX, modelViewMatrix);
glGetDoublev(GL_PROJECTION_MATRIX, projectionMatrix);
glGetIntegerv(GL_VIEWPORT, viewport);

for (int i=0;i&lt;8;i++)
{
    GLdouble screenX, screenY, screenZ;

    vec3 c=box.Corner(i);

    gluProject(c.x(), c.y(), c.z(),
        modelViewMatrix, projectionMatrix, viewport,
        &amp;screenX, &amp;screenY, &amp;screenZ);

    maxX=max((int)screenX,maxY);
    maxY=max((int)screenY,maxY);
    minX=min((int)screenX,minX);
    minY=min((int)screenY,minY);
}

rect = Rect(minX,minY,maxX-minX, maxY-minY);</code></pre>
<p>The following can be used to set the rendering mode before drawing the object on the screen, on the stencil buffer or when making the occlusion query (note how we disable most of the rendering when drawing something that will not be visible to the player, also notice how the stencil buffer is cleared if we enable stencil drawing mode &#8212; using scissor makes this efficient):</p>
<pre><code>void GfxManager::SetRenderMode(RenderMode mode) {
  if (mode==STENCIL) {
    glDepthFunc(GL_ALWAYS);
    glDisable(GL_LIGHTING);
    glClear(GL_STENCIL_BUFFER_BIT);
    glEnable(GL_STENCIL_TEST);
    glDisable(GL_DEPTH_TEST);
    glStencilFunc(GL_ALWAYS, 1, 1);
    glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
    glColorMask(0,0,0,0);
  } else if (mode==OCCLUSION) {
    glDepthFunc(GL_ALWAYS);
    glDisable(GL_DEPTH_TEST);
    glDisable(GL_LIGHTING);
    glEnable(GL_SCISSOR_TEST);
    glEnable(GL_STENCIL_TEST);
    glStencilFunc(GL_EQUAL, 1, 1);
    glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
    glColorMask(0,0,0,0);
    glBeginQueryARB(GL_SAMPLES_PASSED_ARB, m_OccId);
  } else {
    // Set normal rendering mode here (enable lighting etc.)
  }
}</code></pre>
<p>Similarly, the following is used to end drawing (specifically to end the collision testing, at which the function returns the number of pixels drawn)&#8230;</p>
<pre><code>int GfxManager::FinishRenderMode(RenderMode mode) {
  if (mode==OCCLUSION) {
    glEndQueryARB( GL_SAMPLES_PASSED_ARB );
    GLuint occ=0;
    glGetQueryObjectuivARB( m_OccId, GL_QUERY_RESULT_ARB, &amp;occ);
    return (int)occ;
  } else {
    return 0;
  }
}</code></pre>
<p>&#8230; using something like this:</p>
<pre><code>int GfxManager::DrawObject(int oid,vec3 pos,vec3 rot,RenderMode mode) {
  SetRenderMode(mode);
  Draw3DObject(oid, pos, rot);
  return FinishRenderMode(mode);
}</code></pre>
<p>This is from the main loop, it simply goes through all objects in the game. Notice how we first prepare the collision checking for the first object to be tested (i.e. create the stencil as in step 2 of the algorithm). </p>
<pre><code>for (unsigned int a=0;a&lt;m_Objects.size();a++) {
  m_Objects[a]-&gt;PrepareCollide();
  for (unsigned int b=a+1;b&lt;m_Objects.size();b++) {
    if (m_Objects[a]-&gt;TestCollide(m_Objects[b])) {
      // We have a collision
    }
  }
  m_Objects[a]-&gt;FinishCollide();
}</code></pre>
<p>Note that DrawObject is the same method as we use to draw the visible object on the screen. The only thing that differs is that the drawing mode is set to stencil or occlusion query. Also worth noting is how we use the rectangle to set the scissor to further reduce the workload.</p>
<pre><code>void GfxObject::PrepareCollide() {
  GetGfxManager()-&gt;SetScissor(this-&gt;GetBoundingRect());
  GetGfxManager()-&gt;DrawObject(m_GfxId,GetPosition(),GetRotation(),STENCIL);
}

void GfxObject::FinishCollide() {
  // We simply reset the scissor
  GetGfxManager()-&gt;SetScissor();
}

int GfxObject::DrawCollide() {
  // We could set the scissor here to even smaller area, the overlapping area
  return GetGfxManager()-&gt;DrawObject(m_GfxId,GetPosition(),GetRotation(),OCCLUSION);
}

bool GfxObject::TestCollide(Object *obj) {
  Rect a=GetBoundingRect();
  Rect b=obj-&gt;GetBoundingRect();

  // No need for further collision testing if the rectangles
  // don't overlap
  if (!a.TestCollide(b)) return false;

  // We have a collision if any pixels were drawn
  return obj-&gt;DrawCollide() &gt; 0;
}</code></pre>
<h3 id="toc-links">Links</h3>
<ul>
<li><a href="http://blogs.msdn.com/shawnhar/archive/2008/12/31/pixel-perfect-collision-detection-using-gpu-occlusion-queries.aspx">Shawn Hargreaves Blog: Pixel perfect collision detection using GPU occlusion queries</a> &#8211; seems to be exactly the same idea but this time using XNA</li>
</ul>
<div class='footnotes'>
<div class='footnotedivider'></div>
<ol>
<li id='fn-317-1'>
To speed up the checks done on the GPU, we can set the scissor rectangle to the overlapping area. This helps in cases in which the overlapping area is small compared to the complete area of the object. <span class='footnotereverse'><a href='#fnref-317-1'>&#8617;</a></span></li>
<li id='fn-317-2'>OpenGL has <a href="http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/glu/project.html">gluProject()</a>, DirectX has <a href="http://msdn.microsoft.com/en-us/library/bb205516(VS.85).aspx">D3DXVecProject()</a> <span class='footnotereverse'><a href='#fnref-317-2'>&#8617;</a></span></li>
<li id='fn-317-3'>It may be useful to consider a larger tolerance for fairness&#8217; sake <span class='footnotereverse'><a href='#fnref-317-3'>&#8617;</a></span></li>
<li id='fn-317-4'>E.g. setting the near and far clipping planes to the distance of the second object (assuming it won&#8217;t be a problem that the clipping results in objects that have a hole) <span class='footnotereverse'><a href='#fnref-317-4'>&#8617;</a></span></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/kometbomb?a=aJGOPzfFJQg:NDaLxXMtIN0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=aJGOPzfFJQg:NDaLxXMtIN0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=aJGOPzfFJQg:NDaLxXMtIN0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=aJGOPzfFJQg:NDaLxXMtIN0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=aJGOPzfFJQg:NDaLxXMtIN0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=aJGOPzfFJQg:NDaLxXMtIN0:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=aJGOPzfFJQg:NDaLxXMtIN0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/kometbomb/~4/aJGOPzfFJQg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kometbomb.net/2008/07/23/collision-detection-with-occlusion-queries-redux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kometbomb.net/2008/07/23/collision-detection-with-occlusion-queries-redux/</feedburner:origLink></item>
		<item>
		<title>Proposal: One-sentence News</title>
		<link>http://feedproxy.google.com/~r/kometbomb/~3/3E4Tq3o7iLc/</link>
		<comments>http://kometbomb.net/2008/06/27/proposal-one-sentence-news/#comments</comments>
		<pubDate>Fri, 27 Jun 2008 15:43:20 +0000</pubDate>
		<dc:creator>kometbomb</dc:creator>
				<category><![CDATA[Nonsense]]></category>
		<category><![CDATA[Blogging]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://kometbomb.net/?p=275</guid>
		<description><![CDATA[Stop luring people on your trite news blogs with misleading titles. Sure, a mysterious or provocative title is a good way to get people interested, but it in worst case makes your blog (and you) look uninformed. Especially, when the first sentence of the news item doesn&#8217;t explain the inaccuracies of the main headline.
News should [...]]]></description>
			<content:encoded><![CDATA[<p>Stop luring people on your trite news blogs with misleading titles. Sure, a mysterious or provocative title is a good way to get people interested, but it in worst case makes your blog (and <em>you</em>) look uninformed. Especially, when the first sentence of the news item doesn&#8217;t explain the inaccuracies of the main headline.</p>
<p>News should never be speculative and if that is the case, it has to be explicitly stated where the line between fact and fiction goes. Some news are meant to be taken as entertainment but that style of writing should not bleed to potentially important news items. At least I expect to get information from news, even if I just casually pick the interesting sounding ones.</p>
<p>I hereby give away another priceless idea: <strong>one-sentence news</strong>. That is, you do not need to read the full article after you have read the descriptive, 5-15 word headline. Maybe that&#8217;ll cut into the advertising profit for there are less visitors to your site from feed readers etc. but not providing full articles in a feed is yesterday. And if you really only write 20 words per article, well, I guess that could make it profitable if you divide your income by the amount of text you write.</p>
<p>Here&#8217;s an example: Popular Science reports &#8220;<a href="http://www.popsci.com/military-aviation-space/article/2008-06/molecules-life-meteorites">Genetic Material Found on Meteorite</a>&#8220;. What went wrong? Take a guess. At the very least I expect to read about scientists finding very discriminating evidence on a meteorite with a blacklight, kinda like how they do it with dead hookers in CSI.</p>
<p>Even the subtitle right below the main title already downplays the sensational title and states &#8220;A meteorite in Australia has been found to contain component molecules of DNA&#8221;. And if you take the time to read the article, you&#8217;ll learn similar molecules that make up DNA are found on a meteorite (I bet a rather large percent of the molecules in your DNA most likely are entirely made on Earth). That&#8217;s like reporting there are organic molecules in space (look it up), and not explaining what &#8220;organic&#8221; actually means. Except in the end, right below the ad banner.</p>
<p>How could that be reported in one sentence and what are the benefits? First, you&#8217;ll deliver the exact same amount of information but quicker. &#8220;Similar Molecules as in Your DNA Found on a Meteorite&#8221;. &#8220;The Birth of DNA Molecules Could Have Been Helped by Completely Uninteresting Stuff on Meteorites Billions of Years Ago&#8221;. Hell, I don&#8217;t care if it&#8217;s a haiku. Just make it terse, informative and less stupid.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/kometbomb?a=3E4Tq3o7iLc:VtLejycJ00Q:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=3E4Tq3o7iLc:VtLejycJ00Q:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=3E4Tq3o7iLc:VtLejycJ00Q:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=3E4Tq3o7iLc:VtLejycJ00Q:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=3E4Tq3o7iLc:VtLejycJ00Q:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=3E4Tq3o7iLc:VtLejycJ00Q:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=3E4Tq3o7iLc:VtLejycJ00Q:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/kometbomb/~4/3E4Tq3o7iLc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kometbomb.net/2008/06/27/proposal-one-sentence-news/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kometbomb.net/2008/06/27/proposal-one-sentence-news/</feedburner:origLink></item>
		<item>
		<title>Thrustlikes</title>
		<link>http://feedproxy.google.com/~r/kometbomb/~3/PZ-Kv-7eP4E/</link>
		<comments>http://kometbomb.net/2008/06/18/thrustlikes/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 19:52:14 +0000</pubDate>
		<dc:creator>kometbomb</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[8-bit]]></category>
		<category><![CDATA[Asteroids]]></category>
		<category><![CDATA[Atari]]></category>
		<category><![CDATA[C64]]></category>
		<category><![CDATA[NES]]></category>
		<category><![CDATA[Nostalgy]]></category>
		<category><![CDATA[Retro gaming]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[Video games]]></category>

		<guid isPermaLink="false">http://kometbomb.net/?p=268</guid>
		<description><![CDATA[<img src="http://kometbomb.net/wp-content/uploads/2008/06/thrustlikes1.png" class="alignleft" /> Probably my most favorite video games are <em>thrustlike</em> games -- games that relate to <strong>Thrust</strong> similarly how Rogue relates to roguelikes. Here are some of the games I consider the best examples of this genre. ]]></description>
			<content:encoded><![CDATA[<p><img src="http://kometbomb.net/wp-content/uploads/2008/06/thrustlikes.png" alt="" title="thrustlikes" class="alignright size-medium wp-image-270" height="168" width="192"> Probably my most favorite video games are <em>thrustlike</em> games &#8211; as in <a href="http://www.roguetemple.com/">roguelikes</a> begat by <a href="http://en.wikipedia.org/wiki/Rogue_%28computer_game%29">Rogue</a> (<strong><a href="http://www.adom.de/" title="Ancient Domains of Mystery" rel="homepage" class="zem_slink">ADOM</a></strong>, <strong>Nethack</strong>, <strong>Angband</strong>, <strong><a href="http://www-math.bgsu.edu/%7Egrabine/moria.html" title="Moria (computer game)" rel="homepage" class="zem_slink">Moria</a></strong> et al.). What I mean with a thrustlike is a game derivative of <strong><a href="http://en.wikipedia.org/wiki/Asteroids_%28arcade_game%29" title="Asteroids (arcade game)" rel="wikipedia" class="zem_slink">Asteroids</a></strong>, <strong><a href="http://en.wikipedia.org/wiki/Lunar_Lander_%28computer_game%29" title="Lunar Lander (computer game)" rel="wikipedia" class="zem_slink">Lunar Lander</a></strong>, <strong><a href="http://en.wikipedia.org/wiki/Gravitar" title="Gravitar" rel="wikipedia" class="zem_slink">Gravitar</a></strong> and <strong>Spacewar</strong> that feature a simple physics model, a rotating spaceship and a button for <em>thrust</em>. Hence, &#8220;thrustlike&#8221; and not &#8220;gravitarlike&#8221;. Also, mostly because I <em>really</em> like <strong>Thrust</strong>.</p>
<p>Here are some of the games I consider the best examples of this genre. </p>
<h3 id="toc-thrust-1986">Thrust (1986)</h3>
<p>What I think <a href="http://en.wikipedia.org/wiki/Thrust_%28video_game%29" title="Thrust (video game)" rel="wikipedia" class="zem_slink">Thrust</a> does that makes it so much better than Asteroids and other household names is that it takes the simple rule of motion and inertia, and adds another basic concept, counterforce. In Thrust, you not only maneuver the ship through narrow caves but you also have to lift a heavy load (a &#8220;klystron pod&#8221;) that swings under the ship. And, in most cases the roles are reversed when the heavy pod transfers its excess kinetic energy to your stationary ship, sending you both spinning towards the nearest wall. However, the whole gameplay doesn&#8217;t feel as random as it is with many modern physics based games that often require luck or endless trial and error. You are always in charge of the physics, if you are a good enough pilot.</p>
<p style="text-align: center;"><object height="344" width="425"><param name="movie" value="http://www.youtube.com/v/dJpRdAQhBp0&amp;hl=en&amp;rel=0&amp;color1=0xe1600f&amp;color2=0xfebd01"><embed src="http://www.youtube.com/v/dJpRdAQhBp0&amp;hl=en&amp;rel=0&amp;color1=0xe1600f&amp;color2=0xfebd01" type="application/x-shockwave-flash" height="344" width="425"></object><br /><small>Thrust on the BBC Micro.</small></p>
<p>Another thing that I like about Thrust is that the player is easily able to skip a few levels by activating the self-destruct sequence of the planet by shooting the power plant a few too many times. Why I like it is that in a way you feel like you cheated the game (although, you also lost a lot of bonus points). However, without a doubt this was added to make it easier to quickly get to and practice the later levels, it&#8217;s a very nice touch it&#8217;s built in the game world. It is also possible to get hefty bonus if you manage to both fetch the pod and also destroy the power plant.</p>
<p>Thrust has a reputation for being hard but I can&#8217;t really agree with that. The game has a handful of levels and the regular levels are quite easy to finish when you get the hang of it. However, after that the gravity is reversed and the levels loop from the beginning and after a successful completion, the walls turn invisible. And then I guess the game goes reversed-invisible<sup class='footnote'><a href='#fn-268-1' id='fnref-268-1'>1</a></sup>.</p>
<p><!--adsense_inside_post--></p>
<p>Another proof of the game&#8217;s excellence is that it&#8217;s probably one of the most ported (officially or not) games, when it comes to radically different platforms. There are equally playable versions for the BBC (also the original version), the C64 (with <a href="http://www.youtube.com/watch?v=FTekIFu-HgQ">a rocking Hubbard tune</a>), the 8 and 16-bit Ataris and unofficial ports for <a href="http://www.emix8.org/static.php?page=VectrexThrust">Vectrex</a> and <a href="http://en.wikipedia.org/wiki/Atari_2600" title="Atari 2600" rel="wikipedia" class="zem_slink">Atari VCS</a><sup class='footnote'><a href='#fn-268-2' id='fnref-268-2'>2</a></sup>. There also is <a href="http://www.lysator.liu.se/%7Epeda/thrust/">a C rewrite of the game engine</a> that is open source, which I guess ensures the game can be ported to any semi-modern platform.</p>
<p>There apparently was a sequel, that wasn&#8217;t so well received (proving more does not equal better) and I have never seen it.</p>
<h3 id="toc-gravitar-1982">Gravitar (1982)</h3>
<p>Gravitar, on the other hand, does much of the same. Thrust (1986) was obviously very influenced by Gravitar (1982)<sup class='footnote'><a href='#fn-268-3' id='fnref-268-3'>3</a></sup>, which was probably influenced by Asteroids (1979) and Lunar Lander (1973, 1979). Both Thrust and Gravitar have planets to visit, fuel to be beamed up, enemy bunkers that shoot back and, of course, gravity. But to me, Gravitar doesn&#8217;t have as crystallized gameplay as Thrust. Thrust is as solid as, uh, Gravitar&#8217;s vectors are, umm, sharp.</p>
<p style="text-align: center;"><object height="344" width="425"><param name="movie" value="http://www.youtube.com/v/VZYW62S6TP0&amp;hl=en&amp;rel=0&amp;color1=0xe1600f&amp;color2=0xfebd01"><embed src="http://www.youtube.com/v/VZYW62S6TP0&amp;hl=en&amp;rel=0&amp;color1=0xe1600f&amp;color2=0xfebd01" type="application/x-shockwave-flash" height="344" width="425"></object><br /><small>Gravitar. The graphics are so sharp you can&#8217;t see crap on Youtube videos.</small></p>
<p>What&#8217;s pretty neat in Gravitar is that you can select in which order you play the levels, the levels are simply presented as planets in a solar system and you have to fly the ship avoiding the star that is in the center of the solar system. This also gives another challenge (or a possibility to optimize your gameplay) since the star&#8217;s gravity can be exploited to save fuel. Each level also is quite different from the other levels.</p>
<h3 id="toc-oids-1987">Oids (1987)</h3>
<p style="text-align: center;"><object height="344" width="425"><param name="movie" value="http://www.youtube.com/v/WxhmMGLVjQ4&amp;hl=en&amp;rel=0&amp;color1=0xe1600f&amp;color2=0xfebd01"><embed src="http://www.youtube.com/v/WxhmMGLVjQ4&amp;hl=en&amp;rel=0&amp;color1=0xe1600f&amp;color2=0xfebd01" type="application/x-shockwave-flash" height="344" width="425"></object><br /><small>Oids on the Atari ST.</small></p>
<p>Another game I really liked was <strong><a href="http://en.wikipedia.org/wiki/Oids" title="Oids" rel="wikipedia" class="zem_slink">Oids</a></strong>. It combines yet more favorites of mine with Thrust: <strong>Choplifter</strong> and <strong><a href="http://en.wikipedia.org/wiki/Space_Taxi" title="Space Taxi" rel="wikipedia" class="zem_slink">Space Taxi</a></strong>, both outside the strictest requirements of the thrustlike genre. In Oids, the klystron pods are replaced with little guys (android slaves, or &#8216;oids) that you have to pick up, first of course having to land the ship carefully, and take up to the mothership. Oids is so loved that the Atari ST emulator Oidemu was made just to run the game, which wouldn&#8217;t run on other emulators &#8212; and Oidemu subsequently didn&#8217;t bother supporting any other games. </p>
<p>The saving the little guys idea is lifted from Choplifter (get it?) in which you use a chopper to demolish prisons and then land nearby and wait for the little men to climb aboard, making multiple runs as the chopper can carry a limited amount of men. The gameplay is much speedier in Oids, you constantly have to dodge incoming bullets and homing missiles and the levels generally are much more open than in Thrust or Gravitar. In all, Oids feels like very natural progression from Thrust. </p>
<p>Maybe one factor that made the game so special was the fact it shipped with a level editor.</p>
<h3 id="toc-space-taxi-1984">Space Taxi (1984)</h3>
<p><!--Macross start (image_right)--><div class="articleimage" style="float:right;clear:right"><img class="corners iradius8" src="http://kometbomb.net/wp-content/uploads/2008/06/space-taxi.png" /><p>Hey, taxi!</p></div><!--Macross end (image_right)--></p>
<p>If we bend the rules what makes a thrustlike, Space Taxi is more than a worthy addition to the genre. Especially so, if you think Lunar Lander fits in the genre &#8212; both games have similar controls (thrust up, down and to the sides) and also the common goal of landing quickly yet safely. </p>
<p>There was a nice clone of Space Taxi on the Amiga featuring a caveman flying a stone-age version of a helicopter (think Flintstones). The game was called <strong>Ugh!</strong> and it was later ported to the PC (it&#8217;s great) and C64 (it&#8217;s crap). </p>
<p>While Ugh! looks gorgeous and is fun to play, what Space Taxi does infinitely better is that <em>every</em> level in Space Taxi is very different from the other levels, and that is not just the layout that changes (on top of that Ugh! uses the same tiles over and over, <a href="http://www.mobygames.com/game/ugh/screenshots">however nicely pixeled they might be</a>). The rules of the game are often deviated slightly. For example, one level has a beanstalk that slowly grows leaves on which you can land (and the passengers start appearing on) and others simply have disappearing walls or teleports. I guess that still makes the game quite unique, since even now games rarely have radically different levels.</p>
<p>There also is <a href="http://www.twilightgames.com/spacetaxi/spacetaxi_info.htm"><strong>Space Taxi 2</strong></a>, which is a legit sequel but the tiny voice in my head says it can&#8217;t possibly measure up. It&#8217;s worth a check, though, as it has the same level designs as the original.</p>
<h3 id="toc-solar-jetman-hunt-for-the-golden-warpship-1990">Solar Jetman: Hunt for the Golden Warpship (1990)</h3>
<p><strong>Solar Jetman: Hunt for the Golden Warpship</strong> is pretty much exactly what Thrust was years earlier but with updated graphics. The only difference is that in each level you have to find a different object, each being a part of the Golden Warpship and various other items which upgrade the ship you pilot around. There&#8217;s also a bit of Oids in the game, as it features more shooting and has enemies that follow you around the level.</p>
<p style="text-align: center;"><object height="344" width="425"><param name="movie" value="http://www.youtube.com/v/RULmoRNGtRs&amp;hl=en&amp;rel=0&amp;color1=0xe1600f&amp;color2=0xfebd01"><embed src="http://www.youtube.com/v/RULmoRNGtRs&amp;hl=en&amp;rel=0&amp;color1=0xe1600f&amp;color2=0xfebd01" type="application/x-shockwave-flash" height="344" width="425"></object><br /><small>Solar Jetman: Hunt for the Golden Warpship on the NES.</small></p>
<p>The game provides welcome variation to NES games and I can see why it wasn&#8217;t a success among the younger gamers despite the great graphics (got to love the smooth rotation of the ship). The controls are smooth but as all games of this genre, Solar Jetman can be a handful. Especially, if you are looking for more straight-forward action.</p>
<p>The game is the successor to <a href="http://en.wikipedia.org/wiki/Lunar_Jetman">Lunar Jetman</a> (which shares only half of the name and virtually no gameplay elements, except for the little spaceman that you have to get back to the mothership when your probe is destroyed, see above video) &#8212; Solar Jetman was developed by Rare who in fact were called Ultimate Play The Game who developed Lunar Jetman for the Speccy (and loads of other very successful games). Solar Jetman was also going to be released for most of the home computers of the time but the ports were canceled and only the <a href="http://gtw64.retro-net.de/Pages/s/Review_Solarjetman.php">C64 port</a> is available to the public.</p>
<h3 id="toc-caveflyers">&#8220;Caveflyers&#8221;</h3>
<p>In the mid-1990s there was a boom for so called <em>caveflyers</em> (from Finnish <em>&#8220;luolalentely&#8221;</em>) here in Finland. The caveflyer genre probably owes more to Spacewar as it&#8217;s mainly about blowing up the other players. There were dozens of similar games that all featured hotseat multiplayer action (some even had computer controlled), various weapons and levels and most importantly destructible environments. </p>
<p><a href="http://kometbomb.net/wp-content/uploads/2008/06/mayhem.png"><img src="http://kometbomb.net/wp-content/uploads/2008/06/mayhem-t.png" alt="" title="A level from Mayhem" class="alignright size-thumbnail wp-image-272" height="196" width="250"></a> There had been a lot of similar games by hobbyists before the boom, the single game that started it all probably was Gravity Force on the Amiga. However, I think the flood of cavefliers (in Finland, at least) was triggered by <strong>Auts</strong> and <strong>Turboraketti</strong> on the PC. I am very sure different areas had a bit different ideas what was the hottest game but at least to me, Auts was it. After that more and more clones started appearing with constantly improving quality and broadening weapon arsenal. My favorite probably was <strong>Kaboom</strong>. On the Amiga, there was a bit older similar game called <strong>Mayhem</strong> (1993) which we played a lot. There&#8217;s <a href="http://eab.abime.net/archive/index.php/t-2128.html">an abandoned PC conversion</a> that you can find in the linked thread.</p>
<p>This subgenre is still alive and there are many modern caveflyers that have Internet multiplayer features and so on. </p>
<h3 id="toc-3d-thrustlikes-and-other-oddities">3D thrustlikes and other oddities</h3>
<p><!--Macross start (image_right)--><div class="articleimage" style="float:right;clear:right"><img class="corners iradius8" src="http://kometbomb.net/wp-content/uploads/2008/06/virus-spectrum-screenshot.gif" /><p>Virus on the Speccy</p></div><!--Macross end (image_right)--></p>
<p>There have been various <a href="" http:="" en.wikipedia.org="" wiki="" zarch=""><strong>Zarch</strong> (1987)</a> on the Acorn Archimedes (ported later in 1998 as Virus for the Amiga, Atari ST, ZX Spectrum and PC) features similar controls for the player ship except that there now are two rotation axes. The gameplay however features minimal interaction with the landscape as there are no caves. Later in 1999, Psygnosis released <a href="http://www.mobygames.com/game/lander"><strong>Lander</strong></a> for the PC that featured closed levels, cargo hauling and teleporting fuel on the lander. So, Lander pretty much is Thrust in 3D.</p>
<p>&#8212;</p>
<p>So, were there any games I left out that you think should be here? Do leave a comment. Also, I&#8217;d like to thank the people who uploaded gameplay videos of Thrust, Gravitar and Oids to Youtube. I had only a NES emulator with AVI output handy.</p>
<h3 id="toc-links">Links</h3>
<ul>
<li><a href="http://www.cooganphoto.com/gravitar">Dan Coogan&#8217;s Gravitar page</a> a lot of stuff from the world champion</li>
<li><a href="http://moonlander.eu/">More Lunar Lander clones you will ever need</a> (including Flash games)</li>
<li><a href="http://thom.best.vwh.net/software.html">Zarch for Linux</a></li>
<li><a href="http://one.xthost.info/zelko/opengl.html">Zarch for Windows</a></li>
<li><a href="http://everything2.com/e2node/Cave%2520flyer">More about caveflyers</a></li>
<li><a href="http://www.jonneweb.net/pelit/category/4/">A lot of caveflyers</a> (reviews in Finnish)</li>
</ul>
<div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/5210351e-19fa-4cd7-9118-d396bda8ea5b/" title="Zemified by Zemanta"><img style="border: medium none ; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_a.png?x-id=5210351e-19fa-4cd7-9118-d396bda8ea5b" alt="Zemanta Pixie"></a></div>
<div class='footnotes'>
<div class='footnotedivider'></div>
<ol>
<li id='fn-268-1'>Gravitar and loads of other games, including some Pac-Man sequels, do this as well. <span class='footnotereverse'><a href='#fnref-268-1'>&#8617;</a></span></li>
<li id='fn-268-2'>Including scrolling and everything&#8230; even <a href="http://www.biglist.com/lists/stella/archives/199911/msg00029.html">drawing the rod that connects the klystron pod to the spacecraft</a> was a potential project killer on the VCS. <span class='footnotereverse'><a href='#fnref-268-2'>&#8617;</a></span></li>
<li id='fn-268-3'>Maybe the creator of Thrust saw <a href="http://www.mobygames.com/game/gauntlet__"><strong>Gauntlet</strong> (1984) on the Atari</a> as well. <span class='footnotereverse'><a href='#fnref-268-3'>&#8617;</a></span></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/kometbomb?a=PZ-Kv-7eP4E:bconFyBciwY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=PZ-Kv-7eP4E:bconFyBciwY:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=PZ-Kv-7eP4E:bconFyBciwY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=PZ-Kv-7eP4E:bconFyBciwY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=PZ-Kv-7eP4E:bconFyBciwY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/kometbomb?i=PZ-Kv-7eP4E:bconFyBciwY:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/kometbomb?a=PZ-Kv-7eP4E:bconFyBciwY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/kometbomb?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/kometbomb/~4/PZ-Kv-7eP4E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kometbomb.net/2008/06/18/thrustlikes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kometbomb.net/2008/06/18/thrustlikes/</feedburner:origLink></item>
	</channel>
</rss>
