<?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"
	>

<channel>
	<title>Rui Figueira's Blog &#187; Game Development</title>
	<atom:link href="http://www.crazygaze.com/blog/archives/category/game-development/feed" rel="self" type="application/rss+xml" />
	<link>http://www.crazygaze.com/blog</link>
	<description>Knowing is not enough; we must apply. Willing is not enough; we must do.</description>
	<pubDate>Sat, 01 Mar 2008 02:00:39 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
	<language>en</language>
			<item>
		<title>czPlayer 0.2.1 Released</title>
		<link>http://www.crazygaze.com/blog/archives/44</link>
		<comments>http://www.crazygaze.com/blog/archives/44#comments</comments>
		<pubDate>Sat, 01 Mar 2008 02:00:39 +0000</pubDate>
		<dc:creator>Rui Figueira</dc:creator>
		
		<category><![CDATA[Game Development]]></category>

		<category><![CDATA[czPlayer]]></category>

		<guid isPermaLink="false">http://www.crazygaze.com/blog/archives/44</guid>
		<description><![CDATA[Here I am again.
Almost 2 months and here it is a new version.
No new fancy features or big changes. Basically, I&#8217;ve just  added support for loading WAV files encoded with ADPCM (IMA and Microsoft ADPCM  supported).
I&#8217;ve been so quiet for a reason&#8230;
Last 2 months I&#8217;ve been  looking for a new position in [...]]]></description>
			<content:encoded><![CDATA[<p>Here I am again.<br />
Almost 2 months and here it is a new version.<br />
No new fancy features or big changes. Basically, I&#8217;ve just  added support for loading WAV files encoded with ADPCM (IMA and Microsoft ADPCM  supported).</p>
<p>I&#8217;ve been so quiet for a reason&#8230;<br />
Last 2 months I&#8217;ve been  looking for a new position in the games industry, and finally got one in  Scotland-Dundee.</p>
<p>You can download the new version here :<br />
<a href="http://www.crazygaze.com/blog/czplayer"> Download lastest czPlayer demo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazygaze.com/blog/archives/44/feed</wfw:commentRss>
		</item>
		<item>
		<title>Highly customizable C++ template String class</title>
		<link>http://www.crazygaze.com/blog/archives/43</link>
		<comments>http://www.crazygaze.com/blog/archives/43#comments</comments>
		<pubDate>Wed, 30 Jan 2008 03:39:48 +0000</pubDate>
		<dc:creator>Rui Figueira</dc:creator>
		
		<category><![CDATA[Game Development]]></category>

		<category><![CDATA[C++]]></category>

		<category><![CDATA[source code]]></category>

		<category><![CDATA[string class]]></category>

		<category><![CDATA[templates]]></category>

		<guid isPermaLink="false">http://www.crazygaze.com/blog/archives/43</guid>
		<description><![CDATA[ In my last contract, we used CEGUI for the User Interface. The String class provided and used by CEGUI uses an internal array as quick buffer for small strings, and reverts to the heap when the data doesn&#8217;t fit that quick buffer.
That approach increases performance if the quick buffer is big enough to hold [...]]]></description>
			<content:encoded><![CDATA[<p> In my last contract, we used CEGUI for the User Interface. The String class provided and used by CEGUI uses an internal array as quick buffer for small strings, and reverts to the heap when the data doesn&#8217;t fit that quick buffer.<br />
That approach increases performance if the quick buffer is big enough to hold most of your string operations.</p>
<p>However it lacks some features:</p>
<ul>
<li>The quick buffer size is hard-coded in the class, instead of template-based.</li>
<li>When reverting to heap based, it doesn&#8217;t use any mechanisms to minimize allocations/ deallocations, like for example (Reference counting and Copy-On-Write)</li>
</ul>
<p>Since I&#8217;m starting a new hobby project (my own small game engine), to test ideas and learn some new things, the first thing I&#8217;m coding is my own String class, which I&#8217;m also using as an exercise to test some more advanced templates stuff, instead of the classical <em>&#8220;container of values of type T&#8221;</em>.</p>
<p>So&#8230; about my String class.</p>
<p>Features:</p>
<ul>
<li>Completely template based, using policies like described in the book <em>Modern C++</em>. This allows for a great deal of customization.</li>
<li>Using policies, it supports multiple types of string storage. Currently it support 2 storage types:
<ul>
<li>Heap based with reference counting and Copy-On-Write, to delay memory allocations/deallocations as much as possible.</li>
<li>Quick buffer based (like CEGUI), but with fallback to Heap based  like described above when the data doesn&#8217;t fit the quick buffer. Also, the quick buffer size itself is a template parameter, so we set the size based on the use we have in mind.</li>
</ul>
</li>
<li>We can mix strings declared with different policies (the ones provided), and internally it will still try to minimize memory allocations/deallocations, by using reference counting and Copy-On-Write when possible.</li>
<li>We can specify our own Allocator for heap based strings</li>
<li>Basic methods for manipulations. I need to implement a lot more.</li>
</ul>
<p>Missing/Todo:</p>
<ul>
<li>More methods for manipulations (make it more compatible with the std::string)</li>
<li>Unicode support. I&#8217;ve laid down the bases for that, but currently only works with <em>char</em> type</li>
</ul>
<p>When coding it, I&#8217;ve used <em>CppUnite2</em> for the tests. See this link for more information (<a href="http://www.gamesfromwithin.com/articles/0512/000103.html">Games from Within: CppUnitLite2 1.1</a>).</p>
<p>I haven&#8217;t used this String class in a complex product yet, only in the tests during development, so I can&#8217;t talk about performance or bugs yet.</p>
<p>If you want to check it out, download it below:</p>
<p>NOTE: I&#8217;ve only tested it with Visual Studio 2005 (with sp1), so the provided project files are for that same compiler.</p>
<p><a href="http://www.crazygaze.com/downloads/misc/czstring.zip">czString Download</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazygaze.com/blog/archives/43/feed</wfw:commentRss>
		</item>
		<item>
		<title>czPlayer 0.2.0 released</title>
		<link>http://www.crazygaze.com/blog/archives/41</link>
		<comments>http://www.crazygaze.com/blog/archives/41#comments</comments>
		<pubDate>Mon, 07 Jan 2008 09:49:25 +0000</pubDate>
		<dc:creator>Rui Figueira</dc:creator>
		
		<category><![CDATA[Game Development]]></category>

		<category><![CDATA[czPlayer]]></category>

		<guid isPermaLink="false">http://www.crazygaze.com/blog/archives/41</guid>
		<description><![CDATA[I&#8217;ve been working hard on czPlayer, and here is the result. Version 0.2.0 released.
The API is mostly incompatible with the previous 0.1.1 version.
Iâ€™ve made a lot of changes to this version and added some new features, so I decided to jump the version number to 0.2.0.
All the internal refactoring Iâ€™ve made will hopefully allow me [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working hard on <a href="http://www.crazygaze.com/blog/czplayer">czPlayer</a>, and here is the result. Version 0.2.0 released.<br />
The API is mostly incompatible with the previous 0.1.1 version.<br />
Iâ€™ve made a lot of changes to this version and added some new features, so I decided to jump the version number to 0.2.0.<br />
All the internal refactoring Iâ€™ve made will hopefully allow me to add some new features I have in mind, like DSP effects (both internal and user provided) .<br />
Needless to say, Iâ€™m not particularly confident about the stability of this version, with all the changes Iâ€™ve made. Some functions were not even tested yet. But like I said in earlier posts, there is always something to fix or improve, so I better release and work from there, than to keep fixing/improving stuff and never release.<br />
I have so many crazy ideas for features! But most of them will not be implemented, because of the targeted platforms.<br />
Codesize and performance have priority, not features&#8230; well&#8230; at least for czPlayer.<br />
That leads me to another thing Iâ€™ve been thinking aboutâ€¦<br />
Maybe Iâ€™ll eventually fork czPlayer into Mobile and Non-Mobile versions, so that I can go wild on all the things I want to implement. Hehe<br />
Most of what I dislike in czPlayer (both internal, and in the external API), are a direct consequence  of the compromises I had to make to support the targeted platforms, and have the same API for all of them.<br />
Nuff saidâ€¦ Youâ€™ve got to ask yourself one question: â€œDo I feel lucky? Well, do you, punk ?</p>
<p>If so, go ahead, download the new version and give it a try:<br />
<a href="http://www.crazygaze.com/blog/czplayer"> Download lastest czPlayer demo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazygaze.com/blog/archives/41/feed</wfw:commentRss>
		</item>
		<item>
		<title>Simplifying code using states</title>
		<link>http://www.crazygaze.com/blog/archives/39</link>
		<comments>http://www.crazygaze.com/blog/archives/39#comments</comments>
		<pubDate>Wed, 19 Dec 2007 16:46:23 +0000</pubDate>
		<dc:creator>Rui Figueira</dc:creator>
		
		<category><![CDATA[Game Development]]></category>

		<category><![CDATA[code design]]></category>

		<category><![CDATA[State Diagrams]]></category>

		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://www.crazygaze.com/blog/archives/39</guid>
		<description><![CDATA[Lately I have been refactoring czPlayer to add more features and make future maintenance easier.
Some parts of the code are almost 10 years old, when I first started playing with sound coding.
Needless to say, my code style and quality has improved a lot in 10 years, and it&#8217;s a funny thing to look at code [...]]]></description>
			<content:encoded><![CDATA[<p>Lately I have been refactoring <a href="http://www.crazygaze.com/blog/czplayer">czPlayer</a> to add more features and make future maintenance easier.<br />
Some parts of the code are almost 10 years old, when I first started playing with sound coding.<br />
Needless to say, my code style and quality has improved a lot in 10 years, and it&#8217;s a funny thing to look at code this old. <img src='http://www.crazygaze.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
As I was refactoring the code, I found a lot of ambiguities and redundancies caused by member variables added over time.<br />
Let me explain&#8230;.<br />
I had a class responsible for MOD processing, and some of the member variables were:</p>
<pre class="syntax-highlight:cpp">
class MODModule
{
// ...
bool m_loaded;
bool m_playing;
bool m_paused;
bool m_reachedEnd;
};
</pre>
<p>What&#8217;s the problem with this approach ?<br />
Let&#8217;s see&#8230;<br />
Suppose I want to call methods on the MOD object (e.g: Pause(), Resume(), etc)<br />
I need to make some checks in each method.</p>
<p>To pause&#8230;</p>
<pre class="syntax-highlight:cpp">
if (!m_loaded || m_playing || m_paused)
return SOME_ERROR;
m_pause = true;
// ... do pause stuff
</pre>
<p>Then to resume&#8230;</p>
<pre class="syntax-highlight:cpp">
if (!m_loaded || !m_paused)
return SOME_ERROR;
m_paused = false;
// ... do resume stuff
</pre>
<p>When the MOD finishes playing, I needed something like this&#8230;</p>
<pre class="syntax-highlight:cpp">
// ... some code that checks for end
m_reachedEnd = true;
//ups... How about m_playing, m_paused?
//We need to change their values, so we don&#039;t break code elsewhere
m_playing = false;
m_pause = false;
</pre>
<p>And similar things when playing, stopping, etc.<br />
See the problems?</p>
<ul>
<li>We need checks for multiples variables</li>
<li>We need to make sure the variables have valid values in relation to each other</li>
<li>What if we want to add an extra state? For example, &#8220;bool m_fading&#8221;. We would need to examine a lot of code to check how the other variables are used, and hardwire this new one somewhere. Every time you need to add an extra variable, you&#8217;ll need to check more and more code to make sure everything is ok.</li>
</ul>
<p>Now look at the meaning of the variables. They are mostly mutually exclusive.</p>
<ul>
<li>If it&#8217;s playing, it can&#8217;t be paused and hasn&#8217;t reached the end.</li>
<li>If it&#8217;s paused, it&#8217;s not playing, and hasn&#8217;t reached the end yet.</li>
<li>&#8230; and so on&#8230;.</li>
</ul>
<p>The more data members a class has, the harder it gets to keep the object in a valid state, so, the less data to manage, the better. Less maintenance and less bugs.</p>
<p>One technique I use a lot when trying to simplify code is to look at it with state diagrams whenever possible.<br />
Here it is what happens (kind of) with instances of the MODModule class:</p>
<p><a href="http://www.crazygaze.com/blog/wp-content/uploads/2007/12/mod_states.png" title="mod_states.png"><img src="http://www.crazygaze.com/blog/wp-content/uploads/2007/12/mod_states.png" alt="mod_states.png" /></a></p>
<p>I can easily translate it to code with enums.</p>
<pre class="syntax-highlight:cpp">
enum MODState
{
MOD_STATE_NOT_LOADED,
MOD_STATE_STOPPED,
MOD_STATE_PLAYING,
MOD_STATE_PAUSED,
MOD_STATE_REACHED_END
};

class MODModule
{
// ...
MODState m_state; // Now we have only one variable
};
</pre>
<p>This approach is a lot easier to maintain, and less error prone.<br />
Now the code in most functions become something like this:</p>
<p>To play&#8230;</p>
<pre class="syntax-highlight:cpp">
if (m_state!=MOD_STATE_STOPPED)
return SOME_ERROR;
m_state = MOD_STATE_PLAYING;
// ... do play stuff
</pre>
<p>To pause&#8230;</p>
<pre class="syntax-highlight:cpp">
if (m_state!=MOD_STATE_PLAYING)
return SOME_ERROR;
m_state = MOD_STATE_PAUSED;
// ... do pause stuff
</pre>
<p>To resume&#8230;</p>
<pre class="syntax-highlight:cpp">
if (m_state!=MOD_STATE_PAUSED)
return SOME_ERROR;
m_state = MOD_STATE_PLAYING;
// ... do resume stuff
</pre>
<p>To stop&#8230;</p>
<pre class="syntax-highlight:cpp">
// We cannot stop if it&#039;s not even loaded yet, or it&#039;s already stopped
if (m_state==MOD_STATE_NOT_LOADED || m_state==MOD_STATE_STOPPED)
return SOME_ERROR;
m_state = MOD_STATE_STOPPED;
// ... do stop stuff
</pre>
<p>The code may look similar, but it&#8217;s a lot less error prone, easier to follow and maintain.<br />
Looking at the State Diagram, I could easily squeeze in a &#8220;Fading&#8221; state and understand the conditions to enter or leave that state.</p>
<p>As a bonus, using enums will enforce more rules and help you out with errors the compiler might catch. Always prefer compile-time errors over run-time errors. <img src='http://www.crazygaze.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazygaze.com/blog/archives/39/feed</wfw:commentRss>
		</item>
		<item>
		<title>czPlayer 0.1.1 released</title>
		<link>http://www.crazygaze.com/blog/archives/38</link>
		<comments>http://www.crazygaze.com/blog/archives/38#comments</comments>
		<pubDate>Sun, 16 Dec 2007 22:13:51 +0000</pubDate>
		<dc:creator>Rui Figueira</dc:creator>
		
		<category><![CDATA[Game Development]]></category>

		<category><![CDATA[czPlayer]]></category>

		<guid isPermaLink="false">http://www.crazygaze.com/blog/archives/38</guid>
		<description><![CDATA[New release of czPlayer.
Just a few bug fixes in the internal mixer, and minor changes in the documentation.
Those bugs were particular hard to find and fix. They appeared mostly for short looped sounds, like those commonly used in chiptunes, causing some distortion or high pitch. I was making some wrong calculations for looped sounds, which [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><span lang="EN-GB">New release of czPlayer.<br />
Just a few bug fixes in the internal mixer, and minor changes in the documentation.<br />
Those bugs were particular hard to find and fix. They appeared mostly for short looped sounds, like those commonly used in chiptunes, causing some distortion or high pitch. I was making some wrong calculations for looped sounds, which caused 1 or 2 sound frames to be skipped for each sound. For big samples, you canâ€™t hear the difference, but for very short samples, especially looped, just 1 or 2 wrong frames can mess up the final mix, since they represent a significant part of the affected samples.<br />
I have a lot of changes planned, butÂ  I&#8217;m waiting for a client toÂ  finishÂ  his game before I go wild on the code! hehe<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><a href="http://www.crazygaze.com/blog/czplayer">Download lastest czPlayer demo.</a><o:p></o:p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazygaze.com/blog/archives/38/feed</wfw:commentRss>
		</item>
		<item>
		<title>First public version of czPlayer Sound System (0.1.0)</title>
		<link>http://www.crazygaze.com/blog/archives/36</link>
		<comments>http://www.crazygaze.com/blog/archives/36#comments</comments>
		<pubDate>Tue, 11 Dec 2007 18:22:08 +0000</pubDate>
		<dc:creator>Rui Figueira</dc:creator>
		
		<category><![CDATA[Game Development]]></category>

		<guid isPermaLink="false">http://www.crazygaze.com/blog/archives/36</guid>
		<description><![CDATA[I&#8217;ve just released the first public version of czPlayer Sound System.
There are still things to improve and features to add, but a client is already using it as-is, so I chose to release it right after some documentation updates and small fixes/improvements. I have a huge list of things I want to improve, but I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just released the first public version of <a href="http://www.crazygaze.com/blog/czplayer">czPlayer Sound System</a>.</p>
<p>There are still things to improve and features to add, but a client is already using it as-is, so I chose to release it right after some documentation updates and small fixes/improvements. I have a huge list of things I want to improve, but I know myself. Iâ€™m a perfectionist, and as a result Iâ€™m never really happy with my code. So if I just kept on this cycle, I would never release it ! <img src='http://www.crazygaze.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Better release something and work from there, than to be stuck improving and never release it.</p>
<p>As some of you might know already. czPlayer it&#8217;s a multiplatform sound system for games. Right now it supports Windows, Windows Mobile (PocketPC/Smartphone), Symbian, and PalmOS (full ARM with prc-tools).  The formats supported so far are MOD and IT for music, and WAV for sound. The next ones to come are probably ADPCM and <font size="-1">Ogg Vorbis, but that depends on the needs of my clients, and the priority of others things left to do.</font></p>
<p>If you&#8217;re interested in a commercial license, or using it in freeware, check it out: <a href="http://www.crazygaze.com/blog/czplayer">czPlayer Sound System</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazygaze.com/blog/archives/36/feed</wfw:commentRss>
		</item>
		<item>
		<title>Good UML Design Tool</title>
		<link>http://www.crazygaze.com/blog/archives/31</link>
		<comments>http://www.crazygaze.com/blog/archives/31#comments</comments>
		<pubDate>Fri, 16 Nov 2007 17:32:34 +0000</pubDate>
		<dc:creator>Rui Figueira</dc:creator>
		
		<category><![CDATA[Game Development]]></category>

		<category><![CDATA[software]]></category>

		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://www.crazygaze.com/blog/archives/31</guid>
		<description><![CDATA[
In some previous posts I talked a little about UML, but I never talked about what tool I use.
I have already tried a few.
- BOUML
- UML Pad
- Rational Rose . Only used some years ago, and never liked it.
- Visual Paradigm for UML
So far, and by far&#8230; the one I like the most is Visual [...]]]></description>
			<content:encoded><![CDATA[<p><!--adsense--><br />
In some previous posts I talked a little about UML, but I never talked about what tool I use.</p>
<p>I have already tried a few.</p>
<p>- <a href="http://bouml.free.fr/index.html">BOUML</a></p>
<p>- <a href="http://web.tiscali.it/ggbhome/umlpad/umlpad.htm">UML Pad</a></p>
<p>- Rational Rose . Only used some years ago, and never liked it.</p>
<p>- <a href="http://www.visual-paradigm.com/">Visual Paradigm for UML</a></p>
<p>So far, and by far&#8230; the one I like the most is <a href="http://www.visual-paradigm.com/">Visual Paradigm for UML</a> . The first time I looked at it, it scared me a little, with all the buttons, and functionality. But its quite a complete package. Great documentation, somewhat clutter free windows (considering the amount of functionality), and an amazing intuitive interface, that can get you going in no time.</p>
<p>For example, in a State Machine Diagram, just place the initial state, and you can do most stuff from there without ever leaving the design area, simply pulling the other states from that one. Mouse gestures really help with productivity. First time I discovered those, it reminded me of &#8220;Black and White&#8221;. Depending on the kind of diagram we are working on, we&#8217;ll have some specific gestures available. For example, in a Class Diagram, we have a gestures to create classes, packages, add operations, attributes, and so on.</p>
<p>Most gestures are easy to remember, but to make things even easier, we even have a fast lookup window:</p>
<p><img src="http://www.crazygaze.com/blog/wp-content/uploads/2007/11/tj200711161728-1.jpg" alt="visual-paradigm_1.png (521x339 pixels)" height="339" hspace="1" vspace="1" width="521" /></p>
<p>That menu option will show you the available mouse gestures for each diagram type, like this:</p>
<p><img src="http://www.crazygaze.com/blog/wp-content/uploads/2007/11/tj200711161728-2.jpg" alt="visual-paradigm_2.png (410x511 pixels)" height="511" hspace="1" vspace="1" width="410" /></p>
<p>Thumbs up for Visual Paradigm. Really intuitive interface, that can really boost productivity.</p>
<p>Of course it has a lot more features, but the productivity boost was the most interesting to me.</p>
<p>If you&#8217;re looking for a good UML tool, give it a try. Maybe you&#8217;ll like it too. You can always use the Community Edition for a while, which is free for non-commercial use.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazygaze.com/blog/archives/31/feed</wfw:commentRss>
		</item>
		<item>
		<title>czPlayer Sound System is growing</title>
		<link>http://www.crazygaze.com/blog/archives/25</link>
		<comments>http://www.crazygaze.com/blog/archives/25#comments</comments>
		<pubDate>Mon, 15 Oct 2007 16:37:47 +0000</pubDate>
		<dc:creator>Rui Figueira</dc:creator>
		
		<category><![CDATA[Game Development]]></category>

		<category><![CDATA[audio engine]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[sound system]]></category>

		<guid isPermaLink="false">http://www.crazygaze.com/blog/archives/25</guid>
		<description><![CDATA[
czPlayer, the sound system I&#8217;ve been developing, it&#8217;s slowly growing. After a few days blind coding while porting to PalmOS, without having a device to test on, and not even an emulator (I&#8217;m compiling full-ARM code for PalmOS), today I was finally able to test it. Worked at the first try! I could only say&#8230; [...]]]></description>
			<content:encoded><![CDATA[<p><!--adsense--><br />
czPlayer, the sound system I&#8217;ve been developing, it&#8217;s slowly growing. After a few days blind coding while porting to PalmOS, without having a device to test on, and not even an emulator (I&#8217;m compiling full-ARM code for PalmOS), today I was finally able to test it. Worked at the first try! I could only say&#8230; Man,that&#8217;s strange, I wasn&#8217;t expecting that!</p>
<p>That was one in a million, I think. hehe</p>
<p>There are still some things to improve, features to add, and more refactoring to do, but its already working on Windows, Windows Mobile, Symbian, and Palm, which are my targeted platforms at the moment, so things should be easier now.</p>
<p>If anyone is interested, I&#8217;ll be licensing czPlayer in a very near future.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazygaze.com/blog/archives/25/feed</wfw:commentRss>
		</item>
		<item>
		<title>gEasy cancelled contract with Publisher</title>
		<link>http://www.crazygaze.com/blog/archives/24</link>
		<comments>http://www.crazygaze.com/blog/archives/24#comments</comments>
		<pubDate>Tue, 09 Oct 2007 10:31:31 +0000</pubDate>
		<dc:creator>Rui Figueira</dc:creator>
		
		<category><![CDATA[Game Development]]></category>

		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.crazygaze.com/blog/archives/24</guid>
		<description><![CDATA[The first day I was supposed to start working for gEasy, they tell me they cancelled the  contract with their publisher.
That means I&#8217;m available for any other contracts, if anyone reads this. 
Meanwhile, I&#8217;m working on my own projects, which should get me some income, particularly with BitRabbit.
Also, soon I&#8217;ll start posting some game [...]]]></description>
			<content:encoded><![CDATA[<p>The first day I was supposed to start working for gEasy, they tell me they cancelled the  contract with their publisher.</p>
<p>That means I&#8217;m available for any other contracts, if anyone reads this. <img src='http://www.crazygaze.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Meanwhile, I&#8217;m working on my own projects, which should get me some income, particularly with <a href="http://www.bitrabbit.net/">BitRabbit</a><a href="http://www.bitrabbit.net/">.</a></p>
<p>Also, soon I&#8217;ll start posting some game development articles. I already have some topics planned to start with, like:</p>
<p>- Game states<br />
- GUI<br />
- Sound<br />
- Networking (maybe)</p>
<p>Its just some ideas I want to start with. Graphics is out of that list for a while.<br />
I will most probably concentrate on mundane tasks I encountered and learned during the time I worked on Galactic Melee. Those things we don&#8217;t think about when we first start a game, but eventually we&#8217;ll get to it, like how to manage game states (menu, gameplay, credits, etc), or how to plan the code for a UI screen, which is in fact easy, but for a non-trivial UI screen, you&#8217;ll find yourself complicating the code a lot whenever you want to add more functionality.For that, planning with state-diagrams and implementing it with that approach too, made things a lot easier for me.</p>
<p>Anyway, as soon as I start posting those articles, if they are of any interest to you, you can buy me a coffee (read <em>__donation__</em>). You should see a link on the sidebar for that.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazygaze.com/blog/archives/24/feed</wfw:commentRss>
		</item>
		<item>
		<title>Multiplatform issues</title>
		<link>http://www.crazygaze.com/blog/archives/18</link>
		<comments>http://www.crazygaze.com/blog/archives/18#comments</comments>
		<pubDate>Mon, 17 Sep 2007 15:01:36 +0000</pubDate>
		<dc:creator>Rui Figueira</dc:creator>
		
		<category><![CDATA[Game Development]]></category>

		<guid isPermaLink="false">http://www.crazygaze.com/blog/archives/18</guid>
		<description><![CDATA[While porting my sound engine to other platforms I came across several platform limitations.
The easier one, turned out to be Win32 and Windows Mobile, of course. Good development tools, debugger, etc, and Symbian and Palm the harder ones.
What Iâ€™ve learned so far is that when coding multiplatform code, its really hard to keep the design [...]]]></description>
			<content:encoded><![CDATA[<p>While porting my sound engine to other platforms I came across several platform limitations.<br />
The easier one, turned out to be Win32 and Windows Mobile, of course. Good development tools, debugger, etc, and Symbian and Palm the harder ones.<br />
What Iâ€™ve learned so far is that when coding multiplatform code, its really hard to keep the design as we want. We often need to hack stuff to defeat platform limitations.<br />
With the limitations I knew about, I started refactoring and changing the design of the library. When I had all set, to avoid Symbian limitations, and started the Palm port, more problems!<br />
The lack of documentation on some platforms doesnâ€™t help either.<br />
Itâ€™s really frustrating this kind of situation when we have scarce documentation, follow the rules, and it still fails. A lot of trial and error, where along the way we find small platform quirks which are not documented, or deeply buried in the documentation.<br />
Iâ€™ve done a lot of refactoring, to account for the limitations I already knew about while at the same time keeping a reasonably clean design, but then I found more limitations on Palm.<br />
Itâ€™s time for more refactoring to overcome more limitations!<br />
I usually like to sayâ€¦<br />
â€œ<em>If it can be done, I can do it.</em>â€?&#8230; But it may take a while! <img src='http://www.crazygaze.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.crazygaze.com/blog/archives/18/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
