Categories

Navigation

MVP

Microsoft MVP (since 2006) in the XNA/DirectX category

Tag cloud

Ajax (8) All (206) Arena Wars (21) Boo (4) BroodWar (8) Conferences (1) Development (44) Game Development (142) IronPython (3) Lost Squadron (17) Lua (6) meinSport.de (4) Other (150) Polynapping (12) Programming (156) Racing Game (7) Reviews (76) Rocket Commander (49) Silverlight (10) SQL (1) StudiHelp.de (2) XNA (40)

On this page

My day at the CeBIT 2008
All XNA Games converted to XNA 2.0 from Rocket Commander to the Racing Game.
Pics from my new office in Hamburg
Converting XNA 1.0 Projects to XNA 2.0
German: Arbeitsbedingungen in der Spielebranche
Fixing the 'Could not load file or assembly 'xunit, Version=7.10.25.1028'' error
What to do if you receive the System.Runtime. InteropServices.COMException error in Visual Studio
XNA 2.0 released
Videos about Web 2.0 and Santa Claus
XNA Game Studio 2.0 beta is now available
Visual Studio 2008 and .NET 3.5 released
Silverlight 1.0 Final Released
Searching for a C#/ASP.NET Programmer for meinSport.de
Lots of Information about XNA 2.0
CoDe Magazine: Microsoft XNA: Ready for Prime Time?
Migrating from Silverlight 1.1 alpha to 1.1 alpha refresh and that lovely AG_E_RUNTIME_ HTML_ACCESS_RESTRICTED error
Silverlight 1.0 RC and 1.1 Alpha Refresh released
VS 2008 and .NET 3.5 Beta 2 Released
Silverlight Error Codes Explained!
Xna Project Changer Tool (with VS 2008 support)
RegionAddin to fix collapsing and expanding regions in Orcas and IronPython region support!
MVP again!
FX Composer 2!
CodeRush has now VS Orcas support
Tools 2007: Using VS Orcas, Multiple monitors, FreeMind, SourceGear Vault, OnTime, Screenshot Captor and StarCraft II
Article in Wired about Dungeon Quest from the GDC 2007
Silverlight and I spotted A Racing Game Mod: Cyber Car
My XNA book is out and XnaProjects.Net launches
Impressions from the CeBIT 2007
The Dungeon Quest Game
Rest of GDC Pics
GDC 2007 - Dungeon Quest - Day 1
San Francisco Day 1
The GDC (Game Developers Conference) 2007 in San Francisco
Skeletal Bone Animation and Skinning with Collada Models in XNA
Welcome to my new blog
XNA News
XNA Shooter Game
Your Christmas Present: Rocket Commander XNA
German developer price: Deutscher Entwicklerpreis 2006 - Pics
XNA Game Studio 1.0 released
Canyon Commander Mod for Rocket Commander released!
New Visual Studio Technologies
That leaked XNA Racer Video on YouTube
Bye Seattle, Back to Germany!
Seattle Day 5 - Another rainy day
Seattle Day 4 - From a tourist point of view
Seattle Day 3 - XNA Presentations and Meeting ZMan and Jason Olson
Seattle Day 2 - Second day at Microsoft
Seattle Day 1 and XNA Video and Canyon Commander
Seattle Day 0
Flying to the USA to visit the XNA Team
XNA Game Studio Express Beta 2 released
Long time, no see
Quick Tips for XNA Beta 1 (aka My Own XNA FAQ)
XNA Game Studio Express Beta1 Released
More pics from the GC 2006
Games Convention 2006 in Leipzig Germany - Day 4
Games Convention 2006 in Leipzig Germany - Day 3
Games Convention 2006 in Leipzig Germany - Day 2
Games Convention 2006 in Leipzig Germany - Day 1
Windows XP x64 Experiences
Top 10 Most Useful Tools
Working with DLinq, Linq and Xml
And another Mod: Virus Commander, this time made by a player
Article in german dot.net magazine
DirectX June2006 and testing Vista Beta 2
Having fun with C# 3.0 (LinQ CTP May 2006) and CR_Commenter v1.6 Update
Playing around with Atlas and Google Maps
Gamestar/dev 2006-03 Title Story
Links for the Webcasts
Doxygen rulez!
Freifunk-Hannover
DirectX SDK April 2006 and Quo Vadis conference pics
CeBIT 2006 Pictures
The year 2005 - Reviews of Games, Movies, Software and Programming Books

Archive

Popular

NormalMapCompressor v1...
CR_Commenter v1.7 Upda...
Reminder: Rocket Comma...
Your Christmas Present...
CR_Commenter Update v1...
The year 2005 - Review...
Seattle Day 3 - XNA Pr...
NormalMapCompressor - ...
Zombie Quest - A new f...
Cool tools
My Bookmarks
CeBIT 2006 Pictures

Blogroll

Projects

Arena Wars (2004)

Rocket Commander (2006)

Pizza Commander (2006)

Rocket Racer (2006)

Coop Commander (2006)

Flower Commander (2006)

Fruit Commander (2006)

Euro Vernichter (2003)

Lost Squadron (2005)

Zombie Quest (very simple 2D Adventure, 2006)

Freifunk Hannover project (GoogleMaps support)

Older projects (2000 and earlier)

MeinSport.de - German Sport Community Site

About

About me: Contact

Send mail to the author(s) Email:

Total Posts: 213
This Year: 0
This Month: 0
This Week: 0
Comments: 434
Made with

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

RSS 2.0 | Atom 1.0 | CDF

My brothers

netfreak.de

mirkman.de

Sign In

 Saturday, March 08, 2008
Saturday, March 08, 2008 10:55:37 PM UTC (  |  |  |  )
Sorry about all the delay, I wrote 4 blog posts already in this week, but did not finish them up (was always too tired to post them). I will post them in the next few days. Instead this blog post is just about today.

The day started with the Community GetTogether Event from Microsoft on the CeBIT, where all the MVPs, CLIP, RDs, Student Partners, Codezone-Experts and Microsoft Evengelists from Germany met. Last year I could not attend the CeBIT or the Community GetTogether in Germany because I was on the GDC 2007 in San Francisco and wrote the GDC Dungeon Quest game there ^^

The first session was about Internet Explorer 8 Beta 1. Download it here if you want to try it out, it got some nice features for developers and other things like Activities and Webslices, which sound nice, but you will have to wait until more websites actually support them. The browser does not convince me yet. Maybe the presentation was not that great, many webpages did not look ok and the browser crashed several times, it also looks pretty much the same as IE7. I'm still using Firefox 2 (and 3 for playing around a bit) a lot more than any other browser, especially thanks to great addons like FireBug.

Anyway, after another session about Students in Germany and their lack of .NET knowledge and other things like how many do wash their clothes themselfs, the nice girl in front of me from Microsoft reminded me to take some photos myself :) Got ya, haha.


In between the sessions I met with my good friend Luo Yu (see photo, he is an amazing graphic artist and works with me on a couple of projects) and an ex-intern of mine Stefan Kraus from BiteTheBytes.com (see website link for more information, no photo here ^^). Stefan is involved in some interesting projects, some smaller games and especially his Cloddy Technology, which was created by him and 2 other friends to render huge 3D landscape areas with high performance in a unlimited amount of detail (well, after asking what that means it turns out it is limited by doubles ^^).


I sat through another session of the GetTogether Event, this time by my good old compadre Dirk Primbs about Visual Studio 2008. He has a lot of webcasts links on his blog, check it out if you want to see some german sessions :) Otherwise you should definately check out the Mix08 Session Videos from Las Vegas, I find the Video with the fake Elvis asking people about Silverlight 2.0 the funniest.

After some networking and meeting Microsoft people I joined with the other guys and walked through some CeBIT halls. Nothing special about the halls or people, it was very packed as always on Saturdays.


And as you can see here, if you look into this absolutely normal looking device and put these absolutely non-freaky glasses on, you can see some non-ugly animated figure telling waving at you in 3D. But beware, after a minute you might get some headaches and you have of course keep your head still and only look from a certain angle and distance. Man, when do they ever stop producing this bullshit? It is always the same kind of device in the last 10 years and no one buys it or really wants it.


Ok, here we see one of the exhibitors of the Games Convention 2008 throwing some stuff into the crowd .. wait a second, we are not on the Games Convention yet, this is still the CeBIT, but ok, it is Saturday and the people do not care where the presents are coming from. Fun to watch as always, and we have to ignore the fact that 10 years ago I was one of those guys too wanting to get a free ball pen I would never use.


These guys are building a freaking looking robot and have certainly not seen the new Terminator series yet. They are actually from the TU Chemnitz (a university) and it was a tournament where the robots had to play a game with tennis balls to catch some rings and score some points. Not as brutal as the Robot Wars (tv series), but certainly amazing work from students and a lot of participants. Nice athmosphere building and testing these robots by the way, there were many tables like this.


And here we see one of the teams testing their robot. And you can see me not having any useful camera, the robot was not even moving fast ^^ I should buy some better equipment for the next event I go to (next one will probably be the MVP Summit in a month).


Ok, we are back to the throwing useless stuff into crowd part!


And this is the huge booth of the T-Com/Telekom (together with IBM and SAP one of the biggest and best looking booths) where a lot of sessions were hold in the so called "Trendforum". You can watch all the videos from the CeBIT Trendforum here, some of the sessions are in english and the speakers are very good and have some interesting topics. I did not watch any of them there, but once my brother told me about it and gave me the link I watched some videos and were very pleased with them, especially the one from Nicholas Carr (author of book The Big Switch) about the changes in moving from local servers to a "world computer".


Big cars and small womans (that is what Luo told me as I took this picture) should also be on all fairs. Do we remember where this was? No, not really!


The Samsung booth was also very big, but I could not spot any new exciting big monitors. But there were a lot of small devices, headsets, mp3 players and other stuff that does not really interest me that much these days. I'm currently in the "I got all I need"-mode :)


And here you can see the plan of one of my new cities, just that is not by me and in fact some big company in Asia planing a new city part this way. Looks nice (is about 50cm x 50cm small).


This was really strange. We went on the Microsoft booth and just behind all the Xboxes and games there was a bakery. You could actually get some biscuits and bread after filling out a form about some IT questions.


And while we are on the Microsoft booth we thought about the question if Bill Gates might need some extra money to become the richest man on the world again after losing his first place the first time after 13 years this week. Maybe all Microsoft employees should start collecting some money for Bill :) This nice lady was trying to convince people to get active in the Microsoft Student Partner program, but I guess I'm already too old (oh my).


And here you can see me sitting down for a minute and happy that we can go home soon (hey, I'm a programmer sitting around all day, I'm not used to walking that much) :)


But we are not done yet, let take a look at this IBM server with 64 hard disks up to 500 GB, in total something like 30 TB storage space. You can even stack up (well, not on top of each other, just side by side in a big room) 6 of those beasts if that is not enough for you. But as we have learned from the webcast from Nicholas Carr above we won't need that much power in the future, just use the servers that are already in the internet. Other than that these things are not really cheap, I prefer building my own server setup.


In hall 18 there was a really loud band singing "Sex Bomb" and they actually did a good job. After spending some minutes there our ears almost explode and we went outside to cool off. Poor guys spending all those days in that booth (Trekstor actually, hey I remembered something).


And finally the ride back in a train full of people. We even took an early train, I do not want to know how full the later trains have been. Ok, time to finish up my other blog posts. I hope you enjoyed these pictures.
 Monday, February 11, 2008
Monday, February 11, 2008 11:48:36 PM UTC (  |  |  |  |  |  |  |  |  )
Even when I did not post much last week I was very busy converting all the old XNA 1.0 games to XNA 2.0. I did not only convert all projects (8 games in total, see below), but I also tested them extensively on Windows XP, Vista (32 and 64 bit) and the Xbox 360. Additionally a lot of usability improvements have been implemented in the games, for example the XNA Shooter is now much easier (was almost impossible to even reach 50% of the level) and a lot more fun due better balancing. The XNA Racing Game has now a better physic engine and will not longer let the car fly out of the track or leave ground in loopings. Due the better input control and fixed physics the cars drive now much faster and it is more challenging to complete the tracks in shorter time frames.

Games in this article:
Please read my previous post about Converting XNA 1.0 games to XNA 2.0 for all technical tips. All the games can also be found on http://XnaProjects.net, but I will also make them easier accessible on this blog soon, which has an update overdue (need to clean up the left and right sides) ^^

Thanks to the great VS2005 support of XNA 2.0 all games have now just one single solution file, which works on Windows and the Xbox 360. The projects can be opened in XNA Game Studio 2.0 and Visual Studio 2005 without having to convert the files over and over again like in the past. The Icons for all games were also improved. Lets take a look at the Icons (.ico files) on Windows:


For the Xbox 360 game icons the .png files (usually named GameThumbnail.png) are used:


Ok, let's take a look at the games and what has changed for them. Most games are pretty much the same as for XNA 1.0, but a lot of smaller bugs were fixed and they have been tested more.

  • Chapter1Game: This application is not really a game, but a test project to check out if XNA 2.0 is properly working on both Windows and the Xbox 360. It is from the first chapter of my book "Professional XNA Game Programming". BTW: The second edition of the book is coming out soon, there are 3 more chapters about Multiplayer game programming and a cool new role playing game.

  • Xna Pong: Xna Pong is a simple clone of the favorite pong game from 1978. It is just a few hunderd lines of code and should be very easy to understand.

    This game is from the book "Professional XNA Game Programming" by Benjamin Nitschke. For more information read chapter 2. (2008-02-10: Now updated to XNA 2.0)

  • Xna Breakout: XNA Breakout is a simple Breakout/Arcanoid game based on the XNA Pong game from the previous chapter.

    It is fully described and covered in Chapter 3 of my book "Professional XNA Game Programming". The code is quite short and should be easy to understand. (2008-02-10: Now updated to XNA 2.0)

  • Xna Tetris: This is a simple, but highly addictive Tetris game. You can control the blocks with your cursor keys, aswd or a game pad and the game works both on Windows and the Xbox 360. Reaching levels above 5 is really hard. My highest level was 9, try to reach more :) (2008-02-10: Now updated to XNA 2.0)

    This game introduces the helper classes (chapter 4 of my book) and makes more use of unit testing and game components in XNA.

  • Rocket Commander Xna: XNA port of the famous Rocket Commander game. The game principle stayed the same, but the controls were a little bit simplified to make it more fun on the Xbox 360.

    If you want to learn more about the Rocket Commander game, check out its official website www.RocketCommander.com and check out the Video Tutorials on Coding4Fun by MSDN. (2008-02-10: Now updated to XNA 2.0, also supports very big resolutions now and runs faster on the Xbox 360)

  • Xna Shooter: Shoot'n'up game specifically created for my book "Professional XNA Game Programming". It features full HDTV support, runs on Windows and the Xbox 360, 5 weapon types, 5 enemy types, a powerful ship and some power ups. It is quite fun to play and it gets harder and harder the longer you play. Based partly on the Rocket Commander XNA engine, but also features lots of new effects and shaders. (2008-02-10: Now updated to XNA 2.0, also much easier and balanced)

    This game and the racing game are the most improved. The game works now much better in high resolutions and on the Xbox 360. But most importantly the game is now much easier, balanced and more fun. Additionally a level percentage is now visible on the bottom and more EMP bombs can be picked up to make it easier at the end of the level.
  • Xna Racing Game: XNA Racing Game Starter Kit I wrote for http://creators.xna.com. More information and more downloads can be found on http://XnaRacingGame.com. It runs best on the Xbox 360 in HDTV (1920x1200), but it also runs fine on the PC. (2008-02-10: Now updated to XNA 2.0, driving also improved a lot, better tested on Xbox 360 and fixed some issues).

    Following things were improved: Shadow mapping on very big resolutions works now (crashed before), more options for lower quality settings, fixed physics, car now always stays on the road, fixed loopings, cars are much faster now, winning conditions work better now, and fixed several other bugs.
  • Dungeon Quest GDC: And finally the Dungeon Quest XNA Game, which was developed in just 4 days on the GDC 2007 at the XNA Contest. Dungeon Quest GDC is a relatively complex 3D role playing game (at least for just 4 days of work). An early version even supported coop multiplayer on the Xbox 360 via splitscreen. The game was developed by Benjamin Nitschke (abi.exDream.com) and Christoph Rienaecker (WAII). (2008-02-10: Now updated to XNA 2.0). This is NOT the full Dungeon Quest game (see www.DungeonQuestGame.com for that), this is just the GDC version.

    Please note that the level was reduced to allow loading on the Xbox 360 (which otherwise crashes with an OutOfMemoryException), the game is not fully playable, only the first part is implemented. You can also press F2 to toggle the Options menu and some minor bugs were fixed. But this game is no longer supported, I will not improve it anymore! Please check out the new Dungeon Quest game from www.DungeonQuestGame.com, which is coming in a month or so.
Have fun with all the games :)
 Friday, February 01, 2008
Friday, February 01, 2008 4:50:16 PM UTC (  |  |  |  |  )
As I briefly mentioned before one of my companies (realis communities) moved to Hamburg and we got a nice new office directly at the Alster sea in the city.

Here are a few pictures to give you an impression. We work here for a few weeks now and are now setteled in.


This is my desk, as you can see, there are a "few" monitors there (and all of them quite big, ranging from 24 to 19 inch). I mainly look at the big 24" in the middle, but also use the other two. On the left side is my laptop, it is not always there, but it is useful from time to time if I need another PC for testing something. But even with this large space (I control everything with 1 keyboard and mouse via the program Synergy), I still have so many overlapping windows. After reading this article (Joining The Prestigious Three Monitor Club) from Jeff Atwood at CodingHorror.com I thought the more space you have the less overlapping windows you should have. But it is more like the more space you have, the more programs you have opened up :) I still use Switcher quite a lot to find the program windows again.


Ok, back to the office, this is one of the other rooms where most of my colleagues sit, currently most of them are away shooting some new video for meinSport TV. They are all nice guys, but you know, no programmers, do I have to say more?


Then there is finally the view out of the window, its still winter, but all that water from the Alster is comforting.

Next I will shoot some photos of my setup at home (more PCs, less monitors, but big ones ^^). I hope this does not bore you.
Friday, February 01, 2008 12:32:32 AM UTC (  |  |  |  |  |  |  |  |  )

When I wrote this (a little bit each day while working on converting the old XNA projects) I was very aware about the disappointment of my blog readers about the fact that I did not blog much in the last couple of months, especially on XNA. I not only got a lot of emails about that, but also quite a lot of questions, especially since XNA 2.0 was released. I made yet another promise to myself to change that and finally blog more, maybe not only when something very interesting pops up, but instead about the everyday issues I run into.

Some Notes about XNA 2.0: More solid, lots of little new features, networking, while it may not be a very complete solution, at least it is now possible on the Xbox 360 and overall I have the feeling even more people are interested in XNA than a year ago. Plus the guys at the XNA Team doing a great job and are constantly improving the XNA Creators Club website for us game programmers and artists :)


Several people had problems using the old XNA 1.0 code of my games and make them work with XNA 2.0, so here is a little help in case you want to convert XNA 1.0 projects to XNA 2.0. You will also notice this if you go to any XNA community site as most samples will still be in XNA 1.0 and not work out of the box in XNA 2.0, and many of those will probably never be changed since they are not longer actively being developed.

For most games almost all of the code can stay unchanged, you just have to poke at a few things that have changed in the framework or were improved. More information about converting projects can be found here (read this first, this article is based on the stuff there). You can also use the Cross-Platform Game Project Converter from XNA 2.0 to add a Xbox 360 project to your existing Windows XNA project without having to create a separate project (it is helpful, but I used pretty much the same trick for all of my XNA 1.0 games anyway).

Let's go through the steps:

  1. Either use the XNA project conversion utility (can be found on the XNA Creators Club website) or just create a new XNA 2.0 project in VS 2005.

  2. If you created a new project, drag all source code files into the project and seperate the content files out and put them all in the existing Content directory (only there the content pipeline is activated). If you just converted a project and the content files did not move, move them yourself to the content directory. Gladly all my projects with more than 5 content files had a special content directory anyway, so no need to change anything content-wise for them. If you don't want some of the files to be compiled to .xnb files, you have to change the build action from "compile" to "content" (and then use the "copy to output directory" switch) or to "none" if you want them to be ignored like for .wav files, which are automatically processed by the .xct (XACT) file for you.

  3. Find the line content = new ContentManager(Services); and replace it with Content.RootDirectory = "Content";. If you do that, get rid of the content manager in your game class since you can now use the build-in Content property to access the underlying Game content manager. In case you don't want to do that or if you need an extra variable, replace the above line with content = new ContentManager(Services, "Content");. Both ways will make sure all the content is now loaded from the content directory instead from the main directory of the application. In more complex XNA games you can also change the BaseGameDirectory to the content directory, but then you would also have to move all other resource files to this directory (config files, save games, levels, etc.). It is usually a good idea to separate the compiled (.xnb) content from the content the user can change (config, levels, etc.), so I suggest just redirecting the content directory of the content manager.

  4. Replace the LoadGraphicsContent(bool) method with LoadContent, remove all the if (loadAllContent) commands (was never false anyway, just let the content of the if loop stay) and also remove the call to base.LoadGraphicsContent(bool) (does not do anything like all the Load or Unload methods in the XNA Game class, they are just empty virtual methods). You can also ignore this and the next step since it will only generate depreciated warnings, but I suggest cleaning up your source code whenever an opportunity like this presents itself. I also added some missing region blocks to the code and some comments here and there were they were missing.

  5. Finally delete the UnloadGraphicsContent method unless it did anything beside base.Unload and base.UnloadGraphicsContent. In my XNA games the UnloadGraphicsContent usually looked like this and can be safely removed now (at least if nothing else is in there):
  6. /// <summary>
    /// Unload graphic content if the device gets lost.
    /// </summary>
    /// <param name="unloadAllContent">Unload everything?</param>
    protected override void UnloadGraphicsContent(bool unloadAllContent)
    {
      if (unloadAllContent == true)
        content.Unload();

      base.UnloadGraphicsContent(unloadAllContent);
    } // UnloadGraphicsContent(loadAllContent)


  7. In case you load sound and music via the AudioEngine, you have to change the directory to the content directory too, which will not be done automatically for you since you load the .xct file directly in the AudioEngine constructor. Basically just exchange the following code:

    audioEngine = new AudioEngine("YourSound.xgs");
    waveBank = new WaveBank(audioEngine, "Wave Bank.xwb");
    soundBank = new SoundBank(audioEngine, "Sound Bank.xsb");

    with:

    audioEngine = new AudioEngine("Content\\YourSound.xgs");
    waveBank = new WaveBank(audioEngine, "Content\\Wave Bank.xwb");
    soundBank = new SoundBank(audioEngine, "Content\\Sound Bank.xsb");

       
  8. In case you have used the StorageDevice and specifically the ShowStorageDeviceGuide helper method, it is gone now in XNA 2.0. I had it in some helper classes, but never actually used it. In case you want to show a save game dialog (or some network game select dialog for example), please follow the XNA 2.0 help instructions to do this asynchronously now.

  9. In case you use any ResourceUsage enum, replace it with TextureUsage instead or remove it if the issue is not texture related. You can also safely remove any ResourceManagementMode.Automatic parameters, which are not longer supported. Everything is now automatic anyway. Just if you have been using ResourceUsage.RenderTarget you will need to change the Texture2D class to a ResolveTexture2D class in order to archive the same behaviour as before. Some calls to the device (e.g. ResolveBackBuffer) have also changed and require a ResolveTexture2D now. You may also want to check if you have any manual texture management or disposing, which you can remove or simplify.

  10. For simpler games (2D) games you should be done now. More complex games using render targets and other features that have changed in XNA 2.0 will require some more changes, but after you have done them once (or know where to change what) this is also a quick process.

The following only applies to the RocketCommanderXna, XnaShooter and XnaRacingGame engines, but you might find similarities with other XNA games and the converting process:

  1. First of all make sure the old XNA 1.1 code gets compileable by going though the changes mentioned above (e.g. replacing ResourceUsage with TextureUsage or BufferUsage) and removing everything that does not exist anymore (like ResourceManagementMode.Automatic). If a method is non-existent in XNA 2.0 like ResolveRenderTarget, comment it out and remember where it happened.

  2. You might go through other issues, but you have to come back to the RenderTarget issue. This took the most time in the converting process for me (probably half of all my issues come by something related to changes with RenderTargets in XNA 2.0). For that reason always make sure that rendering to textures still works while you make changing. I always used the TestCreateRenderToTexture unit test inside the RenderToTexture class to figure things out.

  3. Additionally to making some changes in the BaseGame class (loading content via LoadContent, using the base.Content instead of creating a new content manager, etc.) I also removed all the RenderTarget helper methods and fields from the BaseGame class (SetRenderTarget, ResetRenderTarget, etc.) and moved them into the RenderToTexture class. While this makes the code more clean and restructured by making a few more fields private, if you do not call the new InitializeDepthBufferFormatAndMultisampling of the RenderToTexture class the calls to SetRenderTarget and ResetRenderTarget will not work correctly and will not restore the default depth buffer (which has to be remembered first). If you get the following exception it means the DepthBuffer Device.DepthStencilBuffer was set to null, but is obviously still used. In order to fix that make sure the remDepthBuffer variable is set to a correct value in the InitializeDepthBufferFormatAndMultisampling method!

  4. An error has occurred during the Clear operation while trying to clear the depth or stencil buffer, no DepthStencilBuffer surface exists.
    System.InvalidOperationException: An error has occurred during the Clear operation while trying to clear the depth or stencil buffer, no DepthStencilBuffer surface exists.
    at Microsoft.Xna.Framework.Graphics.GraphicsDevice.Clear(ClearOptions options, Color color, Single depth, Int32 stencil, Rectangle[] regions)
    at Microsoft.Xna.Framework.Graphics.GraphicsDevice.Clear(Color color)

       
  5. 4. Even if you have now done everything, the app may still crash when you are trying to clear a render target (which usually happens at the start of each pre or post screen shader). The reason for the following error is the multi sampling format, which might be set to the background buffer, but not to the render targets:


    The active render target and depth stencil surface must have the same pixel size and multisampling type.
    System.InvalidOperationException: The active render target and depth stencil surface must have the same pixel size and multisampling type.
    at Microsoft.Xna.Framework.Graphics.GraphicsDevice.VerifyDepthRenderTargetCompat()
    at Microsoft.Xna.Framework.Graphics.GraphicsDevice.Clear(ClearOptions options, Color color, Single depth, Int32 stencil, Rectangle[] regions)

       
    In order to get rid of this error without changing the RenderToTexture class a lot, you can just comment out the line where multi sampling is activated in BaseGame:

    //this.graphics.PreferMultiSampling = true;

There are probably even more things that I forgot while converting the projects (converted 8 games and about 15 projects in total now), but the above list should be helpful. Especially for me because I always forget some of those little things and having this checklist is very helpful.

Tomorrow I will probably test all the XNA 2.0 games on my Xbox 360 and make some final adjustments and then post them all on http://XnaProjects.net (and here).

 Tuesday, January 29, 2008
Tuesday, January 29, 2008 4:44:20 PM UTC (  |  |  |  |  |  )
A friend of mine (Hi Frederic Schneider ^^) wrote a little article on gameports.net about the work conditions in the games sector, especially about game programmers, designers, artists and journalists. I also answered some questions. It is written in german and may only apply to Germany, but I guess it is not much different in other countries (relative low wages, not a good job security, lots of underpayed interns, long workhours).

Here is the article:

And here is a followup article:

 Monday, January 28, 2008
Monday, January 28, 2008 5:25:26 PM UTC (  |  |  |  |  )
In case you run into the following error:

Could not load file or assembly 'xunit, Version=7.10.25.1028, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
    System.IO.FileNotFoundException: Could not load file or assembly 'xunit, Version=7.10.25.1028, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
    File name: 'xunit, Version=7.10.25.1028, Culture=neutral, PublicKeyToken=null'
    at Xunit.TdNet.TdNetRunner.RunTests(Type type, MethodInfo method, ITestListener listener, TestRunState& runState)
    at Xunit.TdNet.TdNetRunner.RunMethod(MethodInfo method, ITestListener testListener)
    at TestDriven.TestRunner.AdaptorTestRunner.Run(ITestListener testListener, ITraceListener traceListener, String assemblyPath, String testPath)
    at TestDriven.TestRunner.ThreadTestRunner.Runner.Run()
    
    WRN: Assembly binding logging is turned OFF.
    To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
    Note: There is some performance penalty associated with assembly bind failure logging.
    To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

This usually just means you have installed a newer version of xunit (in my case 1.0.0.1105), but you also had an older (beta, rc, etc.) version of xunit before, which maybe used the xunit.installer.exe utility to add support to TestDriven.NET 2.x or ReSharper 3.0. Just disable the support with this tool, Visual Studio and TestDriven (or ReSharper) work fine with the new version without that extra tool. In fact you can delete it after you have disabled all options.

Monday, January 28, 2008 3:21:17 PM UTC (  |  |  |  |  |  |  |  )
Hi everyone,

I prepared some new exciting blog posts, especially about XNA and I will post them shortly and also quite a few things will change at this blog. Stay tuned.

Recently one of my companies (namely realis) moved to Hamburg and I have a new PC at the new office, where I installed Visual Studio 2008 and everything else I needed. After I downloaded the latest source code files from Team System, I ran into some problems. BTW: The Team System trial will end next month and I will probably not switch back to SubVersion, but instead go back to Visual SourceSafe since the integration is the best in Visual Studio. Team System is nice to have but absolutely not something important for me as I'm most of the time the only guy using it anyways.

Back to the Problem. After I loaded the main solution the 2 web applications in it were unable to be loaded. The rest of the projects did load fine and worked after a while until I had all the missing Assemblies installed (xunit, Ajax stuff, Silverlight, IronPython, EntitySpaces, etc.). But even after making sure Silverlight and the Silverlight Tools for Visual Studio Alpha was installed and working (checked it by creating a new Silverlight project, which worked fine), I was still unable to load those projects. I thought at first maybe something went wrong when I checked in or out all the files, but after testing it on my laptop this was not the issue, all files are intact. Everything worked just fine on my laptop, where I had done most of my work during the move and first weeks until everything was finally working here.

After digging around a bit I went back to the IIS were those 2 websites should run on and they did not run yet (not compiled yet, no wonder). But even after I pointed to some dummy website the IIS did throw out some errors (first some dlls were missing, they were quickly replaced, then some security issues with Vista, also easy). Then I pointed back to the location of the projects and made sure IIS was working this time. Now I could go back to Visual Studio and finally load the web projects.

If you have such a InteropServices.COMException, try to see if you have missed something like the Silverlight Tools for Visual Studio Alpha and then figure out if your IIS is working. You can also edit the .csproj file and remove the references to IIS at the very end of the file to see if the project can then be loaded (using IIS again is not hard through the project properties).

Hope this helps (phase stolen from ScottGu, btw: really cool stuff going on over there, the ASP.NET MVC framework is nice and the .NET Framework SourceCode is very helpful!)

 Thursday, December 13, 2007
Thursday, December 13, 2007 8:35:44 AM UTC (  |  |  |  |  )
As mentioned here in the official press message from Microsoft XNA 2.0 was released today after a very short beta phase which did only run for a few weeks.

You can download XNA 2.0 from Creators.Xna.Com, but for now it just says "XNA Game Studio 2.0 will be available early morning, Thursday Dec 13th, 2007 PST.". This will hopefully change soon ^^

http://creators.xna.com/Education/GettingStarted.aspx

Since XNA 2.0 is now out I will talk about some of its new features shortly and comment a little bit about the new networking API and Xbox LIVE features. Stay tuned.
 Tuesday, December 04, 2007
Tuesday, December 04, 2007 9:20:11 PM UTC (  |  |  |  )
I just saw the following post on Scott Hanselman's blog:

My high school friend Matt Hempey (we were in Intro to Physical Science in middle school also, so I've probably known Matt for 20+ years) and his a cappella group The Richter Scales have put out the definitive Web 2.0 Music Video. That's Matt on the solo. Matt used to work at Vertigo with Jeff Atwood but recently went to Paypal. He's living the Web 2.0 dream!

And I thought, why not push one of the videos my team at meinSport.de has produced as well. It is pretty funny, but just available in German:
 Tuesday, November 20, 2007
Tuesday, November 20, 2007 12:24:41 PM UTC (  |  |  |  |  |  )
The long awaited XNA Game Studio 2.0 beta is now available and can be downloaded from the XNA Creators Club website: http://creators.xna.com/beta/betahome.aspx

My first impression of the new multiplayer API is not that good. While it is very nice to have the ability to use networking on the Xbox 360, it is not only too hard to make it work on just a Windows PC and secondly you cannot expect that your gamers will both have a Xbox LIVE Gold membership AND a XNA Creators Club membership (both cost money). This means if you really want to do networking on a Windows XNA 2.0 game, you have to use System.Net and write it all yourself or no one will ever play your game on Windows except some XNA developers maybe.

Other than that XNA 2.0 is a great improvement, but it does only work with VS2005 yet, maybe they missed the VS2008 release earlier yesterday ^^ But it will probably be possible to modify the .csproj files again to make it work in VS2008 (without the extra XNA features and content pipeline).

 Monday, November 19, 2007
Monday, November 19, 2007 7:59:45 PM UTC (  |  |  |  |  |  )
Great news from ScottGu's blog: The final Visual Studio 2008 version and .NET 3.5 were just released :)

I have been waiting the whole day and kept refreshing the MSDN page, but I could not really believe that they actually ship today ^^

VS 2008 will probably not be much of a change for me because we have been working with the VS 2008 betas for over a year now.

I might also blog a little bit about IronPython, which I have used for smaller projects and plan using for bigger stuff in the future too. The best feed for IronPython News is: IronPython Url's

Btw: Pretty quiet on my blog for a while now, I should continue blogging. Always being too busy to write anything here is not a good thing. Gladly all my current projects work really good and are still fun to maintain, even as they grow bigger and bigger.

Update 2007-11-20: I have to say the ASP.NET Designer in VS2008 is really good again. The designer did not work well for most of my projects in VS2008 beta 2 and it was always annoying to have the million ASP.NET errors poluting the ErrorList (now they are just warnings and can easily be switched off). Overall I'm very pleased with the VS2008 so far, uninstalling VS2008 beta2 was a bit of work, but everything is working nicely now. More info and improvements in VS2008 can be found on ScottGu's blog

 Wednesday, September 05, 2007
Wednesday, September 05, 2007 5:15:37 PM UTC (  |  |  |  )
From http://nerddawg.blogspot.com/2007/09/ nothing-beats-shipping-silverlight-10.html:
Today Microsoft announced the debut release of Silverlight, the new cross-browser, cross-platform technology for developing compelling media experiences and RIAs. I joined the Silverlight effort around November of 2006 from working on WPF 3.5 feature areas, and it has been a wonderful ride. Working on two different product releases – Silverlight 1.0 and 1.1 - simultaneously is a very unique experience not easily summarized in a blog post. The kind of stuff this team has done in a matter of months is nothing short of amazing. We joke internally about how someday books will be written about these episodes; and needless to say, about the giants upon whose shoulders people like me stood. But for now, I’m happy and tremendously fortunate to have been a part of shipping a great product that millions will use and love.

I agree with that statement, not much I can add. I'm glad to see Silverlight 1.0 is now final and Scott Guthrie and his team will now focus on improving Silverlight 1.1. In our german sport community website meinSport.de we already use Silverlight too and we plan to add even more features with that exciting technology in the near future.

You can get Silverlight at Silverlight.net

 Tuesday, September 04, 2007
Tuesday, September 04, 2007 7:29:32 PM UTC (  |  |  |  |  |  )
Warning: Shameless plug ahead.

We at realis communities (german community website builder company, bla bla, see links at the right side: meinSport.de, StudiHelp.de) are searching for C#/ASP.NET Programmers right now. Since we are a german company and the following is posted on german job sites, you probably won't understand it if you can't read german. Anyway, feel free to send us an application if you are interested (and skilled of course ^^).



And the same thing as a word document:
SearchingForMeinSportCoder.doc (216.5 KB)
 Thursday, August 16, 2007
Thursday, August 16, 2007 8:59:02 PM UTC (  |  |  |  |  |  )

Ziggyware has a good overview of the XNA 2.0 announcements and GameFest conference sessions in the following post. Check it out if you are interested in the new XNA 2.0 features (mainly networking, which is really a big step forward). It is also nice to see so many new XNA games and development efforts :)

