<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8180452695906918671</id><updated>2012-02-11T13:47:47.737-05:00</updated><category term='C++'/><category term='Development'/><category term='Lesson'/><category term='Direct3D'/><category term='Download'/><category term='Motivation'/><category term='AI'/><category term='None'/><category term='Tools'/><category term='Process'/><category term='Design'/><category term='Math'/><category term='Art'/><category term='Android'/><category term='Announcement'/><category term='Event'/><category term='XNA'/><title type='text'>Game Developer Journey</title><subtitle type='html'>It's not the end result, but rather the journey that matters most!
&lt;br&gt;
Learning C++ Direct3D Game Programming</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>52</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-5147002210256379641</id><published>2012-02-10T00:11:00.005-05:00</published><updated>2012-02-10T01:13:16.141-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Mobile Game Development</title><content type='html'>When I first started this blog, I was most interested in creating PC games using C++ with Direct3D, part of the DirectX suite from Microsoft.  After a couple projects on my own, I started working with a team of guys interested in developing for the XBox 360 (and PC) using the C# language and the XNA Game Studio engine/framework.  Now that our tower defense game project is winding down, and having recently purchased a Kindle Fire, I'm considering creating an Android game I can play on the Fire.
&lt;br /&gt;&lt;br /&gt;
In the past couple years I've held off on learning an engine in the interest of "knowing how things work under the hood".  So I think it's definitely time to learn an engine or two.  I'm not sure if Android development is the right path for me, but here's a quick collection of notes based on the article &lt;a href="http://www.gamecareerguide.com/features/1043/excerpt_android_game_elements_and_.php"&gt;Android Game Elements and Tools&lt;/a&gt; to get me started.  Hopefully it will help some new Android developers out there too; just be sure to check out the article if you need more detailed instructions on getting things set up.
&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Develop Java code in the Eclipse IDE.&lt;/li&gt;
&lt;li&gt;The Java code will run in the Dalvik virtual machine on Android devices.&lt;/li&gt;
&lt;li&gt;Learn the Android SDK at &lt;a href="http://developer.android.com"&gt;developer.android.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Set up an Android Virtual Device (AVD) to run the program in an emulator.&lt;/li&gt;
&lt;li&gt;Use the &lt;a href="http://code.google.com/p/andengine/"&gt;AndEngine&lt;/a&gt; game engine.&lt;/li&gt;
&lt;li&gt;Use the Java port of the Box2D physics engine.  JBox2D is included in AndEngine.&lt;/li&gt;
&lt;li&gt;Use free tools Inkscape and GIMP for graphics.&lt;/li&gt;
&lt;li&gt;Use free tools Audacity and MuseScore for sound effects and music, respectively.
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-5147002210256379641?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/5147002210256379641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2012/02/android-mobile-game-development.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/5147002210256379641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/5147002210256379641'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2012/02/android-mobile-game-development.html' title='Android Mobile Game Development'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-8966539963661256880</id><published>2011-07-06T02:46:00.006-04:00</published><updated>2012-02-10T01:16:58.612-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Indie Startups - How Do You Collaborate?</title><content type='html'>Working with others is hard.  But being able to work remotely and have all your files merged together nicely is really cool.  I'm talking about source-control/versioning software, a tool that lets you maintain history of the changes to your files, as well as allowing everyone on the team to merge their changes to the project seamlessly.  There are a couple different versioning tools out there, but the one I'm most familiar with and enjoy using is Subversion.
&lt;br /&gt;&lt;br /&gt;
Since my team has decided we might consider selling our Tower Defense game at some point, we finally decided to remove its open source label and get smarter about how we secure our project. So I decided to set up my laptop as a Subversion (SVN) server; I know I should really use a spare server but I don't have one lying around.  So I installed SVN server, got the repository and permissions set up, configured my router to forward the SVN port to a static internal IP address, and... VOILA! I had a working SVN repository accessible via the internet.
&lt;br /&gt;&lt;br /&gt;
Unfortunately my upload speed, which measured .96Mbps on &lt;a href='http://www.speedtest.net'&gt;speedtest.net&lt;/a&gt;, was providing an abysmal 120kBps download rate for my team members trying to update their working copy of the project -- and let's not even mention the 2+ hours spent on the initial checkout!  By comparison, downloads from our open source provider were roughly 1500kBps.  I was a little perplexed as to WHY my 1 meg-per-second upload rate was so slow until I saw &lt;a href='http://www.dfwmustangs.net/forums/showthread.php?t=5501'&gt;this forum post&lt;/a&gt;, specifically the comment by JC316.  Mega&lt;strong&gt;bits&lt;/strong&gt; are eight times smaller than Mega&lt;strong&gt;bytes&lt;/strong&gt;, and when I did the math I realized that 120kBps (120,000 * 8 = 960,000 bits) is the same as .96Mbps (.96 * 1,000,000).  &lt;br /&gt;&lt;br /&gt;
The reality is that my upload speed is just too slow.  We don't have an office to work out of yet and I don't want to shell out $100+ per month for internet service just for a better upload rate.  We're considering other closed-source SVN hosting services for now, but I have to wonder...
&lt;br /&gt;&lt;br /&gt;
As an indie startup with team members working remotely over the internet, how do YOU collaborate?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-8966539963661256880?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/8966539963661256880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2011/07/indie-startups-how-do-you-collaborate.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/8966539963661256880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/8966539963661256880'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2011/07/indie-startups-how-do-you-collaborate.html' title='Indie Startups - How Do You Collaborate?'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-7866048987579274373</id><published>2011-06-02T01:03:00.008-04:00</published><updated>2012-02-10T01:20:32.195-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><category scheme='http://www.blogger.com/atom/ns#' term='Motivation'/><title type='text'>Phoenix Rising</title><content type='html'>&lt;div style="float:left;margin-right: 10px; margin-bottom: 10px;"&gt;&lt;img style="width: 240px; height: 160px; margin:0;padding:0" src="http://4.bp.blogspot.com/-BIS2D-on2rQ/TecjpXDZvCI/AAAAAAAAAIE/zwL-c0KxZZw/s320/3946697418_0d180e25d3_m.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5613494654010506274" /&gt;&lt;br /&gt;&lt;a href="http://creativecommons.org/licenses/by-nc-sa/2.0/"&gt;CC&lt;/a&gt; &lt;a href="http://www.flickr.com/photos/undergroundbastard/3946697418/"&gt;Source&lt;/a&gt;&lt;/div&gt;
You, my dear reader, deserve better than excuses.  But I'm afraid that's all I have for not posting in such a long time... just one single excuse... life :)  Things have been so busy, in fact, that I've barely had time to work on my game that I've &lt;a href="http://gamedeveloperjourney.blogspot.com/2010/01/current-project-tower-defense-game.html"&gt;alluded to&lt;/a&gt; in &lt;a href="http://gamedeveloperjourney.blogspot.com/2010/07/concept-art.html"&gt;posts of olde&lt;/a&gt;.  But if you somehow have my blog still on your "pages to check" list (or RSS reader for the web-savvy folk), I thank you for checking back.  And I look forward to reviving this dormant space.
&lt;br /&gt;&lt;br /&gt;
I have much to write about, having worked in XNA for about a year and a half at this point on a single game project.  But I figure, as an old proverb states, that "even a journey of 1000 miles starts with a single step."
&lt;br /&gt;&lt;br /&gt;
Btw, while I was gone Blogger added some new features.  Just for fun, check out this blog in some new dynamic views (requires IE8+, Firefox 3.5+, Chrome, or Safari):
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://gamedeveloperjourney.blogspot.com/view/flipcard"&gt;Flipcard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://gamedeveloperjourney.blogspot.com/view/mosaic"&gt;Mosaic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://gamedeveloperjourney.blogspot.com/view/sidebar"&gt;Sidebar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://gamedeveloperjourney.blogspot.com/view/snapshot"&gt;Snapshot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://gamedeveloperjourney.blogspot.com/view/timeslide"&gt;Timeslide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-7866048987579274373?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/7866048987579274373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2011/06/phoenix-rising.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/7866048987579274373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/7866048987579274373'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2011/06/phoenix-rising.html' title='Phoenix Rising'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-BIS2D-on2rQ/TecjpXDZvCI/AAAAAAAAAIE/zwL-c0KxZZw/s72-c/3946697418_0d180e25d3_m.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-4204479740977195767</id><published>2010-09-21T01:12:00.007-04:00</published><updated>2012-02-10T01:25:41.449-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><category scheme='http://www.blogger.com/atom/ns#' term='Art'/><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><category scheme='http://www.blogger.com/atom/ns#' term='Motivation'/><title type='text'>Three Lessons Learned</title><content type='html'>So I think I mentioned in my last post (two months ago?) that some buddies and I were working on a tower defense game that we hoped to demo at an upcoming conference in September.  As you may have noticed, September has almost come and gone but I haven't posted any stellar updates detailing the success of our demo at said conference.  
&lt;br /&gt;&lt;br /&gt;
Part of this is due to an unavoidable stall in development progress, which brings me to my first lesson learned.  When I realized the ever-increasing scope of the game I would soon be writing, I should have pulled in more developers.  As it is, I am currently the only programmer among a group of two 3D artists, two concept artists, and one musician.  Although there is a certain amount of pride in being able to take full ownership of the (increasingly large) code base, there is also much to be said for having a fellow to bounce ideas off of and having someone to share the load when you're not available.
&lt;br /&gt;&lt;br /&gt;
Another thing that's bitten us in the development of our game is not understanding core requirements in the beginning.  We think we have a great idea for a game and started prototyping the basics right away.  For a simple tower defense game, you have enemies moving from one end of the screen to the other, and that's what we created initially as a 2D game.  Once we had this basic prototype, we realized that it was pretty darn difficult to make projectiles with faux-depth in a 2D isometric view look right.  So we had to make the leap to the third dimension, which involved converting our 2D sprites into 3D rigged/animated/textured models.  We started creating 3D animated models right away before adding concept artists to the team; so the models had to be recreated.  But once we had our concepts, we needed to make specific decisions regarding Art Style - the overall game appearance - and this required new models yet again.  As a programmer I occasionally overlook these finer details; I mean, if all the characters on screen are moving to their correct destinations... it looks good!  But the second lesson I've learned is that Art Style is something that should be seriously considered early on in a game's development.
&lt;br /&gt;&lt;br /&gt;
Performance is also a major consideration for our game.  Although we want to have the best-looking game we can build, we also want it to be playable for as many people as possible, so limiting it to the highest-end graphics cards didn't seem right.  And given the fact that I was developing the game on a laptop with only 32MB of dedicated video memory at the time, I had a big problem creating a game I wouldn't be able to play!  So we took a step back and realized that our 3000-polygon models probably weren't going to cut the mustard.  But even with reduced-poly models, we wanted to do some fun stuff in our game like using outlines on our toon-lit models, particle effects, etc.  And some of these special effects are expensive operations that quickly drop frame rate and can cause the game to lag.  So as our designer likes to say it, the final lesson for today is to "prototype everything."  Although he doesn't &lt;em&gt;really&lt;/em&gt; mean to prototype &lt;em&gt;everything&lt;/em&gt;.  What should really be prototyped is all of the core systems of a game that could be rendered/executing together at the busiest point of the game's interaction: music, sound effects, lighting, particle effects, blur effects, and so on.  And provide a way to instantly, with the push of a button, drop a hundred or more models on the screen to simulate the game at its most computationally-intensive point to see how it will perform in the worst-case scenario.  Doing this type of prototyping early on can help identify where you need to save polygons or cut features that could prevent your intended audience from playing your game.
&lt;br /&gt;&lt;br /&gt;
The cool thing about my team is that we're all learning as we go, and sometimes part of that involves looking back and saying "You know, we could have..."  So I hope this helps as you start your next project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-4204479740977195767?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/4204479740977195767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/09/three-lessons-learned.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/4204479740977195767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/4204479740977195767'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/09/three-lessons-learned.html' title='Three Lessons Learned'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-343133698421759087</id><published>2010-07-18T18:08:00.012-04:00</published><updated>2012-02-10T01:27:19.630-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Art'/><title type='text'>Concept Art</title><content type='html'>As mentioned previously, I've been working on a fairly complex tower defense game for about eight months now with some very talented 3D and concept artists.  Although I'm not at liberty to disclose full details of our upcoming game, for which we've set a demo deadline of September 2010, I &lt;b&gt;can&lt;/b&gt; show off some concept art.  As a programmer, I'm learning the importance of having quality, researched concepts from which our 3D artists can generate models that are animated in the game.  Below are a couple defense units and a couple enemies to show a small piece of what we're working on.
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Defense: Light Infantry&lt;/strong&gt;&lt;br /&gt;
The light infantry in our game is the player's first line of defense against attacking enemies.  He wields a javelin and is a bit clumsy at first but improves his skill (e.g. throwing more than one javelin at once) when upgraded using cash earned from killing enemies.&lt;br /&gt;
&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:default; cursor:default;width: 320px; height: 225px;" src="http://2.bp.blogspot.com/_dKYKDpL5vqE/TEN-4mGOIXI/AAAAAAAAAHE/tQO1v7OFApo/s320/lightInfantry3.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5495375481086550386" /&gt;
&lt;br /&gt;
&lt;strong&gt;Defense: Heavy Infantry&lt;/strong&gt;&lt;br /&gt;
The heavy infantry does more damage than light infantry and attacks rapidly in a wild rage when upgraded.  A couple possible renderings are shown.&lt;br /&gt;
&lt;span style="display:block; text-align:center"&gt;
&lt;img style="cursor:default; cursor:default;height: 200px;" src="http://1.bp.blogspot.com/_dKYKDpL5vqE/TEN_ppHhZYI/AAAAAAAAAHU/MUNTAxZ5bno/s320/heavy_Infantry1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5495376323710903682" /&gt;
&lt;img style="cursor:default; cursor:default;height: 200px;" src="http://4.bp.blogspot.com/_dKYKDpL5vqE/TEN_pdj519I/AAAAAAAAAHM/5FDDZaBPg5A/s320/heavy_Infantry.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5495376320608720850" /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;strong&gt;Enemy: Cyclops&lt;/strong&gt;&lt;br /&gt;
The Cyclops is one of the boss enemies in the game.&lt;br /&gt;
&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:default; cursor:default;width: 228px; height: 320px;" src="http://2.bp.blogspot.com/_dKYKDpL5vqE/TEOAydYzueI/AAAAAAAAAHc/jkZ7NKrsr9g/s320/Scan10002.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5495377574692633058" /&gt;
&lt;br /&gt;
&lt;strong&gt;Enemy: Minotaur&lt;/strong&gt;&lt;br /&gt;
The Minotaur is another boss enemy in the game.&lt;br /&gt;
&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:default; cursor:default;width: 266px; height: 320px;" src="http://4.bp.blogspot.com/_dKYKDpL5vqE/TEOBiv4ISyI/AAAAAAAAAHs/oH_zGjSaNvM/s320/minataur4.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5495378404289563426" /&gt;
&lt;br /&gt;
So those are just a sneak preview of some of the artwork going into our tower defense game.  Note that this work is copyrighted by Insert Coin Interactive and may not be copied or reproduced in any way.  I look forward to showing more work and hopefully also some in-game screenshots when we're closer to demo completion!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-343133698421759087?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/343133698421759087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/07/concept-art.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/343133698421759087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/343133698421759087'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/07/concept-art.html' title='Concept Art'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_dKYKDpL5vqE/TEN-4mGOIXI/AAAAAAAAAHE/tQO1v7OFApo/s72-c/lightInfantry3.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-6798113338434953365</id><published>2010-07-15T13:26:00.004-04:00</published><updated>2012-02-10T01:28:23.535-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><category scheme='http://www.blogger.com/atom/ns#' term='Motivation'/><title type='text'>Making Games on the Side</title><content type='html'>As a hobbyist/indie game developer, I found the following Gamasutra article of particular interest.  It describes some of the challenges and sacrifices required to be a successful game developer, whether your definition of "success" is actually breaking in to the industry or simply making games for the love of doing it.  Hope you enjoy the article as much as I did.
&lt;br /&gt;&lt;br /&gt;
&lt;a href="http://www.gamasutra.com/view/feature/5895/making_games_on_the_side_.php?page=3"&gt;Making Games On The Side: Development In The Real World&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-6798113338434953365?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/6798113338434953365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/07/making-games-on-side.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6798113338434953365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6798113338434953365'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/07/making-games-on-side.html' title='Making Games on the Side'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-3322906600204617186</id><published>2010-07-01T20:44:00.005-04:00</published><updated>2012-02-10T01:30:26.150-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><title type='text'>Exciting Announcements!</title><content type='html'>I can hardly believe it's been two months since my last post.  Where does the time go?!?  I haven't been posting lately but have a feeling that will change soon.  And I have a lot of exciting announcements I couldn't wait to share!
&lt;br /&gt;&lt;br /&gt;


First, and I know I promised not to use this blog as a personal forum, but I simply must share that my wife and I are expecting our first child!  She is actually due to arrive today, so please cross your fingers, wish us luck, and if you are inclined to do so, pray for us and our baby girl.  If you're interested in more updates please feel free to add me as a friend on &lt;a href="http://www.facebook.com/"&gt;Facebook&lt;/a&gt;.
&lt;br /&gt;&lt;br /&gt;


Second, I just discovered today on the IGDA NC forum that &lt;a href="https://www.igda.org/forum/ea-north-carolina-looking-software-engineers"&gt;EA is hiring software engineers&lt;/a&gt; for full-time and contract positions.  The NC branch of EA is located in Morrisville, so if you're a game developer living anywhere near the Triangle click the link above and submit your resume.
&lt;br /&gt;&lt;br /&gt;


Third, I learned recently that Ian Schreiber is doing another summer online course, this time focusing on Game Balance.  If you enjoyed his &lt;a href="http://gamedesignconcepts.wordpress.com/"&gt;Game Design Concepts&lt;/a&gt; course you will most likely be interested in checking out &lt;a href="http://gamebalanceconcepts.wordpress.com/"&gt;Game Balance Concepts&lt;/a&gt;.
&lt;br /&gt;&lt;br /&gt;


Fourth, check out Darius Kazemi's &lt;a href="http://tinysubversions.com/2010/07/gameloop/?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+TinySubversions+%28Tiny+Subversions%29&amp;amp;utm_content=Google+Feedfetcher"&gt;GameLoop&lt;/a&gt; unconference.  It looks like an awesome time to learn about all things game-related, so you should totally check it out if you live anywhere near Cambridge, MA.
&lt;br /&gt;&lt;br /&gt;


