<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Game Design and Appreciation Club &#187; Resources</title>
	<atom:link href="http://cppgamedesign.com/archives/category/resources/feed" rel="self" type="application/rss+xml" />
	<link>http://cppgamedesign.com</link>
	<description>Cal Poly Pomona IGDA Student Chapter</description>
	<lastBuildDate>Tue, 20 Oct 2009 23:20:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Simulations Part 1: Timing and Interpolation</title>
		<link>http://cppgamedesign.com/archives/429</link>
		<comments>http://cppgamedesign.com/archives/429#comments</comments>
		<pubDate>Sat, 29 Aug 2009 19:39:45 +0000</pubDate>
		<dc:creator>DefendMyCause</dc:creator>
				<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://cppgamedesign.com/?p=429</guid>
		<description><![CDATA[Every wonder how games are continually able to run at the same speed and frame increments across multiple hardware types / platforms? Find out the explanation here.]]></description>
			<content:encoded><![CDATA[<p>Hello and welcome to<strong> Simulations 101</strong>. This hopefully should clear up the why’s and how’s of making things happen at the correct time and speed in a video game / simulation. This is an abstract tutorial in the category of general game programming. Any techniques explained in this &#8216;Simulations&#8217; Series will generally be organized from easy/obvious/inefficient to hard/not-so-obvious/efficient.  Unless there are special-considerations for specific languages, algorithms will be presented in pseudo-code that people familiar with java and c++ can follow.</p>
<h2><strong>To start, some definitions:</strong></h2>
<p><span style="text-decoration: underline;"><strong>High Resolution</strong>:</span> this means that small increments of time can be discerned. Usually in games this means around the tens of milliseconds to nanoseconds range when talking about video games.</p>
<p><span style="text-decoration: underline;"><strong>Low Resolution</strong>:</span> this means that only large increments of time can be measured. Anything above one second (minutes, hours, months, years, centuries… etc.) is considered low resolution for a video game</p>
<p><span style="text-decoration: underline;"><strong>Refresh rate</strong>:</span> how many times a monitor or LCD is refreshed. Almost certainly going to be between 60 -85 Hz (60- 85 times a second).</p>
<p><span style="text-decoration: underline;"><strong>Frame rate</strong>:</span> how many times the image for the game is changed. Your screen will always be refreshed 60 times a second but if your game takes half a second (0.5 seconds) to compute player positions, collision,  awesome particle effects, and then display the changes; your frame rate is going to be 2 (the screen will be refreshed 30 times with the same image because your game hasn’t gotten around to changing the memory where your video is stored but spent time doing other game logic stuff).</p>
<p><strong><span style="text-decoration: underline;">Game-Speed / Time Step:</span> </strong>Game speed is totally different concept than fps or refresh although they can be dependant on one another. A constant game-speed is desired for anyone who plays your video game so that you can design a fair game with predictable results.  All the concepts presented here are basically to achieve a constant rate for gameplay despite varying cpu and fps changes. A time step is just the time that goes by in any simulation &#8211; Sometimes there are multiple time steps that happen in a frame to increase the accuracy of the simulation</p>
<p><strong><br />
</strong></p>
<p>Ok, hopefully you understand most of that. Next, here is a brief explanation of the three main timing techniques used for games</p>
<h3><strong><span style="text-decoration: underline;">Technique #1 –  Non-Stop Game-Loop with loop delays</span></strong></h3>
<p>This is by far the most used way to time video games on older generation video game consoles and computers &#8211; <strong>DON&#8217;T DO IT!!!</strong>. Rendering the graphics and doing game logic were developed with particular machines with a particular cpu speed and with the expectation that the video game will not have full control of all computing resources and will not share it.</p>
<table border="1">
<tbody>
<tr>
<th>Example 1</th>
</tr>
<tr>
<td>
<style type="text/css">
.comment { color: #999999; font-style: italic; }
.pre { color: #000099; }
.string { color: #009900; }
.char { color: #009900; }
.float { color: #996600; }
.int { color: #999900; }
.bool { color: #000000; font-weight: bold; }
.type { color: #FF6633; }
.flow { color: #FF0000; }
.keyword { color: #990000; }
.operator { color: #663300; font-weight: bold; }
</style>
<p></head><br />
<body></p>
<pre><span class="flow">while</span><span class="operator">(!</span>ending<span class="operator">)
{</span>
    runGame<span class="operator">();</span><span class="comment"> //updates your game status and simulation
</span>    drawGame<span class="operator">();</span><span class="comment"> //draws everything in their appropriate positions on the screen
</span><span class="operator">}</span><span class="type">
void</span> runGame<span class="operator">()
{</span><span class="type">
    float</span> unit<span class="operator"> =</span><span class="float"> 4.5</span><span class="operator">;</span>
    xTransformSprite<span class="operator">(</span>unit<span class="operator">);
}</span></pre>
</td>
</tr>
</tbody>
</table>
<p>In the main game-loop, which is running constantly, a tiny loop that does nothing inside of it but waste time by counting to some constant, is tweaked by the programmer (sometimes user defined) and is used to delay for a certain period until the program updates at the desired frame rate.</p>
<p>As you can see, downsides to this approach include a barrier of putting hard-coded values in your code, that when your program take longer than you anticipated for the game-loop, all those values have to be accommodated for a slower frame rate.</p>
<h3><strong><span style="text-decoration: underline;">Technique #2 – Callbacks and Interrupts </span></strong></h3>
<p>This process is actually still very common and is very similar to the previous technique except for 2 small differences. The first is that instead of using a loop, it requests the Operating System to wait for a specified period of time and then come back. The other difference and advantage is that this gives other programs a chance to run.</p>
<p>a call-back for a game loop might look something like this using Allegro</p>
<table border="1">
<tbody>
<tr>
<th>Example 2</th>
</tr>
<tr>
<td>
<style type="text/css">
.comment { color: #999999; font-style: italic; }
.pre { color: #000099; }
.string { color: #009900; }
.char { color: #009900; }
.float { color: #996600; }
.int { color: #999900; }
.bool { color: #000000; font-weight: bold; }
.type { color: #FF6633; }
.flow { color: #FF0000; }
.keyword { color: #990000; }
.operator { color: #663300; font-weight: bold; }
</style>
<p></head><br />
<body></p>
<pre><span class="flow">while</span><span class="operator">(!</span>ending<span class="operator">)
{</span>
    runGame<span class="operator">();</span><span class="comment"> //updates your game status and simulation
</span>    drawGame<span class="operator">();</span><span class="comment"> //draws everything in their appropriate positions on the screen
</span>    rest<span class="operator">(</span><span class="int">50</span><span class="operator">);</span><span class="comment"> // tells the system to take back control and return in 50 milliseconds
</span><span class="operator">}</span><span class="type">
void</span> runGame<span class="operator">()
{</span><span class="type">
    float</span> unit<span class="operator"> =</span><span class="float"> 4.5</span><span class="operator">;</span>
    xTransformSprite<span class="operator">(</span>unit<span class="operator">);
}</span></pre>
</td>
</tr>
</tbody>
</table>
<p>For handheld systems, hardware interrupts are a way of performing this exact task they are similar to callbacks except they are a very reliable way of timing your game. On the Game boy advance, for example, all the game logic and drawing has to be done in between the screen refresh, and it is called from the beginning every time the screen is rendered. On the GBA the screen Refresh, FPS and Game-loop are all synchronized. As long as you have complete control of the hardware as in the case of the GBA, this method is a very suitable way to time your game. Even If you don’t have control over the hardware, no-one will probably get on your case if you stick with this method if your game is fairly simple.</p>
<h3><strong><span style="text-decoration: underline;">Technique #3 – Delta Time</span></strong></h3>
<p>This is where things start to get hairy. Depending on the language you use and the OS, getting current system time at a high resolution can be very different. One way to solve this is to use a High Resolution Timer Library where someone has done all the hard work.</p>
<p>The basic idea is that all systems are generally guaranteed to provide accurate time up to the second but no more. Access to the OS’s API probably reveals functions that aren’t very friendly to timing your games in tenths or hundredths of a second but probably in “Clock Ticks”,  and may even provide a clock ticks per second function. Although the thought of learning windows programming may be strike fear in the novice programmer, like I said before, there are other options: Java and C# have pretty good timer functions. For C++, there are many game and general utility libraries also provide a high-resolution timer function that is easy to use in game. The following is usually how it&#8217;s done if you get your time in milliseconds -</p>
<table border="1">
<tbody>
<tr>
<th>Example 3</th>
</tr>
<tr>
<td>
<style type="text/css">
.comment { color: #999999; font-style: italic; }
.pre { color: #000099; }
.string { color: #009900; }
.char { color: #009900; }
.float { color: #996600; }
.int { color: #999900; }
.bool { color: #000000; font-weight: bold; }
.type { color: #FF6633; }
.flow { color: #FF0000; }
.keyword { color: #990000; }
.operator { color: #663300; font-weight: bold; }
</style>
<p></head><br />
<body></p>
<pre><span class="type">int</span> last<span class="operator"> =</span> System<span class="operator">.</span>getTimeMillisecond<span class="operator">();</span><span class="comment"> //our timing library function in milliseconds
</span><span class="type">int</span> current<span class="operator"> =</span> last<span class="operator">;</span><span class="flow">
while</span><span class="operator">(!</span>ending<span class="operator">)
{</span>
    runGame<span class="operator">(</span>current – last<span class="operator">);</span><span class="comment"> //updates your game status and simulation
</span>    drawGame<span class="operator">();</span><span class="comment"> //draws everything in their appropriate positions on the screen
</span>    last<span class="operator"> =</span> current<span class="operator">;</span>
    current<span class="operator"> =</span> System<span class="operator">.</span>getTimeMillisecond<span class="operator">();
}</span><span class="type">
void</span> runGame<span class="operator">(</span><span class="type">int</span> delta<span class="operator">)
{</span><span class="type">
    float</span> secondsSinceLastFrame<span class="operator"> =</span> delta<span class="operator"> /</span><span class="float"> 1000.0</span><span class="operator">;</span><span class="type">
    float</span> unit<span class="operator"> =</span><span class="float"> 4.5</span><span class="operator">;</span>
    xTransformSpriteUnitsPerSecond<span class="operator">(</span>unit<span class="operator"> *</span>secondsSinceLastFrame<span class="operator">);
}</span></pre>
</td>
</tr>
</tbody>
</table>
<p>And that&#8217;s it! I think Koray has done some Windows API timing so well see if that stuff makes it in here.</p>
<p>This is just a rough draft so please email me of missing/wrong information or what you would want in simulations 102 (particles anyone?).</p>
]]></content:encoded>
			<wfw:commentRss>http://cppgamedesign.com/archives/429/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Just in case you missed out.</title>
		<link>http://cppgamedesign.com/archives/83</link>
		<comments>http://cppgamedesign.com/archives/83#comments</comments>
		<pubDate>Sun, 05 Jul 2009 02:50:25 +0000</pubDate>
		<dc:creator>Koray</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">http://cppgamedesign.com/?p=83</guid>
		<description><![CDATA[Viewable presentations from our club meetings.]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;">
<p style="text-align: center;"><strong>Coming Soon</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://cppgamedesign.com/archives/83/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating a Game-State System</title>
		<link>http://cppgamedesign.com/archives/80</link>
		<comments>http://cppgamedesign.com/archives/80#comments</comments>
		<pubDate>Sun, 05 Jul 2009 02:44:50 +0000</pubDate>
		<dc:creator>Koray</dc:creator>
				<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://cppgamedesign.com/?p=80</guid>
		<description><![CDATA[Learn how to create your own game-state system that will allow you to seamlessly transition between parts of your game.]]></description>
			<content:encoded><![CDATA[<h3><strong>An Introduction</strong></h3>
<p>Take a look around. Every game that is currently on the market &#8212; and probably 75% of all amateur games made &#8212; feature some kind of menu system. Oddly though, one of the most common questions that I come across from people looking to make their own games, is how exactly do you get that effect? And not just from a conceptual standpoint, how do you <strong>implement a menu system</strong> that can take care of loading systems, splash screens, menu options, and above all just rendering the game?</p>
<p>Well, the hope is that this tutorial will clarify just that. Most of the examples will be in pseduo-code format, but if you have any questions on implementation feel free to ask me or any of our officer team. Rest assured though, the examples that I will provide <em>should </em>be enough to start coding up your own game state system.</p>
<h3><strong>Primer</strong></h3>
<p>The basic premise behind any game, is that there&#8217;s a continuous loop constantly running throughout the program &#8212; and it&#8217;s basically up to you to decide what happens within it. This process is commonly referred to as the <strong>game loop</strong>, and it will normally handle all of the rendering, sound, music, physics, and whatever else is happening in your game.  Simply put, the game-state system is designed to allow control in what gets rendered, what inputs do and do not get processed, what music / sounds get played, and whatever else you might want to control throughout the life of your program.</p>
<p>Think of the game-state system as a giant<strong> switch-case</strong> block within your game loop. For example:</p>
<table border="1">
<tbody>
<tr>
<th>Example 1</th>
</tr>
<tr>
<td>
<style type="text/css">
.comment { color: #999999; font-style: italic; } .pre { color: #000099; } .string { color: #009900; } .char { color: #009900; } .float { color: #996600; } .int { color: #999900; } .bool { color: #000000; font-weight: bold; } .type { color: #FF6633; } .flow { color: #FF0000; } .keyword { color: #990000; } .operator { color: #663300; font-weight: bold; }
</style>
<pre><span class="type">void</span> Game<span class="operator">::</span>gameLoop<span class="operator">()
{</span><span class="flow">
	switch</span><span class="operator">(</span>gameState<span class="operator">-&gt;</span>gamestate<span class="operator">)
	{</span><span class="flow">
		case</span> gameState<span class="operator">-&gt;</span>LOADINGSCREEN<span class="operator">:</span><span class="flow">
			break</span><span class="operator">;</span><span class="flow">

		case</span> gameState<span class="operator">-&gt;</span>ENGINESCREEN<span class="operator">:</span><span class="flow">
			break</span><span class="operator">;</span><span class="flow">

		case</span> gameState<span class="operator">-&gt;</span>INTROSCREEN<span class="operator">:</span><span class="flow">
			break</span><span class="operator">;</span><span class="flow">

		case</span> gameState<span class="operator">-&gt;</span>MENUSCREEN<span class="operator">:</span><span class="flow">
			break</span><span class="operator">;</span><span class="flow">

		case</span> gameState<span class="operator">-&gt;</span>SINGLEPLAYER<span class="operator">:</span><span class="flow">
			break</span><span class="operator">;</span><span class="flow">

		case</span> gameState<span class="operator">-&gt;</span>MULTIPLAYER<span class="operator">:</span><span class="flow">
			break</span><span class="operator">;</span><span class="flow">

		case</span> gameState<span class="operator">-&gt;</span>KIOSK<span class="operator">:</span><span class="flow">
			break</span><span class="operator">;</span><span class="flow">

		case</span> gameState<span class="operator">-&gt;</span>CREDITS<span class="operator">:</span><span class="flow">
			break</span><span class="operator">;
	}
}</span></pre>
</td>
</tr>
</tbody>
</table>
<p>The code above shows a skeleton function for a game-loop. The <strong>case&#8217;s</strong> obviously have no true implementation at the moment, but that is irrelevant. Somewhere outside of this statement in other game / engine code, another function could trigger the changing of a game-state. When that happens, something like this could occur:</p>
<table border="1">
<tbody>
<tr>
<th>Example 2</th>
</tr>
<tr>
<td>
<style type="text/css">
.comment { color: #999999; font-style: italic; }
.pre { color: #000099; }
.string { color: #009900; }
.char { color: #009900; }
.float { color: #996600; }
.int { color: #999900; }
.bool { color: #000000; font-weight: bold; }
.type { color: #FF6633; }
.flow { color: #FF0000; }
.keyword { color: #990000; }
.operator { color: #663300; font-weight: bold; }
</style>
<pre><span class="type">void</span> Game<span class="operator">::</span>gameLoop<span class="operator">()
{</span><span class="flow">
	switch</span><span class="operator">(</span>gameState<span class="operator">-&gt;</span>gamestate<span class="operator">)
	{</span><span class="flow">
		case</span> gameState<span class="operator">-&gt;</span>LOADINGSCREEN<span class="operator">:</span><span class="comment">

			/*
			* The game runs a load functions for game components
			* When the function finishes, it triggers our gameState
			* object to go to the next game state which is ENGINESCREEN
			* as seen below
			*/</span><span class="flow">

			break</span><span class="operator">;</span><span class="flow">

		case</span> gameState<span class="operator">-&gt;</span>ENGINESCREEN<span class="operator">:</span><span class="flow">
			break</span><span class="operator">;
	}
}</span></pre>
</td>
</tr>
</tbody>
</table>
<p>At this point, instead of rendering our loading screens, the game could now be rendering a splash screen, playing new music, and doing whatever else that was inside the next case statement. And there you go, you have your first state change withing your game.</p>
<p>In C++, the <strong>switch-case </strong>statement can only accept integer types for the switch case statement &#8212; <strong>lame</strong>. Lucky for us however, we treat anything we want as an <a href="http://www.cprogramming.com/tutorial/enum.html">enumeration</a>, which is readable to us, and internally represented as an <strong>int </strong>value.</p>
<table border="1">
<tbody>
<tr>
<th>Example 3</th>
</tr>
<tr>
<td>
<style type="text/css">
.comment { color: #999999; font-style: italic; }
.pre { color: #000099; }
.string { color: #009900; }
.char { color: #009900; }
.float { color: #996600; }
.int { color: #999900; }
.bool { color: #000000; font-weight: bold; }
.type { color: #FF6633; }
.flow { color: #FF0000; }
.keyword { color: #990000; }
.operator { color: #663300; font-weight: bold; }
</style>
<p></head></p>
<pre><span class="keyword">class</span> GameState<span class="operator">
{</span><span class="keyword">

public</span><span class="operator">:</span><span class="keyword">
	static</span> GameState<span class="operator">*</span> getInstance<span class="operator">();</span><span class="keyword">

	enum</span> State<span class="operator"> {</span> LOADINGSCREEN<span class="operator">,</span> ENGINESCREEN<span class="operator">,</span> INTROSCREEN<span class="operator">,
	</span> MENUSCREEN<span class="operator">,</span> SINGLEPLAYER<span class="operator">,</span> MULTIPLAYER<span class="operator">,</span> KIOSK<span class="operator">,
	</span> CREDITS<span class="operator">,</span> INSTRUCTIONS<span class="operator">};</span><span class="type">

	int</span> gamestate<span class="operator">;

	~</span>GameState<span class="operator">();</span><span class="keyword">

protected</span><span class="operator">:</span>
	GameState<span class="operator">();</span>

	GameState<span class="operator">(</span><span class="keyword">const</span> GameState<span class="operator">&amp;);</span>
	GameState<span class="operator">&amp;</span><span class="keyword"> operator</span><span class="operator">= (</span><span class="keyword">const</span> GameState<span class="operator">&amp;);</span><span class="keyword">

private</span><span class="operator">:</span><span class="keyword">
	static</span> GameState<span class="operator">*</span> instance<span class="operator">;
};</span></pre>
</td>
</tr>
</tbody>
</table>
<p>The code above was taken directly from our <strong><a href="http://cppgamedesign.com/?p=98">PHASE </a></strong>project, so for now ignore everything in the code except for the <strong>enum State</strong> statement and <strong>int gamestate</strong>.</p>
<h3><strong>Whew, done</strong></h3>
<p>The great thing about the state system is that it can be applied to many problems in game programming. For example, a great way to manage weapons in a first person shooter, would be to make a state machine like our previous examples, but instead apply it to switching through an inventory of your arsenal using the <strong>mouse wheel</strong> or <strong>number keys</strong>. You could even have <strong>nested state systems</strong> to handle more complicated tasks &#8212; such as loading levels in a particular game-state (I.E. Singleplayer mode):</p>
<table border="1">
<tbody>
<tr>
<th>Example 4</th>
</tr>
<tr>
<td>
<style type="text/css">
.comment { color: #999999; font-style: italic; }
.pre { color: #000099; }
.string { color: #009900; }
.char { color: #009900; }
.float { color: #996600; }
.int { color: #999900; }
.bool { color: #000000; font-weight: bold; }
.type { color: #FF6633; }
.flow { color: #FF0000; }
.keyword { color: #990000; }
.operator { color: #663300; font-weight: bold; }
</style>
<p></head></p>
<pre><span class="type">void</span> Game<span class="operator">::</span>gameLoop<span class="operator">()
{</span><span class="flow">
	switch</span><span class="operator">(</span>gameState<span class="operator">-&gt;</span>gamestate<span class="operator">)
	{</span><span class="flow">
		case</span> gameState<span class="operator">-&gt;</span>SINGLEPLAYER<span class="operator">:</span><span class="flow">
			switch</span><span class="operator">(</span>Level<span class="operator">-&gt;</span>level<span class="operator">)
			{</span><span class="flow">
				case</span> mouse<span class="operator">-&gt;</span>LEVELONESELECT<span class="operator">:</span>
					levelOne<span class="operator">-&gt;</span>render<span class="operator">();</span><span class="flow">
					break</span><span class="operator">;</span><span class="flow">

				case</span> mouse<span class="operator">-&gt;</span>LEVELTWOSELECT<span class="operator">:</span>
					levelTwo<span class="operator">-&gt;</span>render<span class="operator">();</span><span class="flow">
					break</span><span class="operator">;</span><span class="flow">

				case</span> mouse<span class="operator">-&gt;</span>LEVELTHREESELECT<span class="operator">:</span>
					levelThree<span class="operator">-&gt;</span>render<span class="operator">();</span><span class="flow">
					break</span><span class="operator">;
			}</span><span class="flow">
			break</span><span class="operator">;
	}
}</span></pre>
</td>
</tr>
</tbody>
</table>
<p>And there you have it folks, a working game-state system <img src='http://cppgamedesign.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://cppgamedesign.com/archives/80/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How do I get a job as a game _____ ?</title>
		<link>http://cppgamedesign.com/archives/41</link>
		<comments>http://cppgamedesign.com/archives/41#comments</comments>
		<pubDate>Sun, 05 Jul 2009 01:34:49 +0000</pubDate>
		<dc:creator>Koray</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Careers]]></category>
		<category><![CDATA[GDC]]></category>
		<category><![CDATA[IGDA]]></category>
		<category><![CDATA[Jobs]]></category>
		<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://cppgamedesign.com/?p=41</guid>
		<description><![CDATA[Learn how to get into the game industry.]]></description>
			<content:encoded><![CDATA[<p>Getting a job in the game industry is not easy. In fact it is probably one of the most competitive industries in the world. But there are plenty of ways to increase your chances of beating the guy next to you, and all that it requires is your tenacity.</p>
<h3><span style="text-decoration: underline;"><strong>The Three Questions</strong></span></h3>
<h3 style="padding-left: 30px;"><span style="color: #000000;"><strong>Do I have a portfolio?</strong></span></h3>
<p style="padding-left: 60px;">This is probably one of the most important parts of getting a job in the game industry. If you don&#8217;t have a portfolio, the other guy will, and that&#8217;s a problem. Portfolio&#8217;s are meant to show off your previous work done. In this day and age, employers expect that you have already done your homework in whatever discipline you aspire to take on as a career.</p>
<h4 style="padding-left: 60px;"><strong>Programming &#8211;<a href="http://www.gregsanto.com/" target="_blank"> </a></strong><a href="http://www.gregsanto.com/" target="_blank">Example Portfolio Site</a></h4>
<p style="padding-left: 60px;">Programmers need to make games that showcase what it is they want to do. For example, if you want to create AI systems in the industry, create something that showcases your knowledge on exactly that! Another example would be a graphics programmer making a game that showcased their knowledge of shaders. Your future employer does not want to be confused on your ambitions, so make it extremely clear what it is you want to do through your work, and your website.</p>
<h4 style="padding-left: 60px;"><strong>Art </strong><strong>&#8211; </strong><a href="http://goodbrush.com/" target="_blank">Example Portfolio Site</a></h4>
<p style="padding-left: 60px;">Same goes for artists as it does for programmers &#8212; specialization is key. Becoming a conceptual artist require different preparation than becoming a 3D animator or level designer. Whatever your niche may be, you still need many examples of your work.</p>
<h4 style="padding-left: 60px;"><strong>Design </strong><strong>&#8211; </strong><a href="http://www.moboid.com/portfolio/" target="_blank">Example Portfolio Site</a> &#8212; <a href="http://www.gamecareerguide.com/features/464/the_game_design_portfolio_is_.php" target="_blank">Game Career Guide Information</a></h4>
<p style="padding-left: 60px;">Becoming a game designer is not easy. Normally game design positions are really allocated to those with industry experience, but there are exceptions to anything. If you want to become a game designer you need full work games. A common misconception is that creating a game design document is what employers are looking for. This is very wrong, your peers want to see working games that they can play and analyze &#8212; such as a complete board game &#8212; although you will need to refer to the link posted above for more clarification.</p>
<h3 style="padding-left: 30px;"><span style="color: #000000;"><strong>Do I have connections?</strong></span></h3>
<h4 style="padding-left: 60px;"><span style="color: #000000;"><a href="http://www.gdconf.com/" target="_blank"><strong>Game Developers Conference</strong></a> &#8211;<strong> <a href="http://www.gamecareerguide.com/features/492/the_gdc_survival_.php" target="_blank">Survival Guide for GDC</a></strong><br />
</span></h4>
<p style="padding-left: 60px;"><span style="color: #000000;">Every year our officer team goes to <strong>GDC </strong>in San Francisco. If you are serious about entering this industry as a professional, this is a must go event. Contacts are everything in this game, and you can attain 40+ more actual game industry contacts just by showing up here and handing your resume / business card out like a mad-man.</span></p>
<h4 style="padding-left: 60px;"><span style="color: #0000ff;"><a href="http://www.igda.org/" target="_blank"><strong>IGDA Chapter meetings</strong></a></span></h4>
<p style="padding-left: 60px;"><span style="color: #000000;">Find your local <strong>IGDA </strong>chapter and go! <span style="color: #000000;">Plenty of industry members and enthusiasts are bound to be found in or around it. Google is your friend for finding out this sort of information in specifics. </span><strong><br />
</strong></span></p>
<p style="padding-left: 60px;">
<h3 style="padding-left: 30px;"><span style="color: #000000;"><strong>Do I have a degree?</strong></span></h3>
<p style="padding-left: 60px;"><span style="color: #000000;">You need to get a degree. Essentially a company has no reason to hire you if you don&#8217;t have a degree &#8212; unless you are a savant. But if you aren&#8217;t a savant, get your degree in whatever discipline you&#8217;re interested in. Here is a list of appropriate degrees for Cal Poly students.</span></p>
<h4 style="padding-left: 60px;"><strong>Programming</strong></h4>
<h4 style="padding-left: 60px;"><a href="http://www.csupomona.edu/~cs/" target="_blank">B.S. in Computer Science</a><br />
<a href="http://www.csupomona.edu/~ece" target="_blank">B.S. in Computer Engineering</a></h4>
<h4 style="padding-left: 60px;"><strong>Art and Design</strong></h4>
<h4 style="padding-left: 60px;"><a href="http://www.csupomona.edu/~art/" target="_blank">B.F.A in Graphic Design</a></h4>
<h2>If&#8230;</h2>
<p>and when you have answered all these questions with a big <strong>Yes</strong>, then it is time to start applying for jobs and internships. Below you will find a list of links in which to get started with the next part of your journey. Think of this whole process like a quest chain.</p>
<h3 style="padding-left: 30px;">Game Jobs</h3>
<h4 style="padding-left: 60px;"><a href="http://www.gamasutra.com/jobs/board.php" target="_blank"><strong>Gamasutra Listings</strong></a></h4>
<h4 style="padding-left: 60px;"><strong><a href="https://jobs.ea.com/home.aspx" target="_blank">EA Listings</a></strong></h4>
<h4 style="padding-left: 60px;"><strong><a href="http://www.blizzard.com/us/jobopp/" target="_blank">Blizzard Listings</a></strong></h4>
<h3 style="padding-left: 30px;"><strong>Game Internships</strong></h3>
<h4 style="padding-left: 60px;"><strong><a href="http://www.gamasutra.com/features/19991202/scheib_01.htm" target="_blank">Gamasutra Guide</a></strong></h4>
<p><strong><br />
</strong></p>
<h3><span style="text-decoration: underline;"><strong>For all other Information</strong></span><strong> </strong>(for the most part)</h3>
<p>Tom Sloper has put together an amazing questionnaire that should be review by any aspiring game developer. It is probably the most <a href="http://www.sloperama.com/advice.html" target="_blank"><strong>truthful guide </strong></a>I have ever read, and will definitely put you in a good direction in case you don&#8217;t believe anything that I am saying. In any case, enjoy:</p>
]]></content:encoded>
			<wfw:commentRss>http://cppgamedesign.com/archives/41/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Start making games now.</title>
		<link>http://cppgamedesign.com/archives/24</link>
		<comments>http://cppgamedesign.com/archives/24#comments</comments>
		<pubDate>Sun, 05 Jul 2009 00:10:49 +0000</pubDate>
		<dc:creator>Koray</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Engines]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://cppgamedesign.com/?p=24</guid>
		<description><![CDATA[A quick run-down of available tools for game development.]]></description>
			<content:encoded><![CDATA[<p>One of the biggest questions for many amateur game-programmers is &#8220;Where do I start?&#8221; Thankfully you&#8217;re on the right page to answer that very question. On this page we have compiled a list of many open source tools you can use to start creating games, as well as appropriate descriptions so that you can choose where you would like to begin on your journey.</p>
<h3><strong>Game Engines</strong></h3>
<p><a href="http://irrlicht.sourceforge.net/" target="_blank"><strong>Irrlicht Engine</strong></a> &#8212; <em>free</em></p>
<ul>
<li>One of the biggest benefits of Irrlicht is the amount of starter <a href="http://irrlicht.sourceforge.net/tutorials.html" target="_blank"><strong>tutorials</strong></a> that have been documented</li>
<li>It has language bindings with .Net, Java, C++, Python, Ruby, and Lua</li>
<li>Supports a wealth of level and model formats</li>
<li>3D rendering support with OpenGL, DirectX 8/9, and a custom software rasterizer</li>
</ul>
<p><a href="http://www.ogre3d.org" target="_blank"><strong>Ogre 3D Engine</strong></a> &#8212; <em>free</em></p>
<ul>
<li>A very robust 3D graphics engine written in and for C++</li>
<li>Not a game engine like Irrlicht &#8212; is purely for rendering in OpenGL or DirectX 9</li>
<li>Support handling for most 3D modeling export tools such as Maya, 3D Studio Max and Milkshape</li>
</ul>
<p><a href="http://www.garagegames.com/" target="_blank"><strong>GarageGames Torque Engine Series</strong></a> &#8212; <em>ranging from $150 &#8211; 350 for students</em></p>
<ul>
<li>Fully capable game engines complete with Audio/Input/GUI/3D and 2D rendering components</li>
<li>Some of the newer engines do not have full documentation and can be hard to use</li>
<li>The more successful engines such as Torque3D and Torque2D are widely support and have a very large user base</li>
<li>Come with many custom-made tools, and many books have been written on their engines</li>
</ul>
<h3><strong>Game Libraries<br />
</strong></h3>
<p><strong><a href="http://www.opengl.org/" target="_blank">OpenGL </a>&#8211; </strong><em>graphics<strong> / </strong>input</em><strong><br />
</strong></p>
<ul>
<li>cross-platform API for 2D and 3D graphics</li>
<li>hides the complexities of interfacing with different 3D accelerators</li>
<li>highly documented, many tutorials, many, many books on how to use it</li>
</ul>
<p><a href="http://msdn.microsoft.com/en-us/directx/aa937788.aspx" target="_blank"><strong>DirectX</strong></a> &#8212; <em>graphics / sound / input</em></p>
<ul>
<li>a collection of many API’s for handling tasks related to game programming</li>
<li>if you use pure DirectX for your projects, the dependencies are much easier to manage</li>
<li>Has language bindings for C++ and C#</li>
<li>has a lot of documentation which has been come in form of books / articles / tutorials</li>
</ul>
<p><a href="http://www.libsdl.org/" target="_blank"><strong>SDL </strong></a>&#8211; g<em>raphics / sound / input</em></p>
<ul>
<li>has the largest amount of available language bindings (refer to site for list)</li>
<li>is an abstraction of OpenGL, making it a bit easier to read and code with</li>
<li>highly documented in the form of books / tutorials / articles</li>
</ul>
<p><strong><a title="Allegro Game Library" href="http://alleg.sourceforge.net/">Allegro</a></strong>&#8211; g<em>raphics / sound / input</em></p>
<ul>
<li>game programming library for C/C++ developers distributed freely</li>
<li>Supports DOS, Unix (Linux, FreeBSD, Irix, Solaris, Darwin), Windows, QNX, BeOS and MacOS X</li>
<li>Very old and stable with lots of projects and tutorials</li>
<li>Simple API for graphics sound and input</li>
</ul>
<h3>Physics Libraries</h3>
<p><a title="PAL" href="http://www.adrianboeing.com/pal/index.html"><strong>PAL</strong></a> &#8211;<em> Physics Abstraction Layer</em></p>
<ul>
<li>Uniform API which has Plug and Play for almost all the major physics engines</li>
<li>Complete list <a title="supported physics engines" href="http://www.adrianboeing.com/pal/engines.html">here</a></li>
</ul>
<h3>Art, Modeling, and Sound</h3>
<p><a href="http://www.blender.org/" target="_blank"><strong>Blender</strong></a> &#8212; <em>all purpose model creation tool for games</em></p>
<ul>
<li>Can be used for modeling, UV unwrapping, texturing, rigging, water simulations, skinning, animating, rendering, particle and other simulations, non-linear editing, compositing, and creating interactive 3D applications.</li>
</ul>
<p><a href="http://www.gimp.org/" target="_blank"><strong>Gimp</strong></a> &#8212; <em>graphics tool</em></p>
<ul>
<li>It&#8217;s like Photoshop, but free</li>
</ul>
<p><a href="http://audacity.sourceforge.net/" target="_self"><strong>Audacity</strong></a> &#8212; <em>audio creation and editing tool</em></p>
<ul>
<li>cross-platform and is available for Windows, Mac OS X, Linux and BSD</li>
<li>many features, including multi-track mixing, amplitude envelope editing, selective noise removal, etc.</li>
</ul>
<p><strong><a href="http://chumbalum.swissquake.ch/" target="_blank">Milkshape3D</a> &#8211;<em> </em></strong><em>low polygon modeling tool</em></p>
<ul>
<li>famous for its large repertoire of export capabilities (70 file formats)</li>
<li>can also act as a skeletal animator and viewer</li>
</ul>
<h3><strong>Software Engineering</strong></h3>
<p><a href="http://ankhsvn.open.collab.net/" target="_blank"><strong>Subversion</strong></a> &#8212; <em>version control</em></p>
<ul>
<li>allows you to perform the most common version control operations directly from inside the Microsoft Visual Studio IDE</li>
<li>requires a web server for installation</li>
</ul>
<p><strong><a href="http://msdn08.e-academy.com/cpp_cs" target="_blank">MSDN Academic Alliance for Cal Poly Pomona students</a></strong></p>
<ul>
<li>Free Microsoft software for Cal Poly Pomona students</li>
<li>requires your Cal Poly Pomona login information to access</li>
</ul>
<p><strong><a href="http://www.eclipse.org/" target="_blank">Eclipse IDE</a> &#8211;<em> </em></strong><em>software development tool</em><strong> </strong></p>
<ul>
<li>Allows you to build programs in Java, C++, C, COBOL, Python, Perl and PHP</li>
<li>Supports many user-created plugins for the Eclipse Framework</li>
</ul>
<p><strong><a href="http://www.stack.nl/~dimitri/doxygen/" target="_blank">Doxygen </a>&#8211;<em> </em></strong><em>automatic API generation for projects</em></p>
<ul>
<li>generates documentation for C++, C, Java, Objective-C, Python, IDL (Corba and Microsoft flavors), Fortran, VHDL, PHP, C#,</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://cppgamedesign.com/archives/24/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