http://www.ziggyware.com/news.php?readmore=407

 Thursday, August 09, 2007
Thursday, August 09, 2007 6:43:04 PM UTC (  |  |  |  |  |  |  )
Microsoft XNA: Ready for Prime Time?

is the name of the Article of the CoDe Magazine. It is very well written and a really long (9 pages) read with tons of information in it.
Together with 6 other guys I was interviewed about my experiences with XNA and the development process of the
XNA Racing Game and Dungeon Quest, which are 2 of the best looking XNA games so far :)

Check it out, good work Nick Landry.
 Sunday, July 29, 2007
Sunday, July 29, 2007 6:57:29 PM UTC (  |  |  |  |  )
When you have some Silverlight 1.1 alpha code and want to use it with the new Silverlight 1.1 alpha refresh bits, you should make sure to replace all assemblies and recompile any libraries you have. You still might get quite a few errors because of some minor changes in the javascript code. I haven't fixed all issues yet, but the main one was replacing the Silverlight.js and fixing the .js files for html (or aspx) pages to the new syntax. Sys.Silverlight is now just Silverlight, the version is now not longer called 0.95, but 1.1 and enableHtmlAccess has to be set to "true" instead of just true before.

When you get the 2211 error code with Silverlight 1.1 alpha refresh with that nice AG_E_RUNTIME_HTML_ACCESS_RESTRICTED error follow this steps:
  • Replace Silverlight.js with the newer version from alpha refresh (you probably have done that already)
  • Replace Sys.Silverlight.createObjectEx with Silverlight.createObjectEx in all your .js files
  • Also replace all version="0.95" with version="1.1" in all .js files!
  • Finally replace enableHtmlAccess: true with enableHtmlAccess: "true"
    This change is very important and will finally get rid of the Html access restricted error above.
    If you like the error, you can "enable" it again by setting enableHtmlAccess to "false" ^^

There are probably much more little changes and fixes, but this should get the simpler pages up and running again.

Sunday, July 29, 2007 12:43:40 PM UTC (  |  |  |  |  |  )
After VS2008 beta 2 is available now, Silverlight was also updated. For Javascript development the Silverlight 1.0 RC means you are not longer in beta mode and the version will stay the same. For .NET development Silverlight 1.1 is still in alpha, which propably means there are still a lot of features missing, a lot of bugs in there and it is still hard to work with it. However, over 2000 bugs where fixed since the Silverlight 1.1 Alpha release 3 months ago.

For Silverlight designers: Blend 2 was also updated to an August CTP, a lot of small improvements here too. The best thing here is the ability to create and compile user controls and some nice changes to the Storyboard editing process.

Download links:
Seen first on:
Scott Guthrie also has a nice blog entry about VS2008 Intellisense improvements, a lot of small improvements, which might impress you if you have never used Resharper and CodeRush before. It is always nice to see the overall coding experience becoming easier, even if it is in small steps.

 Friday, July 27, 2007
Friday, July 27, 2007 4:52:59 AM UTC (  |  |  |  |  |  )
Great News, read all about it on Scott Guthries Blog:
http://weblogs.asp.net/scottgu/archive/2007/07/26/
vs-2008-and-net-3-5-beta-2-released.aspx


It features major improvements to ASP.NET Ajax, Linq, the build in Webdesigner and CSS/Javascript.
Seems like nothing for Silverlight yet, still awaiting some updates there :)

Have to check VS 2008 out now ^^

 Friday, July 20, 2007
Friday, July 20, 2007 11:49:28 PM UTC (  |  |  |  |  |  |  )
Side note: FX Composer 2 RC1 is out. Check it out, works even better now.

I worked a bit with Silverlight 1.1 (alpha) over the last few weeks and I noticed a lot of annoying
javascript error messages with just stupid error codes and no stack trace for the exceptions.
This is definately the worst thing about Silverlight, you have to do a lot of trial and error testing,
unit testing and debugging silverlight is also hard to do.

I wrote down all the errors I have encountered and some solutions to them, which might be
helpful to other people coding Silverlight too. Now whenever I get an error I just look into this
list and follow the steps from top to bottom and this way I save a lot of time ^^ maybe I will
also rewrite the javascript on_error code that throws these errors to a more useful version.

Silverlight Error Codes:
  • 1001: usually AG_E_UNKNOWN_ERROR (yeah, thats really helpful)
  • some element is null while loading a control
    Fix: Check all controls constructors and fields, set breakpoints there!
  • Namespace duplicate found (usually error code 2254)
    Fix: Check all namespaces, make sure each name and namespace is only set once

  • Control has no default Constructor and can't be instantiated
    Fix: Provide a default constructor with no parameters, it can be empty!
  • NullReferenceException (or other exceptions) happend somewhere
    (usually in the Control constructor somewhere)
    Fix: Catch the exception or set breakpoints to find it, then fix it.
    Often it is also useful to comment code out and test if it works again.

  • If this all not helps and the 1001 errors keeps coming up when you use the
    control use the following approach:

    Fix: Comment out the control, the page should now work.
    Comment it in again and check every single property you set, try removing
    as much as possible and test again. If it still does not work, check out
    the control itself, comment everything out here inside the control canvas.
    It should work now except for some errors of missing inner control names.
    Now slowly comment everything in again and try to see which inner control
    did not work. Often a depreciacted, commented out or deleted property is
    used and causes this error. Again try to work with as little as possible
    control properties and increase until the error pops up again.

    This more complex case will hopefully not happen to you in the beginning,
    but the more controls you build, the more likely it is that this one
    will annoy the hell out of you. Keep calm and go forward as methodically
    as possible, it will also help you for future error encounters.
  • Can happen if a TargetName for a Storyboard (or something similar) cannot
    be found. Make sure the target control name is still valid.

  • 2005:    ParserError: Unknown namespace xy
  • The line should tell you which namespace is unknown and this should
    be quite easy to fix. It usually means you have either forgotten to
    add a namespace or add an element into an unsupported location.
    E.g. adding something to a nested Canvas can sometimes cause this error.

  • 2024: ParserError:
  • Invalid attribute value text/python, usually happens in the main xaml file.
    Similar to 2265, use the same fixes.

  • It can also happen when the mime type
    is not available (e.g. in IIS) and .py files can't be used.
    Fix: Define .py as mime type in IIS as 'text/ironpython'
        
  • 2101: can be:
  • LostFocus event (or similar) not supported here
    Fix: Move global events to the main canvas, they are only supported there!

  • 2207: AG_E_RUNTIME_METHOD
  • playing media failed, unable to play it, loading probably failed with 403
    or 404

  • 2210: AG_E_INVALID_ARGUMENT
  • Short: In 90% of your cases the embedded resource cannot be found, make
    sure that the name of your embedded resource is correct in the
    GetManifestResourceStream function in your control constructor. Also make
    sure the file is marked as an embedded resource in VS Orcas!
  • This means the embedded resource could not be found, which means either the
    call to GetManifestResourceStream uses the wrong string OR the resource
    is just not existant because of a wrong content type! make sure the
    control you are trying to access is actually an Embedded Resource and not
    just a Content or Silverlight Page.

    Fix: Set control xaml as Embedded Resource and make sure all strings are
    correct! GetManifestResourceStream should succeed! Using the Silverlight
    1.1 API UI Controls is also helpful because they figure out the path
    for you (just leaving you with misstyping the control name or forgetting
    to set the embedded resource type or one of the million errors below).

    Note: This is very annoying because SourceControl sometimes messes this up
    and just merges 2 files and setting it as Content or Silverlight Page,
    which make this error hard to track, so always check for the correct
    file build action first, it should always be Embedded Resource for controls.
  • Another way this error can happen is when inside the control a namespace
    error occurs (similar to 1001 or 2254), you just get 2210 and trying to
    find why it does not work while all names are set ok and the resource is
    found, etc. One example of this failing is that a namespace or assembly
    used inside a control to reference other controls cannot be found or is
    misspelled (e.g. path does not longer fit, can be stupid things like
    ClientBin/Some.dll should be ../ClientBin/Some.dll)

    Fix: Check all namespaces in the control too, make sure all names are
    correct and files (especially assemblies) can be found the way they
    are specified!

    Advanced Fix: I use reflection to find out about the class name and use
    that same name for the .xaml file, this way I never have to specify
    any name and merging files does not lead to problems as long as the xaml
    file has the same name as the class (which is easy to spot in VS Orcas).
  • Another VERY crazy way for this to happen is when one of your controls is
    using the partial keyword for its control class and overwrites some of the
    autogenerated background fields (through x:Class in the main Canvas of the
    control), it is probably better to always remove the partial and make sure
    the control is all managed by you (like in the SDK samples).

    Fix: Remove the partial in c# and the x:Class in xaml if you get compile
    errors, after that it usually just works :)
  • Older notes (before I figured this out):
    Seems to happen with perfectly fine xaml code, no c# breakpoint is ever
    hit, so this must happen while parsing the xaml. Often also changes to error
    2254 if some name or namespace is wrong, but then gets back to 2210 if that
    is fixed.
  • Someone here traced the 2210 back to “InitializeFromXaml” being called
    with an invalid resource stream (GetManifestResourceStream), which failed
    one line above it:
    http://silverlight.net/forums/t/1755.aspx
    
  • 2251: ParserError, AG_E_RUNTIME_MANAGED_ACTIVATION
  • Probably a security issue, seems to happen on a Max when the xaml file
    could not be loaded or accesses something that is not available (assemblies)
    Fix: Seems to be a Mac bug, will hopefully be fixed in the future.
        
  • 2252: can be:
  • Canvas Load Error, canvas could not be loaded because something is wrong
    it may help to check out the line and error description for more details.
    Fix: Look through the xaml line by line, annoying, but something is wrong
  • AG_E_RUNTIME_MANAGED_ASSEMBLY_DOWNLOAD:
    When this happens the control at the line specified failed to load.
    This can be because it crashed somewhere in the constructor, setting a
    breakpoint usually tells you wether it crashed in C# or already in the
    xaml. If it is in the xaml, you have to figure out the error there (try
    to uncomment, check namings, etc.). If it happens in C# setting a
    breakpoint makes it much easier, but the error is still annoying. For
    that reason you should make sure to test your controls as much as
    possible before using them on a complex page.

    Fix: Set a breakpoint in the constructor of the control and fix the
    exception! Or if that does not help, take a close look at the xaml
    and comment it out to see what works and what does not.
  • More help about 2252 from http://silverlight.net/forums/t/370.aspx
    Assembly loading failed, this can happen because of the IIS being
    misconfigured (unlikely if you doing development) or because the
    path to the assembly could not be found (much more likely).

    Fix: Make sure both the page xaml and the control xaml point to the
    correct directory for the dll and make sure this works from the
    perspective of the page, not the directories the xaml files are in!
    In my case changing ClientBin/.dll to ../ClientBin/.dll often did
    the trick!
  • Another issue can happen when you rename the assembly, but not all the
    .dll links are correct. It can also be problematic if there are special
    letters like - in the assembly, which will get renamed to _, but the
    filename is still with -, see here:
    http://silverlight.net/forums/t/370.aspx

    Fix: Just check all .dll links and make sure both the name and the path
    are correct.
        
  • 2254: AG_E_RUNTIME_MANAGER_ASSEMBLY_DOWNLOAD, can be:
  • Control type not found because a namespace is not set correctly, this can
    happen if you just copy a file from another project and do not change the
    namespace accordingly.
    Fix: Make sure all namespaces are correct (same in xaml as in the controls)

  • Namespace duplicate found, make sure that all namespaces and names only
    occur once.
    Fix: See above 1001
        
  • 2255: AG_E_PARSER_BAD_TYPE
  • An unsupported type was found, which usually means you are specifying a
    control or class for the xaml, which does not exist (anymore). Make sure
    that the x:Class parameter points to an existing class and uses a correct
    namespace.
  • Also seems to happen when there are multiple comment blocks mixed in the
    xaml file or some name contains an invalid character because of that.
    Clear the xaml file and test until it works again, then insert the removed
    code again to figure out where the error is happening. The line/position
    information of this error is usually not very helpful!
        
  • 2265: Error: Parser code
  • Parsing xaml failed, this has been reported after saving some xaml in Blend
    but it could not be parsed in Visual Studio.
    Fix: Try using only parts of the xaml, use smaller files, dunno.

  • Parsing xmal failed, some syntax error.
    Fix: You should be able to spot the error and fix it if it is a smaller
    file, for bigger files comment most of it out and comment it back in until
    it breaks again. Then fix the issue.

  • 3001: AG_E_INVALID_FILE_FORMAT
  • Often a ImageError, which usually means you are trying to load an
    unsupported image format like the .GIF format, which is not supported
    by Silverlight yet.
    Fix: Use .PNG instead of .GIF, etc.
        
  • 3002: AG_E_NOT_FOUND:
  • Error type should describe which kind of resource was not found (usually
    ImageError). Check your constructor and Page_Loaded methods and check
    all the files that are loaded there and make sure they exist. This is
    probably the equivalent of FileNotFoundException, just all the helpful
    information (which file, why, etc.) is missing. Sometimes the error type is
    confusing because it may report an ImageError, but in reality just the xaml
    file could not be loaded, always check the xaml file (name, loading, etc.)!
        
  • 3010: can be:
  • Silverlight installation is not complete yet, restart browser (or computer
    if this error persists).
    Fix: Tell user to restart browser.

Link to the silverlight.net forum (post this here too), 13 known issues
with Silverlight 1.1. It is good to know them:
http://silverlight.net/forums/t/2400.aspx

Other helpful links:
http://blogs.conchango.com/stevenevans/archive/2007/06/06/
Silverlight-Adventures-with-Blend.aspx

http://www.thescripts.com/forum/thread650457.html
http://silverlight.org/forums/t/1422.aspx

Note: I will add more errors to this list for Silverlight 1.1 alpha, but I will probably just
write a new blog entry for newer Silverlight versions. Still pretty excited about the new
VS Orcas Beta 2 release ^^

 Thursday, July 19, 2007
Thursday, July 19, 2007 3:21:43 AM UTC (  |  |  |  |  |  |  )
I wrote a little tool almost a year ago to help me coding XNA directly in VS 2005 instead of using XNA Game Studio Express, which does not support addins. I wrote a little bit about that back then, but for some strange reason I never published my tool. I also wrote about it in my book "Professional XNA Game Programming" in chapter 1 at the end.

Recently I got some emails requesting this tool and I still had to test it for the final XNA version and I also want to add support for VS 2008 (also called orcas; vs 2008 beta 2 comes next week hopefully, yay!).

This tool does not do much, but it is still very useful like the AnnoyingFilesRemover. I use it almost daily when developing and testing XNA projects. It converts projects from VS Express to VS 2005 and VS 2008 and back, you can also use it for VS 2008 (Orcas) projects, which can be openend in VS 2005 again (and compile if you don't use .NET 3.5, but even that works to a certain degree with the LINQ May 2006 CTP). I will try to update this tool when newer versions of XNA (like the XNA Game Studio 2.0) and VS 2008 (like the beta 2 next week) come out, exciting times are ahead :)

The tool looks like this, the most useful button is "Save and Open Project", which convert and then starts the selected VS version:



And here is the installer plus source code:

PS: VS2005 and VS2008 both do NOT support the XNA Content Pipeline. I suggest just starting to write XNA games in VS2005/VS2008 and then switch to XNA Game Studio Express when you need and want to use the content pipeline (or use a library in VS2005 and write the game with XNA Game Studio Express).

You can also use the also use the XNA Content Builder to create .xnb files yourself:
http://www.codeplex.com/xnadevru/Wiki/View.aspx?title=XNA%20Content%20Builder%20(XCB)
 Monday, July 09, 2007
Monday, July 09, 2007 6:19:33 PM UTC (  |  |  |  |  |  |  )
I've been working with VS Orcas for 3-4 months now and while most projects are still in C#, I switch over to IronPython more and more, especially if I do anything new like some Silverlight website.

CodeRush is working ok in VS Orcas, but there are still some issues, for example expanding/collapsing regions like in my CR_Commenter plugin does not work at all. Visual Studio's Ctlr+M+M and Ctlr+M+L work, but they are pretty much useless because they either collapse just the most inner region (Ctrl+M+M) or just too much (Ctlr+M+L) and pressing these hotkeys is too complicated anyway.

With CR_Commenter you can press Ctrl+4 to collapse or expand the region you are in or Ctrl+5 to collapse/expand all regions (but not summaries, methods, etc.). This works fine in VS 2005, but not in Orcas, there are also some other issues in Orcas like switch or namespace blocks are not commented anymore. For this reason I started writing a new addin (without using CodeRush this time) last month, but I never found time to finish it.

Instead I wrote a new addin this weekend. It just fixes the region issue and adds support for IronPython, which does not have any regions at all. Now regions for all classes, defs (methods) and if blocks are generated for you and can be expanded and collapsed with the same hotkeys (Ctrl+4, Ctrl+5 or the VS defaults). Please note that I had commenter support for IronPython too and added stuff like #region and #endregion to it too, but it does not feel like Python anymore if you add too much comments and blocks. The beauty of Python is its short and self-explaining code and the more I work with it the more I like it.

RegionAddin Hotkeys:
  • Ctrl+1, Ctrl+2: Comment code like CR_Commenter (not implemented yet, it is commented out, too much features from CR_Commenter missing).
  • Ctrl+3: Build region like CodeRush or CR_Commenter, also commented out, CodeRush's version currently does work much better, but adds comments to #endregion
  • Ctrl+4: Collapse or expand the current region you are in
  • Ctrl+5: Collapse or expand all regions in the current file. In IronPython it has 3 modes: All uncollapsed, All methods collapsed, All classes and methods collapsed
  • Ctrl+6: Regenerate all collapsable blocks in IronPython, this is important because the IronPython language service does not support any collapseable blocks, maybe I will implement that later in there ...

Lets take a look at the region feature of RegionAddin for IronPython, Ctrl+6 generate all regions at once, otherwise regions are created automatically as you write code.




As always here is the full SourceCode and a Installer:
This is version 1, I will improve the addin in the future and provide better versions with more features in the future. Maybe I will also finish the CommenterAddin completely and add more support for IronPython (have to think about how it makes sense). Hopefully the RegionAddin is useful for C# and IronPython right now, it also supports all other C style languages like C++.

Monday, July 09, 2007 1:33:12 PM UTC (  |  |  |  |  )
Yeah! I have been awarded as a MVP (Most Valueable Professional) by Microsoft in the Windows - DirectX Category again.
Last year I got this award and each year it is renewed (or not) if you are still great enough ^^

I guess mainly my XNA projects and the Professional XNA Game Programming book are the reason to become MVP again.
But lately I have not done much DirectX or XNA programming, but questions from my colleagues and by email keep me fit in that area.

A nice warm thank you to all people happy with my work and publications and thanks so much to Microsoft for awarding me again.











 Sunday, June 17, 2007
Sunday, June 17, 2007 11:30:48 AM UTC (  |  |  |  |  )
If you do not know about FX Composer 2 yet and have not seen it before, check it out if you do any shader development at all. I was a big fan of FX Composer 1 and previewed FX Composer 2 kinda early and used it a bit in the Arena Wars Reloaded OpenGL Shader development.

The best features are full Collada support and full DirectX, OpenGL, FX (hlsl), CG and CGFx support and the nice UI and cool new features and toolboxes. The beta 3 version was released yesterday (first public version) and the final version will probably be available soon.

http://developer.nvidia.com/object/fx_composer_home.html#downloads



Mental Mill is also a part of the FX Composer 2 beta 3 installation. It is a really cool tool for artists, who do not want to hand-code shaders themselfes. Instead you can drag and drop components onto the workspace and connect them visually to create a shader. Really cool stuff, one of my artists is really a big fan of shader creation this way. I haven't used it much myself yet, I always end up finetuning the shaders myself.

Mental Mill:

 Wednesday, June 06, 2007
Wednesday, June 06, 2007 7:33:41 AM UTC (  |  |  |  |  )


Now this is really good news because I have been working with Orcas for over 2 months now and most of the features of CodeRush did not work in Visual Studio Orcas (even with my hack I posted a few months back). The new version of CodeRush, 2.2.2, finally supports parsing C# 3.0 and has MANY bugfixes and also quite a lot of new features. It was released last month, but I was quite busy and did not notice the update until now (they should implement a rss feed for updates ^^). Refactor! works also great and I might use it more often now (used mostly the refactor features of VS or some other tools in the past). Many thanks fly out to DevExpress, if you look below not many addins have support for Visual Studio Orcas, and CodeRush is best Visual Studio Addin ever, just for this reason alone :)

Because I'm currently developing a addins and even a VS package too (because I develop in IronPython right now, will post on that in a few days), I checked out some other addins. Here is my quick overview:
  • CoolCommands 3.0 adds some nice features to VS, mainly to improve interaction between VS, projects and the explorer or command line

  • MZ-Tools is a great addin for Visual Studio I never have heard of before (and I know a lot of addins).  It has a long feature list, check it out yourself ^^ Sadly it does not support VS Orcas yet, but it works nicely in VS2005 and does not override any behaviour of other addins like CodeRush as far as I can tell.

  • CodeIt.Right and CodeIt.Once I have heard of them before, but I never really installed it and check it out. It provides many useful reformating, refactoring and produtivity features, which allow you to quickly add existing code, reformat it automatically and apply rules for all developers on a project. They have also 3 short videos on their website so you can quickly see what this is about. Again no VS Orcas support yet as it seems.

  • SmartOutline is also an addin from the CodeIt.Right guys, they won the 3rd place in the VS Studio Extensibility Contest. All this addin does is add regions, but it is free to download and use. Not sure why this is great, my Commenter plugin could do that 3 years ago and does it in a much faster way (shortcut: Ctrl+3). CodeRush does support it too (Ctrl+R or Ctrl+3 too).

  • TestMatrix for Visual Studio .NET is a unit testing, code coverage and profiling addin. I'm not sure where the profiling comes in (I got Ants Profiler for that, havn't found a better tool yet. But I would like a better tool because Ants Profiler hasn't changed much in 2 years, which suxx), but the code coverage and unit testing features are nice. Probably not worth buying if you use TestDriven.Net like me. Code coverage can also be covered via NCover (a lot of covering in this sentence ^^).

  • Spell Checker is a really useful addin. Like using Word, when the spell checker is there, everything feels right, but when it is missing, it gets very annoying when you need it. I used the SpellChecker for CodeRush from RindHand, but Spell Checker is also very good.

  • Koders Addin for Visual Studio 2005 is also cool, but like most of the plugins, it only works in VS2005, no Orcas support yet. I have installed it for a long time, but I never use it. Dunno why, the idea is great, it allows access to many billion lines of source code and prevents you from re-inventing the wheel.

  • CodeKeep is very similar to Koders, but it focuses on code snippets. I have not used this addin before, but I will try it out, maybe I will use it more often than Koders.

  • I might also have installed 50 million other addins, but I have no time to talk about all of them, most of them are not worth mentioning ^^ In the past I have also talked quite a bit about addins and tools for Visual Studio, including TestDriven.Net, LineCounter, CodeRush, VisualAssist (for C++), CodeSmith and more. They are still great addins, no reason to mention them again, you know them probably already ^^
Take care.

 Sunday, May 20, 2007
Sunday, May 20, 2007 3:38:12 AM UTC (  |  |  |  |  |  )
Dunno what happened. I wanted to post this a week ago but for some reason I did not find any time to post the whole week. This way I can probably give a more detailed view at the new programs I've been using for one to two weeks now.

BTW: I also updated some links in the menu and on the right side of this website, there were a lot of links not pointing to the correct locations.

First of all, I'm exclusively using Visual Studio Orcas now. I mentioned the Visual Studio Orcas Beta1 a month ago and explained how to import unsupported addins and fix some issues. I did not have much time to check out Silverlight yet, but it still looks very promising. There is also a new website from Microsoft called PopFly that is using it.

Last week one of my colleages was away for a couple of days and I stole his 24" monitor and put it right beside my 24". At that time I was converting a few projects from VS 2005 to VS Orcas, but as you can see that is way too much one the screen. I even tried to rotate both screens by 90 degrees, but after a hour I was feeling silly always looking up and down. Anyway, it is just too much to look at both these screens at once. Having one big 24" and a 20" or 19" right beside it is already a very effective solution. Important stuff goes on the big screen (VS mainly) and all the rest (firefox, ultraedit, explorer, whatever) go on the secondary screen.



This is my normal setup and I'm much more used to that. I have worked with multiple monitors for about 7 years now, it is nothing special anymore, but now is the first time I don't really need a bigger monitor anymore ^^




Ok, let's go on with some tools. I downloaded FreeMind a month ago and played around with it a little, but it couldn't convince me to replace my good old txt TODO list. But for other stuff FreeMind is really great.



In a matter of seconds you can create a overview design and it has the advantage to put it directly into a project instead of having it on paper, never been able to add stuff and losing it after a short while. Here is one of the FreeMind maps I have recently created just describing a project design and the workflow process. I have also seen examples of complete project management with FreeMind or using it for TODO lists or scheduling, but I'm not convinced that you are faster with it. I do not really need a graphical view of my TODO list, at least not at the time I throw ideas and tasks in there. To view the work process I could still convert my TODO list (which is tree based) to FreeMind anyway. It is just faster entering text into a text file than to anything else (which is also the main reason I never found any good TODO list tool).




Then on the recent DotNetRocks radio show I heard Eric Sink from SourceGear talking about Source Control and his tool SourceGear Vault, which is very similar to SourceSafe. This year I went crazy and tried all kinds of source controlling systems, including the following:


  • SubVersion (successor of CVS): SubVersion is a really great version control system and it works really good, both on small and big projects. We have used it for Arena Wars Reloaded and the only cavecat was getting it to work inside Visual Studio 2005. Thanks to the plugin VisualSVN it worked out just fine, only adding files is a real hassle (they are not added to the remote server, just locally). For VS Orcas there is no support and when you are working with ASP.NET websites in VS SubVersion and VisualSVN is a really bad choice IMO because it messes up the directories and does not add the files properly.



  • Perforce: Ok, I went back to Perforce, which I had used before, but mostly alone or together with another programmer. Perforce is a very professional solution, but again not very practical for anything but programmers and I wanted to include the graphic artists and project managers into the version control system too. Also Perforce still has a lot of issues with Visual Studio IMO and is still hard to setup, even with the much improved UI that finally allows you to set rights properly without messing in command line scripts. Again, no support for VS Orcas and the main reason not to use Perforce is the crazy price, $800 per developer, good bye! It was a lot cheaper a few years ago, but I never got into Perforce (mostly used SourceSafe in the past).



  • SourceSafe: Ok, back to the basics. The good old SourceSafe with an internal file system that no one understands, strange bugs that prevent you from adding files or the good old "If you delete a file, it is still there, just the content is gone"-"feature". For smaller projects SourceSafe is fine and if you do not have many developers, it works ok, but you can't give it to any graphic artist and once something gets messed up you need to spend a lot of time cleaning it up. The good thing is it works right out of the box in Visual Studio Orcas.



  • And then I tried SourceGear Vault: It is pretty much the same thing as SourceSafe, it just uses a SQL DB backend, has a much cleaner interface and much better tools including nice importers to get all your projects converted into the new version control system (yeah, everyone says they have importer, but they never work, the Vault Importer worked, it had no problem importing several GB of SourceSafe data). The disadvantage might be that it still feels like SourceSafe and it still has some of its issues (like deleting files and they appear again as 0-byte files), but overall it is much improved. We have just used it for a few days now and we had one merge problem so far, but that was probably because one artist did not check in his files and we changed it a few times. Vault also runs fine on VS Orcas as it probably just uses the standard SourceSafe interface for most of its stuff, which runs just fine on VS 2005 and Orcas.



  • I also tried a couple of other version control systems, but none of them worked in VS Orcas and I did not find a great one anyway. Some tools like AlienBrain have really nice features, but too much other stuff is missing and while it might be a great tool for artists, it is unusable for programmers. I do not believe in having separate version control systems, especially if you work tightly with your artists and make 10+ check ins per day with them.


I also use another tool called OnTime (Ship Software OnTime) for a while now. It is a project management tool and we use it mainly for bug tracking. It is about 700 times better than having you bug tracker on a stupid website. Website bug trackers like Mantis or BugZilla are not good for quickly adding tasks, entering bugs and fixing them in my opinion. They might be useful if you have to work with remote teams or if you expect really detailed bug reports. In our case we have mostly short tasks and quick bug reports, which are written in a few seconds.
But more importantly OnTime integrates directly into Visual Studio (sadly not VS Orcas, but the Windows tool on a secondary screen is fine too). It allows you to quickly add tasks for yourself or for any team mate and to go though 20 bugs in a few minutes (you will never be that fast with a website system). But the best feature IMO is the email management, OnTime allows you to send emails to a specific email address, which get picked up and added to the bug list. Then the programmer sees the issue, fixes it and the email sender gets a reply that the bug has been fixed. This system worked out great in our company.


For some strange reason I can't make screenshots with PrintScreen in Windows anymore. I guess some VNC tool messes up my clipboard or Windows just does not want to handle screenshots as big as my monitor resolution is. I searched for a good screenshot capture tool because I was getting annoyed with the PrintScreen+Paste in Paint or similar+Save somewhere on disk approach anyway. I used a tool a few years back that automatically made screenshot of the desktop every minute or so, which was funny, but I can't remember the name anymore. After testing a couple of crappy freeware and shareware programs I finally found Screenshot Captor, which is freeware and a really good tool with a lot of cool features. Most importantly, it allows you to capture your screen, window, or all screens with PrintScreen, Alt+PrintScreen or Ctrl+PrintScreen and it even safes the screenshot in the format you want into a directory you want. This was exactly what I needed :)

And finally to finish this big monster post: Blizzard announced today that StarCraft II is in the making and I was totally blown away by this. Many sites like GosuGamers.Net reported all week and were guessing StarCraft II or Diablo III, but there were so many rumors about StarCraft II, not many people were very sure of it anymore.



There are already some screenshots and game infos available, you can also find a few game play videos on youtube and 2 trailers by blizzard are on the official StarCraft II website, which is painfully slow by the way ^^ The game looks pretty good, but it still has many similarities with WarCraft III and there was already a lot of critics by pro-gamers and people in the StarCraft communities fearing that this game would be slower and less balanced than the original. I suspect the same, but StarCraft II will still be the best RTS that comes out in the next couple of years and every RTS fan will buy it anyway.

If it can surpass StarCraft - BroodWar is not for sure yet and we have to wait and see. It will probably attract more people to the StarCraft universe, but the old StarCraft community will not die that fast. It probably will take another 1-2 years until the game is done anyway. But this was very amazing news for me, I was suspecting Diablo III or some MMORPG from Blizzard, but not a PC-only old-school singleplayer+multiplayer game, that really goes back to the roots and just adds 3D graphics and physics to it. Nice job Blizzard!

 Wednesday, May 09, 2007
Wednesday, May 09, 2007 3:45:04 AM UTC (  |  |  |  |  |  |  )



Today I got the Wired Magazine in my mail and on site 80 there is a nice article about the development process of the XNA Challenge game Dungeon Quest from the GDC 2007. It was written by Mary Jane Irwin from the Wired Games Blog, thanks :). There is also a nice picture gallery with 21 images from the 4 days, which nicely shows the advancements we made each day. Enjoy!

PS: There is probably more information on this and other XNA projects on the huge Wired.com website, but every time I search for XNA or my name, I just find too many articles. Test for yourself.

 Tuesday, May 08, 2007
Tuesday, May 08, 2007 3:55:20 AM UTC (  |  |  |  |  |  |  |  |  )

I heard about all the Silverlight fuss from the MIX2007 conference last week, but I did not have time to check it out with all the stress and projects I'm currently involved in. I already use VS Orcas for a while (see post from last month) and I played around with WPF in the past (formerly Avalon, now Silverlight, which is still in beta, but will be released this summer finally), but I did not find anything compelling for a game programmer since we use DirectX or XNA anyway. But with the ability to build websites with Silverlight and still allowing the .NET framework to exist in that environment while simplifying the development process and getting away from building static html like pages with some dynamic features (ajax or not, it is still somewhat static and hard to do), Silverlight gets much sexier than just WPF on a windows app by itself.

