<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Tutorials</title>
        <link>http://geekswithblogs.net/CodeBlog/category/10139.aspx</link>
        <description>Tutorials about various things (typically programming)</description>
        <language>en-US</language>
        <copyright>Matthew Christian</copyright>
        <managingEditor>matt@insidegamer.org</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Unreal Tournament 3 vs UDK: What Should I Choose?</title>
            <link>http://geekswithblogs.net/CodeBlog/archive/2010/03/12/unreal-tournament-3-vs-udk-what-should-i-choose.aspx</link>
            <description>&lt;p&gt;Many people in the mod community were very excited to see the release of the Unreal Developer Kit (UDK) a few months ago.  Along with generating excitement into a very dedicated community, it also introduced many new modders into a flourishing area of indie-development.  However, since UDK is free, most beginners jump right into UDK, which is OK though you might just benefit more from purchasing a shelf-copy of Unreal Tournament 3.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium"&gt;UDK&lt;/span&gt;&lt;br /&gt;
UDK is a free full version of UnrealEd (the editor environment used to create games like Gears of War 1/2, Bioshock 1/2, and of course Unreal Tournament 3).  The editor gives you all the features of the editor from the shelf-copy of the game plus some refinements in many of the tools.  (One of the first things you'll find about UnrealEd is that it's a collection of tools grouped into the same editor so it really isn't a single 'tool')&lt;/p&gt;
&lt;p&gt;Interestingly enough, Epic is allowing you to sell any game made in UDK with a few catches.  First off, you must purchase a liscense for your game (which, I &lt;em&gt;THINK&lt;/em&gt; is aproximately $99 starting).  Secondly, you must pay 25% of all profits for the first $5,000 of your game revenue to them (about $1250).  Finally, you cannot use any of the 'media' provided in UDK for your game.  UDK provides sample meshes, textures, materials, sounds, and other sample pieces of media pulled (mostly) from Unreal Tournament 3.&lt;/p&gt;
&lt;p&gt;The final point here will really determine whether you should use UDK.  There is a very small amount of media provided in UDK for someone to go in and begin creating levels without first developing your own meshes, textures, and other media.  Sure, you can slap together a few unique levels, though you will end up finding yourself restriced to the same items over and over and over.  This is absolutely how professional game development is; you are 'given' (typically liscensed or built in-house) an engine/editor and you begin creating all the content for the game and placing it.  UDK is aimed toward those who really want to build their game content from scratch with a currently existing engine.  It is &lt;strong&gt;not&lt;/strong&gt; suited for someone who would like to simply build levels and quick mods without learning external 3D programs and image editing software.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium"&gt;Unreal Tournament 3&lt;/span&gt;&lt;br /&gt;
Unless you have a serious grudge against FPS's, Epic, or your computer sucks, there really is no reason not to own this game for PC.  You can pick it up on Steam or Amazon for around $20 brand new.  Not only are you provided with a full single-player and multiplayer game, but you are given the entire UnrealEd 3.0 including all of the content used to build UT3.  If you want to start building levels and mods quickly for UT3, you should absolutely pick up a shelf-copy.&lt;/p&gt;
&lt;p&gt;However, as off-the-shelf UT3 is a few years old now, the tools have not been updated for quite a while.  Compared to UDK, the menus are more difficult to navigate through and take more time getting used to.  Since UDK is updated almost every month, there are new inclusions to the editor that may not be in UT3 (including the future addition of 3D!).  I haven't worked enough with shelf UT3 to see if there are more features in UDK or if they both feature the same stuff in different forms, however you should remember that the Unreal Engine 3.0 has undergone numerous upgrades between it's launch and Gears of War 2 (in fact, Epic had a conference to show off what changed just between the Gears of Wars games).&lt;/p&gt;
&lt;p&gt;Since UT3 has much more core content, someone who wants to focus on level editing or modding the core UT3 game may find their needs better suited with an off-the-shelf copy of UT3.  If that level designer has a team that is generating custom assets, they may be better off with UDK.&lt;/p&gt;
&lt;p&gt;The choice is now yours...&lt;/p&gt; &lt;img src="http://geekswithblogs.net/CodeBlog/aggbug/138489.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matt Christian</dc:creator>
            <guid>http://geekswithblogs.net/CodeBlog/archive/2010/03/12/unreal-tournament-3-vs-udk-what-should-i-choose.aspx</guid>
            <pubDate>Fri, 12 Mar 2010 14:23:19 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/CodeBlog/comments/138489.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/CodeBlog/archive/2010/03/12/unreal-tournament-3-vs-udk-what-should-i-choose.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/CodeBlog/comments/commentRss/138489.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Unreal Engine Tip: Room Surroundings</title>
            <link>http://geekswithblogs.net/CodeBlog/archive/2010/03/01/unreal-engine-tip-room-surroundings.aspx</link>
            <description>&lt;p&gt;Here's a quick tip that you can add to your map to make it much more realistic and make the player "Oooo" and "Aaahh"!&lt;/p&gt;
&lt;p&gt;When building a map or environment, consider adding areas the player can see but not go to.  This gives your map a feeling of depth and that it is a location inside of a larger world and not a predefined layout.&lt;/p&gt;
&lt;p&gt;For example, my current map, DM-Grime, is set within a dark, dingy basement.  After I built my walls, added some static meshes, and tossed in a few lights the map was looking decent, however I wanted to give it a bit of a 'destroyed' or 'decayed' look.  In the corner of an inner wall (between the wall and the ceiling) I added a rectangle subtraction brush and split the edges of it a few times.  Manipulating the generated vertices up and down gave the wall the look it had been broken apart.&lt;/p&gt;
&lt;p&gt;To add to this, I used a subtraction brush to generate a similar hole in the ceiling.  At this point, a hole in my ceiling was looking up into an empty void since my level was shaped like a giant rectangle.  I added a small room above the hole (just big enough to cover the hole).  I textured the room with some basic textures and threw in a door for effect.  To contrast the lighting in my level, which mostly consisted of yellowish ambient light, I added a bright red light to shine down which brings the player's attention to that spot.&lt;/p&gt;
&lt;p&gt;I used 4 simple meshes to accent the destroyed area.  From the Content Browser I picked up the I-beam mesh and added two of them.  Where the two met, I rotated them downwards, giving the look they had bent down.  Second, I added a generic pipe mesh and bent that down as well (though at a different angle).  Third, I added a mesh that consisted of 3 smaller pipes and bent those around and down as well.  Lastly, I added a crate that is nestled between the first broken pipe and the I-beam.&lt;/p&gt;
&lt;p&gt;To make the destruction more apparent, I found some rock piles and broken tiles (my ceiling is made of tiles) and tossed them around on the ground.  Finally, each corner of the room was held up by a pillar so for the destroyed corner I added a broken stone pillar and rotated it as if it had been knocked loose but was still standing.&lt;/p&gt;
&lt;p&gt;I'll post some before/after photos of the area, happy mapping!&lt;/p&gt; &lt;img src="http://geekswithblogs.net/CodeBlog/aggbug/138250.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matt Christian</dc:creator>
            <guid>http://geekswithblogs.net/CodeBlog/archive/2010/03/01/unreal-engine-tip-room-surroundings.aspx</guid>
            <pubDate>Mon, 01 Mar 2010 10:12:01 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/CodeBlog/comments/138250.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/CodeBlog/archive/2010/03/01/unreal-engine-tip-room-surroundings.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/CodeBlog/comments/commentRss/138250.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Game Trick: Randomizing Colors</title>
            <link>http://geekswithblogs.net/CodeBlog/archive/2010/01/06/game-trick-randomizing-colors.aspx</link>
            <description>&lt;p&gt;A cool trick to add to your game is to randomize a color and slowly fade to that color during gameplay.  This can be used as the draw color for sprites, the screen background, or anything else that takes a Color.  The code is pretty easy and only takes a few minutes to implement.&lt;/p&gt;
&lt;p&gt;First, lets create a two variables; one to hold the new randomized color and one to hold the current color that is fading:&lt;/p&gt;
&lt;p&gt;    Color futureColor = Color.CornflowerBlue;&lt;br /&gt;
    Color currentColor = Color.CornflowerBlue;&lt;/p&gt;
&lt;p&gt;We'll set it to a default of the traditional CornflowerBlue.  Next, we need to create a random variable and randomize the Red, Green, and Blue components of our color:&lt;/p&gt;
&lt;p&gt;    Random rand = new Random();&lt;br /&gt;
    if (futureColor != currentColor)&lt;br /&gt;
    {&lt;br /&gt;
        futureColor = new Color(rand.Next(255), rand.Next(255), rand.Next(255));&lt;br /&gt;
    }&lt;/p&gt;
&lt;p&gt;We also check before changing the future color since we only want to fade if they are the same color.  Finally, you'll want to change the current color a little each time you update:&lt;/p&gt;
&lt;p&gt;    if (currentColor.R != futureColor.R)&lt;br /&gt;
    {&lt;br /&gt;
        if (futureColor.R &amp;gt; currentColor.R)&lt;br /&gt;
        {&lt;br /&gt;
            currentColor.R += 1;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            currentColor.R -= 1;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;/p&gt;
&lt;p&gt;This is the code for the Red component.  To update the entire color, you'll need two more sections similar to this for the green (Color.G) and blue (Color.B) components.  Experiment with the amount you increment and with how you randomize the numbers for more interesting effects.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/CodeBlog/aggbug/137371.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matt Christian</dc:creator>
            <guid>http://geekswithblogs.net/CodeBlog/archive/2010/01/06/game-trick-randomizing-colors.aspx</guid>
            <pubDate>Wed, 06 Jan 2010 16:13:05 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/CodeBlog/comments/137371.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/CodeBlog/archive/2010/01/06/game-trick-randomizing-colors.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/CodeBlog/comments/commentRss/137371.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Learn XNA: Useful Types</title>
            <link>http://geekswithblogs.net/CodeBlog/archive/2009/11/11/learn-xna-useful-types.aspx</link>
            <description>&lt;p&gt;There are numerous useful types available in XNA that will significantly help you design and build your next game.  Here are two of the most useful (in my opinion) and how you can use them in your game (I will focus on mostly 2-dimensional uses).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vectors&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Vectors are amazing!  They are seriously, probably one of the coolest types on the block, especially when taking into account that they are used for almost everything in games.  The most common forms of Vectors used in XNA are the Vector2 and the Vector3, which are defined as:&lt;/p&gt;
&lt;p&gt;    Vector2(float X, float Y)&lt;br /&gt;
    Vector3(float X, float Y, float Z)&lt;/p&gt;
&lt;p&gt;Also useful, is Vector4 which is similar to a Vector3, but adds a float W parameter on the end.  Vector's are obviously useful anytime you need a small array of floats for any reason (movement speeds, health of 2-4 characters, etc...)  The most practical and useful application of Vectors however is all the mathematical properties they work with.  They are awesome for a quick matrix v. vector multiplication (primarily used in 3D), and are great in 2D for specifying a movement direction, position, and even a scale amount!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rectangle&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Rectangle's are an interesting type.  It took me years before I understood how to effectively utilize the Rectangle type.  There are lots of functions that take Rectangle's as parameters and the sooner you use them, the better your code will look.  There is a default empty definition for a Rectangle, but the most useful in my mind is:&lt;/p&gt;
&lt;p&gt;    Rectangle(int X, int Y, int Width, int Height)&lt;/p&gt;
&lt;p&gt;The X,Y coordinates are the X- and Y-coordinates for the left and the top edges of the rectangle, respectively.  This essentially defines the upper left corner of the rectangle.  The Width and Height obviously, determine the width and height.  Now that you have Rectangle's being used, you can use them to store global variables useful for determining screen size, specifying the source rectangle from a content file, or useful as a bounding box for collision detection.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/CodeBlog/aggbug/136218.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matt Christian</dc:creator>
            <guid>http://geekswithblogs.net/CodeBlog/archive/2009/11/11/learn-xna-useful-types.aspx</guid>
            <pubDate>Wed, 11 Nov 2009 14:05:52 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/CodeBlog/comments/136218.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/CodeBlog/archive/2009/11/11/learn-xna-useful-types.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/CodeBlog/comments/commentRss/136218.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Development Diary: Pong RPG</title>
            <link>http://geekswithblogs.net/CodeBlog/archive/2009/11/06/development-diary-pong-rpg.aspx</link>
            <description>&lt;p&gt;I have been hard at work recently porting Pong RPG from a PC-only XNA game to an Xbox 360 game in the hopes of potentially releasing it on the Xbox Indie Games Marketplace.  Pong RPG (PC) was a great success in my mind because even though it was flawed, it was a full game product that I created from scratch (almost all by myself) since my days in High School (which was when I first created a full game).  While it was great to finish the game, the code was extremely difficult to read and very static.  I learned a lot from finishing that game and have been applying the recently learned techniques to every project since then.  So now that I'm porting the game to Xbox, what exactly goes into porting bad code?&lt;/p&gt;
&lt;p&gt;I have been fully re-designing all the code from scratch, essentially rewriting the whole game.  The nice thing though is all the time I spent painfully positioning each sprite on the screen is already done since I'm using the old code as a reference (all my screen positions, rotations, scalings, etc... are there for me).  At home I currently have a 32" plasma HDTV.  When I first created Pong, I built the entire game using a square window and now that I'm in HD, I need to update my old artwork that was built for that screen size (for example, a 1024x768 piece of art with a 1.0 scaling factor won't fill a 1280x720.  Thankfully most of the artwork is finished and only requires updates to shape it correctly and to swap out PC-specific art with Xbox-specific art.&lt;/p&gt;
&lt;p&gt;How has the code been cleaned up?  Almost all of the Sprite loading, storing, and rendering is handled by generic classes allowing me to re-use them in future projects.  Here's the setup (class names may differ from my real code):  there is a ContentProcessor class that parses '.LFI' files (simple .TXT files with a different extension standing for '&lt;strong&gt;L&lt;/strong&gt;oad &lt;strong&gt;FI&lt;/strong&gt;le').  Each line of the Load File defines either a SpriteSheet or a Sprite.  A SpriteSheet is a single PNG file containing one or multiple pieces of artwork within.  In Pong RPG (PC) every single sprite had it's own file and required a Content.Load&amp;lt;Texture2D&amp;gt;() call.  The SpriteSheet load file commands simply specify a load file to process.  &lt;/p&gt;
&lt;p&gt;The Content Processor then takes the PNG file defined by the Sprite Sheet command and loads it into a TexturePool.  A TexturePool is a class that inherits from List&amp;lt;Asset&amp;gt;.  Asset is a custom struct that only holds two properties about a specific game asset: the Texture (Texture2D), and the Name (String).  Here is the definition for the Load() function of the ContentProcessor class:&lt;/p&gt;
&lt;p&gt;    public void ContentProcessor.Load(String fileToLoad, ref TexturePool textures, ref SpritePool sprites)&lt;/p&gt;
&lt;p&gt;Obviously the first defines which LoadFile to load.  The second parameter, textures, defines where to store the Assets loaded by the ContentProcessor.  We'll talk about the SpritePool stuff in a little while.  As a side note, ContentProcessor is defined as a static class so we pass the TexturePool and SpritePool variables by reference to avoid requiring the programmer to create an instance of this class.&lt;/p&gt;
&lt;p&gt;So ContentProcessor begins parsing the Load File and hits a SpriteSheet command (which should always be first since it's impossible to load a sprite without a related PNG file).  Let's assume we're loading MainMenu.lfi (the Load File for the main menu) and there are 2 PNG's we need to load.  We would have 2 load commands similar to the following:&lt;/p&gt;
&lt;p&gt;    SpriteSheet, Sprites\MainMenu\MenuBG&lt;br /&gt;
    SpriteSheet, Sprites\MainMenu\MenuItems&lt;/p&gt;
&lt;p&gt;In our case, MenuBG is a PNG with artwork that takes up the entire file, and MenuItems is a collection of pieces of art placed around in the file.  After ContentProcessor parses these lines, our TexturePool variable should be populated with 2 items named MenuBG, and MenuItems (the name defaults to the filename).  &lt;/p&gt;
&lt;p&gt;Unfortunately that won't be entirely helpful since that only defines the textures and not which parts of them to draw.  This is where Sprites come in and are extremely handy.  After the first SpriteSheet command to load the MenuBG PNG file, we will call a Sprite command to tell the processor to load a sprite and place it in the supplied SpritePool.  SpritePool is similar to TexturePool in that it inherits from the List class, however SpritePool inherits from List&amp;lt;Sprite&amp;gt;.  Sprite is a custom class that holds information about the positioning, rotation, scale, boundingbox, and the source rectangle we use to pull from the SpriteSheets previously loaded.  Here's an example of a Sprite ContentProcessor command:&lt;/p&gt;
&lt;p&gt;    Sprite, MenuBG, M-BG, CENTER, CENTER, 0, 1.0, 1.0, 0.1, true, 0, 0, WIDTH, HEIGHT&lt;/p&gt;
&lt;p&gt;This looks very cryptic but is really easy to understand.  All it does is define what the ContentProcessor should load, how it should load, and where it should place it.  Here is the definition of this command:&lt;/p&gt;
&lt;p&gt;    Type, SpriteSheet Name, Sprite Name, Screen X-Position, Screen Y-Position, Rotation, ScaleX, ScaleY, Layer, Visible, SourceX, SourceY, Source Width, Source Height&lt;/p&gt;
&lt;p&gt;The only commands there that may throw you off are the last four containing Source ____.  When you create a new Rectangle in XNA it requires 4 parameters: the left side X-coord, the top Y-coord, the width, and the height.  Essentially, the first two parameters define the upper left corner of the Rectangle.  In our load command, things like CENTER, CENTER, WIDTH, HEIGHT, etc... are simply built in commands that define certain things about how to load it.&lt;/p&gt;
&lt;p&gt;We will see more of this in a future code example with a more detailed tutorial!&lt;/p&gt; &lt;img src="http://geekswithblogs.net/CodeBlog/aggbug/136066.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matt Christian</dc:creator>
            <guid>http://geekswithblogs.net/CodeBlog/archive/2009/11/06/development-diary-pong-rpg.aspx</guid>
            <pubDate>Fri, 06 Nov 2009 11:31:55 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/CodeBlog/comments/136066.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/CodeBlog/archive/2009/11/06/development-diary-pong-rpg.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/CodeBlog/comments/commentRss/136066.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Learn XNA: Starting Development</title>
            <link>http://geekswithblogs.net/CodeBlog/archive/2009/11/04/learn-xna-starting-development.aspx</link>
            <description>&lt;p&gt;Game development is a great career but we all can't be the next John Carmack.  And let's be honest, even though you've got a great resume and a smashing portfolio, the odds are slim you'll get that coveted game programmer job.  To sharpen your skills and expand your portfolio why not take a look at Microsoft's XNA Game Studio?&lt;/p&gt;
&lt;p&gt;XNA Game Studio is a library built on top of the DirectX framework to ease game development for students and hobbyists while still providing enough flexibility to create games with the quality of some AAA-titles.  As an added 'bonus', XNA developers can build games for the Xbox 360, distribute the game via the Xbox Live Marketplace, and even profit from their creations.  All in due time young padawan, first you must crawl before you walk....&lt;/p&gt;
&lt;p&gt;To get started, you'll need some software on your PC.  The first is Microsoft's Visual Studio.  Preferably 2008, XNA used to run in Visual Studio 2005 and will probably support 2010 in the near future.  Now of course buying Visual Studio would be the best bet considering the quality of the product, but for a whopping $620 (Amazon.com) a lot of us can't afford it.  Luckily, there are a few (legal) alternative methods of acquiring the software.  If you are a student, you may be able to score a free ISO copy of Visual Studio 2008 Professional from Microsoft's &lt;a href="https://www.dreamspark.com/default.aspx"&gt;Dreamspark Website&lt;/a&gt;.  Dreamspark is a resource to provide free Microsoft technologies and software to students.  For the rest of us, Microsoft has generously released slimmed-down versions of the Visual Studio products at their Express products website.  XNA utilizes C# so for the Express products you should grab &lt;a href="http://www.microsoft.com/express/vcsharp/"&gt;Visual C# 2008 Express Edition&lt;/a&gt;.  Make sure, after you get your respective (legal) copy of the Visual Studio C# editor, that you also make sure you have the latest Service Packs and updates installed.&lt;/p&gt;
&lt;p&gt;Next, you need to download and install XNA Game Studio 3.1 (the latest release of the XNA framework).  You can find the download link for XNA GS 3.1 and the aforementioned Visual C# 2008 Express Edition at the &lt;a href="http://creators.xna.com/en-US/downloads"&gt;Creator's Club website&lt;/a&gt;.  Creator's Club is the definitive website for XNA development and your first (and best, in my opinion) resource for XNA development.  The website features tutorials, examples, and starter kits (pre-built games for you to modify), and I can't reccomend it enough!  Check the Resources at the end of this article for some other great websites for you to check out.&lt;/p&gt;
&lt;p&gt;As for required software, this is generally all you need to start developing XNA games.  However, if you want to develop for the Xbox 360 console, you'll need to sign-up for a premium membership which costs $49 for 3 months or $99 for a year.  If you are a lucky Dreamspark student, you can grab a free trial membership from Dreamspark.  While the trial will allow you to develop and deploy games to your Xbox console, you will need to purchase a paid membership before you are allowed to submit games for sale on the Xbox Marketplace.  We will go into the process for submitting a game for sale in a future article.&lt;/p&gt;
&lt;p&gt;If you are planning on providing all the artwork for your game as well, you will need some kind of image software.  While Photoshop is one amazing program, it can cost between $200-$700 for the latest version.  There is, however, a free program online called &lt;a href="http://www.gimp.org/"&gt;Gimp&lt;/a&gt; which should be a bit better than your old MSPaint.&lt;/p&gt;
&lt;p&gt;By this point you should have stopped reading and started tinkering with all your new software.  The best part?  We have a quality programming environment, a library that supports easy game development, and a full fledged art program for FREE.  You have all the tools to get you started, and this is exactly what Microsoft wanted.  Oh no, we've fallen into a Microsoft trap!!!  Don't fret, this was Microsoft's intention with XNA and it works to our benefit.&lt;/p&gt;
&lt;p&gt;I've held your hand a bit during this first article, handing you links and fancy instructions on everything you need.  While the instructions (and maybe the links) will continue in the future, I'm going to go forward assuming you have a familiarity with the C# language.  There are tons of resources online for C# development, and hundreds of books on the subject.  I will be focusing more on techniques used for game development and the XNA framework rather than introducing you to programming.  Now go experiment with XNA you little John Carmack you!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Web Resources:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.microsoft.com/exPress/"&gt;Microsoft Visual 2008 Express Editions&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://www.dreamspark.com/default.aspx"&gt;Microsoft Dreamspark&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://creators.xna.com"&gt;XNA Creator's Club&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.gimp.org/"&gt;Gimp Image Editor&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;XNA Resources:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ziggyware.com"&gt;Ziggyware&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.xnadevelopment.com"&gt;XNA Development&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.InsideGamer.org/XNATutorials.aspx"&gt;XNA Development Tutorials&lt;/a&gt; (my old tutorials)&lt;br /&gt;
&lt;a href="http://www.xnaresources.com"&gt;XNA Resources&lt;/a&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/CodeBlog/aggbug/135997.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matt Christian</dc:creator>
            <guid>http://geekswithblogs.net/CodeBlog/archive/2009/11/04/learn-xna-starting-development.aspx</guid>
            <pubDate>Wed, 04 Nov 2009 13:34:27 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/CodeBlog/comments/135997.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/CodeBlog/archive/2009/11/04/learn-xna-starting-development.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/CodeBlog/comments/commentRss/135997.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Intro to SVN: Trunk, Tags, and Branches</title>
            <link>http://geekswithblogs.net/CodeBlog/archive/2009/09/30/intro-to-svn-trunk-tags-and-branches.aspx</link>
            <description>&lt;p&gt;Subversion (SVN) is a popular tool used by many development teams as their primary way of versioning their code.  Here are some of the basics to SVN.&lt;/p&gt;
&lt;p&gt;Possibly one of SVN's best aspects is the ability to work on a shared code base.  This shared code base is called the &lt;strong&gt;Trunk&lt;/strong&gt;.  This is typically where the full, buildable code resides.  It may depend on your team, but this code may be the code you work on daily and commit to.&lt;/p&gt;
&lt;p&gt;This leads into the idea of commits and updates.  To illustrate this, let's imagine that you started a small project and had a decent amount of code developed by yourself.  Recently, you've added members to your team and need to provide that code as the shared base (the Trunk).  You've got yourself a server and through the advances in technology have SVN pre-installed and waiting to grab your code.  After opening up your IDE of choice, you would create a Trunk based of the code you have on your machine.  The code you have on your harddrive that is not shared is called your &lt;strong&gt;Local Version&lt;/strong&gt;, or &lt;strong&gt;Working Version&lt;/strong&gt;.  SVN happily creates a Trunk and is ready to give your team the base code.  Now, your team will perform an &lt;strong&gt;Update &lt;/strong&gt;to grab the latest version of the code.  An &lt;strong&gt;Update&lt;/strong&gt; will bring the latest code from the repository to your Local Version.  After that point, your team is able to work on their code on their own machines and work on different parts of the project.  Each person will work on different files and have to submit their changes to the Trunk to create a new, updated version of the code base.  To &lt;strong&gt;Commit&lt;/strong&gt;, is the process of uploading your local changes to the code base to use the newly written code.  When you created the trunk, you Commited your local 'changes' (the change was from nothing to your project) to the Trunk.&lt;/p&gt;
&lt;p&gt;Commits and Updates are wonderful, but lead to a major issue.  Let's assume two team members are working on the same file, HelloWorld.txt.  Both team members come into work and grab the latest copy of that file within minutes and begin working on it.  Team Member 1 types the words 'I Love SVN!' into the file and Commits the file.  Meanwhile, Team Member 2 types the words, 'SVN Rules!' into the file and tries to Commit the file.  Suddenly we've hit a snag because Team Member 2 wants to put his changes into the base code but hasn't Updated since Team Member 1 commited his file.  This problem of being 'out-of-sync' is resolved via a process known as a &lt;strong&gt;Merge&lt;/strong&gt;.  A &lt;strong&gt;Merge&lt;/strong&gt; is when a developer looks at the changes to his/her Local Version of a file and the changes made to a Trunk file that hasn't been Updated on the Local Version, and fixes the synchronization issue by ammending the code to include both updates or one of the updates.  Here are Team Member 2's possible merge solutions:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Override and Update: In this case, the Local Version of the file is discarded and the Trunk code overwrites everything.  HelloWorld.txt would contain the text 'I Love SVN!' from Team Member 1, but not the text 'SVN Rules!' from Team Member 2.&lt;/li&gt;
    &lt;li&gt;Override and Commit: This is similar to Override and Update, but the Trunk code is overwritten with the Local Version.  HelloWorld.txt would &lt;strong&gt;not&lt;/strong&gt; contain the text 'I Love SVN!' from Team Member 1, but would contain the text 'SVN Rules!' from Team Member 2.&lt;/li&gt;
    &lt;li&gt;Merge Changes: In this solution, both changes are merged into Team Member 2's Local Version and (s)he is able to commit the file and overwrite the Trunk file.  HelloWorld.txt would contain both pieces of text from Team Member 1 and Team Member 2.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;During the process of Commiting, Updating, and Merging, the code base can change quite drastically.  As they teach in most computer classes, backing up your data is key to continuing a project without major losses.  SVN handily provides a way to backup your code via &lt;strong&gt;Tags&lt;/strong&gt;.  A &lt;strong&gt;Tag&lt;/strong&gt; is a snapshot of your code at a given time.  It is similar to a Trunk but it is assumed a Tag will not change in the future.  This is useful if a situation arises where it is necessary to revert your code base to a prior state.  In larger environments, Tags are created with each build.&lt;/p&gt;
&lt;p&gt;Many projects typically require temporary code written during development in order to test specific issues without a fully functioning product.  Here's an example, assume that project we talked about earlier needs to test a function that calculates the amount of times a number can be divided by 2.  In the final product, that value will be provided by an external system, but currently this system is not implemented.  The plan is to develop a temporary text field that will accept a value and run the function.  In the final product, there will be only a label with the value in it, not a text box.  From what we've been told about SVN up to this point, we would go into the base code, insert our temporary field, and test the function.  This is somewhat practical with a single field, but now let's assume there are 100 fields like this.  Obviously, it would be a massive headache to Update, write the changes, Commit, and in the future have to Update, revert the changes, and Commit.  Sure you could use a Tag, but why create a backup of code that is temporary?  &lt;/p&gt;
&lt;p&gt;Introducing &lt;strong&gt;Branches&lt;/strong&gt;, a seperate Trunk-style project used for work on a project similar to this.    If this team hires a new developer and wants to slowly introduce him to the project but doesn't want him developing on the Trunk, what can they do?  Create a Branch for him/her to work on!  Branches can be created from existing code bases, including the Trunk and Tags.  Even better, you can Merge between a Branch and the Trunk to bring in changes from the temporary project that need to be implemented into the code base.&lt;/p&gt;
&lt;p&gt;This is a lot of information, and is really basic when talking about SVN, but very helpful when someone asks you, "Are we going to make a Tag of the Branch before Merging into the Trunk?"  Now, go say that to everyone you meet and see if they know their SVN.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/CodeBlog/aggbug/135191.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matt Christian</dc:creator>
            <guid>http://geekswithblogs.net/CodeBlog/archive/2009/09/30/intro-to-svn-trunk-tags-and-branches.aspx</guid>
            <pubDate>Wed, 30 Sep 2009 09:59:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/CodeBlog/comments/135191.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/CodeBlog/archive/2009/09/30/intro-to-svn-trunk-tags-and-branches.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/CodeBlog/comments/commentRss/135191.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Intro to Scrum Development</title>
            <link>http://geekswithblogs.net/CodeBlog/archive/2009/05/28/intro-to-scrum-development.aspx</link>
            <description>&lt;p&gt;Recently I read a portion of a good book ('Agile Software Development with Scrum' by Ken Schwaber with Mike Beedle).  I read this book in order to understand the Agile/Scrum development style used at my new workplace.  I took a course last semester in which we used a Scrum development style based on the input given by a student who worked where I've just started and while we seemed to grasp the idea of Scrum, we had it often incorrect according to the book.  This is some of the basics of what I learned in the few chapters I read (no infringement intended!).  Everything is in my own words (I don't even have the book anymore).&lt;/p&gt;
&lt;h3&gt;What is Scrum?&lt;/h3&gt;
&lt;p&gt;Scrum, in the sense I'll be talking about, is a development style of the 'agile' type.  Agile development is a method of developing software iteratively, meaning you take your project, chop it up into pieces, and work on the pieces until the whole project is complete.&lt;/p&gt;
&lt;p&gt;How does Scrum add onto Agile development?  Scrum has multiple user roles defined with it and a specific technique for processing those 'pieces' of your project.  Essentially, Scrum creates a bottleneck (in a good way!) between management and the development team in order to keep the development team focused on the current piece of work.  For understanding, let's use the idea that your whole project is the engine of your car (or some vehicle).  We'll build on this idea throughout this post.&lt;/p&gt;
&lt;h3&gt;Roles in Scrum Development&lt;/h3&gt;
&lt;p&gt;In Scrum development, the development team, is called the &lt;strong&gt;Scrum team&lt;/strong&gt; or just &lt;strong&gt;team&lt;/strong&gt;.  Pretty simple, huh?  The Scrum team is comprised of those in the workplace that focus on the development portion of the project.  These include (but aren't limited to) engineers and designers.  Anyone who will have to take an assignment and produce some kind of output directly effecting the project.  (Note: In my description, directly effecting the project means something like a concept drawing, a demo build, code, etc...  More on this in a bit.)  In Scrum development a team of about 5-8 is used though if the team is too large, it becomes difficult to manage.  If the team is too small, the work (which we'll talk about in a bit) probably won't be distributed or managed well enough between them.  In our car symbolism, think of the &lt;strong&gt;scrum team as the pistons of the engine&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Product Owner&lt;/strong&gt; or &lt;strong&gt;Project Owner&lt;/strong&gt; is the person at the head of the project, typically a project lead.  The Project Owner should be a single person (not a team) for reasons we'll discuss later about work (suspense!).  This person will delegate the work to the rest of the team.  This introduces the idea of the &lt;strong&gt;Sprint Backlog&lt;/strong&gt;.  The backlog is a large topic, so we'll come back to the Product Owner after discussing the workflow of Scrum development.&lt;/p&gt;
&lt;h3&gt;Scrum Development Work-Flow&lt;/h3&gt;
&lt;p&gt;Remember all those times you've been working on a project (in a non-Scrum team) and someone walks up to you and says, "Could you do me a favor and add this feature?"  You know in your mind that by accepting that person you'll be adding more to your workload and thus increasing your development time.  Depending on when you start that feature-add, it could potentially increase the development time of whatever you were working on before your 'friend' came over and disturbed you.  Not only does this make you less productive (being productive is a matter of quality, time taken, and other factors) but it could even lead you to the dreaded feature creep (something no project EVER wants!).&lt;/p&gt;
&lt;p&gt;Scrum prevents this situation by creating a bottleneck (mentioned earlier) between you (the developer) and your feature-needing friend.  Again, this bottleneck isn't a bad thing, it's in place to make your life easier by making you more productive.  When a request for a feature is needed, the request is dropped into the &lt;strong&gt;Sprint Backlog&lt;/strong&gt;, a list of all the features and work needed to be done before the project is finished.  This can include bugs, new features, or changes to currently existing features.  Before going on, what is this sprint thing?  &lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;Sprint&lt;/strong&gt; is a period of time the Scrum Team takes to work on a chunk of items that were placed in that backlog.  Typically a Sprint is 30 days (about a month).  A month typically is a long enough time to do a good amount of development but short enough that if time is spent during that month on a feature that gets scrapped, the time isn't 'wasted' time (since it was still used on the project and knowledge is gained).  Notice I mentioned a 'chunk' of the backlog.  This ties back to the idea of working on pieces of your project.  So, the Sprint Backlog contains all the work needed to be done on the project and during each Sprint, the Scrum Team selects a portion of the backlog (NOT the whole backlog) to work on.  In our engine idea, &lt;strong&gt;the Sprint Backlog is the fuel tank, holding the future fuel to be processed&lt;/strong&gt;.  Thinking at a higher-level, &lt;strong&gt;the Sprint is the time is takes to process a portion of that fuel&lt;/strong&gt;.  And finally, &lt;strong&gt;the 'bottleneck' holding back the fuel is the fuel-injection valve&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;Roles in Scrum Development (cont'd)&lt;/h3&gt;
&lt;p&gt;Each item placed in the Sprint Backlog will typically have a different priority than any other item in the backlog.  This is where the Project Owner comes back in.  One of their primary roles in Scrum development is managing the Sprint Backlog.  They should be labelling each item in the backlog as well as giving each a priority so the team knows when to work on each.  Prior to each Sprint, the Project Owner and Scrum Team will meet in a &lt;strong&gt;Sprint Planning Meeting&lt;/strong&gt; to determine which work from the backlog will be worked on during that Sprint.  The Project Owner will say "I want this, this, and this done."  And the Team will reply, "Well we can finish this and this during the Sprint."  This defines the work that will be done in the future Sprint.  Isn't it cool that the Team decides what to work on, instead of management?!&lt;/p&gt;
&lt;p&gt;There is one more large player in Scrum development even though the system seems complete.  The &lt;strong&gt;Scrum Master&lt;/strong&gt; focuses on, well, keeping the team focused on the task at hand.  Recall earlier I described the situation in which you as a developer are approached to put in a quick feature as a favor.  From everything about Scrum that's been discussed, there is nothing to prevent that situation from happening once again.  Sure, we can hope that all work gets put through the Sprint Backlog, but how can we be certain?  This is the primary role of the Scrum Master.  He/She makes sure the team is on task and following the work for the current Sprint.  The Scrum Master accomplishes this tasks by typically having daily &lt;strong&gt;Scrums&lt;/strong&gt;, a short 15-minute meeting where each person in the Scrum Team describes what they're working on.&lt;/p&gt;
&lt;p&gt;To keep Scrums on topic, there are numerous things a Scrum Master will do to control the group including limiting the speaking participants to only those on the team (i.e. NO interrupting, suggesting non-teammates like management).  One of the biggest ways to keep topic in a Scrum meeting is to only answer 3 key questions:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;What have you done since our last Scrum meeting? &lt;/li&gt;
    &lt;li&gt;What are you going to do before the next meeting? &lt;/li&gt;
    &lt;li&gt;What is preventing you from completing your plan? &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Obviously, if your friend stops by, asks for that favor, and you start working on it, it'll come up in the meeting and the Scrum Master has the task of putting you back on the Sprint work and stopping by your friends office for a little 'chat' about distractions.  Essentially, Scrum Masters play the 'bodyguard' for the project by protecting the team from distraction.  In our engine example, &lt;strong&gt;the Scrum Master is the metal housing the pistons, engine, and other items related to the engine&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;So that, in a nutshell, is Agile development with Scrum.  It probably seems like a lot of info but there really are only 3 primary roles.  And the benefits are amazing!  They give power to the team to control their work, not upper-upper management.  If all this sounds interesting I'd consider grabbing a copy of that book, 'Agile Software Development with Scrum' by Ken Schwaber with Mike Beedle.  They go into much more detail about their personal struggles with project teams and how Scrum development evolved.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/CodeBlog/aggbug/132476.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matt Christian</dc:creator>
            <guid>http://geekswithblogs.net/CodeBlog/archive/2009/05/28/intro-to-scrum-development.aspx</guid>
            <pubDate>Thu, 28 May 2009 19:38:45 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/CodeBlog/comments/132476.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/CodeBlog/archive/2009/05/28/intro-to-scrum-development.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/CodeBlog/comments/commentRss/132476.aspx</wfw:commentRss>
        </item>
        <item>
            <title>XNA Links</title>
            <link>http://geekswithblogs.net/CodeBlog/archive/2009/04/06/xna-links.aspx</link>
            <description>Here are some of the links I mentioned the other day during my TCCC 6 presentation:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://creators.xna.com/"&gt;Creators Club&lt;/a&gt; - XNA's main creator website where you can find tutorials, examples, starter kits, and great forums!&lt;br /&gt;
&lt;a href="https://www.dreamspark.com/default.aspx"&gt;Dreamspark&lt;/a&gt; - Free software for registered students (free Creators Club trial account!)&lt;br /&gt;
&lt;a href="http://www.ziggyware.com"&gt;Ziggyware&lt;/a&gt; - Great collection of tutorials and links!&lt;br /&gt;
&lt;a href="http://www.twincitiesxnausergroup.com"&gt;Twin Cities XNA User Group&lt;/a&gt; - A great local group dedicated to presenting information on XNA.&lt;br /&gt;
&lt;a href="http://www.garagegames.com/products/consoles"&gt;Torque X&lt;/a&gt; - An 'editor' that can be used with XNA (I think it's free if you actually pay for your creators subscription)&lt;br /&gt;
&lt;br /&gt;
There are probably a few more I'm forgetting and I'll see if I can remember them before I post the slides and code. &lt;img src="http://geekswithblogs.net/CodeBlog/aggbug/130779.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matt Christian</dc:creator>
            <guid>http://geekswithblogs.net/CodeBlog/archive/2009/04/06/xna-links.aspx</guid>
            <pubDate>Mon, 06 Apr 2009 17:56:28 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/CodeBlog/comments/130779.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/CodeBlog/archive/2009/04/06/xna-links.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/CodeBlog/comments/commentRss/130779.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Loading From a Different Directory (C++ / DirectX)</title>
            <link>http://geekswithblogs.net/CodeBlog/archive/2008/10/21/loading-from-a-different-directory.aspx</link>
            <description>I've been struggling with this for probably the better part of a year and I feel it needs a bit of documentation.  The problem is that in my past demos I needed all my model and texture files in the same location as the EXE because I didn't know how to read from a different directory.  When loading something like a model, what you first do is store the current directory the computer is looking in (which is the base EXE directory).  Then you can switch the directory (locally) and read that in.  Then, when finished loading and doing whatever else you need, you can reset the directory to the original directory.  Here's a code snippet used to store the current directory and set it to a subfolder:&lt;br /&gt;
&lt;br /&gt;
&lt;link href="file:///C:%5CDOCUME%7E1%5CMatt%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" rel="File-List" /&gt;
&lt;link href="file:///C:%5CDOCUME%7E1%5CMatt%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" rel="themeData" /&gt;
&lt;link href="file:///C:%5CDOCUME%7E1%5CMatt%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" rel="colorSchemeMapping" /&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 
  Normal
  0
  
  
  
  
  false
  false
  false
  
  EN-US
  X-NONE
  X-NONE
  
   
   
   
   
   
   
   
   
   
   
   
  
  MicrosoftInternetExplorer4
  
   
   
   
   
   
   
   
   
   
   
   
  
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;![endif]--&gt;&lt;style type="text/css"&gt;&lt;!--
 /* Font Definitions */
 @font-face
	{"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{
	panose-1:2 15 5 2 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{
	mso-style-parent:"";
	margin-top:0in;
	margin-right:0in;
	margin-bottom:10.0pt;
	margin-left:0in;
	line-height:115%;
	font-size:11.0pt;"Calibri","sans-serif";
	mso-bidi-"Times New Roman";}
.MsoChpDefault
	{
	mso-bidi-"Times New Roman";}
.MsoPapDefault
	{
	margin-bottom:10.0pt;
	line-height:115%;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
	{page:Section1;}
--&gt;&lt;/style&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-style-parent:"";
	line-height:115%;
	font-size:11.0pt;"Calibri","sans-serif";
	mso-fareast-"Times New Roman";}
&lt;/style&gt;
&lt;![endif]--&gt;
&lt;div style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;      TCHAR Buffer[MAX_PATH];&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;      GetCurrentDirectory(MAX_PATH, Buffer);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt; &lt;/div&gt;
&lt;div style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;      std::string sData = &lt;span style="COLOR: rgb(163,21,21)"&gt;"data"&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt; &lt;/div&gt;
&lt;div style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;      SetCurrentDirectory(sData.c_str());&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
Now you can repeat the SetCurrentDirectory() call for any other sub folder you need to go into.  In this case it goes into a subfolder named 'data'.  Then after you're done doing whatever you need to do (load models, create files, etc...), you can call the following to restore to the directory you stored in Buffer:&lt;br /&gt;
&lt;br /&gt;
&lt;link href="file:///C:%5CDOCUME%7E1%5CMatt%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" rel="File-List" /&gt;
&lt;link href="file:///C:%5CDOCUME%7E1%5CMatt%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" rel="themeData" /&gt;
&lt;link href="file:///C:%5CDOCUME%7E1%5CMatt%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" rel="colorSchemeMapping" /&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 
  Normal
  0
  
  
  
  
  false
  false
  false
  
  EN-US
  X-NONE
  X-NONE
  
   
   
   
   
   
   
   
   
   
   
   
  
  MicrosoftInternetExplorer4
  
   
   
   
   
   
   
   
   
   
   
   
  
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;![endif]--&gt;&lt;style type="text/css"&gt;&lt;!--
 /* Font Definitions */
 @font-face
	{"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{
	panose-1:2 15 5 2 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{
	mso-style-parent:"";
	margin-top:0in;
	margin-right:0in;
	margin-bottom:10.0pt;
	margin-left:0in;
	line-height:115%;
	font-size:11.0pt;"Calibri","sans-serif";
	mso-bidi-"Times New Roman";}
.MsoChpDefault
	{
	mso-bidi-"Times New Roman";}
.MsoPapDefault
	{
	margin-bottom:10.0pt;
	line-height:115%;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
	{page:Section1;}
--&gt;&lt;/style&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-style-parent:"";
	line-height:115%;
	font-size:11.0pt;"Calibri","sans-serif";
	mso-fareast-"Times New Roman";}
&lt;/style&gt;
&lt;![endif]--&gt;
&lt;div style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;      SetCurrentDirectory(Buffer);&lt;/span&gt;&lt;/div&gt; &lt;img src="http://geekswithblogs.net/CodeBlog/aggbug/125981.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matt Christian</dc:creator>
            <guid>http://geekswithblogs.net/CodeBlog/archive/2008/10/21/loading-from-a-different-directory.aspx</guid>
            <pubDate>Tue, 21 Oct 2008 21:16:51 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/CodeBlog/comments/125981.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/CodeBlog/archive/2008/10/21/loading-from-a-different-directory.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/CodeBlog/comments/commentRss/125981.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>