Finally, I've been working on a tower defense game that I &lt;a href="http://gamedeveloperjourney.blogspot.com/2010/01/current-project-tower-defense-game.html"&gt;alluded to&lt;/a&gt; way back in January and I'm happy to say my team and I are making outstanding progress.  But a number of things have changed.  Instead of it being a 2D game, we're now doing 3D (and understand why 2D isometric tower defense is near-impossible).  We've also switched our platform from XBox 360 to the PC, and are making some dramatic changes to our original art style.  It's amazing to see what our graphic artists can do, and I plan to post some screenshots soon.  Tentative plan is to have something we can demo at an upcoming conference in September.
&lt;br /&gt;&lt;br /&gt;


So there's a lot going on, which hopefully explains the fewer posts, but I have been learning a ton of cool stuff that should make for some interesting tutorials right here on GDJ.  Until next time...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-3322906600204617186?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/3322906600204617186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/07/exciting-announcements.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/3322906600204617186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/3322906600204617186'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/07/exciting-announcements.html' title='Exciting Announcements!'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-6181356853658268998</id><published>2010-05-01T09:45:00.004-04:00</published><updated>2012-02-10T01:30:57.624-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><title type='text'>IGDA Takes a Stand on Censorship</title><content type='html'>I just read an awesome post on &lt;a href="http://www.gamedev.net"&gt;GameDev.net&lt;/a&gt; titled &lt;a href="http://www.gamedev.net/community/forums/topic.asp?topic_id=569841"&gt;
IGDA Condemns Video Game Censorship&lt;/a&gt; and think it's awesome to see the IGDA taking a stand on censorship like this.  I totally agree it is the responsibility of parents, NOT the government, to determine what children should and should not play.
&lt;br /&gt;&lt;br /&gt;
So yeah, check out the post on GameDev.net, cuz it's awesome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-6181356853658268998?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/6181356853658268998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/05/igda-takes-stand-on-censorship.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6181356853658268998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6181356853658268998'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/05/igda-takes-stand-on-censorship.html' title='IGDA Takes a Stand on Censorship'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-5653225538810140989</id><published>2010-03-19T23:19:00.003-04:00</published><updated>2012-02-10T01:32:23.455-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><title type='text'>Happy (Belated) Birthday, GDJ!</title><content type='html'>It's hard for me to believe this blog is one year old this week.  I started writing last March 14th, not quite sure where the journey would take me, and now it seems a whole year has passed so quickly.  One thing is for sure, I have learned a LOT about the game industry through numerous news feeds I now read almost daily and from the extremely bright folks over at the Game Career Guide forums.  I've dedicated a large amount of effort to learning how to write games, have gotten involved in my local IGDA chapter, and have met some really cool people in the process.  
&lt;br /&gt;&lt;br /&gt;
I created a very basic &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/10/pong-clone-completed.html"&gt;Pong Clone&lt;/a&gt; in 24 hours, worked in a team to create the puzzle game Befuddled at the &lt;a href="http://gamedeveloperjourney.blogspot.com/2010/02/global-game-jam-2010.html"&gt;Global Game Jam&lt;/a&gt; in a single weekend, and am currently working with some amazing artists to create an exciting tower defense game.  This latest project is one of my biggest and best endeavors yet, so I'm very excited to see the end result within a couple months.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-5653225538810140989?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/5653225538810140989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/03/happy-belated-birthday-gdj.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/5653225538810140989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/5653225538810140989'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/03/happy-belated-birthday-gdj.html' title='Happy (Belated) Birthday, GDJ!'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-2529766955004165484</id><published>2010-03-09T01:29:00.003-05:00</published><updated>2012-02-10T01:34:09.818-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><title type='text'>On the Eve of GDC...</title><content type='html'>I figure it only fair to post a comment stating my jealousy of those attending Game Developer Conference in San Francisco this year.  You will, no doubt, flood the web-waves with your tweets, blogs, facebook posts, and other streams with tremendous amounts of information that no human being could possibly absorb within the scope of a single day, week, or even a year.  You will meet countless industry professionals, students, amateurs, and hobbyists alike, hopefully by the end having learned something about the way others think, approach problems, and resolve them in ways you might never have conceived.  My hope for you is that you understand the opportunity before you; that you grasp the amount of knowledge with which you will be surrounded; and of course that you share it on afore-mentioned media so those of us at home can live through your experiences vicariously.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-2529766955004165484?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/2529766955004165484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/03/on-eve-of-gdc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/2529766955004165484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/2529766955004165484'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/03/on-eve-of-gdc.html' title='On the Eve of GDC...'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-5592637393662324276</id><published>2010-02-16T00:20:00.004-05:00</published><updated>2012-02-10T01:35:52.560-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNA'/><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><title type='text'>XNA Frustrations</title><content type='html'>I've been working on a tower defense game in XNA (C#) lately.  I like that XNA simplifies a lot of tasks, which means I can write less code than I typically would in a C++ game.  For example, I can make a simple spriteBatch draw call to get a texture on the screen without creating my own vertex/index buffers.  Or I can create the view and projection transformation matrices with a single utility method.  XNA handles window creation and setup with very minimal code and generally makes the process of creating a 2D game a very simple task.
&lt;br /&gt;&lt;br /&gt;
However, creating a 3D game with XNA is a completely different beast.  One thing I've beaten my head against is lack of support for animation out-of-the-box.  XNA apparently has some classes at a very low level, as described by my buddy &lt;a href="http://entropologygames.wordpress.com/2009/04/24/animation-data-structures-in-xna-framework/"&gt;Priyank&lt;/a&gt; over at eNtropology Games.  &lt;a href="http://www.codeplex.com/animationcomponents"&gt;XNA Animation Component Library&lt;/a&gt; looks promising, though I have yet to play with it.  And then there is the XNA Creators Club &lt;a href="http://creators.xna.com/en-US/sample/skinnedmodel"&gt;skinning sample&lt;/a&gt; that implements runtime animation classes for a skinned model.
&lt;br /&gt;&lt;br /&gt;
But my latest frustration concerns the lack of something much more basic than animation; I can't create a sphere in XNA!  Some folks have created their own classes to implement a sphere as a game "component" object, but what I really need right now is a class that can be instantiated dynamically so I can preview my bounding boxes for collision detection.  Naturally C++ has simple utility methods for creating the basic meshes: cubes, spheres, cylinders... even doughnuts and teapots!  But no such luck with XNA yet, and the most annoying part is that I'm wasting time trying to render a sphere when I should be doing more important tasks, like making sure my models can avoid walking through each other.
&lt;br /&gt;&lt;br /&gt;
It seems XNA is more of a toy than a tool for serious game development, and I think in the future I will be limiting my use of it to more basic projects.  But for now I press on, forced to create innovative solutions (translation: hacks) to make it work... grrr....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-5592637393662324276?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/5592637393662324276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/02/xna-frustrations.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/5592637393662324276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/5592637393662324276'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/02/xna-frustrations.html' title='XNA Frustrations'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-5501301827302377202</id><published>2010-02-14T01:34:00.009-05:00</published><updated>2012-02-10T01:38:30.934-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Event'/><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><title type='text'>Carolina Games Summit 2010</title><content type='html'>"Making a game is like shooting a movie while you're building the camera." 
&lt;br /&gt;-Shaun Peoples, Ubisoft's Red Storm Entertainment
&lt;br /&gt;&lt;br /&gt;
Since our arrival in North Carolina six months ago I've had the pleasure of attending three game industry events: an IGDA meeting, the Global Game Jam, and the Carolina Games Summit (henceforth referred to simply as CGS).  Participating in these events (not simply attending) is particularly exciting for me because it means I'm making progress on that whole networking thing I admitted I needed to work on &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/04/that-whole-networking-thing.html"&gt;a while ago&lt;/a&gt;.  But this post isn't about networking; &lt;a href="http://tinysubversions.com"&gt;Darius Kazemi&lt;/a&gt; already has an amazing blog to help you out with that. I figured I'd take a few minutes to describe my experience at CGS, which took place February 6th at Wayne Community College in Goldsboro.
&lt;br /&gt;&lt;br /&gt;
The day started off rough.  I woke up late and, giving the expected minor snowfall I almost considered not going.  Since it rarely snows here, people spaz out when it does and the news folk generally recommend not driving at all.  But in addition to wanting to go, I had my friends Wes and Andrew counting on me, so I rushed over to pick them up.  To my happy surprise, Wes offered to drive and the snow held off. We arrived a little before noon, when the first speaker session started.  Numerous game tournaments were scheduled throughout the day on the second floor, but we were there primarily for the educational sessions.
&lt;br /&gt;&lt;br /&gt;
The first session at noon titled "Wow, That Was Cool! Wait, What Was That?" was presented by technical artist Jason Connell and software engineer (programming) Shaun Peoples of Ubisoft's Red Storm Entertainment (&lt;span style="font-style:italic;"&gt;Rainbow Six&lt;/span&gt;, &lt;span style="font-style:italic;"&gt;Ghost Recon&lt;/span&gt;).  Unfortunately due to a scheduling snafu (more on this later) there was a delay while the coordinators attempted to find our speakers, so we were treated instead to a Q&amp;A by Ben and Stefan from Electronic Arts.  Responses of interest to me were the importance of being good at something specific but also being agile and also the fact that even a giant like EA outsources some art/engineering.
&lt;br /&gt;&lt;br /&gt;
As the session proceeded, the scheduling glitch was somehow resolved, as Jason and Shaun stepped in to give their now-quickened presentation, which gave good insights on the daily life of an artist or programmer in the industry.  I took a lot of notes here but will summarize the key points for programmers:
&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Knowing the hardware helps you write more efficient code and stay competitive.&lt;/li&gt;
&lt;li&gt;Be passionate... but also realize you will never make "your" game.&lt;/li&gt;
&lt;li&gt;Knowing engines helps you understand what your competition is doing.&lt;/li&gt;
&lt;li&gt;Expect constant changes during the development process; you will work on different things from day to day.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;br /&gt;
The next session we attended, titled "Landing a Job in the Game Industry", was presented by Ryan Stradling, the Senior Development Director at EA in North Carolina.  I found it interesting that EA NC only has nine employees, and they've worked primarily on NASCAR titles at this point.  This session covered most things I've heard before: create a &lt;span style="font-weight:bold;"&gt;complete&lt;/span&gt; game, be a team player, get experience any way you can, etc.  But I learned some new stuff too.  For example, did you know the game industry reels in $8.7 billion each year in the US alone and $24 billion worldwide?  Ryan also gave these insights to making it 10+ years in the game industry:
&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Accept change&lt;/li&gt;&lt;li&gt;Accept that fun is an elusive target&lt;/li&gt;&lt;li&gt;Be motivated and passionate.&lt;/li&gt;&lt;li&gt;Continually learn, pushing yourself and others&lt;/li&gt;&lt;li&gt;Love what you do, and do what you love!&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;br /&gt;
Mr. Stradling was very down-to-earth and willing to chat with attendees after his session.  So I was able to meet him, ask a couple questions, thank him for his presentation and shake his hand.  His advice to me directly, as a programmer, was to "Know your stuff!".  This was definitely the highlight of my day.
&lt;br /&gt;&lt;br /&gt;
My friends and I attended two more presentations, one by an indie developer on the challenges of starting a game company and another by a lawyer on the top legal pitfalls of game companies.  I took more notes but will save those details for a later date since this post is getting long already.  
&lt;br /&gt;&lt;br /&gt;
Unfortunately the CGS did not seem well-organized, due to the initial presentation confusion and meager dining options.  We went with the barely-warm Chick-fil-A over the $2 per slice of Papa John's pizza.  Also the fact that all sessions were in the same room and scheduled every hour on the hour (with no breaks in between) meant some sessions ran over and others had to start late.  But for the sake of education and networking opportunities, I'd still have to say it was a worthwhile experience.
&lt;br /&gt;&lt;br /&gt;
Next up?  The &lt;a href="http://www.trianglegameconference.com"&gt;Triangle Game Conference&lt;/a&gt; is coming April 7-8th...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-5501301827302377202?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/5501301827302377202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/02/carolina-games-summit-2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/5501301827302377202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/5501301827302377202'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/02/carolina-games-summit-2010.html' title='Carolina Games Summit 2010'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-5775999491400270598</id><published>2010-02-02T00:49:00.007-05:00</published><updated>2012-02-10T01:39:54.766-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Event'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><title type='text'>Global Game Jam 2010</title><content type='html'>&lt;a href="http://globalgamejam.com/2010/befuddled"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_dKYKDpL5vqE/S2fE5_xQixI/AAAAAAAAAG0/8ePpt3mp3kM/s200/press_2.jpg" border="0" alt="Befuddled Game" id="BLOGGER_PHOTO_ID_5433527976095419154" /&gt;&lt;/a&gt;
I had the unique opportunity to participate in the Global Game Jam this past weekend, January 29-31.  The GGJ is a 48-hour, world-wide game creation marathon.  Creating a game is no easy task, let alone doing it in such a shortened timeframe.  But we did create games, many of us in small groups across the world, and it was truly an amazing experience to be part of this global event!
&lt;br /&gt;&lt;br /&gt;
The Triangle Game Developers division of the Global Game Jam started off at Icarus game studio in Cary, NC on Friday the 29th at 4:30pm.  Unfortunately, due to snowy weather we were not able to remain at the studio location for the entire weekend as planned.  We had just a few hours to get together, meet our peers, view the keynote speech, and then get started by discussing game ideas and forming teams.  After a short period of discussing our game with our new team members, we left for the evening with everyone's contact information in hand, and that's when the real fun began.
&lt;br /&gt;&lt;br /&gt;
This year's theme was &lt;strong&gt;Deception&lt;/strong&gt;.  We had to think up game ideas incorporating some means of deception and, as an additional requirement, had to include one of the following three items in the game: a pet, a set, or a net.  The idea our group settled on was a type of Bejeweled clone where players secretly choose the gems they use to score points and can also sabotage each other!  Our game is called Befuddled and can be &lt;a href="http://globalgamejam.com/sites/triangle-game-developers/games"&gt;downloaded here&lt;/a&gt;, along with other games from the Triangle Game Developers.
&lt;br /&gt;&lt;br /&gt;
One thing I learned from this event is that it takes a LOT of work to complete a game. And a lot of communication. In fact, I think that's one of the things my group did particularly well. One of our team members set up an IRC channel so we could all communicate real-time, and we were mostly connected the entire 48 hours for making design decisions, asking questions, and just chatting in general. Another thing we did really well was picking a simple game idea. It started very basic, but we were able to add on to it, giving it new visual styles and gameplay features as we went along. 
&lt;br /&gt;&lt;br /&gt;
One problem we had throughout was, with a basic game, trying to add the right things to make it fun. We know it still needs more playtesting and iteration to figure out the missing "fun" factor. But the best and most exciting part of it all is having something we can call a complete working game. Of course nobody stayed up the full 48 hours, but some of sure did try, and we're all very proud of our successes on this project!
&lt;br /&gt;&lt;br /&gt;
Be sure to check out Befuddled and a ton of other Global Game Jam games by visiting the &lt;a href="http://www.globalgamejam.com"&gt;Global Game Jam&lt;/a&gt; website.  You can also search Twitter for #GGJ to see posts about GGJ games.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-5775999491400270598?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/5775999491400270598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/02/global-game-jam-2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/5775999491400270598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/5775999491400270598'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/02/global-game-jam-2010.html' title='Global Game Jam 2010'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dKYKDpL5vqE/S2fE5_xQixI/AAAAAAAAAG0/8ePpt3mp3kM/s72-c/press_2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-6552883052766607466</id><published>2010-01-17T23:23:00.003-05:00</published><updated>2012-02-10T01:40:28.455-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Event'/><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><title type='text'>More Exciting Events in NC!</title><content type='html'>So I've already mentioned the Global Game Jam, occurring January 29-31, in my previous post.  Since then I've learned of two more exciting events coming quickly, so if you live in NC be sure to mark your calendar!
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;FEB 6: &lt;a href="http://www.carolinagamessummit.com/index.php"&gt;Carolina Games Summit&lt;/a&gt;&lt;/strong&gt;
&lt;br /&gt;
This one-day event, sponsored in part by &lt;em&gt;The Escapist&lt;/em&gt;, takes place on Saturday, February 6th, at Wayne Community College in Goldsboro, NC.  The day includes a number of lectures on programming, art, hiring processes, and more.  Numerous game tournaments will take place throughout the day.  Online registration is highly recommended; you may not be able to get a ticket just by showing up, so check out the website for ticket information.
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;APR 7-8: &lt;a href="http://www.trianglegameconference.com/"&gt;Triangle Game Conference&lt;/a&gt;&lt;/strong&gt;
&lt;br /&gt;
The second annual Triangle Game Conference takes place April 7-8 at the Raleigh Marriott City Center in Raleigh, NC.  Dubbed the "leading East Coast event for developers and professionals working in the interactive entertainment and serious game industries," TGC is sure to be the area's top educational and networking event for those interested in the business of game development.  This event was established by the Triangle Game Initiative to focus the Triangle area as a major hub of game development.  If you live in the area, this is the event this year you don't want to miss!
&lt;br /&gt;&lt;br /&gt;
Are you coming to one of these events??? Let me know in the comments! I'm more than happy to meet new people and look forward to making new friends.  See you there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-6552883052766607466?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/6552883052766607466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/01/more-exciting-events-in-nc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6552883052766607466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6552883052766607466'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/01/more-exciting-events-in-nc.html' title='More Exciting Events in NC!'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-4747293857055179939</id><published>2010-01-06T22:13:00.004-05:00</published><updated>2012-02-10T01:40:55.308-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Event'/><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><title type='text'>Register for the Triangle Global Game Jam!!!</title><content type='html'>I just checked the &lt;a href="http://globalgamejam.com/sites/triangle-game-developers"&gt;Triangle Global Game Jam&lt;/a&gt; website and am excited to see this year's Triangle game jam will be hosted at Icarus Studios in Cary, NC!  I have no doubt this will be a very exciting event.  The &lt;a href="http://globalgamejam.com/"&gt;Global Game Jam&lt;/a&gt;, hosted at over 100 locations across the world, is a 48-hour game-creation event designed to promote creativity, innovation, and community.  The jam will take place January 29-31, 2010.
&lt;br /&gt;&lt;br /&gt;
We need more participants, so make sure to &lt;a href="http://tinyurl.com/triangleggj"&gt;SIGN UP!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-4747293857055179939?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/4747293857055179939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/01/register-for-triangle-global-game-jam.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/4747293857055179939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/4747293857055179939'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/01/register-for-triangle-global-game-jam.html' title='Register for the Triangle Global Game Jam!!!'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-2708847569637026994</id><published>2010-01-04T20:48:00.005-05:00</published><updated>2012-02-10T01:41:54.202-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='XNA'/><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><title type='text'>Current Project: Tower Defense Game</title><content type='html'>I've noticed the guys over at &lt;a href="http://blog.vortixgames.com/"&gt;Vortix Games&lt;/a&gt; occasionally take a hiatus from posting on their blog when busy with a given project.  I think this is certainly understandable when you're part of a small team and would like to point out they have done a terrific job on their blog - definitely one to check out for some game development insights.  And so I begin this post by admitting I've been doing the same... but hey, it's not so bad because I'm not the only one, right?!
&lt;br /&gt;&lt;br /&gt;
At any rate, I would like to briefly mention the new game project I've been working on.  A couple months ago I had the great pleasure of meeting a couple artists in my area, and we've since been working to design and build a Tower Defense game. For the uninitiated, gameplay consists primarily of setting up a series of defenses such as turrets or guns and then watching a flood of enemies attempt to navigate from their start position to a given destination. This is an entirely new game genre to me, but after having played a few games online (such as &lt;a href="http://armorgames.com/play/2231/whiteboard-tower-defense"&gt;Whiteboard Tower Defense&lt;/a&gt;) and working on our current prototype, I'm excited to see how it will turn out.  One thing is sure: with professional artwork it will definitely look better than my basic &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/10/pong-clone-completed.html"&gt;Pong clone&lt;/a&gt;!
&lt;br /&gt;&lt;br /&gt;
This project has some interesting challenges.  For example, it is entirely a 2D game; I've been learning 3D development for so long that it is a welcome switch of gears.  It is also being developed for the XBox 360 using XNA Game Studio 3.0, which allows me to put my existing C# skills to use, just in a new way. I use C# every day for web development but this is my first experience with XNA.  Even though the target platform is the XBox 360, I plan to make it playable on the PC as well.
&lt;br /&gt;&lt;br /&gt;
I hope to reveal more about the game as our agile design/implementation/testing rounds progress.  Keep an eye out for future posts, even if they're not terribly frequent.  With any luck, the completed game will appear here for your enjoyment!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-2708847569637026994?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/2708847569637026994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/01/current-project-tower-defense-game.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/2708847569637026994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/2708847569637026994'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2010/01/current-project-tower-defense-game.html' title='Current Project: Tower Defense Game'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-2516427181915232376</id><published>2009-12-09T20:40:00.006-05:00</published><updated>2012-02-10T01:43:56.917-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Direct3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><title type='text'>Game Deployment Woes (Just Make It Flash!)</title><content type='html'>In one of my &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/10/pong-clone-completed.html"&gt;previous posts&lt;/a&gt; I released a Pong clone game that, albeit not polished, was a fully working game and I was quite proud of it.  Of course, as sometimes happens with the deployment of Windows-based games, I was dismayed when I learned nobody who actually took an interest (thanks to you faithful few!) was able to run the game :(
&lt;br /&gt;&lt;br /&gt;
That's when the fun began.  I asked one friend to make sure he had the DirectX runtime installed and even to reinstall it - no luck.  I then learned the C++ runtime was required and had the same friend perform that install - no luck. I tried two different machines with the same installations - no luck.  Finally I learned it was not just requirements on the target systems; it turns out I had included a debug version of a DirectX library in my project, which allowed the program to be created and executed, &lt;b&gt;just not in a way that it would work!&lt;/b&gt;
&lt;br /&gt;&lt;br /&gt;
You see, as a developer, I have all of the tools required to run any program I create.  But other machines don't necessarily have these tools/environments.  So I think I'll use the following plan for deploying my next game.
&lt;ol&gt;
&lt;li&gt;&lt;del&gt;Create a game, coding and testing in DEBUG mode&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Change the project from DEBUG to RELEASE mode&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Replace DEBUG libraries with RELEASE libraries&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Build the project in RELEASE mode&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Create an installer project to install the game, the C++ runtime, and the DirectX runtime&lt;/del&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ol&gt;
&lt;li&gt;Create a Flash game that can be played from a web page in any browser!&lt;/li&gt;&lt;/ol&gt;
Now all I need to do is learn to program a game in Flash...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-2516427181915232376?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/2516427181915232376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/12/game-deployment-aka-just-make-it-flash.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/2516427181915232376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/2516427181915232376'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/12/game-deployment-aka-just-make-it-flash.html' title='Game Deployment Woes (Just Make It Flash!)'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-8817391407444719709</id><published>2009-12-02T00:56:00.004-05:00</published><updated>2012-02-10T01:44:27.156-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Event'/><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><title type='text'>Triangle IGDA Chapter Meeting</title><content type='html'>Just a quick update, I'm excited to attend my first IGDA chapter meeting and extend a big thank you to my buddy &lt;a href="http://wes.pleaseinsertcoin.com"&gt;Wes&lt;/a&gt; for making me aware of it! Event details can be found &lt;a href="http://www.igda.org/nctriangle/december-igda-meeting"&gt;here&lt;/a&gt; and I've posted the basics below.
&lt;br /&gt;
&lt;pre&gt;
Date:  December 3rd, 2009
Time:  7-9pm
Place: Buckhead Saloon
       411 W. Morgan Street
       Raleigh, NC 27603