Why is Silverlight cool? It is .NET, it runs on Firefox, IE, Safari, Mac, etc. it is just 2 MB download, it is amazingly fast, it has many cool new features, it allows many windows-only apps to be developed for the browser in a more natural way, it will be pushed like crazy and a lot of people will have it till the end of this year, there are already some cool tools out there including the Expression toolkit and Visual Studio Orcas, and probably a lot of other reasons you can checkout yourself!

Maybe it is even possible to interop with some DirectX or XNA stuff somehow. I have no idea if this is possible at all or if there are security issues or this kind of functionality is not possible at all, but instead of waiting for another week until I find a few minutes to test this out, why not announce it here first that this would be cool and maybe someone else can test it for me :)

Even for just doing websites, Silverlight will definitely become a BIG competitor to Flash based websites, developing in .NET will be a lot easier than working with Flash/Actionscript/whatever and I would bet that there are more VB/C# developers that can now do some great websites without having to learn much while creating Flash sites or even doing ASP.NET (with or without Ajax) development is much harder and less compelling for certain kinds of applications. Great examples are the FOX Movies site and some widgets on MSDN or some early test controls from Telerik.

BTW: Archor wrote me an email about his Cyber Car XNA game he wanted to submit to the XnaProjects.Net site I made last week. This is actually a Racing Game Mod, I first guessed he used the simple racing game version, but this one is based on the full racing game from the XNA creators website. Pretty cool style in my opinion. Thanks Archor!

http://xbox360.archor.com/

 Friday, May 04, 2007
Friday, May 04, 2007 1:29:43 PM UTC (  |  |  |  |  |  |  |  |  )
Yes. My XNA book is finally out and some people even got an early version last week. There is also some discussion going on in the XNA Forums and on the official Wrox forum for the book.

The coolest thing yesterday that my book was on Rank #16 for Computer/Technical books on Amazon.com and on Rank 500 something for all books. Quite impressive if you ask me, hopefully it will continue to stay high and make me filthy rich .. just kidding.

Yesterday I wanted to put all the samples from the book on my blog, but it is already way to overloaded here with screenshots and games, adding another 10 games will not make anything better. Instead I had a crazy idea to create a XNA Community site in one day. It is called XnaProjects.Net. The idea is for everyone to submit their games and links. News are grabbed with Google Blog Search and more features will come in July 2007 when I got more than 5 minutes time in a row.

Anyway, check out this great new website, submit your games and links and check out whats already submitted by me (10 Games so far, yes, thats a lot of XNA games I did in the past few months):

  • XNA Pong
  • XNA Breakout
  • XNA Tetris
  • Rocket Commander XNA
  • XNA Shooter
  • XNA Racing Game
  • SimpleRacingGame
  • SpeedyRacer
  • Dungeon Quest
  • Skinning with Collada Models in XNA
You can find source code and game installers for all of these games, including some nice screenshots and a YouTube video for each of them on the XnaProjects.Net website. Check it out:
 Tuesday, March 20, 2007
Tuesday, March 20, 2007 5:56:57 AM UTC (  |  |  |  )
This year we had no booth on the CeBIT and there were no important meetings for us there, so I just ran across the CeBIT yesterday with a couple of friends and I took a lot of photos. Here are my impressions from the CeBIT 2007, I hope you enjoy it.


Let's get started. This is the train ride to the west entrance. It will not be that empty on the way back.


The CeBIT fair ground (photo was taken a little bit later). There were about 25 filled halls with a lot of exhibitors and over 200 000 expected visitors.


The first booth we saw. Not really spectacular, but we started with some boring halls in the beginning and left the entertainment halls for the end.


RFID chips are used to track packages here. The sensors in the front are used to check if a package has left or entered a storage facility.


Heise.de had a booth too and we saw a couple of Linux penguins in that hall too. The usual get 2 CT editions for free abo could be ordered here too. They also had a Sony Play station 3 running Linux on the other side. The funniest thing was some other booth in that hall where some woman announced that you can win a "Sony Play 3 Station ". We laughed our asses off.


Some Chebaba dude or chick was handing out candy.


The big companies SAP and Microsoft almost filled the whole hall 5 together.


Microsoft did not have anything new to show because most of its products have been released in the past months. It will take another 2-3 years for the next cycle. There were only some smaller handheld devices with Windows XP (like the Origami from last year) that looked interesting and a lot about boring business and security. I would have liked to see some info about Longhorn Server.


An Asian woman wanted to take this Audio sport car with her.


This is the data storage server for the whole Microsoft booth. There are 2 rack servers in here and about 24 disk drives. Some guy from Microsoft came over and explained to us that the server got 4 TB data storage and runs several services, all Windows based. But we smiled a little thinking of our little server at home, which is just a normal PC running Windows 2003 x64 (you will need that for any drive bigger than 2 TB), but got 4 TB on a single RAID 5 already, with some other backup and boot drives too. And it is not as noisy as the servers we saw here at the CeBIT.


Some cool relaxing chairs near the AMD business booth. There were a lot of water fountains in hall 1 and 2.


Another server with about 64 disk drives running a Windows Cluster service and there were showing virtualization here and explained how cool it is to have multiple virtual servers, which can balance each other. I did not wanted to spoil them by telling them that using virtual servers will just throw away almost 50% of your performance away. Using it for performance critical applications did not make much sense to me. Again, just 6.1 TB on this data server, not much if you ask me. In a few years everyone will have more memory on their home computers ^^


A blue haired girl at the ASUS booth. I was not sure if she is really from ASUS as she was handing out something to win some Intel stuff. Later I found out all the blue haired girls were from Intel and they were at 8 different booths, which you had to visit to win something boring. I would guess the total number of people how did that was zero. BTW: Did I mentioned that my mainboard that stopped working last week when I came back from the GDC was from ASUS? :-(


A Porsche! There was a PC inside, but for some reason the car was more exciting (and expensive). You could even get a price if you ask, but you know, when you have to ask, you can't afford it anyways.


Racing games all over the place. Why does everyone going to a fair want to play racing games? And why does everyone just show racing games? Man, this is boring! Ups, I did a racing game too, maybe I should be more exciting about this ...


The Samsung booth in hall 1. Samsung is a cool company anyways with all their support for e-sports and their range of cool affordable products, but everyone at this booth was extremely friendly. Most other booth in hall 1 were just focused on business and did not even want to be asked about anything.


A new laptop, which got the new Nvidia GeForce 8000 Go card in it. Coming out in 1-2 months. Pretty exicting. Makes my new laptop with a GeForce 5900 GS look much less impressive.


Here are the specs. If even such a small laptop can have a GeForce 8000 and do DirectX 10 stuff, bigger laptops will have some cool graphic boards too in the future.


The new 30 inch screen from Samsung. It has a better image than the 30 inch Dell, but it is still very expensive and the Dell monitors are much more affordable (especially the 24 inch). The resolution on a 30 inch is great: 2560x1600 ^^


Some guy was zooming in on girls with this new camera, but I was watching the watcher.


Two girls from Intel (again and again, they were all over the place) checking out each other. Not really hot, but getting to it ..


A sphere of monitors at the very unfriendly IBM booth. They had some business people explain the marketing ideas of IBM in Second Live, but they had no idea about the application and their "sims" were empty like no ones else. But who cares, as long as people keep pumping money into "3D worlds and presentations" they will keep going. IMO the Second Life technology is not really perfect for virtual presentations. There is no easy way to login and most of the required technology is not even implemented yet (Second Live does not even have voice support).


This is how the sphere monitors are controlled by the way. Each one has a laptop on its back. I'm not sure this is the best way to do it, but we are still on the IBM booth, no reason to be clever here.


A little later we saw Commodore. Every year someone new buys the name and brings out a couple of shitty products, when will it ever stop? For example they got some "new" 4GB mp3 players with some simple display, which costs 250 bucks. By the way, other companies like Samsung and Creative had similar shitty mp3 players and marketed them as "new" too. The walkman was something new, but everything after that is pretty much the same. I just do not get the point when people start speaking about "taking your music anywhere with you". Are you freaking kidding me?

For that you get a Zune or iPod with 30GB and much better technology. I got a Zune from the GDC by the way and it does not work here in Germany yet. First of all you are not allowed to download or pay for anything when you are not in the US or Canada (the only countries where the Zune is released yet), and then you can't even install the Zune software on a German operating system. There are some hacks to get around some issues and having direct access to the Zune drive (very useful), but they only work on a English windows version or XP. Here is the link if you are in the same trouble.


Did you notice that no booth chicks will look at me when I'm trying to take a picture? I will keep trying till the end of the day ^^ Please also note that we entered the entertainment halls and everything will look more like the Games Convention now.


An Asian RPG game, which has a really cool kill counter in the lower right. The game looked very manga like, but still had realistic graphics. I have to check back what this game was about later.


R2D2 was there too. Actually it was a pretty cool robot that is already available in Japan and it has cameras, can move around and it can blink and beep like the "real" one from the movies.


Hmm, this might look like a completely empty booth, but actually the very exciting dude there was showing invisible devices. Amazing, isn't it?


More cases and a lot of different displays on them. They all cost around 40 bucks, which is not much for computer cases anymore and the quality gets better and better.


The World Cyber Games 2007 Euro Championship was in hall 23 of the CeBIT. But it only was played from the 15. to the 18. March and it was all over when we were going into the hall.


Holy macaroni. This girl from Razer was throwing something at me while I was taking this picture. We could maybe count that as a girl looking at me while I'm taking a picture, but she was out to get me. This does not count, let's go on. And no, I did not catch the bandage.


AMD and ATI (also AMD) were in hall 23 too. Try to find the laptop facing in the wrong direction on this picture!


A cool Formula One racing car, which reminds me of the Speedy Racer Mod of the Racing Game. Ups, I already said too much ...


The ATI chick "Ruby" looks good as always.


And some cool water cooled gear with AMD stuff in it.


And finally some mainboards with AMD chipsets on a wall. Not sure if I would agree with AMD's new slogan "Smarter Choice" as they are currently very much behind the Intel Core 2 Duo CPUs and the Nvidia 8800 GPUs are also much faster than their ATI counterparts!


At the XFX booth the famous Quake world champion "Fatality" was playing against random people. Those two police girls where protecting the gamer area. Some people even wanted be be arrested .. strange people these gamers.


And another picture of those two nice girls. They had to be alert all the time, so I'm ok with them not noticing me taking pictures.


And this is Fatality playing against some random guy. They were playing Quake 4. The announcer had a pretty boring job:
00:00: The match begins ..
00:06: 1 to 0 for Fatality already
00:10: 2 to 0 for Fatality
..
00:36: 8 to -1 for Fatality ..
etc.


Oh no, we are at the Games Convention, aren't we? Just for a t-shirt everyone is going crazy again!


Now that is a pretty cool mouse. Mine can not do anything like that, I'm happy when it even works at all.


More cases, much more cases!


Power supplies and cases, almost like in a computer shop, just the prices are missing.


In hall 24 we saw a lot of hardware vendors, mainly for mainboards, graphic cards, power supplies and coolers. Zalman has really grown big. They got so many new products.


They do not only have coolers, power supplies and water cooling systems, but also cases like this one: The Z-Machine!


G.Skill memory. DDR3 and faster memory with 900Mhz, 1000+ MHz and more coming soon.


A pretty cool looking server mainboard for 2 CPUs and 16 memory slots, uffa!


Something is missing here? A nicely build PC with corsair ram and LEDs on them is there. A keyboard is there too and even speakers, but where the hell does the gamer look at? At a white wall?


DDR3 memory is coming. No, it is nothing really new, graphic cards have that already, but now the big memory sticks for the mainboards are going to be faster too. Also notice the cool looking cooler and the 8800 GTX build in here. I guess it is a Core 2 Duo system too, probably the X6800, which is still very expensive. The prices will drop in April however. Exciting times to come.


More stuff from Gigabyte. The hall was filled with hardware vendors, but we were tired and had not much power left walking through every single booth. For a more complete view about the halls 23-25 check out Guru3D's review of the CeBIT 2007. They have a lot of cool pictures too and more technical details.


HAH! Another Intel chick and this time I got her just as she was quickly moving forwad. Not only did I get her sharply while the world around her blurs away, she is also looking at me and smiling. Mission accomplished for today.


Professor Intel explains why everyone needs a X6800 quad core CPU for games today, when over 95% of all games do not even care if you have two cores. But still, even a single core from a Intel Core 2 system is much faster than anyone else can give you.


More cases .. Wasn't Apogee the software publisher behind Commander Keen and older jump and run games? That logo does look quite different.


Some big piece of cooling equipment. Not sure if that even fits in a normal desktop. But it is all passive and while mainboards are cooled passively too and the power supplies are very silent the only noisy part in your PC will probably be the hard discs. Haven't seen silent ones of those in a long time.


More cases .. and what the heck. Another girl is looking? The day can end now. It was not all that bad, but most pictures I took where blurry and when I gone through the photos I have selected for this post, I saw that all the girls from the first half were looking away ^^


Oh no, this poor guy just wanted to take a closer look at these half naked chicks and now he is in real trouble. I better keep going.


And there is the reason to buy a 1000W power supply (e.g. the Galaxy one from Enermax). Ok, you need about 24 hard discs, 4 CPUs and 2 8800 GTX graphic cards to even get to 933W, but does not everyone have such a PC at home? The raid controller here is looking cool, just 6 ports which 4 sata cables coming out of it. I did not know the vendor (BMC or something), but other RAID controller suppliers like Highpoint had similar cards too.


That's it for me. Time to get some rest. Next big fair will be the Games Convention in Leipzig in August, but there are a few smaller conferences till then and I will keep shooting photos :-)

 Friday, March 16, 2007
Friday, March 16, 2007 1:19:59 PM UTC (  |  |  |  |  |  )
I originally wanted to finish this at Monday or Tuesday, but I had not enough time this week to improve much on the Dungeon Quest game. Many of the cool features of the game were already implemented in some unit tests at the GDC like splitscreen support and shadow mapping, but we had not time to test and finetune all that. There were also a lot of bugs and smaller issues in the beta version. Below is a long list of all changes and some new screenshots. When the XNA Update is available that allows deploying to the Xbox 360 with just binaries I will provide an updated version that runs on the Xbox 360 too and supports splitscreen multiplayer gaming.

Download the game installer here (40 MB): DungeonQuestSetup.zip
Alternative download (slow! from this site): DungeonQuestSetup.zip

Note: This game requires a Shader Model 3.0 GPU as it was build for the Xbox 360 and optimized that way. For lower end PCs it pushes way too many polygons each frame anyway so that it will be too slow. If you have a low end SM 3.0 GPU (like the Nvidia GeForce 6600), make sure you run in a lower resolution (see below for details).

Here is a little video from the current version of the game. Enjoy!

Screenshots:

Ok, let's get started. What is this guy doing there. He doesn't look very friendly, maybe it is better to hit him in the head!


First quest completed. This key is important to open the door to the second level.


Nonstop fighting action. Well, at least if you don't lose your way.


This is how it looks like after I got angry. I told those guys, don't start any fights!


Ohh no. I did not use all my skills (see right side) and this Ogre killed me too quickly. I guess I have to start over.


The credit screen when the game ends. Notice my book :)


No reason to stop, let's start over and try again. The fight is continuing. The game is not that hard, you just have to use all skills and avoid being hit by fireballs or big enemies when you have low hit points.

Improvements:

  • Improved performance a lot by optimizing some internal code and using all ps3.0 shaders now (sad thing is it only runs with ps3.0 hardware now).
    TIPP: If you have a low spec ps3.0 graphic card (like the GeForce 6600 or lower) use a smaller resolution, the game will run much faster. Use the DungeonQuestSettings.xml file and enter a smaller resolution there (e.g. 800x600). The game is heavily GPU bound (like all my games) and it pushes several million polygons each frame (scene alone has almost a million polygons, but it has to be rendered 3 times for all shadow mapping and post processing effects). Runs on XBox 360 or GeForce 7x hardware very good with 100fps and more.
  • Fixed parallax mapping for the cave and improved the specular effects, looks much nicer now. Also increased view distance and light affect range.
  • Improved the music and sound effects, also added a lot more events and little sounds.
  • Added many text messages to help the player understand the game better
  • Check if computer can do ps 3.0, else shows big message on screen.
  • Support for 64 bit systems (did not start before)
  • Reduced glow in post screen (see comments of beta version)
  • Fixed game logic and quests (did not work at all in the beta)
  • All game actions get a nice message now in the center (killed ogre, got key, quest complete, new weapon, etc.)
  • Implemented several new animations for hitting and dying
  • Fixed text size in 3:4 resolutions (did only look correct in 16:9)
  • Improved gravity (much stronger now) and fixed several collision bugs
  • Fixed collecting key, added it to the UI and also allowing dropping weapons now
  • Allow switching weapons (right/left shoulder buttons or Q/E or Mouse wheel)
  • Selected enemy ring to help you see which enemy is attacted
  • Rumble Xbox 360 controller when hit/getting hit
  • Added end screen and credits with book link, credits
  • Improved weapons, damages and made the game more balanced.
  • Show high score list when game over
  • Mouse support for dungeon quest (shooter like, just asdw for moving)
  • Block door when we don't got key! Also added sphere collision for monsters (they don't intersect anymore)
  • Fixed shadow mapping and added a lot of cool shadow effects and pseudo point light sources.
  • Added nice looking vista compatible icon, also tested the whole game on vista, runs fine :)
  • Added some grunt sounds and an ambient theme in the background!
  • And many more ..
The source code is not yet released. I will probably work a little bit more on on when the XNA Update comes out and then maybe release it. Sorry for now, I know many people want to take a look right now ^^
 Monday, March 12, 2007
Monday, March 12, 2007 11:07:05 AM UTC (  |  |  |  |  )
Here are some more pictures from the last few days of the GDC. We did not have enough time to go through all the pictures in the last days.

Chris and me are currently working on the last issues with Dungeon Quest, an updated version will be finished soon.


This was at the beginning of Day 3, when we still got over 14 hours left. You can see our sign from the XNA Challenge and a little sign for my upcoming book :)

The Lobby of the Moscone North Building, which was also the XNA Lobby and the place we stayed all day to finish our game. The Gears of War theme music was getting annoying after hearing it a few times, but after hearing it for 4 straight days I guess I need a few weeks of silence before I can ever play Gears of War again ^^


Two of the other teams working hard on their XNA games.


Gabe Ahn from Sony introducing us at the COLLADA round table I was speaking at on Wednesday (left to right): Shaun Leach from Zipper Interactive, Ken Normann from EA (working on the Sims team) and me (some XNA guy from exDream in Germany? ^^)

The panel discussion was good IMO, hopefully more and more people get attracted to COLLADA and start using it for their tools.


The outside world at day 4, it might not look very bright to you, but after 2 days with just 2-3 hours of sleep this looked incredible bright and it was hard to open the eyes out here. But the weather was nice all week and it was warm enough to wear t-shirts all the time except at night.


A picture from Microsoft's XNA Party at Thursday evening. It was still early and we prepared our presentation of the XNA game we did in 4 days: Dungeon Quest. We had many problems in the last two days and just skipped some of our features, but we got it done and it looks really good, especially for the short time frame we had to develop the game.


Christoph and me standing proudly in front of our game at the XNA Party. Many people came and played and congratulated us on the great result.


One final picture from Saturday morning before we were leaving to the airport to head back to Germany. The trip was 25 hours for me and after that I felt as tired as Friday, I probably need to sleep for a week now .. but I got work to do ..

 Tuesday, March 06, 2007
Tuesday, March 06, 2007 11:14:02 PM UTC (  |  |  |  |  |  |  )
Sorry for not blogging yesterday. We were working all day on our game here on the GDC 2007 and it was very noisy and distracting here. If you want to watch us work: We are in the Moscone North Lobby and shouldn't be hard to find. Anyway, I will probably just blog at the morning of the next day for each day here.

Our game is called Dungeon Quest and we are absolutely insane because we want to create a Multiplayer Role Playing Game in just 4 days and we haven't even thought of all the distractions here. I will try to give you a screen per day and tell you want we have done so far.

Yesterday we worked purely on the environment, the level and the general game idea and some smaller details. As I said before we started with nothing, I just created a new project and Christoph did just open up 3DS Max and started working, there are no textures or models we have already done. And we both have never worked on a role playing game before.

In the morning we still had a lot of problems getting our computers up and running (3DS Max wasn't starting, I needed lots of plugins and tools, stuff like that). It usually takes a day or more to set up a development machine in our opinion. Probably a week until you got all the important tools installed you forgot in the first day. Anyway, we finally started to build the cave, create new custom collada exporter for that and placed lights. While Christoph was working on the 3D cave I was getting the engine up and running and noticed that there are many things that have to be done:

  • Like just rendering some text on the screen,
  • Finding a good font for that,
  • Creating a bitmap font,
  • Also making other UI elements (selected monster, health, level up, etc.)
  • Rendering shaders and playing around with point lights
  • Working on many other smaller issues like effects, billboards, vertex formats, etc.
  • Most unit tests require a good camera and testing the cave level itself was very hard, so I already created the ThridPersonCamera class we going to use for this game.
I started with most classes that are required for that and I also could drop in some Texture/Font code from Rocket Commander XNA, but most of the shader and collada import classes had to be created from scratch. Then we spend all evening and even this morning tweaking the shaders, getting all the lights working, adding fog, figuring out how to do 6 complex light passes in one shader, and so on.

Today we will focus on building the main character, getting some collision detection working and some basic game logic (keys, doors, monster state machines, player behaviour and animations). Hopefully I can provide you with a nicer screenshot tomorrow, just an empty level is pretty boring.

And here are some pictures from yesterday for your enjoyment.

This is the lobby of the Moscone North building at the GDC. The GDC Expo hall is below us and on Monday the Serious Games Summit was here, but we hadn't had any time to even check out who is speaking at the actual GDC. At wednesday I will be at some Collada round table speaking about Collada and issues we had with it so far ^^


There are many art galleries here in San Francisco and the Asian population is also huge. It was not hard to find an Asian Art Gallery.


Here you can see an ad for Microsoft's Vista Operating System directly in front of the big Mac building here (seems a lot of people got one here). There is nothing interesting about a Mac for a game developer IMO.


Alcatraz at day time. I already showed you a picture at night earlier.


A view from my desk at the Hotel over San Francisco. Its still impressive every day you wake up ^^


And some picture of a place I don't know the name of. Usually I would look it up, but I have to go back to work. Cya tomorrow!

 Sunday, March 04, 2007
Sunday, March 04, 2007 9:39:25 PM UTC (  |  |  )
We arrived yesterday in San Francisco, but we were to tired to upload all the pictures we made (or Christoph made, I just watched him take photos ^^ my cell camera is not that good). But today we got a free day till the GDC, which starts tomorrow. Here you go, enjoy!

Let's go, this is Germany at night, very exciting, isn't it? We started our journey at 4:20 am

If you have read my blog before you already know how the Hanover Airport and Amsterdam airports look like. We did not take much pictures there anyway. The plane ride was long as usual (11 hours alone from Amsterdam to San Francisco) and it was a really long day (~33 hours). This was our plane, a pretty big Boeing 767.

We arrived at our hotel at 3:00 pm and were pretty amazed about the 36 floors.

But then we saw this room. There must be something wrong, we are not the President. The registration gave us the wrong key to a conference room, but we stayed there for a while, took pictures and enjoyed the room and bar ^^

Our rooms were not bad either, pretty nice view over San Francisco.

Our Hotel (The Argent) from below.

And a view over San Francisco at the evening. We spotted the Golden Gate Bridge (right from this picture) and the Alcatraz Island.

And finally San Francisco at night. We were pretty tired by now and I still had to install stuff on my laptop, after merging the 2 HDDs all my data was lost and I had to download and install everything again, but at least the HDDs are faster now (yeah, Raid 0 kamikaze). The Chinese had some parade below us and made some noise, but we were very tired and went to sleep early.


More pictures tomorrow.

 Tuesday, February 27, 2007
Tuesday, February 27, 2007 4:52:44 PM UTC (  |  |  |  |  |  )
                  

Every year in march the GDC is San Francisco or San Joe and we all are reading the announcements, papers and articles coming from there. It was always interesting to read about the stuff going on there (gamedev.net has a good coverage each year), but I could never attend. The cost of flying over there and staying there for a week plus the incredible high attendee fees kept me out of this conference in the past. As you can read on www.exDream.com we usually attend the CeBIT here in Hannover instead and go to all the other conferences and fairs here in Germany ^^

Anyway, a few weeks ago Microsoft asked me to come to the GDC and be part of one of their XNA "Dream Team"s. The idea for these teams is to build a game while we are on the conference in 3-4 days (from Monday to Thursday) and that sounds crazy enough for me (who the hell wants to make a game in 3-4 days? and how?).

There will be a big party Thursday night and all the XNA games will be presented there. Some information about that can be found on the XNA Team Blog.

My idea was to create one of the most complex game types there is: A multiplayer roleplaying game. And yes in just 3 days and starting from scratch ^^
It will probably be a little like Zelda, but we are focusing our efforts on creating one cool looking level and with some enemies and maybe a few quests. Everyone I told this idea said the same thing you are thinking right now: Impossible. Yeah, I know, but it is fun anyway to try. Hopefully we will come up with something good looking till Thursday then.

I will blog every day with screenshots and the daily development process directly from the GDC and you can see how far we get. My friend Christoph Rienaecker (WAII) is also coming with me and helping me out modeling the player and enemies as well as the level so I can focus on programming :-)

If you are also attending the GDC and want to meet with me, drop me an email or write in the comments. See ya there, or not ^^ but as usual I will make pictures and document my experiences for all of you who won't attend.

 Sunday, February 25, 2007
Sunday, February 25, 2007 9:39:45 PM UTC (  |  |  |  |  |  |  )
Don't ask me how I managed to not post anything this week. My plan was certainly different, but I didn't want to post my problem with this little project too early. To make up with the lack of blog posts this year until now this is going to be a very long and hopefully very useful article :-)

Content


Video, Screenshot and Downloads

First of all, here is a video for the project I'm talking about here:

Screenshot of the same scene (better quality since youtube videos just suck quality wise):

Before you start reading this article I suggest you download the executable and source code first in case you want to try it out directly while reading. The whole project is based on the RocketCommanderXNA engine and just adds the ColladaModel.cs class, which does all the amazing stuff you see in the video ;-) The video above shows shadowing from the XNA Shooter engine, which is not yet released and their fore not included in the downloads. The rest of the code is the same, just the shadow map rendering was removed. More details about shadow mapping in XNA can also be found in my book (plug plug plug ^^).

  • The source code is about 2.6 MB and contains projects for XNA Game Studio Windows and the Xbox platform, as well as a project for Visual Studio 2005. It was tested on Windows XP and Vista 32 and 64 bit as well as on the Xbox 360.
    SkinningWithColladaModelsInXnaSourceCode.zip (2.6 MB)
  • The executable contains the output (32 bit Windows, but runs on 64 bit and Vista too) from the project in case you just want to try it out or do not have XNA Game Studio Express installed yet. You still need the XNA Framework for this program, download it here, if you do not have it installed yet! You also need a Shader Model 2.0 capable graphic card.
    SkinningWithColladaModelsInXnaExecuteable.zip (2.5 MB)

    Update 2007-02-26: Fixed time steps, in release mode with more than 200-300 fps the animation was getting too slow. Now works flawless :)
Please note that the 3D Goblin Model was created by my friend Christoph Rienaecker (WAII) and if you want to use it, please credit him (see Readme.txt). The source code and collada loading class can be used freely too, but I want some credits too (at least in the source code ^^).


Introduction and why Collada?

OK, let's get started. I talked a lot about the XNA Content Pipeline and its problems on my blog, and in several recent interviews and also in my upcoming XNA book. For projects like Rocket Commander or even the Racing Game it was sometimes a little bit annoying, but I could do everything I needed by loading X files and adding some features to it to fix the tangents, load the correct shader techniques, etc.
However XNA does not support loading animation data or gives you a way to display them. You have to do all that work by yourself. This includes static mesh animations (like it was used in Rocket Commander, I just left it out in Rocket Commander XNA), but also skeletal animation with bones and skinned meshes.

There is a nice project on CodePlex called XNA Animation Component Library, but it only support FBX and ASCII X files (and recently BVH, ASF and AMC formats) and I could not get any of my test models to work with this library. The main thing missing here is good shader support and it also has a lot of problems with complex animated models. Other than that exporting 3D Models as X files is really a pain in the ass, no matter which exporter you use (Panda Exporter for 3dsMax was good a year ago, I still use it, now kiloWatt X file Exporter for 3dsMax is better, and the Microsoft X File Exporter for Max always sucked). Simple models might work, but the more complex 3D models get and the more meshes and animation data is stored in a scene, the more problems you will have. Sometimes it is not possible to reconstruct everything correctly on your importer side.

Anyway, at the very beginning of the Racing Game development there was no content pipeline in XNA (it was Beta 1) and I implemented loading 3D Models with help of the collada file format, which is basically just XML and very easy to read. For that reason it was relatively simple to get some 3D data loaded and displayed in the early XNA versions with help of vertex buffers. There were some problems with shader settings and I had to try many different exporters and ended up with the one from Feeling Software. Back then it had still some problems loading shaders and using the correct techniques, but the recent version (3.0.2) is much better and works like a charm.

After Microsoft had implemented the content pipeline and made it possible to load X and FBX files indirectly by going over the content pipeline I had to remove most of my collada code and re implement the model loading with the new framework. Loading and displaying 3D models was much simpler this way and especially some early unit tests were really simple, but as soon I tried shaders and loading tangents there were a bunch of problems. I reported many bugs back then and it has gotten a lot better, but I still had to fix several issues in the Racing Game and Rocket Commander XNA myself like finding out the correct shader technique and fixing tangent data with help of a custom model processor.

Some things like the level loading in the Racing Game just do not work with X or FBX files because they use splines, which are not exported at all in these formats. Collada came as the rescue again because it is really no big problem for this format. Later versions of the Racing Game removed the collada level loading and introduced a binary format for the levels, but the importer still accepts collada files.

Recently I wanted to test a couple of animated models and use skinning since it can often be more useful than static animations and it usually looks much better, especially for organic 3D models. As I said above I could not get anything working with the XNA Animation Component Library and I especially do not like the way they still use the content pipeline and the project is too complicated for me anyway (I just do not need 6 different file formats, I just want one and it should work perfectly with all the features I need).

After some searching I saw some guy called remi from the collada forum was working on importing collada models too and I posted some thoughts there too (maybe this was a mistake, I got many emails asking me about tips ^^). Here is the thread about that in the collada forum. He has provided a test project with some models and it works nice for static meshes without shader information, but that was not really what I was searching for.

This was a month ago and I had not much time working on any of these issues, but after restarting my blog earlier this week I thought this would be a nice topic to talk about. I'm still pretty busy with Arena Wars Reloaded, but I worked a couple of hours every day on this little test program for the past few days. The rest of this article explains the project and into which problems I ran.

Class Overview

Before we go into the details here is a little class overview of the project. As I said before the Rocket Commander XNA engine was used to get up and running with the project without having to re implement the basics. Most of the classes were already in place and had not to be changed. ColladaModel and SkinnedTangentVertex are the 2 new classes and to help us out with the XML loading of the collada files the XmlHelper class was also brought into the project.

I wrote the ColladaModel file from scratch, but I could reuse some of the static mesh loading code I had done last year. All of the bone and animation loading code was just try and error and I only used the collada specifications as a source of help, but most stuff had to be tested with the unit tests at the end of the class many many times.

The main program just calls the unit tests TestGoblinColladaModelScene or TestShowBones, there is no real game here, its just a test program. The unit test then calls several Standard Engine classes for doing all the post screen processing, rendering the ground plane, etc. More importantly the ColladaModel class itself basically just provides a constructor and a Render method, everything else is private and will be handled automatically for you. Most people might ignore this, but this is always the most important thing about my classes, the use should be as simple as possible and when I look at the projects mentioned above I really ask myself why people sometimes think so complicated.

The internal Bone class inside ColladaModel is used to store all the bones in a flat list, but each entry has a parent and a list old children bones. This way the list can be used both in a simple for loop, but you can also go through it recursively (which is obviously slower and often more complicated). We will talk about the loading process in a minute.

All the mesh data is stored in vertices, which is just a list of SkinnedTangentVertex structs. The SkinnedTangentVertex struct is very much like the standard TangentVertex struct used in Rocket Commander XNA, but it has 2 new members: blendIndices and blendWeights. Both are in the form of Vector3 and their fore can hold 3 values allowing us to interpolate up to 3 bone influences for each vertex in the shader. More is often not required and we have to re normalize all bone weights anyway, so skipping the least important bone weights is not a big deal. My test models use mostly max. 2-3 influences. Please also note that the vertex shader has now a lot more work to do with all that skinning and you should really optimize it as much as possible. Both the number of vertices we have to process is important (we will talk about optimizing that in the optimizing part of this article) and also the number of instructions the vertex shader has, both numbers should be as low as possible. The GPU is really fast processing this data, but if you do not have animated geometry with bones, there is no reason to let it process all that data (which can make the vertex shader 2-3 times longer and slower). The ground of our test scene does not use a skinning shader as an example.

And finally there are some additions to the ShaderEffect class. First of all we got a new shader called "SkinnedNormalMapping", which does the same thing as the normal mapping (or parallax mapping) shader, but it has an array of 80 bone matrices we can use for skinning. These matrices are set with help of the SetBoneMatrices method in the Set Parameter region of ShaderEffect.cs.


Loading collada files

Before we go into the details of the loading process, lets make sure we read the summary of the class first because it clearly states what we can do and can't do with this class. This is just a test project and I wanted to make things as simple as possible for both you as the reader and for my requirements.

   /// <summary>
   /// Collada model. Supports bones and animation for collada (.dae) exported
   /// 3D Models from 3D Studio Max (8 or 9).
   /// This class is just for testing and it will only display one single mesh
   /// with bone and skinning support, the mesh also can only have one single
   /// material. Bones can be either in matrix mode or stored with transform
   /// and rotation values. SkinnedTangentVertex is used to store the vertices.
   /// </summary>
   class ColladaModel : IDisposable

