<?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></title>
	<atom:link href="http://blog.vortixgames.com/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.vortixgames.com</link>
	<description></description>
	<lastBuildDate>Fri, 10 Feb 2012 19:13:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Palisade Guardian &#8211; the new instalment</title>
		<link>http://blog.vortixgames.com/palisade-guardian-the-new-instalment</link>
		<comments>http://blog.vortixgames.com/palisade-guardian-the-new-instalment#comments</comments>
		<pubDate>Fri, 10 Feb 2012 18:48:46 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Caught our Attention]]></category>
		<category><![CDATA[The art of VGS]]></category>
		<category><![CDATA[FlashGameBlogs]]></category>
		<category><![CDATA[Mark Loika]]></category>
		<category><![CDATA[Palisade Guardian]]></category>

		<guid isPermaLink="false">http://blog.vortixgames.com/?p=1119</guid>
		<description><![CDATA[Our good friend Mark Loika has made available the beta version of Palisade Guardian 3, a game I had the pleasure of making the art for. I must say its my favorite of the 3. The guns feel really nice and the overall tone of the game is really my thing. It was a really [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.vortixgames.com/wp-content/uploads/2012/02/palisadeguardianlogo.jpg"><img class="alignnone size-full wp-image-1120" title="palisadeguardianlogo" src="http://blog.vortixgames.com/wp-content/uploads/2012/02/palisadeguardianlogo.jpg" alt="" width="500" height="160" /></a></p>
<p>Our good friend Mark Loika has made available the beta version of Palisade Guardian 3, a game I had the pleasure of making the art for.</p>
<p>I must say its my favorite of the 3. The guns feel really nice and the overall tone of the game is really my thing. It was a really fun project and I hope you all enjoy playing it.</p>
<p>Try it here:<br />
<a href="http://palisadeguardian.com/">http://palisadeguardian.com/</a></p>
<p>Marco (from VGS)</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vortixgames.com/palisade-guardian-the-new-instalment/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AI problem with an elegant solution</title>
		<link>http://blog.vortixgames.com/ai-problem-with-an-elegant-solution</link>
		<comments>http://blog.vortixgames.com/ai-problem-with-an-elegant-solution#comments</comments>
		<pubDate>Fri, 10 Feb 2012 00:04:34 +0000</pubDate>
		<dc:creator>Vlad</dc:creator>
				<category><![CDATA[Dev Journal: Danger Zone]]></category>
		<category><![CDATA[The code of VGS]]></category>
		<category><![CDATA[Danger Zone]]></category>
		<category><![CDATA[FlashGameBlogs]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://blog.vortixgames.com/?p=1110</guid>
		<description><![CDATA[Hi everyone, Vlad here! I&#8217;m excited! It&#8217;s really nothing special but I had one of those eureka moments! Here goes: The problem The current game has a number of mechanical hazards. To test the animations Marco designed I simply added a counter that would put the hazard on a waiting state and then run the [...]]]></description>
			<content:encoded><![CDATA[<p>Hi everyone, Vlad here!</p>
<p>I&#8217;m excited! It&#8217;s really nothing special but I had one of those eureka moments!</p>
<p>Here goes:</p>
<h2>The problem</h2>
<p>The current game has a number of mechanical hazards. To test the animations Marco designed I simply added a counter that would put the hazard on a waiting state and then run the animation. While the animation was running the hazard was on an attack state that checks if any actors are in the area it affects.</p>
<p>Easy enough but this had these problems:</p>
<p>1. In theory every hazard of the same type has the same loop. Game design wise <a href="http://en.wikipedia.org/wiki/Suspension_of_disbelief#Video_games">suspension of disbelief</a> fails.</p>
<p>2. In practice and since the game updates only part of the map what happens is that each hazard has its own loop but the level designer has no control over it.</p>
<p>3. To give a wider control to the level designer the game would need to update every hazard per frame&#8230; see the problem here?</p>
<h2>The solution</h2>
<p>What if most of the hazards had a central AI point? The first time we discussed something like this was when Marco and Pedro were working on <a href="http://blog.vortixgames.com/tag/hajime">Hajime</a>. The objective was to have the AI army making better decisions considering the overall scenario instead of having each unit deciding the next move individually.</p>
<p>In this case we want that the most basic hazard behaviors to be the same regardless of being updated or not while maintaining the suspension of disbelief. The generic solution (we are considering having configurable groups and individual hazards still) is to have chained hazards based on their tile position.</p>
<p>I&#8217;m currently writing the class that will serve as the hazard commander. It is amazingly simple. The following code is almost pseudo-code and a very simple version of what I&#8217;m writing because there are several hazards and each has a different frame count.</p><pre class="crayon-plain-tag"><code>public function update():void {
	// For each hazard
	frame++;
	if (frame == hazardTexture.collectionLength()) {
		chain = chain == maxChains ? 0 : chain + 1;
	}
}

public function getFrameOf(id:int):int {
	if (id == chain) return frame
	else return 0;
}</code></pre><p>The commander is updated each frame. The code is pretty simple, it just increments the frame (not just one counter but one for each hazard type) and if the animation has ended it restarts and increments a chain counter.</p>
<p>Each hazard has a place in the chain. If it is on a part of the map that is updated, it will ask the commander what frame it should have passing its chain id. Even if it has not been updated recently it will update perfectly in sync with the rest of the game.</p>
<p>For this to be pretty and make sense and allow several automatic behaviors we have to understand what chain id means.</p><pre class="crayon-plain-tag"><code>private var id:int = (tileX + tileY % maxChains)</code></pre><p>Ok, looks simple, what does this mean? The graphic below is a capture of the spreadsheet where I tested the formula. The top left number is maxChains and in each cell is the chain id of each tile.</p>
<p><a href="http://blog.vortixgames.com/wp-content/uploads/2012/02/grid.jpg"><img class="aligncenter size-full wp-image-1113" title="autogrid" src="http://blog.vortixgames.com/wp-content/uploads/2012/02/grid.jpg" alt="" width="265" height="254" /></a></p>
<p>So if we have several hazards of the same type in a row, they will act in order, both horizontally and vertically. If there are a lot tightly grouped the player will see a diagonal movement giving a sense of some automatism behind the hazards which is a nice add-on since it fits the game.</p>
<p>But that&#8217;s not all, we can use the exact same code commander and give the hazards a different way of using their id. For instance we can have a method that will give an attacking frame to odd and then even ids making more active zones of the the map.</p>
<h2>Ok&#8230; that&#8217;s simple, what&#8217;s the Eureka all about?</h2>
<p>To be honest this problem was haunting me for a couple of days. I knew I wanted a central decision point (not really a big AI thing but still&#8230;) for most non-manually configured hazard for performance and consistency reasons. Everything I thought of was too complicated. Then I thought about this simple chain and the only problem I really had was to have a formula that would allow  a consistent behavior, like horizontal, vertical and diagonal chains. That little id formula was the eureka moment because it is so simple, so elegant and solves one major problem.</p>
<p>Like Einstein said:</p>
<blockquote><p>Make things as <em>simple</em> as possible, <em>but not simpler</em></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.vortixgames.com/ai-problem-with-an-elegant-solution/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Performance vs Error Checking</title>
		<link>http://blog.vortixgames.com/performance-vs-error-checking</link>
		<comments>http://blog.vortixgames.com/performance-vs-error-checking#comments</comments>
		<pubDate>Sun, 05 Feb 2012 00:55:11 +0000</pubDate>
		<dc:creator>Vlad</dc:creator>
				<category><![CDATA[Dev Journal: Danger Zone]]></category>
		<category><![CDATA[The code of VGS]]></category>
		<category><![CDATA[Bold Pixel Engine]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Danger Zone]]></category>
		<category><![CDATA[FlashGameBlogs]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://blog.vortixgames.com/?p=1104</guid>
		<description><![CDATA[Hi everyone, Vlad here! Seems like on a thing versus some other thing rampage with Application Design vs Game Design shortly followed by this post. I guess that&#8217;s a good thing, it means there are challenges and doubts and that we need to research. This post is also inspired by some books I&#8217;ve been reading lately and [...]]]></description>
			<content:encoded><![CDATA[<p>Hi everyone, Vlad here!</p>
<p>Seems like on a thing versus some other thing rampage with <a href="http://blog.vortixgames.com/application-design-vs-game-design-round-1">Application Design vs Game Design</a> shortly followed by this post. I guess that&#8217;s a good thing, it means there are challenges and doubts and that we need to research.</p>
<p>This post is also inspired by some books I&#8217;ve been reading lately and that I highly recommend: <a href="http://shop.oreilly.com/product/9780596519544.do">The Productive Programmer</a> that was influenced by <a href="http://pragprog.com/the-pragmatic-programmer">The Pragmatic Programmer</a>.</p>
<h2>Problem #1</h2>
<p>We are writing code and there&#8217;s not such thing as writing code without bugs. Sometimes our oldest, most used code, that code that we trust each of our games with gets into a specific spot where a hidden bug appears and we spend hours and hours figuring out what&#8217;s happening.</p>
<h2>Solution #1 is Problem #2</h2>
<p>There are several solutions to this. Writing code that includes testing is in my opinion the best. The problem with this, game development wise and specifically in scripted languages such as AS3, is that this makes the code much slower. The solution was checking for inconsistencies and not performing operations instead of throwing errors and exceptions.</p>
<p>I ended up creating conditions for use. For instance our blit package uses three different types: the core, the object and the texture. The core keeps the state of the whole system, the object keeps the state of what and where to render and the texture keeps the state of BitmapData. If the object did not have a texture it would simply not render. Sounds pretty cool, right?</p>
<p>To be honest&#8230; wrong&#8230;</p>
<h3>Problem #2.1</h3>
<p>First problem was the times where the position had NaN value instead of a Number. This rarely happened but every time it did it was a huge headache to identify why and then track the source of the bug down. While this seems unrelated, the fact was the it looked like the texture did not exist. So I had to check if the texture was created, if it was passed, if it was there at all and the worst part was that if the texture was there as it should, where the hell was the problem?</p>
<h3>Problem #2.2</h3>
<p>Performance wise checking if there is a texture is absolutely dumb! 99% of the times there is a texture present. More, the object class has a visible variable. If the object does not have a texture why is it visible in the first place?</p>
<p>So while apparently I solved a problem by checking if the texture was present and not performing any blit operation if it wasn&#8217;t, the truth is that both performance wise (not that serious by the way, it&#8217;s just a if statement) and the unwanted problems it induced in the code backfired from time to time.</p>
<p>I spread this type of behavior through the code. While one if statement does not have a large impact in performance, a lot of checking piles up and I had a lot!</p>
<h2>Solution #2</h2>
<p>A short story and a riddle both taken from those books that explain my thoughts on the &#8216;final&#8217; (we&#8217;ll see about that!) solution for these problems.</p>
<p>The first one was when one of the authors was hired as a consultant for a development project where the coders sent broken code to the version control system. What he did was to create a routine where the version control server would compile the code that was pushed. Every time the compilation didn&#8217;t work the server would send an email with the error. With the amount of mail with errors constantly piling up on mailboxes, one of the coders asked if there was a way of not getting that much email. The consultant replied: &#8220;Sure, don&#8217;t push code with errors!&#8221;</p>
<p>The riddle is&#8230; what code takes not time to be executed? The one that is not compiled.</p>
<p>So the solution is to write code that allows zero error tolerance while not compiling it. The way to achieve this is with <a href="http://livedocs.adobe.com/flex/3/html/help.html?content=compilers_21.html">conditional compilation</a> which can be used in several way but these are the ones I believe the most useful is to use code blocks, like this:</p><pre class="crayon-plain-tag"><code>private function someFunction():void {
	CONFIG::debug {
		// Development code
	}

	CONFIG::release {
		// Final code
	}

	// Both dev and final code
}</code></pre><p>
Inside the same function, different code is compiled depending on the current configuration. We can have several checks with exceptions and errors being thrown and then have a &#8216;don&#8217;t check at all&#8217; version in the release configuration.</p>
<p>This is a two stage solution really. On one hand every time I do something stupid, I get errors so my code has to be perfectly implemented at least when it comes to our framework. On the other hand the same code that make me code as best as I can is also the code that does not run in the final version.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vortixgames.com/performance-vs-error-checking/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Dear Spammers</title>
		<link>http://blog.vortixgames.com/dear-spammers</link>
		<comments>http://blog.vortixgames.com/dear-spammers#comments</comments>
		<pubDate>Thu, 02 Feb 2012 09:38:28 +0000</pubDate>
		<dc:creator>Vlad</dc:creator>
				<category><![CDATA[Funny Facts]]></category>
		<category><![CDATA[Spam]]></category>

		<guid isPermaLink="false">http://blog.vortixgames.com/?p=1099</guid>
		<description><![CDATA[I understand that you want traffic on your website. I understand that with the amount of anti-spamming tools available your life can be pretty dull and even hard. The thing is that this blog has a anti-spamming tool and the ones that it doesn&#8217;t catch must be approved by us. One of the options is [...]]]></description>
			<content:encoded><![CDATA[<p>I understand that you want traffic on your website. I understand that with the amount of anti-spamming tools available your life can be pretty dull and even hard. The thing is that this blog has a anti-spamming tool and the ones that it doesn&#8217;t catch must be approved by us. One of the options is to trash your comment, the other is to spam it. When we spam it we will never see another comment from you since the blog software will consider each and every post of yours as spam. So the million dollar question is:</p>
<p>Why bother?!</p>
<p>It&#8217;s not really a big annoyance to us really and I&#8217;m not even upset. What I&#8217;m trying to understand is why. This is 2012 already and it doesn&#8217;t make much sense telling us time and time again that you love our posts because we (and the rest of the geek/techy/nerd world) know that you didn&#8217;t even read it so&#8230;</p>
<p>Why bother?</p>
<p>I&#8217;m not looking for an answer, I just find it somewhat funny and decided that since the stuff I want to write about is somewhat cloudy right, I could giggle a bit at your expense. Will be even funnier if some of you actually spam saying that you really love our posts.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vortixgames.com/dear-spammers/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Enhancing by refactoring</title>
		<link>http://blog.vortixgames.com/enhancing-by-refactoring</link>
		<comments>http://blog.vortixgames.com/enhancing-by-refactoring#comments</comments>
		<pubDate>Sat, 28 Jan 2012 02:00:03 +0000</pubDate>
		<dc:creator>Vlad</dc:creator>
				<category><![CDATA[Dev Journal: Danger Zone]]></category>
		<category><![CDATA[The code of VGS]]></category>
		<category><![CDATA[Bold Pixel Engine]]></category>
		<category><![CDATA[Danger Zone]]></category>
		<category><![CDATA[Encapsulation]]></category>
		<category><![CDATA[Inheritance]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://blog.vortixgames.com/?p=1091</guid>
		<description><![CDATA[Two years ago I read a lot about OOP. Every time I picked a new concept in some forum or chat I&#8217;d do my best to understand and apply it. I was eager to improve my coding knowledge and skills but everything we code as a purpose and an audience and if we forget the [...]]]></description>
			<content:encoded><![CDATA[<p>Two years ago I read a lot about OOP. Every time I picked a new concept in some forum or chat I&#8217;d do my best to understand and apply it. I was eager to improve my coding knowledge and skills but everything we code as a purpose and an audience and if we forget the purpose or the audience we are introducing more problems with the knowledge we have than solving problems.</p>
<p>That happened with Bold Pixel. At some point in time Bold Pixel became a monster to please developers instead of a tool to be more productive in my purpose to my audience: create games for players! People play games, not code!</p>
<p>I stopped over-engineering sometime ago and started reading about how to become a better programmer not by writing better code, but by writing the exact code to solve the exact problem. This brought a new problem: what to do with Bold Pixel and how to maintain and evolve it? First thing was to start a new package and only bring in classes that I needed but wire the classes up to be as slim and straight to the point as possible. I do that all the time to build up my code base right now, but that&#8217;s not all. Here&#8217;s the whole process I&#8217;m using right now.</p>
<h2>Start simple</h2>
<p>&nbsp;</p><pre class="crayon-plain-tag"><code>class BlitObject {

	// Position
	public var x:Number = 0;
	public var y:Number = 0;

	// Rendering
	public var visible:Boolean = true;

	public function BlitObject():void {
		// Constructor
	}

	internal function render():void {
		// Render stuff here
	}
}</code></pre><p>The class above can be a stub for a simple blit object. From a OOP perspective it breaks encapsulation completely since x, y and visible variables should be private but seriously, do I really need those to be private or protected and have getters and setters? No I don&#8217;t so no need to over-engineer it. The only thing I want to have contained is the render method that should only be called by the blit engine that lives in the same package.</p>
<p>The blit object only responsibility is to copyPixels or draw on a given world position translating camera position on the fly.</p>
<p>Writing a simple class like this is fast, performs fast, case closed.</p>
<h2>Evaluate new needs</h2>
<p>Now I need a tile map class. This class is also a blit object so following the <a href="http://en.wikipedia.org/wiki/Is-a">&#8220;is a&#8221;</a> versus <a href="http://en.wikipedia.org/wiki/Has-a">&#8220;has a&#8221;</a> rule tile map should inherit blit object. Considering the blit engine has a camera, the tile map won&#8217;t move. This brings two new problem.</p>
<p>1. If the tile map doesn&#8217;t move, why do I have x and y publicly accessible?<br />
2. I want my camera to follow blit objects so blit objects must have x and y variables (or properties). How can I make tile map be recognized as a blit object, have x and y and have none of those altered?</p>
<p>Sounds messy&#8230;</p>
<p>I could write a Blittable interface that would define a render function and getter and setter methods for x and y. The problem is that if there&#8217;s something I want to keep in the package scope is the render function and interfaces define public interfaces.</p>
<p>The solution is to convert blit object in an abstract class and have its original functionality moved to a new graphic class.</p><pre class="crayon-plain-tag"><code>class BlitObject {

	// Rendering
	public var visible:Boolean = true;

	internal function render():void {
		throw new Error(&quot;Abstract function called. Override render()!&quot;);
	}

	public function get x():Number {
		return NaN;
	}

	public function set x(v:Number):void {
		throw new Error(&quot;Abstract function called or property x not available.&quot;);
	}

	public function get y():Number {
		return NaN;
	}

	public function set y(v:Number):void {
		throw new Error(&quot;Abstract function called or property y not available.&quot;);
	}	
}

class Graphic extends BlitObject {

	// Position
	private var _x:Number = 0;
	private var _y:Number = 0;

	override internal function render():void {
		// Render stuff here
	}

	// Position
	override public function get x():Number { return _x }
	override public function set x(v:Number):void { _x = v }
	override public function get y():Number { return _y }
	override public function set y(v:Number):void { _y = v }
}

class TileMap extends BlitObject {

	override internal function render():void {
		// Render the tile map
	}
}</code></pre><p><p>
Problem solved. The class responsibilities are much better defined.</p>
<p>1. A blit object renders and has x and y coordinates. Since it is an abstract class everything we try to do with it directly will result in an error.<br />
2. A graphic is a world movable blit object that renders by copyPixel or draw.<br />
3. A tile map is a world static blit object that renders very large objects by copyPixel or draw  based on a predefined xml specification.</p>
<h2>Conclusion</h2>
<p>What&#8217;s the conclusion here? Well for starters by this time I&#8217;d have a couple of interfaces and probably a helpers. I&#8217;m not saying it is wrong to have interfaces and helpers, actually it is preferable, but it would be coding for the sake of coding instead of coding for the sake of making a game. It took me 10 minutes to do this and while I was at it the BlitObject class also extends a ListObject class that really speed up the iteration, addition and removal of objects from the blit engine.</p>
<p>Still&#8230; I did repeat my self and the code has suffered another refactoring since then. I&#8217;ll leave that for another post but I wonder if you know what&#8217;s repeated&#8230; <img src='http://blog.vortixgames.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vortixgames.com/enhancing-by-refactoring/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Application Design vs Game Design Round 1</title>
		<link>http://blog.vortixgames.com/application-design-vs-game-design-round-1</link>
		<comments>http://blog.vortixgames.com/application-design-vs-game-design-round-1#comments</comments>
		<pubDate>Wed, 25 Jan 2012 00:15:06 +0000</pubDate>
		<dc:creator>Vlad</dc:creator>
				<category><![CDATA[Dev Journal: Danger Zone]]></category>
		<category><![CDATA[The code of VGS]]></category>
		<category><![CDATA[The design of VGS]]></category>
		<category><![CDATA[Danger Zone]]></category>
		<category><![CDATA[Data Structures]]></category>
		<category><![CDATA[FlashGameBlogs]]></category>
		<category><![CDATA[Topdown]]></category>

		<guid isPermaLink="false">http://blog.vortixgames.com/?p=1083</guid>
		<description><![CDATA[Hi everyone, Vlad here. Let me start by saying that the title is a bit misleading. For starters it is not an actual bout but more a decision making process. It also gives the impression I&#8217;ll write more about this or that I have some kind of plan about this subject. I don&#8217;t, it just [...]]]></description>
			<content:encoded><![CDATA[<p>Hi everyone, Vlad here.</p>
<p>Let me start by saying that the title is a bit misleading. For starters it is not an actual bout but more a decision making process. It also gives the impression I&#8217;ll write more about this or that I have some kind of plan about this subject. I don&#8217;t, it just happens that I think I&#8217;ll travel this road again.</p>
<h2>Game Design</h2>
<p>The game design for this game states that:</p>
<p>1. The player&#8217;s objective is to reach the top of the &#8220;structure&#8221; (named just to make sense) where the action rolls;<br />
2. The &#8220;structure&#8221; has several &#8220;floors&#8221; (again just for easier comprehension);<br />
3. The player can fall to the previous &#8220;floor&#8221;;<br />
4. It is guaranteed that the player will see at least three &#8220;floors&#8221;;</p>
<h2>Application Design</h2>
<p>One thing that I know for sure is that we will be blitting all graphics and that the player token has three different blit objects and two of those rotate thus negating copyPixels and putting the dreadful draw method to work.</p>
<p>Another thing I know is that each &#8220;floor&#8221; is a tilemap, also blitted and that each tile is 64&#215;64.</p>
<p>And now the assumptions begin. How big is each &#8220;floor&#8221;? I have no idea but let&#8217;s say that a rather large &#8220;floor&#8221; has 50&#215;50 tiles. If the player will see at least three floors and on later stages all &#8220;floors&#8221; are rather large we are talking about 7,500 tiles to be rendered with a astonishing number of 30,720,000 pixels to be copied&#8230; each frame.</p>
<p>The &#8220;floor&#8221; where the player is will only render the tiles on screen (88 max) but the other two lower &#8220;floors&#8221; can potentially be fully rendered given the camera specs. Even if all three &#8220;floors&#8221; only rendered tiles on screen (which won&#8217;t happen by design) there would still be 7,500 objects to manage and that&#8217;s tiles only since we need to add to this all the remaining entities: player, enemies, decorations, effects, etc, but to make it worse the bottom two levels will be zoomed and probably in full view which means not only that all their blit objects will be visible but also that at least 5,000 of those objects will use draw instead of copyPixels&#8230; Did the headache kicked in already or is it just pure performance insanity?</p>
<h2>Implementation</h2>
<p>One of the great things about copyPixels is that it only renders the intersection between the target bitmapData rectangle and the source rectangle positioned at the destination point. What this means is that if we have 1,000 objects to render but only one actually has an intersecting rectangle, most of the processing time is running the array, vector or list and &#8211; more important and processor heavy &#8211; calling the functions that will in the end render.</p>
<p>The draw method also does this with a matrix&#8230; more on this later.</p>
<p>The solution was to write a BlitTileMap class that builds the tilemap in one big texture before it is used. While it uses much more RAM this class allows to address pretty much every problem stated earlier.</p>
<p>First and foremost the number of objects managed and therefor the performance lost with running their container (in our case, a linked list) and calling functions. From a potential 7,500+ we now have 3. The other issue that this addresses is the number of pixels it will render or try to render, from potentially 30,000,000+ to the worst case scenario of 1,050,000. And last but not least, considering the lower &#8220;floors&#8221; will be zoomed out, instead of using draw to render 5,000+ objects it will render&#8230; 2!</p>
<p>But the draw method also has a funny and helpful consequence. The smaller the scale, the faster draw executes which in terms of performance is relevant considering the zoom out will be achieved through scale. Less objects taking less time to render will be (I hope) quite a performance boost.</p>
<p>Did I just write all this? Wow!&#8230; Later!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vortixgames.com/application-design-vs-game-design-round-1/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>2012 Update</title>
		<link>http://blog.vortixgames.com/2012-update</link>
		<comments>http://blog.vortixgames.com/2012-update#comments</comments>
		<pubDate>Mon, 23 Jan 2012 20:16:31 +0000</pubDate>
		<dc:creator>Vlad</dc:creator>
				<category><![CDATA[The life of VGS]]></category>
		<category><![CDATA[FlashGameBlogs]]></category>
		<category><![CDATA[Success and Failure]]></category>

		<guid isPermaLink="false">http://blog.vortixgames.com/?p=1080</guid>
		<description><![CDATA[Hi everyone, Vlad here. Yeah, I know&#8230; long time, no writing. 2011 started great, didn&#8217;t finish that well for a lot of reasons, mostly unrelated to Vortix but we are catching up and have some stuff rolling. Here&#8217;s a quick update. As you might have noticed in the last post Marco and Pedro are working on [...]]]></description>
			<content:encoded><![CDATA[<p>Hi everyone, Vlad here.</p>
<p>Yeah, I know&#8230; long time, no writing. 2011 started great, didn&#8217;t finish that well for a lot of reasons, mostly unrelated to Vortix but we are catching up and have some stuff rolling. Here&#8217;s a quick update.</p>
<p>As you might have noticed in the last post Marco and Pedro are working on some cool stuff that involves kicking, punching and 3D!</p>
<p>In the meantime I&#8217;ve been messing around with some cool stuff too. First and on top of our priorities is a new game that if it is as fun to play as it is challenging to put, should be a great game. I&#8217;ll post my thoughts on some of the challenges we will face as we walk the dev path.</p>
<p>But that&#8217;s not all&#8230; Doing R&amp;D has become almost a hobby of mine. Weird to have a hobby that involves coding when I&#8217;m not coding but it&#8217;s fun and I admit that I like to maintain codebase and have codebits ready to evolve when needed.</p>
<p>I&#8217;ve played around with client-server stuff, dual-screen stuff, multi-platform stuff. Right now multi-platform is my main focus and haXe and NME the weapons of choice. This means that I have a lot of duplicated code but it&#8217;s getting pretty!</p>
<p>And this is the quick (or not) update and the promise of more blog posts with less interval.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vortixgames.com/2012-update/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Fighting a 3d Battle!</title>
		<link>http://blog.vortixgames.com/fighting-a-3d-battle</link>
		<comments>http://blog.vortixgames.com/fighting-a-3d-battle#comments</comments>
		<pubDate>Fri, 06 Jan 2012 19:22:20 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.vortixgames.com/?p=1067</guid>
		<description><![CDATA[Hey everyone, We&#8217;re working on a new game using a really cool 3d Engine: Flare3D. Here are some screenshots of what we have, and I&#8217;m not going to tell you what its about, but I can tell you its not a street fighter style game or tekken or virtua fighter. Enjoy &#160; &#160; Tell us [...]]]></description>
			<content:encoded><![CDATA[<p>Hey everyone,</p>
<p>We&#8217;re working on a new game using a really cool 3d Engine: Flare3D.</p>
<p>Here are some screenshots of what we have, and I&#8217;m not going to tell you what its about, but I can tell you its not a street fighter style game or tekken or virtua fighter.</p>
<p>Enjoy</p>
<p><a href="http://blog.vortixgames.com/wp-content/uploads/2012/01/1.jpg"><img title="1" src="http://blog.vortixgames.com/wp-content/uploads/2012/01/1.jpg" alt="" width="471" height="353" /></a></p>
<p>&nbsp;</p>
<p><a href="http://blog.vortixgames.com/wp-content/uploads/2012/01/2.jpg"><img class="alignnone  wp-image-1064" title="2" src="http://blog.vortixgames.com/wp-content/uploads/2012/01/2.jpg" alt="" width="468" height="351" /></a></p>
<p>&nbsp;</p>
<p><a href="http://blog.vortixgames.com/wp-content/uploads/2012/01/3.jpg"><img class="alignnone  wp-image-1065" title="3" src="http://blog.vortixgames.com/wp-content/uploads/2012/01/3.jpg" alt="" width="466" height="349" /></a></p>
<p>Tell us what you think!</p>
<p>&nbsp;</p>
<p>Cya!</p>
<p>Marco</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vortixgames.com/fighting-a-3d-battle/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Introducing Atomik Kaos 3 Crystals</title>
		<link>http://blog.vortixgames.com/introducing-atomik-kaos-3-crystals</link>
		<comments>http://blog.vortixgames.com/introducing-atomik-kaos-3-crystals#comments</comments>
		<pubDate>Fri, 22 Jul 2011 13:44:24 +0000</pubDate>
		<dc:creator>Vlad</dc:creator>
				<category><![CDATA[Releases]]></category>
		<category><![CDATA[Atomik Kaos]]></category>
		<category><![CDATA[FlashGameBlogs]]></category>

		<guid isPermaLink="false">http://blog.vortixgames.com/?p=1052</guid>
		<description><![CDATA[Hi everyone, Vlad here. Time for a new game (actually two new games, more on that later August) and this time we follow our cutest franchise: Atomik Kaos! I could tell you much about it but it&#8217;s not 100% ready although it should be up for licensing in a couple of days. Without further delay, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://blog.vortixgames.com/wp-content/uploads/2011/07/logo1_2.jpg"><img class="aligncenter size-full wp-image-1055" title="Atomik Kaos 3 Orbits Logo" src="http://blog.vortixgames.com/wp-content/uploads/2011/07/logo1_2.jpg" alt="" width="500" height="132" /></a></p>
<p>Hi everyone, Vlad here.</p>
<p>Time for a new game (actually two new games, more on that later August) and this time we follow our cutest franchise: Atomik Kaos! I could tell you much about it but it&#8217;s not 100% ready although it should be up for licensing in a couple of days.</p>
<p>Without further delay, here&#8217;s a video&#8230; by Marco!</p>
<p><object width="480" height="390"><param name="movie" value="http://www.youtube.com/v/0KTHap4vjIY?version=3&amp;hl=pt_PT&amp;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/0KTHap4vjIY?version=3&amp;hl=pt_PT&amp;rel=0" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vortixgames.com/introducing-atomik-kaos-3-crystals/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Presenting Francisco Furtado</title>
		<link>http://blog.vortixgames.com/presenting-francisco-furtado</link>
		<comments>http://blog.vortixgames.com/presenting-francisco-furtado#comments</comments>
		<pubDate>Thu, 30 Jun 2011 14:27:24 +0000</pubDate>
		<dc:creator>Vlad</dc:creator>
				<category><![CDATA[The life of VGS]]></category>
		<category><![CDATA[FlashGameBlogs]]></category>
		<category><![CDATA[Francisco Furtado]]></category>
		<category><![CDATA[Hajime]]></category>
		<category><![CDATA[The Adventures of Dear Explorer]]></category>

		<guid isPermaLink="false">http://blog.vortixgames.com/?p=1045</guid>
		<description><![CDATA[Hi everyone, long time no see. Vlad here! We never had one person to take care of our sound effects and music. Sometimes we hired, sometimes we got some sound packs and both me and Marco have made some music for some of our stuff. But the truth is that we were never 100% satisfied [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://blog.vortixgames.com/wp-content/uploads/2011/06/706081924-1.png"><img class="aligncenter size-full wp-image-1046" title="706081924-1" src="http://blog.vortixgames.com/wp-content/uploads/2011/06/706081924-1.png" alt="" width="468" height="86" /></a></p>
<p style="text-align: left;">Hi everyone, long time no see. Vlad here!</p>
<p style="text-align: left;">We never had one person to take care of our sound effects and music. Sometimes we hired, sometimes we got some sound packs and both me and Marco have made some music for some of our stuff. But the truth is that we were never 100% satisfied with the results.</p>
<p style="text-align: left;">When Marco was producing Hajime, we had the opportunity to work with Francisco Furtado. The result was amazing. Hajime is a much better game with all that vibrant music and amazing sound design. We spoke about future games and projects and Francisco agreed to cooperate with us.</p>
<p style="text-align: left;">After Hajime came The Adventures of Dear Explorer and with it a fantastic work and environment was created from the dungeons and sound and music carved in each wall, skeleton, boss&#8230; it&#8217;s almost unfair that we don&#8217;t let the rest of the world know about Francisco&#8217;s work. It is truly a work of love and high quality.</p>
<p style="text-align: left;">So I invite you all to visit his page at Bandcamp: <a href="http://franciscofurtado.bandcamp.com/">http://franciscofurtado.bandcamp.com/</a> where you can check the OST for both games and much more.</p>
<p style="text-align: left;">Cheers and thanks Francisco, hope we can do more and more of these.</p>
<p style="text-align: left;">Talk to you all soon,<br />
Vlad out!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vortixgames.com/presenting-francisco-furtado/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