&lt;/pre&gt;
&lt;br /&gt;       
More info can be found on the &lt;a href="http://www.igda.org/nctriangle/"&gt;Triangle IGDA chapter page&lt;/a&gt;, which dubs this event a "holiday mixer" and encourages attendees to bring non-perishable food items to support the Food Bank of Central &amp; Eastern North Carolina.
&lt;br /&gt;&lt;br /&gt;
Hope to meet you there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-8817391407444719709?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/8817391407444719709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/12/triangle-igda-chapter-meeting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/8817391407444719709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/8817391407444719709'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/12/triangle-igda-chapter-meeting.html' title='Triangle IGDA Chapter Meeting'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-7142005114601045420</id><published>2009-11-03T21:50:00.008-05:00</published><updated>2012-02-10T01:47:51.302-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Direct3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Pong Postmortem: Completing a Game in 24 Hours!</title><content type='html'>For the uninitiated (or techno-illiterate), a "postmortem" is a wrap-up discussion summarizing the good, bad, and ugly of a project following its development.  What follows is a summary of the creation of my first completed game, a clone of the Atari classic &lt;em&gt;Pong&lt;/em&gt;.
&lt;br /&gt;&lt;br /&gt;
My Pong clone was created in 24 hours, though not in the type of all-nighter hack-a-thon you might expect or even a typical three work days.  I have a full-time day job, so development is typically done late evenings, but fortunately I kept track of the amount of time spent on specific components.  Note that I started with a working Direct3D application from Luna's book &lt;em&gt;Introduction to 3D Game Programming with DirectX 9.0c: A Shader Approach&lt;/em&gt;.  Here is the hours-to-effort breakdown:
&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;10 Hours&lt;/strong&gt; - I dedicated the first 10 hours to rendering the basics of the game: the board, two paddles, and the ball.  This included creation of graphical "placeholders"; I'm not an artist but I realized I could come back and make the art fancy after everything worked.  Getting the ball in motion and then allowing it to bounce off the walls and paddles (Collision Detection) was the second major focus.  Finally, the simple mechanic of allowing the player to move a paddle up/down brought the game into a playable state.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;4 Hours&lt;/strong&gt; - The primary effort of the next stretch was to implement a basic computer opponent (Artificial Intelligence), and I started with a perfect opponent whose vertical position matched the ball's position at every moment.  When adding different game modes, this perfect opponent became part of the game's Practice Mode.  I added the ball's motion blur effect just to improve aesthetics and moved hard-coded values to an include file for easier maintenance and testing.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;4 Hours&lt;/strong&gt; - In this phase I worked on creating a computer opponent that moved more realistically but was also fallible; a perfect opponent gets boring to play against!  I added different difficulty levels (easy/medium/hard), which works by choosing a random "reaction time delay" between when the player hits the ball and the computer opponent is allowed to hit the ball.  Obviously, as difficulty increases, the computer's reaction time improves to make it a more formidable opponent.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;4 Hours&lt;/strong&gt; - At this point the game was playable with differing levels of difficulty but no clear way of selecting game settings.  I created the menu system and added scoring to determine the winner.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2 Hours&lt;/strong&gt; - The last step before I considered the game completed was to work on the art, which could clearly still use some work! :)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;strong&gt;Final Thoughts:&lt;/strong&gt;&lt;br /&gt;
I knew this project would be relatively simple because there are only four game objects to keep track of: two paddles, one ball, and one board.  However, due to its simple nature, I was inclined to hack it together quickly and did not follow strict OOP (object-oriented programming) principles.  The majority of the game code is in a single monolithic file.  I also resorted to reusing an existing class designed to output simple statistics to display text-based menus.  But worse, the same class used to show all menus and text became my game state manager since I needed to know which menus had been processed.  I then extended it to display current score values and to show which player had won the game.  Although I could have put a lot of time into doing it the &lt;strong&gt;right way&lt;/strong&gt;, the purpose of this effort was to &lt;strong&gt;get something done&lt;/strong&gt;.  In future endeavors I plan to follow better OOP design.