OK, with that said let's go directly into the loading code, which is located in the constructor of this class. All variables used in these class are just for internal use, all you need to know are the vertices and bone lists, which I have already mentioned, and the vertex and index buffers, which are used for rendering. All the rest of the variables are just there to help us loading the collada file (don't worry, there are not many variables anyway and most methods are short too).

    #region Constructor
    /// <summary>
    /// Create a model from a collada file
    /// </summary>
    /// <param name="setName">Set name</param>
    public ColladaModel(string setName)
    {
        // Set name to identify this model and build the filename
        name = setName;
        string filename = Path.Combine(ColladaDirectory,
            StringHelper.ExtractFilename(name, true) + "." +
            ColladaExtension);

        // Load file
        Stream file = File.OpenRead(filename);
        string colladaXml = new StreamReader(file).ReadToEnd();
        XmlNode colladaFile = XmlHelper.LoadXmlFromText(colladaXml);

        // Load material (we only support one)
        LoadMaterial(colladaFile);
        
        // Load bones
        LoadBones(colladaFile);

        // Load mesh (vertices data, combine with bone weights)
        LoadMesh(colladaFile);

        // And finally load bone animation data
        LoadAnimation(colladaFile);

        // Close file, we are done.
        file.Close();
    } // ColladaModel(setFilename)
    #endregion

As you can see first of all the filename is constructed and we just load the file as a text file and throw it to the XmlHelper.LoadXmlFromText helper method (which just uses the existing XmlDocument functionality to load xml from a string). We now get the main collada node, which contains all the children nodes we need for loading the materials, bones, meshes, etc.

Next all the materials are loaded, but we are only going to use the first one we find because we only support one single mesh anyway. The LoadMaterial method goes through all used textures and shader effects from the collada file and constructs the material at the end of the method with help of a new constructor in the Material class itself. While this is cool and a lot easier than loading material data from x files, it is not very exciting code, so let's move along.

Even through the bones are located at the end of the collada file, we have to load them first because all our other loading methods, specifically LoadMesh and LoadAnimation need the bone tree structure and the overall bone list to work. All bones are loaded in sequential order because we want to make sure that we can use the animation matrices later in an easy way without having to check the parent order all the time. Only this way we can be sure that going through our flat bones list we still respect the internal tree structure and always initialize the parents first because the children bones matrices are always multiplied with the parent bones.

    foreach (XmlNode boneNode in boneNodes)
        if (boneNode.Name == "node" &&
            (XmlHelper.GetXmlAttribute(boneNode, "id").Contains("Bone") ||
            XmlHelper.GetXmlAttribute(boneNode, "type").Contains("JOINT")))
        {
            // [...] get matrix
            matrix = LoadColladaMatrix(...);

            // Create this node, use the current number of bones as number.
            Bone newBone = new Bone(matrix, parentBone, bones.Count,
                XmlHelper.GetXmlAttribute(boneNode, "sid"));

            // Add to our global bones list
            bones.Add(newBone);
            // And to our parent, this way we have a tree and a flat list in
            // the bones list :)
            if (parentBone != null)
                parentBone.children.Add(newBone);

            // Create all children (will do nothing if there are no sub bones)
            FillBoneNodes(newBone, boneNode);
        } // foreach if (boneNode.Name)

As you can see the code uses the XmlHelper class extensively because otherwise the code would look much uglier and complex. Next we have to load the mesh itself, this is probably the longest method and not easy to figure out if you work with collada for the first time. Good thing I had already done that in the past and I only had to add the code for getting the blend weights and indices. The following code does load all the weights, which we will use later to fill the blendWeights and blendIndices members of the SkinnedTangentVertex struct vertices list. The code for that is actually a little bit more complicated because we have to find out which weights are the top 3 weights for each vertex in case more than 3 are given.


    #region Load weights
    float[] weights = null;
    foreach (XmlNode sourceNode in skinNode)
    {
        // Get all inv bone skin matrices
        if (sourceNode.Name == "source" &&
            XmlHelper.GetXmlAttribute(sourceNode, "id").Contains("bind_poses"))
        {
            // Get inner float array
            float[] mat = StringHelper.ConvertStringToFloatArray(
                XmlHelper.GetChildNode(sourceNode, "float_array").InnerText);
            for (int boneNum = 0; boneNum < bones.Count; boneNum++)
                if (mat.Length / 16 > boneNum)
                {
                    bones[boneArrayOrder[boneNum]].invBoneSkinMatrix =
                        LoadColladaMatrix(mat, boneNum * 16);
                } // for if
        } // if

        // Get all weights
        if (sourceNode.Name == "source" &&
            XmlHelper.GetXmlAttribute(sourceNode, "id").Contains("skin-weights"))
        {
            // Get inner float array
            weights = StringHelper.ConvertStringToFloatArray(
                XmlHelper.GetChildNode(sourceNode, "float_array").InnerText);
        } // if
    } // foreach

    if (weights == null)
        throw new InvalidOperationException(
            "No weights were found in our skin, unable to continue!");
    #endregion

For more information about the mesh loading please check out the last region in the LoadMesh method, it should explain all the important steps in case you want to add something there or just look how it works.

Problems with the animation data

Getting the animation data was not so easy. First of all I never had done this before because my collada files for the Racing Game were all just static meshes and I really did not need any animation there. Everything that is actually animated in the Racing Game was done directly in XNA, not in 3D Studio.

The first problem is the many formats that animation data can be in. You can have rotations around any axis or translations and even scalings, but most of your bones will only use one or two of these if they are animated at all. Alternatively all the animation data can be computed directly by the exporter plugin in 3D Studio Max and this way you can make sure that all the animation data is in the correct format. It makes testing certainly a lot harder and if you don't even know the format the matrices are in or how to apply them to each other in which order, you are in a world of trouble.

This is exactly what happened to me, I had most of my test models with rotation animation data only, but the Goblin above from my friend Christoph was done with another technique and the exporter could only export the matrices, so I had to support that too. After some try and error I managed to get the basic animations for my test models working. They are all in the project, feel free to load and test them. To test the bone animations I used the following unit test:

    #region Unit Testing
    // Note: Allow calling all this even in release mode (see Program.cs)
    #region TestShowBones
    /// <summary>
    /// TestShowBones
    /// </summary>
    public static void TestShowBones()
    {
        ColladaModel model = null;
        PlaneRenderer groundPlane = null;
        // Bone colors for displaying bone lines.
        Color[] BoneColors = new Color[]
            { Color.Blue, Color.Red, Color.Yellow, Color.White, Color.Teal,
            Color.RosyBrown, Color.Orange, Color.Olive, Color.Maroon, Color.Lime,
            Color.LightBlue, Color.LightGreen, Color.Lavender, Color.Green,
            Color.Firebrick, Color.DarkKhaki, Color.BlueViolet, Color.Beige };

        TestGame.Start("TestLoadColladaModel",
            delegate
            {
                // Load our goblin here, you can also load one of my test models!
                model = new ColladaModel(
                    //"Goblin");
                    //"test_bones_simple_baked");
                    //"test_bones_advanced_baked");
                    "test_man_baked");

                // And load ground plane
                groundPlane = new PlaneRenderer(
                    new Vector3(0, 0, -0.001f),
                    new Plane(new Vector3(0, 0, 1), 0),
                    new Material(
                        "GroundStone", "GroundStoneNormal", "GroundStoneHeight"),
                    50);
            },
            delegate
            {
                // Show ground
                groundPlane.Render(ShaderEffect.parallaxMapping, "DiffuseSpecular20");

                // Show bones without rendering the model itself
                if (model.bones.Count == 0)
                    return;

                // Update bone animation.
                model.UpdateAnimation(Matrix.Identity);

                // Show bones (all endpoints)
                foreach (Bone bone in model.bones)
                {
                    foreach (Bone childBone in bone.children)
                        BaseGame.DrawLine(
                            bone.finalMatrix.Translation,
                            childBone.finalMatrix.Translation,
                            BoneColors[bone.num % BoneColors.Length]);
                } // foreach (bone)
            });
    } // TestShowBones()
    #endregion

The most important call here is the call to UpdateAnimations, which goes through the list of bones and updates the so called finalMatrix from the Bone class for each of the bones. In earlier versions this code was horribly complicated and still had a lot of problems, but as soon as I removed all the rotation, translation, scaling, etc. animation support and just allow loading the correctly baked matrices from the collada files, the code has become much simpler (the actual code does have some optimizations in it, but it is basically the same as the posted code here):

    #region Update animation
    /// <summary>
    /// Update animation.
    /// </summary>
    private void UpdateAnimation(Matrix renderMatrix)
    {
        int aniMatrixNum = (int)(BaseGame.TotalTime * frameRate)) % numOfAnimations;

        foreach (Bone bone in bones)
        {
            // Just assign the final matrix from the animation matrices.
            bone.finalMatrix = bone.animationMatrices[aniMatrixNum];

            // Also use parent matrix if we got one
            // This will always work because all the bones are in order.
            if (bone.parent != null)
                bone.finalMatrix *=
                    bone.parent.finalMatrix;
        } // foreach
    } // UpdateAnimation()
    #endregion

For the loading itself we just have to make sure that the animationMatrices are the correct ones. Collada saves them in a absolute mode. Earlier code from me constructed relative matrices (relative to the initial bone matrix), it was easier to construct relative matrices from the rotation, translation, etc. animation data, but much harder to use these matrices later for the animation. Having these absolute matrices makes the UpdateAnimation code so much easier, so make sure you always use them this way.

However, when rendering the vertices later we can't use the absolute matrices because the vertices have to transformed first to get into a relative space to the bones, rotations should not be around the origin, but around the bone positions. Luckily for us (and you should have seen my face when I finally found out that these matrices already exist in collada and I did not have to create them myself in my own over complicated way ^^) collada stores the so called invBoneSkin matrices for each bone. By applying these matrices we can easily get the bone matrices we need for rendering, these are directly passed to our shader (as compressed 4x3 matrices BTW to save shader constants, the code for that is a little bit more complex, please check out ShaderEffect.cs and the SkinnedNormalMapping.fx shader itself for details).


    #region GetBoneMatrices
    /// <summary>
    /// Get bone matrices for the shader. We have to apply the invBoneSkinMatrix
    /// to each final matrix, which is the recursively created matrix from
    /// all the animation data (see UpdateAnimation).
    /// </summary>
    /// <returns></returns>
    private Matrix[] GetBoneMatrices(Matrix renderMatrix)
    {
        // Update the animation data in case it is not up to date anymore.
        UpdateAnimation(renderMatrix);

        // And get all bone matrices, we support max. 80 (see shader).
        Matrix[] matrices = new Matrix[Math.Min(80, bones.Count)];
        for (int num = 0; num < matrices.Length; num++)
            // The matrices are constructed from the invBoneSkinMatrix and
            // the finalMatrix, which holds the recursively added animation matrices
            // and finally we add the render matrix too here.
            matrices[num] =
                bones[num].invBoneSkinMatrix * bones[num].finalMatrix * renderMatrix;

        return matrices;
    } // GetBoneMatrices()
    #endregion

And this is what you finally get after executing the TestShowBones unit test. I had not implemented mesh loading or the shader itself at this point. I just was loading and testing the bones itself.

 

Optimizing the vertices

One major problem with the loaded mesh is the high vertices count, I had two test models with 30k and 60k vertices and as you can imagine this will slow down the vertex shader quite a lot and it is really not necessary to process all these vertices because many of them are exactly the same. The reason we end up with an unoptimized vertices list anyway is because collada stores seperate lists for each component we have to put together at the end of the LoadMesh method. By doing so we have to duplicate the data many times and we just can't know how often each part is reused and how often the overall vertex changes. If just the texture coordinate or normal differs, we have a completely different vertex, which will produce different results in the vertex shader, so just merging everything together is not that simple.

The rendering uses an index buffer anway, but for the data constructed in LoadMesh it would just be sequential (0, 1, 2 form the first polygon, 3, 4, 5 the next, etc.). Instead of having one index for each vertex, we can often reuse the same vertex 3 or 4 times and reducing the number of vertices drastically. This has also the advantage that we can store much more vertices and complexer meshes even if we still use ushort (16 bit) for our indices (which is half the size of ints and their fore faster). For example if you have 150,000 vertices, but you can reduce them to 40-50,000 optimized vertices, they all can be indexed with ushorts :-)

The easy solution is just to optimize all the vertices after all of them have been loaded, if you have a binary format and do not use collada directly, this solution is absolutely great, but it still will take a lot of time processing the collada models if they just have many vertices because we have to check each vertex against each other one and that can be a lot of compares if you have 60 or 70 thousand vertices in a mesh. It actually takes up to a whole minute just to compute that and I have no slow computer ^^ Here is the method that does all that for us:

    #region OptimizeVertexBufferSlow
    /// <summary>
    /// Optimize vertex buffer. Note: The vertices list array will be changed
    /// and shorted quite a lot here. We are also going to create the indices
    /// for the index buffer here (we don't have them yet, they are just
    /// sequential from the loading process above).
    ///
    /// Note: Slow version because we have to check each vertex against
    /// each other vertex, which makes this method exponentially slower
    /// the more vertices we have. Takes 10 seconds for 30k vertices,
    /// and over 40 seconds for 60k vertices. It is much easier to understand,
    /// but it produces the same output as the fast OptimizeVertexBuffer
    /// method and you should always use that one (it only requires a couple
    /// of miliseconds instead of the many seconds this method will spend).
    /// </summary>
    /// <returns>ushort array for the optimized indices</returns>
    private ushort[] OptimizeVertexBufferSlow()
    {
        List<SkinnedTangentVertex> newVertices =
            new List<SkinnedTangentVertex>();
        List<ushort> newIndices = new List<ushort>();

        // Go over all vertices (indices are currently 1:1 with the vertices)
        for (int num = 0; num < vertices.Count; num++)
        {
            // Try to find already existing vertex in newVertices list that
            // matches the vertex of the current index.
            SkinnedTangentVertex currentVertex = vertices[FlipIndexOrder(num)];
            bool reusedExistingVertex = false;
            for (int checkNum = 0; checkNum < newVertices.Count; checkNum++)
            {
                if (SkinnedTangentVertex.NearlyEquals(
                    currentVertex, newVertices[checkNum]))
                {
                    // Reuse the existing vertex, don't add it again, just
                    // add another index for it!
                    newIndices.Add((ushort)checkNum);
                    reusedExistingVertex = true;
                    break;
                } // if (TangentVertex.NearlyEquals)
            } // for (checkNum)

            if (reusedExistingVertex == false)
            {
                // Add the currentVertex and set it as the current index
                newIndices.Add((ushort)newVertices.Count);
                newVertices.Add(currentVertex);
            } // if (reusedExistingVertex)
        } // for (num)

        // Reassign the vertices, we might have deleted some duplicates!
        vertices = newVertices;

        // And return index list for the caller
        return newIndices.ToArray();
    } // OptimizeVertexBufferSlow()
    #endregion

 

Optimizing the Optimization

While this is all nice and dandy and we just optimized the rendering code by 20-30% (I tested with 9 goblins and using 3 passes for them, 2 for shadowing and 1 for the rendering), but the loading now takes painfully long. The main idea here is to not compare every single vertex against every other possible vertex because it does not make much sense, most of the vertices (>99,9%) will always be different. We only need to check the ones that share at least the same position.

I started with comparing neighboring vertices, but since the vertices are stored in index order, they are totally messed up, vertex 1 and 4383 can be equal, but if we just check -10 to +10 we are going to miss it. Instead we have to know which vertices come from the same position data, which we know since collada saves unique positions. All we have to do is to keep a list of all vertices that share the same position and then we can optimize the comparsions later on. Usually only up to 4 to 6 vertices share the same position, this way the whole comparison process just needs 60,000 * 6 comparisons, not 60,000*60,000 anymore.

    // Initialize reuseVertexPositions and reverseReuseVertexPositions
    // to make it easier to use them below
    reuseVertexPositions = new int[trianglecount * 3];
    reverseReuseVertexPositions = new List<int>[positions.Count / 3];
    for (int i = 0; i < reverseReuseVertexPositions.Length; i++)
        reverseReuseVertexPositions[i] = new List<int>();

    // We have to use int indices here because we often have models
    // with more than 64k triangles (even if that gets optimized later).
    for (int i = 0; i < trianglecount * 3; i++)
    {
        // [...] vertex construction

        // Remember pos for optimizing the vertices later more easily.
        reuseVertexPositions[i] = pos / 3;
        reverseReuseVertexPositions[pos / 3].Add(i);
    } // for (ushort)

And then finally the fast vesion of OptimizeVertexBuffer, which uses that data:

    #region OptimizeVertexBuffer
    /// <summary>
    /// Optimize vertex buffer. Note: The vertices list array will be changed
    /// and shorted quite a lot here. We are also going to create the indices
    /// for the index buffer here (we don't have them yet, they are just
    /// sequential from the loading process above).
    ///
    /// Note: This method is highly optimized for speed, it performs
    /// hundred of times faster than OptimizeVertexBufferSlow, see below!
    /// </summary>
    /// <returns>ushort array for the optimized indices</returns>
    private ushort[] OptimizeVertexBuffer()
    {
        List<SkinnedTangentVertex> newVertices =
            new List<SkinnedTangentVertex>();
        List<ushort> newIndices = new List<ushort>();

        // Helper to only search already added newVertices and for checking the
        // old position indices by transforming them into newVertices indices.
        List<int> newVerticesPositions = new List<int>();

        // Go over all vertices (indices are currently 1:1 with the vertices)
        for (int num = 0; num < vertices.Count; num++)
        {
            // Get current vertex
            SkinnedTangentVertex currentVertex = vertices[num];
            bool reusedExistingVertex = false;

            // Find out which position index was used, then we can compare
            // all other vertices that share this position. They will not
            // all be equal, but some of them can be merged.
            int sharedPos = reuseVertexPositions[num];
            foreach (int otherVertexIndex in reverseReuseVertexPositions[sharedPos])
            {
                // Only check the indices that have already been added!
                if (otherVertexIndex != num &&
                    // Make sure we already are that far in our new index list
                    otherVertexIndex < newIndices.Count &&
                    // And make sure this index has been added to newVertices yet!
                    newIndices[otherVertexIndex] < newVertices.Count &&
                    // Then finally compare vertices (this call is slow, but thanks to
                    // all the other optimizations we don't have to call it that often)
                    SkinnedTangentVertex.NearlyEquals(
                    currentVertex, newVertices[newIndices[otherVertexIndex]]))
                {
                    // Reuse the existing vertex, don't add it again, just
                    // add another index for it!
                    newIndices.Add((ushort)newIndices[otherVertexIndex]);
                    reusedExistingVertex = true;
                    break;
                } // if (TangentVertex.NearlyEquals)
            } // foreach (otherVertexIndex)

            if (reusedExistingVertex == false)
            {
                // Add the currentVertex and set it as the current index
                newIndices.Add((ushort)newVertices.Count);
                newVertices.Add(currentVertex);
            } // if (reusedExistingVertex)
        } // for (num)

        // Finally flip order of all triangles to allow us rendering
        // with CullCounterClockwiseFace (default for XNA) because all the data
        // is in CullClockwiseFace format right now!
        for (int num = 0; num < newIndices.Count / 3; num++)
        {
            ushort swap = newIndices[num * 3 + 1];
            newIndices[num * 3 + 1] = newIndices[num * 3 + 2];
            newIndices[num * 3 + 2] = swap;
        } // for

        // Reassign the vertices, we might have deleted some duplicates!
        vertices = newVertices;

        // And return index list for the caller
        return newIndices.ToArray();
    } // OptimizeVertexBuffer()
    #endregion

With this optimization loading is now pretty fast and rendering performs also nicely thanks to the quick shaders we will discuss below. When running ANTS Profiler over the new project the slowest line of code becomes the actual text parsing, actually the conversion of the long strings for all vertices data into the actual vertices float data, especially the positions array. But we can't do anything about that without loading the data binary and not parsing them ourselfs. It takes maybe half a second for a 50k vertices model to load, not great, but ok for our little test app.

Adjusting the shaders for skinned meshes

Now we got a bunch of vertices we can render, but as you know we need a shader to do anything in XNA, there is no fixed function pipeline. There are also no animation helper classes like in DirectX, but they won't help you anyway if you want to render with shaders. Transforming the vertices on the CPU may sometimes be a choice if you do not have many vertices and not many skinned models overall or if they all have to be updated the same way. But generally it is a much better idea to transform all the vertices on the GPU, which costs a little bit more instructions in the vertex shader, but the rest of the rendering stays the same. Most graphic apps are pixel shader bound anyway and I use fairly complex pixel shaders too. Additionally on Shader Model 4.0 cards like the GeForce 8800 with up to 128 parallel unified shader units you can do very complex vertex shaders and use simpler pixel shaders and it will just use more units for the vertex shaders automatically :)

We already have defined the bones matrix array for skinning above and we limited it to 80 bones per mesh, which is quite a lot. Even if you would spend 3 bones per finger and 20-30 bones for the body you would still have plenty of bones left for complex animations. Sure modelers will now say "thats not enough sometimes" ... well, you can always split up the mesh into several meshes with up to 80 bones each if you really need more. My graphic artists are happy with 80 bones ^^

If we want full Shader Model 2.0 support we can only be sure that we got at least 256 shader constants. NVidia has usually more (1024), but you still want your game to run on ATI cards too, especially older ones. Each constant can hold a float4 and we need 4 constants for each 4x4 matrix. This means we can only have up to 64 matrices with this limit and we still need some constants for the world, view, and projection matrices, the light and material values and anything else we want to do in our shader. You should reserve 10-20 constants for that and now we are down to less than 60 matrices, which might sometimes be too little.

Instead of splitting the mesh or providing a different code path in case the GPU can do more constants (I couldn't get that do work in XNA for some reason, not sure if there is some limit or if I made a mistake, my GPU should be able to do at least 1024 constants, and even 2048 for the 8800), there is a trick to save only a 3x4 matrix. The last colum is always 0, 0, 0, 1 if we have correctly applied the invBoneMatrix and the animation matrix (see GetBoneMatrices in ColladaModel for details and the order of the matrices). But saving 4 float3 values still needs 4 shader constants per matrix so we have to save it as 4x3 matrices instead.

My first idea was to grab the .w values and reconstruct the translation part of the matrix this way. This worked, but the resulting shader had 80 instructions (from abount 20 without skinning), which is not good for the resulting performance when rendering many skinned 3D models.

float4x4 RebuildSkinMatrix(float index)
{
    return float4x4(
        float4(skinnedMatricesVS20[index*3+0].xyz, 0),
        float4(skinnedMatricesVS20[index*3+1].xyz, 0),
        float4(skinnedMatricesVS20[index*3+2].xyz, 0),
        float4(
            skinnedMatricesVS20[index*3+0].w,
            skinnedMatricesVS20[index*3+1].w,
            skinnedMatricesVS20[index*3+2].w, 1));
} // RebuildSkinMatrix(.)

A better idea is to use the 4x3 matrix as a 3x4 matrix by just reversing the order we call mul. This involves some changes to the vertex shader code and looks a little bit confusing sometimes, but if you make sure you transform the world matrix the same way and use it in this reversed mul order too, everything works just fine. Another thing that can be optimized is to pre-multiply the indices of blendIndices for each vertex at the loading time. These indices never change and they don't really care if they are 0, 1, 2 or 0, 3, 6, etc. We save one instruction per matrix we are going to reconstruct (the rest is optimized out by the compiler). This is the much easier version of RebuildSkinMatrix, for more details take a look at the SkinnedNormalMapping.fx file:

// Note: This returns a transposed matrix, use it in reversed order.
// First tests used a 3x3 matrix +3 w values for the transpose values, but
// reconstructing this in the shader costs 20+ extra instructions and after
// some testing I found out this is finally the best way to use 4x3 matrices
// for skinning :)
float4x4 RebuildSkinMatrix(float index)
{
    return float4x4(
        skinnedMatricesVS20[index+0],
        skinnedMatricesVS20[index+1],
        skinnedMatricesVS20[index+2],
        float4(0, 0, 0, 1));
} // RebuildSkinMatrix(.)

This results in a vertex shader that has almost half as many instructions as before and their fore is twice as fast :) Good work. Performance tests showed that I could increase the framerate from 220 fps to 270 fps just by doing that (test scene with 9 goblins). The following code is actually more or less the only part you have to replace in an existing shader if you want to make it skinnable (plus providing the helper method and the skinned matrices too of course).


    // First transform position with bones that affect this vertex
    // Use the 3 indices and blend weights we have precalculated.
    float4x4 skinMatrix =
        RebuildSkinMatrix(In.blendIndices.x) * In.blendWeights.x +
        RebuildSkinMatrix(In.blendIndices.y) * In.blendWeights.y +
        RebuildSkinMatrix(In.blendIndices.z) * In.blendWeights.z;
    
    // Calculate local world matrix with help of the skinning matrix
    float4x4 localWorld = mul(world, skinMatrix);
    
    // Now calculate final screen position with world and viewProj matrices.
    float4 worldPos = mul(localWorld, float4(In.pos, 1));
    Out.pos = mul(worldPos, viewProj);

 

Post screen shaders for the final result

All the skinning code and bone transformations are nice once you get them done, but without a cool model and some post screen shaders to make the scene look more cool, it is only half the fun. Good think I got the Goblin 3D Model, thanks to Christoph (WAII) again. I also had a couple of other test models and another more complex 3D Model (big evil monster ^^) which was good for some stress testing, but the material just did not look that cool.

As you can see on the following image 6 render targets are used to accomplish the final image. Most shader passes do several things at once and the list of operations (see right side of the image) is longer than the list of used passes. Most of this was just trying to get the best looking values together quickly. If you are an experienced artist you can probably do much better than me, I'm just playing around with the shader parameters until I get bored and then I leave it the way it is. The sceneMap (render target nummero three) shows the unmodified scene without applying the post screen shaders. It does not look half as cool as the final result.

I hope you enjoyed this article and that you are not as tired as I am writing this all at once (uff). It was a fun project, I have already another one in mind for next week ;-) Take care. If you have problems, post a comment. Please note that not all collada models will work, you have to follow the rules of ColladaModel or improve the class a bit for other use

 

References and Links

 

 

 Tuesday, February 20, 2007
Tuesday, February 20, 2007 8:11:10 AM UTC (  |  |  |  |  )

Well, I was posting less and less on this blog and this gonna change now. From now on I will try to post often, maybe even daily. The blog posts will not be as long as before, I will just talk about whats on my mind each day. Initially this blog was started as a little diary for me and I will return to that initial idea.

As you can see I've updated my blog, added a couple of features and changed some pictures and styles. At the top you see a little collage of current game projects I'm working on. Most graphics are from Arena Wars Reloaded and the XNA Racing Game. I hope you like the overall design :-)

I will talk more about my current projects (see right side) in the next couple of posts and catch up with a couple of topics I have on my mind but not blogged about yet (FxCop stuff, CgFX, using Collada in XNA, etc.).

 Thursday, January 18, 2007
Thursday, January 18, 2007 10:03:40 AM UTC (  |  |  |  |  |  |  )
Not much going on here on my blog, but in reality I was quite busy finishing some projects.
Our whole team at exDream is also working hard on our upcoming game Arena Wars Reloaded.
But it will take another month until we can release some cool looking screenshots that will make you excited.

In the meantime you can check out this nice article with lots of interviews on gamecareerguide.com.
On page 3 I do answer some questions and talk about current projects I'm involved in, including the
Professional XNA Game Development book I've done. The book will come out in early may this year.

The article is 5 pages long and a nice read:
http://www.gamecareerguide.com/features/328/microsoft_xna_.php





While we are at it, I decided to finally post some high quality (1920x1200) Racing Game screenshots (formerly known as XNA Racer).
I don't know yet when it will be released, but it shouldn't take much longer :-)

Screenshot 1:


Screenshot 2:


Screenshot 3:


Screenshot 4:




Lately I'm also playing around with the Visual Studio "Orcas" CTP which was released a week ago. Runs fine side by side with all my other
Visual Studio versions, but some plugins do not work and most language extensions I have installed (like LinQ or ASP.NET Ajax) are just
missing, not sure yet how to fix that or if I will really develop with VS Orcas right now, there is not really an advantage yet.

And finally there is a big fight coming up: Me vs FxCop. I will discuss my experiences with FxCop in a few days after I have converted
Arena Wars Reloaded and fought agains the 7000+ warnings ^^
In smaller projects I had worked with FxCop before and some warnings are annoying, but usually easy to fix. It was a little harder in
the Racing Game XNA starter kit (see screenshots above) because that thing has already over 20,000 lines of code and many warnings were
just about my unit tests, which FxCop can't figure out (lots of uncalled methods). But I will discuss all of this in a few days. Not sure
if any other game development team even uses FxCop or similar tools. At least I have never seen a game (or even a big app) pass the crazy
FxCop rules.
 Friday, December 29, 2006
Friday, December 29, 2006 6:30:45 PM UTC (  |  |  |  |  |  |  )
I developed a little Shoot'n'up game in the last couple of days. It is actually quite fun to play. It is just one level and is kind of a prototype. The game will be released together with my XNA Professional Game Development book in a few months (it will be freely available from my website shortly after that). My book features many other games too, it is not just about one game, there are many arcade, action and other games in the book (about 8 games or so) and they will be described as I explain all the important aspects of Game Programming and the XNA Framework.

For now I can only give you a little video about XNA Shooter. I hope you like it.

A "little" 1920x1200 screenshot:

These days there are a lot of discussions about XNA, especially in the GameDev.net boards and of course in the official XNA forum by Microsoft.
http://www.gamedev.net/community/forums/topic.asp?topic_id=430119
http://forums.microsoft.com/msdn/showforum.aspx?forumid=846

I also want to mention a great article by the .NET Compact Framework team about the .NET performance on the Xbox 360 with the XNA Framework. The main issue here is the Garbage Collector, which is not generational and theirfore can only collect all the objects in the GC at once and not in 3 levels like in the normal .NET Framework, which can handle a lot more dead objects and more complicated situations.

Here are the links to the .NET Compact Framework on XNA article:
http://blogs.msdn.com/netcfteam/archive/2006/12/22/
managed-code-performance-on-xbox-360-for-the-xna-framework-1-0.aspx

http://blogs.msdn.com/netcfteam/archive/2006/12/22/
managed-code-performance-on-xbox-360-for-xna-part-2-gc-and-tools.aspx

From my experience there are a couple of things you have to remember when developing XNA games on the Xbox 360. All of these issue are not a big deal on the PC, but they can cost some extra time until you get them right. One of the main problems is that if you develop your game on the PC only and then test it on the Xbox 360 only at the end a lot of things may go wrong (bad performance on the .NET Compact Framework, UI elements at the border of the screen, which are just not visible on some TVs, bad Xbox 360 controller support, which is the main input device for Xbox 360s, etc.).

  • Test test test. This is the most important tip. Write unit tests and constantly test them on your PC AND your Xbox 360. I keep 2 projects open at the same time (both of them use the same files, but I only develop the PC solution and use the Xbox 360 solution for deploying and testing only). Almost all of my classes have unit tests and I constantly test them until they are completed.
  • Don't use foreach loops, especially not in tight render loops. This may sound a little crazy since it does not matter on a PC game and todays CPUs are fast enough to handle the creation and deletion of many thousand objects each frame, which most games don't even need. But on the compact framework you will spam the memory even with things like foreach loops because a new enumerator instance is created everytime you start a foreach loop. After a while there will be a lot of dead objects, which have to be collected. This can take some time and slow your game down immensely. The PC version might run at over 200 frames, but your Xbox 360 version is stuck at something like 30-40 frames. Avoiding creation of new data each frame and avoiding foreach loops (just replace them with normal for loops, it is mostly just 1 line of extra code) can improve your performance by a factor of 100% or more.
  • In Arena Wars I never created any data during the game. All objects were created at the beginning of each mission and they were reused (which was no big deal since the game principle did not allow an infinite number of units, it always stayed around the same because you get your money back from dead units to build new units). In later project I did not care so much about creating new objects and I coded just the easy way because unit tests drive you into a direction to quickly develop solutions, which work and are tested, but may not be the best in other situations like for the Xbox 360 .NET Compact Framework. That is ok because we can now use the unit tests to check if other solutions work just they way we expect them to work. For XNA Shooter and XNA Racer (and a couple of other new game projects) I now make sure that most of the game data is created at the beginning of each level and not dynamically during the game.
  • Save-Regions on TVs can be a pain in the ass. Just google for Xbox 360 screenshots and you will notice that the GUI (graphical user interface) looks a lot different from most PC games. PC games have often UI at the screen border showing you tips, little buttons and other not so important things. If you do that in your Xbox 360 game all of these UI elements may be cut of on a regular TV. For the XNA Shooter I had to rework all the UI elements because they just did not fit on a TV screen and it was not practical to put them in a bar (like the windows task bar) because it looks so different on the PC and certain TV monitors. Instead I put all UI elements in floating bars, which will be adjusted depending on the screen the user is looking at.
    These are some of the Save-Regions I have encountered:
    • PC: 100% visible
    • Xbox 360 connected through a VGA cable: 100% (or close to 100%) visible.
    • Xbox 360 connected to an old style monitor with SCART: around 92% visible.
    • Xbox 360 connected through Component cables to my new Dell 24" Monitor (yeah HDTV): around 93-95% visible (depends on the resolution).
    • Some old TV sets (according to the XNA docs and tips on the web) have a save region of 80-90%, but I never saw the 80% case, that is probably the worst case scenario.
    The important thing is to keep the important UI element in this inner 90% (or 93% if you want to be close to the edges) rectangle. This means instead of using a full 1920x1080 pixel resolution you only use 90% of it (1728x945). Or just start rendering UI elements at about 5% of the screen (x coordinate: 96, y coordinate: 54). This pixel locations obviously depend on the screen resolution, just calculate them in your main class and use them whenever you render UI.
  • There are probably a lot more tips I can give, but I'm to lazy right now. Maybe more in a little while :)

