<?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>Game Dev Without a Cause &#187; Game Development</title>
	<atom:link href="https://gamedevwithoutacause.com/?cat=7&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>https://gamedevwithoutacause.com</link>
	<description>Rob&#039;s Thoughts on Games, Game Dev, and Design - Temporary home of Skyboy Games</description>
	<lastBuildDate>Wed, 23 Jul 2014 09:18:52 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>Slay the Beast on YouTube (via @xtomass)</title>
		<link>https://gamedevwithoutacause.com/?p=1998</link>
		<comments>https://gamedevwithoutacause.com/?p=1998#comments</comments>
		<pubDate>Tue, 01 Oct 2013 13:35:51 +0000</pubDate>
		<dc:creator><![CDATA[Rob]]></dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Slay the Beast]]></category>
		<category><![CDATA[XBLIG]]></category>
		<category><![CDATA[XNA]]></category>

		<guid isPermaLink="false">http://gamedevwithoutacause.com/?p=1998</guid>
		<description><![CDATA[Yes, I know I pretty much only talk about Slay the Beast lately on this blog. But hey, I&#8217;ve got stuff to say about it! Anyway, YouTuber and Twitterer (Tweeter?) @xtomass recently uploaded a video of his play-through of version &#8230; <a href="https://gamedevwithoutacause.com/?p=1998">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Yes, I know I pretty much only talk about Slay the Beast lately on this blog. But hey, I&#8217;ve got stuff to say about it!</p>
<p>Anyway, YouTuber and Twitterer (Tweeter?) @xtomass recently uploaded a video of his play-through of  version 0.0.6 of Slay the Beast and I would be remiss not to share it.</p>
<p>So, enjoy!<br />
<iframe width="584" height="438" src="http://www.youtube.com/embed/epfaMvVS1tQ?feature=oembed" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>https://gamedevwithoutacause.com/?feed=rss2&#038;p=1998</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Project, New Screenshot &#8211; Slay the Beast</title>
		<link>https://gamedevwithoutacause.com/?p=1959</link>
		<comments>https://gamedevwithoutacause.com/?p=1959#comments</comments>
		<pubDate>Thu, 29 Aug 2013 03:10:04 +0000</pubDate>
		<dc:creator><![CDATA[Rob]]></dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Slay the Beast]]></category>
		<category><![CDATA[XNA]]></category>

		<guid isPermaLink="false">http://gamedevwithoutacause.com/?p=1959</guid>
		<description><![CDATA[While I may not be updating my blog very often lately, I assure you that I&#8217;ve been staying busy. As proof, here&#8217;s a (very) early work-in-progress screenshot of my current indie game project, Slay the Beast: Slay the Beast is &#8230; <a href="https://gamedevwithoutacause.com/?p=1959">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>While I may not be updating my blog very often lately, I assure you that I&#8217;ve been staying busy.</p>
<p>As proof, here&#8217;s a (very) early work-in-progress screenshot of my current indie game project, Slay the Beast:<br />
<a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/08/BeastSS001.png"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2013/08/BeastSS001-1024x520.png" alt="BeastSS001" width="584" height="296" class="aligncenter size-large wp-image-1961" /></a></p>
<p>Slay the Beast is a versus fighting game where one player controls a huge boss-level monster. While the other player controls a puny (but respawning) hero. The sprites are from <a href="http://oryxdesignlab.com/" target="_blank">Oryx Design Lab</a>&#8216;s Hifi Gothic Set and animation is done with Spine, from <a href="http://esotericsoftware.com/" target="_blank">Esoteric Software</a>.</p>
<p>The game is still at an early stage of development. Heck, I just started this project a few weeks ago! However, I plan on making WIP builds available soon. Stay tuned for more news.<br />
<span id="more-1959"></span><br />
<b>EDIT:</b><br />
Here are some more screenshots for your viewing pleasure:<br />
<a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/08/BeastSS002.png"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2013/08/BeastSS002-1024x576.png" alt="BeastSS002" width="584" height="328" class="aligncenter size-large wp-image-1968" /></a><br />
<a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/08/BeastSS003.png"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2013/08/BeastSS003-1024x576.png" alt="BeastSS003" width="584" height="328" class="aligncenter size-large wp-image-1969" /></a><br />
<a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/08/BeastSS004.png"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2013/08/BeastSS004-1024x576.png" alt="BeastSS004" width="584" height="328" class="aligncenter size-large wp-image-1971" /></a></p>
<p>And one more for people who&#8217;d like to see how characters look in-editor:<br />
<a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/08/BeastTools001.png"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2013/08/BeastTools001-1024x607.png" alt="BeastTools001" width="584" height="346" class="aligncenter size-large wp-image-1973" /></a></p>
]]></content:encoded>
			<wfw:commentRss>https://gamedevwithoutacause.com/?feed=rss2&#038;p=1959</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Burnout, Not Paradise</title>
		<link>https://gamedevwithoutacause.com/?p=1891</link>
		<comments>https://gamedevwithoutacause.com/?p=1891#comments</comments>
		<pubDate>Wed, 20 Mar 2013 13:40:54 +0000</pubDate>
		<dc:creator><![CDATA[Rob]]></dc:creator>
				<category><![CDATA[Game Development]]></category>

		<guid isPermaLink="false">http://gamedevwithoutacause.com/?p=1891</guid>
		<description><![CDATA[So, yeah. The last few months have been pretty darn busy. Hobby-life, work-life, personal-life, everything seemed to peak right about the end of February. I&#8217;ll be honest. I&#8217;m feeling pretty tired. I may even be feeling, dare I say it: &#8230; <a href="https://gamedevwithoutacause.com/?p=1891">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/03/wpid-517078-burnout_2.jpg"><img title="517078-burnout_2.jpg" class="alignnone size-full" alt="image" src="http://gamedevwithoutacause.com/wp-content/uploads/2013/03/wpid-517078-burnout_2.jpg" /></a> </p>
<p>So, yeah.<br />
The last few months have been pretty darn busy.  Hobby-life, work-life, personal-life, everything seemed to peak right about the end of February.  I&#8217;ll be honest.  I&#8217;m feeling pretty tired.  I may even be feeling, dare I say it: burned-out.</p>
<p>Well, not full-on &#8220;burned-out&#8221; I don&#8217;t think.  That&#8217;s actually a pretty <a href="http://en.wikipedia.org/wiki/Burnout_(psychology)" target="_blank">major</a> state of affairs. Still, I&#8217;m starting to notice some warning signs and I&#8217;ve had trouble bringing 100% of my power to bear on any task lately, be it was work or at home.</p>
<p>Now, the advice I&#8217;m about to give is not based on any particular professional expertise.  Indeed, I&#8217;m about as layman as they come.  But, I am someone who has worked himself to the point where I had to take a stress-induced leave from work so I thought I&#8217;d share some of the signs I watch for with regards to my emotional health.</p>
<p><span id="more-1891"></span></p>
<p><strong>Know Your Symptoms, Know Yourself</strong><br />
While there are commonly accepted symptoms of burnout, I find it important to be aware of my personal quirks and behaviors and to specifically recognize certain behaviors as warning signs.</p>
<p>Since a lot of my job is about problem-solving (both after-the-fact and preemptively), I&#8217;m used to having lots of ideas for how I can solve a problem.  When I&#8217;m at my best, I can usually come up with several potential solutions to problems at work after brief reflection.  When I&#8217;m starting to burnout, that flow of ideas slows to a trickle, if not stopping all together.  I don&#8217;t seem to have trouble identifying problems at that stage however. So, if I find myself identifying lots of problems without being able to provide potential solutions along with them, I have a strong sign that I&#8217;m beginning to fray.</p>
<p>Usually, I really like working on games.  I find it energizing.  Sure, there are times when the work is just tiring, but that&#8217;s the exception, not the rule.  And it never happens for extended periods of time.  Unless I&#8217;m starting to burn-out.  If I look back over the last week of game dev and can&#8217;t think of a single instance in which I had fun while working, then I know it&#8217;s time to give myself some extra care.  </p>
<p>One corollary to the above is that, even when I&#8217;m overall exhausted with work, crises are still &#8220;fun&#8221;, or at least temporarily energizing.  Even if work is a slog and I&#8217;m running on emotional fumes, I still find it easy to gear up to deal with a sudden crisis (ex. The publisher&#8217;s build is broken! We need a bugfix quick!) But, that crisis-time energy boost is quick to dissipate and can leave me feeling just as empty, if not more so, afterwards.  I generally don&#8217;t count these crisis moments as being satisfied with work since they are effectively emotional junk-food for me.</p>
<p>On a more physical level, I try to stay aware of signs that my body is reacting to emotional exhaustion.  If I start putting on weight and developing acne, chances are I&#8217;m starting to react negatively to the current stress levels in my life.  Like many, I find that my sleeping habits tend to change once I become overwhelmed.  For me, my warning sign isn&#8217;t sleeplessness. I tend to sleep MORE as I become stressed but I find myself feeling LESS rested in the morning despite the extra time spent in bed.</p>
<p>While all of this may not pertain directly to game development per se, I think it is worthwhile to keep one&#8217;s own emotional and physical well-being in mind while engaging in an activity as engrossing as game development.  People who tend towards game dev are a peculiar breed, we are truly passionate about what we do and we are prone to overdoing it if left unchecked. Being aware of how you personally react to stress and knowing when you&#8217;re getting overwhelmed are your first line of defense against burning out.</p>
]]></content:encoded>
			<wfw:commentRss>https://gamedevwithoutacause.com/?feed=rss2&#038;p=1891</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#OneGameAMonth Update: Itano Alpha Flight</title>
		<link>https://gamedevwithoutacause.com/?p=1876</link>
		<comments>https://gamedevwithoutacause.com/?p=1876#comments</comments>
		<pubDate>Tue, 12 Mar 2013 14:37:57 +0000</pubDate>
		<dc:creator><![CDATA[Rob]]></dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[XNA]]></category>

		<guid isPermaLink="false">http://gamedevwithoutacause.com/?p=1876</guid>
		<description><![CDATA[Okay, okay. I&#8217;m about two weeks late but I finally finished up my February #OneGameAMonth entry. In my defense, I did have a confluence of life and work events knock into my schedule. But, that&#8217;s neither here nor there. I &#8230; <a href="https://gamedevwithoutacause.com/?p=1876">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/03/ItanoTitle.jpg"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2013/03/ItanoTitle-1024x576.jpg" alt="ItanoTitle" width="584" height="328" class="aligncenter size-large wp-image-1878" /></a></p>
<p>Okay, okay.  I&#8217;m about two weeks late but I finally finished up my February <a href="http://www.onegameamonth.com/" target="_blank">#OneGameAMonth</a> entry.  In my defense, I did have a confluence of life and work events knock into my schedule.  But, that&#8217;s neither here nor there.  I said One Game a Month.</p>
<p>As I mentioned <a href="http://gamedevwithoutacause.com/?p=1818" title="#OneGameAMonth Status Report" target="_blank">previously</a>, my goal for February&#8217;s game was to capture some of that <a href="http://tvtropes.org/pmwiki/pmwiki.php/Main/MacrossMissileMassacre" target="_blank">Itano Circus</a> feel.  With that in mind, I even went so far as to name the game &#8220;Itano Alpha Flight&#8221;.  And now the game is available for you to play.<br />
<span id="more-1876"></span></p>
<p>Itano Alpha Flight is an action game written in XNA and running on Windows.  The goal of the game is to destroy enemies in rapid succession with your lock-on missiles while avoiding their projectiles. You can control the game with either the keyboard or with an Xbox Controller.</p>
<p>To play, you just need to <a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/03/ItanoAlphaFlight.zip">download this file</a>, unzip it, and run Itano.exe.<br />
I&#8217;m just one guy, so I can&#8217;t really make an guarantees about the suitability of this game for any purpose but I expect it should run reasonably well on most Windows machines.</p>
<p>You can also see how the game turned out in these screenshots:<br />
<a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/03/ItanoSS1.jpg"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2013/03/ItanoSS1-1024x576.jpg" alt="ItanoSS1" width="584" height="328" class="aligncenter size-large wp-image-1879" /></a></p>
<p><a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/03/ItanoSS2.jpg"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2013/03/ItanoSS2-1024x576.jpg" alt="ItanoSS2" width="584" height="328" class="aligncenter size-large wp-image-1880" /></a></p>
<p>So, if you have a chance, give Itano Alpha Flight <a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/03/ItanoAlphaFlight.zip">a try</a> and let me know what you think.  In the meantime, I&#8217;ll be plugging away on my next project.</p>
]]></content:encoded>
			<wfw:commentRss>https://gamedevwithoutacause.com/?feed=rss2&#038;p=1876</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#OneGameAMonth Status Report</title>
		<link>https://gamedevwithoutacause.com/?p=1818</link>
		<comments>https://gamedevwithoutacause.com/?p=1818#comments</comments>
		<pubDate>Tue, 12 Feb 2013 15:39:48 +0000</pubDate>
		<dc:creator><![CDATA[Rob]]></dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Robot Legions]]></category>
		<category><![CDATA[XBLIG]]></category>

		<guid isPermaLink="false">http://gamedevwithoutacause.com/?p=1818</guid>
		<description><![CDATA[It&#8217;s February and I&#8217;ve been at #OneGameAMonth for about 6 weeks now, so I thought it was about time to comment on how it&#8217;s going. Before that though, a few words about why I&#8217;m doing #OneGameAMonth (#1GAM for short) in &#8230; <a href="https://gamedevwithoutacause.com/?p=1818">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/02/logo-feb.png"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2013/02/logo-feb.png" alt="logo-feb" width="768" height="208" class="aligncenter size-full wp-image-1821" /></a><br />
It&#8217;s February and I&#8217;ve been at <a href="http://www.onegameamonth.com/" target="_blank">#OneGameAMonth</a> for about 6 weeks now, so I thought it was about time to comment on how it&#8217;s going.</p>
<p>Before that though, a few words about why I&#8217;m doing #OneGameAMonth (#1GAM for short) in the first place.  Here is the mission statement from my #OneGameAMonth <a href="http://www.onegameamonth.com/nobunagaota" target="_blank">profile</a> page:</p>
<blockquote><p>My biggest hope in joining #OneGameAMonth is to use it as a chance to challenge all my assumptions about how games should be made. By holding to the seemingly impossible goal of One Game a Month, I hope to find what I need to change (and what I&#8217;m unwilling to sacrifice) in order to make more, better games. Also, making friends and becoming AWESOME!</p></blockquote>
<p>My main goal is to challenge myself to approach game development in ways that I haven&#8217;t before.  So, this is how am I doing so far:<span id="more-1818"></span></p>
<p>For my first #OneGameAMonth project, I decided to start with an easy warm-up: an update of an existing game. In this case, an <a href="http://gamedevwithoutacause.com/?p=1759" title="New Update Out for Robot Legions on XBLIG!" target="_blank">update</a> for my latest XBLIG game, <a href="http://marketplace.xbox.com/en-US/Product/Robot-Legions/66acd000-77fe-1000-9115-d80258550c46" target="_blank">Robot Legions</a>. Be sure to check it out to see how it went.<br />
<a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/01/Screenshot05.jpg"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2013/01/Screenshot05.jpg" alt="Screenshot05" width="1000" height="562" class="aligncenter size-full wp-image-1765" /></a></p>
<p>For my next trick, I&#8217;m going to try for a real challenge and make a new game.</p>
<p>Naturally, making a new game from scratch takes time so I&#8217;m leveraging as much of my previous projects as possible.  I&#8217;m even going so far as copying my last released game&#8217;s code wholesale and then replacing the parts I need to make my new game.  While I am spending some time cleaning up and excising code I don&#8217;t need, I expect this approach to pay dividends once I start having to implement menus and such.  If I can get away with just re-skinning and adjusting the flow of my previous title&#8217;s menu code, I can spend that much more time focused on the gameplay itself.</p>
<p>The other weapon in my time-saving arsenal is an almost single-minded focus on the game&#8217;s concept.  I want to do ONE THING with this game and that is replicate the feeling of an <a href="http://www.urbandictionary.com/define.php?term=Itano%20circus" target="_blank">Itano Circus</a>. The Itano Circus (or &#8220;Macross Missile Massacre&#8221;) refers to the wild flurries of missiles that occur in anime dogfights like those in Macross. Check out the video below if you want to see what I mean:<br />
<iframe width="584" height="438" src="http://www.youtube.com/embed/BzXfVgYCxWI?feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>While making a game, it&#8217;s easy to have feature creep set in and blow the scope of the project.  As much as possible, I&#8217;m trying to stay aware of that phenomenon and stop myself went it starts to take place.  Whenever I have a new idea for the game, I ask myself: &#8220;Does this help the Itano Circus feel?&#8221;  If not, I cut it.  Then and there.</p>
<p>Here are screenshots of what I have so far.<br />
<a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/02/Itano_WIP01.png"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2013/02/Itano_WIP01.png" alt="Itano_WIP01" width="1280" height="720" class="aligncenter size-full wp-image-1837" /></a></p>
<p><a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/02/Itano_WIP02.png"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2013/02/Itano_WIP02.png" alt="Itano_WIP02" width="1280" height="720" class="aligncenter size-full wp-image-1838" /></a><br />
(It&#8217;s probably not coincidental that every choice I make to bring out the Itano Circus-ness of the game seems to take it closer to <a href="http://www.youtube.com/watch?v=-IFIVFbR1fM" target="_blank">Afterburner II</a>. I imagine the creators of that game drew inspiration from many of the same sources I&#8217;m now using.)</p>
<p>So far, I&#8217;m managing to keep focused on my goal.  Hopefully I can keep it up and finish this game this month.  After all, I have a new project waiting for me next month because, well you know, #OneGameAMonth.</p>
]]></content:encoded>
			<wfw:commentRss>https://gamedevwithoutacause.com/?feed=rss2&#038;p=1818</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seeing the Whole Elephant</title>
		<link>https://gamedevwithoutacause.com/?p=1710</link>
		<comments>https://gamedevwithoutacause.com/?p=1710#comments</comments>
		<pubDate>Tue, 22 Jan 2013 16:12:54 +0000</pubDate>
		<dc:creator><![CDATA[Rob]]></dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://gamedevwithoutacause.com/?p=1710</guid>
		<description><![CDATA[There&#8217;s this old parable about several blind men and an elephant. There story goes something like this: Asked to describe an elephant each blind man grabs a part of the elephant then proceeds to describe what they felt. One feels &#8230; <a href="https://gamedevwithoutacause.com/?p=1710">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/01/Blind_monks_examining_an_elephant.jpeg"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2013/01/Blind_monks_examining_an_elephant.jpeg" alt="Blind_monks_examining_an_elephant" width="800" height="580" class="aligncenter size-full wp-image-1753" /></a><br />
There&#8217;s this old parable about several blind men and an elephant.  There story goes something like this: Asked to describe an elephant each blind man grabs a part of the elephant then proceeds to describe what they felt.  One feels the elephant&#8217;s tusk and describes an elephant as a hard, bony creature.  Another feels it&#8217;s leg and describes the elephant as being stout like a tree trunk.  Yet another grabs the elephants tail and promptly describes the elephant as being like a snake.  Naturally, once they start sharing their findings, an argument ensues about what an elephant really is.</p>
<p>Each of these poor men is being totally honest in their description, but the end result ends up being divorced from reality by the limits of their own perception.  The moral of the story is for one to be aware of where their limited perception (or preconceptions) may hide information from them.  In more colloquial terms, it&#8217;s about learning to see the whole picture.<span id="more-1710"></span></p>
<p>This lesson also applies to programming, particularly when designing code.  For almost any programming problem, there are several, potentially competing, factors that play into its solutions.  It&#8217;s easy to get so locked into a single mindset that you overlook important factors that you would only have noticed from a different vantage point.</p>
<p>When I need to design a piece of code, I try to think about it from at least the following three perspectives.  Of course, these thee perspectives don&#8217;t represent the full set of potential viewpoints from which to examine a problem.  These are just the three that I&#8217;ve found to be the most useful tools for my day-to-day programming work.</p>
<p><strong>Class View</strong><br />
At this stage, I think about how I would structure my code with traditional Object-Oriented Programming techniques.  I think about the data and functions that would be a part of the core &#8220;objects&#8221; in the feature I am creating.  If things get hairy, I bust out some UML to track dependencies and ownership relations.  This views tends to make the code most easily digestible for many game programmers because most of them have been raised on OOP principles.</p>
<p><strong>Data View</strong><br />
This is where I look at the problem I need to solve in terms of data that needs to be processed.  As opposed to thinking in terms of classes which are collections of data and functions that operate on that data, I think about data processing as a pipeline.  In many cases, this sort of thought process leads me to the core update loops that will form the core of the feature I&#8217;m implementing.  This view is often about making the code easily usable for the target machine.  In many cases it&#8217;s about taking data that has been gathered and normalized so it can be processed in a minimally-complex fashion.</p>
<p><strong>User View</strong><br />
I wouldn&#8217;t be a very useful programmer if I ignored my end-users.  If my feature needs someone to author data for it (and almost every feature does in some way or another), I&#8217;d better make sure they can create that data in a reliable and reasonably error-proof fashion.  This is especially true if they have to produce a lot of data or need to iterate on that data repeatedly.</p>
<p>I don&#8217;t always use the above three views in that order, but I generally make sure to ask myself if I&#8217;ve considered my design from all three of these perspectives before I start working on any significantly large feature.  Sometimes the best thing I can do when programming is to stop and ask myself: &#8220;Have I seen the whole elephant?&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>https://gamedevwithoutacause.com/?feed=rss2&#038;p=1710</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guerilla Gamedev</title>
		<link>https://gamedevwithoutacause.com/?p=1712</link>
		<comments>https://gamedevwithoutacause.com/?p=1712#comments</comments>
		<pubDate>Tue, 15 Jan 2013 14:00:53 +0000</pubDate>
		<dc:creator><![CDATA[Rob]]></dc:creator>
				<category><![CDATA[Game Development]]></category>

		<guid isPermaLink="false">http://gamedevwithoutacause.com/?p=1712</guid>
		<description><![CDATA[As much as I enjoy indie game development, it doesn&#8217;t pay the bills. Not by a long-shot! Being that I&#8217;m married, have a 2-year old son and live in one of the world&#8217;s most expensive cities, I need to have &#8230; <a href="https://gamedevwithoutacause.com/?p=1712">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/01/guerilla.png"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2013/01/guerilla.png" alt="guerilla" width="518" height="587" class="aligncenter size-full wp-image-1736" /></a><br />
As much as I enjoy indie game development, it doesn&#8217;t pay the bills.  Not by a long-shot!  Being that I&#8217;m married, have a 2-year old son and live in one of the world&#8217;s most expensive cities, I need to have a day job.  I&#8217;m fortunate enough to have a job making games for a living, but that still doesn&#8217;t stop me from having that indie gamedev itch.</p>
<p>So, with a family and a full-time job, where do I find the time to make games on the side?  The answer is: wherever I can.  Here are a few of the ways I try to make the best of my limited gamedev time.<span id="more-1712"></span></p>
<p><b>Task List</b><br />
First of all, I make sure that I have a list of tasks planned out for my game project.  While I&#8217;ve played with various task tracking solutions at work, for my private projects I settle for a good old text file TODO list.  By writing out what I need to do, I give myself an explicit list of work that I can reference any time I have a spare moment to do some gamedev. Of course, the simple joy of crossing items off a TODO list is a powerful motivational factor.</p>
<p>One of my key tricks here is the granularity of my task lists.  While I generally start off with coarse tasks, I quickly sub-divide tasks into smaller units as I better understand the work involved. The result is a list of small tasks, many of which are only 10-20 minutes long. </p>
<p><b>Stolen Time</b><br />
This is where having such a fine-grained task list comes in handy.  As a full-time employee and family-man, it&#8217;s very rare for me to have long-periods of contiguous free-time to devote to gamedev. If anything, my day is constantly split up by the toils of daily-life.</p>
<p>Without a consistent period of concentrated gamedev time to use, I&#8217;ve grown accustomed to using the small periods of free-time that appear over the course of a day.  On a typical day, most of my indie gamedev takes place during the 20 minute bus ride to work, the 10 minutes I can actually sit on the train back (I take my son to day-care in the mornings so my routes to and from work are different), and 30 minutes or so of free-time during lunch.  Other than that, my daily gamedev time depends on how much sleep I&#8217;m willing to sacrifice.</p>
<p>Getting anything, especially programming, done in 10 minutes seems difficult at first, but I&#8217;ve gotten better at it with practice.  Before, I generally assumed I needed at least 20 minutes to rev up my mind before I could hope to program effectively.  Nowadays, I&#8217;ve become rather practiced at keeping my head pre-revved so that I&#8217;m ready to go the moment my fingers hit the keyboard.  Last time I was at a conference, that 10 minute break between panels proved to be the perfect time to whip out my laptop and bang out some code. Still, it took a fair bit of practice to develop this skill and there still times when I just need to sit down and concentrate for several hours straight to get something done.</p>
<p><b>Precache</b><br />
With only 10-20 minutes to spare to accomplish a task, all those little bits of time lost to programs loading or closing count.  Over the last year, I&#8217;ve grown very conscious of how long it takes for my most-used programs to fully load and become useful. To compensate for this, I often use the last minute or so of any development period to prep my environment for the next task.  If I know what I&#8217;m going to implement, I launch Visual Studio and open up the relevant source files before I close my laptop. That way, the next time I&#8217;m able to start coding, my dev environment will be ready for me the moment I can start working.</p>
<p>None of these tips are particularly revolutionary or non-obvious.  Still, it&#8217;s often the little things that count as they can often add up into something quite significant.  For example, I made most of <a href="http://marketplace.xbox.com/en-US/Product/Robot-Legions/66acd000-77fe-1000-9115-d80258550c46" target="_blank">Robot Legions</a> over course of five months of such bus-ride and lunch-time development. Making games is hard and time-consuming, but it doesn&#8217;t have to be impossible if don&#8217;t have gobs of free-time at your disposal.</p>
]]></content:encoded>
			<wfw:commentRss>https://gamedevwithoutacause.com/?feed=rss2&#038;p=1712</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Three Things I Wish I Knew When I Started Using the UDK</title>
		<link>https://gamedevwithoutacause.com/?p=1708</link>
		<comments>https://gamedevwithoutacause.com/?p=1708#comments</comments>
		<pubDate>Tue, 08 Jan 2013 14:07:46 +0000</pubDate>
		<dc:creator><![CDATA[Rob]]></dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[UDK]]></category>

		<guid isPermaLink="false">http://gamedevwithoutacause.com/?p=1708</guid>
		<description><![CDATA[Boy, Unreal Engine 3 is a gift that just keeps on giving. I&#8217;ve been using Unreal in a professional capacity for a few years now (with occasional forays into UDK-land to see how I fare without source code) and I &#8230; <a href="https://gamedevwithoutacause.com/?p=1708">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/01/6081261.jpg"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2013/01/6081261.jpg" alt="6081261" width="264" height="400" class="aligncenter size-full wp-image-1715" /></a><br />
Boy, Unreal Engine 3 is a gift that just keeps on giving. I&#8217;ve been using Unreal in a professional capacity for a few years now (with occasional forays into UDK-land to see how I fare without source code) and I still find out about new features all the time.  Game development being what it is, those discoveries are often answered with a heartfelt: &#8220;That&#8217;s great! I wish I had known about that 6 months ago&#8230;&#8221;</p>
<p>So, in the spirit of helping out others using Unreal Engine 3 or the UDK, here are three features that I wish I had known about when I first started using Unreal.<span id="more-1708"></span></p>
<p><b>Kismet Console Command</b><br />
What&#8217;s the easiest way to call an UnrealScript function from Kismet? Write a custom sequence action? No!</p>
<p>Use the Console Command sequence action. Using it you can call any function marked with the exec keyword in UnrealScript.  All you need to do is pass in a valid target for the sequence action (most likely a PlayerController, like in the convenient All Players kismet variable.)<br />
<a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/01/consolecommandkismet.png"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2013/01/consolecommandkismet.png" alt="consolecommandkismet" width="161" height="183" class="aligncenter size-full wp-image-1719" /></a></p>
<p><b>Cause Event</b><br />
Console Command will allow me to easily call into UnrealScript from Kismet. What if I want to go in the other direction?  That&#8217;s where the Console Event node comes into play. This kismet event gets executed when the &#8220;causeevent&#8221; console command is triggered through UnrealScript. This makes it trivially easy to write code that calls out from UnrealScript into Kismet.</p>
<p>Having a Pawn, for example, calling &#8220;causeevent PawnHitWall&#8221; (&#8220;CE PawnHitWall&#8221; for short):</p>
<pre class="brush: c#">
   PlayerController(Controller).ConsoleCommand(&quot;CE PawnHitWall&quot;);
</pre>
<p>Results in the following Kismet event being called with the PlayerController&#8217;s Pawn passed through as the Instigator:<br />
<a href="http://gamedevwithoutacause.com/wp-content/uploads/2013/01/pawnhitwall.png"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2013/01/pawnhitwall.png" alt="pawnhitwall" width="259" height="292" class="aligncenter size-full wp-image-1721" /></a></p>
<p><b>ActorComponents</b><br />
I&#8217;m a bit sheepish to admit it, but I jumped into Unreal without really understanding the relationship between Actors and ActorComponents.  As a result, I probably created dozens more custom actor classes then I ever needed.  In hindsight, the extra classes were senseless because it is so trivially easy to add new ActorComponents in the defaultproperties of a class.  Spawning Emitters (a descendant of Actor) when I could have just added ParticleSystemComponents in my Pawn&#8217;s defaultproperties block was probably my worst offense.</p>
<p>If you only read one page on UDN, read the page on <a href="http://udn.epicgames.com/Three/ActorComponents.html" target="_blank">ActorComponents</a>. (If you only read one page on UDN though, you&#8217;re probably doomed.  Read a lot of UDN pages, just make sure you don&#8217;t miss the one on ActorComponents.)  </p>
<p>For people experienced with Unreal, these tips are probably old hat, but it&#8217;s surprising how far you can get with the engine while still missing basics like ones above.  Personally, knowing the above tidbits ahead of time would have probably sped up the development of my first Unreal Engine game prototypes significantly.</p>
]]></content:encoded>
			<wfw:commentRss>https://gamedevwithoutacause.com/?feed=rss2&#038;p=1708</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On Game Music</title>
		<link>https://gamedevwithoutacause.com/?p=1588</link>
		<comments>https://gamedevwithoutacause.com/?p=1588#comments</comments>
		<pubDate>Tue, 20 Nov 2012 15:25:06 +0000</pubDate>
		<dc:creator><![CDATA[Rob]]></dc:creator>
				<category><![CDATA[Game Development]]></category>

		<guid isPermaLink="false">http://gamedevwithoutacause.com/?p=1588</guid>
		<description><![CDATA[You know, there is some really great game music out there. Really memorable stuff that can instantly transport you to a different state of mind. Here&#8217;s the thing though. While talking with some fellow game devs the other night, we &#8230; <a href="https://gamedevwithoutacause.com/?p=1588">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://gamedevwithoutacause.com/wp-content/uploads/2012/11/conductor_mario.png"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2012/11/conductor_mario.png" alt="" title="conductor_mario" class="aligncenter size-full wp-image-1594" /></a><br />
You know, there is some really great game music out there.  Really memorable stuff that can instantly transport you to a different state of mind.</p>
<p>Here&#8217;s the thing though.  While talking with some fellow game devs the other night, we got onto the topic of old 8-bit / 16-bit era chiptunes and how great we thought they are.  Then, we started talking about how, despite all the iconic tunes we could remember from that era, we couldn&#8217;t think of nearly as many great examples of video game music from more recent games.</p>
<p>That got me wondering.  Why did we have so many fond feelings for the game music of yesterday, but not nearly as much for the music of today&#8217;s games?  Is it just nostalgia at work, or is there something else at play?<br />
<span id="more-1588"></span></p>
<p>Well, to be honest, it could just be nostalgia, right?  As a general rule, many people stop listening to new music as they leave their 20&#8217;s, forever crystalizing the songs of their teens as the apex of their musical world.  As a member of a generation that grew up with the NES and Super NES, does that mean that no new game music can compete with songs of my 8-bit past?  </p>
<p>Every piece of video game music I can remember from the 80&#8217;s and 90&#8217;s is great.  But then again, that&#8217;s every piece of music I can <i>remember</i>.  Time filters out the mediocre.  That&#8217;s why very few people remember the lesser shows that came out of the previous decade of sitcoms.  That&#8217;s why very few people remember the tunes from games like Amagon:<br />
<iframe width="584" height="438" src="http://www.youtube.com/embed/M0qCwvjv87s?feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>To be fair to Amagon, it has a few catchy tunes in there,  But they&#8217;re not great by any measure and that&#8217;s why they&#8217;re mostly forgotten.  When we compare current game soundtracks to our favorites of the past, we are often comparing both the average and the potentially great of the present against the truly great of the past.</p>
<p>Of course, generational bias can explain all the differences away.  There are also significant technical aspects to creating game music that actually give the 8-bit era and edge in terms of creating memorable tunes.  Even with specialized sound hardware like that found in the Super NES, chiptune composers were still significantly constrained in terms of the ways they could combine sounds.  In many cases, they were lucky if they could play 4 voices simultaneously which meant that they had to be very efficient in where they focused their composing efforts.  Without a solid, hummable melody line, a chiptune would be nothing but context-less sound.  A square-wave can only really sound like a timpani if there&#8217;s a melody around helping to establish it as part of the music.</p>
<p>Modern games, on the other hand, have the full suite of sound available to them that had previously only been the realm of TV and movies.  This works to their advantage in allowing them to create full, swelling orchestral soundtracks to go with their games but also costs them some of the more poppy, melody-driven sensibilities of the 8-bit era.  </p>
<p>It&#8217;s also worth remembering that, as the cost of making games has gone up, so has the cost of making game music.  When watching this <a href="http://www.gametrailers.com/full-episodes/bokf9s/backtrack-composing-mass-effect--episode-i" target="_blank">series</a> <a href="http://www.gametrailers.com/full-episodes/rrinci/backtrack-composing-mass-effect--episode-ii" target="_blank">of</a> <a href="http://www.gametrailers.com/full-episodes/rxlyc7/backtrack-composing-mass-effect--episode-iii" target="_blank">videos</a> on GameTrailers about the creation of the soundtracks for the Mass Effect series, I was struck by composer Jack Wall&#8217;s comments about how tight their production schedule was.  It takes a lot of time to make good music and even a multi-year project may have trouble getting it done in time.  Compounding this is the tendency of a lot of video game productions to handle audio as an afterthought relative to programming and graphics. Add to this that a lot of game devs to underestimate the time needed to make great music and it&#8217;s little surprise that a lot of game soundtracks don&#8217;t live up to their full potential.</p>
<p>You know, making memorable music for games is hard.  It&#8217;s probably only gotten harder as game technology has become more advanced.  It can be done though.  That being said, it is kind of telling that the only music I remember after finishing Deus Ex: Human Revolution are the piece from the <a href="http://www.youtube.com/watch?v=jsJM8nwwyew" target="_blank">trailer</a> and the re-hash of the original Deus Ex theme they played <a href="http://www.youtube.com/watch?v=Q4gQV5uZIpE" target="_blank">after the credits</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://gamedevwithoutacause.com/?feed=rss2&#038;p=1588</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OOP Stand Alone Complex</title>
		<link>https://gamedevwithoutacause.com/?p=1482</link>
		<comments>https://gamedevwithoutacause.com/?p=1482#comments</comments>
		<pubDate>Tue, 09 Oct 2012 14:04:24 +0000</pubDate>
		<dc:creator><![CDATA[Rob]]></dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://gamedevwithoutacause.com/?p=1482</guid>
		<description><![CDATA[Don&#8217;t get me wrong, I&#8217;m not against object-oriented programming (OOP). More often than not, it&#8217;s a valuable method for modeling data and logic in games. However, because of its near-total dominance of thinking regarding programming in games, I often find &#8230; <a href="https://gamedevwithoutacause.com/?p=1482">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://gamedevwithoutacause.com/wp-content/uploads/2012/10/Ghost-in-the-Shell-Stand-Alone-Complex-post.jpeg"><img src="http://gamedevwithoutacause.com/wp-content/uploads/2012/10/Ghost-in-the-Shell-Stand-Alone-Complex-post-1024x819.jpeg" alt="" title="Ghost-in-the-Shell-Stand-Alone-Complex-post" width="584" height="467" class="aligncenter size-large wp-image-1483" /></a><br />
Don&#8217;t get me wrong, I&#8217;m not against object-oriented programming (OOP).  More often than not, it&#8217;s a valuable method for modeling data and logic in games.  However, because of its near-total dominance of thinking regarding programming in games, I often find myself playing the anti-OOP advocate in conversations at work.</p>
<p>You see, there are times when designs that look &#8220;right&#8221; when viewed through an OOP lens turn out to be ill-suited to solving certain problems in game programming.  One of the major causes of this is the tendency of OOP to encourage thinking of problems in terms of single data objects.  Often this works because handling multiple instances of an object is a natural extension once you know how to handle a single instance.  This isn&#8217;t always the case however and it&#8217;s common for OOP-oriented programmers (OOPOP?) to overlook cases in which it would be better to think of processing data as a gestalt as opposed to as lists of stand-alone objects.</p>
<p>To clarify this idea, I&#8217;ll share a recent experience with some code at work.<span id="more-1482"></span></p>
<p>The story that follows is a familiar one.  We, the programmers, had adopted a fully-featured game engine with a suitably large codebase.  The engine&#8217;s 3D features were, as to be expected, top-notch.  The engine&#8217;s 2D feature were not quite so developed.  It mainly consisted of a set of functions to draw sprites onto a 2D HUD at particular positions, scales, rotations, etc.  It had no useful UI features like buttons or other widgets nor could it handle hierarchies of sprites.  This meant that any sort of menus beyond the simplest single-depth affairs would be impossibly clumsy to implement.</p>
<p>So, like any good programmer, one of our number set about extending the engine&#8217;s 2D HUD system with our own hierarchal sprite management system as well as some basic widgets.  Throw in some runtime tools for tweaking UI layouts and we were golden.  At least, we were until we started implementing some of the more complicated menus in the game.</p>
<p>You might not notice it at first, but most game menus actually have significant amounts of information being displayed at once.  Unchecked, these menus can result in surprisingly large numbers of sprite renders.  And that&#8217;s what we had in our project.  Lot&#8217;s of sprites being rendered at once and our framerate tanking on our menus.  Heavy menus?  I thought the game itself was supposed to be the heavy part?  What happened?</p>
<p>Well, having the hierarchal sprite system written in a scripting language didn&#8217;t help performance, but that&#8217;s a straight-forward transcription away from being solved.  More to the root of the problem was the design of the hierarchal sprite system itself.  You see, it was almost text-book OOP with &#8220;sprite&#8221; being the core object.  Sprites were independent objects capable of rendering themselves   The first thing the programmer probably did was write code to make sure a single sprite could render itself.  Then, he made sure they could be connected hierarchically, deriving their absolute screen position based on their relative offset from their parent.  </p>
<p>For the most part, that approach makes sense, until you look carefully at how sprites were actually being used.  Almost every sprite we used was the child of another sprite in a multi-level child-parent hierarchy.  We would render our root sprites and expect the render command to travel down to child sprites through the hierarchy.  So far, so good.  But, every sprite was designed to be able to calculate its own absolute screen position.  To do this, each sprite would query its parent&#8217;s absolute position and add its own relative offset.  These absolute position calculations therefore involved climbing back up the hierarchy to the root.  This operation was performed by each child and would only become more expensive as we went deeper down the hierarchy with each depth requiring longer trips back to the root to calculate screen positions.</p>
<p>&#8220;Wow&#8221;, you may say.  &#8220;That behavior is horrid.&#8221;  And you would be right.  If you&#8217;re already traveling down a hierarchy, it makes sense to calculate values like absolute screen position and propagate them downwards as you perform the traversal.  But, it was surprisingly non-obvious from the OOP perspective.  Had the programmer who implemented the sprite system thought in terms of how hierarchies of sprites should be rendered as opposed to how single sprites should render themselves, I imagine he would have written very different code. </p>
<p>Object-oriented programming has a powerful tendency to encourage thinking in terms of single objects and assuming that the handling of multiple instances of said objects is a trivial extension.  For a lot of high-level game logic, this is probably a correct assumption.  But, in cases where you need to process large amounts of data, this sort of single-instance thinking can be debilitating.  While swearing off object-oriented programming would be akin to throwing the baby out with the bathwater, it&#8217;s good practice to occasionally question your own thought process and approach problems from a different angle.</p>
]]></content:encoded>
			<wfw:commentRss>https://gamedevwithoutacause.com/?feed=rss2&#038;p=1482</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
