<?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>GBGames - Thoughts on Indie Game Development &#187; Linux Game Development</title>
	<atom:link href="http://gbgames.com/blog/category/linux-game-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://gbgames.com/blog</link>
	<description>An Indie Game Developer's somewhat interesting thoughts</description>
	<lastBuildDate>Mon, 21 May 2012 10:30:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Linux Game Publishing CEO Steps Down</title>
		<link>http://gbgames.com/blog/2012/02/linux-game-publishing-ceo-steps-down/</link>
		<comments>http://gbgames.com/blog/2012/02/linux-game-publishing-ceo-steps-down/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 10:30:39 +0000</pubDate>
		<dc:creator>GBGames</dc:creator>
				<category><![CDATA[Linux Game Development]]></category>
		<category><![CDATA[Marketing/Business]]></category>

		<guid isPermaLink="false">http://gbgames.com/blog/?p=1844</guid>
		<description><![CDATA[<p>Yesterday, I woke up to an email saying that Michael Simms is stepping down after 10 years of running Linux Game Publishing and Tux Games.</p> <p>Wow, 10 years! That&#8217;s a lot of enthusiasm and work, and unfortunately it takes its toll:</p> <p>It took me some months to notice what was going on, and even longer <span style="color:#777"> . . . &#8594; Read More: <a href="http://gbgames.com/blog/2012/02/linux-game-publishing-ceo-steps-down/">Linux Game Publishing CEO Steps Down</a></span><p><a href="http://gbgames.com/blog/2012/02/linux-game-publishing-ceo-steps-down/">Linux Game Publishing CEO Steps Down</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Yesterday, I woke up to an email saying that <a href="http://blog.linuxgamepublishing.com/2012/01/31/lgp-history-pt-4-the-end-of-the-ride-but-not-the-end-of-the-company/">Michael Simms is stepping down after 10 years of running Linux Game Publishing and Tux Games</a>.</p>
<p>Wow, 10 years! That&#8217;s a lot of enthusiasm and work, and unfortunately it takes its toll:</p>
<blockquote><p>It took me some months to notice what was going on, and even longer to accept that my burnout was going to kill LGP unless I did something about it. The lack of drive slowed down production of new titles, shipping, customer service, everything that I either handled or had a big part in helping with, was all being compromised.</p>
<p>&#8230;</p>
<p>But I didn’t want to let the company die. Of course not, I have invested too much time, money, blood sweat and tears into LGP to just say ‘That is it, bye’. And so I sat down and had a long think about how to save it. </p></blockquote>
<p>Clive Crous will take the reins at LGP and Tux Games. Good luck, Clive, and good luck with your future endeavors, Michael!</p>
<p><a href="http://gbgames.com/blog/2012/02/linux-game-publishing-ceo-steps-down/">Linux Game Publishing CEO Steps Down</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gbgames.com/blog/2012/02/linux-game-publishing-ceo-steps-down/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why It Is Important to Document Even the Smallest Decisions</title>
		<link>http://gbgames.com/blog/2011/11/why-it-is-important-to-document-even-the-smallest-decisions/</link>
		<comments>http://gbgames.com/blog/2011/11/why-it-is-important-to-document-even-the-smallest-decisions/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 21:07:20 +0000</pubDate>
		<dc:creator>GBGames</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Geek / Technical]]></category>
		<category><![CDATA[Linux Game Development]]></category>
		<category><![CDATA[Personal Development]]></category>

		<guid isPermaLink="false">http://gbgames.com/blog/?p=1757</guid>
		<description><![CDATA[<p>A week or so ago, I was configuring the hero summoning queue for my villages in &#8220;Stop That Hero!&#8221; (still available for pre-order!), and I couldn&#8217;t figure out why I had a special &#8220;END_QUEUE&#8221; for the last item in my queues. None of my code handled it, so it got ignored, and removing it didn&#8217;t <span style="color:#777"> . . . &#8594; Read More: <a href="http://gbgames.com/blog/2011/11/why-it-is-important-to-document-even-the-smallest-decisions/">Why It Is Important to Document Even the Smallest Decisions</a></span><p><a href="http://gbgames.com/blog/2011/11/why-it-is-important-to-document-even-the-smallest-decisions/">Why It Is Important to Document Even the Smallest Decisions</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></description>
			<content:encoded><![CDATA[<p>A week or so ago, I was configuring the hero summoning queue for my villages in <a href="http://www.StopThatHero.com/">&#8220;Stop That Hero!&#8221; (still available for pre-order!)</a>, and I couldn&#8217;t figure out why I had a special &#8220;END_QUEUE&#8221; for the last item in my queues. None of my code handled it, so it got ignored, and removing it didn&#8217;t change anything adversely that I could see, so I removed it since I couldn&#8217;t remember why I put it there in the first place.</p>
<p>Today, while working on a new level layout, I created a village that summoned only one farmer. When play-testing, I found that right when the farmer appears, the game ends in victory for the player.</p>
<p><a href="http://www.flickr.com/photos/29086141@N03/6391343759/" title="Premature Victory by gbgames, on Flickr"><img src="http://farm7.staticflickr.com/6058/6391343759_bb5a4cabd4_m.jpg" width="240" height="180" alt="Premature Victory"/></a></p>
<p>That&#8217;s odd&#8230;why would that happen?</p>
<p>My victory monitoring code checks all entities to see if there are any that are not on the player&#8217;s team. If there aren&#8217;t, then it checks all structures that summon entities owned by non-player teams to see if they are currently summoning anything. The idea is that at the beginning of the level, when no heroes have been summoned, the game doesn&#8217;t end in victory since they&#8217;re still coming, and victory only occurs when there are no more heroes being summoned AND there no more heroes left in the level. </p>
<p>The issue I was seeing is that right when a village spawns a farmer, the farmer doesn&#8217;t exist yet. It&#8217;s simply a new command to create a farmer. But the village no longer has a farmer in its queue and is empty. So the victory condition goes off and creates the end-game-in-victory-for-player command. So that&#8217;s why I see the farmer when the victory screen comes up. The farmer gets created and the game ends because both commands are run in the same update step.</p>
<p>And that&#8217;s why I had an &#8220;END_QUEUE&#8221; summon that doesn&#8217;t do anything. It&#8217;s to prevent this situation from happening. Now I remember. I ran into this issue before. The END_QUEUE summon is ignored, but the victory condition monitor sees that there is still something in the queue. By the time the END_QUEUE is &#8220;summoned&#8221; and gone, the entity creation should have happened for the previous item in the queue.</p>
<p>It was a stupid abuse of the system that I should have handled better the first time, but I didn&#8217;t think much of it. I needed to get things done, so I did the quick solution and promptly forgot about it.</p>
<p>Since I didn&#8217;t document what &#8220;END_QUEUE&#8221; was supposed to do when I came up with it, I spent part of my day trying to figure it out. </p>
<p>So there you go. Document your decisions, no matter how small. In fact, maybe the small decisions are even more important to document than the bigger ones.</p>
<p><a href="http://gbgames.com/blog/2011/11/why-it-is-important-to-document-even-the-smallest-decisions/">Why It Is Important to Document Even the Smallest Decisions</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gbgames.com/blog/2011/11/why-it-is-important-to-document-even-the-smallest-decisions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stop That Hero! Development Summary</title>
		<link>http://gbgames.com/blog/2011/09/stop-that-hero-development-summary/</link>
		<comments>http://gbgames.com/blog/2011/09/stop-that-hero-development-summary/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 10:30:56 +0000</pubDate>
		<dc:creator>GBGames</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Geek / Technical]]></category>
		<category><![CDATA[Linux Game Development]]></category>

		<guid isPermaLink="false">http://gbgames.com/blog/?p=1737</guid>
		<description><![CDATA[<p>The last time I wrote about Stop That Hero! development was in July. Here&#8217;s a quick summary of the work I&#8217;ve done since then:</p> <p>Fixed memory bugs</p> <p>I fixed a number of issues in July, specifically with weird corruption issues that seemed to result from the use of std::vector&#60;bool&#62; which is apparently not a real <span style="color:#777"> . . . &#8594; Read More: <a href="http://gbgames.com/blog/2011/09/stop-that-hero-development-summary/">Stop That Hero! Development Summary</a></span><p><a href="http://gbgames.com/blog/2011/09/stop-that-hero-development-summary/">Stop That Hero! Development Summary</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></description>
			<content:encoded><![CDATA[<p>The last time I wrote about <a href="http://www.StopThatHero.com/">Stop That Hero!</a> development was in July. Here&#8217;s a quick summary of the work I&#8217;ve done since then:</p>
<p><strong>Fixed memory bugs</strong></p>
<p>I fixed a number of issues in July, specifically with weird corruption issues that seemed to result from the use of std::vector&lt;bool&gt; which is apparently not a real vector of boolean values. I was easily able to discover where memory leaks were occurring with Valgrind.</p>
<p>Recently, I ran into a bizarre unit test failure when adding code to a module that had nothing to do with the unit test, and I discovered that I had introduced a bunch of memory leaks that were finally manifesting in such issues. It wasn&#8217;t hard to fix since I once again was able to use Valgrind, but it was tedious work. A lot of it was fixing dumb mistakes, too. I have no idea why I thought I could get away with the code I wrote when I wrote it.</p>
<p>Unless there are corruption problems, memory bugs are not usually a big deal during development. Still, it would be nice if I used tools that made it easier to avoid the problems in the first place. I use UnitTest++, but these memory leak issues would have been caught had I used a tool such as CPPUTest which fails tests if memory leaks.</p>
<p><strong>Added more minions, entities, and projectiles</strong></p>
<p>Once I made combat revolve around projectiles, I added fireball-launching dragons and warlocks. Warlocks will eventually have a magic spell they cast, but they launch fireballs because that was the only projectile I had at the time. </p>
<p>Recently, I added new heroes. Archers shoot arrows, and wizards cast lightning bolts. I eventually want to add villagers and knights and get rid of the generic Hero character.</p>
<p><a href="http://www.flickr.com/photos/29086141@N03/6186306849/" title="More Heroes Added by gbgames, on Flickr"><img src="http://farm7.static.flickr.com/6180/6186306849_1be60e5a25_m.jpg" width="240" height="180" alt="More Heroes Added"/></a></p>
<p><strong>Optimized rendering</strong></p>
<p>I&#8217;ve had the same update/rendering code for a long time, and on a whim, I added some logging to my game to find out why I wasn&#8217;t able to get 60 FPS even though I didn&#8217;t think I was doing much. </p>
<p>It turned out, I wasn&#8217;t doing much. All of my code ran within a millisecond, but the actual SDL call that blits to the window took between 30-50 ms to run!  The good news is that my own code isn&#8217;t slowing me down, but mathematically it&#8217;s impossible that SDL MUST render this slow since so many other SDL games run much faster. So I looked to find out what other people did to make it work.</p>
<p>Here&#8217;s the code I was using to set the video mode:<br />
<code>m_screen = sdlInstance->SDL_SetVideoMode(m_x, m_y, m_bitDepth, SDL_DOUBLEBUF);</code></p>
<p>And here&#8217;s a much faster version based on a thead at <a href="http://www.ubuntuforums.org/">Ubuntu Forums</a> that I apparently did not bookmark:<br />
<code>m_screen = sdlInstance->SDL_SetVideoMode(m_x, m_y, m_bitDepth, SDL_SWSURFACE | SDL_ASYNCBLIT | SDL_DOUBLEBUF | SDL_ANYFORMAT | SDL_SRCALPHA);</code></p>
<p>So I went from 30-50 ms to 8 ms. The game runs so much more smoothly now, and it didn&#8217;t take a lot of work at all.</p>
<p><strong>Switched away from pie menu</strong></p>
<p>Pie menus are great for usability, but only if you can guarantee that the menu can be displayed in its entirety around the mouse cursor. Since one goal with &#8220;Stop That Hero!&#8221; was to make the interface as simple as possible, I didn&#8217;t want a scrolling world. The entire world fits on the screen at once. To use pie menus, I&#8217;d have to reduce the world size to provide a border all so that buttons could fit on the screen if a tower was selected near the edges. </p>
<p>So I removed the pie menu and went back to a traditional UI at the top of the screen. </p>
<p><strong>Added resources and minion costs</strong></p>
<p>Before, I was adding minions to the game whenever I wanted. Now there are resource costs, and it takes time to summon a minion from a tower. The player starts with a base set of resources, and the current system adds 1 resource every second. It&#8217;s simple, and it works. I can experiment with resource mechanics, such as adding rewards for killing heroes or if certain minions collect items and bring them back to the player&#8217;s castle, but the basic system is in place. </p>
<p><strong>Made object creation more generic/data driven</strong></p>
<p>I initially tried to make the game as quickly as possible, so instead of trying to genericize object creation, I created a bunch of separate commands: CreateHeroCommand, CreateDragonCommand, CreateOrcCommand, etc.</p>
<p>While it worked, it was also very limiting. Each time I added a new type of entity or in-game object, I had to create a new command. Maybe that&#8217;s fine if I know what entities and objects I want to create up front, but it limits the design. Maybe I want to make weak squires, regular soldiers, and strong knights as variations on each other. The effort to write the code for the separate creation commands would be tedious and slow. </p>
<p>So I replaced all of those CreateXYZCommands with CreateObjectFromTemplate. Instead of having coded commands to create an orc, I create a template called Orc, which defines components and data that an orc would have. CreateObjectFromTemplate(&#8220;Orc&#8221;) then creates the components with the correct data, and an orc appears in the game world. </p>
<p>Templates can be created and changed much more easily than hardcoded commands, which means adding and tweaking minions, heroes, and other in-game objects is easier, which means game design and balancing is easier. It also allows me to data-drive the game a lot more, which means more interesting entities and game situations. </p>
<p><strong>Added timer-based summoning queues</strong></p>
<p>Both heroes and minions take time to appear. Minions are summoned and there is a summoning bar that lets you know how finished the current summon is. By using the same summoning queue code, I now have a Village which pops out heroes over time. </p>
<p>Timers seemed like a special case of general triggers. It would be nice to have dwarves pop out of caves if any entities come near or have other similar scripting in the game, but my initial attempt at general triggers might have been trying to do too much. Maybe for another game. </p>
<p><strong>What&#8217;s Next?</strong></p>
<p>The game is still silent, so eventually I would like to add some sound effects and music. Animations and special effects would really punch up the visuals, which need a consistent art direction. It&#8217;s all functional programmer art and will get replaced. </p>
<p>But the biggest thing left to do is improve the AI. Dragons can attack from distance, yet they still try to run up to the heroes the way melee fighters do. Also, entities tend to bunch up. 10 orcs attacking a hero tend to look like a single orc attacking the hero, and it is hard to see what&#8217;s happening. </p>
<p>My initial attempt at solving these problems resulted in unacceptable slowness last week, but I&#8217;ve identified what&#8217;s going on and think I have a fix for it. </p>
<p>But hey, this is AI work. I already know I can&#8217;t expect that I&#8217;ll figure it out in a matter of hours or days. There&#8217;s going to be a lot of changes, tweaks, and fixes until it looks right. </p>
<p>And besides game development work, there&#8217;s the work of marketing and selling the game. There&#8217;s a <a href="http://www.facebook.com/StopThatHero">&#8220;Stop That Hero!&#8221; Facebook page</a>, and I just sent out a newsletter to my list announcing the upcoming release. I&#8217;m hoping to get a pre-alpha release out soon.</p>
<p><a href="http://gbgames.com/blog/2011/09/stop-that-hero-development-summary/">Stop That Hero! Development Summary</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gbgames.com/blog/2011/09/stop-that-hero-development-summary/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Stop That Hero! Dev Video: Slimes Throw Chests??</title>
		<link>http://gbgames.com/blog/2011/06/stop-that-hero-dev-video-slimes-throw-chests/</link>
		<comments>http://gbgames.com/blog/2011/06/stop-that-hero-dev-video-slimes-throw-chests/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 21:24:31 +0000</pubDate>
		<dc:creator>GBGames</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Geek / Technical]]></category>
		<category><![CDATA[Linux Game Development]]></category>

		<guid isPermaLink="false">http://gbgames.com/blog/?p=1690</guid>
		<description><![CDATA[<p>It&#8217;s really exciting when I add a feature to Stop That Hero! that I can actually show to someone, and in the last week or so, I&#8217;ve added two.</p> <p>First, slime monsters now leave behind a slime trail. If the Hero steps in the slime trail, he is slowed down temporarily. The slime trail and <span style="color:#777"> . . . &#8594; Read More: <a href="http://gbgames.com/blog/2011/06/stop-that-hero-dev-video-slimes-throw-chests/">Stop That Hero! Dev Video: Slimes Throw Chests??</a></span><p><a href="http://gbgames.com/blog/2011/06/stop-that-hero-dev-video-slimes-throw-chests/">Stop That Hero! Dev Video: Slimes Throw Chests??</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s really exciting when I add a feature to <i>Stop That Hero!</i> that I can actually show to someone, and in the last week or so, I&#8217;ve added two.</p>
<p>First, slime monsters now leave behind a slime trail. If the Hero steps in the slime trail, he is slowed down temporarily. The slime trail and the slow effect both wear off eventually.</p>
<p>Second, to actually take advantage of the slime trail&#8217;s slowing effect, I added projectile weapons. The idea is that the player will strategically send out slimes ahead of stone-throwing orcs or fireball-launching dragons. Their weapons should be more effective against a slowed Hero since they have more time to attack more often. </p>
<p>Once I changed attacks in the combat system to be projectiles, a quick test was to take an existing entity in the game and change its weapon configuration. Since I only had Heroes and slimes, I gave slimes the ability to throw a projectile at the Hero. Instead of attacking from one tile away, they can now attack from 10 tiles away. And to give the projectile an image, I used an existing sprite rather than spend time making something that looks good. </p>
<p>So for this test, it is the Hero versus treasure chest-throwing slimes!</p>
<p>The development video below is a demonstration of the results. Please excuse the lame art. I&#8217;m focusing more on the game mechanics/dynamics and less on the aesthetics for now. </p>
<p><iframe width="425" height="349" src="http://www.youtube.com/embed/YwPDm0cr4PA" frameborder="0" allowfullscreen></iframe></p>
<p>I&#8217;m pleased to say that it only takes a handful of slimes to defeat the Hero instead of requiring a small army. While it means that my test worked as expected, it also means I&#8217;ll need to make some of the Heroes more powerful once I create some orcs or dragons, who should be stronger than the slimes.</p>
<p><a href="http://gbgames.com/blog/2011/06/stop-that-hero-dev-video-slimes-throw-chests/">Stop That Hero! Dev Video: Slimes Throw Chests??</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gbgames.com/blog/2011/06/stop-that-hero-dev-video-slimes-throw-chests/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Continuing Development on Stop That Hero!</title>
		<link>http://gbgames.com/blog/2011/05/continuing-development-on-stop-that-hero/</link>
		<comments>http://gbgames.com/blog/2011/05/continuing-development-on-stop-that-hero/#comments</comments>
		<pubDate>Mon, 09 May 2011 10:30:22 +0000</pubDate>
		<dc:creator>GBGames</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Geek / Technical]]></category>
		<category><![CDATA[Linux Game Development]]></category>

		<guid isPermaLink="false">http://gbgames.com/blog/?p=1676</guid>
		<description><![CDATA[<p>After returning from Europe, I spent over a week dealing with being sick. Even though I couldn&#8217;t get back to work right away, I was able to read through all of the advice I received on my post on the importance of speed, and I really appreciate all of the feedback. Thanks, everyone!</p> <p>In that <span style="color:#777"> . . . &#8594; Read More: <a href="http://gbgames.com/blog/2011/05/continuing-development-on-stop-that-hero/">Continuing Development on Stop That Hero!</a></span><p><a href="http://gbgames.com/blog/2011/05/continuing-development-on-stop-that-hero/">Continuing Development on Stop That Hero!</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></description>
			<content:encoded><![CDATA[<p>After returning from Europe, I spent over a week dealing with being sick. Even though I couldn&#8217;t get back to work right away, I was able to read through all of the advice I received on my post on <a href="http://gbgames.com/blog/2011/03/the-importance-of-speed/">the importance of speed</a>, and I really appreciate all of the feedback. Thanks, everyone!</p>
<p>In that post, I expressed frustration with how slow my game development has been, especially with <i>Stop That Hero!</i>. I wondered if the project was too much for me at my current skill level, and if I needed to step back and try lifting lighter weights, so to speak. I know some game developers leverage a library of personal code that they have written and updated over the course of years. Others leverage existing engines.</p>
<p>While I have some boilerplate code, it&#8217;s not nearly as comprehensive as I would like it to be, and the stuff I do have isn&#8217;t always as easy to work with as it should.  As I said in that post, 2D engines for GNU/Linux, my development platform, by and large do not exist, so I find I have to write a lot myself. If I had more to leverage, I&#8217;m sure development of <i>STH!</i> or any other game would be a lot faster since I wouldn&#8217;t have to stop and implement scaffolding technology to support a feature every time. It would already exist. </p>
<p>The advice I received fell into a few camps:</p>
<ol>
<li> Muscle through and get the game finished. Your tech will be ideal and perfect for YOUR needs. </li>
<li> Stop targeting GNU/Linux and desktops in general as platforms, and focus on more &#8220;marketable&#8221; platforms. </li>
<li> Stop working in C++, and use Flash/Unity/higher-level programming language/engine instead. </li>
<li> Break your project down into smaller projects so you can have finished games and build your needed tech. </li>
<li> Stop writing your own tech from scratch, and leverage the hell out of libraries/engines/existing source. </li>
<li> Stop worrying about writing &#8220;good&#8221; code. Hack something together and get it done faster! </li>
</ol>
<p>I didn&#8217;t know whose advice to ignore first! B-) Seriously, though, let me clarify some things about what I&#8217;m trying to do. </p>
<p>First, I am not making games just for GNU/Linux, and I never said I would, yet this seems to be a common assumption about my business plan. I am not locking myself to only one platform. My original plan all along was to release games for GNU/Linux, Windows, and Mac.  It turns out that ports to mobile platforms, which are a huge opportunity these days, would also be fairly easy, so I went from following supposedly dying tech to being relevant again. </p>
<p>Second, I&#8217;m using C++ because it is what I know, and my choice was to make a game or spend time learning a new language to make a game. I chose to go with what I already know, even if it supposedly limits me, because I wanted to start running right away instead of figuring out how to put on my shoes. I can always use the next project to learn a new language if I want to, and switching languages on this project would be way too disruptive and set me back way too much.</p>
<p>Third, because my development platform is GNU/Linux, which makes targeting GNU/Linux dead-simple and a no-brainer, it means that engines like Unity are not options for me. I might be limiting myself in terms of access to premium development tools such as Photoshop and Adobe Flash, but I have been using GNU/Linux exclusively as my main desktop environment for a long time, and I&#8217;m not about to start booting into Windows just because most everyone else does. I&#8217;ve had to find non-proprietary alternatives for a lot of applications and tools, and I&#8217;m doing it for game development as well. </p>
<p>All that said, I think everyone had great advice, whether it was about my tech or my business plan or my development process. Without sales, my savings account is going to get smaller and smaller, and my biggest concern was where I should be focusing my time. </p>
<p>My choices: </p>
<ul>
<li> <strong>I could continue to work on <i>Stop That Hero!</i></strong>. I have been discovering how much more complex it is and how much longer it is going to take to finish it, and there&#8217;s a worry that by the time it is done, I&#8217;ll be out of savings. To make it worse, I&#8217;m very much aware that I can&#8217;t expect sales to take off just because the game is released. Sales is going to to be a lot of work, and I might not make enough to cover my expenses early on, forcing me to spend time and effort making money in other ways, which takes away from my business. And I&#8217;ll admit that I do not know what the reception of this game will be once it hits a real audience, although I do plan to get feedback from play testers once I have something I feel comfortable showing to people, which should help. Still, it might be an unsellable flop that can&#8217;t be salvaged no matter what I do. That&#8217;s a lot of pressure on this one game. </li>
<li> <strong>Put <i>STH!</i> on the backburner and work on something smaller. </strong> My intention was to work on multiple small games over the course of the year. I&#8217;ve since learned more about my capabilities as a game developer and the limitations of my existing tools and tech. Essentially, <i>STH!</i> was not as &#8220;small&#8221; a game as I originally thought.  <i>STH!</i> was meant to be a one-month game project in the first place. Since the schedule has slipped so far, perhaps it is best to cut my losses or at least put the game on hold and work on something I can accomplish in a matter of weeks. I have a couple of Ludum Dare projects that could be candidates for simple games. The diversified portfolio I could create in a matter of months could help reduce risk. If one game doesn&#8217;t do well, I&#8217;d have another one on the way shortly, and cross-selling might help improve sales. On the other hand, what kind of sales can I expect on a bunch of quickly-produced games that must compete with all of the free and low-priced casual games being produced every day, as opposed to focusing my efforts on my current project? Also, I run the risk of having two unfinished projects since it is possible that a lot of the problems I&#8217;ve encountered with <i>STH!</i> could crop up in another project anyway. </li>
</ul>
<p>If finishing <i>STH!</i> would take two years, and my savings will only hold out for three months, I&#8217;d do best by switching to a smaller, faster project in the hopes that I can make at least some income. On the other hand, the race to the bottom in the pricing of games doesn&#8217;t provide me with a lot of encouragement to produce small, disposable games. Perhaps the fact that <i>STH!</i> is a bigger project means that the finished product can be something that a fan base could build around. </p>
<p>Since <i>STH!</i> is not a two year project and I expect to finish it before I have to worry about my savings disappearing, I&#8217;ve decided to continue working on it. My goal is to get it commercially ready to sell in June. </p>
<p>I did not have a playable game to release yet, but I looked at the remaining features to implement and various ideas I wanted to try, and I started pushing a bunch to Version 2.0. I spent a good chunk of the remainder of April in a self-imposed crunch. I ignored my project planning system, ignored writing for the blog (which explains the lack of posts in the previous month before Ludum Dare), and  dedicated as much of my time as I could to making a friends-and-family playable game. </p>
<p>By friends-and-family playable, I mean I wanted to implement enough of <i>Stop That Hero!</i> so that I can hand it to my fiancée or a friend and say, &#8220;Here, play it with the understanding that this is an early Alpha version. The graphics suck, there&#8217;s no sound, and the game play is raw.&#8221; </p>
<p>While that Alpha build isn&#8217;t ready yet, I will say that April has been a very productive month, especially considering that I was only able to do all of the work in the final couple of weeks. And since recovering from Ludum Dare #20, I&#8217;ve started off May with some quality development time as well. </p>
<p>I&#8217;m seeing this project through, and I&#8217;m confident <i>Stop That Hero!</i> will be a great game. </p>
<p><a href="http://gbgames.com/blog/2011/05/continuing-development-on-stop-that-hero/">Continuing Development on Stop That Hero!</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gbgames.com/blog/2011/05/continuing-development-on-stop-that-hero/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>LD20: Hot Potato Windows Port Now Available!</title>
		<link>http://gbgames.com/blog/2011/05/ld20-hot-potato-windows-port-now-available/</link>
		<comments>http://gbgames.com/blog/2011/05/ld20-hot-potato-windows-port-now-available/#comments</comments>
		<pubDate>Wed, 04 May 2011 20:26:30 +0000</pubDate>
		<dc:creator>GBGames</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Geek / Technical]]></category>
		<category><![CDATA[Linux Game Development]]></category>
		<category><![CDATA[Personal Development]]></category>

		<guid isPermaLink="false">http://gbgames.com/blog/?p=1671</guid>
		<description><![CDATA[<p>I updated my final Ludum Dare #20 Jam entry to include a link to the Windows port of Hot Potato. Whew! Now I can get back to working on Stop That Hero!. B-)</p> <p>LD20: Hot Potato Windows Port Now Available! is a post from: GBGames - Thoughts on Indie Game Development</p> <p><a href="http://gbgames.com/blog/2011/05/ld20-hot-potato-windows-port-now-available/">LD20: Hot Potato Windows Port Now Available!</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></description>
			<content:encoded><![CDATA[<p>I updated my <a href="http://www.ludumdare.com/compo/ludum-dare-20/?action=preview&#038;uid=251">final Ludum Dare #20 Jam entry</a> to include a link to the Windows port of <i>Hot Potato</i>. Whew! Now I can get back to working on <i>Stop That Hero!</i>.  B-)</p>
<p><a href="http://gbgames.com/blog/2011/05/ld20-hot-potato-windows-port-now-available/">LD20: Hot Potato Windows Port Now Available!</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gbgames.com/blog/2011/05/ld20-hot-potato-windows-port-now-available/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>LD20: Hot Potato Development Time Lapse</title>
		<link>http://gbgames.com/blog/2011/05/ld20-hot-potato-development-time-lapse/</link>
		<comments>http://gbgames.com/blog/2011/05/ld20-hot-potato-development-time-lapse/#comments</comments>
		<pubDate>Tue, 03 May 2011 02:55:35 +0000</pubDate>
		<dc:creator>GBGames</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Geek / Technical]]></category>
		<category><![CDATA[Linux Game Development]]></category>
		<category><![CDATA[Personal Development]]></category>

		<guid isPermaLink="false">http://gbgames.com/blog/?p=1669</guid>
		<description><![CDATA[<p>Here&#8217;s a video of my desktop through almost 72 hours of development of Hot Potato compressed into less than 2.5 minutes:</p> <p></p> <p>LD20: Hot Potato Development Time Lapse is a post from: GBGames - Thoughts on Indie Game Development</p> <p><a href="http://gbgames.com/blog/2011/05/ld20-hot-potato-development-time-lapse/">LD20: Hot Potato Development Time Lapse</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a video of my desktop through almost 72 hours of development of Hot Potato compressed into less than 2.5 minutes:</p>
<p><iframe width="425" height="349" src="http://www.youtube.com/embed/REEjow3U6sM" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://gbgames.com/blog/2011/05/ld20-hot-potato-development-time-lapse/">LD20: Hot Potato Development Time Lapse</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gbgames.com/blog/2011/05/ld20-hot-potato-development-time-lapse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LD20: Hot Potato is Finished</title>
		<link>http://gbgames.com/blog/2011/05/ld20-hot-potato-is-finished/</link>
		<comments>http://gbgames.com/blog/2011/05/ld20-hot-potato-is-finished/#comments</comments>
		<pubDate>Tue, 03 May 2011 02:01:36 +0000</pubDate>
		<dc:creator>GBGames</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Geek / Technical]]></category>
		<category><![CDATA[Linux Game Development]]></category>
		<category><![CDATA[Personal Development]]></category>

		<guid isPermaLink="false">http://gbgames.com/blog/?p=1667</guid>
		<description><![CDATA[<p>It&#8217;s complete. I&#8217;m not satisfied with the balance or the feel, but Hot Potato is finished and submitted.</p> <p></p> <p>Oh. I should rebuild it on my Debian system since other people tend to have problems playing my game when I build a project on my Ubuntu system I might make a Windows port soon, but <span style="color:#777"> . . . &#8594; Read More: <a href="http://gbgames.com/blog/2011/05/ld20-hot-potato-is-finished/">LD20: Hot Potato is Finished</a></span><p><a href="http://gbgames.com/blog/2011/05/ld20-hot-potato-is-finished/">LD20: Hot Potato is Finished</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s complete. I&#8217;m not satisfied with the balance or the feel, but <i>Hot Potato</i> is finished and submitted.</p>
<p><a href="http://www.flickr.com/photos/29086141@N03/5682406570/" title="Screenshot - Final with pedestrians by gbgames, on Flickr"><img src="http://farm6.static.flickr.com/5187/5682406570_26daf503a9.jpg" width="500" height="375" alt="Screenshot - Final with pedestrians"/></a></p>
<p><s>Oh. I should rebuild it on my Debian system since other people tend to have problems playing my game when I build a project on my Ubuntu system I might make a Windows port soon, but after 72 hours, I&#8217;m beat. I&#8217;ll update this post when I get those two things done. </s></p>
<p>Updated! I created the Windows port, and I rebuilt the game on my Debian system so that a wider variety of Linux-based systems should just work out of the box.</p>
<p>You can download it for:<br />
- <a href="http://dl.dropbox.com/u/9489022/gbgames-ld20-0.1.1-Linux.tar.gz"> GNU/Linux</a> (1.6MB tar.gz)<br />
- <a href="http://dl.dropbox.com/u/9489022/gbgames-ld20-Windows.zip">Windows </a> (3.12MB .zip)</p>
<p><a href="http://gbgames.com/blog/2011/05/ld20-hot-potato-is-finished/">LD20: Hot Potato is Finished</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gbgames.com/blog/2011/05/ld20-hot-potato-is-finished/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>LD20: Passing Through Chains of Entities Works Now</title>
		<link>http://gbgames.com/blog/2011/05/ld20-passing-through-chains-of-entities-works-now/</link>
		<comments>http://gbgames.com/blog/2011/05/ld20-passing-through-chains-of-entities-works-now/#comments</comments>
		<pubDate>Mon, 02 May 2011 21:07:38 +0000</pubDate>
		<dc:creator>GBGames</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Geek / Technical]]></category>
		<category><![CDATA[Linux Game Development]]></category>
		<category><![CDATA[Personal Development]]></category>

		<guid isPermaLink="false">http://gbgames.com/blog/?p=1665</guid>
		<description><![CDATA[<p>Even without Pedestrians, I might have implemented one of the items on the list since I wanted to change the behavior of package passing.</p> <p>Now when a package is being shoved down a chain, the last courier in the chain receives the package. Technically, the only entities that would break the chain are the VIP <span style="color:#777"> . . . &#8594; Read More: <a href="http://gbgames.com/blog/2011/05/ld20-passing-through-chains-of-entities-works-now/">LD20: Passing Through Chains of Entities Works Now</a></span><p><a href="http://gbgames.com/blog/2011/05/ld20-passing-through-chains-of-entities-works-now/">LD20: Passing Through Chains of Entities Works Now</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Even without Pedestrians, I might have implemented one of the items on the list since I wanted to change the behavior of package passing.</p>
<p>Now when a package is being shoved down a chain, the last courier in the chain receives the package.  Technically, the only entities that would break the chain are the VIP and the Enemy Agents, so it should work once Pedestrians are in. I won&#8217;t scratch it off my list, however, until I code up some Pedestrian entities and test it out. </p>
<p>I&#8217;m getting concerned that my game world is too big. As I playtest, I realize that I&#8217;ve never made it all the way across to the VIP before the agents intercept my couriers, and it&#8217;s kind of tedious to click click click to get there. If Pedestrians make it take even longer to get to the VIP, I might need to shrink the plaza to avoid player tedium and RSI.</p>
<p>What’s left:<br />
<s>- moving the agents towards the package holder</s><br />
<s>- win condition check</s><br />
<s>- lose condition check</s><br />
<s>- allow multiple couriers to move during move phase</s><br />
<s>- shove passes through chain of couriers to last courier instead of next one </s><br />
- shoving package through pedestrians<br />
- adding pedestrians<br />
- moving pedestrians</p>
<p>5 hours left to go. Who wants to go for a stroll through the plaza?</p>
<p><a href="http://gbgames.com/blog/2011/05/ld20-passing-through-chains-of-entities-works-now/">LD20: Passing Through Chains of Entities Works Now</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gbgames.com/blog/2011/05/ld20-passing-through-chains-of-entities-works-now/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LD20: Multiple Couriers Can Move In One Phase</title>
		<link>http://gbgames.com/blog/2011/05/ld20-multiple-couriers-can-move-in-one-phase/</link>
		<comments>http://gbgames.com/blog/2011/05/ld20-multiple-couriers-can-move-in-one-phase/#comments</comments>
		<pubDate>Mon, 02 May 2011 18:30:36 +0000</pubDate>
		<dc:creator>GBGames</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Geek / Technical]]></category>
		<category><![CDATA[Linux Game Development]]></category>
		<category><![CDATA[Personal Development]]></category>

		<guid isPermaLink="false">http://gbgames.com/blog/?p=1663</guid>
		<description><![CDATA[<p>Moving multiple couriers was a little tricky, but it was mainly because I didn&#8217;t realize what exactly I was supposed to be checking in my code.</p> <p>I originally created a mapping of Courier pointers to bool values to represent whether a courier has been moved already. </p> <p>std::map&#60;Courier *, bool&#62; m_couriersHaveMoved;</p> <p>At the beginning of <span style="color:#777"> . . . &#8594; Read More: <a href="http://gbgames.com/blog/2011/05/ld20-multiple-couriers-can-move-in-one-phase/">LD20: Multiple Couriers Can Move In One Phase</a></span><p><a href="http://gbgames.com/blog/2011/05/ld20-multiple-couriers-can-move-in-one-phase/">LD20: Multiple Couriers Can Move In One Phase</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Moving multiple couriers was a little tricky, but it was mainly because I didn&#8217;t realize what exactly I was supposed to be checking in my code.</p>
<p>I originally created a mapping of Courier pointers to bool values to represent whether a courier has been moved already. </p>
<p><code>std::map&lt;Courier *, bool&gt; m_couriersHaveMoved;</code></p>
<p>At the beginning of the Move phase, all of the values are set to false. When you select and move a Courier, its value is changed to true to indicate that it has already been moved. This way, during the Move phase, I can highlight only the active Couriers and prevent inactive Couriers from being clickable. As Couriers are moved, they become inactive and ineligible for later selection during this Move phase, and when it is time to move the Couriers again, they are reset to being active. Great!</p>
<p>The problem came when I tried to abuse those values to check if the move phase was completed.</p>
<p>It made sense at first. The Move phase is over when you have moved all of your Couriers. Checking if the Move phase is over was as simple as checking if any of the existing couriers had an associated false value in m_couriersHaveMoved.</p>
<p>Except there was a problem. If a courier COULD be moved but can&#8217;t due to the fact that all adjacent tiles are occupied, the Move phase would wait for you to click on a Courier, but none are selectable, so you wait forever, or at least until you pause the game and click &#8220;Return to Menu&#8221; to start over or quit in frustration.</p>
<p>So I tried to make sure that blocked couriers were considered finished with their move. Unfortunately, this had the side effect that if a courier is blocked at some point during the Move phase, it can&#8217;t be selected and moved later even if an adjacent tile opens up. Well, that&#8217;s unintuitive for the player! </p>
<p>Eventually I realized that I was trying to use the wrong solution to the problem.  The actual problem I&#8217;m trying to solve is knowing when the Move phase is completed. The solution has nothing to do with whether or not all of the couriers have made their moves. The solution is to check whether or not there are any tiles adjacent to ACTIVE couriers that are empty. </p>
<p>So now I have the ability to move multiple Couriers in the same Move phase, and I solved the new application-hanging problems that cropped up involving the difference between an inactive Courier and an active Courier that just happens to be unable to move at this time. </p>
<p>What’s left:<br />
<s>- moving the agents towards the package holder</s><br />
<s>- win condition check</s><br />
<s>- lose condition check</s><br />
<s>- allow multiple couriers to move during move phase</s><br />
- adding pedestrians<br />
- moving pedestrians<br />
- shoving package through pedestrians</p>
<p>Shoving is broken. It has been broken, but it wasn&#8217;t until I was able to use it more often that I can see what&#8217;s wrong. </p>
<p>Basically, shoving works fine if you shove a single Entity into the next empty square. There&#8217;s a potential bug when you shove entities into other entities. If an entity later down the chain can&#8217;t be shoved, it won&#8217;t be. But the entities earlier in the chain are still shoved, so it looks like one of the entities eats the other. </p>
<p>I need to do a complete chain check first before a shove is allowed. If the check says it is not possible, whether due to the existence of an unshoveable entity or the border of the game world, then no shove happens. If the check says it is possible, then the recursive shoving algorithm can go forward without a hitch. </p>
<p>Also, since shoving is how the package is passed off, I&#8217;d like the package to also shove through to the end of the chain if it is possible. Right now, it only passes to the first entity being shoved. </p>
<p>So with 7.5 hours left to go, I&#8217;m fixing shove mechanics before adding Pedestrians to make the game more interesting. After that, I suppose I would have time for sound effects and polish, but I hope to submit this game to the Jam long before the deadline so I can get back to actual work. Besides, it is Monday, and &#8220;Chuck&#8221; is on tonight.</p>
<p><a href="http://gbgames.com/blog/2011/05/ld20-multiple-couriers-can-move-in-one-phase/">LD20: Multiple Couriers Can Move In One Phase</a> is a post from: <a href="http://gbgames.com/blog">GBGames - Thoughts on Indie Game Development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gbgames.com/blog/2011/05/ld20-multiple-couriers-can-move-in-one-phase/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