Btw: I currently also do a lot of OpenGL development again and I have to say I have totally forgotten about the way you can program OpenGL. It is often a lot easier, it only gets hard if something does not work the way you expect it to be (but thats hard in DirectX too). Well, the most annoying part is of course that you have to wrap all OpenGL methods through PInvoke and that just costs time. On the other hand if you already have a robust framework (like I have with Arena Wars, hehe), it is relatively easy to plug in new features. It also took not long to learn the differences between glsl and hlsl. I do currently also test out the FX Composer 2.0 (alpha), which has a great idea behind it, but it is too much like Render Monkey and that is never a good thing. Render Monkey by ATI is just overcomplicated and hard to use (and was not updated for 2 years, which shows that no one even uses it anymore). The great thing about FX Composer 1 was the fact it was so easy to use and it did only support a very limited feature set. It is not the best tool ever, but it was certainly a lot easier to use than FX Composer 2.0, which will hopefully be improved before NVidia release it.
I have confidence that NVidia will deliver a great tool as always, but they have lost a lot of fans in the last months because of the lack of drivers for Vista, especially for the Geforce 8800, which does not work at all in Vista, but it is the only card on the market that even supports Direct3D 10 (and the new cool unified shader technology in DirectX). The only way you can currently use the new graphic card features is to program them yourself natively with OpenGL ... but my 8800 is in repair anyway, else I would have tried out some of the new features by now.

 Sunday, December 24, 2006
Sunday, December 24, 2006 7:08:16 AM UTC (  |  |  |  |  |  |  )

ArenaWars Reloaded - Coming Soon
Hey now!

Before you read on (I guess this is going to be a long post) please also check out www.exDream.com. We made some pictures from our new office and we recently announced ArenaWars Reloaded (see image on the right), a new game with a new graphic engine and many new cool features based on the original Arena Wars idea (the game play and levels will be similar, but look much better).

My little Christmas present for you is the new port of Rocket Commander to the XNA Framework. It allows you to play the popular Rocket Commander (113 000 played games already can't be wrong) on your Xbox 360 for the first time. You just need an Xbox 360 and have XNA on there. Here are the downloads, the file sizes are are little bit bigger than the original game (my comments are below):

  • Rocket Commander XNA on Windows (16 MB): Includes Setup, that will automatically install DirectX Dec 2006 and the XNA Framework if you don't have it yet!
  • Rocket Commander XNA on the Xbox 360 cannot be redistributed. You currently have to download the source code and run it in XNA Game Studio Express to even get it on your Xbox. Once you have Rocket Commander XNA deployed with help of the XNA Launcher you can start it anytime you want to without having your PC on or having to redeploy it.
  • Full Rocket Commander XNA source code (53 MB): All Content, Sound and Music files are included in this download, this is all you need to compile and run the game on Windows and Xbox 360. The music files are almost 50MB (5MB as mp3, which is not supported in XNA).
  • Rocket Commander XNA source code only (213 KB). No content files (models, textures, sounds, etc.) in here, just the .cs, .csproj, .sln and .fx files.
Update: 2007-01-03: Fixed some Bugs with the Input, PostScreenGlow and when device loses focus. Works now more stable. Also cleaned up some of the source code.

Note: Use RocketCommanderXna.sln to compile and run the game on Windows and RocketCommanderXnaXbox360.sln to compile and deploy it to your Xbox 360. For additional details please read the XNA documentation.

The game runs at a very good performance on the Xbox 360, you still got over 60 fps in HDTV 1920x1050 (1080p) with full AA enabled.

Check out some of the new screenshots. Warning, all of them are big, HDTV 1080p resolution. Actually I could not capture any images from the Xbox 360 directly, which runs at 60fps on 1920x1050 and uses fullscreen Antialiasing and using the highest settings. These screenshots are from my PC hooked up to my new 1920x1200 monitor, also nice :)

The main menu. Not much happend here.

The ingame HUD and general user experience has changed a bit. There is also a new object for the goal since creating a sphere dynamically is not that easy in XNA.

Rocket Commander is still fast and it pumps up your adrenaline even more in combination with a big monitor :)

Another screenshot from the last level. Please note that you can see more asteroids at the same time than in the original game. You can also look a lot farther and see more items from great distances.

The explosion is unchanged. It still looks the same crappy way, but the AnimationTexture class had to be reimplemented to work with XNA textures now.


Initially I thought "Hey, this is easy, let's port Rocket Commander to XNA.". The initial port attempt was pretty good, it took only 3-4 days to port the 25 000+ lines of code used in Rocket Commander. I could remove some classes and I also simplified some classes, the total number of lines got smaller (~20 000 lines), but after adding some new features and some new unit tests and some testing code for multithreading it is about 22 000 lines of code, still less than the original. XNA is definately the future, MDX was great, but it was not updated for a long time and if you start something new, go with the fresh XNA Framework!

Here are some of my experiences from the process of writing Rocket Commander XNA. Please note that some of these comments were written while I was developing and kinda sleep deprived. Beware of the harsh tone, in the end all worked out great :)
++ means this topic was great and better than MDX.
+ means it was good and nice to work with.
- means I did not like that feature or it was easier in MDX.
-- means this was really annoying and should be improved in the future.

By the way: I did Rocket Commander XNA just for fun, but it also proves how great XNA performs on the Xbox 360. Try to find any other game with this many polygons and effects running in 1080p (1920x1080) with AA enabled on the Xbox 360 ^^ It does not look as good as Gears of War or Halo 3, but it took only 1 man and a short time to develop and it still pushes up to 80-100mio polys each second to the GPU (in some early unit tests, the game runs fine with 20-30 mio polys per second most of the time, check out the model class and its unit tests for more details).

I also use the Rocket Commander XNA engine for 2 other smaller projects because I like the fact that I can test and play these games on the Xbox 360 too and having a complete engine up and running is always a great plus, even if you know how to do a game. It is just easier if you got all the basics covered.

Topic Rating Comments
Sound ++ Very easy to use, 1 short class instead of 2 complex ones I had in MDX. Once you get used to XAct you learn that it is a good tool for sound effects, at least if they don't have to be loaded dynamically. The porting process was very simple for sound effect files, they just had to be dragged to XACT and then the project had to be saved, that's it.
Music -- A lot of converting, different formats, hard to handle, a lot to test, bad documentation. The music from RC was below 5 MB, now it is over 50 MB, which just blows up the source code. Even the compressed take up 13 MB on the PC (ADPCM) and 9 MB on the Xbox 360 (XMA), both in a quality below the original. The rest of the game content (5MB compressed textures, models, effects, sound, etc.) stayed almost the same and could be reused for the most parts.
Unit Testing - Harder to use on the Xbox 360, no edit and continue support in the compact .NET framework. There are also no unit testing tools available and all you can do is to call static unit tests from the program class, which is still useful, but harder to do. I still prefer to test on windows. One great thing about the Xbox 360 is the fact that you get multimonitor debugging for free if you have a TV screen and your PC screen. Debug and step through code on your PC and see the result on the TV screen :)
Window handling ++ No extra code required, I could remove several classes and even the helper classes that are still in Rocket Commander Xna are not required for the most parts. Except for some of the game component classes and the design that is not really useful (more about that below) the Game class is really easy to use and simplifies the process to create a new game in a few minutes.
Shaders ++ Everything in XNA is shader based. The original Rocket Commander runs on fixed pipeline only hardware too, but it was a lot of work to handle 2 ways to render everything. With XNA you just have to write the shaders once and just use them. They work perfectly on the PC (Shader Model 1.1 up to 3.0) and on the Xbox 360, all fx files compiled without any problems.

Some shaders had to be adjusted to be right-handed now instead of left-handed like in MDX, but that did just take a few minutes to change and all the rest of the shader code could be reused. In the last few months of XNA development I never had once a problem with shaders in XNA, thats really great :)

IDE Features - MDX is much older and was never made popular by Microsoft. XNA is new, fresh and great, but it is missing some serious features like Animations for Models. You can implement it yourself, but why even bother with the content pipeline, do it all yourself. It will be much easier and you can extend it in any way you need in the future.

XNA development is currently also only avialable with XNA Game Studio Express, which is painful if you are a pure Visual Studio 2005 Professional developer and have lots of plugins you rely on every day (source code management, code rush, testdriven, slickedit, explorer, and many more). This will change in the future and XNA will grow up and dominate the whole world one day :)

Content -- Sorry, I just don't like the content pipeline (and I have been using it for several months now)! It is bad for dynamically loading textures or shaders or reloadindg them after changes (just not possible with compile-time generated content). On the windows platform you can still load textures and shaders the normal way, which is good, but loading .x file models is just not possible, you have to use the content pipeline. And the content pipeline sucks feature-wise, you have to implement all of stuff yourself.

This is my main problem, why should I re-implement generating tangents, shader technique indices, fixing other x file problems, etc. all by myself in a custom content processor, which is not easy to write IMO (bad docu again). By the time I did all that I would have implemented a much more flexible and vesatile custom importer like from .collada files, which are very popular these days ...

Performance + The overall performance especially when just doing some benchmarks and performance tests is absolutely perfect on both Windows and the Xbox 360. The GPU is pushed to its limits and there is no reason why you should be afraid of managed code. Windows performance is especially great, all my programs and games are completely GPU bound even in low resolutions and even when they only have one thread.

On the Xbox 360 the performance is much worse and you have to take many things into consideration, which is hard because there is again not much documentation around. For example the worst thing you can do on the Xbox 360 is to generate new data each frame, even if you just create an enumerator by executing a foreach loop, it will affect your performance. The good thing is that you have 3 cores (and 6 hardware threads) at your fingertips, which allow you to optimize performance. It was possible for the Rocket Commander game to optimize the game loop a lot because the physics and update threads eat up almost 50% of the CPU time. On the PC it does not matter much because my GPU is slowing everything down (see image below), but on the Xbox 360 I was able to almost double the framerate using multiple threads, nice :)


Click Image for to maximize it.

Usability - It gets a little easier though all the game helper classes, but the game component class is pretty useless, you can implement something like that in 5 minutes yourself. There is also a DrawableGameComponent class, but you have to call Draw yourself, whats the point here? My classes have some Draw or Render method anyway, I don't need to derive them from GameComponent, I can implement my own interfaces and implement exactly the features I need. Often it is easier to give the Render method a few parameters or even call it several times with different parameters, all that is not possible with DrawableGameComponent.

Next there is the content pipeline, which is just a pain in the ass for 3d models. This makes the usability very bad, especially if you develop on Visual Studio 2005 (not Express), which does not support the content pipeline. Also if you are a Vista-Developer XNA Game Studio Express will also not run as expected and my intern hates now both Vista and XNA. It should not happen that someone can get so angry about such great pieces of software, just because they don't work together ^^

Porting + If you have written a XNA game or have some XNA code flying around (like the Rocket Commander XNA source code) it is very easy to port existing MDX code to XNA. If you do it from the scratch it is a lot more work and testing until everything works out the way you expect it, but overall it is easy to port from MDX to XNA. Thats very cool, thank the main MDX man Tom Miller for that, who architected parts of XNA too. Porting is easy, but getting the game to work the way you want on the Xbox 360 is not that easy. First of all you got that annoying content pipeline again (I keep repeating myself, maybe I'm too angry ^^), then you have to make sure that you don't render important User Interface on the none-visible area of a monitor that is plugged into a Xbox 360. For example Rocket Commander was only designed for 1 resolution to look good, it had a very small font for some texts on the screen, which is unreadable on TV monitors. Rocket Commander did also not scale well on Widescreen monitors and it rendered a lot of UI elements at the screen borders, which were cut off on TV monitors.

The porting took maybe 3-4 days, but I spend at least 4 more days for fixing UI elments and improving the code on the Xbox 360, optimizing asteroid rendering, physics and multithreading. I did not expect that it would take that long and I had only some time in the evenings to even get some XNA work done.

Most annoying Porting left-handed models, matrices and other complicated math functions over to the right handed system that XNA uses. Maybe it would be easier to use left handed matrices like in the original Rocket Commander for XNA too, but XNA does not provide them and I did think getting it to work with a right handed system would be easier. Then there is of course the problem getting the models into the content pipeline. I used a special content processor, which is also included in the Rocket Commander source code and it can be used for other projects too (I use it for everything I do with XNA).

Another annoying thing is the re-deploying of existing game content to the Xbox 360. If you just have 5 files it will not matter to you, but if you got over 50 (Rocket Commander) or even several hundert content files and sometimes due some crazy bug all these files get re-compiled or re-deployed over and over again, it gets really annoying. It takes 30-60 seconds and is not fun ... good think it does not happen that often, but it is still annoying me. Maybe the main reason for regenerating the content on my PC is the fact that I often switch between the Xbox 360 and Windows platforms to test if everything is working the same way on both systems.

Missing features The XNA version does have all the features from the original Rocket Commander game, including all levels, sub menus and the whole game play. It does not have animated models however because it is not supported out of the box in XNA and I did not have time to reimplement this feature. It does also not support polygon based collision checking for asteroids, which can sometimes be annoying if you fly near asteroids or if you want to fly through the donut asteroid. The problem here is that the mesh intersection methods are missing, all you can do is render models, not much else. Last but not least XNA does not support any network code. On the windows platform it would be possible to still use the Webservice to upload and get highscores, but for compatibility with the Xbox 360 the code is currently commented out. If you want to play with online highscores, just play the original Rocket Commander game.

There are also some smaller issues like getting the bitmap data of a texture on the Xbox 360. There is method called GetData in the texture class, but it is not supported on the Xbox 360. There is also no bitmap class in XNA because you would need the System.Windows.Forms namespace, which is not included in the .NET compact framework. I ended up saving the level data into a custom file (.level) and then loading it again with help of standard IO methods (byte by byte, but the loading process is still fast, less than 1 second for all textures, levels, models and sounds).

The Rocket Commander Mods are also not supported yet, but porting them should be easy with the existing Rocket Commander XNA source code.

Improvements The controls, especially for the Xbox 360 Controller have been improved. It is now much easier to fly the rocket, the speed was increased and you can look at up to 4 times as much asteroids thanks to several optimizations and the great performance gain of using multiple threads on the Xbox 360. There are also many smaller improvements to the UI, the structure and some classes in the game, but the game looks still very similar (see screenshots above).

Maybe I will write a little more next week. I should get some sleep now, in a few hours it is christmas time and I have not packed any presents yet.

Now have fun with Rocket Commander XNA and have a nice christmas of course ;-)

PS: I know my blog has currently some problems (posting and comments do not work as they should), I will fix that in a week or two, have currently not much time to investigate this issue.

 Thursday, December 14, 2006
Thursday, December 14, 2006 7:10:42 PM UTC (  |  |  |  |  |  )
Yesterday was the german developer price 2006 event (Deutscher Entwicklerpreis 2006) in Essen (Germany).

The Lichtburg (light castle) in Essen.

Miriam Pielhau (known from german TV, well at least if you watch german TV, I don't) moderated the event together with the usual hosts (Aruba, politicians, other guys from the german game developer scene).

Martin Kesici (Sat1, Superstars star or something, never saw him before either) did make some music in a short break. Was neither great nor bad.

After about 10 prices were given to the developers almost 2 hours have passed and the rest of the 30 prices had to be given out. In a IMO unprofessional manner everyone just had to come on the stage and get his price. In a matter of minutes the rest of the prices were given out.

Then everyone left to the after-show party with more food, drinks and some games.

And Pong (actually it is called Plong) on the Xbox 360. It really shows how to use the GPU correctly and have all 3 cores at full CPU load. The game looks actually a lot worse, my bad camera just made it more beautiful because I always have a blur, glow and motion blur effect on all my pics :)

Some angle girls dancing around. Reminded me of the song: Rammstein - Engel

And finally a little in-house fireworks show at the end. Always fun to watch.

All in all it was a nice and enjoyful event and it was nice to meet all the usual faces again. If you want more photos check out: www.deutscher-entwicklerpreis.de

 Monday, December 11, 2006
Monday, December 11, 2006 5:58:09 PM UTC (  |  |  |  |  |  |  )


Microsoft released their XNA Framework 1.0 and XNA Game Studio Express today, which allow you to build games for Windows and the Xbox 360. To compile and play your XNA games on the Xbox 360 you will need to join the "XNA Creators Club" (for $49 per 4 months or $99 anually). There you will have access to additional starter kits, features, etc.

I ported the Rocket Commander game to XNA, just for fun .. and it runs great. It is optimized to run on all 3 cores of the Xbox 360 and I will finetune it a bit in the next few days to run perfectly on the XNA 1.0 release. The performance is really good, the current build has over 800 fps in PAL on the Xbox 360, in very high resolutions (have only 1600x1200 monitor, but I will test it on 1920x1080 too later this week) it still runs good with more than enough frames.

Here is a little preview picture, it shows about 8 times more asteroids and runs at over 200 fps here. I will try to post some of the porting problems in the next few days, for example all the network and internet code had to be ripped out from the Xbox 360 build and the sound features are a little stripped down in XNA (no 3d listener support, not easy or not even possible to do any stereo or surround sound, looks like playback is all mono :-( ).

Early alpha screenshot of Rocket Commander XNA:

 Friday, November 17, 2006
Friday, November 17, 2006 7:02:25 AM UTC (  |  |  |  |  |  )
As I reported few days ago a nice guy named Marc Guevremont made a pretty amazing Mod for the Rocket Commander Game called Canyon Commander.

You can download the game (just 2.8 MB) and source code on
www.RocketCommander.com

I also made a little video of the game play, which is similar to Rocket Commander very fast and action packed :)

Text from www.RocketCommander.com:

Canyon Commander

This Mod was created by Marc Guevremont and it really shows how extensible the Rocket Commander engine is.
New features include a completely new Landscape rendering algorithm and a very clever way to build canyon levels.
The mod also contains language files for german, english and french text support for the first time.

The gameplay is basically the same as Rocket Commander, just collect all the items and fly to the end of the levels.
Because the game looks so much different, you will play it very different from Rocket Commander.
Instead of avoiding asteroids you have to fly through canyons and avoid flying into a canyon wall.
This may sound easy, but it is a lot harder than just avoiding some asteroids because you can't see very far.

About the source code for this game: You can probably see quite easily that all the namespaces are still intact
and that most of the engine is unchanged, but if you take a look into the game namespace you will see a lot of new
classes. For the terrain rendering Marc implemented his own classes and he used the basic dependencies from
Rocket Commander to solve all the base rendering, physics and collision testing and finally the game management.

Good job Marc, thanks for the effort. Everyone else: Have fun!


Version 1.0 (16 November 2006) - 2.8 MB (requires Rocket Commander to be installed first)
Screenshots:


Canyon Commander main menu


Canyon Commander first level


Canyon Commander spiky canyon


Canyon Commander avoid the mines



 Wednesday, November 15, 2006
Wednesday, November 15, 2006 12:42:52 AM UTC (  |  |  |  )
If you are like me and have missed all the new products released last week, here you go: .NET 3.0, ASP.NET AJAX (formerly "Atlas", which is the new way to code web apps in VS) and all the other new extentions for Visual Studio (WWF - Windows Workflow Foundation, which is just .NET 3.0), here are the links to install. If you are serious about Vista development, you should check it out! Install them in that order:

- .NET 3.0 Framework (seems to be the final version now, 2 MB download, will get 45 MB additional MB in the installer, you need Win XP SP2 or Vista)
- Visual Studio 2005 extensions for .NET 3.0 (WWF - Windows Workflow Foundation)
- Visual Studio 2005 extensions for .NET 3.0, November 2006 CTP (WCF and WPF, which means Windows Communication Foundation and Windows Presentation Foundation)

And for Ajax use this links in this order

- ASP.NET AJAX Beta2
- AJAX November CTP (more functionality, but still in CTP status)
- AJAX Control Toolkit (very useful controls in here)

Other new stuff:
- Office 2007 Visual Studio Tools on the "Ready for a New Day" site (new site about all the new VS solutions)
- Windows SDK for Windows Vista
- Microsoft SQL Server 2005 Compact Edition

 Tuesday, November 14, 2006
Tuesday, November 14, 2006 9:22:27 PM UTC (  |  |  |  |  |  |  )
Someone recorded XNA Racer, which was shown at some Tokio Gameshow named "kotaku".

Here is the original link. Some harsh tone in those comments, no you don't have to pay 99 dollars to play this game, it will be completly free. And about the "boring" gameplay, hey it was not done, this was just an alpha preview and the game looks much better now and is getting better physics and levels as we speak. Well, at least some are comparing it to AAA titles, thats always nice (and totally crazy, you wouldn't compare a house build by 1 guy to a scyscrapper).

Thanks for posting about it to ZMan and Ultrahead.

I guess I have to release a video of the game myself, these leaked videos look not very pretty and showing off an early alpha version has its disadvantages (almost 90% of the ingame objects are missing, the video shows the second track, which is not done yet, completely dummy and it was an early alpha version, the game runs now about 3 times faster).

As some of you (like ZMan) already found out, there is also an XNA book coming out written by me. I just started a few weeks back writing it (but it will be complete by the end of the year). Funny you can already order it on amazon. I will write more about it when its done. You will not only learn about game programming and XNA, but there will be plenty of practical examples in the book. In every of the 14 chapters a new game is introduced and you go though the process of writing a game from start to finish.



One final note: Canyon Commander is a lot of fun, it is a new mod, which will come out in the next days.


Btw: The Coding4Fun site was redesigned in the last weeks and most of the old links do not work anymore (which is something MSDN usually never does). But now most of the content is back and can be found in the new categories (Rocket Commander is under Games -> Arcade). I also updated the link on www.RocketCommander.com and the link for the video tutorials is:
http://msdn.microsoft.com/coding4fun/gaming/arcade/article.aspx?articleid=997852

Update: The old link works now too, I guess the MSDN relinking system is working as expected now :)
Tuesday, November 14, 2006 11:24:23 AM UTC (  |  |  |  )
It was nice in Seattle and a great experience meeting the Microsoft XNA Team and people I met like ZMan. But I'm glad I'm back home. There is nothing like the good old home PC, I can type 700 times faster here and it feels much better to do any work here (or at the office here).

Well, the day started yesterday for me, I have not slept yet. Let's get started with some pictures. This is me leaving from the Hotel and waiting for a taxi. It took forever because the traffic was so bad again in Seattle.

Bye bye Seattle and all you friendly people in it.

Checking in at the airport. Had to be there 3 hours earlier than the flight departures. Was only 2 hours before that there (bad traffic and I got up a little late ^^).

But I had to wait 2 hours anyway. The security checks were no big deal anymore. Getting into the USA was much harder. Now it was just taking your shoes off, unpacking the laptop and I was done.

A plane is getting filled up and loaded (my plane was a little bigger and on the other side).

After 9 and a half hours flying around the world (from Amsterdam to Seattle took almost 2 hours more) we landed in Amsterdam and it was already Tuesday morning here. Btw: You can see me in the picture holding my crappy cell phone and using it as a camera.

The Amsterdam Airport and more security checks, but not so long waiting times in the morning, much nicer.

After adding 9 hours to my clock it was Tuesday morning too. I had to wait over 2 hours for my plane to Hannover and was really tired right now. But everything went fine and I landed in germany on schedule.

The plane is ready to "hop" to my "city" ^^ just took 45 minutes, pretty quick.

Getting a train ticket to finally get home. Hey, public transportation again, yeah :-)

Back in Hannover everything looked so small, we don't have any high skyscrappers here. Strange how quickly I got used to that. Hope I can get rid of my adopted coffee habit too.

Time for some sleep. Got so many emails and stuff I have to do after I weak up, I better sleep for 20 hours now ;-)

 Monday, November 13, 2006
Monday, November 13, 2006 1:41:37 AM UTC (  |  |  |  )
The day started off rainy and stayed that way. This is my last day in Seattle. I will fly back to germany tomorrow.

I went to the Seattle Center Park again, I thought maybe the weather gets a little better later to go up to the Space Needle and take some photos.

The streets and parking lots are not as filled as in the week. The skyline of Seattle looks nice as always.

After checking out the park for a while I also found 2 big supermarkets right beside each other. According to google maps they are the only supermarkets in a 5km radius. Yeah, pretty clever to build them right beside each other .. omg.

The food in the USA is crazy, 500 different kind of chips, milk or bread, but not many different articles. In a german store you find much more different products in a smaller market. The products are also more expensive, about twice as much. You also can't buy small portions, everything is superlarge, megapack and labeled to let you buy 3 to save a few cents. The personal is incredible friendly and kinda annoying if you are not used to it like me ^^ Other than that it was a nice experience to see Americans go shopping.

There is the monorail line again.

And the monorail train, which is coming into the station.

Nice wobbly effect on that wall :)

The skyline again, but the weather is not looking good.

I checked out some movie theatres on the internet, but I was confused that some of them only show 1 movie at a time. I was not interested in the movie showing at the IMAX or that other big theatre, so I went to the Cineplex.

Watching the movie was pretty nice. It does not cost more than in germany and there are just a few minutes of commericals in the beginning, not half an hour like back home.

After the movie I went back to the Seattle Center Park, but it was raining too much and I lost any interest to go to any other attractions. I went back to the hotel and I will code a little bit right now.

Some more photos from my journey back tomorrow.

 Sunday, November 12, 2006
Sunday, November 12, 2006 6:52:10 AM UTC (  |  |  |  )
Here are some pictures of my little tour through Seattle today. I made like 150 photos, but I don't want to post that many. Instead of doing an introduction here, lets just go to the photos.

After a rude wakeup from the housekeeping lady that didn't see me in my bed (how is that even possible?) I collected some tourist info brochures and checked out where I want to go today. Later I met up with Christina and Jerry and had some brunch. Not only do Americans go out to eat in the evening, lunch and even breakfast/brunch is popular too. I guess I can never adapt to that, it just costs so much time going out all the time ..

Anyway, we ended up in the Fremont District. This is the Aurora Ave. North (99) Highway.

And under it there is a troll eating and stealing cars. Its not a myth, there he is, good thing I don't own a car.

And the other direction. Nice HDR effect btw. It does also look a little nicer than my XNA Racer game from below the road, but well, the game is above the road and it looks good there.

Now thats a pretty interesting sign. It does not only tell you about the local directions, it has also Taiwan, the Guggenheim museum in New York and the center of the world on it. Just in case you forgot about any of these.

There is the Seattle Space Needle at daylight and the Seattle Center Park it is in. We will come back to that later.

The skyline of Seattle at daylight. This picture was taken from the bay area. I'm on my way to the Seattle Aquarium.

Yay, some water .. But it is very cold all year, you can't even swim in the ocean in the summer time.

Here are some pictures from inside the Seattle Aquarium. This are 2 sea otters having some fun.

And some seals swimming around. Good thing no sharks are here. Hey wait a second, a little further along they might be some.

This room is pretty cool. It is basically a sphere with little windows in every direction. And it is underwater, which would make sense in an aquarium with all these fishes swimming around.

Where are all these bubbles are coming from, and why is there a yellow tube going down?

Oh, a scuba diver is doing some fishing. Well, that is not really a big challenge with all these fish in this tank.

Some starfish, which can be touched. They are rock solid.

But there were also a lot of wobbly and soft fishes and plants in the water, which felt strange.

Ahhh, there is a shark above me. Ohh, its just plastic.

Hey, wait a second, this ones are not plastic. I wounder if they are strong enough to kill me. They don't look very big or strong. But I'm no jackass going into the water to find out :)

Some very colorful fishes.

And some more colorful plants. At least I'm not the only one taking pictures. But I guess I'm the only one blogging about it and taking pictures of other people taking pictures.

Enough of that aquarium. Let's check out this "Ye Olde Curiosity Shop".

3 Chinese Girls testing out crazy hats. But there was nothing useful in the shop for me. I just got a couple of postcards.

Wait a second? After leaving the shop and walking along the bay there is another shop with the same name on it? Deja vu. The 2 shops are actually the same and for some reason it is "normal" here to put up the same buildings right beside each other. For example Seattle has build 2 new sport stadiums right beside each other instead of improving the roads or even think of a better way to do public transportation.

Time to leave the bay area and head to the city.

Lets take the underground tour, so many people told me I had to do that.

After an introduction and some history about Seattle the tour began. Hey look over there, a sky scraper.

This is actually the Smith Tower and it was once the biggest building in the US. It was build by the Lyman C. Smith, which was one of the first manufacturer of typewriters. Good thing I got my own layout and don't have to live with same same layout that was invented over 100 years ago to prevent the keys of the typewriters to get stuck when typing nearby keys too fast.

Finally underground, which was once the ground level for this area of Seattle. It was elevated to move everything up and make the city more secure and save against floodings. But why am I looking at a toilet? Ohh well, toilets with the flush ability were inveted here too ..

This was the nice lady touring us through the underground. She made a lot of jokes and we didn't get very much of them, but she kept going, which was funny again. In the background you see a pic of time before the great fire in Seattle that destroyed all these newly build wodden houses.

Some junk down here from the time they build the new elevated street level.

An old rusty tank.

I also took a lot more pictures, but it was way too dark down there. And when I got up it was dark too, but still kinda early (I sometimes stay up at this time ^^). Well, my camera could not take any decent pictures and it has a long length of exposure (which means I had to stay still for few seconds to get a steady image).

Anyway, here are some random pictures from Seattle.

This is the bottom of the pretty tall Rainier Square building with a nice laser showing some figures.

A glowing christmas tree made out of light tubes.

This is how taxis look in Seattle.

The monorail, a pretty cool train to drive you from the center of the city to the Seattle Center (where the Space Needle is) in just a couple of minutes. It also doesn't cost anything, but it just drives back and forth between these 2 points on a 3 stores high railway.

This is the Seattle Space Needle tower from below. But it was already very dark and it would not make much sense to take pictures from above with this crappy camera. I will probably come back here tomorrow and then waste the 14 dollars it takes just to get up there.

Before going back to my hotel I checked out the park a little bit and saw this cool taffy machine.

Well, this is actually a nice sign for me as the last pedestrian standing. I was just a few hundred meters from my hotel, but this crazy 6 lane road was separating me from the way to my hotel.

Finally home I can now to some coding, my hands are shaking, I have to do something. But maybe it is just all that coffee finally kicking in ;-)

 Saturday, November 11, 2006
Saturday, November 11, 2006 7:35:07 AM UTC (  |  |  |  )
Well, Day 3 was very interesting. There are still a couple of things I could tweak in my code. I talked with a lot of guys today, had lunch with Mitch Walker, then talked to a couple of guys and girls. In the afternoon the XNA Team did a little presentation of all their internal games they did. It is pretty amazing and coming from the outside you would never think that they do so much cool stuff there. Where do they even get the time to develop their own games beside their job.

I'm not sure if these games get ever released, I guess most of them will not be in the final XNA Studio Express version coming out next month. Instead they will probably published on several blogs, MSDN, Coding4Fun and sites like that.

My little stater kit XNA Racer is now almost complete, I fixed all graphic issues this week and it runs now at a very good frame rate on the Xbox 360. Little fine tuning and I'm done. More on that in the next weeks.

My cell phone went dead and I forgot to get my Usb cable to work today. Sorry, no photos today, I just saw a lot people today and I guess most of them are glad I couldn't take any pictures. Tomorrow I will be a tourist and check out Seattle a little bit more and make more photos. There are some interesting attractions here.

In the evening I meet with Andy Dunn (ZMan) and Jason Olson (Managed World blog) and had something to eat in a nice traditional diner (Ruby's diner, seems popular here, never heard of it). We talked a lot about XNA, Microsoft, DirectX and everything on our mind. It was very nice meeting up with Andy again (we meet at the PDC before) and it was a pleasure to meet Jason it person.

There was a lot more going on today, but I'm way too tired right now to remember anything more .. and its also kinda boring not posting any pics ^^

 Friday, November 10, 2006
Friday, November 10, 2006 7:29:03 AM UTC (  |  |  |  |  )
Welcome back to my little photo diary of my experiences here in Seattle.

Today I worked a lot with the Xbox 360 side of XNA. In the earlier builds I had a lot of problems with testing my starter kit on the Xbox 360, but most of these issues are resolved now. About 99% works the same on the Windows and Xbox 360 platforms, but if you hit that 1% it does still get you angry and pushing your head into the wall. For example a couple of the more advanced shadow mapping shaders work fine on the windows platform, but all kinds of crazy things happen on the Xbox 360, the game crashes, you see black bars all over the screen or the output is just not right.

If you are like me and have not worked with the Xbox 360 before, I can tell you that it is not easy getting used to the way the console uses render targets. You have to resolve them with a little helper method in XNA (or in the Xbox 360 SDK) to get the contents copied over to your texture. This is not required on windows. But even if you take care of that the shaders might behave a little different. For example most of my post screen shaders use the background buffer to mix results and sometimes mix them together several times. This works fine on the windows platform and behaves the same way as it does in DirectX.

But after some discussion with Tom Miller, Matt and Mitch Walker from the XNA Team and debugging a little, it was clear that the background buffer can have garbage data after rendering into render targets. This was very bad for one of the shaders because it requires 2 separate images over several passes and then blend them together at the last pass. I used the back buffer to hold one of them and a render target for the other, but that had to be changed in order to run correctly on the Xbox 360. Good thing this was just one shader, in my bigger game engine I have over 100 shaders and it would not be fun to rethink all of the post screen shaders ^^

Anyway, this was just one of the many things today, I will talk about all this stuff in the near future on my blog. Let's go to the pics ..

Traffic was especially bad today, it took over an hour to get from Seattle to the XNA Team Building (somewhere in that greater Microsoft Campus area, don't ask me, I'm glad still knowing where the sky and ground are). I took a few pictures of the building today, it is called Millennium Building or something ...

And this is the entrance for some of the Xbox teams and XNA. I'm not sure why this image is so wobbly. The building is straight. Maybe there is a post screen shader in my camera, that would also explain the extremly blurry pictures I get out of it most of the time. Btw: Really crazy street numbers, unimaginable in Germany where every street that is longer than a few meters is renamed 7 times.

Okay, this is how an office looks like at Microsoft. Usually everyone, no matter in what position, gets his own office. But the XNA team is pretty big and they had to put 2 people in some of the offices. I was staying in Matt's office most of the time and he was really nice to me answering all kinds of questions.

Still in the same office. Now thats how a bookshelf should look like. Lots of Game Programming Gems Books (yeah, all of them). Feels like at home in my office. Ok, my books are just piling up on my desk and it looks a bit more chaotic :-)

Later that day I checked out one of the malls and I was not very impressed. Well, I'm no big shopper anyways and the prices are too high for me, doesn't matter what I was looking at. But I saw the WII console from Nintendo in one of the game shops and played it for a bit, some fun racer. It looks really crazy holding the controller like a wheel and controlling it like a maniac in the air.