&lt;br /&gt;&lt;br /&gt;
The best part of this project is that I actually &lt;strong&gt;completed a working game!&lt;/strong&gt;  I am proud of the subtle but effective motion blur effect.  The game doesn't have all the bells and whistles (seriously, no sounds or music yet) but it is playable, implements Collision Detection and Artificial Intelligence, and has a clearly defined winner at the end.  Some may even consider it fun :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-7142005114601045420?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/7142005114601045420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/11/pong-postmortem-completing-game-in-24.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/7142005114601045420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/7142005114601045420'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/11/pong-postmortem-completing-game-in-24.html' title='Pong Postmortem: Completing a Game in 24 Hours!'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-7332725306120046879</id><published>2009-10-30T20:38:00.004-04:00</published><updated>2012-02-10T01:56:12.471-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Download'/><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><title type='text'>PONG Clone Completed!!!</title><content type='html'>&lt;img style="float:left; margin:0 10px 10px 0; width: 300px; height: 150px;" src="http://3.bp.blogspot.com/_dKYKDpL5vqE/SuuHV_s2pYI/AAAAAAAAAGY/BBAozGZUij8/s320/pong.png" border="0" title="Pong Clone" alt=""id="BLOGGER_PHOTO_ID_5398557390280238466" /&gt;
It is with great pleasure that I announce I have &lt;strong&gt;finally completed a game&lt;/strong&gt; of my own!  There are some obvious improvements that could be made (adding sound, better art, etc.) but it is a fully working game with Artificial Intelligence (AI) for the computer opponent, basic menus, scoring, and clear winning conditions. I'm particularly proud of the ball's motion blur, a subtle effect that makes the game look more polished.
&lt;br /&gt;&lt;br /&gt;
The left paddle is controlled with the &lt;strong&gt;W (up)&lt;/strong&gt; and &lt;strong&gt;S (down)&lt;/strong&gt; keys.  Likewise, the right paddle is controlled with the &lt;strong&gt;O&lt;/strong&gt; and &lt;strong&gt;L&lt;/strong&gt; keys.
&lt;br /&gt;&lt;br /&gt;
&lt;a href="http://www.jeromiewalters.com/downloads/Pong_1_0.zip"&gt;Download the Game Now!&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
I would be very appreciative of any feedback; just leave me a comment here on the blog to let me know what you think.  I will provide a breakdown of the effort spent on this simple game (done in 24 hours!) in an upcoming post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-7332725306120046879?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/7332725306120046879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/10/pong-clone-completed.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/7332725306120046879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/7332725306120046879'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/10/pong-clone-completed.html' title='PONG Clone Completed!!!'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dKYKDpL5vqE/SuuHV_s2pYI/AAAAAAAAAGY/BBAozGZUij8/s72-c/pong.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-3312233551588152467</id><published>2009-10-29T02:30:00.003-04:00</published><updated>2012-02-10T01:49:51.715-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><title type='text'>Finishing a Game: Pong Update</title><content type='html'>As I've stated in some &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/05/may-monthly-checkup.html"&gt;older&lt;/a&gt; &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/05/staying-busy.html"&gt;posts&lt;/a&gt;, I've been planning to work on a Pong clone for some time now. I was digging through a new book and learning the internals of Direct3D lighting, texturing, blending, meshes, etc.  And I've learned a LOT (especially about vertex and pixel shaders) since those older blog posts, but one problem with the book I'm using is that it teaches small bits without building a game project. Even with all of my learning I still had not created a whole game, and I do know that in order to have a decent game career portfolio I will need to have at least one completed game (though probably two or more) to even be considered.
&lt;br /&gt;&lt;br /&gt;
So I took a step back from all the fun advanced 3D stuff for a bit and am proud to say I'm making progress (translation: nearly completed) on my Pong clone.  I will post the game itself and implementation details soon!
&lt;br /&gt;&lt;br /&gt;
In other news, my wife and I finally purchased a Nintendo Wii since the retail price came down to $200.  Wii Sports and Boom Blox are pretty cool.  And just a quick news update in case you missed it- the Unity game engine is now available as a free download (was supposedly $199).  &lt;a href="http://unity3d.com/unity/download/"&gt;Check it out&lt;/a&gt; and let's create some awesome games!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-3312233551588152467?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/3312233551588152467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/10/finishing-game-pong-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/3312233551588152467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/3312233551588152467'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/10/finishing-game-pong-update.html' title='Finishing a Game: Pong Update'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-6718645712164159736</id><published>2009-09-29T00:07:00.007-04:00</published><updated>2012-02-10T01:51:18.277-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Math'/><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><title type='text'>Sine Language Lesson, Part 2</title><content type='html'>In &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/08/sine-language-lesson-part-1.html"&gt;Part 1&lt;/a&gt; of this post I discussed some useful applications of the sine function without really delving into the details of how it works.  Specifically, we focused on the equation &lt;strong&gt;y = sin(x)&lt;/strong&gt;.  Here is a more useful variation of the sine function as demonstrated in the Ocean Waves demo:
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;y = A * sin(K*distance - F*time + S)&lt;/strong&gt;
&lt;ul&gt;&lt;li&gt;A = amplitude&lt;li&gt;K = angular frequency&lt;li&gt;F = time frequency&lt;li&gt;S = shift&lt;/ul&gt;
Amplitude represents the height of the wave; it typically ranges from -1 to 1 but can be set to an arbitrary value (e.g. set A = 25 for the wave to range from -25 to 25). The angular frequency represents how quickly the wave travels vertically. The time frequency represents how quickly the wave travels horizontally; note that &lt;span style="font-family:Courier New"&gt;F*time&lt;/span&gt; can be omitted from the sine function to view a static snapshot of the wave at a point in time but is included in the Ocean Waves demo to provide the effect of a wave in motion.  Finally, the shift parameter allows us to move the wave by a horizontal offset so it starts from a new position (e.g. setting S = -&amp;pi;/2 would map it to the cosine function).
&lt;br /&gt;&lt;br /&gt;
The Point Light demo from Part 1 sets the light source position's Z-coordinate using a simple sine function and then calculates the X- and Y-coordinates as sine functions using the computed Z value as the &lt;span style="font-family:Courier New"&gt;distance&lt;/span&gt; parameter. The Ocean Waves demo combines multiple sine waves to achieve the illusion of irregularity (not all waves in the ocean are the same height and hit shore at the same regular time interval).  For example, to apply the effects of &lt;strong&gt;y = sin(x)&lt;/strong&gt; and &lt;strong&gt;y = 12 * sin(3x)&lt;/strong&gt;, we can simply write &lt;strong&gt;y = sin(x) + (12 * sin(3x))&lt;/strong&gt;.  Observe that the two functions are added together.  Watch the web preview of &lt;a href="http://demonstrations.wolfram.com/CombiningSineWaves/"&gt;Combining Sine Waves&lt;/a&gt; to see the concept in motion.
&lt;br /&gt;&lt;br /&gt;
I hope this post encourages you to investigate some potential uses of sine/cosine functions, as well as return to &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/08/sine-language-lesson-part-1.html"&gt;Part 1&lt;/a&gt; if you missed the demo programs.  It seems some things we learned in high school actually &lt;em&gt;did turn out to be useful&lt;/em&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-6718645712164159736?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/6718645712164159736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/09/sine-language-lesson-part-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6718645712164159736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6718645712164159736'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/09/sine-language-lesson-part-2.html' title='Sine Language Lesson, Part 2'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-6111367505746954701</id><published>2009-09-23T01:27:00.004-04:00</published><updated>2012-02-10T01:52:55.674-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Motivation'/><title type='text'>Staying Motivated</title><content type='html'>I can't believe I started this blog more than six months ago.  I remember thinking initially, after seeing many game development blogs trail off after just a couple months, that I would surely put out at least five posts every week.  Ha!  Let's just say I may have been a little ambitious.  It's easy to push forward full steam when something is new, but the question of true dedication comes when the going isn't so easy.&lt;br /&gt;&lt;br /&gt;
I've seen forum posts regarding burnout on the game development dream and even noticed one of the blogs I followed (and had linked here) seems to have disappeared.  So... how do you stay motivated when your enthusiasm wanes?  I think part of it is remembering what you enjoyed about it (whether &lt;strong&gt;it&lt;/strong&gt; is game development or another hobby) in the first place, and looking forward to what you will be able to do with practice.  In my case I'm reading through a very dry, technical graphics book right now and sometimes it is flat-out boring; but I know that by reading it and working through the examples I will in time be a better game developer.&lt;br /&gt;&lt;br /&gt;
Quite honestly, I think everyone loses their enthusiasm at times.  If you stay away from an activity too long it can be hard (though not impossible) to get back into it, and if you play with something too long it can start to feel like work.  But the best approach is to just stick with &lt;strong&gt;it&lt;/strong&gt;.  Don't give up!
&lt;br /&gt;&lt;br /&gt;
Check out Brenda Brathwaite's &lt;a href="http://bbrathwaite.wordpress.com/2009/09/02/how-do-you-stay-motivated/"&gt;blog post&lt;/a&gt; for more inspirational thoughts on staying motivated.  I'm proud to say that even though I'm not posting as frequently, I am still learning new graphics tricks (today was Direct3D meshes) and will not be disappearing any time soon!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-6111367505746954701?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/6111367505746954701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/09/staying-motivated.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6111367505746954701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6111367505746954701'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/09/staying-motivated.html' title='Staying Motivated'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-3949783806250744973</id><published>2009-08-30T20:45:00.003-04:00</published><updated>2012-02-10T01:55:23.506-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Math'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Download'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Sine Language Lesson, Part 1</title><content type='html'>I've had this idea ruminating in my mind for some time now.  Math is a big part of graphics development and I'm certainly no expert, but I wanted to show off some cool things that can be done with sine waves.  This part introduces the concept and shows some fun demo programs you can play with; part two will delve into the inner workings of the demos, which have been adapted from Frank Luna's &lt;em&gt;Introduction to 3D Game Programming with DirectX 9.0c: A Shader Approach&lt;/em&gt;.
&lt;br /&gt;&lt;br /&gt;
You may remember from your high school Trigonometry class (don't worry if not, it was a long time ago for me too!) those two periodic functions, sine (pronounced "sign") and cosine ("co-sign").  They're essentially the same function and you could map one to the other with a slight shift.  Cosine has some unique applications of its own, such as determining light intensity based on viewing angle, but the demos below will focus primarily on sine waves.
&lt;br /&gt;&lt;br /&gt;
&lt;div style="text-align:center"&gt;
&lt;span style="font-size:x-small"&gt;&lt;a href="http://2.bp.blogspot.com/_dKYKDpL5vqE/SpsbvMjE9II/AAAAAAAAAGQ/KsulkXJJJDE/s1600-h/sincos.png"&gt;&lt;img style="display:block; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 83px;" src="http://2.bp.blogspot.com/_dKYKDpL5vqE/SpsbvMjE9II/AAAAAAAAAGQ/KsulkXJJJDE/s400/sincos.png" border="0" /&gt;&lt;/a&gt;&lt;a href="http://creativecommons.org/licenses/by-sa/3.0/"&gt;Credit&lt;/a&gt;: &lt;a href="http://commons.wikimedia.org/wiki/File:Waveforms.png"&gt;Wikimedia Commons&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
Notice a few interesting properties from the graph above.  One is that a sine wave repeats itself every 2&amp;pi; (&amp;pi; &amp;asymp; 3.14159) or 360 degrees along the X-axis.  Another is that it oscillates between the Y values -1 and 1.  We write the function &lt;strong&gt;y = sin(x)&lt;/strong&gt; to indicate the Y value as a function of X; see from the graph above that Y = 0 when X is any multiple of &amp;pi; and Y is either 1 or -1 (the peaks and valleys) when X is an odd multiple of &amp;pi;/2.
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Point Light Demo - &lt;a href="http://jeromiewalters.com/blog/PointLightDemo.zip"&gt;Download Program!&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
&lt;img style="float:left; margin:0 10px 10px 0;width: 250px; height: 188px;" src="http://1.bp.blogspot.com/_dKYKDpL5vqE/SpTUYswkKVI/AAAAAAAAAF4/LsrgcdMEBpQ/s400/pointLight.png" border="0" /&gt;
This demo shows how sine waves can be used to animate a light source.  Use the specified keys to combine waves, creating a variety of unique horizontal and vertical motion paths.&lt;br /&gt;&lt;br /&gt;Before learning this elegant method, my approach to animating an object that sways back and forth, or moves repeatedly up and down along a pole, was to use code like this in my update loop:
&lt;div class="Code"&gt;&lt;pre class="prettyprint"&gt;
    static bool moveUp = true;
    if (moveUp) 
    { if (shipPos.y &lt; 100) shipPos.y += value; else moveUp = false; }
    else 
    { if (shipPos.y &gt; -100) shipPos.y -= value; else moveUp = true; }
&lt;/pre&gt;&lt;/div&gt;
With sine waves, this code reduces simply to &lt;strong&gt;shipPos.y = 100 * sin(x)&lt;/strong&gt;! Notice that I multiplied by 100 to get the desired range instead of the standard oscillation from -1 to 1.
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Ocean Waves Demo - &lt;a href="http://jeromiewalters.com/blog/OceanWavesDemo.zip"&gt;Download Program!&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
&lt;img style="float:left; margin:0 10px 10px 0;width: 250px; height: 188px;" src="http://1.bp.blogspot.com/_dKYKDpL5vqE/SpTd492HJWI/AAAAAAAAAGA/Zy2QIOnjfmM/s400/oceanWave.png" border="0" /&gt;
This demo illustrates the effects of adding sine waves and two different wave types, circular and directional.  Use the specified keys to play with parameters and change the wave patterns.&lt;br /&gt;&lt;br /&gt;
As with the Point Light demo, you will need to have DirectX (from Windows Update) installed in order to run the program.&lt;br /&gt;&lt;br /&gt;
These are just a couple applications of the sine function.  Because of its periodic repetition, it could have many potential uses; some fellow GCG forum members cited their implementations of a 3D carousel and a wavy spaceship flight path as additional examples.
&lt;br /&gt;&lt;br /&gt;
I hope you enjoy the demo programs of this post, though I admit I still need to learn better methods of input handling.  Part two will describe wave alterations, based on the Ocean Waves demo, in greater detail. Until then, feel free to let us know: &lt;strong&gt;What's the coolest thing you've done with sine/cosine waves?&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-3949783806250744973?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/3949783806250744973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/08/sine-language-lesson-part-1.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/3949783806250744973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/3949783806250744973'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/08/sine-language-lesson-part-1.html' title='Sine Language Lesson, Part 1'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_dKYKDpL5vqE/SpsbvMjE9II/AAAAAAAAAGQ/KsulkXJJJDE/s72-c/sincos.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-8672787052733698652</id><published>2009-07-16T17:57:00.006-04:00</published><updated>2012-02-10T01:57:53.816-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><category scheme='http://www.blogger.com/atom/ns#' term='Direct3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><title type='text'>Quick Random Update</title><content type='html'>So, Gamasutra is on Twitter too.  You may recognize them, or at least you should if you have any business as a video game developer/designer.  Gamasutra is one of the most popular game-oriented websites with full-featured articles and commentaries on the state of the industry, game reviews, yadda yadda yadda.  So now you can check out not only the &lt;a href="http://www.gamasutra.com"&gt;website&lt;/a&gt;, but also the &lt;a href="javascript:void(0)"&gt;Twitter&lt;/a&gt; feed.  Oops, sorry if that last link didn't work; I suppose I should have linked it the proper way: @&lt;a href="http://twitter.com/gamasutra"&gt;Gamasutra&lt;/a&gt;!
&lt;br /&gt;&lt;br /&gt;
Enough hype, this post is mostly me checking in for a quick progress update.  I blasted through reading about lighting, textures, blending, and stenciling in my Direct3D book and then found out the exercises required a fair deal of re-reading.  Lesson learned, I have to work through chapter exercises before moving on to more difficult chapters!  The same applies to the &lt;a href="http://gamedesignconcepts.wordpress.com"&gt;Game Design Concepts&lt;/a&gt; course I'm taking -- it's much easier to keep up with the readings than work through the exercises, some of which I have to skip.  FYI, you can follow discussion for the course on Twitter too; just search for #GDCU!
&lt;br /&gt;&lt;br /&gt;
The topic of my next post will be the power of sine waves.  Yep, I'm talking about those tricky oscillating waves you learned about way back in high school.  I've found some interesting applications and want to show off some of the cool stuff you can do with them. And now that I'm finally understanding the basics of HLSL (High Level Shader Language) shaders, the part that tripped me up big time in the last book I read, you can expect some posts on that stuff too.
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Just curious, when was the last time you used something from high school you never thought you would need again?  What's the trickiest math you've used in game development, and does calculus ever figure into the equation (pun... fully... intended!)?&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-8672787052733698652?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/8672787052733698652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/07/quick-random-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/8672787052733698652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/8672787052733698652'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/07/quick-random-update.html' title='Quick Random Update'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-3606909724992088366</id><published>2009-07-04T02:00:00.010-04:00</published><updated>2012-02-10T02:02:31.047-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Download'/><category scheme='http://www.blogger.com/atom/ns#' term='Direct3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><title type='text'>The Problem with the Mythical Black Box</title><content type='html'>In programming, we occasionally make use of something known as a "black box."  This Mythical Black Box is any library or chunk of code written by someone else that allows us to abstract a problem so we don't have to understand the details of solving it.  For example, if we pass the values 3 and 4 to a "calculator black box", which might be a class library written by another developer, we would expect it to return the value 12 for multiplication.  We don't care how it works internally, whether it computes 3+3+3+3 or 4+4+4; all we care is that it returns the correct value.  A black box diagram for an encryption algorithm might look something like the following.
&lt;br /&gt;&lt;br /&gt;
Password =&gt;  { Encryption Black Box } =&gt; Encrypted Password
&lt;br /&gt;&lt;br /&gt;
Jeff Atwood of &lt;a href="http://www.codinghorror.com"&gt;Coding Horror&lt;/a&gt; has recently expressed seemingly contrasting views on this topic, both &lt;a href="http://www.codinghorror.com/blog/archives/001275.html"&gt;touting&lt;/a&gt; and &lt;a href="http://www.codinghorror.com/blog/archives/001281.html"&gt;refuting&lt;/a&gt; the benefits of abstraction.  And for good reason, because it can be a good thing or a bad thing depending on &lt;strong&gt;whose library you choose&lt;/strong&gt;.  For one thing, you should never introduce code into your project if you aren't 100% certain it will fulfill its promise.  Many developers (myself included) prefer the "roll your own" method for most tasks simply because you know you can trust your own code (not that it will be error-free, just that it won't be malicious).  But sometimes it makes sense to use a well-tested library from another developer, such as the ever-popular JQuery library for Javascript development.  In such cases I suggest ensuring you trust the developer (e.g. they're well known, such as Microsoft, and would be ridiculed if the library failed) or that you have full access to the source code.  Many open source projects are reviewed by large numbers of people such that bugs are caught and fixed quickly.
&lt;br /&gt;&lt;br /&gt;
Unfortunately, even if you take my suggestions your black box may someday fail.  The whole reason I bring this up is that I faced this exact problem with my &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/04/play-skycop-v10-demo.html"&gt;SkyCop demo&lt;/a&gt;.  I developed it using the Common Files Framework presented in Engel's &lt;em&gt;Beginning Direct3D Game Programming, 2nd Edition&lt;/em&gt; and provided in a specific version of the Microsoft DirectX SDK.  When I ugraded to the most recent build of the SDK, my demo suddently stopped working and I started getting reports of others not being able to run it either.  I ran into numerous problems trying to get it to work with the latest DirectX SDK and believe the Common Files Framework was removed altogether in the latest version.  Having relied too heavily on that framework, I wasn't sure how to resolve the compilation errors and feared I would have to scrap the project altogether.
&lt;br /&gt;&lt;br /&gt;
Fortunately, in his &lt;em&gt;Introduction to 3D Game Programming with DirectX 9.0c: A Shader Approach&lt;/em&gt;, Frank Luna fully describes a working game framework instead of glossing over it and providing another black box.  I was able to essentially rip out the core of my SkyCop demo, converting it to use the new framework, and am pleased to have an updated demo below that should work on any DirectX 9 (or newer) version, but let me know if you still have any trouble running it.
&lt;br /&gt;&lt;br /&gt;
&lt;a href='http://jeromiewalters.com/downloads/SkyCop_1_1.zip'&gt;SkyCop v1.1 Demo Download&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
Black boxes can be a good thing when they're well-written by a trusted developer, but it's also a good idea to review the code (if possible) and at least have a basic understanding of how it works.  In my case, as a learning newbie, I was happy to avoid the initial complexity and that later bit me from behind.  One thing to keep in mind, though, is that black boxes come in many shapes and sizes.  My black box was a game framework but the concept could also apply to a game engine, a single portion (Renderer, Physics, Sound, etc.) of a game engine, or some other game components I'm not even aware of yet.
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Do you know what's going on under the hood of your game framework/engine?  What black boxes are you relying on to develop your games?&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-3606909724992088366?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/3606909724992088366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/07/problem-with-mythical-black-box.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/3606909724992088366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/3606909724992088366'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/07/problem-with-mythical-black-box.html' title='The Problem with the Mythical Black Box'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-6565926439812828533</id><published>2009-06-30T17:34:00.003-04:00</published><updated>2012-02-10T02:16:20.440-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><category scheme='http://www.blogger.com/atom/ns#' term='Motivation'/><title type='text'>June Monthly Checkup</title><content type='html'>Yep, another month has come and gone.  Sadly I still don't have a finished game, but I do have some cool demos to show off in upcoming posts.  I'm up to chapter thirteen (of twenty-two) in Luna's &lt;em&gt;Introduction to 3D Game Programming with DirectX 9.0c: A Shader Approach&lt;/em&gt; and am learning a lot, but it takes a while to work through the chapter exercises.  I'm also in the process of taking Ian Schreiber's free online game design course.  My portfolio website is nearly completed; I just need to find a better host before posting the link here on GDJ.
&lt;br /&gt;&lt;br /&gt;
So it's been yet another busy month of learning and experimenting, all while prepping for our big move to NC in August.  After we get settled I plan to join the Triangle IGDA chapter so I can get serious about &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/04/that-whole-networking-thing.html"&gt;that whole networking thing&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-6565926439812828533?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/6565926439812828533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/06/june-monthly-checkup.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6565926439812828533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6565926439812828533'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/06/june-monthly-checkup.html' title='June Monthly Checkup'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-7409753625642307046</id><published>2009-06-29T21:57:00.003-04:00</published><updated>2012-02-10T02:19:11.579-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='None'/><title type='text'>Speedrunning</title><content type='html'>The Escapist recently caught my attention with &lt;a href="http://www.escapistmagazine.com/articles/view/issues/issue_207/6192-Zen-and-the-Art-of-Speedrunning"&gt;this article on speedrunning&lt;/a&gt;.  If you're not familiar with the concept, some people spend WAY MORE time trying to master games than you or I do.  In fact, they spend countless hours and thousands of lives (digital lives of course) trying to master game levels, determining the most efficient paths to complete a level - or in some cases the entire game - in the shortest time possible.  There are plenty of other worthy examples on YouTube; just search for "speed run" after the title of your favorite video game.  
&lt;br /&gt;&lt;br /&gt;
Would you have the patience to master this???  I doubt I would.
&lt;br /&gt;&lt;br /&gt;
&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/_8LbrAYVrEw&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/_8LbrAYVrEw&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-7409753625642307046?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/7409753625642307046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/06/speedrunning.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/7409753625642307046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/7409753625642307046'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/06/speedrunning.html' title='Speedrunning'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-6607539001067737561</id><published>2009-06-29T21:15:00.006-04:00</published><updated>2012-02-10T02:20:19.466-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><title type='text'>First Day of Class</title><content type='html'>As mentioned some time ago, Ian Schreiber's &lt;a href="http://gamedesignconcepts.wordpress.com"&gt;Game Design Concepts&lt;/a&gt; course began today and I personally believe it's off to a great start.  I love reading things that make me think in a new way or help me understand concepts with simple examples.  For example, have you ever played a game called "three to fifteen"?  I had never heard of it and bet most of you haven't either, but once you read that &lt;a href="http://gamedesignconcepts.wordpress.com/2009/06/29/level-1-overview-what-is-a-game/"&gt;first lesson&lt;/a&gt; you'll realize you've probably played it many times!
&lt;br /&gt;&lt;br /&gt;
&lt;img style="float:right; margin:0 0 10px 10px;width: 302px; height: 258px;" src="http://4.bp.blogspot.com/_dKYKDpL5vqE/SklpgGjQrNI/AAAAAAAAAFg/iWfOUlxiNtk/s320/game.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5352925632341781714" /&gt;
I know this image is far below par in terms of graphical work typically posted on this blog, but it's actually a very rudimentary game design I created in a matter of two minutes!  Ian describes how simple it can be to create a game, and honestly anyone can do it.  I call my game "Rat Race", with the concept being that two rat tokens are placed at the start and their goal is to be the first to get to the cheese.  Each player must roll the die and get the numbers in order to advance (e.g. roll a 1 to advance to place "1", then roll a 2 to advance to "2", etc.) sequentially all the way from space "1" to the goal at "5".  If a player rolls a "6" they send their opponent back to the start position but also forfeit their turn.  They do not advance if they roll a number out of turn (e.g. roll anything other than a 1 from the start position).
&lt;br /&gt;&lt;br /&gt;
As Ian points out, mine isn't necessarily a &lt;em&gt;good&lt;/em&gt; game, but it proves anyone can do it and I look forward to learning more about designing good games.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-6607539001067737561?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/6607539001067737561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/06/first-day-of-class.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6607539001067737561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6607539001067737561'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/06/first-day-of-class.html' title='First Day of Class'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_dKYKDpL5vqE/SklpgGjQrNI/AAAAAAAAAFg/iWfOUlxiNtk/s72-c/game.bmp' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-708074262697702972</id><published>2009-06-22T17:51:00.005-04:00</published><updated>2012-02-10T02:20:55.408-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><title type='text'>Game Development Process</title><content type='html'>I read the article &lt;em&gt;How a Game Gets Made&lt;/em&gt; in the &lt;a href="http://gamedeveloper.texterity.com/gamedeveloper/2008careerguide/"&gt;free online edition&lt;/a&gt; of Game Career Guide magazine some time ago.  It's quite a good read for anyone interested in the process, and I believe it's important for me as a programmer to understand what role I will someday fill as a game developer.  What follows is a transcription of notes I took while reading to summarize the process; note that not all possible roles are covered and the steps are not listed in sequential order.
&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;u&gt;Preproduction&lt;/u&gt;&lt;br /&gt;
This is the phase where core game design decisions are made, game elements are prototyped, and the game story is developed.  A basic prototype of the game is developed quickly and shown to the producer who either scraps the game or gives it the go-ahead to move into production.
&lt;ul&gt;
&lt;li&gt;Designers document objects, characters, levels, enemies, NPCs, etc. for the game&lt;/li&gt;
&lt;li&gt;Artists work on character designs, level concept art, and storyboarding&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Programmers&lt;/strong&gt; work on tools, document technical specs, and perform risk assessment&lt;/li&gt;
&lt;li&gt;Producer determines a production schedule and milestones&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;&lt;u&gt;Production&lt;/u&gt;&lt;br /&gt;
This is the phase where the game is fully developed based on preproduction planning and detailed design documents.  Some experimentation is allowed as long as it improves the game.  The development team follows a "production methodology" to keep track of and divvy up remaining work.
&lt;ul&gt;
&lt;li&gt;Must determine dependencies early to complete child tasks sooner and keep teams independent (max efficiency)&lt;/li&gt;
&lt;li&gt;Artists get a head start creating/texturing character models and world props (cars, buildings, crates, etc.)&lt;/li&gt;
&lt;li&gt;Animators generate animations for character models&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Programmers&lt;/strong&gt; work on core functionality and data manipulation&lt;/li&gt;
&lt;li&gt;Level designers create rough sketches of all levels in the game&lt;/li&gt;
&lt;li&gt;System designer plugs in characters and tweaks animations and gameplay&lt;/li&gt;
&lt;li&gt;Sound designers work on effects, getting voice actors for character dialog, and music tracks&lt;/li&gt;
&lt;li&gt;Team meets periodically to review overall progress of the game&lt;/li&gt;
&lt;li&gt;At 2/3 of production timeline additional staff is brought in for QA testing; most features are implemented so it's time to squash bugs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;&lt;u&gt;Postproduction&lt;/u&gt;&lt;br /&gt;
Postproduction is all about getting the game into the hands of consumers.
&lt;ul&gt;
&lt;li&gt;Final build of the game (the Gold Master Disc) is printed&lt;/li&gt;
&lt;li&gt;Marketing publicizes the game to popular game websites, magazines, and as TV ads&lt;/li&gt;
&lt;li&gt;Publisher handles game manual and box manufacturing, and has a distributor set up to deliver the game to retail stores&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Developers&lt;/strong&gt; may be tasked with creating donwloadable content (characters, costumes, levels, etc.) to update and extend the game&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-708074262697702972?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/708074262697702972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/06/game-development-process.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/708074262697702972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/708074262697702972'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/06/game-development-process.html' title='Game Development Process'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-6489650743883257730</id><published>2009-05-31T17:55:00.004-04:00</published><updated>2012-02-10T02:21:14.937-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><category scheme='http://www.blogger.com/atom/ns#' term='Motivation'/><title type='text'>May Monthly Checkup</title><content type='html'>This has been a busy and difficult month with some unexpected events that nearly derailed my resolve to continue this journey.  Nonetheless, I press onward, but with the realization that I may not be able to post as frequently or accomplish goals as quickly as hoped.  So this is a pretty informal checkup this month and I've decided not to restate previously completed goals in favor of highlighting tasks that still need work.
&lt;br /&gt;&lt;br /&gt;
The foremost goal in my mind is to complete a full game.  I've started reading a new book that I plan to review once I've completed it, and the exercises of chapter five have me working on a 2D space shooter.  Following completion of this mini-project I will start work on a PONG clone; the physics of a ball in motion (including collision detection) are quite interesting to me and may require further study.  
&lt;br /&gt;&lt;br /&gt;
I have been playing more games lately but don't own a fancy new console yet; picked up three older games for the original XBox (only cost $20 for the set) and want to get a Nintendo Wii at some point.  Meanwhile, I have updated my old resume and started a portfolio site that is still a work in progress.
&lt;br /&gt;&lt;br /&gt;
So that's about it for progress updates this month.  I think my main takeaway from this month is that it's not how quickly you run the race... just that you eventually finish... and Rome wasn't built in a day.  Finally, for some fun reading, check out &lt;a href="http://www.escapistmagazine.com/"&gt;The Escapist&lt;/a&gt; online magazine.  They've got some cool game-related articles and a pretty cool RSS feed.  Check out my &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/03/really-simple-devious-guide-to-rss.html"&gt;devious guide&lt;/a&gt; for help with RSS.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-6489650743883257730?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/6489650743883257730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/05/may-monthly-checkup.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6489650743883257730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6489650743883257730'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/05/may-monthly-checkup.html' title='May Monthly Checkup'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-6099987652779201760</id><published>2009-05-15T11:44:00.005-04:00</published><updated>2012-02-10T02:22:41.037-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='None'/><title type='text'>Serious Games... Seriously?</title><content type='html'>As I continue reading and learning more about games, there's one categorical phrase I see repeatedly that always stops me in my tracks: Serious Games.
&lt;br /&gt;&lt;br /&gt;
Every time I see it I have to wonder, "What is a serious game?"  To me, the concept of a GAME always implies (or at least makes an attempt at, though some fail miserably) a connection to... FUN!  Despite my limited research, I've learned that the phrase describes the type of games intended for simulators and educational purposes.  In other words, a flight similator used by the Air Force to train new pilots might be considered a member of this category.
&lt;br /&gt;&lt;br /&gt;
Perhaps I'm making too big a deal over terminology, but I think educational programs of this type should simply be called "simulators."  But then someone might argue that they enjoyed the simulator, and so to them it is a game! :)  Nonetheless, the phrase just always hits me as an oxymoron.
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Have you played any serious games lately?  Would you say they were fun?&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-6099987652779201760?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/6099987652779201760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/05/serious-games-seriously.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6099987652779201760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6099987652779201760'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/05/serious-games-seriously.html' title='Serious Games... Seriously?'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-9118402116922991768</id><published>2009-05-14T00:41:00.005-04:00</published><updated>2012-02-10T02:23:40.683-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><title type='text'>Staying Busy</title><content type='html'>Father forgive me for I have sinned... it's been two weeks since my last post.  Wait, two weeks?!?  I know, it's terrible and I am ashamed (not terribly, but a little bit).  Rest assured, despite my recent silence some good things are happening.
&lt;br /&gt;&lt;br /&gt;
Firstly, I'm reading a new book titled &lt;em&gt;Introduction to 3D Game Programming with DirectX 9.0c: A Shader Approach&lt;/em&gt;.  As I learned &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/03/winding-road-ahead.html"&gt;last time&lt;/a&gt;, I'm going to avoid posting a book review until I've read it all the way through, but I will say that I'm on chapter six (of twenty-two) and learning some really cool things I plan to highlight in future posts.
&lt;br /&gt;&lt;br /&gt;
Secondly, I've been playing some cool free online games over at &lt;a href="http://armorgames.com/"&gt;Armor Games&lt;/a&gt;.  One of my personal favorites is &lt;a href="http://armorgames.com/play/3614/crush-the-castle"&gt;Crush the Castle&lt;/a&gt; and my wife, who loves hedgehogs, has been hooked on &lt;a href="http://armorgames.com/play/1760/hedgehog-launch"&gt;Hedgehog Launch&lt;/a&gt;.  Check 'em out!
&lt;br /&gt;&lt;br /&gt;
Finally, I've decided to create a clone of the classic Atari game &lt;a href="http://en.wikipedia.org/wiki/Pong"&gt;Pong&lt;/a&gt;.  For those who never played, you can play a version in your browser &lt;a href="http://www.project-euh.com/pong"&gt;here&lt;/a&gt; using pop-up windows!  Pong is a simple game that shouldn't require advanced concepts.  I'm hoping to dress it up with some nice textures and add a twist or two.
&lt;br /&gt;&lt;br /&gt;
So there's a few things keeping me busy.  Stay tuned for Pong updates!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-9118402116922991768?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/9118402116922991768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/05/staying-busy.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/9118402116922991768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/9118402116922991768'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/05/staying-busy.html' title='Staying Busy'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-6402798436172259016</id><published>2009-04-30T17:58:00.007-04:00</published><updated>2012-02-10T02:16:38.760-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><category scheme='http://www.blogger.com/atom/ns#' term='Motivation'/><title type='text'>April Monthly Checkup</title><content type='html'>Has it been another whole month?!?  Where does the time go?  Here's my current goals checklist on my journey towards becoming a Game Developer.&lt;br /&gt;&lt;br /&gt;

&lt;table&gt;
&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;
&lt;img style="float:left; margin:0;width: 42px; height: 35px;" src="http://3.bp.blogspot.com/_dKYKDpL5vqE/SdGEvzfg1GI/AAAAAAAAADY/tAYZoBbTDW8/s200/unchecked.jpg" border="0" /&gt;&lt;/td&gt;&lt;td&gt;

&lt;strong&gt;Create a finished game.&lt;/strong&gt;&lt;br /&gt;

I did some good work on my &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/04/play-skycop-v10-demo.html"&gt;SkyCop demo&lt;/a&gt;, finally getting a playable demo posted.  I plan to design a smaller-scale (possibly 2D) game at some point but need to work on learning more fundamentals first.
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;
&lt;img style="float:left; margin:0;width: 42px; height: 35px;" src="http://1.bp.blogspot.com/_dKYKDpL5vqE/SdGAZzSWAAI/AAAAAAAAADQ/nrFjhnSrgDs/s200/checked.jpg" border="0" /&gt;&lt;/td&gt;&lt;td&gt;

&lt;strong&gt;Use personal projects to test different rendering techniques and programming methods.&lt;/strong&gt;&lt;br /&gt;

Check! See the SkyCop reference above.
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;
&lt;img style="float:left; margin:0;width: 42px; height: 35px;" src="http://3.bp.blogspot.com/_dKYKDpL5vqE/SdGEvzfg1GI/AAAAAAAAADY/tAYZoBbTDW8/s200/unchecked.jpg" border="0" /&gt;&lt;/td&gt;&lt;td&gt;

&lt;strong&gt;Continue learning and be competent enough to explain design decisions.&lt;/strong&gt;&lt;br /&gt;

In addtion to keeping up on the latest feeds for major game sites and participating in a couple forums, I've purchased &lt;strong&gt;five new books!&lt;/strong&gt;  Admittedly three of them were recommended for Ian Schreiber's &lt;a href="http://gamedesignconcepts.wordpress.com/"&gt;Game Design Concepts&lt;/a&gt; course.  The one I'm probably most excited to dig into is &lt;a href="http://www.amazon.com/gp/product/1584506806"&gt;Game Coding Complete&lt;/a&gt;, which I'm hoping will be a good reference for proper structure and best practices.&lt;br /&gt;&lt;br /&gt;

Despite these positive steps, I can't mark this item completed just yet.  I am still learning, after all.
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;
&lt;img style="float:left; margin:0;width: 42px; height: 35px;" src="http://1.bp.blogspot.com/_dKYKDpL5vqE/SdGAZzSWAAI/AAAAAAAAADQ/nrFjhnSrgDs/s200/checked.jpg" border="0" /&gt;&lt;/td&gt;&lt;td&gt;

&lt;strong&gt;Start networking!&lt;/strong&gt;&lt;br /&gt;

I'm staying active in a couple forums and planning to participate in a local IGDA chapter.  The only problem is the local Columbus chapter (which I would still be a couple hours away from) appears to not be meeting at this time, so I may have to wait to participate with the Triangle chapter after we move to NC later this year.  Attending the &lt;a href="http://www.siegecon.net/SIEGE2009/"&gt;SIEGE&lt;/a&gt; conference is still a possibility, or I might consider a visit back up this way to check out the &lt;a href="http://www.gamexpo.us/"&gt;GameX&lt;/a&gt; Games and Media Expo.
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;
&lt;img style="float:left; margin:0;width: 42px; height: 35px;" src="http://3.bp.blogspot.com/_dKYKDpL5vqE/SdGEvzfg1GI/AAAAAAAAADY/tAYZoBbTDW8/s200/unchecked.jpg" border="0" /&gt;&lt;/td&gt;&lt;td&gt;

&lt;strong&gt;Play more games!&lt;/strong&gt;&lt;br /&gt;

I haven't bought a shiny new game to play yet, but I have tried out some independent games on &lt;a href="http://armorgames.com/"&gt;Armor Games&lt;/a&gt;.  Crush the Castle, where you get to use a trebuchet to destroy castles, is actually a lot of fun!  Nonetheless I think I need to get better versed in newer games to mark this item completed.
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;
&lt;img style="float:left; margin:0;width: 42px; height: 35px;" src="http://3.bp.blogspot.com/_dKYKDpL5vqE/SdGEvzfg1GI/AAAAAAAAADY/tAYZoBbTDW8/s200/unchecked.jpg" border="0" /&gt;&lt;/td&gt;&lt;td&gt;

&lt;strong&gt;Update the outdated resume.&lt;/strong&gt;&lt;br /&gt;

This is a new goal and a worthy one I think will help me focus even better on my target.  Darius Kazemi has some great tips on &lt;a href="http://tinysubversions.blogspot.com/2009/04/writing-resume-for-game-company.html"&gt;writing a resume for a game company&lt;/a&gt; and I plan to update my resume soon.
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;br /&gt;

"If you wanna be rich, you gotta do rich people stuff." - Dave Ramsey&lt;br /&gt;
"Wanna be a Game Developer?  Do Game Developer stuff!" - Me&lt;br /&gt;&lt;br /&gt;

See any holes in my plan or have useful tips/pointers to help get me further along?  Post a comment!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-6402798436172259016?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/6402798436172259016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/04/april-monthly-checkup.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6402798436172259016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6402798436172259016'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/04/april-monthly-checkup.html' title='April Monthly Checkup'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dKYKDpL5vqE/SdGEvzfg1GI/AAAAAAAAADY/tAYZoBbTDW8/s72-c/unchecked.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-8188826533142885638</id><published>2009-04-28T17:35:00.063-04:00</published><updated>2012-02-10T02:29:09.900-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Math'/><category scheme='http://www.blogger.com/atom/ns#' term='Direct3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Point-Plane Collision Detection Explained</title><content type='html'>In my previous post I presented a function for detecting collision of a point in 3D space with a plane (surface of an object).  It works well enough in my &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/04/play-skycop-v10-demo.html"&gt;SkyCop demo&lt;/a&gt; because all I need to check is if the tip of the primary ship intersects the surface of other ships.  Here's a description of the code, broken into seven steps to help you understand this basic form of collision detection.&lt;br /&gt;&lt;br /&gt;

&lt;table&gt;
&lt;tr&gt;&lt;th&gt;1)&lt;/th&gt;&lt;th&gt;Understand the Plane Equation: Ax + By + Cz + D = 0&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;
&lt;img style="float:right; margin:0 0 10px 10px;width: 186px; height: 178px;" src="http://3.bp.blogspot.com/_dKYKDpL5vqE/SflPcP1P3VI/AAAAAAAAAE4/O6eu7luPpNc/s200/PlaneEquation.gif" border="0" /&gt;The plane equation tells us that a point (x,y,z) is on a plane having normal vector (A,B,C) and distance D from the origin when Ax + By + Cz + D = 0.  If we plug in A, B, C, D, x, y, z and get any value other than zero, the point (x,y,z) is not on the plane.  Also note that since the dot product of vectors (A,B,C) and (x,y,z) equals Ax + By + Cz, we can rewrite the Plane Equation as DotProduct(N, P) + D = 0 for N=(A,B,C) and P=(x,y,z).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;2)&lt;/th&gt;&lt;th&gt;Get the collision surface's normal vector.&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;
As noted above, in order to detect if a point is on our collision surface (such as a wall we want to prevent the player from running through), we need to know the normal vector perpendicular to the surface.  A normal vector is computed by taking the cross product of two vectors on the plane.&lt;br /&gt;&lt;br /&gt;

