<?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>David Amador</title>
	
	<link>http://www.david-amador.com</link>
	<description>Developer's Blog</description>
	<lastBuildDate>Sun, 29 Jan 2012 21:41:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/DavidAmador" /><feedburner:info uri="davidamador" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>DavidAmador</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:browserFriendly></feedburner:browserFriendly><item>
		<title>Engine, video player and tools, tools tools!</title>
		<link>http://feedproxy.google.com/~r/DavidAmador/~3/tv4npHw1_bE/</link>
		<comments>http://www.david-amador.com/2012/01/engine-video-player-and-tools-tools-tools/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 19:56:20 +0000</pubDate>
		<dc:creator>David Amador</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[anim banks]]></category>
		<category><![CDATA[Basalt]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[game tools]]></category>
		<category><![CDATA[openal]]></category>
		<category><![CDATA[opengl]]></category>
		<category><![CDATA[sprite sheet]]></category>
		<category><![CDATA[theora]]></category>

		<guid isPermaLink="false">http://www.david-amador.com/?p=1819</guid>
		<description><![CDATA[So these past 2 weeks I&#8217;ve been adding some &#8220;bits and bytes&#8221; to the engine. Taking a rest between some more complex game mechanisms I decided to start doing a video player. After a bit research I decided to choose theora, but a bit skeptic, I&#8217;ve used it before on a game company I worked [...]]]></description>
			<content:encoded><![CDATA[<p>So these past 2 weeks I&#8217;ve been adding some &#8220;bits and bytes&#8221; to the engine. </p>
<p>Taking a rest between some more complex game mechanisms I decided to start doing a video player.</p>
<p>After a bit research I decided to choose <a href="http://theora.org/">theora</a>, but a bit skeptic, I&#8217;ve used it before on a game company I worked at and I remember being a tiny nightmare, specially because of YUV->RGB(A) conversion and because of video/audio sync. </p>
<p>If I remember correctly we couldn&#8217;t play audio, we where using separated tracks and paying the audio via a normal music play and big resolution videos (>500??) where a killer.</p>
<p>Anyway, since I&#8217;m already using OpenAL for audio I decided to give it a try. Unfortunately I didn&#8217;t had that code we where using back then so I had to do some digging on the internet. </p>
<p>So after a few days I had it working but bumped into the same problem, a bit slow. Not as slow as before cause computers have evolved. But after some reading I discovered that you can actually cache some YUV->RBG values and speed went up by like 10 fold.</p>
<p><a href="http://www.david-amador.com/wp-content/uploads/2012/01/theora_player.png" rel="shadowbox[sbpost-1819];player=img;"><img src="http://www.david-amador.com/wp-content/uploads/2012/01/theora_player-300x175.png" alt="" title="theora_player" width="300" height="175" class="alignnone size-medium wp-image-1833" /></a></p>
<p>I can decode 1080p videos with audio on my Core2Duo @ 2 GHz. And I mention the core since I have the decoding from the file on a separated thread so on a single core it&#8217;s probably a bit slower.<br />
But we probably will be placing videos around 512px width so there&#8217;s no problem there. I wonder if we could do the YUV->RGBA on the GPU side via a shader?</p>
<p>It&#8217;s also worth mentioning that I&#8217;m using OpenGL and &#8220;glTexSubImage2D&#8221; for updating the texture. I found out that it&#8217;s much faster than &#8220;glTexImage2D&#8221; because it respecifies the entire texture, changing its size, deleting the previous data, and so forth. &#8220;glTexSubImage2D&#8221; only modifies pixel data within the texture.</p>
<p><strong>Tools</strong></p>
<p>On the tools realm there was a need for a better Particle System Editor, the one we had has many things but adding stuff was turning into a nightmare, the old editor was build on XNA 3.1 which isn&#8217;t supported by VS2010.<br />
Since the engine is already in C++ I started from scratch and built this handy tool in 3 days or so:</p>
<p><a href="http://www.david-amador.com/wp-content/uploads/2012/01/screenshots2.png" rel="shadowbox[sbpost-1819];player=img;"><img src="http://www.david-amador.com/wp-content/uploads/2012/01/screenshots2-300x175.png" alt="" title="screenshots2" width="300" height="175" class="alignnone size-medium wp-image-1829" /></a><a href="http://www.david-amador.com/wp-content/uploads/2012/01/Screenshot1.png" rel="shadowbox[sbpost-1819];player=img;"><img src="http://www.david-amador.com/wp-content/uploads/2012/01/Screenshot1-300x175.png" alt="" title="Screenshot1" width="300" height="175" class="alignnone size-medium wp-image-1830" /></a></p>
<p>Not vary fancy but it gets the job done. </p>
<p>My next step was to fix most of the Sprite Sheet Editor bugs and issues my designer had been complaining about. </p>
<p>I already have an offline tool that grabs a bunch of tiny images and place them in an Atlas but most of the time the designer has the pieces together already on Photoshop so I incorporated a snippet of code that on double clicking an area tries to automatically detect the region around it. Anything that fails can be manually defined, the old fashioned way.</p>
<p><a href="http://www.david-amador.com/wp-content/uploads/2012/01/sprite_editor.png" rel="shadowbox[sbpost-1819];player=img;"><img src="http://www.david-amador.com/wp-content/uploads/2012/01/sprite_editor-300x175.png" alt="" title="sprite_editor" width="300" height="175" class="alignnone size-medium wp-image-1834" /></a></p>
<p>So in the next few days I&#8217;m working on the Animation Editor so the artist can quickly create and preview the animations from the sprite sheets without the need for me to place them in the game before hand.</p>
<p>I had most of these tools but they where awful. They did the trick for Vizati but now I&#8217;m trying to do things a bit better.</p>
<p>See you soon&#8230;</p>
<img src="http://feeds.feedburner.com/~r/DavidAmador/~4/tv4npHw1_bE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.david-amador.com/2012/01/engine-video-player-and-tools-tools-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.david-amador.com/2012/01/engine-video-player-and-tools-tools-tools/</feedburner:origLink></item>
		<item>
		<title>How to Restore the Windows 7 MBR (Master Boot Record)</title>
		<link>http://feedproxy.google.com/~r/DavidAmador/~3/TheVfPl9pYo/</link>
		<comments>http://www.david-amador.com/2012/01/how-to-restore-the-windows-7-mbr-master-boot-record/#comments</comments>
		<pubDate>Sat, 21 Jan 2012 10:43:50 +0000</pubDate>
		<dc:creator>David Amador</dc:creator>
				<category><![CDATA[Application & Software]]></category>
		<category><![CDATA[mbr]]></category>
		<category><![CDATA[windows 7]]></category>

		<guid isPermaLink="false">http://www.david-amador.com/?p=1820</guid>
		<description><![CDATA[So I had this crisis where the MBR got broken and Windows would not boot. This can happens for many reasons, maybe you tried to dual boot your PC and something went wrong. Anyway where&#8217;s a quick tip on how to fix it (You need a Windows 7 DVD of course)! 1 &#8211; Boot your [...]]]></description>
			<content:encoded><![CDATA[<p>So I had this crisis where the MBR got broken and Windows would not boot. This can happens for many reasons, maybe you tried to dual boot your PC and something went wrong.</p>
<p>Anyway where&#8217;s a quick tip on how to fix it (You need a Windows 7 DVD of course)!</p>
<p>1 &#8211; Boot your computer to the Windows 7 DVD<br />
2 &#8211; Select your language and click next.<br />
3 &#8211; Click the button for &#8220;Use recovery tools&#8221;.<br />
4 &#8211; Then select &#8220;Command Prompt&#8221;.</p>
<p>Do this:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">&nbsp;
Type: diskpart
and press Enter
&nbsp;
Type: select disk 0
and press Enter
&nbsp;
type: list volume
and press Enter</pre></div></div>

<p><img src="http://www.david-amador.com/wp-content/uploads/2012/01/53599d1251414836-mbr-restore-windows-7-master-boot-record-mbr_17a.png" alt="" title="53599d1251414836-mbr-restore-windows-7-master-boot-record-mbr_17a" width="550" height="266" class="alignnone size-full wp-image-1821" /></p>
<p>6 &#8211; Use your DVD drive letter so we can access the DVD</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">Type: exit
and press Enter
&nbsp;
to close Diskpart
&nbsp;
Type: G: (DVD drive)
and press Enter
&nbsp;
Type: cd boot
and press Enter
&nbsp;
Type: dir
and press Enter</pre></div></div>

<p><img src="http://www.david-amador.com/wp-content/uploads/2012/01/53600d1251414836-mbr-restore-windows-7-master-boot-record-mbr_18a.png" alt="" title="53600d1251414836-mbr-restore-windows-7-master-boot-record-mbr_18a" width="550" height="320" class="alignnone size-full wp-image-1822" /></p>
<p>7 &#8211; To restore the &#8220;bootsector code&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">&nbsp;
TYPE: bootsect /nt60 SYS /mbr
and press Enter</pre></div></div>

<p>You should be able to restart and boot you Windows now, if it fails, well, I&#8217;m out of ideas</p>
<img src="http://feeds.feedburner.com/~r/DavidAmador/~4/TheVfPl9pYo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.david-amador.com/2012/01/how-to-restore-the-windows-7-mbr-master-boot-record/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.david-amador.com/2012/01/how-to-restore-the-windows-7-mbr-master-boot-record/</feedburner:origLink></item>
		<item>
		<title>Find/Replace in Visual Studio using regular expressions</title>
		<link>http://feedproxy.google.com/~r/DavidAmador/~3/P7pGbUCQd7c/</link>
		<comments>http://www.david-amador.com/2012/01/findreplace-in-visual-studio-using-regular-expressions/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 21:27:55 +0000</pubDate>
		<dc:creator>David Amador</dc:creator>
				<category><![CDATA[General Programming]]></category>
		<category><![CDATA[regular expressions]]></category>

		<guid isPermaLink="false">http://www.david-amador.com/?p=1808</guid>
		<description><![CDATA[Usually Find/Replace gets the job done for what I need, although sometimes using &#8220;Replace All&#8221; can break more stuff that it fixes. But today I had this function I wanted to get rid of and simple change it with a public variable. So I had something like this. object-&#62;setLayer&#40;/*BLABAL BLA CODE, */&#41;; I want to [...]]]></description>
			<content:encoded><![CDATA[<p>Usually Find/Replace gets the job done for what I need, although sometimes using &#8220;Replace All&#8221; can break more stuff that it fixes.</p>
<p>But today I had this function I wanted to get rid of and simple change it with a public variable.</p>
<p>So I had something like this.</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">object<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>setLayer<span style="color: #008000;">&#40;</span><span style="color: #ff0000; font-style: italic;">/*BLABAL BLA CODE, */</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>I want to replace it with something more simple</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">object<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>Z <span style="color: #000080;">=</span> <span style="color: #ff0000; font-style: italic;">/*BLABAL BLA CODE, */</span><span style="color: #008080;">;</span></pre></div></div>

<p>So using Visual Studio Find/Replace in regular expressions mode I used this as a search string</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">setLayer\<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#123;</span>.<span style="color: #000040;">+</span><span style="color: #008000;">&#125;</span>\<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>And this as a Replace with string</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">Z<span style="color: #000080;">=</span>\<span style="color: #0000dd;">1</span><span style="color: #008080;">;</span></pre></div></div>

<p><img class="alignnone size-full wp-image-1809" title="regular expression" src="http://www.david-amador.com/wp-content/uploads/2012/01/regular-expression.jpg" alt="" width="474" height="421" /></p>
<p>Now, notice the first one, it&#8217;s actually simple, you have &#8220;setLayer&#8221;, followed by &#8220;\(&#8221; to tell the expression we really need to be that character, after than we have &#8220;.+&#8221;, which means match any single character except a line break and at least one occurrence. Followed by &#8220;\);&#8221;</p>
<p>Now if you notice we have curly brackets around the inside of what the function receives as parameter, that&#8217;s because we are tagging that string to use it later.</p>
<p>This way on the replace we simply need &#8220;Z=&#8221; followed by the first tagged string we have &#8220;\1&#8243;. if we have more curly brackets it would be &#8220;\2&#8243;, &#8220;\3&#8243; etc.</p>
<p>Check the full list for more options: <a href="http://msdn.microsoft.com/en-us/library/2k3te2cs%28v=vs.80%29.aspx">http://msdn.microsoft.com/en-us/library/2k3te2cs%28v=vs.80%29.aspx</a></p>
<img src="http://feeds.feedburner.com/~r/DavidAmador/~4/P7pGbUCQd7c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.david-amador.com/2012/01/findreplace-in-visual-studio-using-regular-expressions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.david-amador.com/2012/01/findreplace-in-visual-studio-using-regular-expressions/</feedburner:origLink></item>
		<item>
		<title>post mortem of another year</title>
		<link>http://feedproxy.google.com/~r/DavidAmador/~3/ehlzkJZN9vY/</link>
		<comments>http://www.david-amador.com/2012/01/post-mortem-of-another-year/#comments</comments>
		<pubDate>Sun, 01 Jan 2012 21:43:43 +0000</pubDate>
		<dc:creator>David Amador</dc:creator>
				<category><![CDATA[Daily Things]]></category>

		<guid isPermaLink="false">http://www.david-amador.com/?p=1782</guid>
		<description><![CDATA[Another year has gone by, not quite what I was expecting developing wise, like putting another game out there, but things never turned out as planned. Still over the last year I&#8217;ve gradually saw out little Different Pixel brand reaching more and more places which can be very helpful in the future and sure hell [...]]]></description>
			<content:encoded><![CDATA[<p>Another year has gone by, not quite what I was expecting developing wise, like putting another game out there, but things never turned out as planned.</p>
<p>Still over the last year I&#8217;ve gradually saw out little Different Pixel brand reaching more and more places which can be very helpful in the future and sure hell is nice to see work recognized.</p>
<p>From the top of my head I recall <a href="http://kotaku.com/5820508/our-newest-xbox-live-indie-favorites-are-full-of-rainbows-and-death/gallery/5">Kotaku article on the Xbox360 release</a>, we finally managed to release the Xbox360 version, which was the first one we made. Being a <a href="http://www.dreambuildplay.com/Main/SemiFinalists.aspx">semi-finalist on Dream.Build.Play</a> 2011 and the <a href="http://www.destructoid.com/destructoid-show-mgs-menswear-gow-fitness-and-vizati-198288.phtml">coverage on Destructoid</a>.</p>
<p>More and more I get to know developers from around the world and it&#8217;s been awesome, exchanging ideas, cultural stuff, helping solve trivial stuff that we sometimes miss, the indie dev community is really neat.</p>
<p>I worked most of this year on web development which is good and sucks at both time, on one hand it keeps me closer and updated on where technology/trend is headed and that&#8217;s always good, on the other hand I never really liked it that much and further more, all stuff now circles around Facebook, which I think is pathetic, get your own website, don&#8217;t host your company page on Facebook, it should be an alternative not the real thing.</p>
<p>I got accepted to the 2011 <a href="https://codebits.eu/">Codebits</a> which was a blast, seriously, I&#8217;m definitely trying to go this the 2012 edition as well.</p>
<p>Rant: One note to the people closer to me, asking me every now and then how many copies we sold it&#8217;s annoying, I don&#8217;t ask you how much you earn on your job do I?</p>
<p><strong>Favorite games:</strong><br />
Portal 2<br />
Rage<br />
Bastion<br />
Terraria<br />
Frozen Synapse<br />
(a couple more probably which I don&#8217;t recall)</p>
<p><strong>Favorite movies:</strong><br />
Real Steel<br />
Super 8<br />
Rise of the Planet of the Apes<br />
Source Code<br />
Mission Impossible 4<br />
Fast and Furious 5</p>
<p><strong>Favorite shows:</strong><br />
Breaking Bad<br />
Castle<br />
The Walking Dead<br />
Chuck</p>
<p>So my hopes for the next year are to be able to release the current game in the oven, I&#8217;m really glad Rita accepted once again to make another one. Not only because of her art but because the way she see games, bringing a new perspective to things, also because, most artists/coders I know just want to do 3D games which I personally think can ruin things sometimes just by adding a third dimension. Just watch what happened to Sonic once it went 3d.</p>
<p>Happy new Year!!</p>
<img src="http://feeds.feedburner.com/~r/DavidAmador/~4/ehlzkJZN9vY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.david-amador.com/2012/01/post-mortem-of-another-year/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.david-amador.com/2012/01/post-mortem-of-another-year/</feedburner:origLink></item>
		<item>
		<title>Basalt code swarm</title>
		<link>http://feedproxy.google.com/~r/DavidAmador/~3/9FkYLJvZ_ao/</link>
		<comments>http://www.david-amador.com/2011/12/basalt-code-swarm/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 16:48:01 +0000</pubDate>
		<dc:creator>David Amador</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[General Programming]]></category>
		<category><![CDATA[Basalt]]></category>
		<category><![CDATA[codeswarm]]></category>

		<guid isPermaLink="false">http://www.david-amador.com/?p=1776</guid>
		<description><![CDATA[I discovered code swarm a while ago and decided to test on my own repositories. This is a test on Basalt, and although I&#8217;ve been working on the engine since January 2010, only in 2011 did I placed in on a repository so a bunch of stuff is added right on the beginning. This is [...]]]></description>
			<content:encoded><![CDATA[<p>I discovered <a href="http://code.google.com/p/codeswarm/">code swarm</a> a while ago and decided to test on my own repositories.</p>
<p>This is a test on Basalt, and although I&#8217;ve been working on the engine since January 2010, only in 2011 did I placed in on a repository so a bunch of stuff is added right on the beginning.</p>
<p>This is the result.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/sOpYY2PhIb4" frameborder="0" allowfullscreen></iframe></p>
<img src="http://feeds.feedburner.com/~r/DavidAmador/~4/9FkYLJvZ_ao" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.david-amador.com/2011/12/basalt-code-swarm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.david-amador.com/2011/12/basalt-code-swarm/</feedburner:origLink></item>
		<item>
		<title>Revert To The Old Tweetdeck</title>
		<link>http://feedproxy.google.com/~r/DavidAmador/~3/eAJCiBL72WI/</link>
		<comments>http://www.david-amador.com/2011/12/revert-to-the-old-tweetdeck/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 12:34:21 +0000</pubDate>
		<dc:creator>David Amador</dc:creator>
				<category><![CDATA[Application & Software]]></category>
		<category><![CDATA[tweetdeck]]></category>

		<guid isPermaLink="false">http://www.david-amador.com/?p=1768</guid>
		<description><![CDATA[If you use Tweetdeck you probably already know they screwed the new version (1.0) and you want to revert back. Unfortunately since they are now part of Twitter I had a hard time finding the older build and decided to share it. And that&#8217;s why you are here too probably, here it is: Tweetdeck 0.38.2. [...]]]></description>
			<content:encoded><![CDATA[<p>If you use Tweetdeck you probably already know they screwed the new version (1.0) and you want to revert back.</p>
<p>Unfortunately since they are now part of Twitter I had a hard time finding the older build and decided to share it.</p>
<p>And that&#8217;s why you are here too probably, here it is: <a href="http://dl.dropbox.com/u/65262/TweetDeck_0_38.2.air">Tweetdeck 0.38.2</a>. Don&#8217;t forget you need <a href="http://www.adobe.com/products/air.html">Adobe Air</a> installed.</p>
<p><span style="color: #ff0000;">Edit 29-12-2011</span><br />
Some user have experienced a</p>
<blockquote><p>“This application cannot be installed because this installer has been mis-configured. Please contact the application author for assistance.”</p></blockquote>
<p>They solved it by uninstalling all previous versions of tweetdeck. Make sure you don&#8217;t have another one already installed.</p>
<img src="http://feeds.feedburner.com/~r/DavidAmador/~4/eAJCiBL72WI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.david-amador.com/2011/12/revert-to-the-old-tweetdeck/feed/</wfw:commentRss>
		<slash:comments>83</slash:comments>
		<feedburner:origLink>http://www.david-amador.com/2011/12/revert-to-the-old-tweetdeck/</feedburner:origLink></item>
		<item>
		<title>november progress</title>
		<link>http://feedproxy.google.com/~r/DavidAmador/~3/vspsI_KT0sc/</link>
		<comments>http://www.david-amador.com/2011/12/november-progress/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 17:16:26 +0000</pubDate>
		<dc:creator>David Amador</dc:creator>
				<category><![CDATA[Daily Things]]></category>

		<guid isPermaLink="false">http://www.david-amador.com/?p=1755</guid>
		<description><![CDATA[So as I mentioned a few weeks back, since November 1st I quit my job and I&#8217;ve been mainly focusing on our next game for Different Pixel. After a month, I think so far progress has been good. I&#8217;ve been able to work almost entirely on the game itself instead of the engine because most [...]]]></description>
			<content:encoded><![CDATA[<p>So as I mentioned a few weeks back, since November 1st I quit my job and I&#8217;ve been mainly focusing on our next game for Different Pixel.</p>
<p>After a month, I think so far progress has been good. I&#8217;ve been able to work almost entirely on the game itself instead of the engine because most of the stuff is stable enough since Vizati. </p>
<p>It&#8217;s kind of rewarding now and instead of reading tons of docs of other engines each time something doesn&#8217;t work right I usually know where the problem may be and can fix it, as good as I can at least.<br />
A few glitches here and there but so far so good. </p>
<p>I&#8217;ve managed to integrate GLSL to the engine after struggling a bit on the whole OpenGL extensions concept. Querying for extensions on the hardware/driver is a bit of obscure science, but it&#8217;s just a matter looking for them before using it.</p>
<p>Since GLSL isn&#8217;t part of OpenGL core before GL 2 if I end up placing any shaders, on older hardware (less than GL 2) I guess I&#8217;ll fallback to just fixed function. I&#8217;m still unsure about going &#8220;OpenGL 2 hardware required&#8221;, mainly because of integrated Intel cards. From what I could gather ATI supports it since the Radeon 9500 (2002), same time as DX9, so all ATI dx9 compatible should allow GL2 too. Nvidia since GeForce 6 Series (2004) I think,  Intel is a bit of a mystery to me.</p>
<p>I&#8217;ve also added a DirectX9 layer to the Render but it&#8217;s not finished, It&#8217;s just successfully creating the device in a window, still ignores everything the engine asks to draw. It might be a good idea in the future finishing it, if the target ends up being Windows it&#8217;s probably a better choice to use DX or maybe having an option in the game. </p>
<p>Oh, Git has been a life saver, seriously. Every dev should use it.</p>
<p>My artist has also been hard at work and so far I&#8217;m loving what&#8217;s done.</p>
<p>Until the next update.</p>
<img src="http://feeds.feedburner.com/~r/DavidAmador/~4/vspsI_KT0sc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.david-amador.com/2011/12/november-progress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.david-amador.com/2011/12/november-progress/</feedburner:origLink></item>
		<item>
		<title>Rage</title>
		<link>http://feedproxy.google.com/~r/DavidAmador/~3/xo-G06Aqpa0/</link>
		<comments>http://www.david-amador.com/2011/12/rage/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 16:47:43 +0000</pubDate>
		<dc:creator>David Amador</dc:creator>
				<category><![CDATA[Daily Things]]></category>
		<category><![CDATA[rage]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://www.david-amador.com/?p=1718</guid>
		<description><![CDATA[So being a big fan of Quake, Quake 3 Arena and Doom I was eager to get my hands on id Software latest game, Rage. Like most developers out there I&#8217;ve been impressed by John Carmack&#8217;s work and breakthroughs in gaming and computer graphics for years. When I first heard Rage was targeting 60FPS I [...]]]></description>
			<content:encoded><![CDATA[<p>So being a big fan of Quake, Quake 3 Arena and Doom I was eager to get my hands on id Software latest game, Rage.</p>
<p>Like most developers out there I&#8217;ve been impressed by John Carmack&#8217;s work and breakthroughs in gaming and computer graphics for years. When I first heard Rage was targeting 60FPS I got intrigued.<br />
Almost every game targets 30FPS and targeting twice as that leaves <a href="http://www.david-amador.com/2011/08/hurry-you-only-have-16-ms-to-render-everything/" title="Hurry you only have 16 ms to render everything">less time to render each frame</a>, even more since they were promising vast wastelands, detailed characters, top notch animations and AI.</p>
<p>But enough of that. I got the PC version since I&#8217;m old fashioned and I think shooters are best played with Mouse/Kb. Besides that shooters are always a tad slower on consoles to compensate the lack of Mouse for aiming.</p>
<p><a href="http://www.david-amador.com/wp-content/uploads/2011/10/WP_000105.jpg" rel="shadowbox[sbpost-1718];player=img;"><img src="http://www.david-amador.com/wp-content/uploads/2011/10/WP_000105-300x225.jpg" alt="" title="WP_000105" width="300" height="225" class="alignnone size-medium wp-image-1731" /></a></p>
<p>The game comes packed on 3 DVD summing a 23GB install. </p>
<p>The story takes place after a meteor crashing into the earth, several arks where placed underground with people in order for mankind to survive. You are one of those survivors.<br />
There isn&#8217;t much more into, after you wake up you discovered most of the planet is a wasteland ruled by bandits, mutants and others.</p>
<p>From there you jump from mission to mission against the several factions. </p>
<p>Apart from some technical issues I first encountered, after updating the drivers I managed to play it smoothly on my laptop, my desktop rig is quite old now (6+ years) so it doesn&#8217;t quite handle it at 1080p.</p>
<p>I&#8217;m very impressed with the game&#8217;s smooth animations and enemy AI. The story itself is crap but the whole fun in this game is just playing it, the battles always feel fresh, holding the shotgun feels like an id gun indeed. You keep encountering new enemies with new tricks, near the end you are still trying to get the hang of that new enemy tactics.</p>
<p>If you have the chance try it.</p>

<a href='http://www.david-amador.com/wp-content/uploads/2011/10/2011-10-22_00001.jpg' rel='shadowbox[sbalbum-1718];player=img;' title='2011-10-22_00001'><img width="150" height="150" src="http://www.david-amador.com/wp-content/uploads/2011/10/2011-10-22_00001-150x150.jpg" class="attachment-thumbnail" alt="2011-10-22_00001" title="2011-10-22_00001" /></a>
<a href='http://www.david-amador.com/wp-content/uploads/2011/10/2011-10-22_00007.jpg' rel='shadowbox[sbalbum-1718];player=img;' title='2011-10-22_00007'><img width="150" height="150" src="http://www.david-amador.com/wp-content/uploads/2011/10/2011-10-22_00007-150x150.jpg" class="attachment-thumbnail" alt="2011-10-22_00007" title="2011-10-22_00007" /></a>
<a href='http://www.david-amador.com/wp-content/uploads/2011/10/2011-10-22_00010.jpg' rel='shadowbox[sbalbum-1718];player=img;' title='2011-10-22_00010'><img width="150" height="150" src="http://www.david-amador.com/wp-content/uploads/2011/10/2011-10-22_00010-150x150.jpg" class="attachment-thumbnail" alt="2011-10-22_00010" title="2011-10-22_00010" /></a>
<a href='http://www.david-amador.com/wp-content/uploads/2011/10/2011-10-22_00012.jpg' rel='shadowbox[sbalbum-1718];player=img;' title='2011-10-22_00012'><img width="150" height="150" src="http://www.david-amador.com/wp-content/uploads/2011/10/2011-10-22_00012-150x150.jpg" class="attachment-thumbnail" alt="2011-10-22_00012" title="2011-10-22_00012" /></a>
<a href='http://www.david-amador.com/wp-content/uploads/2011/10/2011-10-23_00005.jpg' rel='shadowbox[sbalbum-1718];player=img;' title='2011-10-23_00005'><img width="150" height="150" src="http://www.david-amador.com/wp-content/uploads/2011/10/2011-10-23_00005-150x150.jpg" class="attachment-thumbnail" alt="2011-10-23_00005" title="2011-10-23_00005" /></a>
<a href='http://www.david-amador.com/wp-content/uploads/2011/10/2011-10-23_00008.jpg' rel='shadowbox[sbalbum-1718];player=img;' title='2011-10-23_00008'><img width="150" height="150" src="http://www.david-amador.com/wp-content/uploads/2011/10/2011-10-23_00008-150x150.jpg" class="attachment-thumbnail" alt="2011-10-23_00008" title="2011-10-23_00008" /></a>
<a href='http://www.david-amador.com/wp-content/uploads/2011/10/2011-10-23_00009.jpg' rel='shadowbox[sbalbum-1718];player=img;' title='2011-10-23_00009'><img width="150" height="150" src="http://www.david-amador.com/wp-content/uploads/2011/10/2011-10-23_00009-150x150.jpg" class="attachment-thumbnail" alt="2011-10-23_00009" title="2011-10-23_00009" /></a>
<a href='http://www.david-amador.com/wp-content/uploads/2011/10/2011-10-23_00010.jpg' rel='shadowbox[sbalbum-1718];player=img;' title='2011-10-23_00010'><img width="150" height="150" src="http://www.david-amador.com/wp-content/uploads/2011/10/2011-10-23_00010-150x150.jpg" class="attachment-thumbnail" alt="2011-10-23_00010" title="2011-10-23_00010" /></a>
<a href='http://www.david-amador.com/wp-content/uploads/2011/10/2011-10-22_00015.jpg' rel='shadowbox[sbalbum-1718];player=img;' title='2011-10-22_00015'><img width="150" height="150" src="http://www.david-amador.com/wp-content/uploads/2011/10/2011-10-22_00015-150x150.jpg" class="attachment-thumbnail" alt="2011-10-22_00015" title="2011-10-22_00015" /></a>
<a href='http://www.david-amador.com/wp-content/uploads/2011/10/WP_000105.jpg' rel='shadowbox[sbalbum-1718];player=img;' title='WP_000105'><img width="150" height="150" src="http://www.david-amador.com/wp-content/uploads/2011/10/WP_000105-150x150.jpg" class="attachment-thumbnail" alt="WP_000105" title="WP_000105" /></a>

<img src="http://feeds.feedburner.com/~r/DavidAmador/~4/xo-G06Aqpa0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.david-amador.com/2011/12/rage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.david-amador.com/2011/12/rage/</feedburner:origLink></item>
		<item>
		<title>something new in the horizon…</title>
		<link>http://feedproxy.google.com/~r/DavidAmador/~3/Ue63YB4oXUU/</link>
		<comments>http://www.david-amador.com/2011/10/something-new-in-the-horizon/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 09:06:14 +0000</pubDate>
		<dc:creator>David Amador</dc:creator>
				<category><![CDATA[Daily Things]]></category>
		<category><![CDATA[Game Development]]></category>

		<guid isPermaLink="false">http://www.david-amador.com/?p=1713</guid>
		<description><![CDATA[So I&#8217;ve been out for quite some time, and this is just a quick update. First, I have tones of unread, thus answered emails on my inbox. I haven&#8217;t managed to go through that lately. I usually scroll to see if there&#8217;s a really urgent one, I will eventually read them all. I decided to [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve been out for quite some time, and this is just a quick update.</p>
<p>First, I have tones of unread, thus answered emails on my inbox. I haven&#8217;t managed to go through that lately. I usually scroll to see if there&#8217;s a really urgent one,  I will eventually read them all.</p>
<p>I decided to quit my current job, my last day is October 31st. I couldn&#8217;t glimpse a very promising carrier there and I practically staggered learning-wise for the past months due to the type of work we develop so yeah, that&#8217;s it.</p>
<p>That also means that I&#8217;m taking some time to finish the current game in hands, yeahh.</p>
<p>I can&#8217;t talk about it but I&#8217;m quite excited with this. I expect to have some news about the game soon but mostly likely I won&#8217;t update the blog till then. I&#8217;ll probably keep ranting on <a href="http://www.twitter.com/DJ_Link">twitter</a> though =)</p>
<p>So starting November 1st I&#8217;ll be on my code cave @ Different Pixel.</p>
<p>Wish me luck&#8230;</p>
<img src="http://feeds.feedburner.com/~r/DavidAmador/~4/Ue63YB4oXUU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.david-amador.com/2011/10/something-new-in-the-horizon/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.david-amador.com/2011/10/something-new-in-the-horizon/</feedburner:origLink></item>
		<item>
		<title>Hurry you only have 16 ms to render everything</title>
		<link>http://feedproxy.google.com/~r/DavidAmador/~3/AYmSgP6CwFY/</link>
		<comments>http://www.david-amador.com/2011/08/hurry-you-only-have-16-ms-to-render-everything/#comments</comments>
		<pubDate>Mon, 08 Aug 2011 20:45:24 +0000</pubDate>
		<dc:creator>David Amador</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[fps]]></category>
		<category><![CDATA[frametime]]></category>
		<category><![CDATA[optimizations]]></category>

		<guid isPermaLink="false">http://www.david-amador.com/?p=1695</guid>
		<description><![CDATA[So I&#8217;ve been working on my new game and I&#8217;m doing some tweaks here and there on the engine. Mainly with the rendering section, trying to squeeze as much as possible, thus maintaining an acceptable framerate. It&#8217;s not like I&#8217;m doing a heavily graphic game but I like to know that It can be used [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve been working on my new game and I&#8217;m doing some tweaks here and there on the engine. </p>
<p>Mainly with the rendering section, trying to squeeze as much as possible, thus maintaining an acceptable framerate. It&#8217;s not like I&#8217;m doing a heavily graphic game but I like to know that It can be used even on slower pcs and that I&#8217;m not using more cycles than necessary.</p>
<p>This past week and after reading a bunch of stuff and keynotes from John Carmack about Rage (60FPS ftw) I decided to measure my own stuff.</p>
<p>So let&#8217;s break this down, your framerate or FPS is the number of images you draw per second, not just that, you have to animate stuff, play sound, collisions, etc. </p>
<p>Most 3D games nowadays target 30 FPS, it&#8217;s the minimum acceptable before you start noticing slowdowns or not so smooth animations, for 2D games it&#8217;s a pretty realistic objective to target 60FPS.</p>
<p>Let say you want to target 30 FPS,</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">  <span style="color: #0000dd;">1</span> second <span style="color: #000080;">=</span> <span style="color: #0000dd;">1000</span> milliseconds
  <span style="color: #0000dd;">1000</span><span style="color: #000040;">/</span><span style="color: #0000dd;">30</span> <span style="color: #000080;">=</span> ~<span style="color:#800080;">33.3</span> milliseconds</pre></div></div>

<p>That means that for 30 FPS you have to calculate, animate, do collision and draw the scene in under 33.3 milliseconds. And do it again 30 more times.<br />
Sounds hard doesn&#8217;t it? </p>
<p>At 60 FPS it&#8217;s even worse</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">  <span style="color: #0000dd;">1000</span><span style="color: #000040;">/</span><span style="color: #0000dd;">60</span> <span style="color: #000080;">=</span> ~<span style="color:#800080;">16.6</span> milliseconds</pre></div></div>

<p><img style="border:none;" src="http://www.david-amador.com/wp-content/uploads/2011/08/SonicRunMediumAni.gif" alt="" title="SonicRunMediumAni" width="66" height="80" class="alignnone size-full wp-image-1703" /></p>
<p>16.6 milliseconds to do a full loop on your engine. Actually with modern technology it&#8217;s not an impressive accomplishment depending on what you are doing but it&#8217;s a good practice to<br />
look at these numbers, consider them while you code.</p>
<p>Now I&#8217;ve been making some tests on my own engine and I placed  2000 sprites each with a sprite animation and an A* pathfinding (2000 paths can be cached at a time) rendering at 100 FPS.<br />
It runs well and each loops takes 9ms.</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">   <span style="color: #0000dd;">1000</span><span style="color: #000040;">/</span><span style="color: #0000dd;">100</span> <span style="color: #000080;">=</span> 10ms</pre></div></div>

<p>Each loop could take up to 10ms, so I&#8217;m wasting 1ms for each loop, bringing the sum up to 100ms per second.<br />
When I say waste it doesn&#8217;t mean you could be doing something else but you could make you game a bit more CPU friendly make making it sleep that extra millisecond each cycle.<br />
This will actually make you game use less of a processor and you can even check it on the Windows Task Manager.</p>
<p>At just 60 FPS, let&#8217;s say I&#8217;m drawing everything at 9ms too, but I could take up to 16.6</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">   <span style="color: #0000dd;">16</span> <span style="color: #000040;">-</span> <span style="color: #0000dd;">9</span> <span style="color: #000080;">=</span> 7ms
   <span style="color: #0000dd;">7</span> <span style="color: #000040;">*</span> <span style="color: #0000dd;">60</span> <span style="color: #008000;">&#40;</span>FPS<span style="color: #008000;">&#41;</span> <span style="color: #000080;">=</span> 420ms</pre></div></div>

<p>You can make your application sleep for almost half of a second and the game would run exactly the same<br />
Isn&#8217;t that something? </p>
<p>I&#8217;ve made a change on my pump to accommodate this and tested on Vizati, now most of the time it uses 12% of the CPU with bursts of 32%.<br />
Of course by measuring this you can also do cooler stuff like, let&#8217;s say you walk by a heavy area, or need to do some calculations, by lowering the intended FPS and drawing less times in that second you can get the other calculations done faster and return to a normal FPS much faster. </p>
<p>Well I hope this wasn&#8217;t too boring =)</p>
<blockquote><p>EDIT:<br />
After talking to some other devs there are mixed feelings about the benefits of putting your application to sleep those extra milliseconds. One thing that&#8217;s worth mentioning is that when you put your application to sleep you only guarantee that it will be idle for a minimum of let&#8217;s say 5ms, you may only regain control after 7ms, that&#8217;s really up to the OS.<br />
So my suggestion is, leave it as an option in the game, CPU throttling or something. Each user may test and see if it benefits, and in a couple of years it may in fact make some difference with to futuristic 30 core cpu where you don&#8217;t need to be using 100% of it. Starcraft 1 got a patch to do just that some time ago.
</p></blockquote>
<img src="http://feeds.feedburner.com/~r/DavidAmador/~4/AYmSgP6CwFY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.david-amador.com/2011/08/hurry-you-only-have-16-ms-to-render-everything/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.david-amador.com/2011/08/hurry-you-only-have-16-ms-to-render-everything/</feedburner:origLink></item>
		<item>
		<title>Using Git for revision control</title>
		<link>http://feedproxy.google.com/~r/DavidAmador/~3/3MSOH2gXo-8/</link>
		<comments>http://www.david-amador.com/2011/07/using-git-for-revision-control/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 12:29:34 +0000</pubDate>
		<dc:creator>David Amador</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://www.david-amador.com/?p=1673</guid>
		<description><![CDATA[If you are coding, no matter what it is, games, software, websites, you should be using a code revision control of some sort. Are you using? Cool. Is it Git? Smart choice, so you probably don&#8217;t need to read the rest of this post. For the rest I&#8217;m giving some help on how to start [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.david-amador.com/wp-content/uploads/2011/07/header.gif" alt="" title="header" width="788" height="106" class="alignnone size-full wp-image-1679" /><br />
If you are coding, no matter what it is, games, software, websites, you should be using a code revision control of some sort.<br />
Are you using? Cool. Is it Git? Smart choice, so you probably don&#8217;t need to read the rest of this post.</p>
<p>For the rest I&#8217;m giving some help on how to start from scratch.</p>
<p>First of all I recommend some reading on <a href="http://en.wikipedia.org/wiki/Revision_control">Revision Control</a> so that you understand what I&#8217;m talking about.</p>
<p>Start by going to Git download page and get the proper one for your system, there&#8217;s a Windows, Mac and Linux version.</p>
<p><a href="http://git-scm.com/download"><img src="http://www.david-amador.com/wp-content/uploads/2011/07/Screen-shot-2011-07-08-at-1.11.10-PM.png" alt="" title="Screen shot 2011-07-08 at 1.11.10 PM" width="273" height="300" class="alignnone size-full wp-image-1676" /></a></p>
<p>Next step, to configure it.<br />
Start by opening a Git Bash Console (Windows) or a Terminal (Mac) and do the following:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">  git config <span style="color: #000040;">--</span>global user.<span style="color: #007788;">name</span> <span style="color: #FF0000;">&quot;Your Name&quot;</span>
  git config <span style="color: #000040;">--</span>global user.<span style="color: #007788;">email</span> <span style="color: #FF0000;">&quot;Your email&quot;</span></pre></div></div>

<p>Navigate to your projects folder and do something like:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">  mkdir <span style="color: #FF0000;">&quot;folder name&quot;</span> <span style="color: #666666;">//This creates your folder, let's say your game is called Asteroids or something</span>
  cd <span style="color: #FF0000;">&quot;folder name&quot;</span>
  git init           <span style="color: #666666;">// Inits the folder as a Git repository</span></pre></div></div>

<p>Now add some file on the folder, a readme.txt or something like that and do this:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">  git add readme.<span style="color: #007788;">txt</span>   <span style="color: #666666;">// This adds the file to the repository</span>
  git commit <span style="color: #000040;">-</span>m <span style="color: #FF0000;">'My first commit'</span> <span style="color: #666666;">// Makes a commit with a message</span></pre></div></div>

<p>There you have it, readme.txt is now part of the repository.<br />
Now try changing the contents of the file, save it and commit again with another message.</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">  git commit <span style="color: #000040;">-</span>m <span style="color: #FF0000;">'Changed readme.txt'</span></pre></div></div>

<p>Git keeps an historic of what was changed =)</p>
<p>For using Git you don&#8217;t require to have a dedicated machine for this but for obvious reasons it&#8217;s nice to have a web repository that you can access anywhere you go. Let&#8217;s say you are working on your desktop, need to go away for a week, you push everything to the server, and keep working on your laptop. Cool right?</p>
<p>I&#8217;ve used a couple of online services and lately I&#8217;ve switched to <a href="https://github.com/">github</a>. It&#8217;s entirely free if you want to do open-source code or don&#8217;t care if others see it. If you need private repositories there are cheap plans available.</p>
<p>I&#8217;ll do a more detailed post another time with some of the advanced features.</p>
<img src="http://feeds.feedburner.com/~r/DavidAmador/~4/3MSOH2gXo-8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.david-amador.com/2011/07/using-git-for-revision-control/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.david-amador.com/2011/07/using-git-for-revision-control/</feedburner:origLink></item>
		<item>
		<title>So what have I learned after eight months on the App Store</title>
		<link>http://feedproxy.google.com/~r/DavidAmador/~3/ni-p0aNwb18/</link>
		<comments>http://www.david-amador.com/2011/06/so-what-have-i-learned-after-eight-months-on-the-app-store/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 20:14:07 +0000</pubDate>
		<dc:creator>David Amador</dc:creator>
				<category><![CDATA[Daily Things]]></category>
		<category><![CDATA[Game Development]]></category>
		<category><![CDATA[app store]]></category>
		<category><![CDATA[idevblogaday]]></category>
		<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.david-amador.com/?p=1658</guid>
		<description><![CDATA[First of all I think this is my last idevblogaday post for a while. I my math doesn&#8217;t fail me this is my 10th post and it&#8217;s time for someone to take turn. Actually it&#8217;s just the 9th. I hope my words have somehow enriched your knowledge, in case you want to stick around just [...]]]></description>
			<content:encoded><![CDATA[<p><del datetime="2011-06-24T21:31:47+00:00">First of all I think this is my last <a href="http://idevblogaday.com/">idevblogaday</a> post for a while. I my math doesn&#8217;t fail me this is my 10th post and it&#8217;s time for someone to take turn.</del> Actually it&#8217;s just the 9th.<br />
I hope my words have somehow enriched your knowledge, in case you want to stick around just bookmark my feeds. I keep this fairly updated. Also since I&#8217;ve been working on a new game<br />
there&#8217;s probably news to share in the next 2-3 months.</p>
<p>Around 11 months ago I registered my App Store developer account. The idea&#8230;put Vizati on the iPhone.<br />
I&#8217;ve never worked with Mac&#8217;s before, didn&#8217;t even have an iPhone/iPod or whatever. I just read that a bunch of people got rich and many more where making a living out of it.<br />
So here I go.</p>
<p><strong>Just placing an app there will sell</strong></p>
<p>My first BIG mistake was the general conception that &#8220;just placing an app there will sell&#8221;. That&#8217;s probably true on the very first months the App Store opened. Not now, trust me. You release a new game, will probably have a few sales on the 1st day because it&#8217;s on the new released games and that&#8217;s it, only on very rare conditions will the game start selling very good with just that.<br />
So keep in mind advertisement on iOS is mandatory, forums, twitter, mailing list, whatever.<br />
The first month I was sending dozens of emails every single day to websites, journalists, magazines, some paid off, others didn&#8217;t.</p>
<p><strong>Release my app at a Thursday to be featured at that week&#8217;s App Featured Apps </strong></p>
<p>Although this might increase your odds, we released Vizati on a Friday, 2 weeks later it got a feature on the App Store, so it can still happen. Just create something cool and appealing.</p>
<p><strong>$0.99 is the way to go</strong></p>
<p>Wrong, don&#8217;t EVER place your app at $0.99 right from start. Evaluate it well, start higher. Having a higher price will help to distinguish it from others, will give you margin for promotions without making it free. Many costumers, tired of the enormous lists of game will only seek higher priced games because logic mandates that they are indeed better. If you think your app is not worth more that $0.99 go back to the drawing boards. There&#8217;s no sense in having crappy apps, 100 bad apps may not sell as much as 5 really good ones.<br />
Selling at a low price will also bring all kinds of customers, they will give you a 1 star just because you haven&#8217;t updated the app in 5 months or so. Customers that buy pricier app are more forgiving and respectful.</p>
<p><strong>Making a Free promotion will help boost sales afterwords</strong></p>
<p>True, for the first 2-3 days. Then you&#8217;ll get back to whatever you where selling. Unless you have some in-game purchases it&#8217;s not worth it. Well only if you want to brag to your friends that your app got 100K downloads no matter the price. I&#8217;ve tried this 3 times, each time I place it at a smarter occasion getting successfully more downloads, thing is that after 3 days of getting back to regular price things would slowly return to normal. Depending on promotion amount of days you may end up with the same money you would have not making the promotion. Also usually you will see your rating decreasing half or a full star, keep in mind, all kinds of people will download it.</p>
<p><strong>Answering to customers Feedback helps sales</strong></p>
<p>Obviously implementing a highly demanded features will make them happy thus recommending to friends. Just don&#8217;t go making all the changes they ask. Choose a position and defend it, show that things are the way they are because you choose so, not because of some mistake.</p>
<p><strong>People will buy all kinds of crap, just place one level.</strong></p>
<p>Also true, but just because they bought a &#8220;fart app&#8221; doesn&#8217;t mean they wont&#8217; complain about your 15m duration game.</p>
<p>Well, time to go work on top secret project, see ya later</p>
<img src="http://feeds.feedburner.com/~r/DavidAmador/~4/ni-p0aNwb18" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.david-amador.com/2011/06/so-what-have-i-learned-after-eight-months-on-the-app-store/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.david-amador.com/2011/06/so-what-have-i-learned-after-eight-months-on-the-app-store/</feedburner:origLink></item>
		<item>
		<title>Playing sound using OpenAL</title>
		<link>http://feedproxy.google.com/~r/DavidAmador/~3/reirgSWy6gI/</link>
		<comments>http://www.david-amador.com/2011/06/playing-sound-using-openal/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 08:22:26 +0000</pubDate>
		<dc:creator>David Amador</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[openal]]></category>

		<guid isPermaLink="false">http://www.david-amador.com/?p=1647</guid>
		<description><![CDATA[Just a quick side note, the 6 Indie Games Bundle for $5 is still available till June 20th http://www.indiegamespack.com/, help out indie devs by buying or spreading the word. For sound I use OpenAL, it&#8217;s free, cross-platform, I&#8217;ve managed to get it working on iPhone, Windows and Mac. Setting up OpenAL to play a sound [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Just a quick side note, the <strong>6 Indie Games Bundle for $5</strong> is still available till June 20th <a href="http://www.indiegamespack.com/">http://www.indiegamespack.com/</a>, help out indie devs by buying or spreading the word.</p></blockquote>
<p>For sound I use OpenAL, it&#8217;s free, cross-platform, I&#8217;ve managed to get it working on iPhone, Windows and Mac.</p>
<p>Setting up OpenAL to play a sound is pretty straight forward, a bit like OpenGL.<br />
First you need to create a context.</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">ALCcontext <span style="color: #000040;">*</span>context<span style="color: #008080;">;</span>
ALCdevice <span style="color: #000040;">*</span>device<span style="color: #008080;">;</span>
&nbsp;
device <span style="color: #000080;">=</span> alcOpenDevice<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, ALC_DEFAULT_DEVICE_SPECIFIER<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>device <span style="color: #000080;">==</span> <span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
   <span style="color: #666666;">// Handle Exception</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">//Create a context</span>
context<span style="color: #000080;">=</span>alcCreateContext<span style="color: #008000;">&#40;</span>device,<span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//Set active context</span>
alcMakeContextCurrent<span style="color: #008000;">&#40;</span>context<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">// Clear Error Code</span>
alGetError<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>Now for the second part, loading a wav file. You have to open a file, fill buffers with data and then attach it to a source.</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">&nbsp;
<span style="color: #0000ff;">char</span><span style="color: #000040;">*</span>     alBuffer<span style="color: #008080;">;</span>             <span style="color: #666666;">//data for the buffer</span>
ALenum alFormatBuffer<span style="color: #008080;">;</span>    <span style="color: #666666;">//buffer format</span>
ALsizei   alFreqBuffer<span style="color: #008080;">;</span>       <span style="color: #666666;">//frequency</span>
<span style="color: #0000ff;">long</span>       alBufferLen<span style="color: #008080;">;</span>        <span style="color: #666666;">//bit depth</span>
ALboolean    alLoop<span style="color: #008080;">;</span>         <span style="color: #666666;">//loop</span>
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> alSource<span style="color: #008080;">;</span>      <span style="color: #666666;">//source</span>
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> alSampleSet<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//load the wave file</span>
alutLoadWAVFile<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;my_music.wav&quot;</span>,<span style="color: #000040;">&amp;</span>alFormatBuffer, <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">void</span> <span style="color: #000040;">**</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;</span>alBuffer,<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">&amp;</span>alBufferLen, <span style="color: #000040;">&amp;</span>alFreqBuffer, <span style="color: #000040;">&amp;</span>alLoop<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//create a source</span>
alGenSources<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>, <span style="color: #000040;">&amp;</span>alSource<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//create  buffer</span>
alGenBuffers<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>, <span style="color: #000040;">&amp;</span>alSampleSet<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//put the data into our sampleset buffer</span>
alBufferData<span style="color: #008000;">&#40;</span>alSampleSet, alFormatBuffer, alBuffer, alBufferLen, alFreqBuffer<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//assign the buffer to this source</span>
alSourcei<span style="color: #008000;">&#40;</span>alSource, AL_BUFFER, alSampleSet<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//release the data</span>
alutUnloadWAV<span style="color: #008000;">&#40;</span>alFormatBuffer, alBuffer, alBufferLen, alFreqBuffer<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>Once the sound is loaded we can play it. To do this we use alSourcePlay.</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">&nbsp;
alSourcei<span style="color: #008000;">&#40;</span>alSource,AL_LOOPING,AL_TRUE<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//play</span>
alSourcePlay<span style="color: #008000;">&#40;</span>alSource<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//to stop</span>
alSourceStop<span style="color: #008000;">&#40;</span>alSource<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>Once you&#8217;ve finished don&#8217;t forget to clean memory and release OpenAL context and device</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">alDeleteSources<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>,<span style="color: #000040;">&amp;</span>alSource<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//delete our buffer</span>
alDeleteBuffers<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>,<span style="color: #000040;">&amp;</span>alSampleSet<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
context<span style="color: #000080;">=</span>alcGetCurrentContext<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//Get device for active context</span>
device<span style="color: #000080;">=</span>alcGetContextsDevice<span style="color: #008000;">&#40;</span>context<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//Disable context</span>
alcMakeContextCurrent<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//Release context(s)</span>
alcDestroyContext<span style="color: #008000;">&#40;</span>context<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//Close device</span>
alcCloseDevice<span style="color: #008000;">&#40;</span>device<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>Easy right? I&#8217;ve extended this to play the open format OGG for my engine, which is pretty cool. Since you can keep putting data to buffers you can stream a whole OGG or WAV file without loading everything into memory.</p>
<img src="http://feeds.feedburner.com/~r/DavidAmador/~4/reirgSWy6gI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.david-amador.com/2011/06/playing-sound-using-openal/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.david-amador.com/2011/06/playing-sound-using-openal/</feedburner:origLink></item>
		<item>
		<title>Indie Summer Six Pack</title>
		<link>http://feedproxy.google.com/~r/DavidAmador/~3/fhLzIyT4ax0/</link>
		<comments>http://www.david-amador.com/2011/06/indie-summer-six-pack/#comments</comments>
		<pubDate>Fri, 03 Jun 2011 16:54:35 +0000</pubDate>
		<dc:creator>David Amador</dc:creator>
				<category><![CDATA[Daily Things]]></category>
		<category><![CDATA[indie]]></category>
		<category><![CDATA[Vizati]]></category>

		<guid isPermaLink="false">http://www.david-amador.com/?p=1640</guid>
		<description><![CDATA[So this is what we at Different Pixel, together with 5 other developers have been working on, the &#8220;Indie Summer Six Pack&#8221; Six indie titles for just $10 &#8211; or a stonking $5, if you first share the offer via Facebook. How can you say no to that? The games included are Aztaka, City Rain, [...]]]></description>
			<content:encoded><![CDATA[<p>So this is what we at Different Pixel, together with 5 other developers have been working on, the &#8220;<strong>Indie Summer Six Pack</strong>&#8221;</p>
<p><a href="http://www.indiegamespack.com/"><img src="http://www.david-amador.com/wp-content/uploads/2011/06/indiepack.jpg" alt="" title="indiepack"  class="alignnone size-full wp-image-1641" /></a></p>
<p><a href="http://indiegamespack.com/">Six indie titles for just $10</a> &#8211; or a stonking $5, if you first share the offer via Facebook. </p>
<p>How can you say no to that?</p>
<p>The games included are <strong>Aztaka</strong>, <strong>City Rain</strong>, <strong>Puzzlegeddon</strong>, <strong>Bob Came In  Pieces</strong>, <strong>Vizati</strong> and <strong>Lylian</strong>.</p>
<img src="http://feeds.feedburner.com/~r/DavidAmador/~4/fhLzIyT4ax0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.david-amador.com/2011/06/indie-summer-six-pack/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.david-amador.com/2011/06/indie-summer-six-pack/</feedburner:origLink></item>
		<item>
		<title>Time for some new tools and editor</title>
		<link>http://feedproxy.google.com/~r/DavidAmador/~3/EHegffItMHU/</link>
		<comments>http://www.david-amador.com/2011/05/time-for-some-new-tools-and-editor/#comments</comments>
		<pubDate>Fri, 27 May 2011 11:40:29 +0000</pubDate>
		<dc:creator>David Amador</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Sapphire]]></category>

		<guid isPermaLink="false">http://www.david-amador.com/?p=1628</guid>
		<description><![CDATA[Holy cow, this is my 100th post. &#8220;Insert epic sentence&#8221; Depending on how much time you follow my blog or Different Pixel activity you may know that we have an internal Editor called Sapphire Past It was developed over a year ago with the intent of being a &#8220;All in one&#8221; 2D game editor for [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Holy cow, this is my 100th post. &#8220;Insert epic sentence&#8221;</p></blockquote>
<p>Depending on how much time you follow my blog or <a href="http://www.differentpixel.com">Different Pixel</a> activity you may know that we have an internal Editor called Sapphire</p>
<p><a href="http://www.david-amador.com/wp-content/uploads/2009/12/sapphire1.jpg" rel="shadowbox[sbpost-1628];player=img;"><img src="http://www.david-amador.com/wp-content/uploads/2009/12/sapphire1-300x193.jpg" alt="" title="sapphire" width="300" height="193" class="alignnone size-medium wp-image-650" /></a></p>
<p><iframe width="225" height="149" src="http://www.youtube.com/embed/D33185iWTQU" frameborder="0" allowfullscreen></iframe><iframe width="225" height="149" src="http://www.youtube.com/embed/SLd4PxJlVlE" frameborder="0" allowfullscreen></iframe></p>
<p><strong>Past</strong><br />
It was developed over a year ago with the intent of being a &#8220;All in one&#8221; 2D game editor for our games, built on XNA. It started out pretty well and I&#8217;m very happy with the outcome. It served it&#8217;s purpose. The problem now is, most of the stuff we need, apart from the generic sprites positioning, rotation etc, are very specific stuff to the game/project in hands.</p>
<p><strong>Considerations</strong></p>
<p>I now find myself in the need of a Cut-scene editor, it will need the obvious drag-drop, open image etc, but the rest is specific to animation. </p>
<p>How about a generic editor with plug-ins? </p>
<p>Grabbing the current editor and making another working mode that cooperates well in the existent ecosystem is hard work. I don&#8217;t have as much time as I would like. It takes too much work and effort and building for specific case takes much lesser time. Since the tools are for internal use only I don&#8217;t need to have a all in one friendly editor. Just something that I and Rita can use and that she can quickly learn.</p>
<p>So here I&#8217;m not using the &#8220;correct road&#8221; but the &#8220;I need this stuff working&#8221; solution.</p>
<p>I decided to make a reusable empty framework with basic handling of common stuff and having an &#8220;open canvas&#8221; for the rest.</p>
<p><strong>Framework</strong></p>
<p>After some research I decided to use wxWidgets. I&#8217;ve used it in the past and it&#8217;s a major headache for some stuff, but it&#8217;s not an unfamiliar ground for me and I know first hand you can embed DirectX and OpenGL windows there pretty easily. Being cross-platform is a bonus, I intend to focus on Windows only but we never know what lies ahead the road.</p>
<img src="http://feeds.feedburner.com/~r/DavidAmador/~4/EHegffItMHU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.david-amador.com/2011/05/time-for-some-new-tools-and-editor/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.david-amador.com/2011/05/time-for-some-new-tools-and-editor/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 1.217 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-01-31 19:05:50 -->