Hi there .. uh, not real?

And finally my little list of pro/cons of living in the USA (from my limited knowledge of course, and I rant a bit here):
Pro:

  • People are very nice, last year in Los Angeles I also noticed that, but even here in Seattle cars break for people and bikes. It doesn't seem like everyone is cursing behind the wheel. And in general everyone was so nice to me and a pleasure to speak with.
  • Coffee makes you crazy, especially the amount in Seattle. Coffee everywhere ^^ Hey wait? Shouldn't that be on the cons list?
  • The cites look very bright and colorful at night. Like in the movies, just more real. We in Germany don't waste that much energy and the stars are too far away to be THAT bright.
  • Yeah, the democrats won the last election here. Dunno what this has to do with my blog, but yeah.
  • You can pay everything with credit cards and it really makes you life more easy. In Germany you can't pay with a credit card anywhere. And even our own sucky EC-Cards are not accepted if the price is too low. It is just stupid that we Germans have our own system, the rest of the world is using credit cards. Just for online transactions a better system than just credit cards should be invented (ok, there is paypal, but why should ebay become richer, banks themself should come up with something and compete).
Cons:
  • Transportation really sucks here, trains were not invented here yet and the streets are so incredible overfilled with cars it is not funny. And even if there is a clear road ahead you can't drive faster than the speed limit of 55 mph (90 kmh) or similar. In germany there is no speed limit at most of the highways and it really seems slow, especially because the roads are usually filled to the max. And public transportation sucks even more, it is either non existent or so far away that you still need 3 times longer than driving slowly with a car.
  • Dunno, but everything seems more expensive here. Well, everyone earns more, so that could be ok.
  • TV is better here, a lot of good and funny shows. But it is hard for me to compare since I never watch TV in Germany anymore. Now why is this on the bad list? Well, commercials ever 5 minutes? Are you guys crazy? It is even too annoying every 15-20 minutes like in Germany ... Whatever, TV is boring anyway.
  • Some food tastes kinda boring. Most of this stuff was told me by other ppl who moved over from Europe and they miss the taste of good beer, chocolate, cheese, dark bread, etc. I would probably don't care and have forgotten about all of this in a short time.
  • So much to do, so few time.
Random things:
  • My freaking Simyo cell phone provider doesn't work at all here. I can receive some calls and call to Germany, but not call any number here, which is really stupid and it if it would work the prices are insane (costs like 30 times as much).
  • Console games are much more important here. In Germany maybe 30% of a game shop is used for console games, here it seem to be 70-80%.
  • Internet is slow, Wireless LAN sucks and "high speed internet" at hotels is a bad joke. At Microsoft most of the downloads I made were from Microsoft servers anyway and that was pretty fast, but the Americans live with good cable connections for a long time now and do not think the same way as we in Germany to go faster faster faster :) This is just on the cons list because of my bad WiFi experiences, even Microsoft can't figure this out for their internal network. Sorry guys, check out the Freifunk project to see how to do WiFi internet with more than 1 Kb per sec :) Man, how much longer until someone brings out useful wifi technology, all this bluetooth and wifi stuff just sucks and is too slow and error prone.
Link for me to not forget about, pretty cool new project to allow converting HLSL shaders to GLSL:
http://sourceforge.net/projects/hlsl2glsl/
 Thursday, November 09, 2006
Thursday, November 09, 2006 5:08:20 AM UTC (  |  |  |  |  |  |  )
This was my first day working at Microsoft. Pretty interesting people work there and a lot of them. Good thing no one noticed that I'm not able to remember 500 names per second. I was installing stuff half of the day, but I found out more about XNA and already fixed some issues. Before talking more about my day, here are some News:

The XNA Team did a little 2 minute video of a couple of XNA games, my starter kit XNA Racer (which I hadn't talked about yet in detail, but that will come soon) can be seen at the end of the video. I got a lot of nice comments about that already :)


Here is the link to the video (Major Nelson has a nice blog btw):
http://www.majornelson.com/archive/2006/11/08/zune-video-xna-video-montage.aspx
And this is David Weller talking about it:
http://letskilldave.com/archive/2006/11/08/XNA-Video-Montage-_2300_1-is-ready-for-you_2100_.aspx

A nice guy from France with the name "Marc Guevremont" made yet another Rocket Commander Mod and this one just looks impressive. He managed to implement a landscape engine with shadow mapping (I guess precalculated). It looks very much like Rebel Assault. The game itself is still similar to Rocket Commander, but it looks so much different and he also made 3 cool levels. The game is called Canyon Commander and will hopefully be available soon.

More information, screenshots and a video can be found in the Rocket Commander Forums and here: http://www.webs7.com/Canyon/

I did not make many pictures today and it was to dark when we drove back to make any useful pictures with my phone camera.

Driving through Seattle.

And going over the long Evergreen Point Floating Bridge between Seattle and Redmond. It goes over the lake Washington and I couldn't get an answer if a Russian atom u-boot could fit under the bridge.

I was told that Bill Gates has his house somewhere on the right here, but you can't see it, too much leaves.

More pictures tomorrow.

 Wednesday, November 08, 2006
Wednesday, November 08, 2006 5:30:33 AM UTC (  |  |  |  |  )
I arrived in Seattle :) But that was a long journey, it took over 15 hours and in Seattle it was just 3pm when I arrived. At least I got some sleep in the plane.

I made some photos, but the quality is not very good. Next time I should use a better camera than the one in my cell.

This is the ceiling at Hannover Airport. I was very tired and watched it for quite a while. Has a pretty good shadow mapping algorithm if you ask me. Maybe they use already Direct3D 10 and render into cubemaps :-) Btw: I am excited about the new NVidia Geforce 8800 GPUs, will check them out next week when I am back.

The second security control I had go through, in total it were at least 7 controlls and a lot of time waiting between them at every airport.

Guess what, waiting again. This time in Amsterdam. It was not even a security check, just the passport control checkpoint. The people of Holland speak a really funny language, at least it was fun to listen to it while being in Amsterdam. With knowledge of English and German it is possible to guess most words and unterstanding at least what the people are talking about.

After sleeping a while in the plane and watching the shitty movie "My super ex girlfriend" (wft, it was boring, unfunny and not exciting at all), I watched outside the window for a bit. We had almost reached seattle. I guess this is already the Washington state, some islands and a lot of water, looks nice from above. A few minutes later, everything was foggy again.

And finally after ariving and going through a bunch much security checks and questions I took this photo at the first bargage drop point. Well, I was not really supposed to take photos here as you can see on the warning signs there, I guess this is a top secret area .. whatever ..

After ariving at my hotel I checked out Seattle and walked around for a while searching for power adapter for my laptop (I knew I forgot something home). Well, not fun without a car .. I found a grocery store, but neither they nor my hotel had an adapter. Well, the laptop sucks anyway, XNA does not work because for some reason it cannot use any pixel or vertex shaders. NVidia says that the Geforce 4 Go fully supports DirectX 8, which would include ps1.1 and vs1.1, but I guess there is something missing.

Anyway, after I have now almost depleted both my laptop batteries. I just made one last photo and quickly wrote this post. Here is a view from my hotel room to the Seattle Space Needle Tower at night. With a less crappy camera this would look nice, hehe.

See ya tomorrow.

 Tuesday, November 07, 2006
Tuesday, November 07, 2006 5:12:14 AM UTC (  |  |  |  |  )
Yeah, flying around the world. In a couple of minutes I have to leave to the airport. I will fly to the USA to visit the Microsoft XNA Team for a week. Pretty exciting if you ask me. Maybe even too exciting, I did not get any sleep this night and last night it were only 3 hours. I hope I can sleep on the plane ...

I will try to make some photos and blog a little about my experiences there in Seattle. The XNA Game and Starter Kit I'm currently developing will be improved a little bit over there and I will have the chance to speak with the XNA team.

I'm not sure if I will have time to talk much about XNA on my blog right now since I have so little time and so many projects. Hope that cools off in the next few weeks and I can relax a little bit more and start blogging like a madman again :-)

 Thursday, November 02, 2006
Thursday, November 02, 2006 4:44:52 AM UTC (  |  |  |  |  |  )


Microsoft has just released the new Beta 2 version of the XNA Game Studio Express IDE, which allows you to create great games for the windows and Xbox 360 platforms. It contains all the stuff from the beta 1 (like the SpaceWar starter kit, which was a improved a little bit). Additionally it now looks a lot more polished and you can check out the new content pipeline, which allows you to import 3d models from .x and .fbx files to do some cool 3d graphics. Btw: Check out the new logo of XNA. I first was a little bit confused since I was used to the old XNA logo, which has been around for several years now. But after a while you will get used to the new logo and start to like it ;-)

While you can compile games for the XBox 360, the XNA Creators Club membership is not yet available and theirfore you cannot test on the Xbox 360 yet. The XNA Creators Club membership stuff will be available later this year and then it is time to play your games on your Xbox 360.

You can find more information about XNA and download XNA Game Studio Express here:
http://msdn.microsoft.com/xna/

Also be sure to check out the boards, there is a lot of stuff to read and a ton of games (mostly 2d) came out in the last couple of months.

I will try to blog little bit more about XNA as it gets closer to the release. I got some great stories to tell :D

 Friday, October 27, 2006
Friday, October 27, 2006 2:43:20 PM UTC (  |  |  |  |  |  )
Hi everyone,

sorry for not posting anything for a long time now (last post is almost 2 months away). I was very busy writing a new cool game with help of the XNA Framework, the game will also be a starter kit in the upcoming XNA Game Studio Express release and it looks really cool. More about that later ...

In the meantime our new causal games brand www.Quicksandentertainment.de released Pizza Commander on www.PizzaCommander.de (I talked about the game in August) and a new game Rocket Racer was just released, which is also based on the Rocket Commander Engine. You can check it out here: www.RocketRacer.de
For both games there is a demo available (just 20 MB), so you can check out the game and see if you like it. The full version is currently only available in Germany and Poland, but we keep searching for more publishers and continue to release it worldwide :)

In Rocket Racer you fly around with your Rocket and it feels very similar as Rocket Commander at first, but it has a lot of new graphics and effects. After a while you will see that just flying around will not do it, you have to fly through gates to get time and more points. If your time runs out, you die. The levels are quite challenging and I played the game over 10 times now from start to finish and it still is fun :D Well, call me crazy.

In the meantime the new DirectX SDK October 2006 came out. It features now a better PIX tool and makes it possible to debug shaders directly from your applications, which might be useful for Managed DirectX applications. Managed DirectX 2.0 is now also removed and will not work anymore (e.g. NormalMapCompressor v1.4 will not work anymore, use NormalMapCompressor v1.3 or v1.2).

Microsoft also announced a few days ago that there will be a second XNA beta in a few weeks, while the final release is going to happen later this year (which means december and before the holidays). The new beta will include many new cool features, for example the content pipeline and support for model files and also a lot more help and documentation.

More information about XNA, tips, my development diaries and the new upcoming XNA Starter Kit Game I wrote will come soon :)
Rocket Racer Screenshot 1:


Rocket Racer Screenshot 2:


Rocket Racer Screenshot 3:


Pizza Commander Screenshot:
 Thursday, August 31, 2006
Thursday, August 31, 2006 6:07:47 AM UTC (  |  |  |  |  |  |  )

  • Download XNA Beta1

  • XNA Framework Forum and XNA Game Studio Express Forum

  • Getting Started: Open C# Express (which is XNA Game Studio), Help->Content->Select XNA and navigate to Getting Started with XNA and read through Your First XNA Game

  • Next you could try out the Space War Starter Kit Game. If you can't control the game read this tutorial from xnaspot.com about changing it to support keyboard input.

  • x64 Bit platform support: Read this blog entry for an easy fix. Basically just add <PlatformTarget>x86</PlatformTarget> to your csproj file.
    Or download and extract this file (Xna64BitSupport.zip 14 KB) into:
    C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE\VCSExpress\

  • Blogs:

  • Tutorials:

  • Interessting reads:


  • And now finally my own thoughts and tips:

    • How to render fonts like with Direct3D.Font?

      Well, thats not possible, there are not Font classes in XNA at all yet! You have to create your own font code by rendering bitmap fonts. If you want to see some code about that check out the SpaceWar Starter Kit and look inside the Font.cs class. The fonts in SpaceWar just contain numbers, but the game contains some text. How did they do that? Well, they just put most of the text in the game directly onto the textures, buttons, etc.
      Here is also a forum post about this issue and some source code, which might help.

    • How to play sounds?

      Thats quite easy, create sounds with XAct, load them in your game and then use the SoundBank class to play your sounds. Some tutorials can be found in the help and a simple example is in the Sound.cs file in SpaceWar Starter Kit.

    • Okay, where do I add my mp3 for some music playback?

      Could you stop asking this questions? Arg, I'm asking myself this, oh no. But I guess sooner or later this would come up anyway. Well the solution? There is none. No, I'm not kidding. There is no support for mp3, wma or CD playback of music in XNA. On the windows platform you could use some external stuff (DirectShow, MCI, external libraries, etc.), but on the XBox360 you are stuck with XAct, which does just support sound effect files.

      Ok, then just let add the .mp3 as a .wav file there. Yup, thats possible, but consider your game size. If your binaries are maybe 1MB, textures 5-10MB and sounds 2MB you don't want to add 3*50MB for 3 music files. I had quite a long discussion with some music artist about this issue and we agreed that it would be best to do try out some 22kHz mono sounds for the music for a smaller game size. Don't even try to think about any compression, the only format that XAct eats is PCM .Wav files. Sample them down or live with mega-files, your choice ...

    • How to add Controller (Mouse, Keyboard, XBox360 Controller) support?

      Again, this is not hard stuff. If you have worked with XInput before, this will be easy for you. Otherwise just read the XNA Programming Guide->Input pages, which all contain easy to work with code samples.

    • How to show a mouse cursor?

      You might notice that there is no mouse cursor in the samples, starter kit or any new project you create. The reason for this is that by default the Game.IsMouseVisible is set to false. If you set it to true (e.g. in your game constructor) you will see the mouse cursor again (write: this.IsMouseVisible = true;). Another way would be to display your own custom mouse cursor as a sprite at the current mouse position (see help to get mouse position, it is quit easy).

    • How to capture keyboard text?

      Well, thats not that easy. You can only check the state of each button (mouse, keyboard, whatever), but you can't get the text directly like with the OnKeyPress event in window forms. One way would be to write your own custom text handling, like this:

      string chatText = "";
      List
      keysLastFrame = new List();

      ...

      Keys[] keysNow = Keyboard.GetState().GetPressedKeys();
      foreach (Keys key in keysNow)
          if (keysLastFrame.Contains(key) == false)
              chatText += key.ToString();
      keysLastFrame = new List
      (keysNow);

      But this has the disadvantage if you run low on frames or the user types very fast you might miss some keys (test this by adding Thread.Sleep(50)), which really sucks. It is also a bit of work to get all the special keys, shift combinations, backspace, etc. working. For windows apps it might be wise to think about capuring the keyboard directly with some dummy form (very easy to get text then with OnKeyPress). Another approach would be to create an extra thread just for handling the keyboard at a high rate to make sure you catch all the keys. More about this solution can be found in this post.

    • What about drawing lines, boxes or other simple 2d stuff?

      Oh no, this is one of the parts that is really annoying and this does require some rethinking because all this kind of rendering was done with help of the fixed function pipeline (hello DirectX 7), which is no longer supported in XNA. It was never easy in DirectX to draw lines or filled boxes, you had to create your own vertex buffer or just draw some primitives and set all kinds of renderstages, but with XNA this gets even more complicated. Better not tell anyone how simple this is in OpenGL (glLine anyone ^^).

      So how can we draw some lines in 3d?

      Again: It is very important to know that you have to do EVERYTHING with shaders! The Sprite classes are just some helpers, but for 3d you need shaders, nothing else will work! I say this that often because many people in the XNA Forum already having problems rendering data and do not understand that if you don't have a shader around your rendering code, nothing will happen! Additionally you have to make sure you pass all the required data to your shader, there is a lot more work involved that just rendering some primitives in DirectX using the fixed function pipeline.

      I will try to keep this as short as possible, but you will see this is quite a lot of code for just rendering a single line. Here we go. We start with the variables we need (add to your Game class):

      Matrix Projection = Matrix.Identity,
      View = Matrix.Identity;
      Vector3 pos1 = new Vector3(0, 0, 0),
      pos2 = new Vector3(100, 100, 100);
      VertexPositionColor[] lineVertices =
      new VertexPositionColor[2];
      lineVertices[0] = new VertexPositionColor(pos1, Color.Red);
      lineVertices[1] = new VertexPositionColor(pos2, Color.Yellow);

      Effect effect = null;
      EffectParameter worldViewProj = null;

      We will use the Projection and View to calculate the worldViewProj matrix for our shader to convert the 3d coordinates to 2d (yep, I told you, we have to do everything ourself). If you want some camera control, always update the View matrix, which again you have to manage yourself (hello XNA team, some help with this basic stuff plz). Ok, lets continue before I explode, here is the initialization code (copy to your Game constructor):

      float aspectRatio = (float)TestGame.Width / (float)TestGame.Height;
      Projection = Matrix.CreatePerspectiveFieldOfView(
          (float)Math.PI / 2, aspectRatio, 0.1f, 1000.0f);
      View = Matrix.CreateLookAt(
          new Vector3(0, 0, -50), Vector3.Zero, Vector3.Up);

      CompiledEffect compiledEffect = Effect.CompileEffectFromFile(
          "Shaders\\LineRendering.fx", null, null, CompilerOptions.None,
          TargetPlatform.Windows);
      effect = new Effect(TestGame.Device,
          compiledEffect.GetShaderCode(), CompilerOptions.None, null);

      worldViewProj = effect.Parameters["worldViewProj"];

      Ok, what happens here? First of all we calculate our aspect ratio, nothing special. Then we have to calculate our projection and view matrices (please read the DirectX documentation if you have no idea what I'm talking about). Basically we have a field of view of 90 degrees (PI/2), we use our aspect ratio and we have a view range from 0.1 (near) to 1000.0 units (far). Then we create our camera at the position (0, 0, -50) looking at the center of our scene.

      Next we have to load our shader effect file. Yes, I told you about that earlier, we need a freaking shader to draw our simple line. We will get into that in a little bit, but ALWAYS make sure the .fx file is correct (test with FX Composer first). If the .fx file contains compiler errors you get unfunny NullReferenceExceptions, which won't help you (see below). Finally we are getting the worldViewProj parameter. This is the only line of this whole line code I really appreciate. Getting shader parameters is now a lot easier and cleaner, good work here! Also working with shaders is very easy now.

      Time to continue with our code, we need the rendering code (add to Draw()) now:

      // Start line shader
      effect.Begin(EffectStateOptions.Default);
      effect.Techniques[0].Passes[0].Begin();

      // Render line
      worldViewProj.SetValue(View * Projection);
      TestGame.device.VertexDeclaration = new VertexDeclaration(
      TestGame.device, VertexPositionColor.VertexElements);

      TestGame.device.DrawUserPrimitives
      (
      PrimitiveType.LineList, 1, lineVertices);

      // End shader
      effect.Techniques[0].Passes[0].End();
      effect.End();

      This code is pretty straight forward. We start our shader and select the first technique (the only one we got). Then we calculate our worldViewProj matrix from the View and Projection matrices we calculated in the constructor. After setting the VertexDeclaration we can draw our primitives, which are lines in our case. Just one to be more specific. Adding more lines is quite easy at this point. Finally we have to close the rendering pass (we just got 1 pass, else we would have to make a foreach loop around this code) and we also close the shader.

      So far so good, but how does the rendering now happen? 100% in the shader, the code we just wrote will do nothing more than calling the shader with the data we set, the line point positions and colors. So lets take a look at the shader, which does all the rendering. The shader itself is quite simple:

      // File: LineRendering.fx, Author: Abi
      // Code lines: 52, Size of file: 1,18 KB
      // Creation date: 31.08.2006 05:36
      // Last modified: 31.08.2006 06:44
      // Generated with Commenter by abi.exDream.com
      // Note: To test this use FX Composer from NVIDIA!


      string description = "Line rendering helper shader for XNA";

      // Default variables, supported by the engine
      float4x4 worldViewProj : WorldViewProjection;

      struct VertexInput
      {
          float3 pos : POSITION;
          float4 color : COLOR;
      };

      struct VertexOutput
      {
          float4 pos : POSITION;
          float4 color : COLOR;
      };

      VertexOutput LineRenderingVS(VertexInput In)
      {
          VertexOutput Out;

          // Transform position
          Out.pos = mul(float4(In.pos, 1), worldViewProj);
          Out.color = In.color;

          // And pass everything to the pixel shader
          return Out;
      } // LineRenderingVS(VertexInput In)

      float4 LineRenderingPS(VertexOutput In) : Color
      {
          return In.color;
      } // LineRenderingPS(VertexOutput In)

      // Techniques
      technique LineRendering
      {
          pass Pass0
          {
              VertexShader = compile vs_1_1 LineRenderingVS();
              PixelShader = compile ps_1_1 LineRenderingPS();
          } // Pass0
      } // LineRendering

      And thats it. As you can see we just take the input position, transform it and then output the color we interpolated through the vertex shader. The pixel shader has just to output the color. Working with other primitive types can be done in a similar way, so I hope this code helps.

      And what about 2d lines?

      2D lines can be done quite similary. In DirectX you would never think about rendering 2D lines with shaders, when it is so much easier with the fixed function pipeline. But this is not possible in XNA, so we have to use shaders again. Lets go quickly through the code that is required:

      Matrix Projection = Matrix.Identity,
      View = Matrix.Identity;
      Point pos1 = new Point(0, 0),
      pos2 = new Point(500, 250);
      VertexPositionColor[] lineVertices =
      new VertexPositionColor[2];
      Effect effect = null;
      EffectParameter worldViewProj = null;

      Very similar to what we had above, only our positions are now Points and not Vector3. Also note we don't calculate the lineVertices here because the data is resolution dependant and we have to grab the resolution from the graphics object first. Lets take a look at the initialization code:

      float aspectRatio = (float)TestGame.Width / (float)TestGame.Height;
      Projection = Matrix.CreatePerspectiveFieldOfView(
          (float)Math.PI / 2, aspectRatio, 0.1f, 1000.0f);
      View = Matrix.CreateLookAt(
          new Vector3(0, 0, -50), Vector3.Zero, Vector3.Up);

      lineVertices[0] = new VertexPositionColor(
          new Vector3(
          -1.0f + 2.0f * pos1.X / TestGame.Width,
          -(-1.0f + 2.0f * pos1.Y / TestGame.Height), 0), Color.Red);
      lineVertices[1] = new VertexPositionColor(
          new Vector3(
          -1.0f + 2.0f * pos2.X / TestGame.Width,
          -(-1.0f + 2.0f * pos2.Y / TestGame.Height), 0), Color.Green);

      CompiledEffect compiledEffect = Effect.CompileEffectFromFile(
          "Shaders\\LineRendering2D.fx", null, null, CompilerOptions.None,
          TargetPlatform.Windows);
      effect = new Effect(TestGame.Device,
          compiledEffect.GetShaderCode(), CompilerOptions.None, null);

      worldViewProj = effect.Parameters["worldViewProj"];

      This looks slightly more complex. The reason for that is the conversation from pixel coordinates to screen space, which goes from -1 to +1 and has y inverted. We could also do this calculation in the vertex shader, but I like C# more ^^ Please also note that we don't need the z coordinate, but it is way easier to just use the VertexPositionColor struct instead of creating our own struct. Lets continue with the rendering.

      // Start line shader
      effect.Begin(EffectStateOptions.Default);
      effect.Techniques[0].Passes[0].Begin();

      // Render line
      worldViewProj.SetValue(View * Projection);
      TestGame.device.VertexDeclaration = new VertexDeclaration(
      TestGame.device, VertexPositionColor.VertexElements);

      TestGame.device.DrawUserPrimitives
      (
      PrimitiveType.LineList, 1, lineVertices);

      // End shader
      effect.Techniques[0].Passes[0].End();
      effect.End();

      Nothing changed here, nothing we have to discuss. Everything works just the same. lets take a look at the shader!

      // File: LineRendering2D.fx, Author: Abi
      // Code lines: 52, Size of file: 1,18 KB
      // Creation date: 31.08.2006 05:36
      // Last modified: 31.08.2006 06:55
      // Generated with Commenter by abi.exDream.com
      // Note: To test this use FX Composer from NVIDIA!


      string description = "Line rendering in 2D space shader for XNA";

      // Default variables, supported by the engine

      float4x4 worldViewProj : WorldViewProjection;

      struct VertexInput
      {
          float3 pos : POSITION;
          float4 color : COLOR;
      };

      struct VertexOutput
      {
          float4 pos : POSITION;
          float4 color : COLOR;
      };

      VertexOutput LineRendering2DVS(VertexInput In)
      {
          VertexOutput Out;

          // Transform position
          Out.pos = float4(In.pos, 1);
          Out.color = In.color;

          // And pass everything to the pixel shader
          return Out;
      } // LineRendering2DVS(VertexInput In)

      float4 LineRendering2DPS(VertexOutput In) : Color
      {
          return In.color;
      } // LineRendering2DPS(VertexOutput In)

      // Techniques
      technique LineRendering2D
      {
          pass Pass0
          {
              VertexShader = compile vs_1_1 LineRendering2DVS();
              PixelShader = compile ps_1_1 LineRendering2DPS();
          } // Pass0
      } // LineRendering2D

      Not much changed here either. Only the vertex shader is changed, we don't have to use our worldViewProj matrix anymore. We are just copying the data over to the pixel shader for rendering the screen stuff directly.

      Thats it for rendering 2D data. I guess most 2D stuff will be covered by the Sprite class, but if you need some custom 2d stuff (lines, boxes, etc.) this code should help you out. Have fun writing more complex stuff.

    • Ok, if the line stuff is that hard, lets do some simple mesh rendering, right?

      Wrong again. While this was planed for the XNA Beta release, it didn't make it into the beta and you have to do your own mesh loading, handling and rendering. In the SpaceWar Starter Kit game you can find some code to load swm model files (wtf is this format?), but you can't render .x or .fbx files that easily yet. In the future no problem, but right know you are f .. erm, not able to ^^. When I got some code for mesh loading and rendering, I will show it :-)

    • Content Management, what about that?

      Well, its quite cool to just drop your content files into your project and then you can directly access them in your code. But since this feature is not supported yet, there is no point discussing it ... If you want to read stuff anyway, check this blog posts about the content pipeline out: http://blogs.msdn.com/xna/archive/2006/08/29/730168.aspx and http://blogs.msdn.com/shawnhar/archive/2006/08/26/725954.aspx.

    • Why are there so few help topics in the most important namespace Microsoft.XNA.Graphics, especially for 3d rendering?

      Well, since most of the line rendering, mesh or even the content pipeline is not supported, it is no wonder some important topics are missing. The help basically just tells you how to create a textured cube yet, nothing else. But this is also an early beta release, expect more help topics in the future. The many new XNA pages that are created these days (like 10 new ones each day ^^) will also provide a lot of resources. I bet XNA will have a really big community after a while. XNA has already interessted a lot of people about this new technology.

      Please also try to use the DirectX documentation as backup help in case you need more tutorials, samples and documentation.

    • Shaders?

      Yap, everything except Sprites has to be done with shaders. I guess this will be reason enough for most XNA games to never have any 3d content. Working with sprites is quite easy, but having to write custom shader code, declaring vertex types and having crazy random exceptions is nothing easy.

      For example if your shader fails to compile you get just a System.NullReferenceException: Object reference not set to an instance of an object. There is no explanation what did went wrong, which is pretty bad IMO. Shaders are really a pain in the ass because they are not managed in any way. Its just some script that gets compiled for the GPU and if anything went wrong you can hope your tools tell you exactly what to do. MDX did already suck in this regard, but from my quick early preview XNA is way worse. I really hope this part gets improved. What does nice and clean sprite, sound and controller programming help me if the 3d code is ugly as hell and as hard to write as c++ minus the debugging benefits from DirectX.

      Debugging DirectX? Yes, lets do that. First you need VS 2005 (see below how to get that to work with XNA). Now activate unmanaged Debugging and make sure DirectX is running in Debug mode (either go to your control panel and open up DirectX or use Start->Programs->DirectX->Utilities->Control Panel (which is the only available choice on x64 bit), now select debug mode and also set the Managed DirectX dlls to debug for better debugging support. Now when crazy NullReferenceExceptions happen and you are lucky you might see some helpful explanation.

      Scroll above to see some simple shaders for the line rendering stuff. There is also another shader example in the documentation, work with that code and change it with help of tools like FX Composer to find out about compiling errors beforehand.

    • Do I have to dispose textures, models, etc. like in MDX?

      Not really. I didn't notice any problems yet. I guess XNA has some mechanisms to collect all resources when disposing itself (game component and device). As you can see in the SpaceWar Starter Kit they didn't had to implement any disposing for their MeshCache or TextureCache lists in SpacewarGame.cs.

      This is quite cool IMO, it makes coding even easier than it was in MDX.

    • Why does my game crash with a NullReferenceException when I drag it over to another screen when using SpriteBatches?

      I guess this is some bug in the SpriteBatch class, which does not handle the device lost event correctly or something. It always crashes in the Begin() method when dragging the window out of my first screen. Since the SpriteBatch class does not have any events other than disposing, the best and simplest solution is just to add a event handler for the OnCreateDevice event and put your SpriteBatch creation code there too. This way it gets re-created when you need it. Would be nice if you didn't have to do this yourself ... XNA team reading this? Who knows ^^

    • Occlusion quering for example for lens flare effects?

      Not supported, check out this post.

    • What about Physics, AI, Collision, Particles, etc.?

      Not supported right now, check out this post. Since XNA is mainly a graphic engine with sound and controller support, it is not very likely you get advanced engine features soon.

    • How to get XNA working in VS 2005 (with all the plugins you might have, which do not work in Express)?

      Thats not supported or even possible out of the box! Read more about this here (Forum) and in the FAQ.

      But since I'm such a clever guy I modified the XNA templates quite a bit and added support opening the project in VS 2005. Read the full story here. Basically just download this: Xna64BitSupport.zip (14 KB) and extract it to:
      C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\VCSExpress\
      Now you can open your created XNA Game Studio Express projects in VS 2005 and continue working on them there.

    • Unit Testing in XNA?

      Quite simple, just add NUnit.Framework.dll, which is fully managed and should even work on the XBox360 (not that you need unit testing there). If you use VS Express, TestDriven.NET will not work (unless you have a version from last year, which still supported it). If you use VS 2005 use TestDriven.NET or TestRunner (tested it few weeks ago, very nice, but does not support static unit tests, big nono for me).

      I also suggest using a TestGame class and do many static unit tests to play around with XNA (I already wrote 5 static unit tests today). Thats much faster than to create a new project everytime. And each test looks much easier and shorter than a complete new project.

    • Performance of XNA compared to MDX or native DirectX.

      I couldn't detect any performance penalities yet, someone in the XNA forums had some problems archiving 800 fps when using bitmap fonts, dunno what that was about. But it is very hard to say how XNA performs in relation to MDX because there is not much code or games we can compare yet.

      But in my opinion it does not even matter, the XBox360 is fast enough even if you write really shitty code and the windows platform is also quite fast with all this dual core around. For most simpler or casual games this will never matter much. However I do strongly believe that XNA will perform on the same level as MDX and DirectX.

    • But I want to play my XNA game on my XBox 360?

      Me too, but we have to wait for the next drop of XNA ^^ Not supported yet.

    • What about Rocket Commander for the XBox 360?

      Well, I thought about that, but since many of the classes used in Rocket Commander are not supported yet in XNA and the actual XBox360 execution is not yet possible, why even bother? As soon as XBox360 XNA'ing is possible, I will consider a Rocket Commander port again.

    • Btw: Why is the SpaceWar Starter Kit so big (155 MB uncompressed)? There is not even music in it.

      Most textures are uncompressed as .tga files, not good ... Rocket Commander has more graphics, music and I guess more sound files too, but is less than 10 MB.

    • Need more help? Then ask in the XNA Forums and not here, I got stuff to do :D

Hope this helps. I will post more about XNA Trick & Tips soon ;-)

Yes, I'm writing a XNA game too. It will even be a Starter Kit for the next XNA Game Studio Release, more about that next week, I will post weekly screenshots like in the Rocket Commander Development time.

 Wednesday, August 30, 2006
Wednesday, August 30, 2006 6:18:45 PM UTC (  |  |  |  |  |  )


Microsoft has released their XNA Framework and the XNA Game Studio Express (which is based on Visual Studio C# Express). You can now start developing your own games using the XNA Framework.

The download includes some documentation (not much on 3d graphics I have to say) and a pretty cool and interessting Starter Kit "SpaceWar", which is an Asteroids clone with both retro and modern graphics. More content, more help and more starter kits will come in the future.

Sadly there is no direct XBox360 support yet, so you cannot plugin your XBox360 and play your XNA games right now. As stated in the XNA FAQ this will be possible in the near future (next drop in a few months maybe).

Anyways, download the XNA Game Studio out and check it out:
http://msdn.microsoft.com/directx/xna/gse/

There are many questions in the XNA Boards, a lot of stuff to read ^^ If you are searching for some early XNA Tutorials, Samples and Blog, check out the links in this thread:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=682393&SiteID=1

Great stuff ahead, but be aware, this is still beta and might not be complete enough for every need. I guess some of the helper classes and 3d graphic classes will be extended and there will be much more help available in the future :-)

I will also blog alot about XNA in the near future, but first of all I need to do more XNA coding and find stuff out.

 Monday, August 28, 2006
Monday, August 28, 2006 3:00:11 PM UTC (  |  |  )
As always we (exDream) put some cool pics of the Games Convention up on our website www.exdream.com, check them out here: gallery gc 2006


 Saturday, August 26, 2006
Saturday, August 26, 2006 10:25:08 PM UTC (  |  |  )
Today was the day with the most GC vistors ever I think. After almost 2 hours waiting in the traffic jam generated by the fair, we finally made it onto the GC (good thing our first appointment was not before 12pm).

And this is the look inside this day. Could be 1 or 2 more vistitors than yesterday.