The simplest 2D plane we can create in 3D space is a triangle with three vertices (call them vP1, vP2, and vP3) and I will focus on a triangular collision surface for simplicity.  We compute the normal vector by generating a vector from vP1 to vP2 and another from vP2 to vP3 and then take the cross product of those two vectors to obtain the normal vector.  Finally, the normal vector is normalized (made to have a length of 1.0) to simplify calculations.
&lt;div class="Code"&gt;&lt;pre class="prettyprint"&gt;
    vN1 = (vP2 - vP1);
    vN2 = (vP3 - vP2);
    D3DXVec3Cross(&amp;vNormal, &amp;vN1, &amp;vN2);
    D3DXVec3Normalize(&amp;vNormal, &amp;vNormal);
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;3)&lt;/th&gt;&lt;th&gt;Get plane distance using the Plane Equation.&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;
Using our revision of the Plane Equation, DotProduct(N, P) + D = 0, we can solve for D to get D = -DotProduct(N, P).  So we compute D by plugging in the normal vector and any point on the plane; any of the triangle surface's three vertices will suffice.
&lt;div class="Code"&gt;&lt;pre class="prettyprint"&gt;
    d = - D3DXVec3Dot(&amp;vP1, &amp;vNormal);
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;4)&lt;/th&gt;&lt;th&gt;Classify the start and destination points.&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;
&lt;img style="float:right; margin:0 0 10px 10px;width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_dKYKDpL5vqE/SflSLGah-nI/AAAAAAAAAFA/KCh7Vahzij4/s200/intersect.gif" border="0" /&gt;
Now that we've determined the collision surface's normal vector and distance from the origin (A, B, C, and D) we can use the Plane Equation for something really cool: determining if a given point lies on the plane!  When we plug a point P=(x,y,z) into the left side of our revised plane equation DotProduct(N, P) + D we get a result value, p.  If p &gt; 0, the point is in front of the plane.  If p &lt; 0, the point is behind the plane.  And of course we know that if p = 0 the point lies on the plane.&lt;br /&gt;&lt;br /&gt;

Since we're only concerned with detecting collisions for &lt;em&gt;moving&lt;/em&gt; objects, there must be a start position where the object moved from (p&lt;sub&gt;start&lt;/sub&gt;) and a destination position (p&lt;sub&gt;dest&lt;/sub&gt;) to which the object is moved.  The trick is realizing that a collision only occurs if these two positions have different locations &lt;em&gt;in relation to the plane&lt;/em&gt; -- if they're both in front of or both behind the plane, no collision occurred and we can return from the function.
&lt;div class="Code"&gt;&lt;pre class="prettyprint"&gt;
    p = (D3DXVec3Dot(&amp;vNormal, &amp;pStart) + d);
    if ( p &gt; 0.0f ) pStartLoc = PlaneFront;
    else if ( p &lt; 0.0f ) pStartLoc = PlaneBack;
    else pStartLoc = OnPlane;
    
    p = (D3DXVec3Dot(&amp;vNormal, &amp;pDest) + d);
    if( p &gt; 0.0f ) pDestLoc = PlaneFront;
    else if (p &lt; 0.0f ) pDestLoc = PlaneBack;
    else pDestLoc = OnPlane;
        
    if (pStartLoc == pDestLoc) return false;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;5)&lt;/th&gt;&lt;th&gt;Get the ray.&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;
