<?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>Lightning Does Strike Twice &#187; offline</title>
	<atom:link href="http://gnueless.com/category/offline/feed" rel="self" type="application/rss+xml" />
	<link>http://gnueless.com</link>
	<description>The semi-daily pseudo-random thoughts of Emil Erik Hansen</description>
	<lastBuildDate>Sun, 22 Aug 2010 09:18:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>sanctuary</title>
		<link>http://gnueless.com/2010/08/sanctuary.html</link>
		<comments>http://gnueless.com/2010/08/sanctuary.html#comments</comments>
		<pubDate>Tue, 03 Aug 2010 15:49:01 +0000</pubDate>
		<dc:creator>gnub</dc:creator>
				<category><![CDATA[diablo]]></category>
		<category><![CDATA[offline]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://gnueless.com/?p=638</guid>
		<description><![CDATA[With Blizzard&#8217;s Writing Contest of the year coming to an end soon, I figured it might be time to take a look and figure out a submission for this year. Last time, I stayed within the familiarity of the Warcraft Universe, with the story &#8220;A Change of Ways&#8220;. The advantages was that it has a [...]]]></description>
			<content:encoded><![CDATA[<p>With <a href="http://us.blizzard.com/en-us/community/contests/writing2010/">Blizzard&#8217;s Writing Contest</a> of the year coming to an end soon, I figured it might be time to take a look and figure out a submission for this year.</p>
<p>Last time, I stayed within the familiarity of the Warcraft Universe, with the story &#8220;<a href="http://gnueless.com/2009/07/a-change-of-ways.html">A Change of Ways</a>&#8220;. The advantages was that it has a rich lore, with tons and tons of details and places, and the more obvious thing that it&#8217;s the universe I&#8217;ve spend the most time in, so far. But, what&#8217;s a competition without a challenge?</p>
<p>With that in mind, only two real universes remained: Diablo and Starcraft. Being more a fan of dark fantasy than science fiction &#8211; although I do like both &#8211; and knowing <a href="http://gnueless.com/2008/07/soul-in-search-of-answers.html">something about Diablo</a>, I chose the realm of Sanctuary. The lore is less detailed, and lots of stuff is still clouded in mystery, which makes a lot of nice openings for a good story.</p>
<p>So far, I&#8217;ve gotten a plot shaped, and slowly iterating through it and adding details, fleshing out characters and figuring out what part they&#8217;ll have. The main thing I want to do, is tying the various games together, and make further connections, as one of the things I&#8217;ve been having on my mind lately is <a href="http://gnueless.com/2010/06/rebirth.html">just that</a>. Looking forward to seeing how the story will turn out. This time, I shouldn&#8217;t have a problem with with time running out &#8211; I hope.</p>
]]></content:encoded>
			<wfw:commentRss>http://gnueless.com/2010/08/sanctuary.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>gwardar</title>
		<link>http://gnueless.com/2010/06/gwardar.html</link>
		<comments>http://gnueless.com/2010/06/gwardar.html#comments</comments>
		<pubDate>Sun, 27 Jun 2010 12:21:02 +0000</pubDate>
		<dc:creator>gnub</dc:creator>
				<category><![CDATA[general gaming]]></category>
		<category><![CDATA[offline]]></category>
		<category><![CDATA[university]]></category>

		<guid isPermaLink="false">http://gnueless.com/?p=625</guid>
		<description><![CDATA[And so, the 3 week programming-course I&#8217;d been working with is over. The report is written, the program compiled (and worked!) flawlessly &#8211; although the last compile was done 1½ hour before the actual exam &#8211; and the board that ran our program is returned. I&#8217;m actually going to miss the thing, it was rather [...]]]></description>
			<content:encoded><![CDATA[<p>And so, the 3 week programming-course I&#8217;d been working with is over. The report is written, the program compiled (and worked!) flawlessly &#8211; although the last compile was done 1½ hour before the actual exam &#8211; and the board that ran our program is returned. I&#8217;m actually going to miss the thing, it was rather fun to work with &#8211; and game development is fun, especially when the idea is rather unique, and as thus, easy to write a lot about.</p>
<p>To give a quick rundown of the project, it was done by writing a program in C, that was sent via a serial port to a <a href="http://www.zilog.com/index.php?option=com_product&#038;Itemid=26&#038;mode=showFamilyDetails&#038;familyId=6&#038;parent_id=2">ZiLOG Z8 Encore! Z8F6403</a>, and from there we could listen via a Telnet-based Terminal (from another serial port), and/or via the on-board LED display (which I got a nice example of here: <a href="http://gnueless.com/images/failboard.jpg">The Failboard</a>), and get inputs by pressing the 3 buttons. The first week was various exercises to get used to how it reacted to various things, how to control its register-calls, and coding C in general. The various exercises was naturally elements that would all be used in one way or the other in the final project. The last two weeks however, was where the interesting stuff started happening, as we finally got to know the final objectives: Create a game based on &#8220;ReflexBall&#8221; (which is basically ArkaNoid, without any objects to hit), and develop it into either (you guessed it) ArkaNoid, or something else entirely &#8211; pretty much freely chosen, but it had to satisfy certain criteria.</p>
<p>For the fun of it, we chose the latter, and got the idea for a &#8211; potenially &#8211; pretty fun idea: Gwardar. Naturally, that name doesn&#8217;t say much, but it should help a lot when looking at what a gwardar actually is: <a href="http://www.avru.org/general/general_gwardar.html">a snake</a>. So, our idea was a hybrid game of ReflexBall with Snake elements, which ended up being quite fun, and the actual game was &#8211; in fact &#8211; pretty fun as well.</p>
<p>I mainly worked on the gamefield &#8211; where the snake bounces around, collision detection &#8211; which was a much more essential part than for an ArkaNoid-game, as the ball/snake shouldn&#8217;t be able to hit itself, and react differently when hitting different things, and the ball/snake itself &#8211; which made sense to do together with collision, as that should be based upon where the ball was. </p>
<p>The first had some interesting challenges, as we only had a practical resolution of 63 x 21 &#8220;blocks&#8221; (columns and rows in the terminal-window, respectfully), and still wanted the ball/snake to be able to move with more than 8 different directions. As thus, we gave each block a 10&#215;10 background, essentially giving us a gamefield of 630 x 210, which gave many more possibilities in terms of directions (<a href="http://gnueless.com/images/screenshot0.png">early screen here, showing it</a>). However, to properly do that, we had to ensure that the ball/snake always moved to a new block, which was done by scaling the directional vector, so that the numerically longest of x or y was <em>exactly</em> 10 (or: 1 block). Any more, or any less, would mean that it could potentially skip, or end up in the same block.</p>
<p>In regards to collision-detection, it was done by first detecting what was on the target block, judged from the directional vector, change it in case the target was a wall or the &#8220;striker&#8221; (the board the player controls), grow in length if objects was eaten, or die, in case it was itself, or the void below the striker. In the case it was hitting something that would change the vector, the new target block was checked, and the ball would only continue moving in the case that there wasn&#8217;t anything there &#8211; or it was an edible object. The tricky part about the collision was detecting when it was hitting itself, and let that be handled properly. To explain that, it&#8217;s probably best to explain the properties of the ball/snake first.</p>
<p>The ball was given a &#8220;history&#8221;, of up to 50 blocks, that kept track of up to the previous 50 positions it had been placed on the detailed gamefield (that is, in the 630 x 210 grid), which initially served as a way to &#8220;erase&#8221; the balls previous position when it was redrawn at a new position, but later &#8211; when the ball turned into a snake &#8211; also a way to show the tail itself, by only erasing the tail length&#8217;th object in its history. In the end, the history was also used to place objects whenever eaten, at the very last position of the history &#8211; which turned out to look like it was random, especially when the tail length was short.</p>
<p>Getting back to the collision, it was obvious that low angles (meaning a directional vector of (10,1), for instance), would most likely cause the ball to &#8220;hit itself&#8221; upon bouncing against a wall, which would make it more or less impossible to ever reach the maximum length, or simply get very far at all. Still, it should naturally be possible to hit the tail, so we decided to simply ignore the first few parts of the history, when checking collision, so that the ball/snake had &#8220;time&#8221; to get free of itself. Hitting directly into a corner, would however still result death, as the overlap would be too great.</p>
<p>The other collision-based problem that surfaced was when &#8220;crossing itself&#8221;. A problem we never actually experienced exactly, but would look incredibly awkward if it did. Basically, it could happen as it would never <em>actually</em> hit itself, but on both sides, on points where both the &#8220;rough&#8221; x and y coordinates had changed (that is, on the 63 x 21 grid). Basically, it was done so that every time a situation like that happened, the collision-detection would check if both the coordinates (current_x, target_y) <em>and</em> (target_x, current_y) was in the ball&#8217;s history. In that case, it would have struck itself.</p>
<p>Now, going away from all the technical matter, the game proved to be very fun to play as well. The idea has been tried before, and there are quite many possible ways of <a href="http://dsiware.nintendolife.com/reviews/2010/02/snakenoid_dsiware">combining the two basic games</a>. In my personal opinion, ours was a success &#8211; but that&#8217;s always easy to say as one of the developers.</p>
<p>As a last word, here&#8217;s another <a href="http://gnueless.com/images/screenshot1.png">screenshot</a>, which should catch the idea pretty well. Try to imagine it with the tail being up to 50 &#8220;blocks&#8221; long.</p>
]]></content:encoded>
			<wfw:commentRss>http://gnueless.com/2010/06/gwardar.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ding!</title>
		<link>http://gnueless.com/2010/06/ding-3.html</link>
		<comments>http://gnueless.com/2010/06/ding-3.html#comments</comments>
		<pubDate>Sun, 13 Jun 2010 22:00:52 +0000</pubDate>
		<dc:creator>gnub</dc:creator>
				<category><![CDATA[me]]></category>
		<category><![CDATA[offline]]></category>

		<guid isPermaLink="false">http://gnueless.com/?p=623</guid>
		<description><![CDATA[I&#8217;m now&#8230; 1/4 of a century old. Scary, in a way really, but it is just a number after all.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m now&#8230; 1/4 of a century old. Scary, in a way really, but it is just a number after all.</p>
]]></content:encoded>
			<wfw:commentRss>http://gnueless.com/2010/06/ding-3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>gnueless</title>
		<link>http://gnueless.com/2010/05/gnueless.html</link>
		<comments>http://gnueless.com/2010/05/gnueless.html#comments</comments>
		<pubDate>Mon, 03 May 2010 14:17:29 +0000</pubDate>
		<dc:creator>gnub</dc:creator>
				<category><![CDATA[gnu]]></category>
		<category><![CDATA[offline]]></category>
		<category><![CDATA[random]]></category>

		<guid isPermaLink="false">http://gnueless.com/?p=609</guid>
		<description><![CDATA[Funnily enough, the title of this post is not only incredibly fitting, but also the first time ever I&#8217;ve used the site&#8217;s name in a semi-serious context. Actually, it won&#8217;t be that serious at all, but perhaps a bit sad, if anything. No, I&#8217;m not shutting down the site &#8211; it&#8217;s not that fatal. Yesterday, [...]]]></description>
			<content:encoded><![CDATA[<p>Funnily enough, the title of this post is not only incredibly fitting, but also the first time ever I&#8217;ve used the site&#8217;s name in a semi-serious context. Actually, it won&#8217;t be that serious at all, but perhaps a bit sad, if anything. No, I&#8217;m not shutting down the site &#8211; it&#8217;s not that fatal.</p>
<p>Yesterday, I was in the Zoo with my girlfriend, which is around 5 minutes on bike, from where I live. Good stuff. Naturally, I was looking forward to seeing my gnu-brothers, especially now that I live so close to them, and got myself a seasonal card. However, it turned out that the trip ended in sadness. Upon entering the Zoo, we noticed that the dear wildebeests wasn&#8217;t on the overview map, but discarded the thought, as not every animal was on there anyway. Sadly, the fear was confirmed &#8211; there wasn&#8217;t any wildebeests to be found, and they weren&#8217;t hiding.</p>
<p>So, in my disappointment, I wrote a mail to the Zoo later in the evening. I figured it might be good to keep it in a natural tone, as the @gnueless.com-part might give the false illusion that I was trolling. I translated it to English for your reading pleasure:</p>
<blockquote><p>Hi Zoo,</p>
<p>I had a trip to the Zoo yesterday, and was as always looking forward to seeing the wildebeests again. Sadly, it looked like they&#8217;d been removed, and isn&#8217;t anywhere to be found in the park anymore. What&#8217;s the reason for that, and is it temporary or permanent?</p>
<p>Kind regards,<br />
Emil Erik Hansen</p></blockquote>
<p>This morning, I got a reply back, which itself it somehow a miracle, but I was somehow shocked at the contains of it. Again, translated to English.</p>
<blockquote><p>There was sadly a bit too much trouble with the wildebeests &#8211; so Zoo have been forced to sending them away &#8211; they&#8217;re at the Palmur Zoo in France.</p>
<p>The thought is to get water bucks instead &#8211; they are a little delayed and probably won&#8217;t be here until the fall.</p>
<p>Kindly,<br />
[name]</p></blockquote>
<p>Disregarding the fact that nothing can ever replace wildebeests, it seems like they were causing trouble. There&#8217;s no real details as to why, but my immediate thought was that they got into one little fight, and their handlers got scared, and said <a href="http://www.youtube.com/watch?v=hBe0VCso0qs">&#8220;You&#8217;re moving in with your auntie and uncle and in Palmur&#8221;</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://gnueless.com/2010/05/gnueless.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>nine minutes</title>
		<link>http://gnueless.com/2010/04/nine-minutes.html</link>
		<comments>http://gnueless.com/2010/04/nine-minutes.html#comments</comments>
		<pubDate>Thu, 29 Apr 2010 14:14:17 +0000</pubDate>
		<dc:creator>gnub</dc:creator>
				<category><![CDATA[offline]]></category>
		<category><![CDATA[random]]></category>

		<guid isPermaLink="false">http://gnueless.com/?p=606</guid>
		<description><![CDATA[The time it took me to: Walk past a kebab-shack (I wonder what the correct expression for such is anyway), realize I could really use one, but thinking it was probably better to wait till I was home 15 minutes later, and get some proper lunch. Going up the stairs to the train, spotting that [...]]]></description>
			<content:encoded><![CDATA[<p>The time it took me to:</p>
<ul>
<li>Walk past a kebab-shack (I wonder what the correct expression for such is anyway), realize I could really use one, but thinking it was probably better to wait till I was home 15 minutes later, and get some proper lunch.</li>
<li>Going up the stairs to the train, spotting that the train wasn&#8217;t there until 9 minutes later.</li>
<li>Going back down, figuring I might just spend those 9 minutes getting a kebab.</li>
<li>Buying and eating said kebab.</li>
<li>Internally discussing with myself if I should tweet or blog this, and ending up with the latter, as there would be no way I&#8217;d fit it into 140 characters, and I didn&#8217;t want to do a 5/5 tweet. </li>
<li>Realize that I&#8217;d would be the first time in ages that I&#8217;d have done 2 blog-posts in one day.</li>
<li>Further realize that my problems probably weren&#8217;t that bad after all.</li>
</ul>
<p>And yes, these were actual minutes, not <a href="http://gnueless.com/2008/12/copenhagen-minute.html">Copenhagen</a> ones.</p>
]]></content:encoded>
			<wfw:commentRss>http://gnueless.com/2010/04/nine-minutes.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