Even between the halls people were sitting, blocking us important developers from reaching our important destinations, etc. yes, we developers are big cry babies.

Nice ATI babes throwing bags into the air. Btw: Shouldn't they be renamed to the AMD babes till next year?

Some more babes preparing something .. or maybe this are just normal woman, but we gamers have no idea what the difference is anymore.

Ahhhhh, a dinosaur .. yesterday Evil Sonic kicked me in the head and now a big dinosaur from ParaWorld wants to eat me. Dangerous worlds.

Looks like Blizzard is now doing colorful jump and runs. Looks at least like it from this distance. This is still WoW, how can Blizzard ever make anything else after canceling StarCraft Ghost?
On the left side you can also see the booth of Autodesk showing 3DS Max 9, which now supports x64 and allows users to create scenes with over 10 mio polygons, which was impossible in 32 bits (it always crashed). This is especially useful for game developers and when importing objects from ZBrush.

And finally some lens flare effects around that Unreal 3 Guy thing (6 meters high or something).

Thats it for the Games Convention this year. This evening we already drove back home because tomorrow the Business Center is closed and we already saw all of the consumer areas.

All in all this was a good fair, some nice discussions and new contacts were made and the consumers had a great time seeing all the great games, erm, Videos of the new games and technologies. Like not seeing the PS3 in action or not seeing Gears of War because it didn't get a USK parental control logo in time ...

Back to work now, have to do some cool XNA stuff now :-)

Saturday, August 26, 2006 12:11:58 PM UTC (  |  |  )
It was a lot fuller today at the GC here. But tomorrow (saturday) it will get really crazy.

This is the new big bad boss for World of Warcraft, you need at least 50 players to kill this beast. Okay, maybe this is the wrong game.

More folks than yesterday.

The big EA booth, Command&Conquer 3 and Crysis were the biggest attraction. In the center there was the big circular cinema as always.

And this is Crysis, really! Look closer and you see the screenshots and keyboard help for Crysis. The game itself looks good (improved FarCry engine), but the game play is pretty much the same. And if it crashes on developer machines, you have some command line shit going on (wtf? in which year do these developers live in?)

Some Pro-Gamers at one of the many esports booths. Counterstrike, WarCraft3, StarCraft, Battlefield were still the most played games.

Overclocking the new Intel Core2 Duo with cascadading cooling or whatever, -80 degrees celsius and over 3.7 Ghz .. something like that, they reached 12000 points in 3D Mark 06, that is sick.

Ahh some babes. But what are these guys selling? BitDefender? Okay, time to look at the babes again ...

Driving in one of these things with a wheel, 3 monitors and a mechanical chair that moves in every direction might be cool, but buying a real car is way cheaper, isn't it?

Sonic is pointing at something. Whats going on here?

Ohh no, the evil sonic is hitting me. That doesn't look good for me. He is much bigger than me and I don't have any coins left .. Arg - game over ..

More pics about saturday will come tomorrow.

 Thursday, August 24, 2006
Thursday, August 24, 2006 5:27:03 PM UTC (  |  |  )
Okay, here we go, this is day 2 (thats now really the pics from today).

As you can see there are a lot more people around today.

Alrighty. There are the babes. Nice chicks from 10tacle. Finally ^^

After watching that I might have to relax for a while.

Thats a cool elk.

Wanna test drive? This is what attracted most of the gamers, lets just sit down and play.

Omg, autograms from Will Wright? Okay dokay ... n/c

And finally some sport activities. Yeah, looks always cool.

Thats it for today, see ya tomorrow.

Thursday, August 24, 2006 1:51:40 PM UTC (  |  |  )
I will post a couple of screenshots from the GC 2006 here in Germany Leipzig each day. We are here since yesterday, but internet wasn't working yesterday. This post is about yesterday. I will post new screenshots about today later. As you will see the first day only press, developers and publishers guys are running around, but at the second day a lot of games, young people will up the halls and in the next days this will get a lot crazier.


Ok, this is the buisness area of the Games Convention, we are at the booth F60.

On our way to the Games Convention. Can you detect the hidden exDream logo in this picture?

This is our booth in Hall 2, F 60. We got a booth together with some other developers, but this year we don't have a Northstar developer booth.

This is the new porsche car everyone wants to have. Or was this some car from Need for Speed? Maybe not ...

My 2 colleages Leif and Boje inside our booth. You can see our new exDream banner in the background.

You can also play our newest game Pizza Commander directly in Hall 2 at the Novitas booth. Boje shows us how to master the first mission ^^
The Microsoft Student Booth (also in Hall 2) does also present Rocket Commander and there are a couple of guys playing around with the source code. Check it out if you are in Hall 2.

For girls there are pony games, but similar to this booth at most smaller booths there was not a lot going on this day. Today a lot more people will populate this fair. No way getting fast from point a to b.

Ok, that are the pics from yesterday. More pics about today will come soon. And as always much better pics (not taken with my crappy cell phone camera) will be released next week on www.exDream.com.

In case you want to watch some funny littel videos, check out these Drink Milk videos:
http://www.metacafe.com/tags/milk_commercial/

 Friday, August 18, 2006
Friday, August 18, 2006 6:32:56 AM UTC (  |  |  |  |  |  |  |  )
I installed Windows XP Professional x64 Bit today and this post is about my experiences with it. I tried it a year ago, but most drivers were not available for 64 bit back then. Now most drivers are supported and most programs will work without a problem. However some drivers and programs will still make trouble. Most of the issues could be resolved one way or another.

Generally I would say Windows XP x64 works great and is even a little bit faster than 32 bit Windows.


No problems

Had to change my mainboard because my current one went dead yesterday, I could use the same Windows x64 version without reinstalling, thats nice. Windows 32 bit does not work anymore (some driver troubles I guess). I also noticed that about Vista, no more reinstalls required if you change your board and cpu.

Games worked great, no problems here. I guess Microsoft plays a lot of games and wants to make sure all of them work, hehe. Even 15 year old games like Raptor (my all time shoot'n'up favorite) or Wolfenstein 3D worked without problems. Starcraft, Quake3 and current games worked nice too. Daemon Tools also provides a x64 bit version for Windows XP x86 for emulating CDs or DVDs.

Visual Studio 2005, DirectX SDK and all other development tools like VS Express, SharpDevelop, CodeRush, Perforce, UltraEdit, PCalc, NSIS, etc. work great too. For running 32 bit IIS apps you might have to follow these instructions.

Virtual Server 2005 works nicely and you can run virtual x64 and x86 computers, I guess the performance is also good or even better than before, but maybe my system is just faster.

Most normal programs did work too, but since nearly 99% of all programs are still 32 bit, it does not really make sense to have a 64bit platform yet. For browsing IE 64 bit is available and for Firefox (which is 32bit again) there is a 64 bit port called Deer Park, which works nicely. Both of these browsers are useful if you need more than 2 GB memory for your crazy browsing. Some programs do provide a x64 bit version, which works just the same way as the 32 bit version (I guess they did just a recompile with different compiler settings). I would say more programs and tools will be tested for x64 in the future, especially for Vista, when more users might choose x64 for their operating system.


Programs with problems

Most .NET 2.0 tools I tested did not work, but all of them could be fixed by changing the build setting from Any CPU to x86 Platform. While .NET 2.0 has NO problem running in 32 or 64 bit, it is not that easy in the case you call any external code (and almost all my tools do that). For example my AbiTrafficMonitor tool uses SharpPcap, which again uses wpcap.dll, which is only available as a 32bit dll. By forcing 32 bit to the application everything works great, in 64 bit the dll is not found and can't be forced. It is not possible to load 32 bit dlls in 64 bit mode, you will get the following error message when attempting to do that. An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)

So you have to make sure a 64 bit version of all used dlls exists, else DO NOT use the Any CPU or x64 Platform settings. so this has to do something with .NET 2.0 (just some stupid compiler setting, recompile works, but a smarter version would be cool).

Here is the new installer for AbiTrafficMonitor, which works on Windows XP x64 too (by forcing the x86 mode). It does obviously still work on a normal 32 bit (x86) windows platform.

.NET 1.1 games like my Arena Wars game worked too, also .NET 1.1 tools worked fine. All .NET 1.1 assemblies run automatically as 32bit applications by design. .NET 2.0 runs automatically in 64bit mode on x64 platforms if All CPU is selected.

However my .NET 2.0 game Rocket Commander could not be started. Actually this is the same problem as above (not allowed to call 32 bit dlls from 64 bit code). .NET 2.0 runs fine in 64 bit mode and DirectX provides also 64 bit dlls, BUT Managed DirectX does NOT support using 64 bit. There is no version available to do that right now, neither MDX 1.1 nor MDX 2.0 support x64. So again, force the platform to be x86 and everything works again.

I recompiled Rocket Commander and it is available at the default download location: www.RocketCommander.com download page
There were also a couple of discussions about this issue in the Rocket Commander boards.

Another issue are external tools or helper tools like TestDriven.NET, which support x64, but it seems the underlaying NUnit Framework does work only in 32 bit. Not funny at all if you have a x64 bit app or just run All CPU on a x64 platform and want to test your code. This issue can be resolved by testing in 32 bit mode and then later switch to 64 bit if you want a 64 bit version of your app.

UltraEdit, WinZip and WinRar work fine, but all of them are 32 bit. So whats the problem? They all provide shell extensions for the Windows Explorer, which do not work in the 64bit version of the Explorer. There are 2 solutions for this.

  • Start the Windows Explorer 32 bit with the command line. Command:
    c:\windows\syswow64\explorer.exe /separate
    This didn't work very well for me, some of the shell commands did not work properly and it is really annoying to start the windows explorer this way. Often you might open a folder or jump to a containing folder, then of course the default 64 bit Windows Explorer is used.

  • Add your own shell commands in the registry. This works great for Open with UltraEdit or Extract files here, but if you need smarter commands like Extract to subfolder this doesn't help. Anyways, here is the solution. Add this file to your registry to add the following lines (change them to whatever you need):

    Windows Registry Editor Version 5.00

    [HKEY_CLASSES_ROOT\*\shell]

    [HKEY_CLASSES_ROOT\*\shell\Extract here]
    @="Extract here"
    [HKEY_CLASSES_ROOT\*\shell\Extract here\command]
    @="C:\\Program Files (x86)\\WinRAR\\winrar x \"%1\""

    [HKEY_CLASSES_ROOT\*\shell\Ultra Edit]
    @="Open with UltraEdit"
    [HKEY_CLASSES_ROOT\*\shell\Ultra Edit\command]
    @="c:\\Program Files (x86)\\ULTRAEDIT-32\\uedit32.exe \"%1\""


Programs and drivers that do not work

Some old setups like for the Panorama Wallpaper changer do not at all (wrong windows version error message), but I managed to install some of the manually (copying files and setting registry settings).

My on board network drivers do not work at all, neither does my old TV card, but I had many driver problems in Vista Beta 2 x64 too. I found a old 1Gbit network card that works and I never watch TV anyways. All other drivers (board, gfx, sound, mouse, keyboard) work just fine.

Update 2008-08-19: My onboard sound really sucks and I tried to install my old PCI Soundcard (XFire 1024), but since the vendor does not provide 64 bit drivers, there is no way I can use that card. The onboard network adapter (Marvell 88E1111) also stopped working and does not even show up. Another old VIA VT6120 1gbit card could be installed, but didn't work either. Maybe I have to try out deactivating the other cards and then it should work, a 64 bit driver is installed.

Now to my main issue: You cannot use ANY new keyboard layouts at all! I really need my own AbiKeyboardV9 layout to type efficiently. I tried like 10 different other keyboard layouts too, all of them can be installed, but as soon as you try to use a new layout you always get a error message like "Windows could not load the x keyboard layout.". Not funny at all and I found absolutely NOTHING for either vista or x64 Windows to fix this problem on the internet. I used the Microsoft Keyboard Layout Creator, which works great on Windows XP 32 bit and lower. But this tool was last updated 2003 and the support for future windows version or x64 is just not-existant. Other tools I tried (keytrans, klm, etc.) suck even more and usually cost a lot of money, none of them worked on 64 bit or provide any useful features for me. All of them work only in 32bit.

More links on that topic (all of them have x64 bit problems and are unresolved)
http://www.planetamd64.com/lofiversion/index.php/t15929.html
http://blogs.msdn.com/michkap/archive/2006/01/26/517728.aspx
http://blogs.msdn.com/michkap/archive/2005/10/06/477930.aspx

I found some information on Marks Blog from Sysinternals in which he provides a solution to his Cap2Ctrl tool (which just maps the Caps Lock key to Ctrl). Similar to that I found out which keys have which codes with help of the scancode.doc doc from Microsoft for keyboard developers and wrote my own keyboard remapping code.

While the normal keys worked great and were changed in a couple of minutes all the special keys are messed up because I had different meanings for pressing shift with special keys. I found no solution to that so I updated my keyboard layout, there were some minor changes I wanted to do anyways. This is my new keyboard layout, which now works on all windows versions (finally I can use Vista too ^^). Some keys are not optimal, but to support both the german and US keyboards some '/" have to be used twice (scan code 2B) and some keys like -/_ had to be moved to worse positions (relative to my old layout, not much of a difference compared on the US layout). This can't be fixed with scancode remapping. I've used my new layout for a couple of hours now and it seems fine. The most annoying changes are <>, (), \|- and -_, everything else stays, but I guess I will manage.

This is my new Keyboard Layout:

  • AbiKeyboardLayout v10
  • To install you can use the following file: abi keyboard installer.reg
  • And uninstall it again with this file: abi keyboard uninstall.reg
  • This is the content of abi keyboard installer.reg:

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
    "Scancode Map"=hex:00,00,00,00, 00,00,00,00, 19,00,00,00, 2A,00,3A,00, 2B,00,0C,00, 0C,00,0D,00, 0D,00,10,00, 19,00,12,00, 15,00,14,00, 10,00,15,00, 22,00,16,00, 20,00,17,00, 21,00,18,00, 25,00,19,00, 28,00,2B,00, 18,00,1F,00, 12,00,20,00, 16,00,21,00, 17,00,22,00, 1F,00,24,00, 14,00,25,00, 31,00,26,00, 26,00,27,00, 27,00,28,00, 0C,00,56,00, 24,00,30,00, 30,00,31,00, 00,00,00,00

    To understand the scan codes and how this binary code is formated please read this document: scancode.doc.

So far so good, I will stick with x64 and you guys know now how complicated my computer is ^^

 Sunday, July 23, 2006
Sunday, July 23, 2006 5:45:08 AM UTC (  |  |  |  |  )
This post is not about programmer tools, but just tools and helpers for everyday use in windows. There will also be no anti virus programs, big or special applications or any games in this list, just little tools (most of them just a few Kb big). All of them are free to download. Most of them didn't change over the last years, but some tools got replaced by some better tools :)

This are my personal Top 10 Tools. These are the first programs I install on a fresh windows machine (besides Visual Studio 2005 and UltraEdit of course ^^):

  • Process Explorer:
    Process Explorer The Process Explorer shows you information about which handles and DLLs processes, much more useful than the standard windows Task Manager. This is a very useful tool to find out more about running applications and getting detailed information of everything that is going on. Btw: Microsoft has just acquired Winternals Software and Sysinternals, the makers of this and many other great tools.


  • Application Traffic Monitor:
    Application Traffic Monitor Cool little tool to see traffic and speed of each application. Can also be used to see how much your traffic costs if you don't have a flatrate. It was originally developed by Andrew A. Fedorov (bizkit-soft) and more information can be found on this codeproject.com article.

    I extended the tool quite a bit and fixed some issues. New features are:

    • Notify Icon shows the current upload and download speed in a nice graph
    • Extra options in notify icon menu showing the current download and upload speed.
    • Also showing to total used traffic since the tool is running.
    • Tweaked the WinPcap calling code a bit and added some features (close button, stay on top, cost option now hidden, etc.).
    • Disabled the small window by default and allowing it to hide with menu or simple double clicking it or the tray icon. The small window is nice for detailed info, but most of the time you don't want it.
    • Notify icon shows a nice tooltip with speed and traffic information
    • Remembers traffic window position and size.
    • Added a nice installer, which automatically installs the WinPcap library if required.

    You can download my extended version of the tool here:
    AppTrafficMonitorInstaller.exe (163 Kb, v1.2, 23 July 2006)


  • Google Desktop:
    Google Desktop Most useful desktop search tool, also quite nice sidebar with many gadgets. There are many other desktop searchs available today (Yahoo! Desktop Search, MSN Search with Windows Desktop Search, etc.), but I still think Google Desktop is the most advanced, supports the most file types and has the most plugins available. If you use google all the time anyway, it is also useful to see if it finds something directly on your computer while searching the web.


  • IrfanView:
    IrfanView Freeware image viewer, supports many file formats (almost everything you can imagine). Not much else to say about it. The default Windows Picture and Fax Viewer sucks and ACDSee is nice too, but cost money. I also like the support of .dds files, which almost no other image viewer can display, very useful during development.


  • Miranda IM:
    Miranda IM Instant Messenger that supports many formats, including ICQ, MSN, AIM, IRC. Miranda has a clean and simple interface, too simple for some people, but what really matters is how useable a program is. I don't need fancy buttons and annoying animations, which only look cool the first time. I never liked MSN or AIM or the newer ICQ versions (just the programs and looks, not the protocol). But to keep your contacts in one place, to access all the ICQ contacts (still the most used IM tool for games and almost everyone I know) and because the newer ICQ versions all suck too, it is quite nice to have one single IM tool that does everything. You can even use your Skype contacts with Miranda, now that is really cool because chatting with Skype is like talking to monkeys (Skype is good for talking, thats it).


  • Skype:
    Skype Skype should be on every top 10 list, best phone and VoIP app ever. Forget about TeamSpeak, Ventrilo and the million other VoIP apps, they all suck :D Extended features like SkypeOut (calling phone lines) are also quite nice.


  • uTorrent:
    uTorrent Best torrent client ever, Azureus was nice too for a while, but we all know .NET > Java and uTorrent has so many cool features (RRS downloader for getting DotNetRocks and Mondays :), trackerless support, quick resume, etc.) with an incredible small download while needing almost zero resources. It gets also improved from time to time to add more features while keeping it simple and user friendly.


  • Daemon Tools:
    Daemon Tools Daemon Tools allows you to emulate cd and dvd drives and gives you the ability to directly access image files (iso, cue, bin, etc.). You should use it together with FastMount to easily open up images by double clicking on them. While this tool is used a lot for circumventing cd protections for games, it is also useful for everyday use. I hate changing cds or dvds and I got a big hdd raid with enough space to hold many iso images :)


  • Panorama 32:
    Panorama 32 Really useful wallpaper manager since 1998, I got over 30k images in my wallpaper queue :) Well, you have to like changing your background a lot (I let it change every 10 minutes) and you should have a lot of pics with girls (or boys or cars or planets, whatever you like) ^^


  • WinAmp:
    WinAmp Still the most useful program to play music. Can also be used for videos, but I suggest using VLC media player and Windows Media Player Classic for videos (but including them in this list would require more than 10 entries ^^).


Btw: Little shoutout to Dirk Primbs, who is blogging like crazy lately on his new blog, check it out. Lots of info about new technology and stuff.

 Thursday, July 13, 2006
Thursday, July 13, 2006 4:51:15 AM UTC (  |  |  |  |  |  )
I got my MVP Award Package today ;-) Thats some pretty cool stuff (see on the right side). Now I can not only brag on the internet, but also when running around (crying "I'm a MVP" like a madman).
I also just checked the activity on this blog and I almost get twice as much hits than last month, wtf is going on? Ok, enough of that self-praising. Let's get to some serious stuff.

Lately I've been working a lot on databases, websites and xml data for several projects. I tried out Linq (C# 3.0), still beta last month (see this post about the Linq CTP May 2006) and still find it very useful. This post is about some of the experiences with Linq and especially DLinq, which is for accessing databases very easily. I got a lot of questions from people asking me if Linq is really that useful and instead of answering them one by one, I can now refer to this page and the links here. For this reason this post may become a "little" longer than usual ^^

Lets start with a graphic to let the C++ fanatics (and maybe some Linux freaks too) get more mad at me:
Linq is amazing



Content


Introduction to Linq

If you don't know much about Linq and its uses, check out the official LINQ Project site first.
Linq does basically just simplify queries and data access in your application. For example if you are using DLinq you will not have any new Sql features or anything, your database stays the same, but accessing the data and working with it becomes much easier. I personally do also like the fact that I don't have to write any Sql Commands anymore in C#. Sql is something for the database and using stuff like stored procedures. It was never fun to write your own wrapper everytime you have to access some database stuff. Lets see an example:

Before Linq:

Using SQL before Linq

With Linq:

Using SQL with Linq

Many more samples and examples can be found in the 101 LINQ Samples, which are still very useful.
ScottGu gave also a nice introduction about using LINQ with ASP.NET on his blog.

Also don't confuse LINQ (sometimes called C# 3.0 because it will come in Visual Studio 2007 - code name Orcas) with the Microsoft .NET Framework 3.0 (formerly known as WinFX), which consists of all the new Windows Foundatation technologies (WCF - Windows Communication Foundation (formerly Indigo), WPF - Windows Presentation Foundation (formerly Avalon), WF - Windows Workflow Foundation, Windows Cardspace (formerly InfoCard)). Ok, I admit you have every right to be confused.


Working with the new XDocument instead of XmlDocument

Ok, lets get back to Linq, we will talk about databases later. You might use some of the features in Linq in your classes, for example the new Extensibility Features, which are pretty cool to add functionality to existing classes. Other than that most of your code will stay the same, you will most likely not use queries just to render some lines on the screen.

But if you were using the XmlDocument class before, a lot of code can be changed and simplified. I had a couple of Xml helper classes, which I don't need anymore now since using the XDocument and XElement classes is much simpler than before with XmlDocument and XmlNode. Lets take a look how easy it is to compress large parts of code basically into a single line:

XmlDocument (.NET 2.0 and before):

XmlDocument before Linq

XDocument (Linq):

XDocument with Linq

Working with Xml data is also a lot easier now, check out the 101 Linq Samples to see what you can do with the new syntax in Linq. I would say code that is using Linq can get up to 2 to 3 times smaller than before if you use a lot of foreach enumerations and lists, especially in combination with xml data.


No schemas in Linq? What to do.

For some reason there is no XSchema class in Linq, but you can still use the existing XmlSchema class in the System.Xml.Schema namespace. Creating XElement nodes directly from XmlSchemas might require some new code, but it is not very hard to convert any old code. Lets take a look at a simple example.

Example Xsd Schema file (SomeSchema.xsd):

XmlSchema definition for Linq

Creating an XElement with help of a schema:

Creating an XElement with help of a schema

The helper method for filling the XElement node:

The helper method for filling the XElement node

The Linq documentation says you can also use Annotations instead of working with schemas to specify rules for your xml data, but in my case this doesn't help to create new xml data. To learn more about Annotations read the Linq documentation or listen to the Object Database Podcasts.


Using DLinq

Ok, all this Xml stuff is interessting, but most applications, especially websites store their data in databases and this is were DLinq becomes useful. DLinq was the main reason for me to even bother checking out Linq. I always hated to write SQL commands in C# (or any other language) and not be able to catch any obvious errors, which could be seen while coding if Intellisense would be available for SQL Commands. But even if all the syntax is correct, a lot of semantic errors can happen and only testing it 7 million times makes sure that it works. As seen above we can now write our own queries directly in C# with Linq, which will create some stored procedures in the background for us. These queries are only created if we write some select statement in C#, the data is not actually retrieved yet. Only if we call foreach to enumerate all users a sql command is created in the background and will be handled.
Using SQL with Linq
So what about that TestDb class, where does it come from? It is autogenerated with help of the SqlMetal command line tool in Linq. This tool will create a class for every table in your database and give you a database class (in my case TestDb) and some helper methods to access your data. Everything else can be done directly from C# code.

What about performance? Well, I'm no SQL guru and it is hard to tell if Linq performs well on big databases, but from my tests and experiences in the last weeks, there is nothing wrong with Linq. It performs quite well. I don't think it will be Linq's fault if your database access is slow. You can also write Stored Procedures (see next section) if you think you can write some better sql code and call it directly from Linq. I can tell you for sure that using Dlinq is much more enjoyable (even with the current Intellisense bugs with Linq) than writing SQL statements in C#, I hope I don't have to do that ever again.

When will Linq be available? Currently Linq is still in Beta, it will become available in the next Visual Studio Version (code-name Orcas), which will come in 2007. Until then a couple of new Beta versions might come out. Beta 2 (Linq May CTP) is pretty stable and useable, it has only a couple of issues with the Intellisense in VS.


Stored Procedures with DLinq

Maybe you have already a lot of SQL tables and some Stored Procedures around and just want them to work with DLinq. Just use the /sprocs command line switch for SqlMetal. Now a couple of helper methods will be created for you that allow you to execute these Stored Procedures directly and use the return value as you would with a query written directly in DLinq.

Sahil Malik wrote on his blog Winsmarts already a lot of info about DLinq and Stored Procedures, so I'm going to be cheap and just link to it :-)


Blinq

Thats not all. If you are usinq Linq for your website you should check out the Blinq Project, which automatically generates ASP.NET websites for all your database tables. It does not only allow you to view data, but you can also easily create new entries or change any data in the tables. If you know MyPHPAdmin from the php world, Blinq is quite similar (but not as complicated). Even if you don't really need this capabilities the generated code from Blinq can be helpful setting up your ASP.NET website because it shows how to use master pages, access your database and do all the things like getting data, adding data, updating tables, deleting rows, etc.

This is what a Blinq website looks like (ok, I've only created a very simple database):
Blinq TestTable


Linq Links


That's it for today, more this weekend, when I announce that I will play StarCraft - Broodwar on the german TV. Arg, this wasn't supposed to come out yet ... (grin)
 Monday, July 03, 2006
Monday, July 03, 2006 3:29:49 AM UTC (  |  |  |  |  |  )
It never stops, does it? There is yet another Mod for Rocket Commander. It is called Virus Commander and was made by Interwanderer aka Erdem Yarici, known from the Rocket Commander boards. In the beginning he had a lot of questions and not much experience with game development, but after watching the tutorials and playing around with the code, he managed to create his own mod. Looks pretty good for the first try, music is also nice. The gameplay itself is not much different from Flower Commander, but I bet Interwanderer will tweak that as well in the future. Anyway, have fun with the new mod :-)

Download links:

Virus Commander main menu:


Big Virus in the game:
 Monday, June 26, 2006
Monday, June 26, 2006 9:05:01 PM UTC (  |  |  |  |  |  )
The biggest german magazine for dot.net technology, called "dot.net magazin" wrote a nice 3 page article about Rocket Commander, the technology and engine behind it and a little interview with me. It really sounds great reading about .NET 2.0 and games, I get the feeling like I'm being normal ^^

Jens Konerow, the author of the article, wrote really nice stuff about me, thanks :) I'm not really a regular reader of the magazine (I only read english stuff, can't speak german anymore, hehe), but I check out their cool website and articles from time to time.

More information can be found on the official dot.net magazine site. If you have a chance to pick up the magazine, go do it, lots of interessting stuff in there :)

German Dot.net magazine:
 Tuesday, June 13, 2006
Tuesday, June 13, 2006 6:23:37 PM UTC (  |  |  |  |  |  )
The new DirectX SDK June 2006 came out a couple of days ago. It features absolutly nothing new, but is 60MB bigger than the last SDK, how is that even possible? I couldn't find any new or updated sample, the Managed DirectX documentation is still from August 2005 (but the C++ documentation is updated). As ZMan pointed out (from the SDK readme) on his site The Z-Buffer there are some News about the XNA Framework and the fact that DirectSound will be replaced by XACT and DirectInput by XInput. D3DX will also not be available in the XNA Framework because the XBox360 isn't able to provide the features, which is pretty stupid for a PC developer imo. But there is nothing new in the DirectX SDK for Managed DirectX, everything is unchanged.

The biggest news is that Direct3D 10 works now with the new Windows Vista Beta 2 preview. I tried out some older Vista builds (PDC version and some version in the beginning of 2006), but I wasn't satisfied with it. I thought: Lets give it another try, maybe play around with Direct3D 10 a little. Maybe there are also more drivers around for Vista.
In case you want to try out Vista too, you can get the Beta 2 Preview here (free for everyone):
http://www.microsoft.com/windowsvista/getready/default.mspx

I installed the 64-Bit version of Vista and it did take a little while (~ 1 hour) to install. My multimonitor setup worked instantly, which was pretty cool. My Nvidia card made no problems. However the sound driver could not be installed and all other devices only used some generic driver from microsoft. After a couple of hours installing and testing drivers, this is the result:

  • The interface and graphic effects for the windows are really good. Maybe there are similar things on Mac OS X or opensuse with xgl and compiz, but it doesn't matter if those look better or maybe have cooler features because most of the users will never use those systems (just because most of todays programs will never work on those systems). For me the instant preview is the best new feature, it doesn't matter if you press alt+tab (or windows key+tab), hover over startbar programs, use the internet explorer or use the windows explorer, there are little preview windows all over the place :-)
  • Realtek sound drivers just crash my system or they don't install properly. This drivers (I tried 3-4 different ones, XP 64 Bit versions and Vista ones) were really annoying, especially since Vista told me that the "Installation failed" with stupid things like "Could not copy file" like 500 times. After rebooting installing the drivers suddenly worked, but rebooting again didn't work and after restoring the system everything was messed up again (no sound). I installed another sound card (Soundblaster Audigy) and gave it up with the Realtek sound.
  • The second problem was getting my keyboard layout to work, which turned out to be the most annoying part of Vista for me. It is absolutly impossible to install other keyboard layouts in Vista. It is not just my keyboard driver, but every other driver I found on the internet (even marked as Vista compatible, lol) did not install. You will get always the same error message telling you "Installation failed", which will not help at all. I can still type with german or US english keyboard layout, but it is very annoying and confusing over the time. I just don't feel comfortable. I tried getting the Microsoft Keyboard Layout Creator to work, but only the testing mode did anything, everything else crashed the program, especially creating new installer packages. I also tried to hack into the existing layout drivers and modify one of them, but Vista always restored the original ones. In the last Vista releases (Beta 1 I guess) this seemed to work, but why not remove features?
  • But the problems didn't stop there, I also couldn't get my Sata Raid (silicon image) to work. Installing onto it was impossbile since Vista didn't accept any of the drivers at the installation time (I guess they don't work properly on 64 Bit), but later it was also impossible to use them. Every time I installed the XP 64 Bit drivers or drivers from the internet and restarted a black-screen (Vista doesn't seem to show bluescreens anymore) appeared telling me that the driver could not be loaded. No way to get my raid to work :(
  • But that's not all, most other drivers made also problems or could not be installed at all. For example even the Microsoft Keyboard driver can't be installed because Microsoft doesn't give you any vista drivers for their own hardware, wtf? Other things like my Hauppauge TV card didn't work either, but I didn't expect them to work.
  • To round things up, even in the little amount of programs I installed, there were some essential programs. That just will not install on Vista. Maybe they would work, but if the installation fails, you can't do much about it. Examples are some games and picture viewers like IrfanView.
  • Office 2007 looks really great and you should test out the Office Beta too, if you install Vista. The only annoying thing was of course my missing keyboard layout driver, but that has nothing to do with office ^^
  • I didn't install Visual Studio 2005, other programming tools or other big programs because of the problems above, but I don't think there are major issues with most programming tools. I heard somewere that graphic tools like Photoshop CS2 could not be installed, so maybe check that out first if you are a graphic artist.
Doesn't sound too good, does it? I was really thinking possitively after my Nvidia graphic card worked so good, in the last Vista Beta it didn't work at all in 64 Bit and I had to install the 32 Bit version, which also had its problems. But without keyboard support and so many driver issues it is not fun to use Vista at all right now, let alone work with it. And you might know that I'm pretty happy with Beta software like Visual Studio 2005 last year or Atlas and LinQ right now, but the important thing is they are downward compatible and always give you both the ability to use old code and to switch back to the old versions without much hassle.

I also installed the 32-Bit version of Vista on Virtual Server 2005 RC2, which looks cool too, but just runs way to slow. Vista does too many graphic effects for the virtual graphic card, it is no fun on a virtual machine (windows server 2003 runs 100 times better).

Everything I wrote here today isn't Microsoft's fault, it is just the drivers are not ready for Vista (at least if using the 64-Bit version, the 32-Bit version might be a bit easier to use). Lets hope the device manufactures improve their drivers before Vista gets released and not afterwards. The only thing bad in Vista besides the driver installation (it just makes no sense to tell me "could not copy file" and then it works after restarting) is the missing ability to install other keyboard layouts or change them. I still think Microsoft can make it this year to finally release Vista, but it woundn't hurt if it takes longer until every single driver works perfectly.

Little Update 2006-06-22: I also tested the 32 bit version of Vista Beta 2 now and I got the exact same driver and program problems (sound card, raid, tv card all don't work, many programs don't work, my own keyboard layout can't be installed, etc.). I just wanted to check out the new cool IIS7 (check out www.IIS.net) after watching the latest DotNetShow Episode about IIS7. IIS7 is really cool, but Vista is still unuseable for me (no sound, no keyboard layout are the main issues for me). Check out the DotNetShow for more details about IIS7 and how easy it gets to create, configure and deploy web applications.

Other news about my Visual Studio Boo language addin: I decided to pause the project because I'm currently very satisfied with LinQ and it's features and how good it can be used in Visual Studio 2005 already. I'm thinking about using my Boo language addin code for another addin sometime soon. There is a cool Visual Studio Extensibility Contest, where you can win up to $5000 and you will be featured on MSDN. I read about it yesterday, the contest is already running since last month, but the deadline is the 30 July, so there are still 7 weeks left. Have to thing of something cool though.


And: I just bought Half life 2 - Epsisode one via Steam (20 bucks only for a full singleplayer game) and I like that I don't have to go anywhere, just download and play. I was a big fan of Half life 2 and I like the fact that the singleplayer story now continues. The first mission is really good and I like the commentary mode in the game.

DirectX SDK June 2006


Vista Beta 2 Preview


Office 2007 Preview
 Thursday, June 08, 2006
Thursday, June 08, 2006 7:25:00 AM UTC (  |  |  |  |  )
Quick link to CR_Commenter v1.6 which supports C# 3.0 and adding namespaces now.

C# 3.0/LinQ (Language integrated Query) is pretty cool. I saw it at the PDC last year and watched some videos on Channel9. However, to use it you had to install a special VS2005 version from the PDC. Later an updated version came out, but still it was no fun to use it since the Visual Studio implementation wasn't any useful.

The technology behind LinQ is pretty amazing. It allows you to use Sql databases or Xml files or just lists or arrays in your code and query them with a very simple syntax. It improved a little, querying is not only easier, but more powerful and a lot of fun to play around. There are also a couple of cool short videos on the LinQ page (scroll down), which explain every big feature of LinQ.

However, it is still a CTP (the current one is from May 2006) and it is not really recommended for production code yet. You can read about problems with LinQ here and here.

You might ask why I think LinQ is so important, it looks like only database developers, business guys and maybe website developers will benefit from it, but right now there are a couple of projects and classes in my game engine that really benefit from C# 3.0. It does not only make the code much easier to write and is more fun to play around with, it is also much easier to read and test, debug, etc.

I don't really care if the product is ready or not, for example I like Atlas too and use it. I already like C# 3.0/LinQ in the current version and think it is very useable. The Visual Studio 2005 IDE does have its problem with it, but some of the problems can be fixed by just enabling automatic formating again and direct intellisense without pressing alt+space (if you like that and can live with some wrong suggestions). LinQ does disable all of them after installing, I only found out about it 1 day later and was happy to reactivate it again.

Some problems can't be fixed that easily. For example the Ctrl+. helper to do refactoring and adding namespaces, etc. does not work properly anymore. This isn't that bad for me because I use CodeRush for most refactorings anyway. But when a feature is missing you really need all the time, it really hurts and one of these features is the simple Add Namespace refactoring by Visual Studio 2005, which doesn't work anymore with LinQ. There was a plugin available some time ago for CodeRush, but it doesn't work anymore with the new version. After searching the internet and finding no solution other than to uninstall LinQ again, I improved my CR_Commenter plugin a little and it supports now adding namespaces ;-)


CR_Commenter v1.6 Installer download (81kB)
CR_Commenter v1.6 Source Code (72kB)

As you can see on the image a non-existing namespace will be added automatically if you just press Ctrl+., I also added some nice Action Hints for adding namespaces, adding comments and for generating regions. There are also more hotkeys around (Ctrl+1 for commenting, Ctrl+. or Ctrl+2 for adding a namespace, Ctrl+3 for creating a region around the current method, Ctrl+5 or Ctrl+F9 for updating the whole file).

More information about my CodeRush plugin CR_Commenter and the new improvements can be found on the CR_Commenter post.

Some links about LinQ in case you have not heard of it yet:


Update 2006-08-09: Added a couple of features (same download link, still v1.6):
  • Adding namespace does work now for older CodeRush versions too
  • Removed region feature (Ctlr+3), which already works fine with CodeRush
  • Added auto-updating on header comments every time you update your code (not only the date, but also the line numbers, file size, etc. is now updated)
  • Action hints are now only displayed if some code was changed

 Sunday, June 04, 2006
Sunday, June 04, 2006 1:17:12 AM UTC (  |  |  |  |  )
I updated the Freifunk-Hannover website and added support for Google Maps. The users can now add, edit, remove and view all the Wifi-Nodes on a cool dynamic map.

I used Atlas to perform some update features and to implement Google Maps (which is just using Javascript and has no support for ASP.NET directly). Atlas (which is Microsofts way of using Ajax/web 2.0 technology) is really cool because you can plug it into any existing ASP.NET page without much work (just a simple dll and couple of new keywords).

This is the website I implemented for Freifunk-Hannover:

I'm also very amazed by the cool new features of Ajax/Atlas/web 2.0, but still it doesn't feel right to wait for the brower sometime. I can life with it when it is just mail, but I don't think the browser is ready for any calender, contact, instant messaging or games in the near future. I hate delays, even the cool Google Suggest Beta, which gives you a nice autocomplete feature for google searches, is in no way as useful as any autocomplete or intellisense on your desktop. The main reason is just the delay and it doesn't allow as many features as desktop applications do. Anyway, dynamic web stuff with Ajax or Atlas is still very cool. Working with Atlas is often much easier than with normal ASP.NET, which is a good reason to use it right now :-)