At this point we know that an intersection &lt;strong&gt;did occur!&lt;/strong&gt;  Great, but there is a small problem; we don't know &lt;em&gt;where it occurred&lt;/em&gt;, which is equally important.  The plane that was crossed is an infinitely expanding plane in 3D space, often called a &lt;strong&gt;hyperplane&lt;/strong&gt;, so we need to check if the collision occurred within the bounds of our collision surface's borders.

Computing the vector, called a "ray", from our object's start position (p&lt;sub&gt;start&lt;/sub&gt;) to its destination position (p&lt;sub&gt;dest&lt;/sub&gt;) helps determine where the collision occurred.  The vector is normalized to simplify calculations.
&lt;div class="Code"&gt;&lt;pre class="prettyprint"&gt;
    ray = pDest - pStart;
    D3DXVec3Normalize(&amp;ray, &amp;ray);
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;6)&lt;/th&gt;&lt;th&gt;Get the intersection point.&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;
&lt;img style="float:left; margin:0 10px 10px 0;" src="http://1.bp.blogspot.com/_dKYKDpL5vqE/SflSm4jKb0I/AAAAAAAAAFI/mLYXxtfJqdY/s200/intersect2.gif" border="0" /&gt;
Vector math tells us that we can access points along a ray from p&lt;sub&gt;start&lt;/sub&gt; to p&lt;sub&gt;dest&lt;/sub&gt; using the formula (p&lt;sub&gt;start&lt;/sub&gt; + ray * t).  Since we know that a point along our ray from p&lt;sub&gt;start&lt;/sub&gt; to p&lt;sub&gt;dest&lt;/sub&gt; definitely intersects the plane, we use the plane equation to determine the value of t below.  Note that I've plugged the intersection point (p&lt;sub&gt;start&lt;/sub&gt; + ray * t) into the Plane Equation instead of a generic (x,y,z) because we know that point lies on the plane.  I've also renamed p&lt;sub&gt;start&lt;/sub&gt; to "s" and the ray to "r" for brevity.

&lt;ul style="font: 10pt Courier New"&gt;
&lt;li&gt;A(s&lt;sub&gt;x&lt;/sub&gt; + r&lt;sub&gt;x&lt;/sub&gt;*t) + B(s&lt;sub&gt;y&lt;/sub&gt; + r&lt;sub&gt;y&lt;/sub&gt;*t) + C(s&lt;sub&gt;z&lt;/sub&gt; + r&lt;sub&gt;z&lt;/sub&gt;*t) + D = 0
&lt;/li&gt;
&lt;li&gt;A*s&lt;sub&gt;x&lt;/sub&gt; + A*r&lt;sub&gt;x&lt;/sub&gt;*t + B*s&lt;sub&gt;y&lt;/sub&gt; + B*r&lt;sub&gt;y&lt;/sub&gt;*t + C*s&lt;sub&gt;z&lt;/sub&gt; + C*r&lt;sub&gt;z&lt;/sub&gt;*t + D = 0
&lt;/li&gt;
&lt;li&gt;DotProduct(N, s) + t*DotProduct(N, r) + D = 0&lt;/li&gt;
&lt;li&gt;t = - (DotProduct(N, s) + D) / DotProduct(N, r)&lt;/li&gt;
&lt;/ul&gt;

We've already computed the normal vector N=(A,B,C) as well as the plane distance D and the ray so we can calcuate t.  Then we plug it into our formula to get the actual intersection point on the plane.
&lt;div class="Code"&gt;&lt;pre class="prettyprint"&gt;
    t = - (d + D3DXVec3Dot(&amp;vNormal, &amp;pStart)) 
        / D3DXVec3Dot(&amp;vNormal, &amp;ray);
    
    intersect = pStart + (ray * t);
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;7)&lt;/th&gt;&lt;th&gt;Determine if intersection hit the collision surface!&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;
We're almost there! We determined the intersection point where our object collided on a hyperplane corresponding to the collision surface.  So the final question is, "Does the intersection point fall within the bounds of our collision surface?"  In order to answer that question we compute vectors from the intersection point to the surface vertices and measure the angles between those vectors.  If we form a complete circle, we know the point lies within the bounds of our collision surface!
&lt;img style="display:block; margin:0px auto 10px; text-align:center;width: 212px; height: 181px;" src="http://1.bp.blogspot.com/_dKYKDpL5vqE/SflX7Wn00BI/AAAAAAAAAFY/E7fF08AlrIU/s320/intersectAngles.gif" border="0" /&gt;

&lt;div class="Code"&gt;&lt;pre class="prettyprint"&gt;
    v1 = intersect - vP1;
    v2 = intersect - vP2;
    v3 = intersect - vP3;
    D3DXVec3Normalize(&amp;v1, &amp;v1);
    D3DXVec3Normalize(&amp;v2, &amp;v2);
    D3DXVec3Normalize(&amp;v3, &amp;v3);
    
    // Angles around intersection should total 360 degrees (2 PI)
    thetaSum = acos(D3DXVec3Dot(&amp;v1, &amp;v2)) 
             + acos(D3DXVec3Dot(&amp;v2, &amp;v3)) 
             + acos(D3DXVec3Dot(&amp;v3, &amp;v1));
    
    if (fabs(thetaSum - (2 * D3DX_PI)) &lt; 0.1)
        return true;
    else
        return false;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

There are a couple caveats to this method of collision detection.  The first is that the triangle surface vertices vP1-vP3 must be specified in clockwise order so the surface normal vector is computed correctly.  We also have to allow for a small margin of error in the calculation of the sum of angles due to the lack of floating-point precision.  Finally, I've read that this method should only be used on convex (as opposed to concave) polygons which do not curve inward on themselves.&lt;br /&gt;&lt;br /&gt;

I know this is very low-level and there are probably simpler ways to do it (bounding boxes/spheres come to mind...), but it's kinda neat to see how the math makes it work!  Please feel free to post comments/questions to let me know what you think of this tutorial.  I hope it provides a clearer understanding of what's going on under-the-hood in basic point-plane collision detection.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-8188826533142885638?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/8188826533142885638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/04/point-plane-collision-detection.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/8188826533142885638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/8188826533142885638'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/04/point-plane-collision-detection.html' title='Point-Plane Collision Detection Explained'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dKYKDpL5vqE/SflPcP1P3VI/AAAAAAAAAE4/O6eu7luPpNc/s72-c/PlaneEquation.gif' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-8690369530915086480</id><published>2009-04-24T00:38:00.037-04:00</published><updated>2012-02-10T02:28:29.594-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Direct3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Quick 'n Dirty Point-Plane Collision Detection</title><content type='html'>A couple weeks ago I was in a frenzy to implement collision detection in my &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/04/play-skycop-v10-demo.html"&gt;SkyCop demo&lt;/a&gt;. Sure, I planned to go back and study it in more detail at some point, but for the moment I just wanted to get something done so I could avoid flying through enemy ships and start blowing them up. After a few days of searching, I quickly realized that collision detection is no trivial task; it's a field of study all on its own! I started with &lt;a href="http://www.flipcode.com/archives/Basic_Collision_Detection.shtml"&gt;this flipcode article&lt;/a&gt; that served as a good introduction but left me a bit confused. After more research and trial-and-error I had a working example function that I would like to share with anyone needing to feed that same primal urge to get something working quickly.&lt;br /&gt;&lt;br /&gt;

The function, written in C++ for Direct3D 9, determines if a single point will cross a triangular plane (parameters vP1-vP3 specified in clockwise order). Parameter prevPos is the initial position your character/camera/object moves from and curPos is the position to which it will be moved. For example, if you want to detect if an FPS player will collide with a wall, you would call this function with the camera's initial position as prevPos and its predicted next position [prevPos + (speed * direction)] as curPos. Submit a comment if you have any questions, and keep in mind I will discuss the code in detail in a future post.&lt;br /&gt;&lt;br /&gt;

Btw, I'm sure there are engines that handle all this stuff for you, but since I haven't gotten into those yet it was a nice exercise for me.  And I do apologize for the ugly formatting.  I'll work on making code selections look better in future posts!&lt;br /&gt;&lt;br /&gt;

&lt;div class="Code"&gt;&lt;pre class="prettyprint"&gt;enum PlanePosition
{
   PlaneFront,
   PlaneBack,
   OnPlane
};

bool IntersectsTriangle(D3DXVECTOR3 prevPos, D3DXVECTOR3 curPos, 
          D3DXVECTOR3 vP1, D3DXVECTOR3 vP2, D3DXVECTOR3 vP3)
{
    float p, d, t, thetaSum;
    PlanePosition prevLoc, curLoc;
    D3DXVECTOR3 ray, v1, v2, v3, vNormal, intersect;
 
    // Compute normal vector for the plane
    v1 = (vP2 - vP1);
    v2 = (vP3 - vP2);
    D3DXVec3Cross(&amp;vNormal, &amp;v1, &amp;v2);
    D3DXVec3Normalize(&amp;vNormal, &amp;vNormal);

    
    // Compute plane distance
    d = - D3DXVec3Dot(&amp;vP1, &amp;vNormal);

    
    // Classify positions using planar equation
    p = (D3DXVec3Dot(&amp;vNormal, &amp;prevPos) + d);
    if ( p &gt; 0.0f ) prevLoc = PlaneFront;
    else if ( p &lt; 0.0f ) prevLoc = PlaneBack;
    else prevLoc = OnPlane;

    
    p = (D3DXVec3Dot(&amp;vNormal, &amp;curPos) + d);
    if( p &gt; 0.0f ) curLoc = PlaneFront;
    else if (p &lt; 0.0f ) curLoc = PlaneBack;
    else curLoc = OnPlane;
        
    if (prevLoc == curLoc) return false;
   
    // Crossed the plane, did intersect occur inside triangle?
    // Get normalized ray
    ray = curPos - prevPos;
    D3DXVec3Normalize(&amp;ray, &amp;ray);

    
    // t = point along ray where intersection occurs
    t = - (d + D3DXVec3Dot(&amp;vNormal, &amp;prevPos)) 
        / D3DXVec3Dot(&amp;vNormal, &amp;ray);

    
    // Get intersection point on the plane
    intersect = prevPos + (ray * t);

    
    // Determine if intersection is within triangle plane
    // Angles around intersection should total 360 degrees (2 PI) 
    v1 = intersect - vP1;
    v2 = intersect - vP2;
    v3 = intersect - vP3;
    D3DXVec3Normalize(&amp;v1, &amp;v1);
    D3DXVec3Normalize(&amp;v2, &amp;v2);
    D3DXVec3Normalize(&amp;v3, &amp;v3);
 
    thetaSum = acos(D3DXVec3Dot(&amp;v1, &amp;v2)) 
             + acos(D3DXVec3Dot(&amp;v2, &amp;v3)) 
             + acos(D3DXVec3Dot(&amp;v3, &amp;v1));

    
    // If sum == 2PI we have an intersection!
    if ((thetaSum &gt;= ((2 * D3DX_PI) - 0.1)) &amp;&amp; 
        (thetaSum &lt;= ((2 * D3DX_PI) + 0.1)))
    {
        return true;
    }

    
    return false;
}
&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-8690369530915086480?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/8690369530915086480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/04/quick-n-dirty-point-plane-collision.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/8690369530915086480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/8690369530915086480'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/04/quick-n-dirty-point-plane-collision.html' title='Quick &apos;n Dirty Point-Plane Collision Detection'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-5292766455396823850</id><published>2009-04-20T00:29:00.006-04:00</published><updated>2012-02-10T02:27:23.144-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><title type='text'>That Whole Networking Thing...</title><content type='html'>So, I'm on &lt;a href="http://twitter.com/gamedevjourney"&gt;Twitter&lt;/a&gt; too, and I have mittens to thank for it.  I read &lt;a href="http://www.gamedev.net/community/forums/mod/journal/journal.asp?jn=251565&amp;cmonth=3&amp;cyear=2009&amp;cday=17"&gt;his GameDev.net post&lt;/a&gt; some time ago, have been kicking the idea around and finally signed up.  The cool thing to me is that Twitter can be a great resource to see what's going on in the game industry from people who just enjoy working on games.  Click the link above for a list of industry professionals you can follow on Twitter!&lt;br /&gt;&lt;br /&gt;

This brings me to one of my weakest points on my original checklist to becoming a game developer, which is also one of the most important to getting a job in the industry: networking.  I've already been fortunate to meet some interesting people like &lt;a href="http://www.mattzitterman.com"&gt;Matt Zitterman&lt;/a&gt; and &lt;a href="http://gshonk.wordpress.com/"&gt;Grant Shonkwiler&lt;/a&gt; on the Game Career Guide forums, and I believe this is another step in the right direction to getting connected.&lt;br /&gt;&lt;br /&gt;

It's not always WHAT you know, but often WHO you know.  &lt;strong&gt;What are you doing to get connected?&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-5292766455396823850?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/5292766455396823850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/04/that-whole-networking-thing.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/5292766455396823850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/5292766455396823850'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/04/that-whole-networking-thing.html' title='That Whole Networking Thing...'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-5699108313551867616</id><published>2009-04-17T00:58:00.021-04:00</published><updated>2012-02-10T02:26:34.146-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Download'/><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><title type='text'>Play the SkyCop v1.0 Demo!</title><content type='html'>I haven't been posting as frequently lately, but for good reason.  I've been hard at work on SkyCop, which I &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/03/introducing-skycop-v07.html"&gt;introduced&lt;/a&gt; about a month ago.  Keep in mind this is nowhere near a full-featured game, which is why I'm calling it a &lt;strong&gt;demo&lt;/strong&gt;.  But it is playable and can be "won" by destroying all red enemy ships, which is pretty fun for at least a couple minutes! :)&lt;br /&gt;&lt;br /&gt;

&lt;a href="http://2.bp.blogspot.com/_dKYKDpL5vqE/SegghLNPTII/AAAAAAAAAEA/gm40Rz1omtk/s1600-h/SkyCop_1.0.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" width="250px" src="http://2.bp.blogspot.com/_dKYKDpL5vqE/SegghLNPTII/AAAAAAAAAEA/gm40Rz1omtk/s320/SkyCop_1.0.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5325542313681702018" /&gt;&lt;/a&gt;Features include:
&lt;ul&gt;&lt;li&gt;3D Movement/Rotation&lt;/li&gt;&lt;li&gt;Speed Boost (multi-texturing)&lt;/li&gt;&lt;li&gt;Energy Shield (alpha blending)&lt;/li&gt;&lt;li&gt;Basic Collision Detection&lt;/li&gt;&lt;li&gt;Enemy Target Indicator&lt;/li&gt;&lt;li&gt;3 Backgrounds&lt;/li&gt;&lt;li&gt;2 Camera Modes&lt;/li&gt;&lt;/ul&gt;Some obvious enhancements include the addition of music, sound effects, more guns, explosions, and artificial intelligence so the enemy ships can fight back!  Alas, these will come in time as I continue to learn.  Click the link below to try it out (press number 1 in the program for controls) and let me know what you think.  Thanks for checking it out!&lt;br /&gt;&lt;br /&gt;

&lt;a href='http://jeromiewalters.com/downloads/SkyCop_1_0.zip'&gt;Download SkyCop v1.0 Demo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

&lt;u&gt;System Requirements:&lt;/u&gt; Windows OS, DirectX 9.0 runtime (available from Windows Update or searching online)&lt;br /&gt;&lt;br /&gt;

&lt;u&gt;Important Disclaimer:&lt;/u&gt; I did NOT create the background images in the program.  I used &lt;em&gt;brightday1&lt;/em&gt;, &lt;em&gt;brightday2&lt;/em&gt;, and &lt;em&gt;grandcanyon&lt;/em&gt; located &lt;a href="http://www.codemonsters.de/home/content.php?show=cubemaps"&gt;here&lt;/a&gt;, where they are listed as coming from free or (L)GPL sources.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-5699108313551867616?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/5699108313551867616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/04/play-skycop-v10-demo.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/5699108313551867616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/5699108313551867616'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/04/play-skycop-v10-demo.html' title='Play the SkyCop v1.0 Demo!'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_dKYKDpL5vqE/SegghLNPTII/AAAAAAAAAEA/gm40Rz1omtk/s72-c/SkyCop_1.0.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-7132233872802004557</id><published>2009-04-09T00:24:00.005-04:00</published><updated>2012-02-10T02:25:30.857-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><title type='text'>Game Design Concepts</title><content type='html'>Professional game designer and teacher Ian Schreiber will be presenting an online course via his blog this Summer.  From his introduction, it looks to be an interesting college-level course without the college price tag.  The course will not cover game programming, but if you're at all interested in game design this is sure to be a great learning opportunity.  Class starts June 29th.  Check out his blog to learn more!&lt;br /&gt;&lt;br /&gt;

&lt;a href="http://gamedesignconcepts.wordpress.com/"&gt;Ian Schreiber's Game Design Concepts&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-7132233872802004557?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/7132233872802004557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/04/game-design-concepts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/7132233872802004557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/7132233872802004557'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/04/game-design-concepts.html' title='Game Design Concepts'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-417838596327316331</id><published>2009-04-02T23:40:00.003-04:00</published><updated>2012-02-10T02:25:07.801-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Direct3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><title type='text'>Winding Road Ahead</title><content type='html'>&lt;div style="float:left;margin-right:10px;"&gt;&lt;img style="margin:0;width: 200px; height: 150px;" src="http://2.bp.blogspot.com/_dKYKDpL5vqE/SdKdcauUpfI/AAAAAAAAADg/x078Bq8Hu58/s200/windingRoad.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5319487221413488114" /&gt;&lt;br&gt;&lt;span style="font-size:x-small"&gt;&lt;a href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en"&gt;Credit&lt;/a&gt;: &lt;a href="http://www.flickr.com/photos/nicolaswebster/"&gt;nwebster!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;Tonight I was awakened to the importance of reading a book in its entirety &lt;em&gt;before&lt;/em&gt; posting a &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/03/courtesy-amazon-ive-been-reading.html"&gt;book review&lt;/a&gt;.  My thrill of chapters 6-8 on the concepts of Direct3D animation and texturing in &lt;em&gt;Beginning Direct3D Game Programming, 2nd Edition&lt;/em&gt; has quickly been eroded by the exponential complexity of chapters 9 and 10 on the High-Level Shader Language (HLSL).  I am excited to learn about lighting/shading, environment mapping, bump mapping, reflection, and other techniques described in these chapters.  But two frustrating evenings of incomprehensible reading have led me to conclude, as noted by a few other reviews on Amazon as well, that the book is not truly written with the beginner in mind.  So I'm taking a new path.&lt;br /&gt;&lt;br /&gt;

