<?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>Cynical Stuff - Casual games development and cynical observations &#187; game development</title>
	<atom:link href="http://www.cynicalstuff.com/tag/game-development/feed" rel="self" type="application/rss+xml" />
	<link>http://www.cynicalstuff.com</link>
	<description>A blog about casual games development, science, culture and cynical observations</description>
	<lastBuildDate>Thu, 20 May 2010 15:39:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Web and Downloadable Game Engine Choices 2009</title>
		<link>http://www.cynicalstuff.com/web-and-downloadable-game-engine-choices-2009</link>
		<comments>http://www.cynicalstuff.com/web-and-downloadable-game-engine-choices-2009#comments</comments>
		<pubDate>Sun, 20 Dec 2009 11:44:07 +0000</pubDate>
		<dc:creator>Karja</dc:creator>
				<category><![CDATA[Indie Games]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[casual games]]></category>
		<category><![CDATA[game development]]></category>
		<category><![CDATA[game engines]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.cynicalstuff.com/?p=369</guid>
		<description><![CDATA[In my last post I complained about the lack of a perfect silver bullet game engine that would fit my needs as a small indie developer starting up a new game project. My three primary target platforms are Windows, Mac and the web, in roughly that order. &#8220;But Karja, haven&#8217;t you heard? iPhone/XBox Live 360/Android/etc [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.cynicalstuff.com/game-engine-choices-for-indie-developers-2009">In my last post</a> I complained about the lack of a perfect silver bullet game engine that would fit my needs as a small indie developer starting up a new game project. My three primary target platforms are Windows, Mac and the web, in roughly that order.</p>
<p>&#8220;But Karja, haven&#8217;t you heard? iPhone/XBox Live 360/Android/etc etc is the new indie platform of choice! This guy I read about made six billion dollars on his game there!&#8221;</p>
<p>I have a number of reasons why that is utter bull excrement:</p>
<ul>
<li>iPhone is flooded with games. Literally flooded, with thousands and thousands of games that make it hard to gain visibility. Also, iPhone relies on Apple&#8217;s SDK, objective-C (to some extent at the very least), touch screen, low-end hardware, etc etc &#8211; and all of these aspects have to be hand-crafted for the iPhone release without being reusable on other platforms.</li>
<li>XBox 360 is good if you only intend to target Windows and XB360. But that would be incredibly stupid for me, since my target audience isn&#8217;t the XBox lads.</li>
<li>Android is interesting. It would be neat to get in quickly just in case the market suddenly explodes á la iPhone. But, and this is a big but, Android requires Java which is utterly incompatible with web deployment (Flash is the only viable option there).</li>
</ul>
<p>After some consideration, I found that my options are as follows:</p>
<ul>
<li><strong>Java</strong> &#8211; Windows and Mac deployment is possible, and I can deploy on Android as well, eventually. I also looked at Java-to-Actionscript converters, but&#8230;that feels desperate and unreliable. So, web deployment is a no-go for this one.</li>
<li><strong>BlitzMax</strong> &#8211; What, BlitzMax? That only supports Win/Mac! Yes, but I seriously considered trying to write a BMax->Actionscript converter since I already have a lot of BMax code and an abstraction layer API in place. (This means that I would have to write the APIs for drawing/sound in Actionscript from scratch, but convert the game logic at least.)</li>
<li><strong>C++</strong> &#8211; Screw web deployment, and go for a full-fledged C++ engine! That would be the most fun to code in. But&#8230; No. 2010 is coming up and the web is the new black.</li>
<li><strong>HaXe</strong> &#8211; This would allow web deployment, and there&#8217;s a neat HaXe->C++ converter that can be used along with NME/NEASH, an SDL version of the flash API. Essentially, what this promises is that the same code could be used to make a Flash version <em>and</em> a compiled standalone downloadable (&#8230;as well as an iPhone version!). Alas, things aren&#8217;t as good as they sound. I did some quick tests and NME/NEASH lacks a lot of bitmap manipulation support. For example, BitmapData.colorTransform() support is missing &#8211; and this means that the alpha channel of bitmaps cannot be modified in the downloadable version. Things like this make HaXe seem way too shaky at the moment.</li>
<li><strong>PushButton Engine</strong> &#8211; If I&#8217;m considering pure Flash (well, Actionscript) engines, this is a strong candidate. It&#8217;s a well-designed library intended to be used for larger game projects. However&#8230;. After looking at the code a bit, I fail to see exactly what it will bring. The rendering, file-loading and game state management seems to be the biggest things that it provides but to be honest those aren&#8217;t all that tricky to write by yourself.</li>
<li><strong>flixel</strong> &#8211; Another Actionscript/Flash engine. This one seems very attractive at first, but the main problem with flixel is that it makes assumptions. &#8220;You only want to make a platformer style game, right? You&#8217;ll want to use pixelated effects, right? You want to embed all files since you&#8217;re deploy for the web only, right?&#8221; And so on.</li>
<li><strong>Actionscript/Flex</strong> &#8211; Finally, the last option is to go for pure Actionscript with Flex. No no no, I&#8217;m not trying to reinvent the wheel and have a NIH (Not Invented Here) mentality. But to be frank, writing the main framework that flixel or PBE would provide is&#8230;not that much work. Also, I have specific needs: for example, I need to target different platforms and handle files differently on the different platforms (embedded/external).</li>
</ul>
<p>Nothing is decided at all, but I&#8217;m currently leaning towards using PBE, flixel or pure AS/Flex. My main beef with that is whether or not it&#8217;s fast enough to look good on the downloadable versions. HaXe seemed like an interesting choice for a long while, and I&#8217;m sure that it will be in the future, but I simply found too many flaws in it to provide any actual benefit at the moment. I&#8217;m (probably) going for a double-buffer approach with quite a few alpha effects on bitmaps (not in the least for the particles), so the current unstable alpha support in the SDL parts makes HaXe&#8217;s NME/NEASH solution for downloadables and iPhone pretty dubious.</p>
<p>In the end maybe I oughtn&#8217;t spend so much time investigating this, and just choose something and start developing instead. I guess all engines and choices have their flaws, so nothing&#8217;s going to be perfect.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cynicalstuff.com/web-and-downloadable-game-engine-choices-2009/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Game Engine Choices for Indie Developers 2009</title>
		<link>http://www.cynicalstuff.com/game-engine-choices-for-indie-developers-2009</link>
		<comments>http://www.cynicalstuff.com/game-engine-choices-for-indie-developers-2009#comments</comments>
		<pubDate>Thu, 10 Dec 2009 10:15:40 +0000</pubDate>
		<dc:creator>Karja</dc:creator>
				<category><![CDATA[Indie Games]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[casual games]]></category>
		<category><![CDATA[game development]]></category>
		<category><![CDATA[game engines]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.cynicalstuff.com/?p=348</guid>
		<description><![CDATA[This post is going to get a bit technical, so if you&#8217;re easily bored by the gritty details of game development you might want to go somewhere else right now. Maybe to Cute Overload or something. My latest game, Wildhollow, is released and I have some great ideas for my next game. Let&#8217;s just say [...]]]></description>
			<content:encoded><![CDATA[<p>This post is going to get a bit technical, so if you&#8217;re easily bored by the gritty details of game development you might want to go somewhere else right now. Maybe to <a href="http://cuteoverload.com/">Cute Overload</a> or something.</p>
<p>My latest game, <a href="http://www.wildhollow.com">Wildhollow</a>, is released and I have some great ideas for my next game. Let&#8217;s just say that it might include puzzles, RPG elements and some online functionality. Oh, and superheroes or monsters too. Not really sure which yet. Either way, in order to get the game done I need to decide what to implement it in. <a href="http://www.sheeplings.com">Sheeplings</a>, <a href="http://www.spandexforce.com">Spandex Force</a> and <a href="http://www.wildhollow.com">Wildhollow</a> were all developed in BlitzMax, an object oriented BASIC language that&#8217;s extremely easy to develop cross-platform games in.</p>
<p>As long as your cross-platform needs are Windows, Mac or Linux, that is.</p>
<p>As an indie casual games developer I find myself wanting to maximize my potential market (of course), and that means maximizing the number of platforms I can distribute games too. To make things easier for me I&#8217;ve constructed this table of feasible game engines/libraries as things are now in 2009:</p>
<table border="1">
<tr>
<th>Engine Name</th>
<th>Language</th>
<th>Windows</th>
<th>Mac</th>
<th>Web</th>
<th>iPhone</th>
<th>Android</th>
<th>Xbox 360</th>
<th>Linux</th>
</tr>
<tr>
<td>Android SDK</td>
<td>Java</td>
<td>(X)</td>
<td>(X)</td>
<td>(X)</td>
<td></td>
<td>X</td>
<td></td>
<td>(X)</td>
</tr>
<tr>
<td>BlitzMax</td>
<td>Misc</td>
<td>X</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>X</td>
</tr>
<tr>
<td>ClanLib</td>
<td>C++</td>
<td>X</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>X</td>
</tr>
<tr>
<td>Cocos 2D</td>
<td>Obj-C</td>
<td></td>
<td></td>
<td></td>
<td>X</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Flixel</td>
<td>Flash</td>
<td>(X)</td>
<td>(X)</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Game Maker</td>
<td>Misc</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>HaXe</td>
<td>Misc</td>
<td>(X)</td>
<td>(X)</td>
<td>X</td>
<td>(X)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Haaf&#8217;s Game Engine</td>
<td>C++</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>LWJGL</td>
<td>Java</td>
<td>X</td>
<td>X</td>
<td>(X)</td>
<td></td>
<td></td>
<td></td>
<td>X</td>
</tr>
<tr>
<td>PopCap Framework</td>
<td>C++</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>PTK Engine</td>
<td>C++</td>
<td>X</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>PushButton Engine</td>
<td>Flash</td>
<td>(X)</td>
<td>(X)</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Pygame</td>
<td>Python</td>
<td>X</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>X</td>
</tr>
<tr>
<td>Simple DirectMedia Layer</td>
<td>C++</td>
<td>X</td>
<td>X</td>
<td></td>
<td>X</td>
<td></td>
<td></td>
<td>X</td>
</tr>
<tr>
<td>Silverlight</td>
<td>Misc</td>
<td>X</td>
<td>(X)</td>
<td>(X)</td>
<td></td>
<td></td>
<td></td>
<td>(X)</td>
</tr>
<tr>
<td>Slick</td>
<td>Java</td>
<td>X</td>
<td>X</td>
<td>(X)</td>
<td></td>
<td>(X)</td>
<td></td>
<td>X</td>
</tr>
<tr>
<td>Torque 2D</td>
<td>C++</td>
<td>X</td>
<td>X</td>
<td></td>
<td>(X)</td>
<td></td>
<td></td>
<td>X</td>
</tr>
<tr>
<td>Unity</td>
<td>C#/JS</td>
<td>X</td>
<td>X</td>
<td>(X)</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>XNA Game Studio</td>
<td>C#</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>X</td>
<td></td>
</tr>
</table>
<p></p>
<p>Note that I said feasible engines and libraries. This is not close to a complete list, but they are the ones I&#8217;m considering. I can list some criteria:</p>
<ul>
<li>There must be decent performance, which means preferably no software rendering</li>
<li>All Windows only, Xbox only, etc libraries are of no use to me. I&#8217;ve listed a few anyway just for consideration</li>
<li>I want to be able to create mostly 2D games in an efficient manner. 3D engines are often bloated and unusable. Unity may be free but it&#8217;s of no use to me, for example</li>
<li>Finally, I have a prioritized order of platform preference. You may note that the columns in the table are ordered rather strangely. That&#8217;s because I&#8217;m going from most important to least important platform</li>
</ul>
<p>A quick glance at the table shows that there&#8217;s no single engine or library that fulfills all my needs. An X demarks that the platform is supported, and an (X) means that limited support is possible. That could mean that it&#8217;s possible but requires a lot of messing around (e.g. HaXe for iPhone), or that the solution isn&#8217;t practical (e.g. Java web applets aren&#8217;t very useful), or that it requires unreasonable things (e.g. Unity on the web requires a specific plugin).</p>
<p>Most engines and libraries support Windows and Mac, so that&#8217;s not really a problem. The real problem comes with my third platform of choice: the web. And by the web I mean that it should run seamlessly for most users. Which means that Java is doubtful (too&#8230;clunky, and portals won&#8217;t accept it), and that leaves only Flash. Which, of course, is mostly incompatible with &#8220;normal&#8221; programming languages and engines.</p>
<p>This is not an easy decision&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cynicalstuff.com/game-engine-choices-for-indie-developers-2009/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Designing a Game: Spandex Force Analysis</title>
		<link>http://www.cynicalstuff.com/designing-a-game-spandex-force-analysis</link>
		<comments>http://www.cynicalstuff.com/designing-a-game-spandex-force-analysis#comments</comments>
		<pubDate>Thu, 17 Jan 2008 16:10:42 +0000</pubDate>
		<dc:creator>Karja</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Indie Games]]></category>
		<category><![CDATA[Spandex Force]]></category>
		<category><![CDATA[comics]]></category>
		<category><![CDATA[game design]]></category>
		<category><![CDATA[game development]]></category>
		<category><![CDATA[puzzle quest]]></category>
		<category><![CDATA[superheroes]]></category>
		<category><![CDATA[villains]]></category>

		<guid isPermaLink="false">http://www.cynicalstuff.com/designing-a-game-spandex-force-analysis</guid>
		<description><![CDATA[Game design is a strange beast. Yesterday I made build v0.4 of Spandex Force, my new puzzle/RPG/adventure game; it&#8217;s coming along very nicely, and with this release all main functionality is present. But after I&#8217;d finished the build I had a look at my notes from half a year ago, and early screenshots. The game [...]]]></description>
			<content:encoded><![CDATA[<p>Game design is a strange beast. Yesterday I made build v0.4 of <strong><a href="http://www.spandexforce.com">Spandex Force</a></strong>, my new puzzle/RPG/adventure game; it&#8217;s coming along very nicely, and with this release all main functionality is present. But after I&#8217;d finished the build I had a look at my notes from half a year ago, and early screenshots. The game is very much the same in spirit, but many design choices differ between my original drafts and the soon-to-be-finished product.</p>
<p><a href="http://www.spandexforce.com/screenshots/ss1.jpg"><img width="100" src="http://www.spandexforce.com/screenshots/ss1s.jpg" height="75" /></a> <a href="http://www.spandexforce.com/screenshots/ss4.jpg"><img width="100" src="http://www.spandexforce.com/screenshots/ss4s.jpg" height="75" /></a> <a href="http://www.spandexforce.com/screenshots/ss12.jpg"><img width="100" src="http://www.spandexforce.com/screenshots/ss12s.jpg" height="75" /></a></p>
<p>One important thing that differs is the scope. In the finished design, the player&#8217;s hero has just gotten a job as superhero of Vigilance Valley &#8211; a city troubled by minor crime and wacky super villains. In the original design I had planned a more involved process where the hero would start out as &#8220;city hero&#8221; and eventually graduate to &#8220;world hero.&#8221; This shift would be very visible: the city screen would feature minor villains and citizens in need, and the world globe would feature global threats and major super villains. This would have been interesting&#8230;but totally unnecessary. The game&#8217;s budget would&#8217;ve increased by a magnitude (well, maybe not; but it would have doubled at least) and the game would have taken months more to develop. I doubt that the benefits would have outweighed those consequences.</p>
<p>And speaking of scope, another thing that I was planning from the beginning was a more involved story inspired by <a href="http://en.wikipedia.org/wiki/Bildungsroman"><em>Bildungromans</em></a>. It would tell the story of how the hero grows from fledgling whippersnapper to responsible self-sacrificing hero. I had planned a structure where the first three episodes would be stand-alone, but then a subtle plot involving a villain trying to frame the hero would emerge. The hero would try to find out information through the following episodes, and eventually meet the ultimate villain in the next-to-last episode. Inspired by <a href="http://http://en.wikipedia.org/wiki/Watchmen">Watchmen</a>, after our hero had beaten the villain he would explain to the hero that it&#8217;s too late anyway &#8211; the Evil Plan(TM) was already set into motion a long time ago. Our hero would race to stop the Evil Destructive Device(TM), only to discover that it&#8217;s too late to stop it. Panic! What to do! He would sacrifice himself to protect the city&#8230;and everything would go black.</p>
<p>&#8230;And had I had my own way, that would have been the end of the game. But, of course, I had to think of a happy ending. So I pondered a final episode after this, where the hero wakes up weak and sore, and supervillains whom he have already beaten have teamed up to take revenge on him in his weakened state. Almost like the fight-all-the-bosses-before-the-final-boss in the Mega Man games. It all would end in a heartwarming scene where the people of the city aid the hero and he defeats everyone. Yay!</p>
<p>But that&#8217;s not how things turned out. Instead, I chose a format where every episode is stand-alone, and there&#8217;s no on-going storyline in the game. &#8220;How dull,&#8221; you exclaim now, &#8220;that totally sucks!&#8221; From an artistic point of view: yes, this is the worse choice. But I think it will work better from a gaming point of view! The game focuses on easily accessible minigames, humour, and instant-get-in-the-game-ness. That approach conflicts with a deeper storyline; if nothing else, it becomes difficult to jump into the game if you&#8217;ve had a break for a few weeks. Instead I chose episodes that you can finish in about an hour (depending on the episode) and clearly defined sub-tasks within each episode. Each subtask only takes 15 minutes (or something like that), so you get constant updates on the episode&#8217;s plot.</p>
<p><img width="400" src="http://www.cynicalstuff.com/images/spandex/old1.jpg" height="300" /><br />
<em>Old concept showing the early city screen and some dialogue.</em></p>
<p>But there are other design issues on a lower level that differs between then and now. For one thing, at first I intended to make Spandex Force into a game that would have been much more of a Puzzle Quest clone. The current implementation has many strictly different puzzle mechanics: Catch &#8216;n Match, Slide &#8216;n Match, Shoot &#8216;n Match, Click &#8216;n Drag, mini-minigames&#8230;and last but not least, the two types of puzzle battles. But in my original notes I only planned on doing the puzzle battles &#8211; nothing else! I had thought of a system with slightly different game modes: standard, simultaneous, and so on, and the type of villain you fought against would decide which game mode it would be. Supervillains would have a very special mode; the villains would have the simultaneous mode; and the henchmen would have classic modes. But after some prototyping I quickly abandoned this game design. It wouldn&#8217;t have given enough variation, and the simultaneous mode was&#8230;too chaotic. Play <a href="http://www.spandexforce.com">Spandex Force</a> and, when you come to a battle, imagine that you both perform your actions simultaneously instead of turn-based. Sure, it opens up to great things like stealing your opponent&#8217;s cascading matches&#8230;but it would be too action-oriented, and impossible to have a clear overview.</p>
<p><img width="400" src="http://www.cynicalstuff.com/images/spandex/old2.jpg" height="311" /><br />
<em>Old prototype of the puzzle battle game. Can you see which game I received inspiration from?</em></p>
<p>If things go well with the first game I just might implement a better simultaneous version in Spandex Force 2, though. <img src='http://www.cynicalstuff.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  And speaking of Spandex Force 2, here&#8217;s another thing I had to consider:</p>
<ul>
<li>If I made the game with a very large scope I would put all my eggs into one basket. If the game fails I will have lost a lot.</li>
<li>However, if I choose restraint and lessen the scope, I can see how the game fares. If it does awfully and it&#8217;s because of the game design or the theme&#8230;then it&#8217;s not worth making a sequel. But if it does well I&#8217;ll gain a lot of feedback that I can use to implement an even better sequel.</li>
<li>This sequel can then use many of the discarded options from the original design. For example, it can revolve around a global hero instead of a city-based one, and experiment with innovations to the minigames.</li>
<li>Also, if the first game does well enough, I can implement something that I didn&#8217;t dare in the first game&#8230; Multiplayer! Puzzle battles online, where you can defeat other heroes and villains! I think this would be absolutely brilliant but I don&#8217;t have the resources to pull it off unless Spandex Force does reasonably well.</li>
</ul>
<p>So, here&#8217;s to hoping that I can make Spandex Force 2 soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cynicalstuff.com/designing-a-game-spandex-force-analysis/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