Atlas technology:
 Saturday, May 27, 2006
Saturday, May 27, 2006 8:36:03 PM UTC (  |  |  |  |  |  )
Yesterday the newest issue of the german GameStar/dev magazine came out. The title story is "Bau dein eigenes Spiel" (Build your own game) and was written by me. The article explains how you can develop your own game with the Rocket Commander as an example.

More information can be found on the official GameStar/dev site. If you have a chance to pick up the magazine, go do it, lots of interessting stuff in there :)

My little boo plugin is coming in a working stage. I really hate all this try'n'error developing with the VS SDK, but I hope I don't have to go through it again (should continue to work, shouldn't it?). Maybe I can release an early version of the boo plugin next month sometime.

German GameStar/dev magazine:
 Wednesday, May 17, 2006
Wednesday, May 17, 2006 9:39:08 PM UTC (  |  |  |  |  |  )
Hi there. If you watched one of my webcasts and need a link or something, I can help you out :-)

Searching for more webcasts?


Rocket Commander Webcast Part 1 of 3: The Graphic Engine (16 May 2006)


Rocket Commander Webcast Part 2 of 3: Shaders (17 May 2006)


Rocket Commander Webcast Part 3 of 3: Creating your own Game Modification (19 May 2006)

 Monday, May 15, 2006
Monday, May 15, 2006 12:32:00 AM UTC (  |  |  |  |  |  )
I was a NDoc User in the past, but the support for .NET 2.0 is very bad and the project isn't updated anymore. There are a couple of hotfixes, but they don't really work with any of my .NET 2.0 projects including Rocket Commander (see here (msdn forums), here (.NET 2.0 fix) and here here (blog bla)).

I tried a couple of other tools, but they either cost too much or they just don't work. Today I tried the new version of Doxygen and yes it is not only capable of analysing .NET 2.0 code, but it produces also very nice outputs in many formats:

  • Plain Html
  • Html with Frames
  • Compressed Html (.chm)
  • LaTeX
  • Man pages (wtf? they are still in use?)
  • Rich Text Format (RTF, word style)
  • Xml

I just took all the Rocket Commander sourcecode and made a html help page, check it out here: abi/RocketCommanderSourceCode/index.html">http://abi/RocketCommanderSourceCode/index.html.

You can generate your own help, as you know the full source code of Rocket Commander is freely available. Doxygen is also open source and a great tool.

Btw: I'm currently using GIMP (GNU Image Manipulation Program, or: A photoshop knock-off). I'm not really happy with many of the choices the developers made (multiple windows always overlapping and losing focus, own stupid save dialog, not many hotkey binding per default), but its free and very powerful. At least it supports a lot more stuff than Paint.NET (where you can't even paint with a soft brush for some reason). So if you are still using Paint or Paint.NET, consider becoming a GIMP user :-)

Doxygen program:


abi/RocketCommanderSourceCode/index.html">Rocket Commander SourceCode with Doxygen:
 Saturday, May 06, 2006
Saturday, May 06, 2006 2:04:14 AM UTC (  |  |  )
Hey Guys, this is something totally different from the stuff I usually post here. My brother started this great project called Freifunk-Hannover (means free internet over wifi in hannover for anyone who wants to participate) and a lot of people have already joined. The Freifunk project is nothing new, it really kicked off in other cities (very popular example is Berlin with over 300 nodes), but there isn't anything like it in Hannover yet, where we live.

Anyway, I helped a little bit out and don't just provide internet and have a few people using my internet and sharing data, but I've also created some portions of the Freifunk-Hannover website. Of course with Asp.Net, the greatest stuff ever ;-)

Here you can see a little overview map I draw for the area I live in with all the people currently participating in Freifunk-Hannover:

If you live in Hannover and are interessted, check out Freifunk-Hannover (german), else you can always go to the Freifunk.net project website (german again) or international sites like WSFII or Fon.com.

 Wednesday, April 12, 2006
Wednesday, April 12, 2006 1:29:23 AM UTC (  |  |  |  |  |  )
Before I begin brabbling about my problems, first the good news: The DirectX April 2006 SDK came out yesterday. There is more new Direct3D 10 Beta stuff and more samples for XACT (thats for audio creation), etc. This is the news for Managed DirectX:

Managed DirectX 2.0 Beta Update

Microsoft is working on a new managed gaming framework which will target Windows and Xbox 360 known as the XNA Framework. The majority of what exists today as the Managed DirectX 2.0 beta will become a key component of the XNA Framework. Managed DirectX 2.0 will continue to ship as a beta in subsequent SDK releases of the DirectX SDK until a beta of the XNA Framework is made available. While we are striving to deliver a smooth transition from code written to use the Managed DirectX 2.0 beta, Microsoft can make no guarantees about the API compatibility between the Managed DirectX 2.0 beta and the upcoming graphics API’s in the XNA Framework. Microsoft will be providing guidance about the API differences as well as migration assistance as more information becomes available regarding the XNA Framework.

The following is an initial list of known changes which will exist between the Managed DirectX 2.0 beta and what Microsoft will deliver with the XNA Framework. This list will be updated as more information is available, and is as always subject to change.

  • Managed XACT and managed XInput will replace managed DirectSound and managed DirectInput respectively. Managed DirectSound and managed DirectInput will no longer be available in the XNA Framework. However, DirectSound and DirectInput will still be available for developers who choose to use Managed DirectX 1.1.
  • Managed DxDiag will not be available in the XNA Framework. DxDiag support will still be available for developers using Managed DirectX 1.1.
  • Microsoft is actively investigating how to bring forward functionality from Direct 3DX 9.0 into the XNA Framework. D3DX9 will still be supported in MDX 1.1
  • Please note that Managed DirectX 1.1 is fully compatible with the .NET Framework 2.0.
The XNA Framework will be supported on several architectures (including 64-bit) for both Windows and Xbox 360.

So what does this mean for us fellow Managed DirectX programmers? First of all: Forget MDX2, it will never get to any final version. If you need DirectX in .NET just use MDX1 for now. The XNA framework will replace MDX2 in the future, but it isn't here yet. And to confuse us .NET programmers even more there is now a managed Direct3D 10 wrapper (but like native Direct3D 10 it requires Vista to run). For me this means I will stay with MDX1 until XNA becomes useable.

Another thing I find very annoying is the fact that there is still no documentation for MDX2 and MDX1 is still in the "August 2005 state". I hope that's going to be better with XNA ... don't really know what Microsoft expect developers to do with a beta version like MDX2 with no documentation at all. Want to read more discussions about this DirectX release? Then check out this post from David Weller yesterday at gamedev.net.

Ok back to the topic about Quo Vadis: Sorry for posting so late, but I wanted to post my impressions and pics of the Quo Vadis last week after we drove back. Sadly my handy (mda pro) decided to stop working and I couldn't charge it up again. When connecting to the PC with USB the connection was only available for a couple of seconds and then everything went dead. Today I finally opened up the device and found out that the whole usb connector was broken and actually fell of the main board in my PDA. Tomorrow I will try to mess everything up by soldering it back together. If I'm not careful that's it for the device.

Anyways, the problem was I couldn't get the photos back and I have no idea who called my since last week and I don't care anymore ^^ today I got some of the pics on the memory card back to my PC with help of a card reader (I don't have one). But most of the pics are missing, I only got a few boring ones ^^

Quo Vadis Conference pics:
Driving to the Quo Vadis with
way to high HDR lighting.


One of the conference rooms.
This is were I held my talk
about .NET 2.0 too (room 3).


People at Quo Vadis


The autodesk booth


Chilling between the sessions.
On the right side you can also
see the Rocket Commander poster.
We presented and played RC there.


Sorry, don't have any more pics :(
 Tuesday, March 14, 2006
Tuesday, March 14, 2006 12:59:50 PM UTC (  |  |  )
We are back from the CeBIT 2006 and made some cool pictures as always.
You can check them out at www.exdream.com.

Here are some previews:


Welcome to the CeBIT 2006. As soon as you enter you can see the
announcement for the next CeBIT ^^ But it was a big fair on the
world biggest fair ground.


The consumer halls looked a lot like the Games Convention,
especially on the weekeend. There were not really much big
highlights, but a lot of little innovations.


Yeah, that's what I'm talking about. On this Games Convention
a lot of bab .. hey, wait a second, aren't we still on the CeBIT?
Anyways, nice chicks, especially from Speed Link and ATI.
Just put them in front of your products so I don't have to see them.

More pictures can be found at www.exdream.com ...

 Wednesday, December 28, 2005
Wednesday, December 28, 2005 3:44:01 AM UTC (  |  |  |  |  |  |  )
I'm working on a little other project right now and that will take a while before I can show anything. Its about a new programming language and testing out MSIL (.NET immediate language, looks like assembler) stuff.

I wanted to make a review of this year, so instead of thinking to much about it, here it goes. I will only talk about games, books or movies I know and saw, obviously this all is just my opinion! Some entries are older than this year, but I saw, played or watched them only this year.

Btw: I wrote this whole article (which is almost 40k in html, which I always use when writing blog entries) in a couple of hours and I have to say my keyboard layout I invented last year is really kicking off. I'm writing faster than ever and stay as relaxed as if I hadn't typed much at all.

Content

Best Games

The best game for me is still StarCraft, so lets talk about games that did come out this year.

Action games and others (only the best). In just the last 3 months a really big number of shooters did came out, all of them are really good. Strategy games are handled seperately below this section.

Battle Field 2 4/5: Not much to talk about here. This will be propably game of the year if voted by online gamers. It is a good solid online game, but a bit too time consuming and too realistic for me. I'm more on the fun side when playing a shooter. The predecessor Codename: Eagle (that is before Battle Field 1, back in the year 2000) had already a lot of the game play in it and was oriented more on the fun side. I still like to play it on LANs. Battle Field 2 is also a great game for LANs, if you have enough people.

Serious Sam 2 5/5: Serious Sam is just a great fun game. I especially like it because I can play it like Quake for a couple of minutes and then return to working. There are not much games around today to do that. Also the amazing mass of levels and cool ideas in this game are just great. It is also the best coop shooter ever and part 2 is as much fun as the first Serious Sam. The only thing a bit annoying is the video skip error in coop mode and that there are no times in the games were you can relax, it is action - action - action! I already played it from start to finish twice, really good job croteam (once mostly alone and once in coop again).

Quake 4 4/5: Hey now! I'm a big fan of all Doom and Quake games, I've played them all and they invented the whole shooter world today. Doom 3 was a disappointment for many people and Quake 4 looks exactly the same. However the gameplay is really good and except the fact that the first couple of missions are way to easy IMO the game gets really good and hard in the second half. It has a decent amount of levels and is a really good singleplayer shooter overall. The multiplayer part makes like in Doom3 no sense at all, I still can't understand why so much good singleplayer games force themselfs to implement a multiplayer which just can't work with this kind of a game (same think for Fear btw). The scenes in the first half of the game get really brutal, but if you know about Doom 3, you won't get shooked by Quake 4.

Fear 3/5: This game got me really exciting and the demo was a hell of a demo, one of the best shooter demos I've ever played. The first couple of missions are still good, but then it gets boring and more boring. You have seen all the graphical effects and buh ho the girl and that old man that appear in some corner or directly in front of you don't shock you anymore. The more I played the more bored I got, I haven't finished that game yet. And that is a really bad sign because I usually play every single game I like from start to finish. It reminded me a bit of Project: Snowblind, which got boring after a while too and I never finished it. Anyway, if you get shocked or like horror or action movies this game is for you (ok, you might need a powerful and fast computer too).

Call of Duty 2 4/5: Call of Duty 1 was a big success. I liked really don't like any World-War-II games because they are almost all the same and there are way too much games with this setting. However Call of Duty was different, it was fun to play and the missions were designed really good. The only thing of part 1 which annoyed me a little was the incredible short singleplayer (4 hours and it was already over). Call of Duty 2 is very similar to the first part, but includes new settings and exciting new graphical effects. Overall the game is produced really good. I haven't completed it yet, but I plan to play it soon. People who have played it liked it a lot. There are a lot of fan sites and stuff around, but I remember some strike some time ago because the community didn't want to wait any longer for the game SDK and said they want to stop playing CoD. Dunno what happend to that.

Guild Wars 3/5: Guild Wars is a really good MMORPG (massive multiplayer online role playing game) and a lot like World of WarCraft (which is also a nominee for the best game of this year for most RPG fans), but it doesn't cost 15 bucks each month. I tried it out in may or something, but it didn't motivate me enough. I only played to level 10 or so and then stopped playing because I had other things to do. Thats the main problem with RPG games these days, they take too much time and they are just too chaotic and not shooter like enough. I like the older games like Diablo2 or Sacred (btw: the Sacred addon which came out this year was fun too) much more, which are fun to play for a while and then I can throw them away.

Strategy Games (RTS):

Act of War 3/5: At the first look this game is all about graphics and effects, the videos. Then after the second look it is even worse, there is no good unit handling possible and almost no balance at all in the game. However, it was still fun to play the singleplayer (as short as it was) and overall it was an ok game. The multiplayer is due the missing balance and the immense amounts of hitpoints each unit kills not really fun. C&C players will like this game more than StarCraft or WarCraft gamers.

Armies of Exigo 3/5: This game did come out November 2004, but I had no time to play it back then (only the demo once). Like The Lord of the Rings RTS game (see below) it is very similar to WarCraft III, but IMO Armies of Exigo is way better despite the really bad success it had (almost noone knows about this game). Armies of Exigo was planned as progamer game, has some really decent videos and nice graphics (almost as good as LotR and way better than WarCraft III). However, all community sites have closed and there is absolutely noone playing online (and not offline either ^^ the marketing sucked even worse than for Arena Wars, and this is an EA Game). Anyway, it is still one of the best RTS games I played this year.

The Lord of the Rings: The Battle for Middle-earth 2/5: Basically this game is exactly the same as Armies of Exigo except the big name and the amazing marketing and success. I personally don't like this game at all. The singleplayer is boring as hell, every mission is the same and only the first couple of missions were made interessting. The multiplayer is even worse, there is no good balance and the gameplay itself is boring as hell with all the heroes and bunkering in bases. When I compare LotR online players (e.g. in the ESL or Giga leagues) with other RTS gamers (like WarCraft III or StarCraft) it is really sick: The LotR are sitting there playing with one hand only and clicking the mouse a couple of times per minute. On the other hand WarCraft III or StarCraft players use both hands and click like 50 times per second and almost destroy their keyboards while playing (which is also more fun to watch ^^).

Earth 2160 1/5: Another game where almost every screenshot looks like it is a shooter. Last year a lot of games like that did come out, all sucked. But the bad controls or the strange screenshots are not the problem of this game. The intensions and ideas for Earth are really good and the graphics look fine too, but the game is just no fun to play. The singleplayer is just boring as hell. You get the feeling like no of the designers plays any other RTS game. It is more fun to play Warcraft I or Dune 2 (which are almost 14 years old). The multiplayer makes absolutely no sense at all, it is very hard even to log on and when you finally made it there is noone around. I played online once or twice and it is really just crazy how imbalanced this game is. PC Game magazine claim this game has a great balance and when you actually trying to play it seriously it is like running against a wall. Tip: Choose the alien race and just build few brain bugs, you can't lose a game now. Better tip: Don't play this game at all. And don't ask me why this game has so many awards it doesn't deserve.

Age of Empires III 3/5: And finally a couple of month back a new Age of Empires game came out. The graphics are really good and it is one of the first RTS games ever to make good use of shaders and normal maps. It is a solid game and especially something for fans of the Age of Empires games. The Age of Empires games did never really convince me. Maybe I just don't like the setting, Sci-Fi or the present time is much more interessting to me. Other than that I havn't played AoEIII a lot yet, I can only tell you that the heroes idea and the extras you get from your hometown are really bad ideas IMO. While I would say AoE is more of a singleplayer game than a good balanced multiplayer game, the already big online community of AoE does tell me the opposite. There are already a lot of leagues with AoE in it.

As you can see I'm not very friendly to RTS games. I rather play older games like StarCraft, WarCraft III or even C&C Generals than any of the RTS games this year (yesterday I even played WarCraft I (1994) from start to finish, cool game ^^).

I don't know of any other RTS game that did come out this year, maybe I missed one? Btw: I don't count Tactical games like Panzers into strategy games. Neither do The Sims or games like The Settlers or Civilization count on my list ;-) I'm not saying these games are bad, I just don't play them and couldn't tell you if they are bad or really bad, hehe. Also I think Civilization was the best game in its time and The Settlers 1 was really great fun, but why do I have to play the same game over and over again every year? Its just boring and the new sequel games don't add anything exciting to it. Anyways, the sell like shit and people keep producing them ...

Ok, enough overview. I played few more games this year, but most of the games I just don't like and I uninstall them after a couple of minutes playing them. Other games are only small games or shareware and they are not worth standing next to this big games ^^

So whats the best game for me this year? On the shooter department it is Serious Sam 2, which has the greatest replay value (I didn't even finish Fear and I will not play Quake 4 again for a while). For the strategy games above I would say Act of War and Armies of Exigo were the best RTS games released this year. I don't play AoEIII, but compared to Act of War or Armies of Exigo it is much better produced and has better graphics, I guess most people will vote AoEIII as the best RTS game this year. But please don't mention Earth 2160 ever again :D Lord of the Rings will stay with us for a while, no matter of what I think or how good or bad the game actually is.

So why not make StarCraft the game of the year 2005? I played it more than any other game this year :D It is amazing how much comunity sites and leagues were created this year for this 8 years old game (GosuGamers.net, PGTour, ESL-Pro Bw, GGL AmeriCup, etc.).

Some links about top games this year:
Best of E3 2005
IGN PC Best of E3 2005
Top 10 2004 (more like Top 10 of all time)

Best Movies

Well, I watch some movies from time to time too, but I can't remember them a week later ^^ For this reason this section is really short. For a great movie site and I bet they will do some 2005 review too, take a look at www.rottentomatoes.com.

  • King Kong 4/5: I just saw it a week ago, so I can still remember. It is amazing that this movie cost 207 million dollars. It is a really stupid movie and somehow I expected too much. Once you relax and just "watch" the movie (if you don't fall asleep in the first half) it is actually a good action movie. The dinosauriers were fun and King Kong running around in New York was great too. Just don't talk about making sense ^^
  • Serenity 5/5: I'm a fan of the Firefly series, so it is no wonder that I like this movie, which is based on the Firefly series, which was canceled after 1 season 2 years ago. Basically the idea was to mix the wild wild west with a sci-fi theme in space. The characters are really interessting and it is just fun to watch, they don't take themself too serious like some of the Star-Trek series. Anyway, this movie is really good, also for non-fans, it is produced ok and the storyline is interessting and exciting too.
  • Harry Potter and the whatever this year 3/5: Well, I watched the first one and then skipped the other two and suddently Harry Potter became really old and some of the scenes (like the bubble bath scene) were really inappropriate IMO. For Harry Potter fans this is a good movies, for the rest of us, it is just ok.
  • The 40 Year Old Virgin 5/5: This is a really funny movie and I liked it.
  • Mr. and Mrs. Smith 4/5: I just like Angelina Jolie, so every movie with her in it has to be good. Well, don't remind me of Tomb Raider. Anyhow, this movie is actually fun to watch and has a funny plot.
  • Madagascar 4/5: A nice family comedy (I went with my little sister), but the amount of CGI movies the last couple of years is rather sickening. But if you only watch every 10th of them, they are actually good ^^
  • War of the Worlds 4/5: A lot of people really hated this movie. I can't understand why, it was a solid sci-fi movie and I really liked the idea to tell the story from a completly other perspective (not the usually 1 man kills all boring action shit). Maybe it was Tom Cruise, who is really stupid (ever heard him talk in an interview?), but he is a hell of an actor and I still think this movie is one of the better ones from Spielberg these years.
Ok, I can't remember more movies right now, who cares anyway :D

Best Software

Well, the award goes to Visual Studio 2005, there is no competion, next section please :D

No, seriously: For programmers Visual Studio 2005 is the greatest thing happend this year. Even the beta, which I start using at the beginning of this year was very useful and made me much more productive. Ok, lets try to think of anything else:

  • TestDriven.NET: This rather simple NUnit addin for Visual Studio is a great way to use unit testing in Visual Studio, you can also use the implemented Visual Studio Test System (which is good if you plan to use Visual Studio Team System in the future), but if you just have Visual Studio Express NUnit is your only good choice. Download it from www.testdriven.net. The TestDriven.NET Version 2.0 for Visual Studio 2005 is available since last month too, good stuff.
  • CodeRush: Not really a new tool this year, but it is still updated and the most useful Visual Studio addin for me. They just made a couple of cool tutorial videos for it a couple of days back. I've also written an plugin for it: CR_Commenter.
  • FX Composer v1.8: The best shader edit tool around and NVidia still keeps updating it. Even our graphic artists use it now, after hiding the code and just showing them the buttons and scene preview, they are happy and can use it just fine to finetune shaders.
  • IronPython: IronPython is the implementation of Python in .NET and it outperforms the original script language by the factor 2 or even better. I played a little bit with it after the PDC this year and it made my think of a couple of new ideas. I'm still a fan of Lua and think it is the better and easier choice for small programs or just saving small scripts. However, the work of the IronPython guys - who work at Microsoft now - is really amazing.
Can't remember more plugins, but I'm sure I used a lot more and tryed out a lot of stuff this year. Check out this list of Ten Must-Have Tools Every Developer Should Download Now (by MSDN Magazine). I will not go into detail about other useful programs and tools like Photoshop CS2, 3DS Max 8, Miranda IM, Skype, etc. there are better sites than mine for that :D

Best Programming Books

Graphics and Shader technologies:
  • Game Programming Gems 5 5/5: Like any other Game Programming Gems Book this one is no exception, it is just great. You can read it from front to back or use it as a reference if you look for solution to common game programming problems and even programming problems in general. It covers 7 sections from general programming and mathematics over AI and physics to finally Graphics, Network and Audio. This one is the most recommended game programming book series.
  • ShaderX4 4/5: Another book series, I read the first 3 and use them as a reference whenever I look for cool shader effects. The 4th volume isn't released yet (but is comming this or next week, I preordered it a while back). I expect the content to be as good as the predecessors. Wolfgang Engel is a good editor and I heard him speaking at the Quo Vadis developer conference, he knows a lot about shaders ^^.
  • GPU Gems 2 4/5: And another book series (does it ever stop?). Good stuff for NVidia developers (I like NVidia), but since most shaders work fine on ATI hardware too (except you tried to write PS3.0 when ATI still hadn't any cards for that), it is a good shader book. It covers some nice tricks and can be compared to the ShaderX books. Unlike the Game Programming Gems or the ShaderX books every page is printed in color and this makes it also a good colorful picture book where I can show effects to my artist guys, who won't even bother to look if it isn't a nice picture.
  • Shaders for Game Programmers and Artists 3/5: This is one of the first shader books I've read, but even for a first book I think it is too shallow. It jumps right into post screen shaders, which are very advanced IMO and then continues with much easier shaders. The book is all about ATIs RenderMonkey tool, which I don't like because the output is unusable (I need freaking fx files). It is still a good shader book and may be helpful for artists, beginners or people who just want an overview of shader technologies.
  • Programming Vertex & Pixel Shaders 4/5: This book is the best and most complete shader programming book for anyone seriously wanting to go into shader technologies. It is a bit harder to read than the previous one and sometimes way to mathematical instead of just having fun with shaders, but it pays of because you learn all basic shader technologies you will ever need. Again a book by Wolfgang Engel (like the ShaderX books, which are more advanced).

AI Programming:

  • AI Game Engine Programming 4/5: I just got this book together with Programming AI by Example few weeks ago, so I haven't read it all yet. But from the looks of it, it goes into a lot of shooter AI problems and discusses useful techniques, not only about AI, but also how to use scripts (Lua), how to write all kind of state machines and neural nets. The CD does not only contain all sourcecode and figures, but also a bunch of useful web bookmarks sorted by category, I like that :)
  • Programming Game AI by Example 4/5: This book is a bit more for beginners and immediate programmers than the rest of the books here. It is still a great book, but it "only" explains how to get into AI programming, as soon as you are ready to go, the book ends. The book starts with math and physics and does a good job explaining them. Then it goes to state driven design and continues with game agents. It does also cover questions about path finding, fuzzy logic and scripting. It is written by the founder of www.ai-junkie.com and written really good. My only critic is the fact that it is a good beginner book (and how likes to be considered as a beginner ^^). Anyway, I got it together with the previous book at the same price and thats really ok. Maybe it is good for a reference or to tell interns or wannabe AI programmers "Go read that".
  • AI Game Programming Wisdom I and II 5/5: Similar to Game Programming Gems this series is all about finding skilled professionals writing capters and articles, which do really help you out. Steve Rabin is the editor and did also edit the Game Programming Gems AI sections, he also is the creator of www.AIWisdom.com. Like the other two AI books I havn't read all of it (I'm so busy you know), but from what I've seem and read this is a really helpful resource when doing anything releated to AI programming.

General Development and Programming:

  • Refactoring: Improving the Design of Existing Code 4/5: Dirk Primbs said to me when I read this book on the flight to the PDC that you could probably dry up a cellar with this book. Maybe he is right, this book is all about crazy design pattern and rules. The first couple of capters are good to read and the rest is more of a reference. Anyway, the idea counts and refactoring is one of the most useful processes today in writing big programs. Good book, was written in 1999 and still applies 100%.
  • Rapid Development 4/5: This is a good book about software design and keeping schedules, but it is a bit too long and sometimes hard to read (you know I have this problem of reading only half the book and then never finding time to finish it ^^). It was written back in 1996 and the techniques described still apply, but some of the ideas are not as flexible as they could be with all this new technology around (e.g. when using agile methologies you have to plan differently). Still it is a very good book and it contains a couple of interessting stories from big products like MS Word and how they never kept their schedule ^^
  • Code Complete 2 5/5: One of the best books ever for any kind of programmer. It is about describing the process of developing software and helps you to find out the most efficient ways to manage your projects. It does go into great detail by explaining which data structures, which routines, which loops or which strategies are the most useful. It is one of the books I would recommend both to new programmers and to experienced programmers the same way. This book just helps anyone and should be on every programmers desk, not the book shelf.
  • Managing Agile Projects 4/5: What does Agile Projects mean? It is about scaling and customizing your project depending on the customer feedback . That sounds still to vage? Ok, it does mean that you don't plan every single bit before writing code, but to cut your project into smaller pieces and only plan the overview and then directly start developing. Now you can present a very early version really fast and with the help of feedback (customers or yourself) you can adjust your project instead of wasting time and resources developing something noone wants. You can also shorten specific parts of your project if you see there is no time left or other parts are more important, which again is not possible if you had planed every bit of your project in advance. It is a technique that goes hand in hand with Unit Testing and Refactoring (see above). This book does give a very broad overview and doesn't really talk about coding, its just methologies. Anyway, its a good book (not too long, this way I can actually finish it even with my book reading problem, see above, hehe).
  • Maximizing .NET Performance 5/5: I'm a performance freak. In the past I often tried to reimplement existing and working code into assembler just to see how much faster it could get. Later I found out that it is often much more important to work at a much higher level and rethink a problem until the solution is good enough to run very fast even if not optimized to every bit. This is still true and I still think that most performance problems come from bad coding or suboptimal algorithms and not because of the language. However to even think of good solutions you need some knowledge of what is possible, what is fast and how do certain things affect your performance. This book gives you a very useful inside of .NET and covers a lot of tricks and tips about .NET performance. It is also a good reference book.
  • Code Generation in Microsoft .NET 4/5: Last year I heard this DotNetRocks radio show and Kathleen Dollard was the guest. She talked about Code Generation using templates and other tricks. I immediatly bought this book. It is mostly written in Visual Basic, but a c# convertion does exist too. It does a good job explaining how to use Code Generation with the CodeDom, but does not go into detail about MSIL (which I was more interessted in). Anyway, the book is written nicely and I could learn a lot from it. The books presents an entire framework for building SQL bindings, stored proceduces and building WinForms from XML templates. It is also one of the first books on this subject (and maybe still the only one going into the CodeDom instead of MSIL).

Other:

  • Programming in Lua 5/5: This is THE book for Lua programmers. It is also available for free to download from lua.org. I first read the online version and then bought the book because it is so good and it helps to have a reference. Lua is a very simple script language. But sometimes it is so simple that you just don't know which keyword to use or what to type. Having a few useful code examples every other page is the biggest help ever. With help of this book I learned Lua in 1-2 days and could really do useful stuff with it (instead of writing just hello like most languages you learn in a short time).
  • Chris Crawford on Game Design 5/5: I recommend this book because it is easy and fun to read. Chris Crawford sound sometimes a little crazy and the fact that he hasn't released any games in the last couple of years might speak against him, but his experiences from the past (he talks about the 70th, 80th and 90th and games he has done and many other classic and inovative games. He goes also into detail what is missing in most games today and how to fix that (very theoretical, but his thoughs are interessting). Even if you are not smarter after reading this book, you will feel smarter.

Ok, that's it. I have a couple of more books lying around here (like Extreme Programming Adventures in c#, Physics for Game Developers or The Pragmatic Programmers), but I have not read them yet and can't give a good review about them, but they are all good books I guess. I also recommend The Odd Todd Handbook: Hard Times, Soft Couch, which has nothing to do with programming, but helps you sometime to get up and not end like him.

I hope you like my review of 2005. If not or you have anything to add and don't encounter the Internet Explorer bug not able to post comments, you can post a comment below ^^

Search

Projects I currently work on

MeinSport.de - German Sport Community Site

StudiHelp.de - German Student Community Site

Arena Wars Reloaded

New Arena Wars Website

My book: Professional XNA Game Programming (May 2007)

Dungeon Quest

Racing Game XNA Starter Kit

Speedy Racer Mod (from da book)

XNA Shooter

Some unannounced projects (games, websites, wikis, and my favorite: a new programming language)

See completed projects on the left side

Downloads: Games, Tools and Sourcecode

Rocket Commander, Mods and SourceCode

NormalMapCompressor v1.3

CR_Commenter

AbiKeyboardV9 layout and CountMostUsedKeys