I'm shelving the book... for now.  I think it is still a good reference (up until chapter 9 anyway) and may be of use once I gain a better introduction to the concepts described in the later chapters.  Until then, there are other resources, such as &lt;a href="http://www.directxtutorial.com/Tutorial9/B-Direct3DBasics/dx9B.aspx"&gt;DirectXTutorial.com&lt;/a&gt; and the SDK Documentation itself, that will hopefully provide a more gradual learning curve.  Could this be a major turning point in my journey to become a Game Developer?  Surely the resources I select to learn Direct3D will affect my growth, but only time will tell...&lt;br /&gt;&lt;br /&gt;

&lt;strong&gt;What resources have you used for learning Direct3D?  What worthwhile programming reference/guide would you recommend to someone who has never written a single line of Direct3D code?&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-417838596327316331?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/417838596327316331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/winding-road-ahead.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/417838596327316331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/417838596327316331'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/winding-road-ahead.html' title='Winding Road Ahead'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_dKYKDpL5vqE/SdKdcauUpfI/AAAAAAAAADg/x078Bq8Hu58/s72-c/windingRoad.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-1561161338361310631</id><published>2009-03-30T19:47:00.020-04:00</published><updated>2012-02-10T02:15:58.793-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><category scheme='http://www.blogger.com/atom/ns#' term='Motivation'/><title type='text'>Monthy Checkup</title><content type='html'>It's been a whopping two weeks since I started this blog, but it's also the end of the month, which means it's checkup time! At the end of each month, I will review my incomplete goals and determine how I'm progressing toward becoming a Game Developer. You may recall some of the following from my &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/03/inspiration.html"&gt;Inspiration&lt;/a&gt; post and I've added a few new goals too.&lt;br /&gt;&lt;br /&gt;

&lt;table&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;&lt;img style="float:left; margin:0;width: 42px; height: 35px;" src="http://3.bp.blogspot.com/_dKYKDpL5vqE/SdGEvzfg1GI/AAAAAAAAADY/tAYZoBbTDW8/s200/unchecked.jpg" border="0" /&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Create a finished game.&lt;/strong&gt;&lt;br /&gt;I'm still in the process of learning Direct3D and playing with various techniques.  &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/03/introducing-skycop-v07.html"&gt;SkyCop&lt;/a&gt; is a wide-open testbed for experimentation, but once I feel more confident in my skills I will design a smaller-scale game that I can actually finish.  I've read numerous articles stressing the importance of showing potential employers you can create a finished product.&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;&lt;img style="float:left; margin:0;width: 42px; height: 35px;" src="http://1.bp.blogspot.com/_dKYKDpL5vqE/SdGAZzSWAAI/AAAAAAAAADQ/nrFjhnSrgDs/s200/checked.jpg" border="0" /&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Use personal projects to test different rendering techniques and programming methods.&lt;/strong&gt;&lt;br /&gt;Check! See the SkyCop reference above.&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;&lt;img style="float:left; margin:0;width: 42px; height: 35px;" src="http://3.bp.blogspot.com/_dKYKDpL5vqE/SdGEvzfg1GI/AAAAAAAAADY/tAYZoBbTDW8/s200/unchecked.jpg" border="0" /&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Continue learning and be competent enough to explain design decisions.&lt;/strong&gt;&lt;br /&gt;I've exponentially ramped up my reading of game development blogs and articles on major sites like GameDev.net and Gamasutra.  I want to get another book or two to learn technical/design concepts; I've heard &lt;a href="http://www.amazon.com/gp/product/1584506806"&gt;Game Coding Complete&lt;/a&gt; is a good reference.&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;&lt;img style="float:left; margin:0;width: 42px; height: 35px;" src="http://1.bp.blogspot.com/_dKYKDpL5vqE/SdGAZzSWAAI/AAAAAAAAADQ/nrFjhnSrgDs/s200/checked.jpg" border="0" /&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Start networking!&lt;/strong&gt;&lt;br /&gt;I've started participating in the Game Career Guide forum; they have a bunch of bright and friendly people willing to help newcomers to the scene, and I'm hoping I will be able to contribute positively to the community.  I'm also learning about different game development conferences and considering a trip to &lt;a href="http://www.gdconf.com/"&gt;GDC&lt;/a&gt; next year or possibly attending &lt;a href="http://www.siegecon.net/SIEGE2009/"&gt;SIEGE&lt;/a&gt; this year.&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;&lt;img style="float:left; margin:0;width: 42px; height: 35px;" src="http://3.bp.blogspot.com/_dKYKDpL5vqE/SdGEvzfg1GI/AAAAAAAAADY/tAYZoBbTDW8/s200/unchecked.jpg" border="0" /&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Play more games!&lt;/strong&gt;&lt;br /&gt;I love playing video games, and remember the thrill of playing multiplayer Quake 2 and Unreal Tournament back in the day.  It's hard to find the time these days, but in order to understand modern game concepts I really should buy a new game.  That's my rationalization, anyway ;)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;

Dave Ramsey, creator of Financial Peace University and an awesome motivational speaker, says "If you wanna be rich, you gotta do rich people stuff."  Likewise, if you wanna be a Game Developer, you gotta do Game Developer stuff!  I found &lt;a href="http://www.gamasutra.com/features/20050817/hong_01.shtml"&gt;these testimonies&lt;/a&gt; of actual developers/designers working in the field to be quite interesting.  They're a good reminder that there's more than one way to break into the games industry, and I know that I can do it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-1561161338361310631?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/1561161338361310631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/monthy-checkup.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/1561161338361310631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/1561161338361310631'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/monthy-checkup.html' title='Monthy Checkup'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dKYKDpL5vqE/SdGEvzfg1GI/AAAAAAAAADY/tAYZoBbTDW8/s72-c/unchecked.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-7477655859021007931</id><published>2009-03-27T18:00:00.004-04:00</published><updated>2012-02-10T02:15:16.953-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AI'/><title type='text'>Recommended Reading: Artificial Stupidity</title><content type='html'>Gamasutra recently featured an article titled &lt;em&gt;Intelligent Mistakes: How to Incorporate Stupidity Into Your AI Code&lt;/em&gt; by Mick West.  It's a great read that I highly recommend for anyone, including non-programmers, regarding the topic of Artificial Intelligence.&lt;br /&gt;&lt;br /&gt;

For the uninitiated, Artificial Intelligence (AI) is the logic used in a game by your computer "opponent".  The fun part of playing a video game in the absence of human vs. human interaction is the ability to play against the machine, which simulates the actions of a human opponent.  However, knowing that a computer relies on logic, mathematics, and the ability to perform a million computations per second, there is no reason for the computer not to win &lt;strong&gt;every single time&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;  

It wouldn't be fun to play against an opponent that never loses, which is why we need to decrease the computer's IQ!  But as Mick points out, simply reducing the number of computations the machine is allowed to perform before making a decision would cause it to make abnormal blunders; it would be too easy to defeat and once again, not fun. Instead, a better approach is for the AI to perform its normal amount of computation and earnestly try to win, occasionally making a move that is more advantageous to the human player. If the human player takes advantage of these "thrown a bone" moves frequently enough, they have the opportunity to win. Yet they can still enjoy the challenge of playing against an opponent that is trying hard to win (and will win if the player fails to take advantage of certain opportunities).&lt;br /&gt;&lt;br /&gt;

My quick summary hardly does it justice.  &lt;a href="http://www.gamasutra.com/view/feature/3947/intelligent_mistakes_how_to_.php"&gt;Read the full article now!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-7477655859021007931?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/7477655859021007931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/recommended-reading-artificial.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/7477655859021007931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/7477655859021007931'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/recommended-reading-artificial.html' title='Recommended Reading: Artificial Stupidity'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-2192132979162048151</id><published>2009-03-26T00:58:00.018-04:00</published><updated>2012-02-10T02:14:36.511-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><title type='text'>Program-ictionary</title><content type='html'>This post is dedicated to my good friend over at &lt;a href="http://heartlikejesus.blogspot.com/"&gt;Heart Like Jesus&lt;/a&gt; blog, who recently reminded me we don't all speak geek. For those of us who do, even seemingly-simple concepts can deteriorate in the absence of a common terminology. The table below takes a stab at defining some key phrases used on this blog.&lt;br /&gt;&lt;br /&gt;

&lt;table class="BorderedTable" cellpadding="5"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Phrase&lt;/th&gt;&lt;th&gt;Definition&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;C++&lt;/td&gt;&lt;td&gt;Currently the most common game programming language.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;OOP&lt;/td&gt;&lt;td&gt;Object Oriented Programming. This is a conceptual way of structuring code to represent objects in the real world (e.g. creating a Person class that has properties such as Name and Age).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;DirectX&lt;/td&gt;&lt;td&gt;Microsoft's collection of APIs for multimedia development for Windows-based systems. A few specific APIs include Direct3D (for graphics), DirectShow (for presentations), and DirectSound (for audio).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;Direct3D&lt;/td&gt;&lt;td&gt;The DirectX API for creating computer graphics.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;API&lt;/td&gt;&lt;td&gt;Application Programming Interface. An API simplifies work for programmers by providing them with a list of functions they can use to perform specific tasks in a program.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;Pixel&lt;/td&gt;&lt;td&gt;Short for &lt;em&gt;picture element&lt;/em&gt;, a pixel represents a single dot displayed on your computer monitor.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;Texel&lt;/td&gt;&lt;td&gt;Short for &lt;em&gt;texture element&lt;/em&gt;, a texel represents a single dot displayed in a texture (image) file.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" nowrap&gt;Texture Mapping&lt;/td&gt;&lt;td&gt;See my post &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/03/texturing-fundamentals.html"&gt;Texturing Fundamentals&lt;/a&gt; for a definition of textures. Texture mapping is the process of &lt;em&gt;texturing&lt;/em&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;Point&lt;/td&gt;&lt;td&gt;A position in 2-dimensional space specified by a horizontal X value and a vertical Y value.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;Vertex&lt;/td&gt;&lt;td&gt;A position in 3-dimensional space specified by a horizontal X value, a vertical Y value, and a depth Z value.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" nowrap&gt;Direct3D Vertex&lt;/td&gt;&lt;td&gt;A vertex that may contain properties (such as color, texture coordinates, etc.) in addition to a position (x,y,z) value.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" nowrap&gt;Vertex Buffer&lt;/td&gt;&lt;td&gt;A hardware-dependent structure, accessible via Direct3D, to hold a list of vertices.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;Render&lt;/td&gt;&lt;td&gt;The act of drawing content from a vertex buffer to the screen.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" nowrap&gt;Object Geometry&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Set of vertices that make up a 3D object.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;Geometry&lt;/td&gt;&lt;td&gt;Math stuff I learned freshman year in high school and wish I could remember better now. Very important for graphics development!&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
This list is by no means comprehensive, but it's a start. I'll try to make sure I define new concepts clearly and am always open to correction from wiser experts. It's been said that &lt;a href="http://www.codinghorror.com/blog/archives/001130.html"&gt;blog comments are often better than the original blog post&lt;/a&gt;, and I'm excited to see if that proves true on GDJ!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-2192132979162048151?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/2192132979162048151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/program-ictionary.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/2192132979162048151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/2192132979162048151'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/program-ictionary.html' title='Program-ictionary'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-8076040929237651428</id><published>2009-03-23T16:43:00.010-04:00</published><updated>2012-02-10T02:13:07.550-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Direct3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><title type='text'>Texturing Fundamentals</title><content type='html'>&lt;img style="float:left; margin:0 10px 10px 0;width: 165px; height: 320px;" src="http://2.bp.blogspot.com/_dKYKDpL5vqE/Scf7DOE0shI/AAAAAAAAABs/5k1Y8LWYIKo/s320/FlightSim.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5316493917870666258" /&gt;In my &lt;a href="http://gamedeveloperjourney.blogspot.com/2009/03/introducing-skycop-v07.html"&gt;instroduction to SkyCop&lt;/a&gt;, I briefly mentioned textures without describing what they are or how to use them in game development.  I fear I may still not be capable of providing a full explanation, but here is what I know so far.&lt;br /&gt;&lt;br /&gt;

The tricky part of defining the word "texture" is that it can be both a noun AND a verb.  That is, you use a &lt;em&gt;texture file&lt;/em&gt; (like the image at left) to &lt;em&gt;texture&lt;/em&gt; an object.  The process of texturing can be thought of as &lt;em&gt;clothing&lt;/em&gt; an object.  No object in a Direct3D game is particularly interesting without some color or texture applied to it, and textures are the most common means of adding realism to our favorite games.&lt;br /&gt;&lt;br /&gt;

To understand how a 3D object is textured, consider the SkyCop ship below.  Every Direct3D object starts as a wireframe model having a certain number of vertices.  Each vertex (think point) consists of a position (x, y, z) value and a texture coordinate (u, v) value.  The texture coordinate points to a position in the texture file; the point referenced in the texture file is called a &lt;em&gt;texel&lt;/em&gt; (short for texture element).  Direct3D is able to wrap the texture onto the object by using a universal address scheme for texture coordinates; the values range from 0.0 to 1.0 inclusive, both horizontally and vertically.  As you can see in the image above, the top-left texel is represented by texture coordinate (0.0, 0.0) and extends to the bottom-right texel at coordinate (1.0, 1.0).&lt;br /&gt;&lt;br /&gt;

&lt;img style="float:right; margin:0 0 10px 10px;width: 159px; height: 164px;" src="http://docs.google.com/File?id=dgq3c6kw_9gmm735gh_b" border="0" alt=""id="BLOGGER_PHOTO_ID_5316559705043849586" /&gt;So to map the tip of the SkyCop ship with the green tip in the image, we tell Direct3D to map the vertex at the tip of the ship with horizontal u = 0.5 and vertical v = 0.0.  Similarly, we map the left and right wing tips with (0.0, 0.5) and (1.0, 0.5) respectively.  Are you starting to see how the texture is wrapped onto the wireframe model?&lt;br /&gt;&lt;br /&gt;

I was planning to describe the SkyCop background texturing method, but this post is already getting lengthy and I think I have more to learn on environment mapping to get it done "the right way" first.  Note that this post barely touched the basics of texture-mapping.  There's a lot more to learn about how textures can be used to create cool effects, and this will likely be the focus of upcoming posts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-8076040929237651428?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/8076040929237651428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/texturing-fundamentals.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/8076040929237651428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/8076040929237651428'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/texturing-fundamentals.html' title='Texturing Fundamentals'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_dKYKDpL5vqE/Scf7DOE0shI/AAAAAAAAABs/5k1Y8LWYIKo/s72-c/FlightSim.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-7377755362569069722</id><published>2009-03-21T10:01:00.010-04:00</published><updated>2012-02-10T02:11:45.619-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><title type='text'>A  Really Simple, Devious Guide to RSS</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dKYKDpL5vqE/ScTz9Q-6CUI/AAAAAAAAAA8/wZLsfDGRvzA/s1600-h/128px-Feed-icon.svg.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 128px; height: 128px;" src="http://2.bp.blogspot.com/_dKYKDpL5vqE/ScTz9Q-6CUI/AAAAAAAAAA8/wZLsfDGRvzA/s320/128px-Feed-icon.svg.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5315641694060415298" /&gt;&lt;/a&gt;This is one of very few selfish posts on this blog, as you will soon see.  If you already know what RSS feeds are, you may be more interested in skipping to one of my more technical posts.  For the curious or those who, like myself just a year ago, have never used RSS, I urge you to continue reading and learn of my devious plans...&lt;br /&gt;&lt;br /&gt;

&lt;strong&gt;What is RSS?&lt;/strong&gt;
Wikipedia tells us that "RSS (abbreviation for Really Simple Syndication) is a family of Web feed formats used to publish frequently updated works—such as blog entries, news headlines, audio, and video—in a standardized format."  Simply put, it allows authors on the web to say "hey everyone, I've published something new!" and people who are interested in the author's website to be informed of the new content.&lt;br /&gt;&lt;br /&gt;

&lt;strong&gt;How does it work? How do I use RSS?&lt;/strong&gt;
Technically, the author of a site sets up an XML standard-formatted file somewhere on their site.  When they add new content, they also update the XML file.  There are many sites (like Blogger) that automatically update this file when new content is added.&lt;br /&gt;&lt;br /&gt;

&lt;a href="http://3.bp.blogspot.com/_dKYKDpL5vqE/ScUL243AktI/AAAAAAAAABc/r8q7gKIuR7s/s1600-h/iGoogle.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 118px;" src="http://3.bp.blogspot.com/_dKYKDpL5vqE/ScUL243AktI/AAAAAAAAABc/r8q7gKIuR7s/s200/iGoogle.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5315667972784689874" /&gt;&lt;/a&gt;You use a program, called an "aggregator", to stay up-to-date with an author's latest content (e.g. to know automatically when a new blog post is published). A feed aggregator, more commonly known as a feed reader, is an online or offline tool that keeps track of your subscriptions (by checking those XML files) and shows when your favorite sites have new content to be viewed.  You have the option to just view summaries, view full content of new articles, or go to the author's website.  There are many feed readers available, but I personally prefer &lt;a href="http://www.google.com/intl/en/googlereader/tour.html"&gt;Google Reader&lt;/a&gt;.  Using the Google Reader gadget on my iGoogle home page means I have quick access to my favorite content every time I open my web browser, as you can see at right (click to enlarge).&lt;br /&gt;&lt;br /&gt;

