<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Incubator Games</title>
	
	<link>http://www.incubatorgames.com</link>
	<description>an indie games studio</description>
	<lastBuildDate>Fri, 11 May 2012 14:17:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/IncubatorGames" /><feedburner:info uri="incubatorgames" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>We’re Hiring — Freelance 2D Artist</title>
		<link>http://feedproxy.google.com/~r/IncubatorGames/~3/EoFP6SW6OuI/</link>
		<comments>http://www.incubatorgames.com/index.php/20120412/hiring-freelance-2d-artist/#comments</comments>
		<pubDate>Thu, 12 Apr 2012 17:43:48 +0000</pubDate>
		<dc:creator>Radek</dc:creator>
				<category><![CDATA[announcements]]></category>
		<category><![CDATA[2D]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[artist]]></category>
		<category><![CDATA[freelance]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[hire]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[video game]]></category>
		<category><![CDATA[videogame]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.incubatorgames.com/?p=1309</guid>
		<description><![CDATA[Update Thank you to everyone who submitted; the position is now filled. Important: if we have contacted you but you didn&#8217;t hear back from us on Friday, April 27th, e-mail us! We&#8217;ve had some server troubles and might have lost your e-mail. We are starting work on a Facebook puzzle game and are looking to [...]]]></description>
			<content:encoded><![CDATA[<h2>Update</h2>
<p>Thank you to everyone who submitted; the position is now filled.</p>
<p>Important: if we have contacted you but you didn&#8217;t hear back from us on Friday, April 27th, e-mail us! We&#8217;ve had some server troubles and might have lost your e-mail.</p>
<div class="div-separator">
<hr />
</div>
<hr />
<p>We are starting work on a Facebook puzzle game and are looking to hire a freelance artist to handle its visual development and content production.</p>
<p>The game is aimed at a casual audience and requires a clean, crisp, and colourful aesthetic. The project&#8217;s timeline is slated for April 16th, 2012 &#8211; November 30th, 2012, and the position requires the following:</p>
<p>&nbsp;</p>
<ul>
<li>Technical proficiency in Flash and Photoshop/Illustrator.</li>
<li>Concepting and visual development of overall game theme.</li>
<li>Production of various environments and characters (with swap-able body parts/accessories), as well as additional work on UI and visual effects.</li>
<li>Commitment to meeting deadlines and responsiveness throughout the work process.</li>
<li>Availability for future additions to the project beyond the initial scope.</li>
<li>PayPal account for accepting online payment (in CAD currency).</li>
</ul>
<p>&nbsp;</p>
<p>Being familiar with videogame development and local to the Greater Toronto Area and is a plus, but not required.</p>
<p>If you&#8217;re interested, post a direct response below or e-mail us at <strong><a href="mailto:work@incubatorgames.com?subject=[Facebook Game] Look at my pretty pictures!">work@incubatorgames.com</a></strong>. Make sure to include a portfolio link and highlight your cute and original illustrations and production artwork. Judging by past experience, we will not be able to respond to every entry, but we will definitely check out each submission.</p>
<p>Thanks for your time, and we&#8217;ll be sure to update this post once the position has been filled.</p>
<img src="http://feeds.feedburner.com/~r/IncubatorGames/~4/EoFP6SW6OuI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.incubatorgames.com/index.php/20120412/hiring-freelance-2d-artist/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		<feedburner:origLink>http://www.incubatorgames.com/index.php/20120412/hiring-freelance-2d-artist/</feedburner:origLink></item>
		<item>
		<title>Feeding Time is Coming!</title>
		<link>http://feedproxy.google.com/~r/IncubatorGames/~3/sMoacIMT1Y4/</link>
		<comments>http://www.incubatorgames.com/index.php/20120117/feeding-time-is-coming/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 05:43:58 +0000</pubDate>
		<dc:creator>Radek</dc:creator>
				<category><![CDATA[announcements]]></category>
		<category><![CDATA[feeding time]]></category>
		<category><![CDATA[videos]]></category>
		<category><![CDATA[animals]]></category>
		<category><![CDATA[cute]]></category>
		<category><![CDATA[eat]]></category>
		<category><![CDATA[eating]]></category>
		<category><![CDATA[feeding]]></category>
		<category><![CDATA[food]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[ipod touch]]></category>
		<category><![CDATA[pets]]></category>
		<category><![CDATA[puzzle]]></category>
		<category><![CDATA[time]]></category>
		<category><![CDATA[video game]]></category>

		<guid isPermaLink="false">http://www.incubatorgames.com/?p=1241</guid>
		<description />
			<content:encoded><![CDATA[<div class="aligncenter">
<table>
<tr>
<td style="width: 600px; height: 748px; background-image: url(http://www.incubatorgames.com/wp-content/uploads/2012/01/poster_FT_top.jpg)"></td>
</tr>
<tr>
<td style="width: 600px; height: 350px; background-image: url(http://www.incubatorgames.com/wp-content/uploads/2012/01/poster_FT_middle.jpg)">
<div class="content" style="text-align: center;"><object width="580" height="350" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="wmode" value="opaque" /><param name="src" value="http://www.youtube.com/v/GBsbGEdZvxE&amp;hl=en&amp;fs=1&amp;ap=%2526fmt%3D22&amp;hd=1" /><param name="allowfullscreen" value="true" /><embed width="580" height="350" type="application/x-shockwave-flash" src="http://www.youtube.com/v/GBsbGEdZvxE&amp;hl=en&amp;fs=1&amp;ap=%2526fmt%3D22&amp;hd=1" allowFullScreen="true" allowscriptaccess="always" wmode="opaque" allowfullscreen="true" /></object></div>
</td>
</tr>
<tr>
<td style="width: 600px; height: 191px; background-image: url(http://www.incubatorgames.com/wp-content/uploads/2012/01/poster_FT_bottom.jpg)"></td>
</tr>
</table>
</div>
<img src="http://feeds.feedburner.com/~r/IncubatorGames/~4/sMoacIMT1Y4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.incubatorgames.com/index.php/20120117/feeding-time-is-coming/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.incubatorgames.com/index.php/20120117/feeding-time-is-coming/</feedburner:origLink></item>
		<item>
		<title>Project VRP Has Arrived</title>
		<link>http://feedproxy.google.com/~r/IncubatorGames/~3/DqRDmpPCetg/</link>
		<comments>http://www.incubatorgames.com/index.php/20120113/project-vrp-arrived/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 20:08:04 +0000</pubDate>
		<dc:creator>Radek</dc:creator>
				<category><![CDATA[announcements]]></category>
		<category><![CDATA[contract work]]></category>
		<category><![CDATA[videos]]></category>
		<category><![CDATA[educational]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[kids]]></category>
		<category><![CDATA[pipelines]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[Unity3D]]></category>

		<guid isPermaLink="false">http://www.incubatorgames.com/?p=1219</guid>
		<description><![CDATA[Project VRP is our third title developed for Science Alberta. The game takes place in a virtual reality setting where the player must manage various types of workers in order to design, build, and maintain a proper pipeline. Here&#8217;s a trailer of how it looks in action: &#160; &#160; Project VRP was created using Unity3D [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_938" class="wp-caption aligncenter" style="width: 590px"><a href="http://www.incubatorgames.com/wp-content/uploads/2012/01/VRP_virtual.jpg" rel="pretty"><img class="size-full wp-image-938" title="TheCO2Connection" src="http://www.incubatorgames.com/wp-content/uploads/2012/01/VRP_virtual.jpg" alt="VRP virtual Project VRP Has Arrived" width="580" height="363" /></a><p class="wp-caption-text">Pipelines in virtual reality.</p></div>
<p>Project VRP is our third title developed for Science Alberta. The game takes place in a virtual reality setting where the player must manage various types of workers in order to design, build, and maintain a proper pipeline.</p>
<p>Here&#8217;s a trailer of how it looks in action:</p>
<p>&nbsp;</p>
<div class="content" style="text-align: center;"><object width="600" height="362" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="wmode" value="opaque" /><param name="src" value="http://www.youtube.com/v/C43sUwVWEMQ&amp;hl=en&amp;fs=1&amp;ap=%2526fmt%3D22&amp;hd=1" /><param name="allowfullscreen" value="true" /><embed width="600" height="362" type="application/x-shockwave-flash" src="http://www.youtube.com/v/C43sUwVWEMQ&amp;hl=en&amp;fs=1&amp;ap=%2526fmt%3D22&amp;hd=1" allowFullScreen="true" allowscriptaccess="always" wmode="opaque" allowfullscreen="true" /></object></div>
<p>&nbsp;</p>
<p>Project VRP was created using <a href="http://unity3d.com/" target="_blank">Unity3D</a> and can be freely played <a href="http://www.wonderville.ca/asset/ProjectVRP" target="_blank">right here</a>.</p>
<p>Below is a short case study of the project&#8217;s development:</p>
<h2>The Overview</h2>
<p>Following a successful completion of <a href="http://www.incubatorgames.com/index.php/20110323/co2-connection/">The CO2 Connection</a>, we discussed various possible projects with the Science Alberta Foundation. In the end, Project VRP won out and the other proposals were slotted in for a later date.</p>
<p>The game required an extended pre-production process as well as a more complex feature set, so the timeline was set at 8 months with a budget increase of 25k over the previous titles. An iPhone port was also scheduled as part of the initial contract.</p>
<h2>The Challenge</h2>
<p>Project VRP was aimed at a slightly older audience than our previous Science Alberta games, and as such it needed a more mature look. In addition, its numerous scientific concepts were quite advanced but still needed to be conveyed through a single overarching experience.</p>
<div id="attachment_1228" class="wp-caption aligncenter" style="width: 590px"><a href="http://www.incubatorgames.com/wp-content/uploads/2012/01/vrp_01.jpg" rel="pretty[g1219]"><img class=" wp-image-1228" title="vrp_01" src="http://www.incubatorgames.com/wp-content/uploads/2012/01/vrp_01.jpg" alt="vrp 01 Project VRP Has Arrived" width="580" height="363" /></a><p class="wp-caption-text">The fully-3D environment not only allowed for some extra visual flair, but more accurately represented pipeline layouts. </p></div>
<p>The specific goal of the Project VRP was to showcase various types of jobs associated with pipeline production and upkeep. This extended to environmental challenges and acts of nature that had to be reflected in the main gameplay as well.</p>
<p>About half-way through development process, a change in priorities also took place. It was deemed that some scientific concepts needed to be explored in more depth, with the principles of corrosion, welding, and soil composition taking centre-stage.</p>
<h2>The Solution</h2>
<p>The Kelvin mascot was a central connecting theme between all the SAF titles, so we suggested a virtual reality environment to balance the cuteness of the Kelvins. This move allowed us to use darker palettes along with a more high-tech, industrial aesthetic.</p>
<p>Fairly early on in development, SAF ran a focus group with some grade-schoolers to gauge the effectiveness of this approach. The responses were overwhelmingly positive, with not a single complaint or request for alterations.</p>
<div id="attachment_1230" class="wp-caption aligncenter" style="width: 590px"><a href="http://www.incubatorgames.com/wp-content/uploads/2012/01/vrp_02.jpg" rel="pretty[g1219]"><img class=" wp-image-1230" title="vrp_02" src="http://www.incubatorgames.com/wp-content/uploads/2012/01/vrp_02.jpg" alt="vrp 02 Project VRP Has Arrived" width="580" height="363" /></a><p class="wp-caption-text">The codex let the players browse through a listing of all the units and their respective icons.</p></div>
<p>The goal of showcasing numerous professions was tackled via a list of individual &#8220;worker units,&#8221; each one possessing a single ability vital to pipeline construction and maintenance.</p>
<p>The difficulty in representing such a vast number of workers was tackled by separating the units into small groups, initially hinting at which workers should be used for which tasks, briefly introducing each group at the start of every level, and letting the player peek at a codex that contained info on the entire cast.</p>
<p>A bit of randomization was also added via weather effects that slowed down production and tied into real-world emergencies. This core game was then playtested with another group of grade-schoolers, and their feedback led us to add some extra polish to the tutorials and include a few additional visual effects to make the mechanics more intuitive.</p>
<div id="attachment_1229" class="wp-caption aligncenter" style="width: 590px"><a href="http://www.incubatorgames.com/wp-content/uploads/2012/01/vrp_04.jpg" rel="pretty[g1219]"><img class=" wp-image-1229" title="vrp_04" src="http://www.incubatorgames.com/wp-content/uploads/2012/01/vrp_04.jpg" alt="vrp 04 Project VRP Has Arrived" width="580" height="363" /></a><p class="wp-caption-text">The minigames not only tackled some subject matter in more depth, but also served to punctuate the ending phase of each level.</p></div>
<p>When development of the game was temporarily halted due to a change in focus, we worked with SAF on how to best incorporate the new goals. It was eventually decided that adding minigames to better showcase some of the jobs would be the best solution, and these were seamlessly slotted into the end of each production phase.</p>
<p>To minimize the costs of the delay and the extra features, the iPhone port was removed from the feature-list. This covered the majority of the work, and in the end the budget was increased by only 7k.</p>
<h2>The Results</h2>
<p>The final version of Project VRP was very well received by the sponsors, with SAF inquiring into possible future ports to iOS and other mobile devices.</p>
<img src="http://feeds.feedburner.com/~r/IncubatorGames/~4/DqRDmpPCetg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.incubatorgames.com/index.php/20120113/project-vrp-arrived/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.incubatorgames.com/index.php/20120113/project-vrp-arrived/</feedburner:origLink></item>
		<item>
		<title>We’re Hiring — Feeding Time</title>
		<link>http://feedproxy.google.com/~r/IncubatorGames/~3/mjPhqs3mBEg/</link>
		<comments>http://www.incubatorgames.com/index.php/20110828/hiring-feeding-time/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 17:10:36 +0000</pubDate>
		<dc:creator>Radek</dc:creator>
				<category><![CDATA[announcements]]></category>
		<category><![CDATA[2D]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[artist]]></category>
		<category><![CDATA[freelance]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[hire]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[video game]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.incubatorgames.com/?p=1205</guid>
		<description><![CDATA[Update We are finishing up art tests with the most promising submissions, so the ad should now be considered closed. Thank you very much to everyone who applied! Feeding Time is an iOS puzzle game we&#8217;ve been prototyping for a few weeks now, and it&#8217;s getting close to being ready for production. Consequently, we&#8217;re looking [...]]]></description>
			<content:encoded><![CDATA[<h2>Update</h2>
<p>We are finishing up art tests with the most promising submissions, so the ad should now be considered closed.</p>
<p>Thank you very much to everyone who applied!</p>
<div class="div-separator">
<hr /></div>
<hr />
Feeding Time is an iOS puzzle game we&#8217;ve been prototyping for a few weeks now, and it&#8217;s getting close to being ready for production. Consequently, we&#8217;re looking for a freelance artist to give it a colourful and distinct coat of paint.</p>
<p>&nbsp;</p>
<p><strong>Here&#8217;s what&#8217;s required for the job:</strong></p>
<ul>
<li>Strong artistic foundation and ability to create a unique and eye-catching style for the entirety of the game (level assets, UI themes, etc.)</li>
<li>Technical proficiency in Photoshop/Illustrator and asset-production for various resolutions.</li>
<li>Commitment to meeting deadlines and responsiveness throughout the work process.</li>
<li>Availability for future additions to the project beyond the initial scope.</li>
<li>PayPal account for accepting online payment (in CAD currency).</li>
</ul>
<p>&nbsp;</p>
<p>Being familiar with videogame development and local to the Greater Toronto Area and is a plus, but not required.</p>
<p>If you&#8217;re interested, post a direct response below or e-mail us at <strong><a href="mailto:work@incubatorgames.com?subject=[Feeding Time] Look at my pretty pictures!">work@incubatorgames.com</a></strong>. Make sure to include a portfolio link and highlight your cute and original illustrations and production artwork.</p>
<p>Judging by past experience, we will not be able to respond to every entry, but we will definitely check out each submission and contact the most promising individuals with a demo of the game.</p>
<p>Thanks for your time, and we&#8217;ll be sure to update this post once the position has been filled.</p>
<img src="http://feeds.feedburner.com/~r/IncubatorGames/~4/mjPhqs3mBEg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.incubatorgames.com/index.php/20110828/hiring-feeding-time/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://www.incubatorgames.com/index.php/20110828/hiring-feeding-time/</feedburner:origLink></item>
		<item>
		<title>Trudy’s Mechanicals Early Animation Sample</title>
		<link>http://feedproxy.google.com/~r/IncubatorGames/~3/ThUdt7tlXHQ/</link>
		<comments>http://www.incubatorgames.com/index.php/20110810/trudys-mechanicals-early-animation-sample/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 21:30:18 +0000</pubDate>
		<dc:creator>Radek</dc:creator>
				<category><![CDATA[trudy's mechanicals]]></category>
		<category><![CDATA[videos]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[showcase]]></category>
		<category><![CDATA[SRPG]]></category>
		<category><![CDATA[steampunk]]></category>
		<category><![CDATA[tactics]]></category>
		<category><![CDATA[units]]></category>
		<category><![CDATA[workers]]></category>

		<guid isPermaLink="false">http://www.incubatorgames.com/?p=1178</guid>
		<description><![CDATA[While we&#8217;ve been hammering away at our work-for-hire projects, we&#8217;ve also been steadily working on Trudy&#8217;s Mechanicals. Below you can check out a short compilation of our initial unit animations. Since the game is played from a top-down pseudo-isometric perspective, the units are fairly low-poly. There&#8217;s also up to a dozen of them on-screen at [...]]]></description>
			<content:encoded><![CDATA[<p>While we&#8217;ve been <a href="http://www.incubatorgames.com/index.php/20110725/project-vrp-steps/">hammering away at our work-for-hire projects</a>, we&#8217;ve also been steadily working on Trudy&#8217;s Mechanicals. Below you can check out a short compilation of our initial unit animations.</p>
<p><center><iframe src="http://www.youtube.com/embed/LjCGUhqH328?rel=0" frameborder="0" width="600" height="371"></iframe></center>Since the game is played from a top-down pseudo-isometric perspective, the units are fairly low-poly. There&#8217;s also up to a dozen of them on-screen at any one time, along with numerous 3D props and visual effects, so we constantly find ourselves pushing at the technical limitations of the iPad.</p>
<p>The end result looks quite good, though, and I&#8217;m happy with our decision to use 3D models. We debated going with 2D &#8220;cutout&#8221; sprites &#8212; as is the norm with many tactics games &#8212; but eventually chose against it. A fully-3D environment allows us to properly implement dynamic lighting, and the 3D animations come out much smoother than simply using a handful of 2D frames. Our initial concerns with the animations not being as expressive as  in 2D also proved unnecessary, which will be even more evident in our next showcase!</p>
<img src="http://feeds.feedburner.com/~r/IncubatorGames/~4/ThUdt7tlXHQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.incubatorgames.com/index.php/20110810/trudys-mechanicals-early-animation-sample/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.incubatorgames.com/index.php/20110810/trudys-mechanicals-early-animation-sample/</feedburner:origLink></item>
		<item>
		<title>Project VRP First Steps</title>
		<link>http://feedproxy.google.com/~r/IncubatorGames/~3/zdezVBGyBio/</link>
		<comments>http://www.incubatorgames.com/index.php/20110725/project-vrp-steps/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 02:54:46 +0000</pubDate>
		<dc:creator>Radek</dc:creator>
				<category><![CDATA[concepts]]></category>
		<category><![CDATA[contract work]]></category>
		<category><![CDATA[screenshots]]></category>
		<category><![CDATA[educational game]]></category>
		<category><![CDATA[Kelvin]]></category>
		<category><![CDATA[pipeline]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[video game]]></category>

		<guid isPermaLink="false">http://www.incubatorgames.com/?p=1164</guid>
		<description><![CDATA[Project VRP is well underway, and we&#8217;ve just finished our tech demo milestone. We&#8217;ve also prototyped most of the gameplay and are getting ready to push the content, so it seems like a good time for an update. First up, a series of character illustrations and our initial HUD mockup: All of the worker images [...]]]></description>
			<content:encoded><![CDATA[<p>Project VRP is well underway, and we&#8217;ve just finished our tech demo milestone. We&#8217;ve also prototyped most of the gameplay and are getting ready to push the content, so it seems like a good time for an update.</p>
<p>First up, a series of character illustrations and our initial HUD mockup:</p>
<p style="text-align: center;"><a href="http://www.incubatorgames.com/wp-content/uploads/2011/07/VRP-chars1.jpg" rel="pretty"><img class="aligncenter size-full wp-image-1166" title="VRP-chars1" src="http://www.incubatorgames.com/wp-content/uploads/2011/07/VRP-chars1.jpg" alt="VRP chars1 Project VRP First Steps" width="580" height="319" /></a><a href="http://www.incubatorgames.com/wp-content/uploads/2011/07/VRP-chars2.jpg" rel="pretty"><img class="aligncenter size-full wp-image-1167" title="VRP-chars2" src="http://www.incubatorgames.com/wp-content/uploads/2011/07/VRP-chars2.jpg" alt="VRP chars2 Project VRP First Steps" width="580" height="319" /></a><a href="http://www.incubatorgames.com/wp-content/uploads/2011/07/VRP-chars3.jpg" rel="pretty"><img class="aligncenter size-full wp-image-1168" title="VRP-chars3" src="http://www.incubatorgames.com/wp-content/uploads/2011/07/VRP-chars3.jpg" alt="VRP chars3 Project VRP First Steps" width="580" height="319" /></a><a href="http://www.incubatorgames.com/wp-content/uploads/2011/07/VRP-HUD.jpg" rel="pretty"><img class="aligncenter size-full wp-image-1165" title="VRP-HUD" src="http://www.incubatorgames.com/wp-content/uploads/2011/07/VRP-HUD.jpg" alt="VRP HUD Project VRP First Steps" width="580" height="670" /></a></p>
<p>All of the worker images will be present in the game, so they had to be a bit more polished than a typical piece of concept art. The main challenge here was using the original Kelvin design to create a standardized &#8220;virtual reality&#8221; look, all the while making the workers look distinct.</p>
<p>And now for a couple of in-game screens:</p>
<p style="text-align: center;"><a href="http://www.incubatorgames.com/wp-content/uploads/2011/07/VRP-proto1.jpg" rel="pretty"><img class="aligncenter size-full wp-image-1171" title="VRP-proto1" src="http://www.incubatorgames.com/wp-content/uploads/2011/07/VRP-proto1.jpg" alt="VRP proto1 Project VRP First Steps" width="580" height="363" /></a><a href="http://www.incubatorgames.com/wp-content/uploads/2011/07/VRP-proto2.jpg" rel="pretty"><img class="aligncenter size-full wp-image-1172" title="VRP-proto2" src="http://www.incubatorgames.com/wp-content/uploads/2011/07/VRP-proto2.jpg" alt="VRP proto2 Project VRP First Steps" width="580" height="363" /></a></p>
<p>As you can see the HUD has changed quite a bit, and we now have an actual map/model renderer. It was tricky developing the proper shaders to get a look similar to games such as Tron and Darwinia because we&#8217;re limited by the eventual iOS port. Still, I&#8217;m quite happy with the map&#8217;s glow-y, pulsating highlights, and we plan on adding various other visuals in the future to make the virtual world really come to life.</p>
<img src="http://feeds.feedburner.com/~r/IncubatorGames/~4/zdezVBGyBio" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.incubatorgames.com/index.php/20110725/project-vrp-steps/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.incubatorgames.com/index.php/20110725/project-vrp-steps/</feedburner:origLink></item>
		<item>
		<title>Module Music on iPhone/iPad with ChibiXM</title>
		<link>http://feedproxy.google.com/~r/IncubatorGames/~3/afnRcfUQz5I/</link>
		<comments>http://www.incubatorgames.com/index.php/20110627/module-music-ios-chibixm/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 23:38:55 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[MOD]]></category>
		<category><![CDATA[mod player]]></category>
		<category><![CDATA[module]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[XM]]></category>

		<guid isPermaLink="false">http://www.incubatorgames.com/?p=385</guid>
		<description><![CDATA[Module music was once a staple in video game development but has since been mostly replaced by streamed audio formats like MP3 and OGG.  The reason is straightforward &#8211; streamed audio is production environment agnostic whereas module music requires specific production tools and constraints.  However, one of the interesting things about creating games for limited [...]]]></description>
			<content:encoded><![CDATA[<p>Module music was once a staple in video game development but has since been mostly replaced by streamed audio formats like MP3 and OGG.  The reason is straightforward &#8211; streamed audio is production environment agnostic whereas module music requires specific production tools and constraints.  However, one of the interesting things about creating games for limited profiles like iOS devices is that many game development practises in use ten to fifteen years ago become relevant again.  There are some big advantages to using mod music for an iOS game.</p>
<div id="attachment_1034" class="wp-caption aligncenter" style="width: 590px"><a rel="pretty" href="http://www.incubatorgames.com/wp-content/uploads/2011/05/module_music_ios_milky.png" rel="pretty[g385]"><img class="size-full wp-image-1034 " title="Milky Tracker" src="http://www.incubatorgames.com/wp-content/uploads/2011/05/module_music_ios_milky.png" alt="module music ios milky Module Music on iPhone/iPad with ChibiXM" width="580" height="474" /></a><p class="wp-caption-text">Milky Tracker is software used to make module music</p></div>
<p>In a module file each instrument is stored as a single sample while the music is stored as sequenced data. You can think of it as a piano roll, where each notch plays back one of the samples at a specified frequency. Mod&#8217;s have many advantages over MP3 audio for games on iOS:</p>
<ul>
<li>File size does not scale directly with the play time of the music.  Each instrument in the song is stored once as a sample and that data can be reused over and over as the note sequence is processed.</li>
<li>Seamless looping and loop points.  Many songs benefit from a loop back to just after the intro or  infinitely looping an ominous ending phrase.</li>
<li>More control over playback.  If the timer is low, you can increase the speed of playback without affecting pitch to create an organic frenzied feeling.  If Mario gets on a Yoshi you can dynamically mute/un-mute an extra drum channel.</li>
<li>Fine grained optimisation.  With an MP3 you have to deal with the quality of the entire audio clip as a whole when adjusting for quality.  With a module file you can decrease or increase the fidelity of specific samples to get the best quality for your memory and size constraints.</li>
</ul>
<p>Unfortunately, many <a title="BASS" href="http://www.un4seen.com/" target="_blank">existing</a> and <a title="FMOD" href="http://www.fmod.org/" target="_blank">popular</a> solutions for playback on iOS come with licensing fees, but there are alternatives that will do the job. <a title="Chibi XMPlay" href="http://developer.berlios.de/projects/chibi-xmplay" target="_blank">Chibi XMPlay</a>, a lightweight module playback library created by Juan Linietsky and myself, is one of them.</p>
<p>It&#8217;s used for playing a type of module file known as XM (eXtended Module) on limited platforms like the iOS or Nintendo DS.  Best of all it&#8217;s completely open source, licensed under new BSD, and free to use for both commercial and non-commercial applications.</p>
<h2>Using ChibiXM Play</h2>
<p>Chibi XMPlay was written with portability in mind.  As a client it&#8217;s your responsibility to populate memory, file i/o, and mixer function tables for the OS you&#8217;re using.  Lucky for you, I&#8217;ve done this work already for <a title="Trudy's Mechanicals" href="http://www.incubatorgames.com/index.php/category/trudys-mechanicals/">Trudy&#8217;s Mechanicals</a>.  I&#8217;ve also added functionality to the wrapper to play sound effects which is possibly useful as a low latency alternative to Apple&#8217;s numerous methods.  To use ChibiXM do the following:</p>
<ol>
<li>Make sure you have the &#8220;AudioToolbox&#8221; framework imported</li>
<li><a href="http://www.incubatorgames.com/wp-content/uploads/2011/06/ChibiXM.zip">Download the ChibiXM source w/Objective C wrapper</a> and include it</li>
<li>The following code will play an XM file (provided &#8216;song.xm&#8217; is part of your project):</li>
</ol>
<div class="codecolorer-container objc mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:600px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">XMFile<span style="color: #002200;">*</span> song <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>XMFile songWithName<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;song.xm&quot;</span><span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>ChibiXM sharedInstance<span style="color: #002200;">&#93;</span> play<span style="color: #002200;">:</span>song<span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">// Starts playback and retains the XMFile</span><br />
…<br />
player.song <span style="color: #002200;">=</span> <span style="color: #a61390;">nil</span>; <span style="color: #11740a; font-style: italic;">// Releases the XMFile</span><br />
...<br />
XMSample<span style="color: #002200;">*</span> sample <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>XMSample alloc<span style="color: #002200;">&#93;</span> initWithName<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;cacodemon.wav&quot;</span><span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>ChibiXM sharedInstance<span style="color: #002200;">&#93;</span> playSample<span style="color: #002200;">:</span>sample onChannel<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span> withVolume<span style="color: #002200;">:</span><span style="color: #2400d9;">1.0</span> andPanning<span style="color: #002200;">:</span><span style="color: #2400d9;">0.0</span> andPitch<span style="color: #002200;">:</span><span style="color: #2400d9;">1.0</span><span style="color: #002200;">&#93;</span>;<br />
....<br />
<span style="color: #002200;">&#91;</span>sample release<span style="color: #002200;">&#93;</span>;</div></div>
<p>If you just want to see ChibiXM in action here&#8217;s a <a href="http://www.incubatorgames.com/wp-content/uploads/2011/06/ChibiXMExample.zip">complete XCode project</a> you can compile and deploy that shows some graphics and let&#8217;s you switch between some songs with a touch.  Note that the project was created in XCode version 3.13 of the SDK.  To compile under the latest just go to Project Info and change Base SDK to 4.x</p>
<div id="attachment_1141" class="wp-caption aligncenter" style="width: 590px"><a rel="pretty" href="http://www.incubatorgames.com/wp-content/uploads/2011/06/collage.jpg" rel="pretty[g385]"><img class="size-full wp-image-1141     " title="collage" src="http://www.incubatorgames.com/wp-content/uploads/2011/06/collage.jpg" alt="collage Module Music on iPhone/iPad with ChibiXM" width="580" height="474" /></a><p class="wp-caption-text">Just a few games that used module based music solutions! Ah, memories.</p></div>
<h2>Where To Go From Here?</h2>
<p>The wrapper is a simple way to play module music and sound effects, but I encourage you to look further into ChibiXM&#8217;s capabilities.  It has functionality to share a pack of samples among many songs and other goodies that allow easy programmability and control over music playback and mixing.  It&#8217;s also pretty easy to extend if you wish to add DSP effects to playback.</p>
<p>Here are some links to help you explore this approach to putting music into your game:</p>
<p><a href="http://developer.berlios.de/projects/chibi-xmplay" target="_blank">Chibi XmPlay</a> &#8211; Berlios project page for Chibi XmPlay<br />
<a href="http://milkytracker.org/" target="_blank">Milky Tracker</a> &#8211; Multi-platform tracking software that can create XM modules<br />
<a href="http://modarchive.org/" target="_blank">ModArchive</a> &#8211; Massive repository of tracked music<br />
<a href="http://indiegamemusic.com/" target="_blank">IndieGameMusic.com</a> &#8211; Website designed to connect game developers to game musicians</p>
<p>Follow me on twitter! <a href="http://twitter.com/#!/infey" target="_blank">@infey</a></p>
<p><b>** UPDATE **</b><br />
Dave Rempel points out that you may run into an issue if you load many songs into memory at once using xm_song_alloc() as the ChibiXM built-in software mixer (which the iOS code uses) has a statically sized pool of memory for storing samples for all songs currently loaded.  The easiest way to avoid running into the issue is to only load the songs into memory you absolutely need for playback.  However, if you wish to change the size of this buffer based on the requirements of your app you can modify the size of this buffer in xmplay.c, line 113:</p>
<div class="codecolorer-container objc mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:600px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #11740a; font-style: italic;">/* change this limit as you see fit */</span><br />
<span style="color: #6e371a;">#define _XM_SW_MAX_SAMPLES 256</span><br />
...</div></div>
<img src="http://feeds.feedburner.com/~r/IncubatorGames/~4/afnRcfUQz5I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.incubatorgames.com/index.php/20110627/module-music-ios-chibixm/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://www.incubatorgames.com/index.php/20110627/module-music-ios-chibixm/</feedburner:origLink></item>
		<item>
		<title>A Simple Scripting Language – Part 5</title>
		<link>http://feedproxy.google.com/~r/IncubatorGames/~3/aHcqvgHLzHk/</link>
		<comments>http://www.incubatorgames.com/index.php/20110621/simple-scripting-language-part-5/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 16:54:39 +0000</pubDate>
		<dc:creator>Tristan</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[custom]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[trudy's mechanicals]]></category>

		<guid isPermaLink="false">http://www.incubatorgames.com/?p=903</guid>
		<description><![CDATA[Part 1 &#124; Part 2 &#124; Part 3 &#124; Part 4 &#124; Part 5 Its been a while since I&#8217;ve written a post on the simple scripting language.  While steadily working on Trudy&#8217;s Mechanicals,  I&#8217;ve recorded and released an album with my band Bacchus and integrated the simple scripting language into our internal projects. So [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.incubatorgames.com/index.php/20101119/designing-scripting-language-part-1/">Part 1</a> | <a href="http://www.incubatorgames.com/index.php/20101126/simple-scripting-language-part-2/">Part 2</a> | <a href="http://www.incubatorgames.com/index.php/20101214/simple-scripting-language-part-3/">Part 3</a> | <a href="http://www.incubatorgames.com/index.php/20110121/simple-scripting-language-part-4/">Part 4</a> | Part 5</p>
<p>Its been a while since I&#8217;ve written a post on the simple scripting language.  While steadily working on Trudy&#8217;s Mechanicals,  I&#8217;ve recorded and released an album with my band <a href="http://itunes.apple.com/ca/artist/bacchus/id428975281">Bacchus</a> and integrated the simple scripting language into our internal projects. So without further ado, I&#8217;ll be looking at the <a href="http://en.wikipedia.org/wiki/Virtual_machine">virtual machine (VM)</a> that the script&#8217;s compiled output will run on.</p>
<p>The reason I&#8217;ve skipped ahead is that I can&#8217;t start outputting assembly until I&#8217;ve designed the virtual machine (VM) that it will run on.</p>
<p>In the past I&#8217;ve designed <a href="http://en.wikipedia.org/wiki/Stack_machine#Virtual_stack_machines">stack based VM</a>s exclusively,  so this time I decided to try a <a href="http://www.tecgraf.puc-rio.br/~lhf/ftp/doc/jucs05.pdf">register based VM</a>.  Register based VMs  are predominantly RISC based, with fixed size instructions and simple addressing modes.  Register based VMs have the advantage that each instruction can do more than a stack based one, but stack-based assembly has the advantage that it  takes up less space.  There are exceptions to both of these cases.</p>
<h3>An example of the size/complexity trade-off can be seen in the following arithmetic example.</h3>
<p>int x,y;<br />
int z = x*y + 1</p>
<p>Stack-based assembly (JVM inspired) output would be roughly:</p>
<ol>
<li>LOAD X                   (1 to 2 bytes) &#8211; push x on to the top of the stack</li>
<li>LOAD Y                   (1 to 2 bytes) &#8211; push y on to the top of the stack</li>
<li>MULTIPLY                (1 byte) &#8211; remove the top two items from the stack, multiply them and push the result</li>
<li>INCREMENT             (1 byte) &#8211; increment the value on the top of the stack</li>
<li>STORE Z                  (1 to 2 bytes) &#8211; pop the top value from the stack and place it into the local variable z</li>
</ol>
<p>Register-based assembly (ARM inspired) output would be roughly:</p>
<ol>
<li>MULTIPLY                 reg[tmp] = reg[x]*reg[y]    (4 bytes)</li>
<li>ADD_IMMEDIATE      reg[z] = reg[tmp] + 1        (4 bytes)</li>
</ol>
<p>As you can see stack-based assembly would be 5 instructions, with a size between 5 and 8 bytes.  Register based assembly code would be 2 instructions, with a size of 8 bytes</p>
<h2>The Virtual Machine</h2>
<p>In physical computers each additional register has a significant manufacturing expense.   The only cost of adding more registers in a VM is decreasing the number of bits used for opcodes or decreasing the number of registers that can be specified in a single instruction.</p>
<p>Like LUA 5, I found that 6 bits (64  opcodes) is more than sufficient for the number of instruction types I wanted my VM to contain.   The virtual machine I&#8217;ve designed has 256 registers, available to a function at a single time.  Each register can hold either a 32-bit integer or a floating point value.</p>
<p>Each 32 bit instruction falls into one of the following four categories:</p>
<table style="border: 1px solid;">
<tbody>
<tr style="border: 1px solid;">
<td>FORMAT 1 &#8211; Three Registers</td>
<td>src register 2 (10 bits)</td>
<td>src register 1 (8 bits)</td>
<td>dst register (8 bits)</td>
<td>opcode (6 bits)</td>
</tr>
<tr style="border: 1px solid;">
<td>FORMAT 2 &#8211; Two register and an immediate value</td>
<td>src immediate (10 bits)</td>
<td>src register (8 bits)</td>
<td>dst register (8 bits)</td>
<td>opcode (6 bits)</td>
</tr>
<tr style="border: 1px solid;">
<td>FORMAT 3 &#8211; One register and an immediate values</td>
<td colspan="2">immediate (18 bits)</td>
<td>register (8 bits)</td>
<td>opcode (6 bits)</td>
</tr>
<tr>
<td>FORMAT 4 &#8211; Just an immediate value</td>
<td colspan="3">immediate (26 bits)</td>
<td>opcode (6 bits)</td>
</tr>
</tbody>
</table>
<p>In addition to the 256 general purpose registers, two special purpose &#8220;registers&#8221; are required for the VM to execute:</p>
<ul>
<li>PC &#8211; program counter.  A pointer to the next instruction in memory to execute</li>
<li>BP &#8211; base pointer.  A pointer to the location in memory, where the 256 registers start at, for the currently executing function.</li>
</ul>
<h2><strong>List of Instructions</strong></h2>
<p>Below is a table of op-codes that I&#8217;m currently supporting:</p>
<h3>Arithmetic</h3>
<ul>
<li>MOV_IMM -  dst register = 18 bit sign extended immediate</li>
<li>MOV_CONST &#8211; dst register = constant_pool[18 bit immediate]</li>
<li>ADD &#8211; dst register = src register 1  + src register 2</li>
<li>ADD_IMM &#8211; dst register = src register 1 + 10 bit sign extended immediate</li>
<li>SUB &#8211; dst register = src register 1 &#8211; src register 2</li>
<li>MUL &#8211; dst register = src register 1 * src register 2</li>
<li>DIV &#8211; dst register = src register 1 / src register 2</li>
<li>FADD &#8211; dst register = src register 1  + src register 2  (treated as floats)</li>
<li>FSUB &#8211; dst register = src register 1  &#8211; src register 2 (treated as floats)</li>
<li>FMUL &#8211; dst register = src register 1  * src register 2 (treated as floats)</li>
<li>FDIV &#8211; dst register = src register 1  / src register 2 (treated as floats)</li>
</ul>
<h3>Compares / Jumps</h3>
<ul>
<li>CMPEQ &#8211; dst register = (src register 1 == src register 2) ? 1 : 0</li>
<li> CMPNE &#8211; dst register = (src register 1 != src register 2) ? 1 : 0</li>
<li> CMPLT &#8211; dst register = (src register 1 &lt; src register 2) ? 1 : 0</li>
<li> CMPLE &#8211; dst register = (src register 1 &lt;= src register 2) ? 1 : 0</li>
<li> FCMPLT &#8211; dst register = (src register 1 &lt; src register 2) ? 1 : 0   (treated as floats)</li>
<li> FCMPLE &#8211; dst register = (src register 1 &lt;= src register 2) ? 1 : 0  (treated as floats)</li>
<li>JNE &#8211; if (dst register != 0) {  pc += sign extended 18 bit   immediate }</li>
<li>JEQ &#8211; if (dst register == 0) {  pc += sign extended 18 bit immediate }</li>
<li> J &#8211; pc += sign extended 26 bit immediate</li>
</ul>
<h3>Operational</h3>
<ul>
<li>CALL &#8211; call the function [ 18 bit immediate] retrieving parameters starting at  register&#8217;s index</li>
<li>YIELD &#8211; interrupt execution</li>
<li>RETURN &#8211; return the value contained in the destination register of the callee, and resume the exection of the caller</li>
<li>RETURN_I &#8211; return an 18 bit immediate, and resume the execution of the caller<strong><br />
</strong></li>
</ul>
<p>nb.  this is in no way a  final list</p>
<h2>Calling Conventions</h2>
<p>In stack based languages, the arguments to a  function  are taken from the top of the stack. However, in a register based machine, there is no notion of a &#8220;top element of the stack&#8221;.  When we CALL a function we need to specify where the arguments should be retrieved from.</p>
<p>The CALL opcode has a register and an 18 bit immediate value as its parameters.</p>
<p>The 18bit value specifies the index  into a table of functions (internal to the VM) to invoke.  The register parameter specifies where in the current register set that the arguments reside.</p>
<div class="codecolorer-container c mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:600px;"><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&#91;</span>addNumbers<span style="color: #339933;">:</span>  <span style="color: #0000dd;">1</span>  and<span style="color: #339933;">:</span> <span style="color: #0000dd;">2</span> and<span style="color: #339933;">:</span> <span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></div></div>
<p>Would compile to:</p>
<div class="codecolorer-container c mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:600px;"><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">MOV     r0<span style="color: #339933;">,</span>  <span style="color: #339933;">#1</span><br />
MOV     r1<span style="color: #339933;">,</span> <span style="color: #339933;">#2</span><br />
MOV     r2<span style="color: #339933;">,</span> <span style="color: #339933;">#3</span><br />
CALL      r0<span style="color: #339933;">,</span> <span style="color: #009900;">&#91;</span>index of <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #ff0000;">&quot;addNumbers:and:and:&quot;</span><span style="color: #009900;">&#93;</span></div></div>
<p>The table of functions contains the following information:</p>
<ul>
<li>code pointer &#8211; code to execute for the function</li>
<li>number of arguments &#8211; the number of arguments that the function requires</li>
<li>register count &#8211; how many registers this function requires (I&#8217;ll use this later to check that we don&#8217;t exceed memory limits)</li>
</ul>
<p>When the CALL is executed it shuffles the arguments 2 register indexes up and stores the current BP and PC below them for later use.</p>
<p><span style="color: #ff0000;"><strong>?*</strong></span>,?,1 , 2, 3 (inside caller)<br />
?,?,BP,PC, <span style="color: #ff0000;"><strong>1* </strong></span>, 2, 3  (inside callee)</p>
<p>* represents where the current BP is pointing at</p>
<p>PC is now set to the code pointer found in the table of functions<br />
BP is set to point to the first argument to the function.  This has the advantage that all arguments start at register indices 0 through N.  This also places the constraint that the caller must not have any useful data placed in registers higher than the ones being passed as arguments as they may be overwritten by the callee.</p>
<p>When a RETURN instruction is encountered within the callee, the old BP and PC are retrieved so that execution can continue from where it left off in the caller.   If a return value is specified, it is place into the position of the first argument inside the caller.</p>
<p>?,?,BP,PC, <strong>1* </strong>, 2, 3  (inside callee)<br />
<strong>?*</strong>,?,return value, ?,? (inside caller)</p>
<p>&nbsp;</p>
<h2>Implementation</h2>
<p>The software implementation of a VM is usually a combination of  a loop and a switch or jump table:</p>
<div class="codecolorer-container c mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:600px;height:330px;"><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333;">int</span> <span style="color: #339933;">*</span> bp <span style="color: #339933;">=</span> start address of the stack<br />
<span style="color: #993333;">int</span> <span style="color: #339933;">*</span> pc <span style="color: #339933;">=</span> start address of the code to run<br />
<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">;;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
<span style="color: #993333;">int</span> instruction <span style="color: #339933;">=</span> <span style="color: #339933;">*</span>pc<span style="color: #339933;">;</span><br />
pc<span style="color: #339933;">++;</span><br />
<br />
<span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span>OP<span style="color: #009900;">&#40;</span>instruction<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
<span style="color: #b1b100;">case</span>    ADD<span style="color: #339933;">:</span><br />
bp<span style="color: #009900;">&#91;</span>R0<span style="color: #009900;">&#40;</span>instruction<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> bp<span style="color: #009900;">&#91;</span>R1<span style="color: #009900;">&#40;</span>instruction<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> bp<span style="color: #009900;">&#91;</span>R2<span style="color: #009900;">&#40;</span>instruction<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">case</span> ADD_IMM<span style="color: #339933;">:</span><br />
bp<span style="color: #009900;">&#91;</span>R0<span style="color: #009900;">&#40;</span>instruction<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> bp<span style="color: #009900;">&#91;</span>R1<span style="color: #009900;">&#40;</span>instruction<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> IMM10<span style="color: #009900;">&#40;</span>instruction<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span><br />
<br />
….<br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<h3>Constant Pools</h3>
<p>There are two types of constants contained within the VM:  32 bit constants and string constants.</p>
<ul>
<li>32-bit constants are used when a number (int or float) cannot be represented with the number of bits provided by an immediate value.  To get over this limitation, MOV_CONST moves a 32-bit value from the constant pool into a specified register.</li>
<li>Since strings are immutable in the language, the string pool is used to store the actual character representation of them.  When strings are placed into registers by the language,under the hood it is not a string pointer copied, but the index of the string within the string constant pool</li>
</ul>
<h2>Wrap Up</h2>
<p>You can download the <a href="http://www.incubatorgames.com/wp-content/uploads/2011/06/incubatorgames_SSL5.zip">current  version of the VM here</a>.   Next time I&#8217;ll be bridging the gap between the last two posts and starting to output assembly code to run on this VM.</p>
<p>As always you can follow me on twitter at @igtristan</p>
<img src="http://feeds.feedburner.com/~r/IncubatorGames/~4/aHcqvgHLzHk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.incubatorgames.com/index.php/20110621/simple-scripting-language-part-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.incubatorgames.com/index.php/20110621/simple-scripting-language-part-5/</feedburner:origLink></item>
		<item>
		<title>We’re Hiring — Project VRP</title>
		<link>http://feedproxy.google.com/~r/IncubatorGames/~3/3UA0OkeUnzc/</link>
		<comments>http://www.incubatorgames.com/index.php/20110519/hiring-project-vrp/#comments</comments>
		<pubDate>Thu, 19 May 2011 16:48:40 +0000</pubDate>
		<dc:creator>Radek</dc:creator>
				<category><![CDATA[announcements]]></category>
		<category><![CDATA[2D]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[artist]]></category>
		<category><![CDATA[freelance]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[hire]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[video game]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.incubatorgames.com/?p=1040</guid>
		<description><![CDATA[Update The position is now filled. Thank you to everyone who responded to our ad; we received over 120 inquiries! Apologies if we couldn&#8217;t get back to you personally or provide more time for an art test. Overall this was a pretty positive experience, so we plan on posting similar ads in the future if [...]]]></description>
			<content:encoded><![CDATA[<h2>Update</h2>
<p>The position is now filled.</p>
<p>Thank you to everyone who responded to our ad; we received over 120 inquiries! Apologies if we couldn&#8217;t get back to you personally or provide more time for an art test.</p>
<p>Overall this was a pretty positive experience, so we plan on posting similar ads in the future if we need extra help.</p>
<p>Thanks again.</p>
<div class="div-separator">
<hr /></div>
<hr />
<p>We are starting a new contract project with <a href="http://www.sciencealberta.org/" target="_blank">Science Alberta</a> and are looking to hire a freelance artist.</p>
<div id="attachment_1041" class="wp-caption aligncenter" style="width: 590px"><a rel="pretty" href="http://www.incubatorgames.com/wp-content/uploads/2011/05/ksr_01.jpg" rel="pretty[g1040]"><img class="size-full wp-image-1041" title="ksr_01" src="http://www.incubatorgames.com/wp-content/uploads/2011/05/ksr_01.jpg" alt="ksr 01 Were Hiring    Project VRP" width="580" height="363" /></a><p class="wp-caption-text">The title screen of Kelvin&#39;s Space Ranch showcasing the Kelvin mascot.</p></div>
<p>The game is titled Project VRP and is a continuation of the Kelvin series, but aimed at a slightly older audience (8-12 year olds instead of 6-10 year olds). It takes place in a 3D virtual reality setting similar to TRON and other iconic &#8220;cyberspace&#8221; visualizations. Its levels are procedurally generated, but need to be enhanced with various 2D artwork.</p>
<p>&nbsp;</p>
<p><strong>Here&#8217;s what we require:</strong></p>
<ul>
<li>2D illustrations of the Kelvin mascot clad in various work uniforms. These will be used in-game and need to emulate the existing Kelvin concepts.</li>
<li>Large-scale illustrations of the setting and its contents to be used in-game and as promotional material.</li>
<li>Futuristic UI components and icons for game-navigation and general polish.</li>
</ul>
<p>&nbsp;</p>
<p>References for these will be supplied by us, but a relatively large amount of creative freedom will remain with the artist.</p>
<p>Basic experience with 3D modeling/animations, game development and video editing are a plus, but not required.</p>
<div id="attachment_1042" class="wp-caption aligncenter" style="width: 590px"><a rel="pretty" href="http://www.incubatorgames.com/wp-content/uploads/2011/05/ksr_13.jpg" rel="pretty[g1040]"><img class="size-full wp-image-1042" title="ksr_13" src="http://www.incubatorgames.com/wp-content/uploads/2011/05/ksr_13.jpg" alt="ksr 13 Were Hiring    Project VRP" width="580" height="363" /></a><p class="wp-caption-text">An in-game shot of Kelvin in his overalls tending to a futuristic farm.</p></div>
<p>Our preference is to work with someone local to the GTA, followed by other Ontario residents, but we will consider all applicants. Work on the project will begin immediately, and we&#8217;d like the artist to be available (at least partially) until the game&#8217;s completion on November 1st, 2011. <strong>All payments will be done via PayPal in CAD currency</strong>.</p>
<p>If you&#8217;re interested, post a direct response below or e-mail us at <strong><a href="mailto:work@incubatorgames.com?subject=[Project VRP] Look at my pretty pictures!">work@incubatorgames.com</a></strong> with the following information: a link to your online portfolio highlighting any applicable pieces, a resume or a brief bio, and a rough working fee (preferably based on previous work examples).</p>
<p>Thanks for your time, and we&#8217;ll be sure to update this post once the position has been filled.</p>
<img src="http://feeds.feedburner.com/~r/IncubatorGames/~4/3UA0OkeUnzc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.incubatorgames.com/index.php/20110519/hiring-project-vrp/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		<feedburner:origLink>http://www.incubatorgames.com/index.php/20110519/hiring-project-vrp/</feedburner:origLink></item>
		<item>
		<title>Trudy’s Language</title>
		<link>http://feedproxy.google.com/~r/IncubatorGames/~3/JOCgn0do3wU/</link>
		<comments>http://www.incubatorgames.com/index.php/20110506/trudys-language/#comments</comments>
		<pubDate>Sat, 07 May 2011 03:23:31 +0000</pubDate>
		<dc:creator>Radek</dc:creator>
				<category><![CDATA[trudy's mechanicals]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[names]]></category>
		<category><![CDATA[proverbs]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[setting]]></category>
		<category><![CDATA[slang]]></category>
		<category><![CDATA[Stemapunk]]></category>
		<category><![CDATA[text]]></category>
		<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://www.incubatorgames.com/?p=1022</guid>
		<description><![CDATA[JRPGs, and by extension SRPGs, have an unfortunate tendency to use text as filler. Even with numerous types of fast-forward buttons &#8212; something of a band aid solution &#8212; their dialogue sequences are often very lengthy. Verbal diarrhea is never necessary, though, and with Trudy&#8217;s Mechanicals we&#8217;re taking multiple steps to avoid it: Dialogue sequences [...]]]></description>
			<content:encoded><![CDATA[<p>JRPGs, and by extension SRPGs, have an unfortunate tendency to use text as filler. Even with numerous types of fast-forward buttons &#8212; something of a band aid solution &#8212; their dialogue sequences are often very lengthy.</p>
<div id="attachment_1029" class="wp-caption aligncenter" style="width: 590px"><a rel="pretty" href="http://www.incubatorgames.com/wp-content/uploads/2011/05/luminous_arc.png" rel="pretty[g1022]"><img class="size-full wp-image-1029" title="luminous_arc" src="http://www.incubatorgames.com/wp-content/uploads/2011/05/luminous_arc.png" alt="luminous arc Trudys Language" width="580" height="432" /></a><p class="wp-caption-text">Luminous Arc starts off with roughly 150 text boxes. Such quantities are pretty common throughout the entire experience.</p></div>
<p>Verbal diarrhea is never necessary, though, and with Trudy&#8217;s Mechanicals we&#8217;re taking multiple steps to avoid it:</p>
<ol>
<li>Dialogue sequences are often optional. If the player doesn&#8217;t want to listen to a character, he can simply choose not to initiate the conversation.</li>
<li>Colourful tid-bits are non-blocking. This means that if an enemy or an NPC wants to deliver a <a href="http://www.escapistmagazine.com/articles/view/issues/issue_174/5435-Bark-Bark-Bark" target="_blank">bark-style</a> one-liner, it simply fades in and out. The text itself is aesthetic and doesn&#8217;t hijack the player&#8217;s interface, leaving him free to navigate the UI or issue battle commands.</li>
<li>Cutscenes are short and to the point. Characters don&#8217;t prattle on if they don&#8217;t have anything interesting to say, and the player never needs to wait too long before he&#8217;s back in the &#8220;driver&#8217;s seat&#8221;. A skip option is also implemented as it&#8217;s an expected standard for those who are not interested in the story or might be replaying the game.</li>
</ol>
<p>This less-is-more approach means that our script is much, much smaller than that of a typical tactics game. As a result, we&#8217;re taking extra care to make sure the language itself feels unique and interesting.</p>
<p>Here are some examples:</p>
<h2>Slang</h2>
<p>Planescape: Torment is famous for its cant, <a href="http://www.tlucretius.net/Sophie/Castle/victorian_slang.html" target="_blank">Victorian slang</a> that adds personality to its setting. Seeing as Steampunk has its roots in a romanticized Victorian era, we decided to take a similar approach with Trudy.</p>
<div id="attachment_1031" class="wp-caption aligncenter" style="width: 590px"><a rel="pretty" href="http://www.incubatorgames.com/wp-content/uploads/2011/05/valerjan_expressions.png" rel="pretty[g1022]"><img class="size-full wp-image-1031" title="valerjan_expressions" src="http://www.incubatorgames.com/wp-content/uploads/2011/05/valerjan_expressions.png" alt="valerjan expressions Trudys Language" width="580" height="193" /></a><p class="wp-caption-text">A few examples of facial expression that accompany the text of Trudy&#39;s main characters.</p></div>
<p>Although it&#8217;s tempting to go overboard with jargon, it doesn&#8217;t help if the script can&#8217;t be understood by most people. Consequently the use of slang is somewhat conservative and the words we picked often have current-day connotations.</p>
<p>Here are some examples:</p>
<ul>
<li><strong>Barker &#8211; </strong><em>A gun. </em>Not immediately obvious, but easily grasped given proper context.</li>
<li><strong>Nibbed &#8211; </strong><em>Arrested. </em>As in nabbed, or kidnapped. The word doesn&#8217;t have a strict association with the police, but its sentiment is easily understood.</li>
<li><strong>Lushery &#8211; </strong><em>A public drinking den. </em>Lush isn&#8217;t a common term for alcohol, but this one was just too amusing to pass up.</li>
</ul>
<h2>Names</h2>
<p>Naming characters in a fictional setting is a bit tricky. You typically want to steer clear of popular current-day names that might break the suspension of disbelief, e.g., Mike Smith or John Brown. On the other hand, something truly alien might prove too difficult to vocalize internally, while symbolic names like &#8220;Black Lightning&#8221; tend to come off awkward and hokey.</p>
<p>Of course we could&#8217;ve simply used Victorian era names, but I wanted to differentiate Trudy from typical Steampunk pulp.</p>
<div id="attachment_1030" class="wp-caption aligncenter" style="width: 590px"><a rel="pretty" href="http://www.incubatorgames.com/wp-content/uploads/2011/05/tatjana_expressions.png" rel="pretty[g1022]"><img class="size-full wp-image-1030" title="tatjana_expressions" src="http://www.incubatorgames.com/wp-content/uploads/2011/05/tatjana_expressions.png" alt="tatjana expressions Trudys Language" width="580" height="193" /></a><p class="wp-caption-text">Unlike the lead stars of the game, NPC dialogues are not accompanied by &quot;talking heads&quot;. This is to save on production costs as well as prevent NPC barks from taking up too much space on the screen.</p></div>
<p>Our solution was to use old Greek and Slavic names.</p>
<p>The result is not entirely alien, but it&#8217;s enough to stand out. Characters are given names such as Renatus, Tatjana, Darko, Milos, Daria, etc., which keeps the naming conventions consistent and adds a bit of flavour to the world.</p>
<h2>Proverbs</h2>
<p>Finally, <a href="http://creativeproverbs.com/cp-index.htm" target="_blank">proverbs</a> are my favourite trick for imbuing a setting with a sense of culture and history.</p>
<p>Proverbs are usually quite short, but they convey words of wisdom that often speak volumes about an entire society. In keeping with our naming approach, I picked out a couple of Greek and Slavic proverbs suitable to our script:</p>
<blockquote><p>&#8220;Gray hair is a sign of age, not wisdom.&#8221;</p>
<p>&#8220;As long as a child does not cry, it does not matter what pleases it.&#8221;</p>
<p>&#8220;Eat and drink with your relatives; do business with strangers.&#8221;</p></blockquote>
<img src="http://feeds.feedburner.com/~r/IncubatorGames/~4/JOCgn0do3wU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.incubatorgames.com/index.php/20110506/trudys-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.incubatorgames.com/index.php/20110506/trudys-language/</feedburner:origLink></item>
	</channel>
</rss>