&lt;strong&gt;How is any of this selfish or devious?&lt;/strong&gt;
I'm glad you asked.  I know you're thinking up til this point you've seen nothing but great information.  But of course my purpose is to enlist as many new Game Developer Journey readers as possible! :)&lt;br /&gt;&lt;br /&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dKYKDpL5vqE/ScUBaE-RTdI/AAAAAAAAABM/PAm9coBg7X4/s1600-h/subscribeToGDJ.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 126px;" src="http://1.bp.blogspot.com/_dKYKDpL5vqE/ScUBaE-RTdI/AAAAAAAAABM/PAm9coBg7X4/s200/subscribeToGDJ.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5315656482703887826" /&gt;&lt;/a&gt;Click either of the links shown in the screenshot at left (click to enlarge) to subscribe to GDJ.  If you click the icon at the top (shown in IE7) you will be taken to the general feed page; the URL displayed at the top of the page can be copied into ANY feed reader of your choice.  Clicking either link shown near the bottom of the screenshot allows you to subscribe to the feed using a specific reader.&lt;br /&gt;&lt;br /&gt;

So now you know that anytime you see the orange feed icon above or see a link on a page that simply says "RSS", you can subscribe to keep up-to-date with that site.  My hope, of course, is that you will subscribe to GDJ and also provide some feedback!  I've found numerous game developer blogs with only a few posts or that are now defunct, so please feel free to offer your insights and help me stay motivated to post frequently.  If you have any questions, let me know with a comment and I will respond soon.&lt;br /&gt;&lt;br /&gt;

Until next time, happy (GDJ) reading! ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-7377755362569069722?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/7377755362569069722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/really-simple-devious-guide-to-rss.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/7377755362569069722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/7377755362569069722'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/really-simple-devious-guide-to-rss.html' title='A  Really Simple, Devious Guide to RSS'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_dKYKDpL5vqE/ScTz9Q-6CUI/AAAAAAAAAA8/wZLsfDGRvzA/s72-c/128px-Feed-icon.svg.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-3051858499476502472</id><published>2009-03-20T01:32:00.004-04:00</published><updated>2012-02-10T02:10:56.500-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Event'/><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><title type='text'>2009 Game Developers Conference</title><content type='html'>Hot Topic: This year's &lt;a href="http://www.gdconf.com/"&gt;Game Developers Conference&lt;/a&gt; (GDC09) is almost here!  Sadly, I don't have the time off nor the money to attend this year but would definitely like to go next year!  This year's conference will be held March 23-27 at the Moscone Center in San Francisco, California.  Check out the GDC website linked above for more information.  If you are going, you might want to use the online schedule builder to make sure you have an awesome, jam-packed week.  Also check out &lt;a href="http://gshonk.wordpress.com/"&gt;Grant Shonkwiler's tips&lt;/a&gt; to make sure you're ready and don't get burned out!&lt;br /&gt;&lt;br /&gt;

Are you going to GDC?  I know it's highly acclaimed for the educational presentations and great networking opportunities and would be interested in the impressions of anyone who has previously attended.&lt;br /&gt;&lt;br /&gt;

Also, are there any similar conferences closer to those of us living on the eastern-US border?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-3051858499476502472?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/3051858499476502472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/2009-game-developers-conference.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/3051858499476502472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/3051858499476502472'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/2009-game-developers-conference.html' title='2009 Game Developers Conference'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-4739951293753451620</id><published>2009-03-19T21:53:00.009-04:00</published><updated>2012-02-10T02:10:31.242-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Download'/><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><title type='text'>Introducing SkyCop v0.7</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_dKYKDpL5vqE/ScL3TsBNnEI/AAAAAAAAAAs/E-bKv3XiDks/s1600-h/ships.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 114px;" src="http://4.bp.blogspot.com/_dKYKDpL5vqE/ScL3TsBNnEI/AAAAAAAAAAs/E-bKv3XiDks/s200/ships.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5315082427856428098" /&gt;&lt;/a&gt;I think it's about time I introduce my pet project.  You'll be happy to note the screenshot to the left is not all there is to it, though it represents the base from which I started.  The project shown to the left comes directly from Engel's &lt;em&gt;Beginning Direct3D Game Programming&lt;/em&gt; book.  It features two ships, both capable of turning left/right, rolling left/right, pitching up/down, and moving forward and backward in three-dimensional space.  Even though Engel discusses basic texturing early on, I find it odd that he didn't include any simple textures for the ship objects, just coloring one yellow and the other red.  Leaving various enhancements to the reader is, of course, a challenge I willingly took head-on!&lt;br /&gt;&lt;br /&gt;

Part of why I never get to the later chapters in the book is because I very much enjoy enhancing this basic project.  I don't expect it to become a full-fledged game; it's primarily a demo project for my own experimentation, but only time will tell if it becomes something more.  The screenshot below displays my updated project, tentatively named &lt;em&gt;SkyCop&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;  

&lt;a href="http://3.bp.blogspot.com/_dKYKDpL5vqE/ScMWQSKUOMI/AAAAAAAAAA0/rflwzKNHvQI/s1600-h/skycop.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 208px;" src="http://3.bp.blogspot.com/_dKYKDpL5vqE/ScMWQSKUOMI/AAAAAAAAAA0/rflwzKNHvQI/s320/skycop.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5315116454236141762" /&gt;&lt;/a&gt;You'll notice from the screenshot the first thing I added was some fancy textures, not only for the ships but also to create a background (more on textures in another post). Additional enhancements include: multiple camera modes, dynamic background switching, multiple enemy ships, a pyramid-shaped target indicator (lower left), speed boost for the primary ship, and custom key configuration.&lt;br /&gt;&lt;br /&gt;

I plan to provide the code and running executable so you can download and play with it soon.  I'm open to constructive criticism, just try not to be too harsh.  I am still learning, after all ;)&lt;br /&gt;&lt;br /&gt;

Next up: Guns, Collisions, Explosions, oh my!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-4739951293753451620?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/4739951293753451620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/introducing-skycop-v07.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/4739951293753451620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/4739951293753451620'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/introducing-skycop-v07.html' title='Introducing SkyCop v0.7'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_dKYKDpL5vqE/ScL3TsBNnEI/AAAAAAAAAAs/E-bKv3XiDks/s72-c/ships.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-1504172331314699861</id><published>2009-03-17T18:25:00.004-04:00</published><updated>2012-02-10T02:09:05.125-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><title type='text'>Quick Tip: Ready, Fire, Aim!</title><content type='html'>I ran across &lt;a href="http://www.gamedev.net/reference/articles/article2570.asp"&gt;this article&lt;/a&gt; a few days ago titled &lt;em&gt;Start to Finish: Publishing a Commercial iPhone Game&lt;/em&gt; by Niklas Wahrman.  Interestingly, Niklas didn't initially develop his Asterope game for the iPhone.  It started as a project for a Google Android developer competition and he didn't win, but I like to think he's raking in the big bucks now that it's available in the iTunes Appstore.&lt;br /&gt;&lt;br /&gt;

I think the most important point he makes is for the independent developer to take a "Ready, Fire, Aim!" approach to development.  Simply put, don't over-plan, over-design, or over-engineer.  It's easy to get caught up in the design of the game engine, the layout of the world system, and minute details.  But getting bogged down in the design phase ("Ready, Aim, Aim, Aim..." as Niklas puts it) can be a major inhibitor to getting the job done.&lt;br /&gt;&lt;br /&gt;

I've also seen it mentioned in a couple different articles that getting the graphics nailed at the beginning, giving your early prototypes a polished look before working on gameplay mechanics, can be a big motivator to continue working on your game.  Food for thought.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-1504172331314699861?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/1504172331314699861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/quick-tip-ready-fire-aim.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/1504172331314699861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/1504172331314699861'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/quick-tip-ready-fire-aim.html' title='Quick Tip: Ready, Fire, Aim!'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-483556656348047275</id><published>2009-03-16T19:53:00.004-04:00</published><updated>2012-02-10T02:08:01.617-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Direct3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><title type='text'>OOP &amp; Vertex Buffers</title><content type='html'>In my previous post, I listed some minor issues I had with the book &lt;em&gt;Beginning Direct3D Game Programming, 2nd Edition&lt;/em&gt;.  And I have another one: the book &lt;strong&gt;does not teach good class-based design&lt;/strong&gt;.  Admittedly it's hard to blame the author though -- he has a lot of material to cover and is trying to illustrate core concepts without bogging us down in extraneous code.&lt;br /&gt;&lt;br /&gt;

However, realizing that my simple flight simulator needed a CShip class, I dutifully created one to encapsulate the required functions (InitDeviceObjects, RestoreDeviceObjects, InvalidateDeviceObjects, etc.) of the Common Files Framework. I thought it pretty slick that I could simply call &lt;span style="font-family: Courier New"&gt;m_MyShip-&gt;Render()&lt;/span&gt; inside my application class' Render method, and I didn't have a problem with my custom ship class having it's own vertex buffer until I read Bubba's post (#9) on &lt;a href="http://cboard.cprogramming.com/showthread.php?t=61570"&gt;this forum&lt;/a&gt;.  Although I certainly am leery about taking coding advice from a guy named "Bubba", I'm curious about his comment that "The renderer should draw all objects from one vertex buffer."&lt;br /&gt;&lt;br /&gt;

Understandably, if I have multiple ships with the same geometry it is somewhat wasteful to use multiple vertex buffers (one in each ship instance, used by its Render method).  So which way is best?&lt;br /&gt;&lt;br /&gt;

It may be time for me to invest in a "best practices of game development" book.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-483556656348047275?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/483556656348047275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/oop-vertex-buffers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/483556656348047275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/483556656348047275'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/oop-vertex-buffers.html' title='OOP &amp; Vertex Buffers'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-4963653074779222076</id><published>2009-03-16T18:28:00.009-04:00</published><updated>2012-02-10T02:06:14.368-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Direct3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><title type='text'>Book Report: Beginning Direct3D Game Programming, 2nd Edition</title><content type='html'>&lt;span style="float:left"&gt;&lt;a href="http://www.amazon.com/Beginning-Direct3D-Game-Programming-Second/dp/193184139X/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1237244115&amp;sr=8-1"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 166px; height: 208px;" src="http://3.bp.blogspot.com/_dKYKDpL5vqE/Sb7ZKmasoNI/AAAAAAAAAAk/3AbrqkNPSus/s320/GameBook.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5313923386478207186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font: 8pt Arial"&gt;Courtesy: Amazon&lt;/span&gt;&lt;/span&gt;I've been reading Wolfgang Engel's &lt;em&gt;Beginning Direct3D Game Programming, 2nd Edition&lt;/em&gt; for quite some time now.  And by that, I mean I've made numerous attempts at reading it over the past couple years.  I diligently read through the first six chapters, as I have yet again quite recently, and inevitably get hung up on the texturing concepts in the later chapters.  Part of my problem is that there is quite a bit of material covered and I like to try &lt;b&gt;every example&lt;/b&gt; in code.  I'm thinking I will put in less effort coding and focus more on the concepts for this read through so I can actually finish the book this time ;)&lt;br /&gt;&lt;br /&gt;

For the most part, I'm happy with what I've learned from this book.  Wolfgang does a great job of getting the reader up to speed with the development environment and provides the necessary DirectX 9 SDK and other tools on an included CD.  He provides a good overview of the history (DirectX version 2 thru 9) and concepts (HAL, COM, shading and texture mapping) in the first few chapters and then moves on to the more interesting concepts involved in 3-dimensional rendering: axes, vertices, matrix and quaternion rotations, etc.  Chapter six is a heavy but highly valuable chapter on the basics of animation in three dimensions and provides you with a framework for creating your own flight simulator.  I have of course written my own derivative, which I hope to post for your enjoyment soon.&lt;br /&gt;&lt;br /&gt;

As much as I enjoy this book, I do take issue with it on some points.  Firstly, I believe a large number of mistakes slipped into the book.  For example, if the author indicates that matrix values must be entered row-wise, the code sample should do the same; these kind of minor errors have caused me to scratch my head more than once.  Secondly, the author tends to explain some concepts with assumed knowledge instead of explaining everything in detail for the student who is "beginning Direct3D game programming."  Minor issues aside, I think this book is a great reference and look forward to the upcoming texture-mapping and HLSL (High-Level Shader Language) programming chapters.&lt;br /&gt;&lt;br /&gt;
 
If you've read this book, let me know what you thought of it.  Also post a comment to let me know your favorite Direct3D books.  I want to learn as much as I can and could use some good references!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-4963653074779222076?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/4963653074779222076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/courtesy-amazon-ive-been-reading.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/4963653074779222076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/4963653074779222076'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/courtesy-amazon-ive-been-reading.html' title='Book Report: Beginning Direct3D Game Programming, 2nd Edition'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dKYKDpL5vqE/Sb7ZKmasoNI/AAAAAAAAAAk/3AbrqkNPSus/s72-c/GameBook.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-6318480831495384339</id><published>2009-03-15T19:40:00.006-04:00</published><updated>2012-02-10T02:04:46.191-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lesson'/><category scheme='http://www.blogger.com/atom/ns#' term='Process'/><category scheme='http://www.blogger.com/atom/ns#' term='Motivation'/><title type='text'>Inspiration</title><content type='html'>GameDev.net recently linked to &lt;a href="http://www.gamecareerguide.com/features/710/learning_to_become_a_game_.php"&gt;this Game Career Guide interview&lt;/a&gt; with Jean-Francois Lévesque, describing his path toward becoming a Game Developer at Ubisoft Montreal in Canada.  This post is one of a few leading to my recent fervor to work harder to break into the field.  As I read the interview, I kept saying to myself "check, check, got that... I can totally DO THIS!!!"&lt;br /&gt;&lt;br /&gt;

I'd like to summarize what I believe were his most important insights and define where I am with each:
&lt;ul&gt;
&lt;li&gt;Learn the English language. -&gt; Check!&lt;/li&gt;
&lt;li&gt;Have a plan. Read as much as you can on game development and work on your own games/projects in your spare time. -&gt; Check!&lt;/li&gt;
&lt;li&gt;Have at least one complete personal project to show to potential employers. -&gt; I'm still working on this one.&lt;/li&gt;
&lt;li&gt;Use personal projects to test different rendering techniques and programming methods. Continue learning and be competent enough to explain design decisions. -&gt; I'm working on this one too.&lt;/li&gt;
&lt;li&gt;Expect rejection in the beginning.  It may take a couple times, more college courses, or simply meeting the right people to succeed. -&gt; This might be tough!&lt;/li&gt;
&lt;li&gt;Be willing to step up and ask for more challenges/responsibilities once you do get hired. -&gt; This is me!&lt;/li&gt;
&lt;li&gt;If you start getting in over your head once you land the job, seek help and learn from your co-workers. -&gt; No problem.&lt;/li&gt;
&lt;li&gt;Be prepared for a personal component AND technical test at your interview. Be passionate about what you do! -&gt; I plan to keep learning as much as I can to improve my technical competency, but I know I can easily show my desire to work on games!&lt;/li&gt;
&lt;li&gt;Have a personal website so employers can learn more about you. -&gt; Check!&lt;/li&gt;
&lt;li&gt;Start networking! Attend job fairs and gaming conferences, participate in video game-related forums, and do everything you can to make new contacts in the field. -&gt; I need to work on this one.&lt;/li&gt;
&lt;/ul&gt;

Clearly I have my work cut out for me, but I definitely believe it is possible.  I plan to keep checking this list to see how I'm progressing.  In the meantime, for those of you with game development experience, what pointers might YOU add to this list???  I know this blog is new and won't have many readers yet, but please add your comments even if this post is a couple years old by the time you find it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-6318480831495384339?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/6318480831495384339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/inspiration.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6318480831495384339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/6318480831495384339'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/inspiration.html' title='Inspiration'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8180452695906918671.post-1758425288292652540</id><published>2009-03-14T22:52:00.004-04:00</published><updated>2012-02-10T02:03:36.891-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Motivation'/><title type='text'>About Me</title><content type='html'>Welcome to my Game Developer Journey blog!&lt;br /&gt;&lt;br /&gt;

My name is Jeromie Walters, and I promise this is the only personal post you will ever see on this blog. Having held a long-time bias that many blogs simply disseminate unwanted TMI, this is a huge step for me. Having started the discipline of reading blogs related to the field of software development, particulary Jeff Atwood's &lt;a href="http://www.codinghorror.com/blog/"&gt;Coding Horror&lt;/a&gt; and certain others I will add to my links section soon, I've come to learn that some blogs can be of great informational value and hope that this one will do the same. Jeff and others have convinced me that I should &lt;a href="http://www.codinghorror.com/blog/archives/000983.html"&gt;just start writing&lt;/a&gt;. Obviously my personal opinions will be expressed on topics related to game development, but my promise is that there will be no posts simply stating what I had for lunch.&lt;br /&gt;&lt;br /&gt;

Who am I? I am a software developer for a small engineering company in Ohio. I graduated from The University of Akron with a Master's Degree in Computer Science and truly enjoy the art of programming. Of course, I got into it with the idea of writing games but eventually learned that I couldn't translate my general software development knowledge into game creation. At my current job, I work on a large web application that helps companies manage their business. It's a great company to work for and I get to use the latest and greatest web technologies, but I still feel like something is missing.&lt;br /&gt;&lt;br /&gt;

I believe my passion is game development. I love to work on something and get to SEE something visibly change on the screen! It's such an amazing rush to work on something and see your creation come to life. I took a couple (sadly underwhelming) graphics courses in college and have spent some time learning Direct3D on my own, especially recently.&lt;br /&gt;&lt;br /&gt;

I've always been a highly-motivated, goal- and detail-oriented person and I figure if &lt;a href="http://www.twittershouldhireme.com/"&gt;this person&lt;/a&gt; can use a blog to try to get a better job, why can't I? I don't expect the game development companies to come knocking quickly (though that would be great!), but even if this blog helps me to just capture my own progress and have a chance to learn from others' experiences (please comment!), it will have been a success. I believe the Internet is an amazing tool for knowledge sharing and hope you will enjoy following my journey to become a true Game Developer!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8180452695906918671-1758425288292652540?l=gamedeveloperjourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gamedeveloperjourney.blogspot.com/feeds/1758425288292652540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/about-me.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/1758425288292652540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8180452695906918671/posts/default/1758425288292652540'/><link rel='alternate' type='text/html' href='http://gamedeveloperjourney.blogspot.com/2009/03/about-me.html' title='About Me'/><author><name>JW</name><uri>http://www.blogger.com/profile/13248318534942408752</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_dKYKDpL5vqE/Sc8LGxSLqOI/AAAAAAAAACo/JxSyWZJtJVc/S220/profile3.jpg'/></author><thr:total>0</thr:total></entry></feed>
